Refactor user option types across modules for consistency

Updated multiple configuration files to replace the user option type with a unified `usersOptionType`, enhancing consistency in user management across applications and services. This change simplifies the user configuration process and improves maintainability.
This commit is contained in:
Danilo Reyes
2026-01-16 13:40:44 -06:00
parent f1e6015d39
commit 6573392c3b
29 changed files with 43 additions and 65 deletions

View File

@@ -17,9 +17,8 @@ in
options.my.stylix = { options.my.stylix = {
enable = lib.mkEnableOption "system-wide theming with Stylix"; enable = lib.mkEnableOption "system-wide theming with Stylix";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -40,9 +40,8 @@ in
apps.art = { apps.art = {
enable = lib.mkEnableOption "digital art and creative applications"; enable = lib.mkEnableOption "digital art and creative applications";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -21,9 +21,8 @@ in
options.my.apps.dictionaries = { options.my.apps.dictionaries = {
enable = lib.mkEnableOption "dictionaries and language tools"; enable = lib.mkEnableOption "dictionaries and language tools";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -26,9 +26,8 @@ in
gaming = { gaming = {
enable = lib.mkEnableOption "gaming applications and emulators"; enable = lib.mkEnableOption "gaming applications and emulators";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -31,9 +31,8 @@ in
options.my.apps.internet = { options.my.apps.internet = {
enable = lib.mkEnableOption "internet browsers and communication apps"; enable = lib.mkEnableOption "internet browsers and communication apps";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -9,9 +9,8 @@
options.my.apps.misc = { options.my.apps.misc = {
enable = lib.mkEnableOption "miscellaneous desktop applications"; enable = lib.mkEnableOption "miscellaneous desktop applications";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -33,17 +33,15 @@ in
options.my.apps.multimedia = { options.my.apps.multimedia = {
enable = lib.mkEnableOption "multimedia applications and media players"; enable = lib.mkEnableOption "multimedia applications and media players";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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 = {
enable = lib.mkEnableOption "video editing applications"; enable = lib.mkEnableOption "video editing applications";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -9,9 +9,8 @@
options.my.apps.piano = { options.my.apps.piano = {
enable = lib.mkEnableOption "piano learning and music theory apps"; enable = lib.mkEnableOption "piano learning and music theory apps";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -9,9 +9,8 @@
options.my.apps.office = { options.my.apps.office = {
enable = lib.mkEnableOption "office applications and productivity tools"; enable = lib.mkEnableOption "office applications and productivity tools";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -21,9 +21,8 @@ in
my.dev.cc = { my.dev.cc = {
enable = lib.mkEnableOption "Install C/C++ tooling globally"; enable = lib.mkEnableOption "Install C/C++ tooling globally";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -18,9 +18,8 @@ in
my.dev.docker = { my.dev.docker = {
enable = lib.mkEnableOption "Install Docker tooling globally"; enable = lib.mkEnableOption "Install Docker tooling globally";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -9,9 +9,8 @@
options.my.emacs = { options.my.emacs = {
enable = lib.mkEnableOption "Doom Emacs configuration"; enable = lib.mkEnableOption "Doom Emacs configuration";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -24,9 +24,8 @@ in
my.dev.go = { my.dev.go = {
enable = lib.mkEnableOption "Install Go tooling globally"; enable = lib.mkEnableOption "Install Go tooling globally";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -22,9 +22,8 @@ in
my.dev.haskell = { my.dev.haskell = {
enable = lib.mkEnableOption "Install Haskell tooling globally"; enable = lib.mkEnableOption "Install Haskell tooling globally";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -16,9 +16,8 @@ in
my.dev.javascript = { my.dev.javascript = {
enable = lib.mkEnableOption "Install JavaScript tooling globally"; enable = lib.mkEnableOption "Install JavaScript tooling globally";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -15,9 +15,8 @@ in
my.dev.julia = { my.dev.julia = {
enable = lib.mkEnableOption "Install Julia globally"; enable = lib.mkEnableOption "Install Julia globally";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -22,9 +22,8 @@ in
my.dev.nix = { my.dev.nix = {
enable = lib.mkEnableOption "Install Nix tooling globally"; enable = lib.mkEnableOption "Install Nix tooling globally";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -34,9 +34,8 @@ in
my.dev.python = { my.dev.python = {
enable = lib.mkEnableOption "Install Python tools globally"; enable = lib.mkEnableOption "Install Python tools globally";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -16,9 +16,8 @@ in
my.dev.ruby = { my.dev.ruby = {
enable = lib.mkEnableOption "Install Ruby tooling globally"; enable = lib.mkEnableOption "Install Ruby tooling globally";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -21,9 +21,8 @@ in
my.dev.rust = { my.dev.rust = {
enable = lib.mkEnableOption "Install Rust tooling globally"; enable = lib.mkEnableOption "Install Rust tooling globally";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -20,9 +20,8 @@ in
my.dev.sh = { my.dev.sh = {
enable = lib.mkEnableOption "Install shell scripting tools globally"; enable = lib.mkEnableOption "Install shell scripting tools globally";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -18,9 +18,8 @@ in
my.dev.zig = { my.dev.zig = {
enable = lib.mkEnableOption "Install Zig tooling globally"; enable = lib.mkEnableOption "Install Zig tooling globally";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -14,9 +14,8 @@
install = lib.mkEnableOption "Whether to install the script package"; install = lib.mkEnableOption "Whether to install the script package";
service = lib.mkEnableOption "Whether to enable the script service"; service = lib.mkEnableOption "Whether to enable the script service";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -15,9 +15,8 @@ in
options.my.services.printing = { options.my.services.printing = {
enable = lib.mkEnableOption "printing services and drivers"; enable = lib.mkEnableOption "printing services and drivers";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -16,9 +16,8 @@
description = "The shell to use system-wide (bash or zsh)"; description = "The shell to use system-wide (bash or zsh)";
}; };
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -9,9 +9,8 @@
options.my.shell.exercism = { options.my.shell.exercism = {
enable = lib.mkEnableOption "Exercism coding practice platform"; enable = lib.mkEnableOption "Exercism coding practice platform";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -9,9 +9,8 @@
options.my.shell.multimedia = { options.my.shell.multimedia = {
enable = lib.mkEnableOption "multimedia CLI tools and codecs"; enable = lib.mkEnableOption "multimedia CLI tools and codecs";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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

@@ -12,9 +12,8 @@ in
options.my.shell.tools = { options.my.shell.tools = {
enable = lib.mkEnableOption "shell tools and utilities"; enable = lib.mkEnableOption "shell tools and utilities";
users = lib.mkOption { users = lib.mkOption {
type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); type = inputs.self.lib.usersOptionType lib;
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,8 +237,14 @@ 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 = usersOptionType =
lib: _loc: defs: lib:
lib.mkOptionType {
name = "usersOption";
description = "Either a single user (string) or multiple users (list of strings)";
check = x: builtins.isString x || (builtins.isList x && lib.all builtins.isString x);
merge =
_loc: defs:
let let
normalize = users: if builtins.isString users then [ users ] else users; normalize = users: if builtins.isString users then [ users ] else users;
allUsers = lib.foldl' (acc: def: acc ++ (normalize def.value)) [ ] defs; allUsers = lib.foldl' (acc: def: acc ++ (normalize def.value)) [ ] defs;
@@ -246,4 +252,5 @@ in
lib.unique allUsers; lib.unique allUsers;
}; };
}; };
};
} }