Crate dotpatina

Source
Expand description

The Patina CLI is a simple command line application written in rust for processing Patina template files and applying them to locations on the file system.

dotpatina takes templated configuration files (using handlebars templating), rendering configuration files, and applying them to target locations on the file system. This information is provided by a Patina toml file.

§Patina File

This is an example Patina file for git tooling.

# Metadata fields describe the Patina
name = "git-patina"
description = "A Patina for git tooling"

# Variables are free-form and can be defined for the whole Patina.
# Or, variables can be loaded from separate files from the command line.
[vars]
editor = "vim"

# A list of files define a template and target file.
# The template is a handlebar template (or plain file) that is processed.
# The target is the system location to store the rendered template.
[[files]]
template = "gitconfig.hbs"
target = "../../output/.gitconfig"

[[files]]
template = "lazygit.config.yml"
target = "../../output/lazygit.config"

§Variables Files

Variables can be stored in separate toml files. Variables are free-form and overlay on top of the base Patina variables.

This is useful when variables need to change based on the machine Patinas are being applied to.

[user]
name = "User Name"
email = "user@email.com"

§Template Files

Patina templates are defined using handlebars templates. Or, they can be raw files if no templating is required.

§Handlebar Template

Templates are rendered using the variables provided directly in the Patina file and passed as separate variables files. In this example, editor is provided in the Patina file but user.email and user.name are provided in a separate variables file.

gitconfig.hbs

[user]
    email = <{{ user.email }}>
    name = <{{ user.name }}>
[pager]
    branch = false
[core]
    editor = {{ editor }}
[pull]
    rebase = false
[init]
    defaultBranch = main
[fetch]
    prune = true
§Raw File

Raw files without templating work as well.

lazygit.config.yml

gui:
  showBottomLine: false
  showCommandLog: false
  showPanelJumps: false
  border: rounded
  showNumstatInFilesView: true

customCommands:
  - key: "U"
    command: "git submodule update --init --recursive"
    context: "files, localBranches, status"
    description: "Update submodules"
    stream: true

Modules§

  • cli 🔒
    The cli module defines the clap CLI interface for dotpatina. For detailed usage info, run
  • diff 🔒
    The diff module provides diffing behavior for files. This includes diff analysis and utilities for displaying diff results.
  • engine 🔒
    The engine module contains the core logic for dotpatina operations.
  • patina 🔒
    Core Patina data structure and functions.
  • templating 🔒
    Structures and functions for processing Patina templates. Templating uses the Handlebars templating language.
  • utils 🔒
    Miscellaneous utilities used throughout the crate

Functions§

  • main 🔒
    Main entry point for the application. This launches the CLI interface.