Setup guide
How a fresh CachyOS/Arch machine becomes one of mine. Everything is driven by
just — run just from the repo root to
list every recipe (full list in the justfile reference).
Fresh machine
git clone git@github.com:rdlu/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
just full-auto # base packages, languages, CLI tools, fish, yazi, fastfetch
just full-auto-gui # the above + kitty + the niri/Noctalia graphical stackfull-auto chains: packages → dev-setup → cli-tools → fish-shell →
helix-editor → yazi-file-manager → fastfetch. The packages step is
interactive — it pauses so you can review /etc/xdg/reflector/reflector.conf
and add the Chaotic AUR include to /etc/pacman.conf.
On a host that loads the audio-production category, also add this under
[options] in /etc/pacman.conf. zam-plugins pulls in
zam-plugins-standalone, which ships one launcher entry per plugin (17 of
them) that clutter the app launcher; the plugins and standalone binaries are
unaffected. Reinstall the package afterwards to drop already-installed entries:
NoExtract = usr/share/applications/com.zamaudio.*If you are not running full-auto, run just packages first: it sets up
Flatpak/Flathub, reflector mirrors, the Chaotic AUR repository, and the
paru AUR helper that every other recipe uses.
The stow model
Configuration is deployed as symlinks with GNU Stow (--dotfiles mode:
dot-foo in the repo becomes ~/.foo).
- Base packages (stowed on every machine):
home git idea scripts terminal lazyvim vim systemd niri - Host overlays in
hosts/<hostname>/(stowed only on the matching machine): display layout, thermal sensors, machine-specific tools. The two hosts aredaisy(AMD) andxps(Intel).
just stow # symlink base + this host's overlay (auto-detected)
just stow-check # dry-run: show what would change, touch nothing
just unstow # remove all symlinks (host overlay first, then base)--no-folding is used so base and host overlays can both populate shared
directories (~/.config/mise, ~/.local/share/applications) without
tree-folding conflicts.
Services
just services-enableEnables the expected systemd user services (mpd, mpd-mpris, syncthing if installed, solaar) and Noctalia, the niri session shell (bar, notifications, lock, idle), which starts with the graphical session.
Tool versions: pacman + mise
Two deliberate layers:
- pacman/paru installs tools available in the repos (
just cli-tools). - mise pins versions for languages and tools
not in the repos: shared config in
terminal/dot-config/mise/config.toml, per-host additions inhosts/<hostname>/dot-config/mise/conf.d/<hostname>.toml.
Day to day
just update # paru -Syu, mise upgrade, fisher, yazi plugins, nvim Lazy sync
just doctor # health check: tools, login shell, host overlay, services, symlinksDocs
This site itself is part of the repo:
just docs-setup # one-time: install hugo, pandoc, typst and the fonts
just docs # regenerate markdown from configs, build HTML site + PDFs
just docs-serve # live-preview the site while editingtools/gen-docs.py (Python stdlib, no deps) re-reads tmux.conf,
binds.kdl, and the justfile and rewrites the generated blocks in the
markdown. Hugo with the vendored
Hextra theme builds the HTML site from
site/, which mounts docs/ as its content, into site/public/; GitHub
Pages serves it at dotfiles.dlu.one. Each page
starts with Hugo front matter (title, linkTitle for the sidebar,
weight for its order) and keeps its own # H1, which only the PDFs show.
pandoc + Typst render the PDFs into docs/pdf/, which the site links
directly; tools/pandoc-docs.lua drops the front matter there. The just
recipes are thin shims over the equivalent mise tasks (mise run docs,
etc.).