Skip to content

colonelpanic8/dotfiles

Repository files navigation

colonelpanic8’s Dotfiles

This repository is the source of truth for my machines, user environment, and a large set of day-to-day workflow scripts. It started as an Emacs configuration, and that is still here, but the repo is now mostly a Nix-managed personal systems repo: NixOS hosts, a nix-darwin host, Home Manager link management, desktop/window-manager configuration, shell tooling, agent configuration, and org-agenda-api deployment glue.

The old literate Emacs README lives at dotfiles/emacs.d/README.org. The published GitHub Pages site is still generated from that document.

What This Manages

  • NixOS systems under nixos/, with one flake configuration per file in nixos/machines/.
  • A nix-darwin configuration under nix-darwin/ for the macOS machine.
  • Shared Nix modules and overlays under nix-shared/.
  • Home Manager placement of files from dotfiles/ into $HOME and $XDG_CONFIG_HOME.
  • Shell functions and executable helpers in dotfiles/lib/, added to PATH and fpath by the NixOS environment module.
  • Desktop environment and tiling-window-manager configuration for Hyprland, XMonad, River/XMonad experiments, Taffybar, Waybar, Rofi, Alacritty, autorandr, and related utilities.
  • Emacs and org-mode configuration, including the tangled org configuration used by the org-agenda-api container.
  • Agent and tool configuration for Codex, Claude, project guides, and local task-specific skills.
  • Container and deployment configuration for personal org-agenda-api instances.

This is not intended to be a generic starter dotfiles repo. Many modules assume my users, hostnames, hardware, SSH keys, secrets layout, and local checkout path (~/dotfiles). It is still useful as a reference for how the pieces fit together.

Layout

