dotfile-theme-manager/README.md

2 KiB

dm

dm is a Rust CLI for switching between dotfile themes by symlinking a selected theme tree into the matching locations under $HOME.

Theme Layout

Themes are discovered from subdirectories under ~/dotfiles/themes.

~/dotfiles/themes/
  dracula/
    .config/
      alacritty/
        alacritty.toml
      nvim/
        init.lua
    .zshrc
  catppuccin/
    .config/
      alacritty/
        alacritty.toml

The directory name is the theme name. The relative path inside the theme becomes the target path under $HOME.

Examples:

  • ~/dotfiles/themes/dracula/.config/nvim/init.lua~/.config/nvim/init.lua
  • ~/dotfiles/themes/dracula/.zshrc~/.zshrc

Commands

dm list

List all themes discovered under ~/dotfiles/themes.

dm status

Show the active theme, when it was applied, and the number of tracked symlinks. Also reports any broken links.

dm apply <theme> [--dry-run] [--force] [--verbose]

Apply a theme by creating symlinks under $HOME.

  • --dry-run — print what would happen without making changes.
  • --force — overwrite unmanaged files (they are backed up first).
  • --verbose — print each action as it executes.

On conflict (an unmanaged file would be overwritten), apply aborts with a clear error message. Use --force to allow it.

On any mid-apply failure, all completed changes are rolled back automatically.

dm backup

Manually snapshot all currently managed files to ~/.config/theme-manager/backups/<timestamp>/.

dm rollback

Restore the backup set recorded in the last apply run, then clear state. Files that were newly created as symlinks (no prior content) are removed.

State

State is persisted to ~/.config/theme-manager/state.json. Backups live under ~/.config/theme-manager/backups/<timestamp>/.

Development

cargo build
cargo run -- --help
cargo test
cargo fmt
cargo clippy --all-targets --all-features -- -D warnings

Implementation order is tracked in TODO.md.