A cyberpunk/netrunner themed, keyboard-driven environment managed with chezmoi. One source tree renders per-machine configs for four targets:
- CachyOS Linux — Hyprland desktop
- macOS — CLI stack + GUI apps via Homebrew
- Android — Termux
- Parrot OS (HTB edition) — lean CLI stack on a Debian VM
- Unified cyberpunk palette — the same hardcoded color scheme is carried
across the shell prompt, Git, and every TUI. The canonical reference lives in
color_palettes/cyberpunk/palette.html. - Hyprland desktop — configured in Lua, driven by Noctalia (a native Wayland desktop shell that provides the bar, launcher, control center, notifications, lock screen, wallpaper, and screenshot toolkit).
- Fish shell with a custom cyberpunk prompt and per-OS branching.
- Helix + language servers for LSP-powered editing.
- Cross-platform templating — a single repo that renders correctly on Arch
and Debian Linux, macOS, and Termux from
.chezmoi.os/.chezmoi.osRelease.id.
Note: These are my personal dotfiles. You'll need to update user-specific information in configs like Git (name/email), backup remotes, paths, and any API keys or tokens.
gitchezmoi- SSH keys configured with GitHub (for forking)
- Fork this repository to your GitHub account
- Install
gitandchezmoi - Generate an SSH key:
ssh-keygen -t ed25519 -C "your_email@example.com" - Add the SSH key to GitHub
- Run
chezmoi init <YOUR_USERNAME> --ssh - Run
chezmoi apply - Customize configs to your preferences
On first apply, the OS-specific install script
(.chezmoiscripts/run_onchange_*install-packages-<os>.sh.tmpl) installs the
matching toolchain for your platform.
| Task | Command |
|---|---|
| Initialize & apply (SSH) | chezmoi init <GITHUB_REPO> --apply |
| Pull updates | chezmoi update |
| Inspect changes | chezmoi diff |
| Apply local changes | chezmoi apply |
| Render one file | chezmoi cat <FILE> |
| Edit a tracked file | chezmoi edit <FILE> |
| Start tracking a file | chezmoi add <FILE> |
| Jump to source repo | chezmoi cd |
Desktop — Linux / CachyOS
| Tool | Key Files (chezmoi paths) |
|---|---|
| Hyprland | dot_config/hypr |
| Noctalia | - |
| cliphist | - |
Hyprland is configured in Lua — hyprland.lua loads the modules under
dot_config/hypr/config/*.lua (binds, animations, window rules, monitors,
workspaces, autostart, …). Default apps: kitty, dolphin, zen-browser,
helix, gnome-calculator.
Noctalia's own config (~/.config/noctalia/config.toml) is not tracked here —
it's managed through the shell's settings UI. hyprland.lua ends with
require("noctalia").apply_theme() so the generated palette reaches Hyprland;
leave that line in place.
Parrot OS (HTB edition)
A deliberately lean target: shell, editor, git, core CLI, and the Go/Rust/gh toolchains — no desktop, and none of the TUI apps that need a personal account or secret to be useful.
| Tool | Key Files (chezmoi paths) |
|---|---|
| fish | dot_config/fish |
| Helix | dot_config/helix |
| bat | dot_config/bat |
| eza | dot_config/eza |
| fastfetch | dot_config/fastfetch |
Debian renames several binaries: bat → batcat, fd-find → fdfind, and
helix → hx. dot_config/fish/conf.d/modern-cli.fish aliases around all
three for interactive use, while $EDITOR and git core.editor are templated
to the real hx binary — an alias is a fish function and can't serve either.
gh is not in the Debian archive, so
.chezmoiscripts/run_onchange_before_install-packages-parrot.sh.tmpl
adds GitHub's own apt source. That script also switches the login shell to fish,
since Parrot ships zsh.
Configs for tools outside this set (crush, glow, golazo, newsboat,
outside, oxicord, superfile, linear-tui) are gated off in
.chezmoiignore.
Shell & Terminal
| Tool | Key Files (chezmoi paths) |
|---|---|
| fish | dot_config/fish |
| kitty | dot_config/kitty |
Termux ships its own terminal config under dot_termux.
Editor & Language Servers
| Tool | Key Files (chezmoi paths) |
|---|---|
| Helix | dot_config/helix |
| bash-language-server | - |
| lua-language-server | - |
| marksman | - |
| taplo | - |
| typos-lsp | - |
| vscode-langservers | - |
| yaml-language-server | - |
Files, Viewers & Monitoring
| Tool | Key Files (chezmoi paths) |
|---|---|
| Superfile | dot_config/private_superfile |
| eza | dot_config/eza |
| fd | - |
| entr | - |
| bat | dot_config/bat |
| glow | dot_config/private_glow |
| tldr | - |
| btop | dot_config/btop |
| fastfetch | dot_config/fastfetch |
Git & Dev
| Tool | Key Files (chezmoi paths) |
|---|---|
| Git | dot_gitconfig.tmpl, dot_gitignore |
| git-delta | - |
| gh | - (macOS) |
| pre-commit | - |
| markdownlint-cli2 | - |
| GoReleaser | - |
| vhs | - |
| hugo | - (macOS) |
| Crush | dot_config/crush |
Go Toolchain
| Tool | Key Files (chezmoi paths) |
|---|---|
| go / gopls | - |
| delve | - |
| golangci-lint | - |
| golangci-lint-langserver | - |
| goimports | - |
| gocovsh | - |
| go-global-update | - |
| cobra-cli | - |
| ghost | - |
Rust Tools
| Tool | Key Files (chezmoi paths) |
|---|---|
| rustup | - |
| cargo-update | - |
| outside | dot_config/outside |
Notes, News & Productivity
| Tool | Key Files (chezmoi paths) |
|---|---|
| clin | dot_config/clin |
| Toney | dot_config/toney (Android) |
| linear-tui | dot_linear-tui |
| golazo | dot_config/golazo |
| newsboat | dot_config/newsboat |
Communication
| Tool | Key Files (chezmoi paths) |
|---|---|
| oxicord | dot_config/oxicord |
| matcha | - |
| slack-desktop | - |
Utilities & System
| Tool | Key Files (chezmoi paths) |
|---|---|
| chezmoi | - |
| Tailscale | - |
| Bitwarden / bitwarden-cli | - |
| Ollama | - |
| speedtest-cli | - |
| cmatrix | - |
| Nerd Fonts | - |
| qFlipper | - |
macOS GUI (Homebrew casks)
| App | Cask |
|---|---|
| Bitwarden | bitwarden |
| Notion | notion |
| Surfshark | surfshark |
| UHK Agent | uhk-agent |
| qFlipper | qflipper |
| Hack Nerd Font | font-hack-nerd-font |
The full macOS package set lives in dot_Brewfile.
The whole environment shares one hardcoded cyberpunk palette. The canonical
reference — backgrounds, text, accents, semantic, syntax, and terminal colors
with hex values — is color_palettes/cyberpunk/palette.html.
The values are duplicated (not shared) across the Fish prompt
(dot_config/fish/functions/fish_prompt.fish), the Git config
(dot_gitconfig.tmpl), and the clin theme (dot_config/clin/themes). Change
one, change all.
MIT