PathPurpose
nixos/Main NixOS flake. Imports feature modules, host files, agenix secrets, Home Manager, overlays, and package checks.
nixos/machines/Per-host NixOS entrypoints such as strixi-minaj, ryzen-shine, railbird-sf, WSL hosts, and Raspberry Pi hosts.
nix-darwin/macOS system flake using nix-darwin, nix-homebrew, Home Manager, agenix, and shared packages.
nix-shared/Shared package lists, overlays, Home Manager modules, and Syncthing fragments used by Linux and macOS.
dotfiles/Files that are linked into the home directory. Top-level entries become dotfiles; dotfiles/config/* becomes XDG config.
dotfiles/lib/bin/User commands and desktop helpers, including Rofi scripts, Hyprland helpers, audio controls, and Syncthing utilities.
dotfiles/lib/functions/Zsh autoload functions and shell helpers.
dotfiles/config/hypr/Hyprland Lua config, lock/idle config, workspace files, scripts, and plugin state.
dotfiles/config/xmonad/XMonad configuration, local Cabal package, flake, and upstream submodules.
dotfiles/config/taffybar/Personal Taffybar package/configuration, CSS themes, scripts, and local upstream checkout.
dotfiles/emacs.d/Emacs configuration, literate org config, org-mode setup, snippets, and generated/tangled Elisp.
dotfiles/agents/Agent instructions, project constellation guides, and local Codex skills.
org-agenda-api/Instance-specific config and container/deploy glue for org-agenda-api.
docs/Design notes for Cachix, tiling WM behavior, River evaluation, and org-agenda-api consolidation.
gen-gh-pages/Legacy/publication pipeline that exports the Emacs README to GitHub Pages.

NixOS

The NixOS flake is nixos/flake.nix. It discovers host configurations from nixos/machines/ and exposes them as nixosConfigurations.<hostname>. The broad feature set is assembled by nixos/configuration.nix, where features.full.enable expands into the normal desktop/profile modules.

Common workflow:

cd ~/dotfiles/nixos
just switch

The local just switch recipe wraps nixos-rebuild switch --flake ".#", waits for an already-running switch to finish, and overrides the Taffybar inputs to the live checkout under this repo. Use it instead of running nixos-rebuild directly.

Useful variants:

cd ~/dotfiles/nixos
just switch-remote
just switch-local-taffybar
just remote-switch <host>

Build/check examples:

nix flake check ~/dotfiles/nixos
nix build ~/dotfiles/nixos#nixosConfigurations.strixi-minaj.config.system.build.toplevel

The flake also exposes package/check outputs for Hyprland plugins and a Hyprland Lua config syntax/verification check.

nix-darwin

The macOS configuration lives in nix-darwin/flake.nix. It uses nix-darwin, nix-homebrew, Home Manager, agenix, and the shared package list in nix-shared/system/essential.nix.

Common workflow:

cd ~/dotfiles/nix-darwin
just switch

The active host configuration is mac-demarco-mini. There is also a mac-demarco-mini-imalison target used while migrating the primary macOS user.

Home File Linking

The NixOS Home Manager module nixos/dotfiles-links.nix reproduces the useful part of rcm/rcup:

  • files under dotfiles/ are linked into $HOME with a leading dot;
  • directories under dotfiles/config/ are linked into $XDG_CONFIG_HOME;
  • links are out-of-store symlinks, so editing the checkout updates runtime config immediately;
  • generated or special directories such as codex, lib, config, and emacs.d are handled separately.

On NixOS, shell scripts belong in dotfiles/lib/bin/ and autoloaded shell functions belong in dotfiles/lib/functions/. nixos/environment.nix adds those paths to the shell environment.

The nix-darwin Home Manager module in nix-darwin/home/common.nix uses the same basic idea for macOS, with extra launchd, GPG, Raycast, Homebrew, and agent setup.

Desktop Stack

The desktop setup is modular. nixos/desktop.nix enables the common desktop surface, while individual modules layer in window managers, panels, launchers, notifications, SNI/tray support, fonts, and app defaults.

The currently important pieces are:

The intended tiling-WM behavior is documented in docs/tiling-wm-experience.md, and the River/XMonad exploration is documented in docs/riverwm-evaluation.md.

Emacs And Org

Emacs is still a major part of the repo, just no longer the only thing here. The main files are:

org-agenda-api

The repo carries the personal integration layer for org-agenda-api. nixos/org-agenda-api.nix tangles the org-mode configuration from dotfiles/emacs.d/org-config.org. org-agenda-api/container.nix combines that tangled config with per-instance loaders under org-agenda-api/configs/ and builds OCI containers exposed by the NixOS flake.

The host-side NixOS module nixos/org-agenda-api-host.nix runs the container behind nginx with ACME certificates and Podman.

To enter the deployment shell:

nix develop ~/dotfiles/nixos#org-agenda-api

Secrets

Secrets are intentionally not stored as plaintext in the repo. Nix-managed secrets use agenix files under nixos/secrets/. Runtime credentials and personal service passwords live in pass. Modules and scripts should consume secrets from those sources at runtime rather than checking derived values into git.

Submodules And Local Checkouts

Some third-party or upstream projects are tracked as submodules:

  • dotfiles/config/taffybar/taffybar
  • dotfiles/config/xmonad/xmonad
  • dotfiles/config/xmonad/xmonad-contrib
  • dotfiles/config/alacritty/themes
  • nixos/railbird.ai

Clone with submodules when bootstrapping a new checkout:

git clone --recurse-submodules git@github.com:IvanMalison/dotfiles.git ~/dotfiles

This repo also contains project-local git worktrees under .worktrees/ during active development. Those are machine-local working state and are ignored.

CI And Caches

.github/workflows/cachix.yml can build the strixi-minaj NixOS closure and push paths to Cachix. docs/cachix.md documents the cache setup.

The top-level justfile contains helper commands for populating the colonelpanic8-dotfiles Cachix cache from a local machine.

Working In This Repo

  • Prefer Nix modules for system-level behavior and Home Manager modules for user-level placement and services.
  • Put user commands in dotfiles/lib/bin/ and shell functions in dotfiles/lib/functions/.
  • Run NixOS switches from nixos/ with just switch.
  • Run macOS switches from nix-darwin/ with just switch.
  • Keep host-specific behavior in nixos/machines/ where possible.
  • Do not commit secrets or generated local state; use agenix, pass, or ignored machine-local files.