Skip to content
dots
Esc
↑↓navigate↵open⌘Jpreview
On this page

Packages and aliases

The .chezmoidata YAML files that declare every installed package and every shared shell alias, and how they render.

Files in .chezmoidata/ are merged into chezmoi’s template data on every run. Nothing in the directory is written to $HOME; the data only reaches the machine through templates and scripts.

File Data key Consumed by
.chezmoidata/packages.yaml .packages run_onchange_before_10-packages.sh.tmpl, run_onchange_after_20-gh-extensions.sh.tmpl
.chezmoidata/aliases.yaml .aliases dot_config/shell/aliases.sh.tmpl (bash and zsh)

packages.yaml

One manifest per platform, plus a shared block. Any edit to the file changes the hash embedded in the package script, so the next chezmoi apply re-runs the install. Installs are idempotent (pacman --needed, paru --needed, brew install on already-installed formulae).

packages.arch.pacman, installed on every Linux machine with pacman -S --needed --noconfirm:

Group Packages
Shell and editors fish, neovim, tmux, micro
Terminal kitty
TUI tools yazi, lazygit, lazydocker, btop, fastfetch
VCS and forge git, github-cli, git-delta, diffnav
Search and files fzf, fd, ripgrep, zoxide, eza, bat, jq, duf
Media and preview (yazi deps) ffmpeg, ffmpegthumbnailer, poppler, resvg, imagemagick, 7zip, unzip
Misc CLI gum, glow, atuin, wget, starship, zsh-syntax-highlighting
Fonts ttf-victor-mono-nerd

packages.arch.aur, installed with paru -S --needed --noconfirm on every Linux machine: topgrade.

packages.arch.desktop, added only for roles desktop and laptop:

Source Packages
pacman niri, xdg-user-dirs
AUR noctalia-shell

packages.darwin.brew, installed with brew install:

fish, neovim, tmux, yazi, lazygit, lazydocker, btop, fastfetch, git, gh, git-delta, fzf, fd, ripgrep, zoxide, eza, bat, jq, duf, ffmpeg, ffmpegthumbnailer, poppler, resvg, imagemagick, sevenzip, gum, glow, atuin, starship, zsh-syntax-highlighting, topgrade

packages.darwin.cask, installed with brew install --cask: kitty, font-victor-mono-nerd-font.

Compared with Arch, macOS has no micro, diffnav, unzip, or wget, and gets topgrade from Homebrew instead of the AUR. The role does not change the macOS list.

packages.shared.gh_extensions, installed by the gh-extensions script on every OS:

Extension Purpose
davidraviv/gh-clean-branches gh clean-branches: delete local branches whose upstream is gone
prdlk/gh-commit gh commit
dlvhdr/gh-dash gh dash: PR and issue dashboard
meiji163/gh-notify gh notify: notifications in the terminal

packages.shared.go is an empty list. packages.shared.cargo lists suvadu. No script in the repo reads either key; they document intent only, and cargo installs are kept current by topgrade’s [cargo] step.

aliases.yaml

The single source for aliases shared across shells. Each entry has a section and a list of { name, cmd } items.

Editors / file managers

Alias Command
e nvim
e.d cd ~/.config/dotstate/storage/Rogz/.config && yazi
e.f cd ~/.config/fish && yazi
e.k yazi ~/.config/kitty
e.n yazi ~/.config/niri
e.v yazi ~/.config/nvim/lua
e.y yazi ~/.config/yazi
e.t nvim ~/.config/tmux/tmux.conf
hx helix

Quick directory jumps

Alias Command
cdc cd ~/.config && yazi
cdd cd ~/Developer && yazi
cdk cd ~/Documents/Knowledge && obsidian
cdl cd ~/.local && yazi
cds cd ~/.local/share/services && ls
cdw cd ~/Downloads && yazi

Tools

Alias Command
dd lazydocker
gg lazygit
ff exec fish
npx bunx
sm sudo micro
sd ssh prad@<lan-host>
oc opencode
dss dotstate sync
fabric fabric-ai
bk bead-kanban
sua shelly upgrade-all -n
lc leetcode
tk task

dd shadows coreutils dd in interactive shells.

How aliases render

bash and zsh

dot_config/shell/aliases.sh.tmpl renders to ~/.config/shell/aliases.sh. Because it is a template it is written as a real file, not a symlink; edit the YAML and run chezmoi apply to regenerate it.

{{- range .aliases }}

# {{ .section }}
{{- range .items }}
alias {{ .name }}='{{ .cmd }}'
{{- end }}
{{- end }}

After the generated block the file adds shell-specific pieces that are not in the YAML:

Name Definition
cpy / pst wl-copy / wl-paste when wl-copy exists, else pbcopy / pbpaste when pbcopy exists
q Function: if $YAZI_ID is set and ya exists, runs ya emit quit so the parent yazi also exits, then exit
celar, claer Typo guards for clear
ls eza --icons, when eza is installed

~/.bashrc and ~/.zshrc source it for interactive shells:

[ -f "$HOME/.config/shell/aliases.sh" ] && . "$HOME/.config/shell/aliases.sh"

See bash and zsh for the rest of those files.

fish

dot_config/fish/conf.d/20-aliases.fish is not a template. It is a hand-maintained plain file (symlinked into ~/.config/fish/conf.d/) whose header says it is generated from the YAML; the YAML header likewise names a 20-aliases.fish.tmpl that does not exist. The fish file has drifted from aliases.yaml:

Alias aliases.yaml (bash/zsh) fish
e.d cd ~/.config/dotstate/storage/Rogz/.config && yazi not defined
e.f cd ~/.config/fish && yazi cd ~/.local/share/chezmoi/dot_config/fish && yazi
e.h not defined cd ~/.local/share/chezmoi/dot_config/hypr && yazi
e.k yazi ~/.config/kitty yazi ~/.local/share/chezmoi/dot_config/kitty
e.n yazi ~/.config/niri yazi ~/.local/share/chezmoi/dot_config/niri
e.y yazi ~/.config/yazi yazi ~/.local/share/chezmoi/dot_config/yazi
e.t nvim ~/.config/tmux/tmux.conf nvim ~/.local/share/chezmoi/dot_config/tmux/tmux.conf
cdd cd ~/Developer && yazi not defined
,, not defined cd ~/.local/share/chezmoi && yazi
.. not defined cd ..

fish-only Bun aliases:

Alias Command
br bun run
br.d bun run dev
br.b bun run build
br.t bun run test
bi bun install
bg bun install -g (shadows fish’s bg job-control builtin)
bx bunx

Every other YAML alias (e, e.v, hx, cdc, cdk, cdl, cds, cdw, and the whole Tools section) is defined identically in fish. The file ends with the same extras as the sh version: cpy/pst clipboard detection, the q function, and, in interactive sessions only, celar/claer and ls → eza --icons. clear itself is an autoloaded function (functions/clear.fish), which is why it is not aliased. See fish.

Was this page helpful?