From 5c5c44b5b7ecb1e143adc02d17baae8f597c2153 Mon Sep 17 00:00:00 2001 From: Zhong Jianxin Date: Mon, 11 Apr 2022 10:17:02 +0800 Subject: [PATCH] nix: Add registry option --- modules/environment/nix.nix | 64 +++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/modules/environment/nix.nix b/modules/environment/nix.nix index 274b408..48cc44a 100644 --- a/modules/environment/nix.nix +++ b/modules/environment/nix.nix @@ -46,6 +46,65 @@ in ''; }; + registry = mkOption { + type = types.attrsOf (types.submodule ( + let + referenceAttrs = with types; attrsOf (oneOf [ + str + int + bool + package + ]); + in + { config, name, ... }: + { + options = { + from = mkOption { + type = referenceAttrs; + example = { type = "indirect"; id = "nixpkgs"; }; + description = "The flake reference to be rewritten."; + }; + to = mkOption { + type = referenceAttrs; + example = { type = "github"; owner = "my-org"; repo = "my-nixpkgs"; }; + description = "The flake reference is rewritten to."; + }; + flake = mkOption { + type = types.nullOr types.attrs; + default = null; + example = literalExpression "nixpkgs"; + description = '' + The flake input is rewritten to. + ''; + }; + exact = mkOption { + type = types.bool; + default = true; + description = '' + Whether the reference needs to match exactly. If set, + a reference like nixpkgs does not + match with a reference like nixpkgs/nixos-20.03. + ''; + }; + }; + config = { + from = mkDefault { type = "indirect"; id = name; }; + to = mkIf (config.flake != null) (mkDefault + { + type = "path"; + path = config.flake.outPath; + } // filterAttrs + (n: _: n == "lastModified" || n == "rev" || n == "revCount" || n == "narHash") + config.flake); + }; + } + )); + default = { }; + description = '' + A system-wide flake registry. + ''; + }; + substituters = mkOption { type = types.listOf types.str; default = []; @@ -86,6 +145,11 @@ in trusted-public-keys = ${concatStringsSep " " cfg.trustedPublicKeys} ${cfg.extraConfig} ''; + + "nix/registry.json".text = builtins.toJSON { + version = 2; + flakes = mapAttrsToList (n: v: { inherit (v) from to exact; }) cfg.registry; + }; }; nix = {