Everything runs Catppuccin Mocha, dark, with mauve (#cba6f7) as the accent —
no per-app themes, no light mode. fastfetch and other TUI apps without a theme
of their own inherit the palette from ghostty's ANSI overrides.
Touch points (a flavor switch touches exactly these):
| App | File | Carries color |
|---|---|---|
| ghostty | common/.config/ghostty/common.conf |
theme = |
| zed | common/.config/zed/settings.json |
theme, icon_theme |
| nvim | common/.config/nvim/lua/plugins/colorscheme.lua |
flavour |
| herdr | common/.config/herdr/config.toml |
theme.name |
| btop | common/.config/btop/btop.conf |
vendored theme file |
| waybar | linux/.config/waybar/mocha.css |
@import in style.css |
| fuzzel | linux/.config/fuzzel/catppuccin-mocha.ini |
include= in fuzzel.ini |
| swaylock | linux/.config/swaylock/config |
whole file |
| niri | linux/.config/niri/cfg/layout.kdl |
focus-ring colors |
Vendored files are verbatim from the official catppuccin ports — don't hand-edit
them. Future direction: a theme script here flips the waybar @import and
fuzzel include to sibling flavor files and rewrites the few remaining
references. Deliberately no home-manager; catppuccin/nix's home-manager modules
were considered and rejected for that reason.
GNU stow dotfiles for all machines, organized into per-scope packages:
| Machine | OS | Managed by | Stow packages |
|---|---|---|---|
| Work Mac | macOS | Homebrew | common mac work |
| Odin (home Mac) | macOS | nix-darwin via everything-nix | common mac personal |
| Thor (home PC) | NixOS | NixOS via everything-nix | common linux personal |
| Ivaldi (server) | NixOS | NixOS via everything-nix | common linux personal (optional) |
System-level config (packages, fonts, services) for the nix machines lives in
~/everything-nix — this repo only manages $HOME dotfiles.
common/ stowed everywhere — zsh modules (~/.config/zsh), starship, ghostty,
nvim, btop, fastfetch, wezterm, zed, pnpm, git ignore, herdr
mac/ stowed on both Macs — gnupg (pinentry-mac), zsh extras (darwin.zsh)
linux/ stowed on Linux — niri, zsh extras (linux.zsh)
personal/ stowed on non-work machines — personal pi agent-system
work/ stowed only on the work Mac — work pi agent-system, aws login,
zsh extras (work.zsh)
zsh has no native XDG support, so a two-line ~/.zshenv bootstrap points
ZDOTDIR at ~/.config/zsh; every other zsh file — .zshrc, modules and
all — lives there. .zshrc sources the shared modules, then whichever of
darwin.zsh/linux.zsh and work.zsh the stowed packages provided, so the
packages decide the machine's behavior.
Odin and Thor: git, zsh, stow. Ivaldi's user package set is deferred
until its server role is designed.
Work Mac (brew):
brew install stow starship zoxide fzf lsd bat fnm awscli aws-sso-util awsume k9s
brew install --cask font-jetbrains-mono-nerd-font ghostty zed obsidian raycast docker-desktopOdin / Thor: CLI tools (stow, starship, zoxide, fzf, lsd, ghostty, pnpm, …) are installed by everything-nix. Thor's Wayland desktop packages (Waybar, Fuzzel, and Swaylock) are installed by its host configuration. Ivaldi's package set is intentionally deferred. Two gaps to be aware of:
neovimandbatare not in everything-nix yet; the nvim config here is inert and thecatalias degrades gracefully until you add them
~/.gitconfig is machine-local so the work Mac can use a work identity:
git config --global user.name "Andrei Kukharau"
git config --global user.email "contact@druce.dev" # use work email on the work Mac
git config --global init.defaultBranch mainClone this repository to ~/.dotfiles, then stow the packages for the machine:
git clone git@github.com:drucedev/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
stow --no-folding common mac work # adjust per machine, see table above--no-folding makes stow create real directories and link only files, so
apps that write state into ~/.config/... never write into this repo. Use
the same flag if you ever unstow (stow -D --no-folding ...).
Machines stowed before the modular ~/.config/zsh layout still carry
~/.zshrc, ~/.zprofile, ~/.aliases and possibly ~/.zshrc.darwin,
~/.zshrc.linux, ~/.zshrc.work, ~/.aws-login as stow symlinks. After
pulling this repo they dangle (the package files are gone), and a dangling
~/.zshrc would shadow nothing but still clutter — remove them, restow,
and clean up the stale pre-XDG history file:
cd ~/.dotfiles && git pull
rm -f ~/.zshrc ~/.zprofile ~/.aliases ~/.zshrc.darwin ~/.zshrc.linux \
~/.zshrc.work ~/.aws-login ~/.zsh_history
stow --no-folding <packages> # see table above
./test/zsh.sh # sandboxed, safe to run anywhereThen open a new shell.
The work and personal Pi agent-system directories are self-contained because
Pi treats the real directory containing definitions.json as a trust boundary.
Keep the developer and jun/sen tier prose shared by both systems in sync.
Then open a new shell. zinit clones itself and its plugins on first run.
Verify the shell with test/zsh.sh — it builds a sandbox home, so it is
safe to run on any machine.
fastfetchexpects an optional logo at~/Pictures/logo.png; missing file just means no logo.- Ghostty keeps shared settings in
common/.config/ghostty/common.conf; the macOS and Linux packages provide the platform wrapper. macOS starts Ghostty maximized, while Linux leaves window state to the compositor. - The
uualias upgrades the whole machine and differs per package manager: brew (work), nix-darwin rebuild (Macs), NixOS rebuild (Linux).