Add function to generate machine option lists + use it for services.

This commit is contained in:
Kevin Baensch 2023-09-09 22:30:37 +02:00
parent e6efbd736d
commit 13a25fe675
Signed by: derped
GPG key ID: C0F1D326C7626543
2 changed files with 12 additions and 6 deletions

7
fn.nix
View file

@ -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" ] [ "" "::" "" ])
);
}

View file

@ -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.