Skip to content
abzy128Public

About

Use chezmoi

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

278 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

abzy's dotfiles

Cross-platform user configuration managed by chezmoi. Packages, services, and Zsh belong to the separate nix-abzy repository. These repositories are independent: dotfile changes do not change the flake revision.

Hosts and ownership

Host OS Type Git owner Desktop
bts-n0298 Linux workstation Home Manager Wayland
abzy-linux Linux workstation Home Manager Wayland
abzy-pn41 Linux server chezmoi none
abzy-m5 macOS workstation Home Manager macOS
abzy-rog Windows workstation chezmoi Windows

The PN41 has NixOS but currently no Home Manager integration; its Git configuration is therefore managed here. Zsh is never deployed by chezmoi. Neovim configuration is shared across all five hosts. Desktop-only files and Linux hardware helpers are excluded from servers and other OSs.

Checkout and apply

On an already configured machine, inspect chezmoi source-path. The checkout on the Mac is ~/dev/personal/dotfiles. Keep using that checkout.

On a new machine, after installing Git and chezmoi separately:

chezmoi init --source "$HOME/dev/personal/dotfiles" https://github.com/abzy128/dotfiles.git
chezmoi diff
chezmoi apply

The same commands work in PowerShell. The init template stores the checkout location in the local chezmoi configuration. .chezmoiroot selects home/ inside it.

For the already moved Mac checkout, no reinitialization is required to use the new layout. Review the diff before applying. Fetch changes separately with chezmoi git pull; chezmoi update both fetches and applies.

Host selection defaults to the lowercased hostname. Unknown hosts and OS mismatches fail before application. If the actual hostname differs, select an existing host in chezmoi edit-config:

[data]
machine = "abzy-rog"

This selects a profile, not an OS emulation: abzy-rog must run native Windows chezmoi. A WSL environment needs its own Linux host entry.

Declarative configuration

  • home/.chezmoidata/machines.toml: host types, host inventory, Git ownership, and feature overrides. A host's feature values override its type defaults.
  • home/.chezmoidata/features.toml: each feature's supported OSs and destination paths. home/.chezmoiignore filters disabled features.
  • home/.chezmoidata/git.toml: Git identity and signing preferences for chezmoi-owned Git. Keep shared preferences consistent with Nix's git.nix when intentionally changing both; neither repo imports the other.
  • home/.chezmoitemplates/machine.json: validates and resolves the selected host. chezmoi execute-template '{{ includeTemplate "machine.json" . }}' shows the effective profile.
  • home/: the destination-shaped deployment tree. Its ignore patterns use target names such as .config/hypr, not dot_config/hypr.
  • home/dot_config/nvim/: the canonical Neovim content, stored as plain files so chezmoi re-add works on Linux/macOS. home/AppData/Local/nvim/ holds generated include templates that deploy the same files on Windows.

To add a non-Nix Linux server, for example:

[hosts.new-server]
type = "server"
os = "linux"
nix = false
gitOwner = "chezmoi"

[hosts.new-server.features]
nvim = true
zellij = false

To add a feature, declare its supported OSs and destination paths, then enable it in a host type or host override. Hardware/GRUB scripts are disabled for every current host; the legacy helper feature is rejected on Nix hosts. Disabling a feature stops managing its files; it does not delete existing files. No removal scripts run automatically.

Windows: abzy-rog

The Windows profile deploys Git, Neovim, and native PowerShell profiles for PowerShell 7 and Windows PowerShell. It does not deploy Unix desktop files, require symlink privileges, or install packages. Optional PowerShell tools are initialized only when available.

Default Windows paths are assumed: %USERPROFILE%/AppData/Local/nvim and the profile directories under %USERPROFILE%/Documents. If Documents is redirected (for example by OneDrive), check $PROFILE and adapt the target mapping before applying; this configuration does not relocate Documents.

Git preserves signed commits and the personal/work key fingerprints from the Nix configuration. Provision Git/GPG and the signing keys separately. It does not force optional Nix-installed diff or LFS helpers onto Windows. Existing Neovim plugin/bootstrap behavior is retained; plugin/tool availability is separate from rendering and deploying these files.

../dotfiles-win is an unmaintained reference checkout. Its old hardcoded user paths, Chocolatey setup, and Vim configuration are not applied. Windows package management is deliberately outside this repository: no WinGet installation automation.

Editing and validation

AeroSpace is managed only on abzy-m5, through the macOS-only aerospace feature. home/dot_aerospace.toml preserves the current configuration, including its /opt/homebrew/bin/aerospace and /Users/abzy paths. The Hyper+Z ChatGPT popout binding also needs the shell and Swift sources under home/dot_config/aerospace/scripts. Its binary and log stay untracked. On a fresh Mac, after deploying these files, build the helper manually with the Xcode Command Line Tools installed:

xcrun swiftc "$HOME/.config/aerospace/scripts/popout-window.swift" \
  -o "$HOME/.config/aerospace/scripts/popout-window"

The helper requires macOS Accessibility permission. The macOS-only karabiner feature, enabled on abzy-m5, manages ~/.config/karabiner/karabiner.json: Caps Lock acts as Hyper when held and Escape when tapped, with Fn/Control swapped. Automatic backups remain local and untracked.

Lazygit is enabled on all hosts. Edit the shared plain file at home/dot_config/lazygit/config.yml; macOS and Windows include that content without symlinks. The default destinations are:

OS Lazygit config
Linux ~/.config/lazygit/config.yml
macOS ~/Library/Application Support/lazygit/config.yml
Windows %USERPROFILE%/AppData/Local/lazygit/config.yml

These follow Lazygit's defaults and assume the standard Windows LocalAppData location, with no custom XDG_CONFIG_HOME, LG_CONFIG_FILE, or --use-config-dir override. Copy edits made on macOS or Windows back into the shared source file. Disable the lazygit feature in a host override to stop managing it.

Edit Neovim content in home/dot_config/nvim (or edit ~/.config/nvim and chezmoi re-add), never the generated templates in home/AppData/Local/nvim. After adding or deleting files, run node scripts/sync-nvim.mjs to regenerate the Windows templates. On Windows, copy changes such as an updated lazy-lock.json back into home/dot_config/nvim by hand.

Run from this repository with Node 22+ and chezmoi installed:

node scripts/check.mjs
git diff --check

The checks render every host, verify ownership and OS exclusions, compare both Neovim deployments with the shared source, test invalid profiles and overrides, and dry-run application against an empty temporary destination. PowerShell syntax is checked when pwsh is available, and Neovim Lua syntax when nvim is available (without loading plugins). These are rendering checks, not native Windows application or Neovim plugin integration tests.

Zsh configuration lives in nix-abzy; chezmoi does not manage, remove, or replace shell files.

Original configuration authors and upstream attribution are retained in the individual files.

About

Use chezmoi

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages