- Remove Syncthing service and configurations from users/jsutter.nix - Remove OpenVPN configurations and delete users/openvpn/ folder - Move Android development (programs.adb.enable) to desktop/dev.nix - Remove syncthing and adbusers groups from user extraGroups - Organize documentation: move README-hybrid-packages.md to docs/ folder - Keep main README.md in root for project overview Result: Cleaner, more focused user configuration with development features properly organized in desktop modules and documentation structured in dedicated docs folder.
117 lines
3 KiB
Markdown
117 lines
3 KiB
Markdown
# Hybrid Package Management: Stable + Unstable
|
|
|
|
This NixOS configuration uses a hybrid approach where the system runs on the stable NixOS 24.05 branch but can selectively use packages from the unstable branch when needed.
|
|
|
|
## How It Works
|
|
|
|
The `flake.nix` includes both stable and unstable nixpkgs inputs:
|
|
|
|
```nix
|
|
inputs = {
|
|
nixpkgs.url = "nixpkgs/nixos-24.05"; # Stable base
|
|
nixpkgs-unstable.url = "nixpkgs/nixos-unstable"; # Unstable packages
|
|
# ... other inputs
|
|
};
|
|
```
|
|
|
|
The unstable packages are made available to all system configurations via `specialArgs`:
|
|
|
|
```nix
|
|
nixosConfigurations = {
|
|
framework = nixpkgs.lib.nixosSystem {
|
|
system = "x86_64-linux";
|
|
specialArgs = {
|
|
pkgs-unstable = import nixpkgs-unstable {
|
|
system = "x86_64-linux";
|
|
config.allowUnfree = true;
|
|
};
|
|
};
|
|
modules = [ /* ... */ ];
|
|
};
|
|
};
|
|
```
|
|
|
|
## Using Unstable Packages
|
|
|
|
### In System Configuration Files
|
|
|
|
To use an unstable package in any `.nix` configuration file:
|
|
|
|
1. **Add `pkgs-unstable` to the function parameters:**
|
|
```nix
|
|
{ config, pkgs, pkgs-unstable, ... }:
|
|
```
|
|
|
|
2. **Use the unstable package:**
|
|
```nix
|
|
environment.systemPackages = with pkgs; [
|
|
# Stable packages
|
|
firefox
|
|
git
|
|
|
|
# Unstable packages
|
|
pkgs-unstable.windsurf
|
|
pkgs-unstable.some-other-package
|
|
];
|
|
```
|
|
|
|
### Example: Current Usage
|
|
|
|
See `desktop/dev.nix` for a working example:
|
|
|
|
```nix
|
|
{ config, pkgs, pkgs-unstable, ... }:
|
|
|
|
{
|
|
environment.systemPackages = with pkgs; [
|
|
# Stable packages
|
|
nodejs
|
|
rpi-imager
|
|
|
|
# Unstable packages
|
|
pkgs-unstable.windsurf # Use windsurf from unstable
|
|
];
|
|
}
|
|
```
|
|
|
|
## When to Use Unstable Packages
|
|
|
|
Use unstable packages when:
|
|
- A package is not available in the stable branch
|
|
- You need a newer version with specific features or bug fixes
|
|
- You're developing with cutting-edge tools
|
|
|
|
## Benefits of This Approach
|
|
|
|
1. **System Stability**: Core system components use stable, well-tested packages
|
|
2. **Package Availability**: Access to the latest packages when needed
|
|
3. **Selective Updates**: Choose which packages to get from unstable
|
|
4. **Easy Maintenance**: Clear separation between stable and unstable dependencies
|
|
|
|
## Adding New Unstable Packages
|
|
|
|
To add a new unstable package:
|
|
|
|
1. Find the configuration file where you want to add the package
|
|
2. Ensure the file accepts `pkgs-unstable` parameter
|
|
3. Add `pkgs-unstable.package-name` to the appropriate list
|
|
4. Test with `nixos-rebuild dry-run --flake .#framework`
|
|
5. Apply with `nixos-rebuild switch --flake .#framework`
|
|
|
|
## Updating Packages
|
|
|
|
- **Stable packages**: Updated when you update the flake lock
|
|
- **Unstable packages**: Updated when you run `nix flake update`
|
|
|
|
To update only unstable packages:
|
|
```bash
|
|
nix flake lock --update-input nixpkgs-unstable
|
|
```
|
|
|
|
## Current Unstable Packages in Use
|
|
|
|
- `windsurf` - Modern code editor (in `desktop/dev.nix`)
|
|
|
|
---
|
|
|
|
This hybrid approach gives you the stability of NixOS stable with the flexibility to use cutting-edge packages when needed.
|