Skip to content

CollieIsCute/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

623 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Collie's Dotfiles

CI macOS Arch Ubuntu Debian Mint

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.

Per-host config switch

Two Hyprland machines (home + office) share one config but pin different monitors to ws1/2/3. Office hosts get desc-keyed workspace rules; home hosts use Hyprland's default per-monitor assignment (which already gives 1/2/3) — hand-rolled rules would otherwise reserve those slots even when the matching monitor isn't connected (see hyprland.lua.tmpl head comment for the underlying bug).

To mark a machine as office: edit ~/.config/chezmoi/chezmoi.toml

[data]
  location = "office"

Then chezmoi apply.

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.
  • cmd+option/Alt key bindings deliberately avoided (macOS 26 Tahoe intercepts them).
  • 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

  • 6 Lua hl.monitor(...) rules (3 home + 3 office) — desc-keyed so the right machine picks the right monitors automatically.
  • Cursor: Catppuccin Mocha Teal (Hyprcursor) with Catppuccin Mocha Green as XCursor fallback.
  • Electron / fcitx5 / GTK theming env vars set centrally.
  • Noctalia v5 owns the desktop shell layer (bar, launcher, notifications, wallpaper, lock screen, idle, screenshots, clipboard).
  • 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 moving between home/office monitor layouts.
  • 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.

Keymappings

$SUPER = Windows / Cmd key. $ALT = Option / Meta. $CTRL = Control.

Hyprland (Wayland)

Bind Action
SUPER+T open Kitty
SUPER+E open Nautilus
SUPER+C close window
SUPER+M exit Hyprland
SUPER+V toggle floating
SUPER+P pseudotile
SUPER+RETURN true fullscreen
SUPER+N toggle Noctalia notifications
SUPER+S toggle scratchpad workspace
SUPER+SHIFT+S move window to scratchpad
SUPER+SPACE Noctalia launcher
ALT+L Noctalia lock screen
ALT+J toggle split
ALT+P Noctalia region screenshot → clipboard
CTRL+RETURN maximize
SUPER+H/J/K/L focus left/down/up/right
SUPER+1..9,0 switch workspace 1..10
SUPER+SHIFT+1..9,0 move window to workspace
SUPER+SHIFT+H/L move window to prev/next monitor
SUPER+scroll cycle workspaces
SUPER+LMB/RMB drag move/resize floating window
XF86Audio* volume / mute / mic mute
XF86MonBrightness* screen brightness

Tmux (prefix = C-z)

Bind Action
prefix | split horizontal (keep cwd)
prefix - split vertical (keep cwd)
prefix v (copy mode) begin selection
prefix C-v (copy mode) rectangle toggle
prefix y (copy mode) copy + cancel
C-←/↓/↑/→ resize pane (smart-splits)
prefix I install plugins (TPM)
prefix U update plugins (TPM)

Kitty (macOS)

Bind Action
Cmd+T new tab
Cmd+W close tab
Cmd+Shift+]/[ next / previous tab
Cmd+Shift+→/← move tab forward / backward
Cmd+D new window (split)
Cmd+Shift+D close window
Ctrl+Shift+]/[ next / previous window
Cmd+Shift+J/K scroll line down / up
Cmd+Shift+N/U scroll page down / up
Cmd+Shift+Home/End scroll to top / bottom
Cmd+C / Cmd+V copy / paste
Cmd+Shift+F5 reload config
Cmd+Shift+F6 debug config
Ctrl+± / Ctrl+0 font size + / − / reset

Fish aliases

Alias Expands to
vi nvim (when nvim is installed)
buu brew update && brew upgrade -y && fisher update (macOS only)

Tools

Shell / multiplexer

  • fish — primary shell.
  • tmux — primary multiplexer.
  • zellij — secondary multiplexer (Catppuccin Mocha built-in theme).

Editor

  • neovim — LazyVim distro on top.

Terminals

  • kitty — macOS daily driver (AeroSpace-friendly tabs).
  • wezterm — cross-platform fallback.
  • ghostty — newer GPU terminal, Catppuccin Macchiato fallback.
  • alacritty — minimal GPU terminal.

Wayland stack (Hyprland)

  • hyprland — Wayland compositor.
  • noctalia — desktop shell: bar, launcher, notifications, wallpaper, lock screen, idle behavior, screenshots, clipboard, and control center.
  • sddm — bootstrap and fallback display manager for fresh Arch installs.
  • greetd + Noctalia Greeter — final Wayland login greeter after AUR packages are installed.
  • fcitx5 + chewing — Chinese input.

Display manager bootstrap and recovery

  • 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.

macOS extras

  • aerospace — tiling WM.
  • karabiner-elements — keyboard remapper.
  • raycast — launcher.
  • Desktop wallpaper is deployed by chezmoi to ~/.config/wallpapers and applied by run_onchange_after_3-configure-macos-wallpaper.sh.tmpl.

CLI tooling

Fish plugins (managed by fisher)

  • catppuccin/fish — colour theme.
  • edc/bass — run bash scripts in fish.
  • jorgebucaran/nvm.fish — Node version manager.
  • patrickf1/fzf.fish — fzf integrations.
  • pure-fish/pure — minimal prompt.

Tmux plugins (managed by TPM)

  • catppuccin/tmux — status-bar theme.
  • mrjones2014/smart-splits.nvimCtrl+Arrow resize, plays nice with neovim.
  • tmux-plugins/tmux-sensible — sensible defaults.
  • tmux-plugins/tmux-continuum — auto-save/restore on start.
  • tmux-plugins/tmux-resurrect — manual save/restore + nvim session capture.

Neovim — LazyVim core extras

  • zbirenbaum/copilot.lua — Copilot.
  • giuxtaposition/blink-cmp-copilot — Copilot source for blink.cmp.
  • neovim/nvim-lspconfig + p00f/clangd_extensions.nvim — LSP, with extra clangd polish.
  • nvim-treesitter/nvim-treesitter — syntax.
  • ibhagwan/fzf-lua — fuzzy finder.
  • sphamba/smear-cursor.nvim — animated cursor.
  • folke/snacks.nvim — utility collection.

Layout

home/                            # chezmoi source root (.chezmoiroot=home)
├── .chezmoidata/packages.yaml   # canonical package list (pacman + apt)
├── .chezmoiexternal.toml.tmpl   # auto-pulled theme files
├── .chezmoiscripts/             # run_once / run_onchange bootstrap
├── .chezmoitemplates/           # macOS install template (Brewfile pass-thru)
└── dot_config/                  # → ~/.config/...

About

write a script for me to set up the environment of new computer

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors