Files
Prad Nukala ee355bcfd5 Initial import: chezmoi source for CachyOS + Umbriel + Noctalia
Imported from prdlk/dotfiles master (efdd827). Drops the niri, Hyprland/Omarchy,
macOS, and Blume docs-site layers; docs/ is plain Markdown.
2026-11-02 09:14:11 -05:00

9.4 KiB

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_15-tools.sh.tmpl, run_onchange_after_20-gh-extensions.sh.tmpl
.chezmoidata/aliases.yaml .aliases dot_config/shell/aliases.sh.tmpl (bash and zsh)
.chezmoidata/skills.yaml .skills run_onchange_after_25-skills.sh.tmpl

packages.yaml

One Arch manifest 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, yay/paru --needed). The lists are derived from what the configs actually invoke: tmux-palette items, television cable requirements, fish functions, ~/.local/bin scripts, and Umbriel bindings.

Arch

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

Group Packages
Shell and editors fish, neovim, helix, micro, tmux
Terminals ghostty (default), kitty
TUI tools (tmux-palette, television cables) yazi, lazygit, lazydocker, docker, docker-compose, btop, fastfetch, onefetch, television, serie, tig, gitui, tldr, navi, mdfried
VCS and forge git, github-cli, git-delta, diffnav, tea
Search and files fzf, fd, ripgrep, zoxide, eza, bat, jq, duf
Media and preview (yazi and tv deps) ffmpeg, ffmpegthumbnailer, poppler, resvg, imagemagick, chafa, 7zip, unzip
Remote mosh, sshfs, tailscale
Misc CLI mise, gum, glow, atuin, wget, starship, zsh-syntax-highlighting
Fonts ttf-victor-mono-nerd

packages.arch.aur, installed with yay -S --needed --noconfirm (or paru) on every machine: topgrade, portop. Names some installed package already provides are skipped, and yay is bootstrapped when no helper exists (10-packages).

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

Source Packages
pacman noctalia, polkit, xdg-user-dirs, xdg-terminal-exec; Wayland utilities wl-clipboard, cliphist, wtype, ydotool, grim, slurp, pamixer, brightnessctl, libnotify; apps nautilus, imv, mpv, evince, chromium, obsidian; strata runtime deps bubblewrap, desktop-file-utils, fontconfig, gstreamer, gst-libav, gst-plugins-base, gst-plugins-good, gtk4, gtksourceview5, gvfs, poppler-glib, xdg-utils
AUR (or a sync repo with the same name) tldraw-offline-bin, bibata-cursor-translucent (the Bibata_Ghost cursor), umbriel-git (pulls in xdg-desktop-portal-umbriel-git; the [cachyos] umbriel lacks window-move-by), herdr-bin, voxtype-bin; desktop apps beeper-bin, fastmail, 1password, brave-origin-bin, claude-desktop, spotify

strata (the folder handler) has no package; 15-tools runs its installer.

Shared

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

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.cargo lists suvadu, mandible (the tmux-palette "mandible" item runs ~/.local/bin/mandible-pick), and worktrunk (wt, git worktree management for parallel agent work). run_onchange_after_15-tools.sh.tmpl installs rustup when cargo is missing, then any crate cargo install --list lacks.

packages.shared.mise lists the global mise tools: ghq, bun, node, uv, opencode, crush, and omp as github:can1357/oh-my-pi (omp is not in the mise registry, so it uses the GitHub-releases backend, which installs the release binary as omp). The same script runs mise use -g for each one not yet in the global config (~/.config/mise/config.toml, local per machine), then mise install on the list. A tool already there keeps its pinned version. topgrade's mise step (mise upgrade) updates them.

Note

AUR packages need yay or paru. The package script bootstraps yay when neither exists; only when that is impossible (running as root with no repo shipping yay) does it print a warning listing the skipped AUR packages and continue.

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.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.

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
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:

dot_bashrc

[ -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 (this repo has no hypr directory)
e.k yazi ~/.config/kitty ✓
e.n not defined yazi ~/.local/share/chezmoi/dot_config/niri (this repo has no niri directory)
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.

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

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: 108 skills across 42 entries. The full list, pinned sources, and add/remove workflow are on the Skills page.