██ ██
▄███▄██ ▄████▄ ███████ ▄▄█████▄
██▀ ▀██ ██▀ ▀██ ██ ██▄▄▄▄ ▀
██ ██ ██ ██ ██ ▀▀▀▀██▄
▀██▄▄███ ▀██▄▄██▀ ██▄▄▄ █▄▄▄▄▄██
▀▀▀ ▀▀ ▀▀▀▀ ▀▀▀▀ ▀▀▀▀▀▀
Cross-platform dotfiles for five machine profiles: lenovo, cloudtop,
macbook, hp, and hetzner (the aslan server hostname).
Managed with chezmoi, secrets age-encrypted, single branch.
Stack: Qtile · Zsh · Neovim (LazyVim) · Alacritty · Catppuccin Mocha
# 1. Install dependencies
pacman -S chezmoi age
# 2. Place age key (from backup / password manager)
mkdir -p ~/.config/chezmoi
cp /path/to/key.txt ~/.config/chezmoi/key.txt
# 3. Initialize — prompts for machine profile and secrets on first run
chezmoi init --source /path/to/this/repo
# 4. Preview, then apply
chezmoi-dry-apply # preview both user dotfiles and system changes
chezmoi apply # apply dotfiles and deploy system filesSystem files under system/ (e.g. /etc/zsh/zshenv) are deployed automatically
via a post-apply script with sudo. The system/arch/ subtree is applied only on
Arch Linux systems, and the system/hetzner/ subtree is applied only when the
machine profile is aslan/hetzner; it contains the server's Nginx,
monitoring, security, and service overrides.
To preview pending changes safely without mutating /etc, modifying files, or
reloading services, run:
chezmoi-dry-applyThis single command previews both normal chezmoi user dotfile changes
(chezmoi apply --dry-run --verbose) and system configuration changes.
Warning: Running
chezmoi apply --dry-runorchezmoi diffalone skips post-apply lifecycle hooks (run_after_system-deploy.sh.tmpl). Runningchezmoi apply --dry-runwill therefore never preview system files under/etcor/usr. Always usechezmoi-dry-applyto safely inspect both user dotfiles and system changes together.
To preview system configuration changes alone, run:
system-deploy.sh --dry-run # or: system-deploy.sh -nKey dry-run safety features:
- Worktree Source Detection: When invoked from inside a git feature worktree,
both
chezmoi-dry-applyandsystem-deploy.shautomatically detect and use that worktree's source templates instead of falling back to the main configured chezmoi source path. - Fail-Closed Protection: If
--dry-runis requested but the target template lacks explicit dry-run capability headers (SYSTEM_DEPLOY_CAPABILITIES), execution aborts immediately with an error to prevent accidental live mutation. - Guarded Destructive Cleanup: Decommissioned configurations and service removals
are reported as
[dry-run] would remove ...without deleting any files, and service reloads (such as Nginx) are skipped. SettingDRY_RUN=1in the environment also activates dry-run mode.
The former archnet-cfg repository remains useful for destructive Hetzner
installation, package bootstrap, and service-data migration. It must not also
deploy files managed by this repository.
- Features — configs, tools, machine-specific behaviour
- Profiles — profile detection, capabilities, and exclusions
- Keybindings — Qtile key reference
- Directory tree — repo layout explained
- Arch install guide
| Profile | Hostname | Platform / session | Battery | Cursor |
|---|---|---|---|---|
lenovo |
lenovo | Linux / Qtile Wayland | yes | 24px |
cloudtop |
cloudtop | Linux / Qtile X11 HiDPI | no | 48px |
macbook |
prompted | macOS / native desktop | yes | n/a |
hp |
hp | Linux / Qtile X11 | yes | 48px |
hetzner |
aslan | Linux / headless server | no | n/a |
The profiles are auto-selected for the lenovo, cloudtop, hp, and aslan
hostnames. macbook and unknown hosts use the profile prompt during
chezmoi init. See Profiles for all capability flags
and machine-specific behavior.
Pre-commit hooks run on every commit:
| Hook | Covers |
|---|---|
| black + isort | Python (bin/, qtile/, qtile-wl/) |
| ruff | Python linting + auto-fix |
| stylua | Lua (nvim/) |
| prettier | JSON, YAML, CSS, Markdown |
| shellcheck + shfmt | Shell scripts (bin/) |
| gitleaks | Secret detection |
pre-commit install # install hooks
pre-commit run --all-files # run manually