You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Personal dotfiles managed with chezmoi. One repo, several machines.
Install
chezmoi init --apply collieiscute -v
Supported platforms
OS
Package manager
Status
macOS
Homebrew
daily-driven
Arch / CachyOS
pacman + paru
daily-driven
Ubuntu / Debian / Linux Mint
apt
CI-tested only
Custom touches worth knowing
Theme
Catppuccin by default on macOS and non-Noctalia apps. On Linux, Noctalia renders Kitty, Alacritty, and Ghostty colors from the current wallpaper.
Theme files for kitty and alacritty are pulled from the upstream catppuccin/* repos via .chezmoiexternal.toml.tmpl with refreshPeriod = "168h"; Ghostty uses its built-in Catppuccin theme.
Font: JetBrainsMono Nerd Font across every terminal / bar / lock screen.
chezmoi quirks I keep tripping over (that this repo handles)
run_onchange_* scripts only re-run when their rendered content changes. Manifest files (fish_plugins, Brewfile) that aren't templated into the script bodies don't trigger reruns. Both are pinned via embedded sha256 hash comments — see run_onchange_after_1-setup-fish-and-its-plugins.sh.tmpl and install-packages_darwin.tmpl.
All apt-based distros share .packages.ubuntu.apt and the lazygit-from-GitHub fallback (lazygit isn't in Ubuntu apt).
Fonts use the Nerd Font patched family (JetBrainsMono Nerd Font), not the un-patched JetBrains Mono — drop that distinction and bar icons disappear.
Tmux
Prefix is C-z (so C-b stays free for vim).
Splits: prefix | (horizontal), prefix - (vertical), inheriting the current pane's path.
set-clipboard on + allow-passthrough → OSC 52 yank works over SSH without X11 forwarding.
Sessions auto-restore via tmux-resurrect + tmux-continuum on tmux start.
Kitty
Used on macOS specifically because AeroSpace tiles each Ghostty native tab as a separate window — Kitty's custom tab bar appears as a single AXWindow.
macOS loads Catppuccin Macchiato directly. Linux keeps Catppuccin as a fallback and then globincludes Noctalia's generated themes/noctalia.conf so wallpaper changes can update Kitty without Noctalia editing kitty.conf.
Alacritty and Ghostty use the same ownership model: chezmoi owns the main config, while Noctalia only rewrites generated theme overlays under each terminal's theme directory.
Hyprland
Desc-keyed Lua hl.monitor(...) overrides plus a fallback that selects the highest resolution and refresh rate available at that resolution.
Cursor: Catppuccin Mocha Teal (Hyprcursor) with Catppuccin Mocha Green as XCursor fallback.
Electron / fcitx5 / GTK theming env vars set centrally.
Wallpapers are deployed by chezmoi to ~/.config/wallpapers; Noctalia reads that path directly.
Noctalia is the Linux wallpaper/theme owner. App theme integrations should write generated theme files and reload apps, not mutate chezmoi-managed main config files.
Noctalia desktop/lockscreen widget placement is generated from monitor roles and ratios in 20-widgets.generated.toml.tmpl; run chezmoi apply after changing the monitor layout.
If widgets are edited in Noctalia's GUI, remove [desktop_widgets] and [lockscreen_widgets] from ~/.local/state/noctalia/settings.toml or fold the new ratios back into the template; state overrides win over declarative config.
Fresh Arch installs should use SDDM from archinstall first; chezmoi switches to greetd only after noctalia-greeter-session is installed and setup succeeds.
SDDM stays installed as the fallback display manager.
The switch script only enables/disables services; it does not stop/start the current graphical session.
If Noctalia Greeter shows a black screen, switch to a TTY with Ctrl+Alt+F2 and run sudo systemctl disable --now greetd.service && sudo systemctl enable --now sddm.service.
If TTY switching does not work, boot with systemd.unit=multi-user.target from GRUB, then run the same service switch.
OpenCode zh-TW linting: zhtw-mcp is configured as a local MCP server at ~/.local/bin/zhtw-mcp. Until upstream publishes releases, install it from source with make install so OpenCode can use the fixed binary path.
OpenCode Claude Code plugin: @khalilgharbaoui/opencode-claude-code-plugin is loaded through OpenCode's native npm plugin support; after changing the plugin list, run chezmoi apply /home/collie/.config/opencode/opencode.json and restart OpenCode.
AI extensions
home/.chezmoidata/ai.yaml is the single inventory for plugins, marketplaces, and shared skill sources; add entries there without editing templates.
Claude Code and Codex update configured marketplace plugins with their native startup updaters.
OpenCode installs configured npm plugins when its generated cache is missing; remove that cache before startup to fetch newer versions.
run_after_5-sync-ai-extensions.sh.tmpl bootstraps missing Codex plugins and copies every configured skill source to each destination.
Skill sources are copied in list order and must use unique skill names; removing inventory entries does not uninstall existing private state or copied files.
Review and trust new Codex hooks manually with /hooks.