From 578b0c59aa75fedf7594d4ce95b2038cc53f53cd Mon Sep 17 00:00:00 2001 From: Fabian Montero Date: Tue, 5 Aug 2025 23:22:16 -0600 Subject: add doctrine --- doctrine/default.nix | 12 ++++++++++++ doctrine/lib/default.nix | 10 ++++++++++ doctrine/lib/importAll.nix | 20 ++++++++++++++++++++ doctrine/lib/mk-module.nix | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 80 insertions(+) create mode 100644 doctrine/default.nix create mode 100644 doctrine/lib/default.nix create mode 100644 doctrine/lib/importAll.nix create mode 100644 doctrine/lib/mk-module.nix (limited to 'doctrine') diff --git a/doctrine/default.nix b/doctrine/default.nix new file mode 100644 index 0000000..b4c72b8 --- /dev/null +++ b/doctrine/default.nix @@ -0,0 +1,12 @@ +{ + pkgs, + namespace, +}: let + doctrine = { + lib = import ./lib {inherit lib pkgs doctrine;}; + prefix = "trivium"; + inherit namespace; + }; + inherit (pkgs) lib; +in + doctrine diff --git a/doctrine/lib/default.nix b/doctrine/lib/default.nix new file mode 100644 index 0000000..1b03fe1 --- /dev/null +++ b/doctrine/lib/default.nix @@ -0,0 +1,10 @@ +{ + lib, + doctrine, + pkgs, +}: let + close = f: args: f (args // {inherit lib pkgs doctrine;}); +in { + importAll = pkgs.callPackage ./importAll.nix {}; + mkModule = close (import ./mk-module.nix); +} diff --git a/doctrine/lib/importAll.nix b/doctrine/lib/importAll.nix new file mode 100644 index 0000000..6acabe9 --- /dev/null +++ b/doctrine/lib/importAll.nix @@ -0,0 +1,20 @@ +{lib}: { + root, + exclude ? [], +}: +with builtins; +with lib; +# http://chriswarbo.net/projects/nixos/useful_hacks.html + let + basename = removeSuffix ".nix"; + + isMatch = name: type: + (hasSuffix ".nix" name || type == "directory") + && ! elem name (map basename exclude); + + entry = name: _: { + name = basename name; + value = import (root + "/${name}"); + }; + in + mapAttrs' entry (filterAttrs isMatch (readDir root)) diff --git a/doctrine/lib/mk-module.nix b/doctrine/lib/mk-module.nix new file mode 100644 index 0000000..79c24c5 --- /dev/null +++ b/doctrine/lib/mk-module.nix @@ -0,0 +1,38 @@ +{ + name, + hm ? null, + sys ? null, + options ? null, + lib, + config, + pkgs, + doctrine, +}: let + optionsSet = import options { + inherit config lib pkgs cfg name doctrine; + }; + + configSet = import configFiles.${doctrine.namespace} { + inherit config lib pkgs doctrine cfg; + }; + + configFiles = lib.filterAttrs (k: v: v != null) { + inherit sys hm; + }; + + cfg = config.${doctrine.prefix}.${name}; +in { + config = + lib.optionalAttrs (configFiles ? ${doctrine.namespace}) + (lib.mkIf cfg.enable configSet); + + options = lib.optionalAttrs (options + != null + && optionsSet ? ${doctrine.namespace}) { + ${doctrine.prefix}.${name} = + optionsSet.${doctrine.namespace} + // { + enable = lib.mkEnableOption name; + }; + }; +} -- cgit v1.2.3