29027fd1e1
Using pkgs.lib on the spine of module evaluation is problematic because the pkgs argument depends on the result of module evaluation. To prevent an infinite recursion, pkgs and some of the modules are evaluated twice, which is inefficient. Using ‘with lib’ prevents this problem.
44 lines
1.5 KiB
Nix
44 lines
1.5 KiB
Nix
# Provide an initial copy of the NixOS channel so that the user
|
|
# doesn't need to run "nix-channel --update" first.
|
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
# We need a copy of the Nix expressions for Nixpkgs and NixOS on the
|
|
# CD. These are installed into the "nixos" channel of the root
|
|
# user, as expected by nixos-rebuild/nixos-install.
|
|
channelSources = pkgs.runCommand "nixos-${config.system.nixosVersion}"
|
|
{ expr = readFile ../../../lib/channel-expr.nix; }
|
|
''
|
|
mkdir -p $out/nixos
|
|
cp -prd ${pkgs.path} $out/nixos/nixpkgs
|
|
ln -s nixpkgs/nixos $out/nixos/nixos
|
|
chmod -R u+w $out/nixos
|
|
rm -rf $out/nixos/nixpkgs/.git
|
|
echo -n ${config.system.nixosVersion} > $out/nixos/nixpkgs/.version
|
|
echo -n "" > $out/nixos/nixpkgs/.version-suffix
|
|
echo "$expr" > $out/nixos/default.nix
|
|
'';
|
|
|
|
in
|
|
|
|
{
|
|
# Provide the NixOS/Nixpkgs sources in /etc/nixos. This is required
|
|
# for nixos-install.
|
|
boot.postBootCommands = mkAfter
|
|
''
|
|
if ! [ -e /var/lib/nixos/did-channel-init ]; then
|
|
echo "unpacking the NixOS/Nixpkgs sources..."
|
|
mkdir -p /nix/var/nix/profiles/per-user/root
|
|
${config.nix.package}/bin/nix-env -p /nix/var/nix/profiles/per-user/root/channels \
|
|
-i ${channelSources} --quiet --option use-substitutes false
|
|
mkdir -m 0700 -p /root/.nix-defexpr
|
|
ln -s /nix/var/nix/profiles/per-user/root/channels /root/.nix-defexpr/channels
|
|
mkdir -m 0755 -p /var/lib/nixos
|
|
touch /var/lib/nixos/did-channel-init
|
|
fi
|
|
'';
|
|
}
|