Configuration of my tools using Chezmoi.
  • Go Template 44.4%
  • Shell 17.8%
  • Python 11.1%
  • PowerShell 9.2%
  • GLSL 8.5%
  • Other 9%
Find a file
2026-10-17 00:28:46 -04:00
.chezmoidata git: send-email over SMTPS, with the password in the OS keychain 2026-10-14 15:14:50 -04:00
.chezmoiscripts add cline (pnpm) 2026-10-16 19:10:17 -04:00
.chezmoitemplates git: send-email over SMTPS, with the password in the OS keychain 2026-10-14 15:14:50 -04:00
.github ci(windows): run the apply from cmd 2026-10-14 20:01:26 -04:00
AppData nt: link %APPDATA%\gnupg to ~/.gnupg 2026-10-14 20:01:27 -04:00
docs git: sign send-email patches with patatt through init.templateDir 2026-10-14 15:15:24 -04:00
dot_android [no ci] Chezmoi auto-commit 2026-03-07 20:19:46 -05:00
dot_aws [no ci] Chezmoi auto-commit 2026-03-31 17:04:33 -04:00
dot_cargo [no ci] Windows refactor 2026-10-04 16:31:24 -04:00
dot_cline/data/settings cline credentials 2026-10-17 00:28:46 -04:00
dot_codex Configure Codex WakaTime tracking and Vim mode 2026-09-24 23:04:20 -04:00
dot_config wsl: relay the Windows gpg-agent, with npiperelay from winget's fork 2026-10-14 16:12:31 -04:00
dot_gradle [no ci] Windows refactor 2026-10-04 16:31:24 -04:00
dot_ipython IPython: TI-style Ans for a leading operator 2026-10-08 18:04:45 -04:00
dot_local wsl: relay the Windows gpg-agent, with npiperelay from winget's fork 2026-10-14 16:12:31 -04:00
dot_m2 [no ci] Chezmoi auto-commit 2026-10-03 18:35:42 -04:00
dot_ssh nt: say why the sshd setup is 102, and follow the number elsewhere 2026-10-12 23:59:48 -04:00
dot_vim/plugin Fix vim/nvim system clipboard, and bootstrap Vundle + coc.nvim 2026-08-27 10:24:39 -04:00
dot_wiiu [no ci] Chezmoi auto-commit 2026-04-20 21:30:31 -04:00
dot_x509 [no ci] Chezmoi auto-commit 2026-08-17 10:52:12 -04:00
private_dot_claude claude: stop managing ~/.claude/CLAUDE.md 2026-10-14 16:28:12 -04:00
private_dot_docker macOS: apple/container + socktainer on 26+ Apple silicon, colima elsewhere 2026-10-02 16:37:11 -04:00
private_dot_gnupg Era-pinned Homebrew for macOS back to Mojave, MacPorts, and prefix fixes 2026-09-28 19:38:03 -04:00
private_dot_secrets WSL oobe: make re-runs idempotent and read the Windows .bwrc correctly 2026-10-04 18:12:05 -04:00
private_Library [no ci] sops: age identity is ~/key.txt 2026-10-12 16:17:24 -04:00
tools brew: preserve checked failures under Bash 3.2 2026-10-12 17:09:10 -04:00
wireguard [no ci] Chezmoi auto-commit 2026-07-18 14:05:42 -04:00
.chezmoi.toml.tmpl nt: probe the machine at chezmoi init with Windows PowerShell, not pwsh 2026-10-14 16:31:07 -04:00
.chezmoiignore.tmpl cline credentials 2026-10-17 00:28:46 -04:00
.chezmoiremove CI: apply on GitHub's macOS 14/15/26 runners; tart; drop xmrig 2026-10-05 15:09:41 -04:00
.commit_message.tmpl [no ci] Chezmoi auto-commit 2026-01-29 13:21:40 -05:00
.dockerignore docker 2026-01-28 09:06:27 -05:00
.gitattributes git: sign send-email patches with patatt through init.templateDir 2026-10-14 15:15:24 -04:00
.gitignore Stop tracking .claude/settings.local.json 2026-08-27 10:24:59 -04:00
AGENTS.md git: sign send-email patches with patatt through init.templateDir 2026-10-14 15:15:24 -04:00
Dockerfile.fedora brew: fall back between the bottle mirror and ghcr.io 2026-10-12 15:55:03 -04:00
Dockerfile.ubuntu brew: fall back between the bottle mirror and ghcr.io 2026-10-12 15:55:03 -04:00
dot_bashrc Detect the platform with uname -s, not uname -o 2026-09-28 19:48:02 -04:00
dot_coc-extensions.txt Add clangd support to Vim and Neovim across hosts 2026-09-23 19:31:40 -04:00
dot_commonprofile.tmpl brew: fall back between the bottle mirror and ghcr.io 2026-10-12 15:55:03 -04:00
dot_commonrc.tmpl Detect the platform with uname -s, not uname -o 2026-09-28 19:48:02 -04:00
dot_doskey.mac [no ci] wsl-update: patch an instance up to HEAD and apply 2026-10-12 16:06:58 -04:00
dot_gitconfig.tmpl git: sign send-email patches with patatt through init.templateDir 2026-10-14 15:15:24 -04:00
dot_gitignore_global [no ci] Chezmoi auto-commit 2026-10-03 18:29:11 -04:00
dot_ideavimrc initial 2025-12-19 22:08:49 -05:00
dot_npmrc.tmpl credentials 2026-01-21 09:20:08 -05:00
dot_profile Fix graphical login: guard the exec in .profile, chsh the right user 2026-08-21 09:12:30 -04:00
dot_pypirc.tmpl dummy secret support 2026-01-27 21:56:37 -05:00
dot_tmux.conf.tmpl Era-pinned Homebrew for macOS back to Mojave, MacPorts, and prefix fixes 2026-09-28 19:38:03 -04:00
dot_vimrc Wire alker0/chezmoi.vim into Vundle and lazy.nvim (claude) 2026-09-15 17:05:26 -04:00
dot_wakatime.cfg.tmpl initial 2025-12-19 22:08:49 -05:00
dot_wslconfig [no ci] Chezmoi auto-commit 2026-08-21 14:23:07 -04:00
dot_zprofile [no ci] Chezmoi auto-commit 2026-06-12 09:36:14 -04:00
dot_zshrc Detect the platform with uname -s, not uname -o 2026-09-28 19:48:02 -04:00
empty_dot_minirc.dfl [no ci] Chezmoi auto-commit 2026-07-01 10:37:12 -04:00
empty_dot_ncduignores.tmpl [no ci] Chezmoi auto-commit 2026-02-13 15:20:19 -05:00
empty_dot_zshenv WSL: point SSH_AUTH_SOCK straight at the relay; ~/.zshenv back to empty 2026-10-03 00:06:57 -04:00
executable_autorun.cmd.tmpl autorun: warn when the last chezmoi apply is more than a week old 2026-10-05 00:30:50 -04:00
executable_dot_bootstrap.sh.tmpl Era-pinned Homebrew for macOS back to Mojave, MacPorts, and prefix fixes 2026-09-28 19:38:03 -04:00
LICENSE.md Update .chezmoiignore 2026-01-15 11:25:59 -05:00
modify_private_dot_claude.json Merge-manage JSON configs that mix state: modify_ + chezmoi:modify-template (claude) 2026-09-15 18:57:39 -04:00
private_key.txt.tmpl [no ci] key.txt: 0600 on POSIX hosts 2026-10-12 16:19:07 -04:00
README.md claude: stop managing ~/.claude/CLAUDE.md 2026-10-14 16:28:12 -04:00
symlink_dot_bash_profile [no ci] Chezmoi auto-commit 2026-02-28 11:07:55 -05:00
symlink_repositories [no ci] Chezmoi auto-commit 2026-03-10 21:36:14 -04:00
Winaero Tweaker.ini [no ci] Chezmoi auto-commit 2026-03-11 23:21:49 -04:00
yt-dlp.conf [no ci] Chezmoi auto-commit 2026-04-25 12:52:50 -04:00

