- Nix 78.5%
- Emacs Lisp 8.7%
- GLSL 6.5%
- TypeScript 6.1%
- QML 0.2%
| .forgejo | Fix wisteria nix config | |
| .github | Fix wisteria nix config | |
| git | Fix wisteria nix config | |
| nix | DNS 9.9.9.9 and cleanup pi | |
| .gitignore | Fix wisteria nix config | |
| LICENSE | Fix wisteria nix config | |
| README.md | Upgrade to 26.05 | |
expede's Dotfiles
Multi-platform Nix configurations for macOS and NixOS. Coffee-themed hostnames throughout.
Hosts
| Host | Platform | Type | Description |
|---|---|---|---|
| Latte | aarch64-darwin | Desktop | macOS, 1Password SSH, Homebrew |
| dahlia | x86_64-linux | Desktop | GNOME + Hyprland, AMD GPU |
| kielo | x86_64-linux | Server | hel.subduction.keyhive.org |
Rebuild
All commands run from the nix/ directory.
macOS (Latte)
darwin-rebuild switch --flake .#Latte
NixOS
# Desktop
sudo nixos-rebuild switch --flake .#dahlia
# Server
sudo nixos-rebuild switch --flake .#kielo
Update Flake Inputs
# Update all inputs
nix flake update
# Update specific input
nix flake lock --update-input nixpkgs
Doom Emacs
After changes to nix/modules/home/doom/:
doom sync
Initial Setup
macOS (Latte)
-
Install Nix (Determinate Systems installer recommended):
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install -
Clone this repo:
git clone https://github.com/expede/dots.git ~/Documents/dots cd ~/Documents/dots/nix -
Bootstrap nix-darwin (first run only):
nix run nix-darwin -- switch --flake .#Latte -
Subsequent rebuilds use:
darwin-rebuild switch --flake .#Latte -
Set Fish as default shell:
echo /run/current-system/sw/bin/fish | sudo tee -a /etc/shells chsh -s /run/current-system/sw/bin/fish -
Install Doom Emacs:
git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.config/emacs ~/.config/emacs/bin/doom install doom sync -
Configure 1Password SSH agent — enable in 1Password settings:
- Settings > Developer > SSH Agent > Enable
- Settings > Developer > CLI > Enable CLI integration
NixOS (dahlia / kielo)
-
Boot NixOS installer (minimal ISO recommended)
-
Partition disks and mount at
/mnt(host-specific, seenixos/hosts/<host>/hardware.nix) -
Clone this repo:
nix-shell -p git git clone https://github.com/expede/dots.git /mnt/etc/nixos/dots -
Generate hardware config (optional, compare with existing):
nixos-generate-config --root /mnt --show-hardware-config -
Install:
cd /mnt/etc/nixos/dots/nix nixos-install --flake .#<hostname> -
After reboot, move dots to home and rebuild:
sudo mv /etc/nixos/dots ~/Documents/dots sudo chown -R $USER:users ~/Documents/dots cd ~/Documents/dots/nix sudo nixos-rebuild switch --flake .#<hostname> -
Set Fish as default shell:
chsh -s $(which fish) -
Install Doom Emacs (desktop only):
git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.config/emacs ~/.config/emacs/bin/doom install doom sync
Templates
Rust
Scaffold a new Rust project with pinned toolchain, nightly rustfmt, and dev commands:
# From any directory
nix flake init -t github:expede/dots#rust
# Enter dev shell
nix develop
Type menu in the dev shell to see available commands:
| Command | Description |
|---|---|
build |
Compile the project |
test |
Run tests (with watch mode) |
lint |
Run clippy |
fmt |
Format with nightly rustfmt |
doc |
Generate documentation |
watch |
Watch for changes |
Configuration
Edit flake.nix to customize:
# Pin Rust version
rustVersion = "1.90.0";
# Enable cross-compilation targets (darwin, linux-musl, wasm, embedded)
enableCrossTargets = true;
Included Tools
- Toolchain: cargo, clippy, rust-src, rust-std, llvm-tools-preview
- Formatting: nightly rustfmt, alejandra, taplo
- Cargo extensions: cargo-deny, cargo-expand, cargo-nextest, cargo-outdated, cargo-sort, cargo-udeps, cargo-watch
Structure
nix/
├── flake.nix # Central flake with mkSystem abstraction
├── darwin/ # macOS-specific (nix-darwin)
├── nixos/hosts/ # NixOS host configurations
├── templates/ # Project templates
│ └── rust/ # Rust project template
└── modules/home/ # Home-manager modules
├── hosts/ # Per-host overrides
└── doom/ # Doom Emacs configuration