Personal CachyOS desktop bootstrap, dotfiles, and local AI-tooling repository for rebuilding a machine with the same packages, services, shell setup, user configuration, and repo-local helper tools.
setup.py: interactive machine provisioning script (14 steps).probe-hardware.py: captures target-machine hardware intohardware-info.toml.collect-secrets.py: gathers credentials from the source machine intosecrets/for USB transfer.media_transcribe.py: repo-local transcription tool exposed through themedia-transcribeCLI.packages-native.txt,packages-aur.txt: package inventories forpacmanandyay.vscode-extensions.txt: VS Code extensions installed by the setup script.services-system.txt,services-user.txt: systemd units to enable.chezmoi-source/: managed dotfiles and app configs.system-config/: machine-level config files copied into/etcand related paths.chezmoi-source/dot_local/share/system-ai/ufw/rules.txt: canonical UFW allow-list thatchezmoi applyenforces via theufwCLI.secrets/: gitignored directory with credentials for transfer (created bycollect-secrets.py).pyproject.toml,uv.lock: the repo-local Python tool environment managed withuv.
This repo assumes a fresh CachyOS install with Python 3.11+ and chezmoi used for user dotfiles. Hardware-specific packages are auto-detected from hardware-info.toml, credentials are transferred via a gitignored secrets/ directory, and local tools are expected to run through the repo-managed uv environment.
On the source machine (before copying to USB):
uv run python collect-secrets.py # gathers Claude, git, SSH credentials into secrets/On the target machine (from USB):
uv run python probe-hardware.py # detect hardware for driver auto-install
uv run python setup.py # run all steps or pick individual onessetup.py can run all steps or a single numbered step. It handles package installation, service enablement, uv tool installation, VS Code extension installation, secret staging, Tailscale setup, chezmoi setup, hostname/shell changes, and selected system config application.
The repo now bootstraps a mixed AI coding setup:
ollamaas the local model runtime, enabled as a system service.aider-chatas a terminal coding harness, installed throughuv tool.- Continue as a VS Code extension, configured via
chezmoi-source/dot_continue/config.yaml. - Default mixed-model configs that use
gpt-5for stronger reasoning andqwen2.5-coder:14bthrough Ollama for local autocomplete and lighter edits.
For repo-local tools:
uv sync
uv run media-transcribe --helpThe setup flow now includes an explicit Ollama model pull step. If you need to do it manually:
ollama pull qwen2.5-coder:14bHosted-model API keys are still user-specific. Set OPENAI_API_KEY in your shell environment before using Aider, and complete any key/sign-in prompts Continue shows on first launch.
For unattended Tailscale setup, store a Tailscale auth key in 1Password as system-ai Tailscale Auth Key before running uv run python collect-secrets.py. The target machine stages that key at ~/.local/state/system-ai/tailscale-auth-key.txt, passes it to tailscale up via an environment variable instead of embedding it directly in the command line, and deletes the staged file after a successful login. If no staged key is present, setup.py falls back to the normal interactive browser login flow.
Most tools are moving toward a common CLI shape with --json summaries and --log-format text|json support so AI agents and shell automation can consume them reliably.
- Keep the current Python scripts practical for CachyOS/Linux today.
- Structure inventories and shell-outs so Debian and macOS support can be added later without a rewrite.
- Gradually migrate provisioning intent toward declarative tools such as Ansible, and possibly Terraform where it fits, while keeping this repo as the source of truth.
- Review generated hardware data before installing GPU, microcode, or kernel-related packages.
- Expect privileged operations:
pacman,systemctl enable, copying into/etc, and regenerating initramfs. hardware-info.tomlis generated per-machine; review before committing host-specific data.- Applying
chezmoiorsystem-config/changes can overwrite existing local config.
Use these checks before committing changes:
uv run python -m py_compile setup.py
uv run python -m py_compile probe-hardware.py
git diff --checkFor dotfile changes, preview with chezmoi diff before applying.