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
pacman + paru
daily-driven
Ubuntu / Debian / Linux Mint
apt
CI-tested only
Windows
Scoop
CI-tested only
Custom touches worth knowing
Theme
Arch Linux uses Noctalia's wallpaper-derived light palette for Kitty, Alacritty, Ghostty, WezTerm, GTK 3/4, Qt, and btop.
Platforms without Noctalia keep the existing Catppuccin terminal themes. Kitty and Alacritty files come from the upstream catppuccin/* repos via .chezmoiexternal.toml with refreshPeriod = "168h".
Fish, tmux, Zellij, Lazygit, and cursor themes stay independent because Noctalia has no built-in adapter for them.
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.
Dropbox
Hyprland starts dropbox-cli headlessly when the command is installed (currently via AUR on Arch); other Linux hosts skip it. On a new machine, run env -u DISPLAY -u WAYLAND_DISPLAY dropbox-cli start in a terminal and open the printed URL.
Keep dropbox.service and dropbox@USER.service disabled; Hyprland is the only startup path.
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 and non-Arch Linux load Catppuccin Macchiato directly. Arch Linux loads only Noctalia's generated themes/noctalia.conf; there is no second palette or fallback competing with it.
Alacritty, Ghostty, and WezTerm use the same ownership model on Arch: chezmoi points the main config at Noctalia, while Noctalia owns only generated color files.
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 / Qt integration env vars set centrally. Noctalia applies GTK light mode and generated GTK/Qt colors through its built-in templates.
Noctalia Shell is installed on Arch and Ubuntu. Noctalia Greeter stays Arch-only; Ubuntu keeps SDDM.
Wallpapers are deployed by chezmoi to ~/.config/wallpapers; Noctalia reads that path directly.
Noctalia is the Arch Linux wallpaper/theme owner for apps with built-in adapters. App integrations write generated theme files and reload apps; chezmoi keeps their main configs pre-aligned so post-hooks do not cause drift.
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.
Voice dictation supports Arch Linux x86_64 and Apple silicon macOS. Select
voxtype-mode sensevoice for the CPU-only SenseVoice model or
voxtype-mode qwen-1.7b for the GPU-backed Qwen3-ASR model; missing models
download only when selected. Run voxtype-mode off before gaming to stop and
verify every managed ASR process, releasing the GPU. voxtype-mode --help
lists the same commands in Fish.
Linux uses the Hyprland F13 binding. On macOS, F13 is handled by VoxType;
allow Microphone and Accessibility access when macOS prompts for them.
AeroSpace (macOS)
Bind
Action
hold F13
Voxtype push-to-talk dictation
Cmd+Option+H/J/K/L
swap workspace windows left/down/up/right, keeping workspace numbers fixed
Cmd+Option+S
toggle the dedicated magic workspace
Cmd+Option+Shift+S
move window to the magic workspace
AeroSpace restores the swapped root layouts and window states where possible; its CLI cannot reconstruct nested container geometry.
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 and marketplaces; 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.
Shared user skills live in ~/.agents/skills, which Codex and OpenCode discover natively.