--- title: Packages and aliases description: 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`](/chezmoi/scripts#10-packages), [`run_onchange_after_20-gh-extensions.sh.tmpl`](/chezmoi/scripts#20-gh-extensions) | | `.chezmoidata/aliases.yaml` | `.aliases` | `dot_config/shell/aliases.sh.tmpl` (bash and zsh) | | `.chezmoidata/skills.yaml` | `.skills` | [`run_onchange_after_25-skills.sh.tmpl`](/chezmoi/scripts#25-skills) | ## packages.yaml [#packagesyaml] 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`, `vicinae-bin` | `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. :::note AUR packages need `paru`. Without it the package script prints a warning listing the skipped AUR packages and continues. ::: ## aliases.yaml [#aliasesyaml] 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@` | | `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. ```sh dot_config/shell/aliases.sh.tmpl {{- 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: ```sh dot_bashrc [ -f "$HOME/.config/shell/aliases.sh" ] && . "$HOME/.config/shell/aliases.sh" ``` See [bash and zsh](/shell) 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` | ✓ | | `e.n` | `yazi ~/.config/niri` | `yazi ~/.local/share/chezmoi/dot_config/niri` | | `e.y` | `yazi ~/.config/yazi` | ✓ | | `e.t` | `nvim ~/.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](/shell/fish). :::tip To add an alias for every shell, add it to `aliases.yaml` for bash/zsh and to `20-aliases.fish` by hand for fish. ::: ## skills.yaml [#skillsyaml] Declares the agent skills installed by the Skills CLI. `skills.cli` is the pinned CLI (`skills@1.7.0`, run with `npx -y`), `skills.agents` the default install targets (`[universal, claude-code]`), and `skills.sources` a list of `{ source, skills, agents? }` entries: 110 skills across 42 entries. The full list, pinned sources, and add/remove workflow are on the [Skills](/ai/skills) page.