Add multi-user support for package installations across various modules

Updated multiple configuration files to include a `merge` option for user management, enhancing the ability to handle multi-user setups for applications and services. This change improves flexibility in managing user-specific package installations, ensuring a more streamlined configuration process.
This commit is contained in:
Danilo Reyes
2026-01-16 13:38:49 -06:00
parent cceb4da041
commit f1e6015d39
30 changed files with 67 additions and 30 deletions

View File

@@ -168,37 +168,38 @@
}; };
fonts = { fonts = {
fontconfig.enable = true; fontconfig.enable = true;
packages = let packages =
customFonts = pkgs.stdenvNoCC.mkDerivation { let
name = "custom-fonts"; customFonts = pkgs.stdenvNoCC.mkDerivation {
src = inputs.fonts; name = "custom-fonts";
installPhase = '' src = inputs.fonts;
mkdir -p $out/share/fonts installPhase = ''
find $src -type f \( \ mkdir -p $out/share/fonts
-name "*.ttf" -o \ find $src -type f \( \
-name "*.otf" -o \ -name "*.ttf" -o \
-name "*.woff" -o \ -name "*.otf" -o \
-name "*.woff2" \ -name "*.woff" -o \
\) -exec cp {} $out/share/fonts/ \; -name "*.woff2" \
''; \) -exec cp {} $out/share/fonts/ \;
'';
};
in
builtins.attrValues {
inherit customFonts;
inherit (pkgs)
symbola
comic-neue
cascadia-code
corefonts
;
inherit (pkgs.nerd-fonts)
caskaydia-cove
open-dyslexic
comic-shanns-mono
iosevka
agave
;
}; };
in
builtins.attrValues {
inherit customFonts;
inherit (pkgs)
symbola
comic-neue
cascadia-code
corefonts
;
inherit (pkgs.nerd-fonts)
caskaydia-cove
open-dyslexic
comic-shanns-mono
iosevka
agave
;
};
}; };
powerManagement.cpuFreqGovernor = lib.mkDefault "performance"; powerManagement.cpuFreqGovernor = lib.mkDefault "performance";
} }

View File

@@ -19,6 +19,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.stylix; default = config.my.toggleUsers.stylix;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to apply Stylix theming for"; description = "Users to apply Stylix theming for";
}; };
}; };

View File

@@ -42,6 +42,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.apps; default = config.my.toggleUsers.apps;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install art packages for"; description = "Users to install art packages for";
}; };
}; };

View File

@@ -23,6 +23,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.apps; default = config.my.toggleUsers.apps;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install dictionaries packages for"; description = "Users to install dictionaries packages for";
}; };
}; };

View File

@@ -28,6 +28,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.apps; default = config.my.toggleUsers.apps;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install gaming packages for"; description = "Users to install gaming packages for";
}; };
}; };

View File

@@ -33,6 +33,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.apps; default = config.my.toggleUsers.apps;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install internet packages for"; description = "Users to install internet packages for";
}; };
}; };

View File

@@ -11,6 +11,7 @@
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.apps; default = config.my.toggleUsers.apps;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install misc packages for"; description = "Users to install misc packages for";
}; };
}; };

View File

@@ -35,6 +35,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.apps; default = config.my.toggleUsers.apps;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install multimedia packages for"; description = "Users to install multimedia packages for";
}; };
videoEditing = { videoEditing = {
@@ -42,6 +43,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.apps; default = config.my.toggleUsers.apps;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install video editing packages for"; description = "Users to install video editing packages for";
}; };
}; };

View File

@@ -11,6 +11,7 @@
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.apps; default = config.my.toggleUsers.apps;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install piano packages for"; description = "Users to install piano packages for";
}; };
}; };

View File

@@ -11,6 +11,7 @@
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.apps; default = config.my.toggleUsers.apps;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install office packages for"; description = "Users to install office packages for";
}; };
}; };

View File

@@ -23,6 +23,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.dev; default = config.my.toggleUsers.dev;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install C/C++ packages for"; description = "Users to install C/C++ packages for";
}; };
}; };

