Very simple elegant approach I am using: The agenda is, to use stable Nix channel, except for packages we want explicitly to use from the other channels. ``` # nix-channel --add https://nixos.org/channels/nixos-unstable unstable # nix-channel --update unstable ``` We don't swap `nixos`, so it stays defacto the channel for Nix to upgrade. ``` # nix-channel --list nixos https://nixos.org/channels/nixos-17.09 unstable https://nixos.org/channels/nixos-unstable ``` Both channels are in the path already: ``` $ echo "$NIX_PATH" nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs:nixos-config=/etc/nixos/configuration.nix:/nix/var/nix/profiles/per-user/root/channels ``` And they are in: ``` $ ls /nix/var/nix/profiles/per-user/root/channels/ ... nixos unstable ``` So their namespaces are seen to Nix through variable. Now, in relevant `/etc/nixos/*.nix`: ``` { config, pkgs, ... }: let unstable = import {}; in { ... environment.systemPackages = with pkgs; [ ... # Unstable packages ## fwupd package unstable.fwupd ... ]; } ```