Parker Edward "regulad" Wahle's Configuromicon

wakatime

Welcome to my configuromicon. This monolithic repository contains the configurations for most of the tools that I use on an everyday basis.

It's currently backed by chezmoi. Running chezmoi apply after a proper setup will enable deterministic restoration of my environment.

Additionally, it includes a couple custom tools that I use; for example, a pycalc3 command is provided that brings up an ephemeral IPython environment for quick CPE & physics calculations.

The default keyboard layout is of my Keychron Q6 Max. You should be able to replace the base.json with your keyboard's layout, but no guarantees are made.

My Tailscale configuration is available at tailscale-acls.

This project is AGPL-3.0 licensed. Small request: if you choose to contribute, please do so on the GitHub fork network. This is only a request, AGPL-3.0 does not obligate you to share private modifications unless they are used through a network (i.e. shell account).

PLEASE NOTE: While all files provided in this repository are AGPL-3.0 licensed, the final compiled docker image and workspace contain non-libre assets like the Android SDK.

Shell configurations

Supported environments:

  • macOS 10.15 (Catalina) and newer, Apple Silicon and Intel (w/ brew; releases Homebrew no longer bottles for get an era-pinned brew that still installs bottles, see docs/homebrew-older-macos.md)
  • Bluefin (Universal Blue's atomic Fedora desktop)
  • Ubuntu GNU/Linux >= 25.10
  • Fedora GNU/Linux >= 44
  • Windows 11 cmd

Brew will be installed on macOS and Linux if it is not already installed. This needs sudo: brew goes to its standard prefix, and the rootless install mode Homebrew itself does not support is not offered here.

Linux environments are preferred in the following order:

  1. Fedora
    • Why? DNF5 is fast, deterministic, and RHEL is the industry standard.
    • I trust Red Hat more to ship reliable and efficient software more than I trust Canonical.
    • Bluefin counts here: it is atomic Fedora. /usr belongs to the bootc image and is read-only, and rpm-ostree layering is an explicit anti-pattern on those images, so CLI tooling comes from brew rather than dnf. That split is what .chezmoiscripts/00-linux/run_after_022-brew-packages.sh.tmpl exists for, and it tracks which packages the image already provides so they aren't shadowed by a second copy earlier on PATH.
  2. Ubuntu
    • Why? Homebrew builds against Ubuntu, and not base Debian.

The Ubuntu and Fedora environments are available in Docker pours (see the packages menu on the right). Using latest will get you the newest Ubuntu image since fedora-based Docker images are pretty rare. Bluefin is not built here — it is a host you apply onto, not an image this repo produces.

The Debian setup has been migrated to Ubuntu to follow software that tests against Ubuntu.

Simialrly, RHEL is no longer supported in a first-class fashion. This setup is for desktop use.

Supported shells:

  • zsh (Preferred)
  • bash
  • cmd (NT-only)

I have no intent to support PowerShell: I don't want to spend half of the time in my shell wrestling with different eras of features and aliases that do not have the same signature as the builtins they shadow.

*nix Install

# Preferred: install with native package manager
apt/pkg/dnf/brew install chezmoi
# Alternative: install to .local/bin
sh -c "$(curl -fsLS get.chezmoi.io/lb)"
export PATH="$PATH:$HOME/.local/bin"
# run this instead on a macOS release older than 13 Ventura: chezmoi is a Go
# program, and each Go release drops old macOS (the symptom is dyld dying on a
# missing Security.framework symbol). Last chezmoi built before each cutoff:
# sh -c "$(curl -fsLS get.chezmoi.io/lb)" -- -t v2.72.0   # macOS 12 Monterey
# sh -c "$(curl -fsLS get.chezmoi.io/lb)" -- -t v2.64.0   # macOS 11 Big Sur
# sh -c "$(curl -fsLS get.chezmoi.io/lb)" -- -t v2.52.0   # macOS 10.15 Catalina

# Initalize & run first-time dependency install
CHEZMOI_USE_DUMMY=1 chezmoi init regulad
# CHEZMOI_USE_DUMMY instructs chezmoi to not attempt to apply any secrets.
chezmoi apply --exclude encrypted

# Configure bw for templating (bw is brew's bitwarden-cli, installed by the apply above;
# on an era-pinned macOS it is that era's version)
bw config server https://vw.regulad.xyz  # this is my server, obviously. replace w/ yours
bw login --apikey  # stdio needed

# Final apply with real secrets
chezmoi init
chezmoi apply ~/key.txt  # bootstraps age
chezmoi apply

NT Install

# Install dependencies via scoop
scoop install chezmoi git

# Initalize & run first-time dependency install
CHEZMOI_USE_DUMMY=1 chezmoi init regulad
# CHEZMOI_USE_DUMMY instructs chezmoi to not attempt to apply any secrets.
chezmoi apply --exclude encrypted

# Configure bw for templating
bw config server https://vw.regulad.xyz  # this is my server, obviously. replace w/ yours
bw login --apikey  # stdio needed

# Final apply with real secrets
chezmoi init
chezmoi apply %USERPROFILE%\key.txt  # bootstraps age
chezmoi apply

The autorun.cmd will automatically set up Clink and doskey macros (pipx, vi, chezmoi-cd, ssh-privpub) on each shell startup.

Notes

VSCode

Make sure you add any extensions you'd like to download to .chezmoidata/vscode.toml. The newest version of every extension listed there is installed whenever the list changes, and any installed extension not listed is uninstalled. The extensions a listed one brings in (extension pack members and extensionDependencies) are kept, and an install or uninstall that still fails after its retries fails the apply. Copilot needs no entry: VS Code ships GitHub Copilot Chat built in.

Packages

Remember to define the package in the correct hookscript under .chezmoiscripts/00-macos/, .chezmoiscripts/00-linux/ or .chezmoiscripts/00-nt/. How the hookscripts fit together is in docs/hookscripts.md.

Docs

Longer write-ups live in docs/ (not deployed to $HOME):

  • Hookscripts -- the preambles, script order, the brew prefix, C/C++ language support.
  • Homebrew on older macOS -- era-pinned brew for releases Homebrew no longer bottles for, the Catalina floor, brew update, MacPorts, bootstrapping 10.x.
  • Rosetta brew -- the x86_64 brew in /usr/local on Apple Silicon up to Tahoe 26, intel/arm, and nativeArch.
  • Bottle mirror -- every brew fetches bottles through a Nexus proxy of ghcr.io, except on GitHub-hosted runners.
  • Theos
  • SSH server on Windows -- the user-session sshd.
  • WSL -- wsl-deploy, wsl-enter and wsl-update.
  • git send-email -- SMTP passwords from the OS keychain, and patch signing with patatt through init.templateDir.
  • Containers -- which engine each host runs (wslc, apple/container, colima, podman) and the Docker Desktop and macOS podman removal.

TODOs

  • Nt: Write NT self-bootstrapping script
  • Doc: Emit warnings in vim and bash
  • Brew: Brew on permissionless systems w/ gentoo-style custom prefixes (removed 2026-09: the rootless path was only ever quasi-supported; brew now requires sudo and its standard prefix)
  • Nvim: Fix nvim newline behaviour
  • Nvim: Relative + absolute line numbers in nvim
  • Nvim: Addl. language server configurations in nvim
  • Hook: Break java LTS and minimum fedora version into separate vars
  • Shell: direnv-style watcher script executor with script verification
  • Repo: adopt .chezmoiroot and reorganize, so the source state lives in its own subdirectory and repository files (README, docs, CI, tools, Dockerfiles) need no .chezmoiignore entries to stay out of $HOME.
  • Git: Linux GCM. git send-email gets its SMTP password from the OS keychain on Windows, WSL (through the Windows GCM) and macOS, loaded there from Bitwarden on every apply, but native Linux has no helper for it and prompts on each send. Bluefin's image has gnome-keyring and git-credential-libsecret but no git-email, and brew's git has send-email but no libsecret helper.
  • Containers: no Docker Engine API socket shim exists for Windows yet. wslc keeps its dockerd inside its VM and exposes no socket or pipe to Windows (microsoft/WSL#40976), and has no compose (microsoft/WSL#40948), so act, testcontainers, docker compose and compose-based devcontainers have nothing to target on Windows. Revisit when wslc or a third-party shim serves one.
  • WSL: IPv6 default route via a localhost-bound WireGuard server on the Windows side, with a host-deterministic ULA and NAT66. Mirrored networking was the only mode that gave WSL IPv6, and .wslconfig moved to NAT; NAT provides no routable IPv6 and there is no setting that adds it.
  • CI: Windows test apply