From 13a25fe67503665851ae8667ae994eec047d78f1 Mon Sep 17 00:00:00 2001 From: derped Date: Sat, 9 Sep 2023 22:30:37 +0200 Subject: [PATCH] Add function to generate machine option lists + use it for services. --- fn.nix | 7 +++++++ options/machine.nix | 11 +++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/fn.nix b/fn.nix index 2633632..3ea5a36 100644 --- a/fn.nix +++ b/fn.nix @@ -69,4 +69,11 @@ rec { true) )) ld); + makeOptionTypeList = path: (lists.forEach + # get a list of all files ending in .nix in path + (filter (filePath: hasSuffix ".nix" filePath) + (lsfRec path true)) + # remove leading path and trailing ".nix", replace every slash with "::" + (replaceStrings [ "${path}/" "/" ".nix" ] [ "" "::" "" ]) + ); } diff --git a/options/machine.nix b/options/machine.nix index 1362671..e096c06 100644 --- a/options/machine.nix +++ b/options/machine.nix @@ -5,9 +5,8 @@ with lib; let cfg = config.machine; - metapkgs = let - pPath = (toString ../pkgsets); - in (lists.forEach (fn.lsfRec pPath true) (v: replaceStrings [ "${pPath}/" "/" ".nix" ] [ "" "::" "" ] v)); + pkgsetList = fn.makeOptionTypeList (toString ../pkgsets); + serviceList = fn.makeOptionTypeList (toString ../services); pkgOption = pname: { name = pname; value = rec { @@ -30,16 +29,16 @@ let in { options.machine = { pkgs = mkOption { - type = (types.listOf (types.enum metapkgs)); + type = (types.listOf (types.enum pkgsetList)); default = [ "base" ]; description = '' The list of metapackages to be installed. ''; }; # Package names containing '::' are sub packages and should not have their own pkgset. - pkgsets = listToAttrs (map pkgOption (lists.filter (v: !(strings.hasInfix "::" v)) metapkgs)); + pkgsets = listToAttrs (map pkgOption (lists.filter (v: !(strings.hasInfix "::" v)) pkgsetList)); services = mkOption { - type = types.listOf types.str; + type = (types.listOf (types.enum serviceList)); default = []; description = '' List of services to be enabled.