These dotfiles are managed with mise 2026.10.3 or newer, using one dotfile group per application.
Each group's directory mirrors $HOME: for example,
zsh/.zshenv deploys to ~/.zshenv, and
nvim/.config/nvim/init.lua deploys to
~/.config/nvim/init.lua. Groups use symlink-each, so
application-managed files can coexist with managed links.
Every group uses manifest = "git": only files in Git's index are deployed.
Gitignored or untracked files are not deployed. Herdr logs, session state,
and release notes are also explicitly excluded; Herdr manages these locally.
Run dotfile commands from this repository:
cd ~/dotfiles
mise dot status
mise dot diffEdit a linked file normally, then review and commit it with Git:
$EDITOR ~/.config/nvim/init.lua
git diff
git add nvim/.config/nvim/init.lua
git commit -m "nvim: update configuration"
git pushNo apply step is needed after editing an existing symlink. Run apply after
adding or moving tracked files, or after changing mise.toml:
mise dot apply --dry-run --verbose
mise dot applyFor deletions, exclusions, or deselected groups, review orphaned files and use the explicit pruning workflow below.
Install Git and mise 2026.10.3 or newer, then clone this repository at the expected path:
git clone git@github.com:Ret2Hell/dotfiles.git ~/dotfiles
cd ~/dotfiles
mise trust
mise dot apply --dry-run --verbose
mise dot apply
mise dot status --missingGroup roots are relative to the dotfiles.root setting, which this repository
sets to ~/dotfiles. If you clone elsewhere, update that setting, for example
in an ignored mise.local.toml.
Mise refuses to replace conflicting regular files or directories. Compare and
move any existing target out of the way before applying. Use --force only
after reviewing the dry-run and confirming that the existing target can be
replaced.
All groups apply by default. To select a subset, create an ignored
mise.local.toml in this repository:
[bootstrap]
dotfile_groups = ["git", "zsh", "nvim"]Available groups: git, herdr, hypr, kitty, nvim, omarchy,
opencode, scripts, spicetify, and zsh.
The scripts group deploys ~/setup-omarchy-plugins; the spicetify group
also deploys ~/setup.sh. Deselecting a group leaves its existing files in
place until you prune or unapply that group. A local selection replaces the
selection from other configs; it does not extend it.
For a new file belonging to an existing group, preview and capture it:
mise dot add --group zsh --dry-run ~/.zprofile
mise dot add --group zsh --no-apply ~/.zprofile
git add zsh/.zprofile
mise dot apply --dry-run --verboseCapturing with --no-apply leaves the live file unchanged. Because it is still
a regular file, move it to a backup outside the target path before applying,
then remove the backup once the linked file is verified:
mv ~/.zprofile ~/.zprofile.before-mise
mise dot apply
mise dot statusUse --group to make the destination package explicit: these groups all
target ~, so a new path could otherwise match several groups.
Alternatively, move the file into its package manually:
mkdir -p foo/.config/foo
mv ~/.config/foo/config.toml foo/.config/foo/config.toml
git add foo/.config/foo/config.tomlFor a new package, declare its group in mise.toml:
[dotfile_groups.foo]
root = "foo"
manifest = "git"Then preview and apply. No extra mapping is needed for new files or directories inside an existing group. If this machine selects groups explicitly, add the new group to that selection too.
Avoid committing credentials, logs, histories, caches, databases,
node_modules, or machine-specific application state. Adding a tracked file
to .gitignore does not untrack it.
Remove the source from Git:
git rm package/path/to/fileTo keep the local source instead, add an ignore rule and use
git rm --cached package/path/to/file.
Removing a file from a group's manifest, adding an exclusion, deselecting a group, or deleting its config can leave previously deployed files orphaned. Inspect and remove them explicitly:
mise dot status
mise dot apply --dry-run --prune
mise dot apply --prunePruning covers all orphaned groups and asks for confirmation. It removes only links that still point to their recorded sources, or copies that still match what mise wrote, unless forced. Unmanaged neighboring files are preserved. Back up live runtime state before removing its old managed links.
To remove one group's deployed files without deleting repository sources, even after removing the group from config:
mise dot unapply --group zsh --dry-run
mise dot unapply --group zshTo remove all currently configured links:
mise dot unapply --dry-run
mise dot unapplyRecreate links for selected groups with mise dot apply.
After pulling repository changes, inspect and deploy any added, removed, or moved files:
git pull --ff-only
mise dot diff
mise dot status
mise dot apply --dry-run --prune
mise dot apply --pruneChanges to files already linked are immediately visible and may not produce an apply diff.
Super+Shift+U opens Tuxedo centered and floating at 80% of the screen's width
and height, without changing btop's size. The scripts
group deploys ~/.local/bin/tuxedo-todo; use that command from a terminal too:
tuxedo-todo
tuxedo-todo add "Buy groceries +home"
tuxedo-todo lsTasks live directly in ~/dotfiles/tuxedo/todo.txt, archived tasks in
done.txt, and phone captures in inbox.txt. These are not deployed as file
symlinks: Tuxedo's atomic saves would replace those links. Run tuxedo-todo
instead of bare tuxedo to select these files from any directory.
Review and commit changes manually; nothing is automatically committed or pushed:
git diff -- tuxedo
git add tuxedo/todo.txt tuxedo/done.txt tuxedo/inbox.txt
git commit -m "tuxedo: update tasks"Tasks may contain personal information: review before pushing to a public repo.
Settings stay local in ~/.config/tuxedo/config.toml because phone capture
stores its secret share_token there. Locks and temporary files are ignored.
The repository remains the source of truth, so use normal Git history to inspect or restore configuration:
git log --oneline -- path/to/file
git diff HEAD~1 -- path/to/file
git restore --source=HEAD~1 -- path/to/fileReview the restored content and commit it normally. Mise's separate dotfile history watcher and synchronization repository are deliberately not enabled; they would duplicate this repository's Git history and remote workflow.
mise dot status # Show deployment state, including orphans
mise dot status --missing # Exit nonzero for unapplied active entries
mise dot diff # Show required changes
mise dot apply --dry-run # Preview deployment
mise dot apply # Deploy tracked files
mise dot apply --dry-run --prune # Preview deployment and orphan cleanup
mise dot apply --prune # Deploy and remove orphaned files
mise dot unapply --group zsh --dry-run # Preview removal of one group
mise dot edit TARGET # Edit a managed source