This file provides guidance to WARP (warp.dev) when working with code in this repository.
This is a personal dotfiles repository that manages system configurations using a hybrid approach:
- Nix for package management and system configuration
- GNU Stow for creating symlinks to configuration files
- Nix-Darwin for macOS system-level configuration
Install prerequisites and set up the environment:
# Clone the repository
cd $HOME
git clone https://github.com/MalteHerrmann/dotfiles
cd dotfiles
# Create symlinks for configuration files
stow .# Navigate to nix-darwin config
cd .config/nix-darwin
# Deploy system configuration (uses Makefile)
make deploy
# Manual build and switch (alternative)
nix build .#darwinConfigurations.$(hostname).system --extra-experimental-features 'nix-command flakes'
sudo ./result/sw/bin/darwin-rebuild switch --flake .#$(hostname)The repository configures zsh with several productivity enhancements:
- oh-my-posh for shell theming
- zoxide for smart directory navigation
- fzf for fuzzy finding
- Custom aliases for git, docker, and development workflows
gcam- git commit -a -mgd- git diffgdp- interactive git diff with fzf previewll,la,ls- eza-based directory listingsv,vim- neovimmt,ml- make test, make lintnd- nix develop
.zshrc- Shell configuration with aliases and tool initialization.config/nix-darwin/flake.nix- System-level Darwin configuration
The .config/ directory contains configurations for:
- Editors: nvim, helix, zed
- Terminal: alacritty, kitty, tmux, zellij
- Window Management: yabai, skhd, aerospace
- Development: git, github-copilot
- Shell: oh-my-posh themes
Nix-Darwin configuration supports multiple machines:
Maltes-MacBook-Air(username: malte)Maltes-MacBook-Pro(username: malteherrmann)
Configurations automatically adapt based on hostname.
Core development tools are managed through Nix-Darwin:
- Languages: Go, Python, Node.js
- Editors: Neovim, Helix, Zed
- CLI Tools: bat, eza, fzf, ripgrep, gh, jq
- Development: tmux, stow, uv (Python package manager)
Rust toolchain is intentionally not managed via Nix due to complexity with overlays and environment variables. Install separately using rustup.
- Edit relevant
.nixfiles in.config/nix-darwin/ - Deploy changes:
make deploy(in nix-darwin directory)
Add packages to the appropriate package list in .config/nix-darwin/flake.nix, then run make deploy
Nix-Darwin supports rollbacks to previous generations if issues occur.
All configurations use Nix flakes with pinned versions:
- Nix-Darwin pinned to
nixpkgs-25.11-darwinandnix-darwin-25.11
The shell configuration adds several paths:
- Go binary path:
$(go env GOPATH)/bin - Cargo binary path:
$HOME/.cargo/bin - Local binaries:
$HOME/.local/bin
Includes conditional loading of Google Cloud SDK tools for specific user accounts.