A declarative, reproducible, and version-controlled system configuration using Nix, nix-darwin, and home-manager.
This repository contains my personal dotfiles and system configuration managed with Nix. It uses:
- Nix - The purely functional package manager
- nix-darwin - macOS system configuration
- home-manager - User environment configuration
The configuration is defined as a Nix flake, making it reproducible and easy to deploy across multiple machines.
This configuration includes setup for:
- Fish Shell - Default shell with custom plugins and configurations
- Starship - Cross-shell prompt with custom theme
- Tmux - Terminal multiplexer with custom keybindings and plugins
- Zellij - Terminal workspace manager (configured but disabled by default)
- Neovim - Text editor with extensive configuration
- Git - Version control with custom aliases and configuration
- JJ - Modern version control system (alternative to Git)
- Lazygit - Terminal UI for Git
- Rust - Rust programming language toolchain
- Node.js - JavaScript runtime with fnm, pnpm, and other frontend tools
- Elixir - Elixir programming language support
- Python - Python programming environment
- Yabai - Tiling window manager for macOS
- Skhd - Simple hotkey daemon for macOS
- Karabiner - Keyboard customization for macOS
- AutoRaise - Window focus follows mouse for macOS
- dark-mode-notify - Automatically switch themes based on macOS appearance
- Bat - A cat clone with syntax highlighting
- Ripgrep - Fast search tool
- Fd - Simple, fast alternative to find
- Fzf - Fuzzy finder
- Eza - Modern replacement for ls
- Zoxide - Smarter cd command
- Yazi - Terminal file manager
- Bottom - System monitor
- Cachix - Binary cache for Nix
- Nix package manager (can be installed via the Determinate Systems installer)
-
Clone this repository:
git clone https://github.com/towry/dots.git ~/.dotfiles cd ~/.dotfiles
-
Install Nix (if not already installed):
make install-nix
-
Bootstrap nix-darwin:
make boot
-
Apply the configuration:
make rebuild
To update your system after making changes to the configuration:
make rebuildTo update flake inputs (dependencies):
make update-input-
Fish shell is configured as the default shell through nix-darwin, no manual configuration required
-
All Nix binaries are available at
$HOME/.nix-profile/bin/ -
You can edit the command prompt with
alt+e
flake.nix- The main entry point for the Nix flakenix/- Contains all Nix configuration filesdarwin/- nix-darwin specific configurationhm/- home-manager specific configurationmodules/- Shared configuration moduleslib/- Helper functions and utilitiespkgs/- Custom package definitionshome.nix- Main home-manager configuration
This project is licensed under the MIT License - see the LICENSE file for details.