vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / config / nix-flakes.nix
blob90e207fd4a61ee9ed7027e39c1e7c018121ccde8
1 /*
2   Manages the flake registry.
4   See also
5    - ./nix.nix
6    - ./nix-channel.nix
7  */
8 { config, lib, ... }:
9 let
10   inherit (lib)
11     filterAttrs
12     literalExpression
13     mapAttrsToList
14     mkDefault
15     mkIf
16     mkOption
17     types
18     ;
20   cfg = config.nix;
24   options = {
25     nix = {
26       registry = mkOption {
27         type = types.attrsOf (types.submodule (
28           let
29             referenceAttrs = with types; attrsOf (oneOf [
30               str
31               int
32               bool
33               path
34               package
35             ]);
36           in
37           { config, name, ... }:
38           {
39             options = {
40               from = mkOption {
41                 type = referenceAttrs;
42                 example = { type = "indirect"; id = "nixpkgs"; };
43                 description = "The flake reference to be rewritten.";
44               };
45               to = mkOption {
46                 type = referenceAttrs;
47                 example = { type = "github"; owner = "my-org"; repo = "my-nixpkgs"; };
48                 description = "The flake reference {option}`from` is rewritten to.";
49               };
50               flake = mkOption {
51                 type = types.nullOr types.attrs;
52                 default = null;
53                 example = literalExpression "nixpkgs";
54                 description = ''
55                   The flake input {option}`from` is rewritten to.
56                 '';
57               };
58               exact = mkOption {
59                 type = types.bool;
60                 default = true;
61                 description = ''
62                   Whether the {option}`from` reference needs to match exactly. If set,
63                   a {option}`from` reference like `nixpkgs` does not
64                   match with a reference like `nixpkgs/nixos-20.03`.
65                 '';
66               };
67             };
68             config = {
69               from = mkDefault { type = "indirect"; id = name; };
70               to = mkIf (config.flake != null) (mkDefault (
71                 {
72                   type = "path";
73                   path = config.flake.outPath;
74                 } // filterAttrs
75                   (n: _: n == "lastModified" || n == "rev" || n == "narHash")
76                   config.flake
77               ));
78             };
79           }
80         ));
81         default = { };
82         description = ''
83           A system-wide flake registry.
84         '';
85       };
86     };
87   };
89   config = mkIf cfg.enable {
90     environment.etc."nix/registry.json".text = builtins.toJSON {
91       version = 2;
92       flakes = mapAttrsToList (n: v: { inherit (v) from to exact; }) cfg.registry;
93     };
94   };