From 6a3e1a494d873c9c00352c2147c0e63cddea98a5 Mon Sep 17 00:00:00 2001 From: Gabriel Arazas Date: Tue, 2 Jul 2024 19:30:47 +0800 Subject: [PATCH] wrapper-manager-fds/modules: init module for home-manager and NixOS integration --- modules/env/common.nix | 88 ++++++++++++++++++++++++++++ modules/env/home-manager/default.nix | 21 +++++++ modules/env/nixos/default.nix | 21 +++++++ 3 files changed, 130 insertions(+) create mode 100644 modules/env/common.nix create mode 100644 modules/env/home-manager/default.nix create mode 100644 modules/env/nixos/default.nix diff --git a/modules/env/common.nix b/modules/env/common.nix new file mode 100644 index 0000000..8313d99 --- /dev/null +++ b/modules/env/common.nix @@ -0,0 +1,88 @@ +{ config, lib, ... }: + +let + cfg = config.wrapper-manager; + + wrapperManagerModule = lib.types.submoduleWith { + description = "wrapper-manager module"; + class = "wrapperManager"; + specialArgs = cfg.extraSpecialArgs // { + modulesPath = builtins.toString ../wrapper-manager; + }; + modules = [ + ({ lib, name, ... }: { + imports = [ ../wrapper-manager ]; + config.executableName = lib.mkDefault name; + }) + ] ++ cfg.sharedModules; + }; +in +{ + options.wrapper-manager = { + sharedModules = lib.mkOption { + type = with lib.types; listOf deferredModule; + default = [ ]; + example = lib.literalExpression '' + [ + { + config.build = { + variant = "package"; + isBinary = true; + }; + } + ] + ''; + description = '' + Extra modules to be added to all of the wrappers. + ''; + }; + + wrappers = lib.mkOption { + type = lib.types.attrsOf wrapperManagerModule; + description = '' + A set of wrappers to be added into the environment configuration. + ''; + default = { }; + example = lib.literalExpression '' + { + neofetch = { + arg0 = lib.getExe' pkgs.neofetch "neofetch"; + appendArgs = [ + "--ascii-distro" "guix" + "--config" ./config/neofetch/config + ]; + }; + + yt-dlp-audio = { + arg0 = lib.getExe' pkgs.yt-dlp "yt-dlp"; + prependArgs = [ + "--config-location" ./config/yt-dlp/audio.conf + ]; + }; + + asciidoctor-fds = { + arg = lib.getExe' pkgs.asciidoctor-with-extensions "asciidoctor"; + executableName = "asciidoctor"; + prependArgs = + builtins.map (v: "-r ''${v}") [ + "asciidoctor-diagram" + "asciidoctor-bibtex" + ]; + }; + } + ''; + }; + + extraSpecialArgs = lib.mkOption { + type = with lib.types; attrsOf anything; + default = { }; + description = '' + Additional set of module arguments to be passed to `specialArgs` of + the wrapper module evaluation. + ''; + example = { + yourMomName = "Joe Mama"; + }; + }; + }; +} diff --git a/modules/env/home-manager/default.nix b/modules/env/home-manager/default.nix new file mode 100644 index 0000000..e92431b --- /dev/null +++ b/modules/env/home-manager/default.nix @@ -0,0 +1,21 @@ +{ config, lib, ... }: + +let + cfg = config.wrapper-manager; +in +{ + imports = [ + ../common.nix + ]; + + options.wrapper-manager.wrappers = lib.mkOption { + type = lib.types.submoduleWith { + specialArgs.hmConfig = config; + }; + }; + + config = lib.mkIf (cfg.wrappers != {}) { + home.packages = + lib.mapAttrsToList (_: wrapper: wrapper.config.build.toplevel) cfg.wrappers; + }; +} diff --git a/modules/env/nixos/default.nix b/modules/env/nixos/default.nix new file mode 100644 index 0000000..abe16d5 --- /dev/null +++ b/modules/env/nixos/default.nix @@ -0,0 +1,21 @@ +{ config, lib, ... }: + +let + cfg = config.wrapper-manager; +in +{ + imports = [ + ../common.nix + ]; + + options.wrapper-manager.wrappers = lib.mkOption { + type = lib.types.submoduleWith { + specialArgs.nixosConfig = config; + }; + }; + + config = lib.mkIf (cfg.wrappers != {}) { + environment.systemPackages = + lib.mapAttrsToList (_: wrapper: wrapper.config.build.toplevel) cfg.wrappers; + }; +}