dxvk_1: fix build compatibility with GCC 14 (#360918)
[NixPkgs.git] / nixos / modules / config / nix-flakes.nix
blob69388e791154fc5a2531a54b3f1003cec26787b5
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 (
28           types.submodule (
29             let
30               referenceAttrs =
31                 with types;
32                 attrsOf (oneOf [
33                   str
34                   int
35                   bool
36                   path
37                   package
38                 ]);
39             in
40             { config, name, ... }:
41             {
42               options = {
43                 from = mkOption {
44                   type = referenceAttrs;
45                   example = {
46                     type = "indirect";
47                     id = "nixpkgs";
48                   };
49                   description = "The flake reference to be rewritten.";
50                 };
51                 to = mkOption {
52                   type = referenceAttrs;
53                   example = {
54                     type = "github";
55                     owner = "my-org";
56                     repo = "my-nixpkgs";
57                   };
58                   description = "The flake reference {option}`from` is rewritten to.";
59                 };
60                 flake = mkOption {
61                   type = types.nullOr types.attrs;
62                   default = null;
63                   example = literalExpression "nixpkgs";
64                   description = ''
65                     The flake input {option}`from` is rewritten to.
66                   '';
67                 };
68                 exact = mkOption {
69                   type = types.bool;
70                   default = true;
71                   description = ''
72                     Whether the {option}`from` reference needs to match exactly. If set,
73                     a {option}`from` reference like `nixpkgs` does not
74                     match with a reference like `nixpkgs/nixos-20.03`.
75                   '';
76                 };
77               };
78               config = {
79                 from = mkDefault {
80                   type = "indirect";
81                   id = name;
82                 };
83                 to = mkIf (config.flake != null) (
84                   mkDefault (
85                     {
86                       type = "path";
87                       path = config.flake.outPath;
88                     }
89                     // filterAttrs (n: _: n == "lastModified" || n == "rev" || n == "narHash") config.flake
90                   )
91                 );
92               };
93             }
94           )
95         );
96         default = { };
97         description = ''
98           A system-wide flake registry.
99         '';
100       };
101     };
102   };
104   config = mkIf cfg.enable {
105     environment.etc."nix/registry.json".text = builtins.toJSON {
106       version = 2;
107       flakes = mapAttrsToList (n: v: { inherit (v) from to exact; }) cfg.registry;
108     };
109   };