This repository is the reproducible source of truth for development tools and portable user configuration on Arch Linux. Chezmoi manages user files, Pacman and Paru install reusable packages, Mise installs development tools, and the bootstrap enables required background services.
Desktop-session experiments are intentionally local. Window-manager, display manager, input-method styling, bars, lock screens, notifications and wallpapers are not tracked or installed by this repository.
Installation notes and personal tool observations live under notes/.
They are versioned in Git but excluded from Chezmoi deployment.
sudo pacman -S --needed git base-devel
git clone https://github.com/JulyFinal/dotfiles.git ~/dotfiles
cd ~/dotfiles
./bootstrap --profile laptop-intelAvailable profiles:
laptop-intel: laptop power services, Intel microcode and graphics.laptop-amd: laptop power services, AMD microcode and graphics.desktop: no battery, backlight, laptop power or GPU-vendor packages.laptop: legacy alias forlaptop-intel.
Preview without changing the machine:
./bootstrap --profile laptop-intel --dry-runcd ~/dotfiles
git pull --ff-only
chezmoi diff
chezmoi apply
chezmoi verify
./doctorchezmoi diffpreviews destination changes.chezmoi applydeploys the repository state.chezmoi verifyexits non-zero when a managed file has drifted../doctorverifies editors, services, MCP and proxy runtime../tests/smoke.shvalidates the repository without sudo.
Edit a managed file through Chezmoi:
chezmoi edit ~/.config/kitty/kitty.conf
chezmoi diff
chezmoi applyImport a file that was edited in place:
chezmoi add ~/.config/kitty/kitty.confAdd a new application configuration or home file:
chezmoi add ~/.config/example/config.toml
chezmoi add ~/.gitconfig
chezmoi add ~/.local/bin/my-scriptUse a template when a file contains a home path, username or profile-specific section:
chezmoi add --template ~/.config/example/config.tomlUseful template values:
{{ .chezmoi.homeDir }}
{{ .chezmoi.username }}
Chezmoi source naming maps to destination behavior:
| Source name | Destination behavior |
|---|---|
dot_config/foo |
~/.config/foo |
dot_zshrc |
~/.zshrc |
private_foo |
private permissions |
executable_foo |
executable permissions |
foo.tmpl |
rendered as a template |
Run git status and inspect the diff before committing an imported file.
Stop managing a file while leaving the destination in place:
chezmoi forget ~/.config/example/config.tomlDiscard a destination-only edit and restore the repository version:
chezmoi apply ~/.config/kitty/kitty.confRestore a historical source file, then deploy it:
git restore --source=<commit> -- dot_config/kitty/kitty.conf
chezmoi apply ~/.config/kitty/kitty.confRoll back a whole commit without rewriting history:
git revert <commit>
chezmoi apply
./doctorGeneral repair sequence:
chezmoi doctor
chezmoi diff
chezmoi apply --force
chezmoi verify
./doctor--force overwrites destination conflicts, so always inspect chezmoi diff
first. Historical layouts remain available through Git history and tags rather
than being duplicated under an archive/ directory.
Managed state includes Kitty, Vicinae, Neovim, Zed, shell tools, development tool versions, portable package manifests and the local proxy service.
Do not add browser profiles, proxy subscriptions, gh/hosts.yml, pairing
keys, histories, tokens, passwords, private keys, caches or container
filesystems. Restore secrets, desktop-session configuration and device pairing
manually after bootstrap.
mihomo.service loads the private subscription provider and exposes a single
mixed HTTP/SOCKS endpoint on 127.0.0.1:10808. Use:
proxyctl status
proxyctl test
proxyctl restart
proxyctl logsUpdate or verify the private subscription with:
mihomo-subscription configure
mihomo-subscription testThe private ~/.config/mihomo/config.yaml is generated from the tracked
example and is not managed by Chezmoi or Git. Retired proxy clients are not
installed by the bootstrap.
The work OpenVPN profile is imported into Mihomo as a private file provider;
NetworkManager does not need to activate it. The server pushes comp-lzo no,
which OpenVPN implements as uncompressed stub framing. Mihomo 1.19.29 omits
that frame for no, so the generated provider uses comp-lzo: "yes" to emit
the compatible uncompressed frame. Configure and verify it with:
mihomo-openvpn configure work
mihomo-openvpn testThe generated provider contains the decrypted client key, is mode 0600, and
lives only under ~/.local/share/mihomo/providers/; it is never tracked by
Chezmoi. Traffic for 192.168.168.0/24 selects the WORK group, while all
other traffic continues to use the normal subscription PROXY group.
Install the official Mihomo DEB and packaged systemd service:
install-mihomo-ubuntuThe installer selects the current official release for amd64 or arm64 and
verifies the SHA-256 published by GitHub. The private subscription still needs
to be restored separately in /etc/mihomo/config.yaml.