# Installation Guide ## First-Time Setup ### On macOS #### 1. Install Nix (if not already installed) ```bash sh <(curl -L https://nixos.org/nix/install) ``` #### 2. Enable Flakes Create or edit `~/.config/nix/nix.conf`: ```bash mkdir -p ~/.config/nix cat < ~/.config/nix/nix.conf experimental-features = nix-command flakes EOF ``` Restart your terminal or run: ```bash . /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh ``` #### 3. Configure Your System Edit the following files: **In `flake.nix`:** - Line 82-97: Replace `your-hostname` with your actual hostname (run `hostname` to find it) - Line 94: Replace `your-username` with your actual username (run `whoami`) **In `darwin/configuration.nix`:** - Line 33-34: Set your hostname - Line 45: Set your architecture: - Apple Silicon (M1/M2/M3): `"aarch64-darwin"` - Intel: `"x86_64-darwin"` - Line 48-51: Set your username **In `home-manager/home.nix`:** - Line 30: Set your username **In `home-manager/development.nix`** (optional): - Uncomment lines for your git name and email #### 4. Build and Apply ```bash # Build the darwin configuration (first time) nix build .#darwinConfigurations.YOUR-HOSTNAME.system --extra-experimental-features "nix-command flakes" # Apply it ./result/sw/bin/darwin-rebuild switch --flake .#YOUR-HOSTNAME ``` After the first successful build, you can use: ```bash darwin-rebuild switch --flake .#YOUR-HOSTNAME ``` #### 5. Reload Your Shell Close and reopen your terminal, or source your shell config: ```bash # For zsh: source ~/.zshrc # For fish: source ~/.config/fish/config.fish # For bash: source ~/.bashrc ``` ### On NixOS #### 1. Clone This Repository ```bash # As root or with sudo cd /etc/nixos git clone . # Or copy your files to /etc/nixos ``` #### 2. Configure Your System Edit the following files: **In `flake.nix`:** - Line 59-75: Replace `your-hostname` with your actual hostname - Line 72: Replace `your-username` with your actual username **In `nixos/configuration.nix`:** - Line 38: Set your hostname - Line 43-54: Configure your user account - Uncomment line 47-51 if you want to set an initial password **In `home-manager/home.nix`:** - Line 30: Set your username **In `home-manager/development.nix`** (optional): - Uncomment lines for your git name and email #### 3. Generate Hardware Configuration If you haven't already: ```bash sudo nixos-generate-config --show-hardware-config > nixos/hardware-configuration.nix ``` #### 4. Build and Apply ```bash sudo nixos-rebuild switch --flake .#YOUR-HOSTNAME ``` #### 5. Reboot (optional but recommended) ```bash sudo reboot ``` ## Updating Your Configuration ### Update Flake Inputs (packages) ```bash nix flake update ``` Then rebuild: ```bash # macOS: darwin-rebuild switch --flake .#YOUR-HOSTNAME # NixOS: sudo nixos-rebuild switch --flake .#YOUR-HOSTNAME ``` ### Making Configuration Changes 1. Edit the relevant configuration files 2. Rebuild and switch: ```bash # macOS: darwin-rebuild switch --flake . # NixOS: sudo nixos-rebuild switch --flake . ``` ### Testing Changes Before Applying ```bash # macOS: darwin-rebuild build --flake . # NixOS: sudo nixos-rebuild build --flake . ``` If the build succeeds, you can then apply with `switch`. ## Common Customizations ### Add User Packages Edit `home-manager/common.nix`, `home-manager/development.nix`, or the platform-specific files: ```nix home.packages = with pkgs; [ firefox vscode ripgrep ]; ``` ### Enable a Program Most programs can be enabled via home-manager options: ```nix programs.firefox.enable = true; programs.git = { enable = true; userName = "Your Name"; userEmail = "you@example.com"; }; ``` ### Add System Packages Edit `common.nix` or the platform-specific configuration: ```nix environment.systemPackages = with pkgs; [ vim wget curl ]; ``` ### Customize Shell Edit `home-manager/shell.nix` to configure bash, zsh, fish, or starship prompt. ### macOS System Defaults Edit `darwin/configuration.nix` to customize macOS behavior (Dock, Finder, keyboard, etc.). ## Troubleshooting ### Build Fails with "experimental Nix feature 'flakes' is disabled" Make sure you've enabled flakes in `~/.config/nix/nix.conf`: ``` experimental-features = nix-command flakes ``` ### "error: collision between..." This means two packages are trying to install the same files. Check for: - Duplicate packages in system and home-manager configs - Conflicting package versions ### macOS: "Could not find nix-darwin" On first install, you need to build with the full path: ```bash nix build .#darwinConfigurations.YOUR-HOSTNAME.system ./result/sw/bin/darwin-rebuild switch --flake . ``` ### Home Manager File Conflicts If home-manager tries to manage files that already exist, back them up: ```bash # Create backups of existing files for file in ~/.bashrc ~/.zshrc ~/.config/fish/config.fish; do [ -f "$file" ] && mv "$file" "$file.backup" done ``` Or use the backup flag: ```bash home-manager switch --flake . --backup-extension .backup ``` ### Can't Find Your Hostname ```bash # macOS and Linux: hostname # If it's not what you expect, you can change it: # macOS (temporarily): sudo scutil --set HostName your-new-hostname # NixOS: Set in configuration.nix ``` ### Rollback to Previous Generation If a new configuration breaks something: ```bash # macOS: darwin-rebuild --rollback # NixOS: sudo nixos-rebuild --rollback ``` ## Next Steps After installation: 1. **Customize your configuration** - Edit the home-manager modules to suit your workflow 2. **Add your development tools** - Uncomment languages/tools you need in `development.nix` 3. **Configure Git** - Set your name and email in `development.nix` 4. **Set up shell** - Choose your preferred shell and customize in `shell.nix` 5. **Explore options** - Check out [Home Manager options](https://nix-community.github.io/home-manager/options.html) ## Getting Help - [NixOS Discourse](https://discourse.nixos.org/) - [Nix Discord](https://discord.gg/RbvHtGa) - [r/NixOS](https://www.reddit.com/r/NixOS/) - [Nix Documentation](https://nixos.org/learn.html)