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:
@@ -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";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user