View File

@@ -20,6 +20,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.dev; default = config.my.toggleUsers.dev;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install Docker packages for"; description = "Users to install Docker packages for";
}; };
}; };

View File

@@ -11,6 +11,7 @@
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.dev; default = config.my.toggleUsers.dev;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install Emacs packages for"; description = "Users to install Emacs packages for";
}; };
}; };

View File

@@ -26,6 +26,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.dev; default = config.my.toggleUsers.dev;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install Go packages for"; description = "Users to install Go packages for";
}; };
}; };

View File

@@ -24,6 +24,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.dev; default = config.my.toggleUsers.dev;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install Haskell packages for"; description = "Users to install Haskell packages for";
}; };
}; };

View File

@@ -18,6 +18,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.dev; default = config.my.toggleUsers.dev;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install JavaScript packages for"; description = "Users to install JavaScript packages for";
}; };
}; };

View File

@@ -17,6 +17,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.dev; default = config.my.toggleUsers.dev;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install Julia packages for"; description = "Users to install Julia packages for";
}; };
}; };

View File

@@ -24,6 +24,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.dev; default = config.my.toggleUsers.dev;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install Nix packages for"; description = "Users to install Nix packages for";
}; };
}; };

View File

@@ -36,6 +36,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.dev; default = config.my.toggleUsers.dev;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install Python packages for"; description = "Users to install Python packages for";
}; };
}; };

View File

@@ -18,6 +18,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.dev; default = config.my.toggleUsers.dev;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install Ruby packages for"; description = "Users to install Ruby packages for";
}; };
}; };

View File

@@ -23,6 +23,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.dev; default = config.my.toggleUsers.dev;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install Rust packages for"; description = "Users to install Rust packages for";
}; };
}; };

View File

@@ -22,6 +22,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.dev; default = config.my.toggleUsers.dev;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install shell scripting packages for"; description = "Users to install shell scripting packages for";
}; };
}; };

View File

@@ -20,6 +20,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.dev; default = config.my.toggleUsers.dev;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install Zig packages for"; description = "Users to install Zig packages for";
}; };
}; };

View File

@@ -16,6 +16,7 @@
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.scripts; default = config.my.toggleUsers.scripts;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install this script for"; description = "Users to install this script for";
}; };
name = lib.mkOption { name = lib.mkOption {

View File

@@ -17,6 +17,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.services; default = config.my.toggleUsers.services;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install printing packages for"; description = "Users to install printing packages for";
}; };
}; };

View File

@@ -18,6 +18,7 @@
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.shell; default = config.my.toggleUsers.shell;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to configure shell for"; description = "Users to configure shell for";
}; };
}; };

View File

@@ -11,6 +11,7 @@
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.shell; default = config.my.toggleUsers.shell;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install Exercism for"; description = "Users to install Exercism for";
}; };
}; };

View File

@@ -11,6 +11,7 @@
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.shell; default = config.my.toggleUsers.shell;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install multimedia shell tools for"; description = "Users to install multimedia shell tools for";
}; };
}; };

View File

@@ -14,6 +14,7 @@ in
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = lib.types.either lib.types.str (lib.types.listOf lib.types.str);
default = config.my.toggleUsers.shell; default = config.my.toggleUsers.shell;
merge = inputs.self.lib.mergeUsersOption lib;
description = "Users to install shell tools for"; description = "Users to install shell tools for";
}; };
}; };

View File

@@ -237,6 +237,13 @@ in
}) (inputs.self.lib.normalizeUsers users) }) (inputs.self.lib.normalizeUsers users)
); );
getFirstUser = users: if builtins.isString users then users else (builtins.head users); getFirstUser = users: if builtins.isString users then users else (builtins.head users);
mergeUsersOption =
lib: _loc: defs:
let
normalize = users: if builtins.isString users then [ users ] else users;
allUsers = lib.foldl' (acc: def: acc ++ (normalize def.value)) [ ] defs;
in
lib.unique allUsers;
}; };
}; };
} }