Using Stable And Unstable Nix/NixOS Channels Together
For one of my servers that is running NixOS I have been using the stable channel for all packages. However I wanted for one package to use the version of the package that the unstable channel had and had to learn how to do it.
I am using flakes and this is what I originally had as my input:
inputs = {
nixpkgs = {
url = "github:NixOS/nixpkgs/nixos-24.11";
};
};
I added the unstable channel as an input:
inputs = {
nixpkgs = {
url = "github:NixOS/nixpkgs/nixos-24.11";
};
nixpkgs-unstable = { # <-- added this !
url = "github:NixOS/nixpkgs/nixos-unstable";
};
};
I changed my output to make sure my system is configured with both channels as follows (see comments in code snippet for what I added):
outputs =
{
self,
nixpkgs,
nixpkgs-unstable, # <--- added this
}:
let
system = "x86_64-linux";
# Define the pkgs from both stable and unstable channels
pkgs = import nixpkgs {
inherit system;
};
unstablePkgs = import nixpkgs-unstable {
inherit system;
};
in
{
nixosConfigurations = {
myserver = nixpkgs.lib.nixosSystem {
inherit system;
modules = [
./configuration.nix
];
specialArgs = {
inherit pkgs unstablePkgs; # <--- inheriting both!
};
};
};
};
Now where ever I define a nix function I include both pkgs
and unstablePkgs
as arguments and am able to chose what package from which channel to use.
For example when choosing what system packages I want to install:
environment.systemPackages = with pkgs; [
eza
unstablePkgs.ripgrep
];
Happy Days!