temp add
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
# Automatically load nix flake devShell when entering this directory
|
||||
# Requires direnv to be installed and hooked into your shell
|
||||
use flake
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
# Nix build results
|
||||
result
|
||||
result-*
|
||||
|
||||
# Direnv
|
||||
.direnv/
|
||||
.envrc.cache
|
||||
|
||||
# Editor files
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.DS_Store
|
||||
|
||||
# Backup files
|
||||
*.backup
|
||||
*.bak
|
||||
|
||||
# Hardware configuration (may contain sensitive info)
|
||||
# Uncomment if you don't want to commit it:
|
||||
# nixos/hardware-configuration.nix
|
||||
|
||||
+296
@@ -0,0 +1,296 @@
|
||||
# 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 <<EOF > ~/.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 <your-repo-url> .
|
||||
# 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)
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
.PHONY: help darwin-build darwin-switch nixos-build nixos-switch home-build home-switch update clean fmt check
|
||||
|
||||
# Default target
|
||||
help:
|
||||
@echo "Available targets:"
|
||||
@echo " make darwin-build - Build darwin configuration (macOS)"
|
||||
@echo " make darwin-switch - Build and activate darwin configuration"
|
||||
@echo " make nixos-build - Build NixOS configuration (Linux)"
|
||||
@echo " make nixos-switch - Build and activate NixOS configuration"
|
||||
@echo " make home-build - Build home-manager configuration (standalone)"
|
||||
@echo " make home-switch - Build and activate home-manager configuration"
|
||||
@echo " make update - Update flake inputs"
|
||||
@echo " make fmt - Format nix files"
|
||||
@echo " make check - Check flake"
|
||||
@echo " make clean - Clean build artifacts and old generations"
|
||||
@echo ""
|
||||
@echo "Note: Set HOSTNAME variable to use a specific host, e.g.:"
|
||||
@echo " make darwin-switch HOSTNAME=macbook"
|
||||
|
||||
# Auto-detect hostname
|
||||
HOSTNAME ?= $(shell hostname | cut -d. -f1)
|
||||
USERNAME ?= $(shell whoami)
|
||||
|
||||
# macOS targets
|
||||
darwin-build:
|
||||
nix build .#darwinConfigurations.$(HOSTNAME).system
|
||||
|
||||
darwin-switch:
|
||||
darwin-rebuild switch --flake .#$(HOSTNAME)
|
||||
|
||||
# NixOS targets
|
||||
nixos-build:
|
||||
nixos-rebuild build --flake .#$(HOSTNAME)
|
||||
|
||||
nixos-switch:
|
||||
sudo nixos-rebuild switch --flake .#$(HOSTNAME)
|
||||
|
||||
# Home Manager targets (standalone)
|
||||
home-build:
|
||||
home-manager build --flake .#$(USERNAME)@$(HOSTNAME)
|
||||
|
||||
home-switch:
|
||||
home-manager switch --flake .#$(USERNAME)@$(HOSTNAME)
|
||||
|
||||
# Maintenance
|
||||
update:
|
||||
nix flake update
|
||||
|
||||
fmt:
|
||||
nix fmt
|
||||
|
||||
check:
|
||||
nix flake check
|
||||
|
||||
clean:
|
||||
@echo "Cleaning old generations..."
|
||||
@if [ "$$(uname)" = "Darwin" ]; then \
|
||||
nix-collect-garbage -d; \
|
||||
darwin-rebuild --list-generations | tail -5; \
|
||||
else \
|
||||
sudo nix-collect-garbage -d; \
|
||||
sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | tail -5; \
|
||||
fi
|
||||
|
||||
# Git helpers (optional)
|
||||
.PHONY: commit-update
|
||||
commit-update:
|
||||
git add flake.lock
|
||||
git commit -m "chore: update flake inputs"
|
||||
|
||||
+260
@@ -0,0 +1,260 @@
|
||||
# Quick Start Guide
|
||||
|
||||
## TL;DR
|
||||
|
||||
### macOS Setup (3 steps)
|
||||
|
||||
```bash
|
||||
# 1. Configure your info
|
||||
export USERNAME="your-username"
|
||||
export HOSTNAME="your-hostname"
|
||||
|
||||
# Edit these files and replace placeholders:
|
||||
# - flake.nix (line 82-94)
|
||||
# - darwin/configuration.nix (lines 33, 45, 48)
|
||||
# - home-manager/home.nix (line 30)
|
||||
|
||||
# 2. Build (first time only)
|
||||
nix build .#darwinConfigurations.$HOSTNAME.system --extra-experimental-features "nix-command flakes"
|
||||
./result/sw/bin/darwin-rebuild switch --flake .#$HOSTNAME
|
||||
|
||||
# 3. Apply (after first time)
|
||||
darwin-rebuild switch --flake .
|
||||
```
|
||||
|
||||
### Linux/NixOS Setup (2 steps)
|
||||
|
||||
```bash
|
||||
# 1. Configure your info
|
||||
# Edit flake.nix, nixos/configuration.nix, home-manager/home.nix
|
||||
# Replace placeholders with your username and hostname
|
||||
|
||||
# 2. Apply
|
||||
sudo nixos-rebuild switch --flake .#your-hostname
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## What You Get
|
||||
|
||||
### ✅ Cross-Platform Support
|
||||
- Same config works on macOS (via nix-darwin) and Linux (NixOS)
|
||||
- Automatic platform detection
|
||||
- Shared home-manager configuration
|
||||
|
||||
### ✅ Modular Home Manager
|
||||
Your user environment is organized into:
|
||||
- **common.nix** - Basic tools (git, ripgrep, etc.)
|
||||
- **development.nix** - Dev tools (gh, lazygit, direnv)
|
||||
- **shell.nix** - Shell config (bash/zsh/fish + starship prompt)
|
||||
- **terminal.nix** - Terminal apps (tmux, neovim, alacritty)
|
||||
- **linux.nix** - Linux-specific GUI apps
|
||||
- **darwin.nix** - macOS-specific integrations
|
||||
|
||||
### ✅ Great Defaults
|
||||
- Modern CLI tools (ripgrep, fd, bat, eza, zoxide, fzf)
|
||||
- Starship prompt with git integration
|
||||
- Syntax highlighting and autosuggestion
|
||||
- Git aliases and better defaults
|
||||
- macOS system preferences (dock, finder, keyboard)
|
||||
- Automatic garbage collection
|
||||
- Nix flakes enabled
|
||||
|
||||
### ✅ Easy Maintenance
|
||||
```bash
|
||||
# Update everything
|
||||
make update && make darwin-switch # or make nixos-switch
|
||||
|
||||
# Format code
|
||||
make fmt
|
||||
|
||||
# Clean old generations
|
||||
make clean
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## File Structure Quick Reference
|
||||
|
||||
```
|
||||
├── flake.nix ← Define all your systems here
|
||||
├── common.nix ← Shared Nix settings
|
||||
│
|
||||
├── darwin/ ← macOS system config
|
||||
│ └── configuration.nix
|
||||
│
|
||||
├── nixos/ ← Linux system config
|
||||
│ └── configuration.nix
|
||||
│
|
||||
└── home-manager/ ← Your user environment (SHARED!)
|
||||
├── home.nix ← Main entry point
|
||||
├── common.nix ← Base config
|
||||
├── development.nix ← Dev tools
|
||||
├── shell.nix ← Shell setup
|
||||
├── terminal.nix ← Terminal apps
|
||||
├── linux.nix ← Linux-only
|
||||
└── darwin.nix ← macOS-only
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Common Tasks
|
||||
|
||||
### Add a Package
|
||||
|
||||
**User package** (recommended):
|
||||
```nix
|
||||
# home-manager/common.nix
|
||||
home.packages = with pkgs; [
|
||||
firefox
|
||||
your-package-here
|
||||
];
|
||||
```
|
||||
|
||||
**System package**:
|
||||
```nix
|
||||
# common.nix or darwin/configuration.nix or nixos/configuration.nix
|
||||
environment.systemPackages = with pkgs; [
|
||||
your-package-here
|
||||
];
|
||||
```
|
||||
|
||||
### Enable a Program
|
||||
|
||||
```nix
|
||||
# In any home-manager/*.nix file
|
||||
programs.firefox.enable = true;
|
||||
programs.vscode = {
|
||||
enable = true;
|
||||
extensions = with pkgs.vscode-extensions; [
|
||||
bbenoist.nix
|
||||
];
|
||||
};
|
||||
```
|
||||
|
||||
### Platform-Specific Packages
|
||||
|
||||
```nix
|
||||
# In home-manager/common.nix or development.nix
|
||||
home.packages = with pkgs; [
|
||||
# Shared
|
||||
ripgrep
|
||||
fd
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
# macOS only
|
||||
] ++ lib.optionals stdenv.isLinux [
|
||||
# Linux only
|
||||
];
|
||||
```
|
||||
|
||||
### Change Shell
|
||||
|
||||
```nix
|
||||
# In home-manager/shell.nix, set enable = true for your preferred shell:
|
||||
programs.fish.enable = true; # Fish (recommended)
|
||||
programs.zsh.enable = true; # Zsh
|
||||
programs.bash.enable = true; # Bash
|
||||
```
|
||||
|
||||
Then on macOS, set in `darwin/configuration.nix`:
|
||||
```nix
|
||||
programs.fish.enable = true; # or zsh/bash
|
||||
```
|
||||
|
||||
On NixOS, set in `nixos/configuration.nix`:
|
||||
```nix
|
||||
users.users.your-username.shell = pkgs.fish; # or zsh/bash
|
||||
```
|
||||
|
||||
### Add SSH Keys
|
||||
|
||||
macOS:
|
||||
```nix
|
||||
# darwin/configuration.nix
|
||||
users.users.your-username = {
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAA... your-key"
|
||||
];
|
||||
};
|
||||
```
|
||||
|
||||
NixOS:
|
||||
```nix
|
||||
# nixos/configuration.nix
|
||||
users.users.your-username = {
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAA... your-key"
|
||||
];
|
||||
};
|
||||
```
|
||||
|
||||
### Multiple Machines
|
||||
|
||||
Add entries in `flake.nix`:
|
||||
|
||||
```nix
|
||||
darwinConfigurations = {
|
||||
macbook = darwin.lib.darwinSystem { ... };
|
||||
mac-mini = darwin.lib.darwinSystem { ... };
|
||||
};
|
||||
|
||||
nixosConfigurations = {
|
||||
desktop = nixpkgs.lib.nixosSystem { ... };
|
||||
laptop = nixpkgs.lib.nixosSystem { ... };
|
||||
};
|
||||
```
|
||||
|
||||
Then build with:
|
||||
```bash
|
||||
darwin-rebuild switch --flake .#macbook
|
||||
# or
|
||||
sudo nixos-rebuild switch --flake .#desktop
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting One-Liners
|
||||
|
||||
```bash
|
||||
# Check flake is valid
|
||||
nix flake check
|
||||
|
||||
# Show flake outputs
|
||||
nix flake show
|
||||
|
||||
# Build without switching (test)
|
||||
darwin-rebuild build --flake . # macOS
|
||||
sudo nixos-rebuild build --flake . # Linux
|
||||
|
||||
# Rollback
|
||||
darwin-rebuild --rollback # macOS
|
||||
sudo nixos-rebuild --rollback # Linux
|
||||
|
||||
# Force rebuild
|
||||
darwin-rebuild switch --flake . --recreate-lock-file
|
||||
|
||||
# View current generation
|
||||
darwin-rebuild --list-generations # macOS
|
||||
sudo nix-env --list-generations --profile /nix/var/nix/profiles/system # Linux
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. ⚙️ **Customize `home-manager/development.nix`** - Add your dev tools
|
||||
2. 🎨 **Tweak `home-manager/shell.nix`** - Customize your prompt and aliases
|
||||
3. 🖥️ **Adjust `darwin/configuration.nix`** - Set macOS preferences
|
||||
4. 📦 **Add packages** - Browse [search.nixos.org](https://search.nixos.org)
|
||||
5. 🔧 **Create modules** - Extract common patterns into `modules/home-manager/`
|
||||
|
||||
---
|
||||
|
||||
## Help & Resources
|
||||
|
||||
- 📖 [Full README](./README.md) - Complete documentation
|
||||
- 🚀 [INSTALL.md](./INSTALL.md) - Detailed installation guide
|
||||
- 🔍 [NixOS Search](https://search.nixos.org) - Find packages and options
|
||||
- 💬 [NixOS Discourse](https://discourse.nixos.org) - Community forum
|
||||
- 🎮 [Nix Discord](https://discord.gg/RbvHtGa) - Real-time chat
|
||||
|
||||
@@ -0,0 +1,249 @@
|
||||
# Cross-Platform Nix Configuration
|
||||
|
||||
A modular Nix configuration that works on both macOS (via nix-darwin) and Linux (NixOS), with maximum config sharing through home-manager.
|
||||
|
||||
## Structure
|
||||
|
||||
```
|
||||
├── flake.nix # Main flake configuration
|
||||
├── common.nix # Shared system-level config (NixOS & nix-darwin)
|
||||
│
|
||||
├── darwin/ # macOS system configuration
|
||||
│ └── configuration.nix
|
||||
│
|
||||
├── nixos/ # NixOS system configuration
|
||||
│ ├── configuration.nix
|
||||
│ └── hardware-configuration.nix
|
||||
│
|
||||
├── home-manager/ # User environment (shared across platforms)
|
||||
│ ├── home.nix # Main home-manager config
|
||||
│ ├── common.nix # Base configuration
|
||||
│ ├── development.nix # Development tools
|
||||
│ ├── shell.nix # Shell configuration
|
||||
│ ├── terminal.nix # Terminal apps & utilities
|
||||
│ ├── linux.nix # Linux-specific overrides
|
||||
│ └── darwin.nix # macOS-specific overrides
|
||||
│
|
||||
├── modules/
|
||||
│ ├── home-manager/ # Shared home-manager modules
|
||||
│ ├── nixos/ # NixOS-specific modules
|
||||
│ └── darwin/ # nix-darwin-specific modules
|
||||
│
|
||||
├── overlays/ # Package overlays
|
||||
│ └── default.nix
|
||||
│
|
||||
└── pkgs/ # Custom packages
|
||||
└── default.nix
|
||||
```
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Prerequisites
|
||||
|
||||
**On macOS:**
|
||||
1. Install Nix: `sh <(curl -L https://nixos.org/nix/install)`
|
||||
2. Enable flakes by adding to `~/.config/nix/nix.conf`:
|
||||
```
|
||||
experimental-features = nix-command flakes
|
||||
```
|
||||
|
||||
**On NixOS:**
|
||||
Flakes should be enabled via this configuration.
|
||||
|
||||
### Configuration Steps
|
||||
|
||||
1. **Update your username and hostname:**
|
||||
- In `flake.nix`: Replace `your-username` and `your-hostname` in the configurations
|
||||
- In `home-manager/home.nix`: Update the username
|
||||
- In `darwin/configuration.nix` or `nixos/configuration.nix`: Update hostname and user settings
|
||||
|
||||
2. **Set your architecture** (macOS):
|
||||
- In `darwin/configuration.nix`, set `nixpkgs.hostPlatform` to either:
|
||||
- `"aarch64-darwin"` (Apple Silicon)
|
||||
- `"x86_64-darwin"` (Intel)
|
||||
|
||||
3. **Configure Git identity** (optional):
|
||||
- In `home-manager/development.nix`, uncomment and set:
|
||||
```nix
|
||||
userName = "Your Name";
|
||||
userEmail = "your.email@example.com";
|
||||
```
|
||||
|
||||
### Building & Activating
|
||||
|
||||
**On macOS (first time):**
|
||||
```bash
|
||||
# Build the darwin configuration
|
||||
nix build .#darwinConfigurations.your-hostname.system
|
||||
|
||||
# Activate it
|
||||
./result/sw/bin/darwin-rebuild switch --flake .#your-hostname
|
||||
```
|
||||
|
||||
**On macOS (subsequent builds):**
|
||||
```bash
|
||||
darwin-rebuild switch --flake .#your-hostname
|
||||
```
|
||||
|
||||
**On NixOS:**
|
||||
```bash
|
||||
sudo nixos-rebuild switch --flake .#your-hostname
|
||||
```
|
||||
|
||||
**Standalone home-manager** (if not using system integration):
|
||||
```bash
|
||||
home-manager switch --flake .#your-username@your-hostname
|
||||
```
|
||||
|
||||
## Key Features
|
||||
|
||||
### Platform-Aware Configuration
|
||||
|
||||
The configuration automatically detects the platform using `pkgs.stdenv.isDarwin` and `pkgs.stdenv.isLinux`:
|
||||
|
||||
- Home directory: Automatically uses `/Users/` on macOS, `/home/` on Linux
|
||||
- Platform-specific packages and services are conditionally enabled
|
||||
- Shared configuration in `common.nix` for consistent experience
|
||||
|
||||
### Modular Home-Manager
|
||||
|
||||
Your user environment is split into logical modules:
|
||||
|
||||
- **common.nix**: Basic tools everyone needs (git, ripgrep, etc.)
|
||||
- **development.nix**: Development tools (languages, IDEs, etc.)
|
||||
- **shell.nix**: Shell configuration (bash, zsh, fish, starship)
|
||||
- **terminal.nix**: Terminal applications (tmux, neovim, alacritty)
|
||||
- **linux.nix**: Linux-specific GUI apps and services
|
||||
- **darwin.nix**: macOS-specific apps and integrations
|
||||
|
||||
### Shared System Configuration
|
||||
|
||||
`common.nix` is imported by both NixOS and nix-darwin configurations, providing:
|
||||
|
||||
- Unified Nix settings (flakes, garbage collection, etc.)
|
||||
- Shared package overlays
|
||||
- Consistent nixpkgs configuration
|
||||
|
||||
### Easy to Extend
|
||||
|
||||
- Add new home-manager modules in `modules/home-manager/`
|
||||
- Add platform-specific modules in `modules/nixos/` or `modules/darwin/`
|
||||
- Add custom packages in `pkgs/`
|
||||
- Add overlays in `overlays/`
|
||||
|
||||
## Customization Tips
|
||||
|
||||
### Adding Packages
|
||||
|
||||
**User packages** (home-manager):
|
||||
Add to the appropriate module:
|
||||
- `home-manager/common.nix` for shared packages
|
||||
- `home-manager/linux.nix` for Linux-only
|
||||
- `home-manager/darwin.nix` for macOS-only
|
||||
- `home-manager/development.nix` for dev tools
|
||||
|
||||
**System packages**:
|
||||
Add to `common.nix` for shared system packages, or to the platform-specific config.
|
||||
|
||||
### Enabling Programs
|
||||
|
||||
Most programs can be enabled via home-manager:
|
||||
|
||||
```nix
|
||||
programs.firefox.enable = true;
|
||||
programs.vscode.enable = true;
|
||||
```
|
||||
|
||||
Check [home-manager options](https://nix-community.github.io/home-manager/options.html) for available programs.
|
||||
|
||||
### Multiple Machines
|
||||
|
||||
Add more configurations in `flake.nix`:
|
||||
|
||||
```nix
|
||||
darwinConfigurations = {
|
||||
macbook = darwin.lib.darwinSystem { ... };
|
||||
mac-mini = darwin.lib.darwinSystem { ... };
|
||||
};
|
||||
|
||||
nixosConfigurations = {
|
||||
desktop = nixpkgs.lib.nixosSystem { ... };
|
||||
laptop = nixpkgs.lib.nixosSystem { ... };
|
||||
};
|
||||
```
|
||||
|
||||
### macOS System Defaults
|
||||
|
||||
The darwin configuration includes sensible defaults for macOS. Customize in `darwin/configuration.nix`:
|
||||
|
||||
- Dock behavior
|
||||
- Finder settings
|
||||
- Keyboard settings
|
||||
- Global domain defaults
|
||||
|
||||
## Maintenance
|
||||
|
||||
**Update flake inputs:**
|
||||
```bash
|
||||
nix flake update
|
||||
```
|
||||
|
||||
**Garbage collect old generations:**
|
||||
```bash
|
||||
# This happens automatically every 7 days, but you can run manually:
|
||||
nix-collect-garbage -d
|
||||
|
||||
# On NixOS:
|
||||
sudo nix-collect-garbage -d
|
||||
```
|
||||
|
||||
**View generations:**
|
||||
```bash
|
||||
# On macOS:
|
||||
darwin-rebuild --list-generations
|
||||
|
||||
# On NixOS:
|
||||
sudo nix-env --list-generations --profile /nix/var/nix/profiles/system
|
||||
```
|
||||
|
||||
**Rollback to previous generation:**
|
||||
```bash
|
||||
# On macOS:
|
||||
darwin-rebuild --rollback
|
||||
|
||||
# On NixOS:
|
||||
sudo nixos-rebuild --rollback
|
||||
```
|
||||
|
||||
## Resources
|
||||
|
||||
- [Nix Documentation](https://nixos.org/manual/nix/stable/)
|
||||
- [NixOS Options Search](https://search.nixos.org/options)
|
||||
- [Home Manager Options](https://nix-community.github.io/home-manager/options.html)
|
||||
- [nix-darwin Options](https://daiderd.com/nix-darwin/manual/index.html)
|
||||
- [Nix Language Basics](https://nixos.org/manual/nix/stable/language/)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**"error: experimental Nix feature 'flakes' is disabled"**
|
||||
- Enable flakes in your nix configuration
|
||||
|
||||
**Build fails on macOS**
|
||||
- Ensure nix-darwin is properly installed
|
||||
- Check that your architecture is set correctly in `darwin/configuration.nix`
|
||||
|
||||
**Home manager conflicts**
|
||||
- If you have existing dotfiles, back them up before applying home-manager
|
||||
- Use `home-manager switch --backup-extension .backup` to preserve existing files
|
||||
|
||||
**"collision between" errors**
|
||||
- Usually means packages are providing the same files
|
||||
- Check for duplicate package installations in system vs home-manager
|
||||
|
||||
## Contributing
|
||||
|
||||
Feel free to customize this configuration to your needs! The modular structure makes it easy to:
|
||||
- Add new feature modules
|
||||
- Share modules between machines
|
||||
- Contribute modules back to the community
|
||||
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
# Shared system-level configuration for both NixOS and nix-darwin
|
||||
# Import this in both nixos/configuration.nix and darwin/configuration.nix
|
||||
{
|
||||
inputs,
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
# Shared Nix configuration
|
||||
nix = let
|
||||
flakeInputs = lib.filterAttrs (_: lib.isType "flake") inputs;
|
||||
in {
|
||||
settings = {
|
||||
# Enable flakes and new 'nix' command
|
||||
experimental-features = "nix-command flakes";
|
||||
|
||||
# Opinionated: disable global registry
|
||||
flake-registry = "";
|
||||
|
||||
# Deduplicate and optimize nix store
|
||||
auto-optimise-store = true;
|
||||
|
||||
# Trusted users (useful for remote builds)
|
||||
# trusted-users = [ "root" "@wheel" ];
|
||||
|
||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||
nix-path = config.nix.nixPath;
|
||||
};
|
||||
|
||||
# Garbage collection
|
||||
gc = {
|
||||
automatic = true;
|
||||
options = "--delete-older-than 7d";
|
||||
};
|
||||
|
||||
# Opinionated: make flake registry and nix path match flake inputs
|
||||
registry = lib.mapAttrs (_: flake: {inherit flake;}) flakeInputs;
|
||||
nixPath = lib.mapAttrsToList (n: _: "${n}=flake:${n}") flakeInputs;
|
||||
};
|
||||
|
||||
# Shared nixpkgs configuration
|
||||
nixpkgs = {
|
||||
overlays = [
|
||||
inputs.self.overlays.additions
|
||||
inputs.self.overlays.modifications
|
||||
inputs.self.overlays.unstable-packages
|
||||
];
|
||||
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Shared environment packages
|
||||
environment.systemPackages = with pkgs; [
|
||||
vim
|
||||
git
|
||||
curl
|
||||
wget
|
||||
];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
# This is your nix-darwin configuration for macOS
|
||||
# Use this to configure your macOS system environment
|
||||
{
|
||||
inputs,
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
# You can import other darwin modules here
|
||||
imports = [
|
||||
# Shared configuration between NixOS and nix-darwin
|
||||
../common.nix
|
||||
|
||||
# If you want to use modules your own flake exports (from modules/darwin):
|
||||
# inputs.self.darwinModules.example
|
||||
|
||||
# You can also split up your configuration and import pieces of it here:
|
||||
# ./brew.nix
|
||||
# ./defaults.nix
|
||||
];
|
||||
|
||||
# macOS-specific Nix settings (common.nix has the shared ones)
|
||||
# Any darwin-specific nix configuration can go here
|
||||
|
||||
# Auto upgrade nix package and the daemon service
|
||||
services.nix-daemon.enable = true;
|
||||
|
||||
# Necessary for using flakes on this system
|
||||
nix.package = pkgs.nix;
|
||||
|
||||
# TODO: Set your hostname
|
||||
networking.hostName = "your-hostname";
|
||||
networking.computerName = "your-hostname";
|
||||
|
||||
# Create /etc/zshrc that loads the nix-darwin environment
|
||||
programs.zsh.enable = true;
|
||||
programs.fish.enable = true;
|
||||
|
||||
# Used for backwards compatibility, please read the changelog before changing
|
||||
# $ darwin-rebuild changelog
|
||||
system.stateVersion = 4;
|
||||
|
||||
# The platform the configuration will be used on
|
||||
nixpkgs.hostPlatform = "aarch64-darwin"; # or "x86_64-darwin"
|
||||
|
||||
# TODO: Configure your system-wide user settings (groups, etc)
|
||||
users.users.your-username = {
|
||||
name = "your-username";
|
||||
home = "/Users/your-username";
|
||||
};
|
||||
|
||||
# System-wide packages
|
||||
environment.systemPackages = with pkgs; [
|
||||
vim
|
||||
];
|
||||
|
||||
# macOS system defaults
|
||||
system.defaults = {
|
||||
dock = {
|
||||
autohide = true;
|
||||
orientation = "bottom";
|
||||
showhidden = true;
|
||||
mru-spaces = false;
|
||||
};
|
||||
|
||||
finder = {
|
||||
AppleShowAllExtensions = true;
|
||||
FXEnableExtensionChangeWarning = false;
|
||||
_FXShowPosixPathInTitle = true;
|
||||
};
|
||||
|
||||
NSGlobalDomain = {
|
||||
AppleShowAllExtensions = true;
|
||||
InitialKeyRepeat = 14;
|
||||
KeyRepeat = 1;
|
||||
};
|
||||
};
|
||||
|
||||
# Keyboard and trackpad settings
|
||||
system.keyboard = {
|
||||
enableKeyMapping = true;
|
||||
remapCapsLockToControl = true;
|
||||
};
|
||||
|
||||
# Security
|
||||
security.pam.enableSudoTouchIdAuth = true;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
self,
|
||||
nixpkgs,
|
||||
home-manager,
|
||||
darwin,
|
||||
...
|
||||
} @ inputs: let
|
||||
# Supported systems for your flake packages, shell, etc.
|
||||
@@ -61,17 +62,48 @@
|
||||
modules = [
|
||||
# > Our main nixos configuration file <
|
||||
./nixos/configuration.nix
|
||||
# Integrate home-manager as a NixOS module
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = {inherit inputs;};
|
||||
# FIXME: Replace with your username
|
||||
home-manager.users.your-username = import ./home-manager/home.nix;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# nix-darwin configuration entrypoint
|
||||
# Available through 'darwin-rebuild switch --flake .#your-hostname'
|
||||
darwinConfigurations = {
|
||||
# FIXME replace with your hostname
|
||||
your-hostname = darwin.lib.darwinSystem {
|
||||
specialArgs = {inherit inputs;};
|
||||
modules = [
|
||||
# > Our main darwin configuration file <
|
||||
./darwin/configuration.nix
|
||||
# Integrate home-manager as a darwin module
|
||||
home-manager.darwinModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = {inherit inputs;};
|
||||
# FIXME: Replace with your username
|
||||
home-manager.users.your-username = import ./home-manager/home.nix;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# Standalone home-manager configuration entrypoint
|
||||
# Available through 'home-manager --flake .#your-username@your-hostname'
|
||||
# Useful for systems where you don't have root access
|
||||
homeConfigurations = {
|
||||
# FIXME replace with your username@hostname
|
||||
"your-username@your-hostname" = home-manager.lib.homeManagerConfiguration {
|
||||
# Home-manager requires 'pkgs' instance
|
||||
pkgs = nixpkgs.legacyPackages.x86_64-linux; # FIXME replace x86_64-linux with your architecure
|
||||
pkgs = nixpkgs.legacyPackages.x86_64-linux; # FIXME: Set to your architecture
|
||||
extraSpecialArgs = {inherit inputs;};
|
||||
modules = [
|
||||
# > Our main home-manager configuration file <
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
# Common configuration shared across all platforms
|
||||
{
|
||||
inputs,
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
nixpkgs = {
|
||||
# You can add overlays here
|
||||
overlays = [
|
||||
# Add overlays your own flake exports (from overlays and pkgs dir):
|
||||
inputs.self.overlays.additions
|
||||
inputs.self.overlays.modifications
|
||||
inputs.self.overlays.unstable-packages
|
||||
];
|
||||
# Configure your nixpkgs instance
|
||||
config = {
|
||||
# Disable if you don't want unfree packages
|
||||
allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Enable home-manager
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
# Basic packages everyone should have
|
||||
home.packages = with pkgs; [
|
||||
# Archives
|
||||
zip
|
||||
unzip
|
||||
|
||||
# Utils
|
||||
ripgrep # Better grep
|
||||
fd # Better find
|
||||
jq # JSON processor
|
||||
yq-go # YAML processor
|
||||
|
||||
# System tools
|
||||
htop
|
||||
tree
|
||||
wget
|
||||
curl
|
||||
];
|
||||
|
||||
# Basic git configuration
|
||||
programs.git = {
|
||||
enable = true;
|
||||
extraConfig = {
|
||||
init.defaultBranch = "main";
|
||||
pull.rebase = true;
|
||||
push.autoSetupRemote = true;
|
||||
};
|
||||
};
|
||||
|
||||
# https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
|
||||
home.stateVersion = "24.05";
|
||||
}
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
# macOS-specific home-manager configuration
|
||||
{
|
||||
inputs,
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: lib.mkIf pkgs.stdenv.isDarwin {
|
||||
# macOS-specific packages
|
||||
home.packages = with pkgs; [
|
||||
# macOS CLI tools
|
||||
# m-cli # Swiss Army Knife for macOS
|
||||
|
||||
# GUI applications (if you want to manage them with nix)
|
||||
# Note: Many prefer to use homebrew for GUI apps on macOS
|
||||
];
|
||||
|
||||
# macOS-specific configurations
|
||||
home.sessionVariables = {
|
||||
# Fix for Nix on macOS
|
||||
NIX_PATH = "nixpkgs=${inputs.nixpkgs}:darwin=${inputs.darwin}";
|
||||
};
|
||||
|
||||
# Fish shell configuration for macOS
|
||||
programs.fish = lib.mkIf config.programs.fish.enable {
|
||||
shellInit = ''
|
||||
# Add Homebrew to PATH if it exists
|
||||
if test -d /opt/homebrew/bin
|
||||
fish_add_path /opt/homebrew/bin
|
||||
end
|
||||
'';
|
||||
};
|
||||
|
||||
# Zsh configuration for macOS
|
||||
programs.zsh = lib.mkIf config.programs.zsh.enable {
|
||||
initExtra = ''
|
||||
# Add Homebrew to PATH if it exists
|
||||
if [[ -d /opt/homebrew/bin ]]; then
|
||||
eval "$(/opt/homebrew/bin/brew shellenv)"
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
# Bash configuration for macOS
|
||||
programs.bash = lib.mkIf config.programs.bash.enable {
|
||||
initExtra = ''
|
||||
# Add Homebrew to PATH if it exists
|
||||
if [[ -d /opt/homebrew/bin ]]; then
|
||||
eval "$(/opt/homebrew/bin/brew shellenv)"
|
||||
fi
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
# Development tools and environment
|
||||
{
|
||||
inputs,
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
home.packages = with pkgs; [
|
||||
# Version control
|
||||
git
|
||||
gh # GitHub CLI
|
||||
lazygit # Terminal UI for git
|
||||
|
||||
# Languages and runtimes (add what you need)
|
||||
# python311
|
||||
# nodejs_20
|
||||
# go
|
||||
# rustc
|
||||
# cargo
|
||||
|
||||
# Build tools
|
||||
gnumake
|
||||
cmake
|
||||
|
||||
# Text editors / IDEs
|
||||
# neovim
|
||||
# vscode
|
||||
|
||||
# Docker and containers (Linux only, macOS uses Docker Desktop)
|
||||
] ++ lib.optionals pkgs.stdenv.isLinux [
|
||||
# docker
|
||||
# docker-compose
|
||||
];
|
||||
|
||||
# Git configuration for development
|
||||
programs.git = {
|
||||
enable = true;
|
||||
# TODO: Configure your git identity
|
||||
# userName = "Your Name";
|
||||
# userEmail = "your.email@example.com";
|
||||
|
||||
extraConfig = {
|
||||
core.editor = "vim";
|
||||
merge.conflictstyle = "diff3";
|
||||
diff.algorithm = "histogram";
|
||||
};
|
||||
|
||||
# Git aliases
|
||||
aliases = {
|
||||
st = "status";
|
||||
co = "checkout";
|
||||
br = "branch";
|
||||
ci = "commit";
|
||||
unstage = "reset HEAD --";
|
||||
last = "log -1 HEAD";
|
||||
lg = "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit";
|
||||
};
|
||||
};
|
||||
|
||||
# GitHub CLI
|
||||
programs.gh = {
|
||||
enable = true;
|
||||
settings = {
|
||||
git_protocol = "ssh";
|
||||
prompt = "enabled";
|
||||
};
|
||||
};
|
||||
|
||||
# Direnv for per-directory environments
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
}
|
||||
|
||||
+28
-47
@@ -7,60 +7,41 @@
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
# You can import other home-manager modules here
|
||||
# Import modular configurations
|
||||
imports = [
|
||||
# Base configuration shared across all platforms
|
||||
./common.nix
|
||||
|
||||
# Feature modules
|
||||
./development.nix
|
||||
./shell.nix
|
||||
./terminal.nix
|
||||
|
||||
# Platform-specific configurations
|
||||
./linux.nix
|
||||
./darwin.nix
|
||||
|
||||
# If you want to use modules your own flake exports (from modules/home-manager):
|
||||
# inputs.self.homeManagerModules.example
|
||||
|
||||
# Or modules exported from other flakes (such as nix-colors):
|
||||
# inputs.nix-colors.homeManagerModules.default
|
||||
|
||||
# You can also split up your configuration and import pieces of it here:
|
||||
# ./nvim.nix
|
||||
];
|
||||
|
||||
nixpkgs = {
|
||||
# You can add overlays here
|
||||
overlays = [
|
||||
# Add overlays your own flake exports (from overlays and pkgs dir):
|
||||
inputs.self.overlays.additions
|
||||
inputs.self.overlays.modifications
|
||||
inputs.self.overlays.unstable-packages
|
||||
|
||||
# You can also add overlays exported from other flakes:
|
||||
# neovim-nightly-overlay.overlays.default
|
||||
|
||||
# Or define it inline, for example:
|
||||
# (final: prev: {
|
||||
# hi = final.hello.overrideAttrs (oldAttrs: {
|
||||
# patches = [ ./change-hello-to-hi.patch ];
|
||||
# });
|
||||
# })
|
||||
];
|
||||
# Configure your nixpkgs instance
|
||||
config = {
|
||||
# Disable if you don't want unfree packages
|
||||
allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
# TODO: Set your username
|
||||
home = {
|
||||
username = "your-username";
|
||||
homeDirectory = "/home/your-username";
|
||||
username = lib.mkDefault "your-username";
|
||||
homeDirectory = lib.mkDefault (
|
||||
if pkgs.stdenv.isDarwin
|
||||
then "/Users/${config.home.username}"
|
||||
else "/home/${config.home.username}"
|
||||
);
|
||||
};
|
||||
|
||||
# Add stuff for your user as you see fit:
|
||||
# programs.neovim.enable = true;
|
||||
# home.packages = with pkgs; [ steam ];
|
||||
|
||||
# Enable home-manager and git
|
||||
programs.home-manager.enable = true;
|
||||
programs.git.enable = true;
|
||||
|
||||
# Nicely reload system units when changing configs
|
||||
systemd.user.startServices = "sd-switch";
|
||||
|
||||
# https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
|
||||
home.stateVersion = "23.05";
|
||||
# Platform-aware session variables
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nvim";
|
||||
VISUAL = "nvim";
|
||||
} // lib.optionalAttrs pkgs.stdenv.isDarwin {
|
||||
# macOS-specific environment variables
|
||||
} // lib.optionalAttrs pkgs.stdenv.isLinux {
|
||||
# Linux-specific environment variables
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
# Linux-specific home-manager configuration
|
||||
{
|
||||
inputs,
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: lib.mkIf pkgs.stdenv.isLinux {
|
||||
# Linux-specific packages
|
||||
home.packages = with pkgs; [
|
||||
# GUI applications (if you use a desktop environment)
|
||||
# firefox
|
||||
# chromium
|
||||
|
||||
# Linux-specific CLI tools
|
||||
# xclip
|
||||
# xsel
|
||||
];
|
||||
|
||||
# Systemd user services (Linux only)
|
||||
systemd.user.startServices = "sd-switch";
|
||||
|
||||
# X11/Wayland specific configurations
|
||||
# xsession.enable = true;
|
||||
# wayland.windowManager.sway.enable = true;
|
||||
|
||||
# GTK theme configuration
|
||||
gtk = {
|
||||
enable = true;
|
||||
# theme = {
|
||||
# name = "Adwaita-dark";
|
||||
# package = pkgs.gnome.gnome-themes-extra;
|
||||
# };
|
||||
};
|
||||
|
||||
# Qt theme configuration
|
||||
qt = {
|
||||
enable = true;
|
||||
platformTheme.name = "gtk";
|
||||
};
|
||||
|
||||
# Services
|
||||
services = {
|
||||
# Clipboard manager
|
||||
# clipmenu.enable = true;
|
||||
|
||||
# Notification daemon
|
||||
# dunst.enable = true;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
# Shell configuration (bash, zsh, fish, etc.)
|
||||
{
|
||||
inputs,
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
# Bash configuration
|
||||
programs.bash = {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
|
||||
shellAliases = {
|
||||
ll = "ls -la";
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
gs = "git status";
|
||||
gd = "git diff";
|
||||
};
|
||||
};
|
||||
|
||||
# Zsh configuration
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
autosuggestion.enable = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
|
||||
shellAliases = {
|
||||
ll = "ls -la";
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
gs = "git status";
|
||||
gd = "git diff";
|
||||
nix-gc = "nix-collect-garbage -d";
|
||||
};
|
||||
|
||||
history = {
|
||||
size = 10000;
|
||||
path = "${config.home.homeDirectory}/.zsh_history";
|
||||
};
|
||||
|
||||
initExtra = ''
|
||||
# Custom prompt or additional configuration
|
||||
setopt HIST_IGNORE_ALL_DUPS
|
||||
setopt HIST_FIND_NO_DUPS
|
||||
setopt HIST_REDUCE_BLANKS
|
||||
'';
|
||||
};
|
||||
|
||||
# Fish configuration
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
shellAliases = {
|
||||
ll = "ls -la";
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
gs = "git status";
|
||||
gd = "git diff";
|
||||
};
|
||||
|
||||
functions = {
|
||||
mkcd = "mkdir -p $argv[1]; and cd $argv[1]";
|
||||
};
|
||||
};
|
||||
|
||||
# Starship prompt (works with all shells)
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
add_newline = true;
|
||||
character = {
|
||||
success_symbol = "[➜](bold green)";
|
||||
error_symbol = "[➜](bold red)";
|
||||
};
|
||||
package.disabled = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Zoxide (better cd)
|
||||
programs.zoxide = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableZshIntegration = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
|
||||
# fzf (fuzzy finder)
|
||||
programs.fzf = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableZshIntegration = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
|
||||
# Eza (modern ls replacement)
|
||||
programs.eza = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableZshIntegration = true;
|
||||
enableFishIntegration = true;
|
||||
git = true;
|
||||
icons = true;
|
||||
};
|
||||
|
||||
# Bat (better cat)
|
||||
programs.bat = {
|
||||
enable = true;
|
||||
config = {
|
||||
theme = "TwoDark";
|
||||
pager = "less -FR";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
# Terminal applications and utilities
|
||||
{
|
||||
inputs,
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
home.packages = with pkgs; [
|
||||
# Modern CLI tools
|
||||
ripgrep # Better grep
|
||||
fd # Better find
|
||||
sd # Better sed
|
||||
du-dust # Better du
|
||||
duf # Better df
|
||||
procs # Better ps
|
||||
bottom # Better top/htop
|
||||
|
||||
# File managers
|
||||
# ranger
|
||||
# nnn
|
||||
# lf
|
||||
|
||||
# Multiplexers
|
||||
# tmux
|
||||
# zellij
|
||||
];
|
||||
|
||||
# Tmux configuration
|
||||
programs.tmux = {
|
||||
enable = true;
|
||||
terminal = "tmux-256color";
|
||||
historyLimit = 10000;
|
||||
baseIndex = 1;
|
||||
keyMode = "vi";
|
||||
mouse = true;
|
||||
|
||||
plugins = with pkgs.tmuxPlugins; [
|
||||
sensible
|
||||
yank
|
||||
vim-tmux-navigator
|
||||
];
|
||||
|
||||
extraConfig = ''
|
||||
# Split panes using | and -
|
||||
bind | split-window -h
|
||||
bind - split-window -v
|
||||
unbind '"'
|
||||
unbind %
|
||||
|
||||
# Reload config
|
||||
bind r source-file ~/.config/tmux/tmux.conf
|
||||
|
||||
# Easy pane switching
|
||||
bind -n M-Left select-pane -L
|
||||
bind -n M-Right select-pane -R
|
||||
bind -n M-Up select-pane -U
|
||||
bind -n M-Down select-pane -D
|
||||
'';
|
||||
};
|
||||
|
||||
# Neovim (optional, can be expanded)
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
|
||||
extraConfig = ''
|
||||
set number
|
||||
set relativenumber
|
||||
set expandtab
|
||||
set tabstop=2
|
||||
set shiftwidth=2
|
||||
set smartindent
|
||||
set clipboard=unnamedplus
|
||||
'';
|
||||
};
|
||||
|
||||
# Alacritty terminal emulator configuration
|
||||
programs.alacritty = {
|
||||
enable = true;
|
||||
settings = {
|
||||
window = {
|
||||
padding = {
|
||||
x = 10;
|
||||
y = 10;
|
||||
};
|
||||
decorations = "full";
|
||||
opacity = 0.95;
|
||||
};
|
||||
|
||||
font = {
|
||||
size = 13.0;
|
||||
normal = {
|
||||
family = "JetBrainsMono Nerd Font";
|
||||
style = "Regular";
|
||||
};
|
||||
};
|
||||
|
||||
colors = {
|
||||
primary = {
|
||||
background = "0x1e1e1e";
|
||||
foreground = "0xd4d4d4";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# Add your reusable nix-darwin modules to this directory, on their own file.
|
||||
# These should be stuff you would like to share with others, not your personal configurations.
|
||||
{
|
||||
# List your module files here
|
||||
# my-module = import ./my-module.nix;
|
||||
}
|
||||
|
||||
+6
-41
@@ -9,6 +9,9 @@
|
||||
}: {
|
||||
# You can import other NixOS modules here
|
||||
imports = [
|
||||
# Shared configuration between NixOS and nix-darwin
|
||||
../common.nix
|
||||
|
||||
# If you want to use modules your own flake exports (from modules/nixos):
|
||||
# inputs.self.nixosModules.example
|
||||
|
||||
@@ -23,48 +26,10 @@
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
nixpkgs = {
|
||||
# You can add overlays here
|
||||
overlays = [
|
||||
# Add overlays your own flake exports (from overlays and pkgs dir):
|
||||
inputs.self.overlays.additions
|
||||
inputs.self.overlays.modifications
|
||||
inputs.self.overlays.unstable-packages
|
||||
|
||||
# You can also add overlays exported from other flakes:
|
||||
# neovim-nightly-overlay.overlays.default
|
||||
|
||||
# Or define it inline, for example:
|
||||
# (final: prev: {
|
||||
# hi = final.hello.overrideAttrs (oldAttrs: {
|
||||
# patches = [ ./change-hello-to-hi.patch ];
|
||||
# });
|
||||
# })
|
||||
];
|
||||
# Configure your nixpkgs instance
|
||||
config = {
|
||||
# Disable if you don't want unfree packages
|
||||
allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
nix = let
|
||||
flakeInputs = lib.filterAttrs (_: lib.isType "flake") inputs;
|
||||
in {
|
||||
settings = {
|
||||
# Enable flakes and new 'nix' command
|
||||
experimental-features = "nix-command flakes";
|
||||
# Opinionated: disable global registry
|
||||
flake-registry = "";
|
||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||
nix-path = config.nix.nixPath;
|
||||
};
|
||||
# NixOS-specific Nix settings (common.nix has the shared ones)
|
||||
nix = {
|
||||
# Opinionated: disable channels
|
||||
channel.enable = false;
|
||||
|
||||
# Opinionated: make flake registry and nix path match flake inputs
|
||||
registry = lib.mapAttrs (_: flake: {inherit flake;}) flakeInputs;
|
||||
nixPath = lib.mapAttrsToList (n: _: "${n}=flake:${n}") flakeInputs;
|
||||
};
|
||||
|
||||
# FIXME: Add the rest of your current configuration
|
||||
@@ -103,5 +68,5 @@
|
||||
};
|
||||
|
||||
# https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
|
||||
system.stateVersion = "23.05";
|
||||
system.stateVersion = "24.05";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user