324 lines
6.7 KiB
Markdown
324 lines
6.7 KiB
Markdown
---
|
|
title: Common Configuration Mistakes
|
|
impact: HIGH
|
|
impactDescription: Prevents the most frequently made configuration errors
|
|
tags: mistakes,pitfalls,errors,checklist
|
|
---
|
|
|
|
|
|
## Why This Matters
|
|
|
|
Understanding common mistakes helps avoid them, saving time and preventing configuration errors.
|
|
|
|
## Mistake 1: Overlay in Wrong Location
|
|
|
|
### Symptom
|
|
Package not found even though overlay is defined.
|
|
|
|
### Cause
|
|
Overlay defined in `home.nix` when `useGlobalPkgs = true`.
|
|
|
|
### Solution
|
|
Move overlay to host's home-manager configuration block.
|
|
|
|
```nix
|
|
# ❌ WRONG
|
|
# home-manager/home.nix
|
|
{
|
|
nixpkgs.overlays = [ inputs.overlay.overlays.default ];
|
|
}
|
|
|
|
# ✅ CORRECT
|
|
# hosts/home/default.nix
|
|
{
|
|
home-manager.nixpkgs.overlays = [ inputs.overlay.overlays.default ];
|
|
}
|
|
```
|
|
|
|
**See:** [overlay-scope.md](overlay-scope.md)
|
|
|
|
## Mistake 2: Forgetting specialArgs
|
|
|
|
### Symptom
|
|
`undefined variable 'inputs'` error.
|
|
|
|
### Cause
|
|
Not passing `inputs` via `specialArgs`.
|
|
|
|
### Solution
|
|
Add `specialArgs = { inherit inputs; }`.
|
|
|
|
```nix
|
|
# ❌ WRONG
|
|
outputs = { self, nixpkgs, home-manager }:
|
|
{
|
|
nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
|
|
modules = [ ./hosts/myhost ];
|
|
};
|
|
}
|
|
|
|
# ✅ CORRECT
|
|
outputs = { self, nixpkgs, home-manager, ... }@inputs:
|
|
{
|
|
nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
|
|
specialArgs = { inherit inputs; };
|
|
modules = [ ./hosts/myhost ];
|
|
};
|
|
}
|
|
```
|
|
|
|
**See:** [flakes-structure.md](flakes-structure.md)
|
|
|
|
## Mistake 3: Editing hardware-configuration.nix
|
|
|
|
### Symptom
|
|
Hardware changes lost after running `nixos-generate-config`.
|
|
|
|
### Cause
|
|
Manually editing generated file.
|
|
|
|
### Solution
|
|
Put custom config in `default.nix`, not `hardware-configuration.nix`.
|
|
|
|
```nix
|
|
# ❌ WRONG: Editing hardware-configuration.nix
|
|
# hosts/laptop/hardware-configuration.nix
|
|
{ config, lib, pkgs, modulesPath, ... }:
|
|
{
|
|
# My custom kernel parameters (will be lost!)
|
|
boot.kernelParams = [ "intel_iommu=on" ];
|
|
|
|
# Generated hardware config...
|
|
}
|
|
|
|
# ✅ CORRECT: Custom config in default.nix
|
|
# hosts/laptop/default.nix
|
|
{
|
|
imports = [ ./hardware-configuration.nix ];
|
|
|
|
# Custom kernel parameters (safe!)
|
|
boot.kernelParams = [ "intel_iommu=on" ];
|
|
}
|
|
```
|
|
|
|
**See:** [host-organization.md](host-organization.md)
|
|
|
|
## Mistake 4: Duplicate Package Declarations
|
|
|
|
### Symptom
|
|
Package installed multiple times or conflicts.
|
|
|
|
### Cause
|
|
Same package in both system and Home Manager config.
|
|
|
|
### Solution
|
|
Install in appropriate location only.
|
|
|
|
```nix
|
|
# ❌ WRONG: Same package in both places
|
|
# hosts/base.nix
|
|
environment.systemPackages = with pkgs; [ firefox ];
|
|
|
|
# home-manager/home.nix
|
|
home.packages = with pkgs; [ firefox ]; # Duplicate!
|
|
|
|
# ✅ CORRECT: Choose one location
|
|
# User apps in Home Manager
|
|
home.packages = with pkgs; [ firefox ];
|
|
```
|
|
|
|
**See:** [package-installation.md](package-installation.md)
|
|
|
|
## Mistake 5: Not Following nixpkgs
|
|
|
|
### Symptom
|
|
Slow builds, inconsistent packages.
|
|
|
|
### Cause
|
|
Multiple independent nixpkgs instances.
|
|
|
|
### Solution
|
|
Use `.follows` for dependency inputs.
|
|
|
|
```nix
|
|
# ❌ WRONG: Independent nixpkgs
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
home-manager.url = "github:nix-community/home-manager/release-25.05";
|
|
# home-manager will use its own nixpkgs!
|
|
};
|
|
|
|
# ✅ CORRECT: Follow nixpkgs
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
home-manager.url = "github:nix-community/home-manager/release-25.05";
|
|
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
```
|
|
|
|
**See:** [flakes-structure.md](flakes-structure.md)
|
|
|
|
## Mistake 6: Mixing System and User Concerns
|
|
|
|
### Symptom
|
|
User-specific config in system files or vice versa.
|
|
|
|
### Cause
|
|
Not understanding NixOS vs Home Manager responsibilities.
|
|
|
|
### Solution
|
|
System config in NixOS, user config in Home Manager.
|
|
|
|
```nix
|
|
# ❌ WRONG: User config in system
|
|
# hosts/base.nix
|
|
{
|
|
# User's git config (should be in Home Manager)
|
|
programs.git = {
|
|
enable = true;
|
|
userName = "john";
|
|
userEmail = "john@example.com";
|
|
};
|
|
}
|
|
|
|
# ✅ CORRECT: User config in Home Manager
|
|
# home-manager/home.nix
|
|
{
|
|
programs.git = {
|
|
enable = true;
|
|
userName = "john";
|
|
userEmail = "john@example.com";
|
|
};
|
|
}
|
|
```
|
|
|
|
**See:** [package-installation.md](package-installation.md)
|
|
|
|
## Mistake 7: Forgetting to Rebuild
|
|
|
|
### Symptom
|
|
Changes don't appear after editing config.
|
|
|
|
### Cause
|
|
Editing config but not running rebuild.
|
|
|
|
### Solution
|
|
Always rebuild after config changes.
|
|
|
|
```bash
|
|
# After editing NixOS config
|
|
sudo nixos-rebuild switch --flake .#hostname
|
|
|
|
# After editing Home Manager config (standalone)
|
|
home-manager switch --flake .#hostname
|
|
|
|
# When using NixOS-integrated Home Manager
|
|
sudo nixos-rebuild switch --flake .#hostname
|
|
```
|
|
|
|
## Mistake 8: Overriding systemPackages Multiple Times
|
|
|
|
### Symptom
|
|
Some packages disappear after adding others.
|
|
|
|
### Cause
|
|
Multiple `environment.systemPackages` assignments.
|
|
|
|
### Solution
|
|
Use single list or mkBefore/mkAfter.
|
|
|
|
```nix
|
|
# ❌ WRONG: Multiple assignments
|
|
environment.systemPackages = with pkgs; [ vim git ];
|
|
environment.systemPackages = with pkgs; [ htop ]; # Overwrites!
|
|
|
|
# ✅ CORRECT: Single list
|
|
environment.systemPackages = with pkgs; [
|
|
vim
|
|
git
|
|
htop
|
|
];
|
|
|
|
# ✅ ALSO CORRECT: Use mkBefore/mkAfter
|
|
environment.systemPackages = with pkgs; [ vim git ];
|
|
environment.systemPackages = mkAfter [ pkgs.htop ];
|
|
```
|
|
|
|
## Mistake 9: Hardcoding Paths
|
|
|
|
### Symptom
|
|
Config breaks on different machines.
|
|
|
|
### Cause
|
|
Using absolute paths instead of Nix paths.
|
|
|
|
### Solution
|
|
Use relative paths or Nix constructs.
|
|
|
|
```nix
|
|
# ❌ WRONG: Absolute path
|
|
{ pkgs, ... }:
|
|
{
|
|
environment.systemPackages = [
|
|
"/home/john/my-app/bin/my-app" # Only works for john!
|
|
];
|
|
}
|
|
|
|
# ✅ CORRECT: Use Nix package
|
|
{ pkgs, ... }:
|
|
{
|
|
environment.systemPackages = [ pkgs.my-app ];
|
|
}
|
|
|
|
# ✅ OR: Use path from flake
|
|
{ ... }:
|
|
{
|
|
environment.systemPackages = [
|
|
(pkgs.callPackage ./local-packages/my-app { })
|
|
];
|
|
}
|
|
```
|
|
|
|
## Mistake 10: Not Using Flake References
|
|
|
|
### Symptom
|
|
Can't use packages from flake inputs.
|
|
|
|
### Cause
|
|
Not passing inputs or using wrong reference.
|
|
|
|
### Solution
|
|
Use `inputs.*` syntax.
|
|
|
|
```nix
|
|
# ❌ WRONG: Trying to use input package
|
|
{ pkgs, ... }:
|
|
{
|
|
environment.systemPackages = [
|
|
unfire-overlay # Where does this come from?
|
|
];
|
|
}
|
|
|
|
# ✅ CORRECT: Use input reference
|
|
{ pkgs, inputs, ... }:
|
|
{
|
|
environment.systemPackages = [
|
|
inputs.unfire-overlay.packages.${pkgs.system}.default
|
|
];
|
|
}
|
|
```
|
|
|
|
## Quick Checklist
|
|
|
|
Before committing config changes:
|
|
|
|
- [ ] Overlay in correct location for useGlobalPkgs setting
|
|
- [ ] inputs passed via specialArgs if needed
|
|
- [ ] Not editing hardware-configuration.nix
|
|
- [ ] No duplicate package declarations
|
|
- [ ] Following nixpkgs for dependency inputs
|
|
- [ ] System config separate from user config
|
|
- [ ] Tested with rebuild
|
|
- [ ] Using Nix paths, not absolute paths
|
|
- [ ] Correct input references for flake packages
|