My personal dotfiles and system configuration managed with Nix and home-manager.
- Declarative configuration using Nix flakes
- Cross-platform support for macOS (Darwin) and Linux
- Parameterized setup - easily customize for different machines
- Automated bootstrap - one-command setup for new machines
- Nix-managed dependencies - no manual git submodule initialization
- Private configuration - keep sensitive data out of version control
-
Install Nix (if not already installed):
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
-
Clone this repository:
git clone https://github.com/skylarmb/nixie.git ~/.config/nixie cd ~/.config/nixie
-
Run the bootstrap script:
./install.sh
-
Customize your private configuration:
- Edit
~/.private/.zshrc- set WORKSPACE, GITHUB_TOKEN, etc. - Edit
~/.private/.gitconfig- set your git user info
- Edit
-
Reload your shell:
exec zsh
That's it! Your development environment is ready.
- Shell: zsh with oh-my-zsh, antigen, fzf integration
- Editor: Neovim with Lazy.nvim plugin manager, LSP, Copilot
- Terminal: tmux with TPM (auto-installed), wezterm
- Git: Delta diff viewer, extensive aliases, GPG signing support
- CLI Tools: ripgrep, bat, eza, fd, gh (GitHub CLI), tig
- Development: direnv with nix-direnv, Node.js 22, linters/formatters
NixOS system configuration for bare-metal Apple Silicon (Asahi kernel):
- GNOME desktop environment
- Nvidia GPU support (open-source drivers)
- Mullvad VPN integration
- LVM/LUKS encryption support
nixie/
├── flake.nix # Main flake configuration with inputs
├── home.nix # Home-manager configuration
├── configuration.nix # NixOS system config
├── boot.nix # Boot settings
├── hardware-configuration.nix # Auto-generated hardware config
├── install.sh # Bootstrap script
├── .private.template/ # Templates for private config
│ ├── .zshrc # Environment variables template
│ └── .gitconfig # Git user config template
└── dotfiles/ # All dotfiles (auto-linked by home-manager)
├── .config/
│ ├── nvim/ # Neovim configuration
│ ├── tmux/ # Tmux configuration
│ ├── git/ # Git configuration
│ └── ...
├── .zshrc # Main zsh config
└── bin/ # Custom scripts
Edit flake.nix and update the userConfig section:
userConfig = { username = "your-username"; email = "your-email@example.com"; fullName = "Your Name"; gpgKey = "YOUR_GPG_KEY"; # or null timezone = "America/Los_Angeles"; };
Edit home.nix and add packages to home.packages:
home.packages = [ pkgs.your-package-here # ... ];
The flake automatically detects your platform and applies the appropriate configuration:
- macOS: Uses
username@darwinconfiguration - Linux: Uses
username@linuxconfiguration
nix flake update
home-manager switch --flake '.#your-username@darwin' # or for Linux: home-manager switch --flake '.#your-username@linux'
sudo nixos-rebuild switch --flake '.#nixos'Private configuration is stored in ~/.private/ and is NOT tracked in git. This directory contains:
~/.private/.zshrc- Environment variables (WORKSPACE, GITHUB_TOKEN, etc.)~/.private/.gitconfig- Git user configuration
Templates are provided in .private.template/ for easy setup on new machines.
The bootstrap script handles most setup automatically. The only manual steps are:
- Edit private config files in
~/.private/with your personal information - (Optional) Customize
flake.nixif you want to change default settings
Everything else (Nix installation, submodules, TPM plugins, etc.) is automated!
Previously manual steps that are now automated:
- ✅ Git submodule initialization (TPM managed by Nix)
- ✅ TPM plugin installation (runs on home-manager activation)
- ✅ Private config template setup
- ✅ Platform detection (macOS vs Linux)
- ✅ Home-manager installation and configuration
- macOS (Apple Silicon & Intel)
- NixOS (with Asahi kernel for Apple Silicon)
- Linux (other distributions with Nix/home-manager)
MIT License - see LICENSE file for details