The Arch OS-native layer — rolling-release, pacman + AUR, over the shared Core.
Explore the docs »
View Demo
·
Report Bug
·
Request Feature
Table of Contents
dotfiles-Arch is the OS-native layer for Arch Linux — one node in a
cross-platform dotfiles system. The shared Core (zsh, tmux, Neovim, git,
starship, mise) is authored once in
dotfiles-core and vendored under
core/ as a pinned, filtered copy, so a clone is self-contained. This repo adds only what
is genuinely Arch: pacman, the AUR, multilib, and mirror management — leaning
on Arch's deep official repos so there are no curl | sh fallbacks.
Arch is stamped from the dotfiles-Fedora
template per the porting matrix. The full docs live on the
documentation site.
The system is three layers, each building on the one below:
No new languages — this layer is shell and package config over Core's language stack.
An Arch box and Git. On a fresh or minimal install you first need stage-0
groundwork — a sudo-capable user, git, and a UTF-8 locale — before
bootstrap.sh can run; archinstall and ArchWSL already give you that. The
walkthrough is on the hub:
git clone https://github.com/dotgibson/dotfiles-Arch ~/dotfiles-Arch
cd ~/dotfiles-Arch
./bootstrap.sh
exec zshcore/ is a vendored copy and is already present in a clone — there is no
submodule step. bootstrap.sh is idempotent: it does a full pacman -Syu,
installs the package list, and symlinks Core + the Arch layer into place. Flags:
--dry-run (preview everything, change nothing), --links-only (re-link without
touching pacman), --no-flatpak, --only/--skip (wire a subset of module
groups). Run ./bootstrap.sh --help for the full list.
Local checks live in the root Makefile, which speaks the fleet-wide make
vocabulary (dotfiles-core#691): make lint runs the same gate as CI,
make test runs the test/ suite, make dry-run previews a full bootstrap,
make packages-check verifies every package name still resolves, make check runs
all three, and make secrets runs gitleaks. make on its own lists them.
make bootstrap-dry still works as an alias for dry-run.
Only what changes with the OS. The heavy lifting — the shell modules, editor, and prompt — comes from vendored Core; this repo owns the Arch specifics:
bootstrap.sh—pacmanprovision + Core/OS symlink wiring (idempotent)install/packages.txt— thepacmanpackage list (modern CLI stack)os/arch.zsh— clipboard + package-manager aliases →~/.config/zsh/80-os.zshMakefile— local entry points: lint, check, dry-run, test, package + secret checkstest/— the repo's test suite (make test; run in CI bypackages.yml)SETUP.md— the from-scratch author walkthrough (mirrored on the hub)core/— vendored fromdotfiles-core(read-only here; edit upstream)
The things that actually bite on Arch — the rolling-release rule (never
pacman -Sy <pkg> without -u), the un-automated AUR (paru), opt-in
multilib, and the absent transaction undo — are written up on the hub,
alongside the per-distro porting matrix:
This is an OS-native layer, so the contribution rule is a boundary rule:
- Never hand-edit
core/. It is a vendored copy ofdotfiles-coreand is overwritten on the next sync. Fix shared config upstream indotfiles-core, runmake auditthere, thenmake syncfans it out here. - Keep changes genuinely Arch. If it would be identical on every distro, it belongs in Core; if it changes with the operator, it belongs in a role repo.
- Green the lint gate. This repo's CI runs shellcheck +
bash -n/zsh -non the repo-owned shell (the vendoredcore/is excluded — it is gated upstream).
Bugs and ideas: open an issue.
Distributed under the MIT License. See LICENSE for more information.
Garrett Allen - @gerrrrt - garrettallen2@gmail.com - LinkedIn
Project Link: dotgibson

