vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / config / nix-channel.nix
blob2703a60f858fbac8e8831f4ef4c741f3693ade2b
1 /*
2   Manages the things that are needed for a traditional nix-channel based
3   configuration to work.
5   See also
6   - ./nix.nix
7   - ./nix-flakes.nix
8  */
9 { config, lib, ... }:
10 let
11   inherit (lib)
12     mkDefault
13     mkIf
14     mkOption
15     stringAfter
16     types
17     ;
19   cfg = config.nix;
23   options = {
24     nix = {
25       channel = {
26         enable = mkOption {
27           description = ''
28             Whether the `nix-channel` command and state files are made available on the machine.
30             The following files are initialized when enabled:
31               - `/nix/var/nix/profiles/per-user/root/channels`
32               - `/root/.nix-channels`
33               - `$HOME/.nix-defexpr/channels` (on login)
35             Disabling this option will not remove the state files from the system.
36           '';
37           type = types.bool;
38           default = true;
39         };
40       };
42       nixPath = mkOption {
43         type = types.listOf types.str;
44         default =
45           if cfg.channel.enable
46           then [
47             "nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos"
48             "nixos-config=/etc/nixos/configuration.nix"
49             "/nix/var/nix/profiles/per-user/root/channels"
50           ]
51           else [ ];
52         defaultText = ''
53           if nix.channel.enable
54           then [
55             "nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos"
56             "nixos-config=/etc/nixos/configuration.nix"
57             "/nix/var/nix/profiles/per-user/root/channels"
58           ]
59           else [];
60         '';
61         description = ''
62           The default Nix expression search path, used by the Nix
63           evaluator to look up paths enclosed in angle brackets
64           (e.g. `<nixpkgs>`).
65         '';
66       };
67     };
69     system = {
70       defaultChannel = mkOption {
71         internal = true;
72         type = types.str;
73         default = "https://nixos.org/channels/nixos-unstable";
74         description = "Default NixOS channel to which the root user is subscribed.";
75       };
76     };
77   };
79   config = mkIf cfg.enable {
81     environment.extraInit =
82       mkIf cfg.channel.enable ''
83         if [ -e "$HOME/.nix-defexpr/channels" ]; then
84           export NIX_PATH="$HOME/.nix-defexpr/channels''${NIX_PATH:+:$NIX_PATH}"
85         fi
86       '';
88     environment.extraSetup = mkIf (!cfg.channel.enable) ''
89       rm --force $out/bin/nix-channel
90     '';
92     # NIX_PATH has a non-empty default according to Nix docs, so we don't unset
93     # it when empty.
94     environment.sessionVariables = {
95       NIX_PATH = cfg.nixPath;
96     };
98     systemd.tmpfiles.rules = lib.mkIf cfg.channel.enable [
99       ''f /root/.nix-channels - - - - ${config.system.defaultChannel} nixos\n''
100     ];
102     system.activationScripts.no-nix-channel = mkIf (!cfg.channel.enable)
103       (stringAfter [ "etc" "users" ] (builtins.readFile ./nix-channel/activation-check.sh));
104   };