Personal dotfiles, managed with yadm.
yadm is git with $HOME as the work tree, so the dotfiles here (.zshrc, .config/* and the rest) live directly in $HOME, next to the scripts and package lists. Changes are made in a regular clone of this repo, then yadm pull brings them into $HOME. .gitconfig rebases on pull, and a rebase will not start while any tracked file has local changes, which .claude/settings.json always has once herdr adds its hook. After cloning, run yadm gitconfig pull.rebase false and yadm gitconfig pull.ff only so yadm fast-forwards instead. A pull whose commits change .claude/settings.json still stops while that file has local changes, so stash it first.
Run them on a fresh machine, in this order:
scripts/mac-settings(macOS only): applies macOS system settingsscripts/mac-applications(macOS only): installs apps with Homebrew fromBrewfilescripts/arch-applications(Arch only): installs packages withyayfromarch-packages.txtscripts/gnome(Arch only): applies GNOME settingsscripts/openwhispr(Arch only): sets up what OpenWhispr needs on GNOME to paste and to offer Hold modescripts/fonts: installs Hack Nerd Fontscripts/zsh: makes zsh the login shell and installs Oh My Zshmise install: installs the tools in.config/mise/config.toml, including theskillsCLI thatscripts/skillsneedsscripts/agents: registers MCP servers with Claude Code and OpenCode, and installs their herdr integrationsscripts/skills: installs agent skills fromskills.txt
scripts/mac-settings sets macOS defaults: software updates, time zone, firewall, screen lock and privacy, plus Dock, Finder, animation and input preferences. It needs sudo, and some settings apply only after logging out.
scripts/mac-applications installs Homebrew if it is missing, then runs brew bundle on Brewfile. Deleting a line from Brewfile does not uninstall anything.
scripts/arch-applications installs yay if it is missing and upgrades the whole system. It then installs every package in arch-packages.txt, marks them as explicitly installed, and removes orphaned dependencies. Deleting a line does not uninstall the package.
scripts/gnome sets GNOME defaults with gsettings: time zone, privacy, screen lock, clock, input devices, animations, workspaces, sounds and window focus.
scripts/openwhispr adds the user to the input group with sudo and enables the ydotool user service. The service starts at once if /dev/uinput is writable, and otherwise at the next login. The script also writes a hidden open-whispr.desktop to ~/.local/share/applications, unless the package ships one.
scripts/fonts downloads Hack Nerd Font into ~/Library/Fonts on macOS or ~/.local/share/fonts on Linux.
scripts/zsh makes zsh the login shell with chsh and installs Oh My Zsh.
scripts/agents registers the MCP servers it declares with Claude Code and OpenCode, whichever are installed (figma goes to Claude Code only, because Figma rejects OpenCode), and installs herdr's integration for each. It also stops OpenCode from loading Claude Code's skills. Re-running it is safe.
.agents/AGENTS.md holds the global instructions Claude Code and OpenCode read. .claude/CLAUDE.md and .config/opencode/AGENTS.md are symlinks to it.
scripts/skills installs every source in skills.txt with the skills CLI, taking every skill each source offers. The skills land in ~/.agents/skills, which yadm leaves untracked. Deleting a line does not uninstall its skills.