Refactor user management functions to use inputs

Removed the `lib.nix` file and refactored various modules to utilize `inputs.self.lib` for user package and attribute management. This change enhances consistency and maintainability across the configuration files.
This commit is contained in:
Danilo Reyes
2026-01-16 10:55:15 -06:00
parent b89d193445
commit 495f6e2e25
31 changed files with 67 additions and 122 deletions

View File

@@ -23,7 +23,7 @@ in
targets.qt.platform = lib.mkForce "qtct"; targets.qt.platform = lib.mkForce "qtct";
} }
// lib.optionalAttrs (scheme ? base16Scheme) { inherit (scheme) base16Scheme; }; // lib.optionalAttrs (scheme ? base16Scheme) { inherit (scheme) base16Scheme; };
home-manager.users.jawz = { home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.stylix (user: {
gtk = lib.mkIf (!cfg.enable && gnomeEnabled) { gtk = lib.mkIf (!cfg.enable && gnomeEnabled) {
enable = true; enable = true;
iconTheme = { iconTheme = {
@@ -44,9 +44,9 @@ in
}; };
targets.librewolf = { targets.librewolf = {
firefoxGnomeTheme.enable = true; firefoxGnomeTheme.enable = true;
profileNames = [ "jawz" ]; profileNames = [ user ];
}; };
}; };
}; });
}; };
} }

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -40,7 +41,6 @@ in
dev.gameDev.enable = lib.mkEnableOption "game development tools and engines"; dev.gameDev.enable = lib.mkEnableOption "game development tools and engines";
}; };
config.users.users = let config.users.users = let
userLib = import ../lib.nix { inherit lib; };
packages = artPackages ++ gameDevPackages; packages = artPackages ++ gameDevPackages;
in userLib.mkUserPackages config.my.toggleUsers.apps packages; in inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages;
} }

View File

@@ -1,11 +1,11 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
}: }:
let let
userLib = import ../lib.nix { inherit lib; };
packages = builtins.attrValues { packages = builtins.attrValues {
inherit (pkgs) inherit (pkgs)
hunspell hunspell
@@ -20,6 +20,6 @@ in
{ {
options.my.apps.dictionaries.enable = lib.mkEnableOption "dictionaries and language tools"; options.my.apps.dictionaries.enable = lib.mkEnableOption "dictionaries and language tools";
config = lib.mkIf config.my.apps.dictionaries.enable { config = lib.mkIf config.my.apps.dictionaries.enable {
users.users = userLib.mkUserPackages config.my.toggleUsers.apps packages; users.users = inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages;
}; };
} }

View File

@@ -1,6 +1,6 @@
{ {
inputs,
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -51,7 +51,6 @@ in
# }; # };
}; };
users.users = let users.users = let
userLib = import ../lib.nix { inherit lib; };
packages = builtins.attrValues { packages = builtins.attrValues {
inherit retroarchWithCores; inherit retroarchWithCores;
inherit (pkgs) inherit (pkgs)
@@ -70,6 +69,6 @@ in
prismlauncher # minecraft launcher with jdk overlays prismlauncher # minecraft launcher with jdk overlays
; ;
}; };
in userLib.mkUserPackages config.my.toggleUsers.apps packages; in inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages;
}; };
} }

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -29,14 +30,11 @@ in
{ {
options.my.apps.internet.enable = lib.mkEnableOption "internet browsers and communication apps"; options.my.apps.internet.enable = lib.mkEnableOption "internet browsers and communication apps";
config = lib.mkIf config.my.apps.internet.enable { config = lib.mkIf config.my.apps.internet.enable {
home-manager.users = let home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.apps (user: {
userLib = import ../lib.nix { inherit lib; };
in userLib.mkHomeManagerUsers config.my.toggleUsers.apps (user: {
programs.librewolf = import ./librewolf.nix; programs.librewolf = import ./librewolf.nix;
}); });
programs.geary.enable = true; programs.geary.enable = true;
users.users = let users.users = let
userLib = import ../lib.nix { inherit lib; };
packages = builtins.attrValues { packages = builtins.attrValues {
# inherit (inputs.zen-browser.packages.x86_64-linux) twilight; # inherit (inputs.zen-browser.packages.x86_64-linux) twilight;
inherit krisp-patcher; inherit krisp-patcher;
@@ -54,6 +52,6 @@ in
fractal # matrix client fractal # matrix client
; ;
}; };
in userLib.mkUserPackages config.my.toggleUsers.apps packages; in inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages;
}; };
} }

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -8,7 +9,6 @@
options.my.apps.misc.enable = lib.mkEnableOption "miscellaneous desktop applications"; options.my.apps.misc.enable = lib.mkEnableOption "miscellaneous desktop applications";
config = lib.mkIf config.my.apps.misc.enable { config = lib.mkIf config.my.apps.misc.enable {
users.users = let users.users = let
userLib = import ../lib.nix { inherit lib; };
packages = builtins.attrValues { packages = builtins.attrValues {
inherit (pkgs) inherit (pkgs)
blanket # background noise blanket # background noise
@@ -17,6 +17,6 @@
gnome-obfuscate # censor private information gnome-obfuscate # censor private information
; ;
}; };
in userLib.mkUserPackages config.my.toggleUsers.apps packages; in inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages;
}; };
} }

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -8,7 +9,6 @@
options.my.apps.multimedia.enable = lib.mkEnableOption "multimedia applications and media players"; options.my.apps.multimedia.enable = lib.mkEnableOption "multimedia applications and media players";
config = lib.mkIf config.my.apps.multimedia.enable { config = lib.mkIf config.my.apps.multimedia.enable {
users.users = let users.users = let
userLib = import ../lib.nix { inherit lib; };
packages = builtins.attrValues { packages = builtins.attrValues {
inherit (pkgs) inherit (pkgs)
curtail # image compressor curtail # image compressor
@@ -19,6 +19,6 @@
tagger # tag music files tagger # tag music files
; ;
}; };
in userLib.mkUserPackages config.my.toggleUsers.apps packages; in inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages;
}; };
} }

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -8,7 +9,6 @@
options.my.apps.piano.enable = lib.mkEnableOption "piano learning and music theory apps"; options.my.apps.piano.enable = lib.mkEnableOption "piano learning and music theory apps";
config = lib.mkIf config.my.apps.piano.enable { config = lib.mkIf config.my.apps.piano.enable {
users.users = let users.users = let
userLib = import ../lib.nix { inherit lib; };
packages = builtins.attrValues { packages = builtins.attrValues {
inherit (pkgs) inherit (pkgs)
neothesia neothesia
@@ -16,6 +16,6 @@
timidity timidity
; ;
}; };
in userLib.mkUserPackages config.my.toggleUsers.apps packages; in inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages;
}; };
} }

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -9,7 +10,6 @@
config = lib.mkIf config.my.apps.office.enable { config = lib.mkIf config.my.apps.office.enable {
environment.variables.CALIBRE_USE_SYSTEM_THEME = "1"; environment.variables.CALIBRE_USE_SYSTEM_THEME = "1";
users.users = let users.users = let
userLib = import ../lib.nix { inherit lib; };
packages = builtins.attrValues { packages = builtins.attrValues {
inherit (pkgs) inherit (pkgs)
jre17_minimal # for libreoffice extensions jre17_minimal # for libreoffice extensions
@@ -20,6 +20,6 @@
# planify # let's pretend I will organize my tasks # planify # let's pretend I will organize my tasks
; ;
}; };
in userLib.mkUserPackages config.my.toggleUsers.apps packages; in inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages;
}; };
} }

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -31,8 +32,6 @@ in
}; };
}; };
config = lib.mkIf config.my.dev.cc.enable { config = lib.mkIf config.my.dev.cc.enable {
users.users = let users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; };
userLib = import ../lib.nix { inherit lib; };
in userLib.mkUserAttrs config.my.toggleUsers.dev { inherit packages; };
}; };
} }

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -29,9 +30,7 @@ in
}; };
config = lib.mkMerge [ config = lib.mkMerge [
(lib.mkIf config.my.dev.docker.enable { (lib.mkIf config.my.dev.docker.enable {
users.users = let users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; };
userLib = import ../lib.nix { inherit lib; };
in userLib.mkUserAttrs config.my.toggleUsers.dev { inherit packages; };
}) })
{ {
environment.variables.DOCKER_CONFIG = "\${XDG_CONFIG_HOME}/docker"; environment.variables.DOCKER_CONFIG = "\${XDG_CONFIG_HOME}/docker";

View File

@@ -8,9 +8,7 @@
{ {
options.my.emacs.enable = lib.mkEnableOption "Doom Emacs configuration"; options.my.emacs.enable = lib.mkEnableOption "Doom Emacs configuration";
config = lib.mkIf config.my.emacs.enable { config = lib.mkIf config.my.emacs.enable {
home-manager.users = let home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.dev (user: {
userLib = import ../lib.nix { inherit lib; };
in userLib.mkHomeManagerUsers config.my.toggleUsers.dev (user: {
xdg.dataFile = { xdg.dataFile = {
"doom/templates/events.org".source = ../../dotfiles/doom/templates/events.org; "doom/templates/events.org".source = ../../dotfiles/doom/templates/events.org;
"doom/templates/default.org".source = ../../dotfiles/doom/templates/default.org; "doom/templates/default.org".source = ../../dotfiles/doom/templates/default.org;
@@ -25,7 +23,6 @@
}; };
}); });
users.users = let users.users = let
userLib = import ../lib.nix { inherit lib; };
packages = builtins.attrValues { packages = builtins.attrValues {
inherit (pkgs.xorg) xwininfo; inherit (pkgs.xorg) xwininfo;
inherit (pkgs) inherit (pkgs)
@@ -49,7 +46,7 @@
prettier # multi-language linter prettier # multi-language linter
; ;
}; };
in userLib.mkUserPackages config.my.toggleUsers.dev packages; in inputs.self.lib.mkUserPackages lib config.my.toggleUsers.dev packages;
services.emacs = { services.emacs = {
enable = true; enable = true;
defaultEditor = true; defaultEditor = true;
@@ -60,7 +57,7 @@
extraPackages = extraPackages =
epkgs: epkgs:
let let
inherit (config.home-manager.users.${(import ../lib.nix { inherit lib; }).getFirstUser config.my.toggleUsers.dev}.programs.emacs) inherit (config.home-manager.users.${inputs.self.lib.getFirstUser config.my.toggleUsers.dev}.programs.emacs)
extraPackages extraPackages
extraConfig extraConfig
; ;

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -38,9 +39,7 @@ in
environment.variables = { inherit GOPATH; }; environment.variables = { inherit GOPATH; };
} }
(lib.mkIf config.my.dev.go.enable { (lib.mkIf config.my.dev.go.enable {
users.users = let users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; };
userLib = import ../lib.nix { inherit lib; };
in userLib.mkUserAttrs config.my.toggleUsers.dev { inherit packages; };
}) })
]; ];
} }

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -33,9 +34,7 @@ in
}; };
config = lib.mkMerge [ config = lib.mkMerge [
(lib.mkIf config.my.dev.haskell.enable { (lib.mkIf config.my.dev.haskell.enable {
users.users = let users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; };
userLib = import ../lib.nix { inherit lib; };
in userLib.mkUserAttrs config.my.toggleUsers.dev { inherit packages; };
}) })
{ {
environment.variables = { environment.variables = {

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -27,14 +28,10 @@ in
}; };
config = lib.mkMerge [ config = lib.mkMerge [
(lib.mkIf config.my.dev.javascript.enable { (lib.mkIf config.my.dev.javascript.enable {
users.users = let users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; };
userLib = import ../lib.nix { inherit lib; };
in userLib.mkUserAttrs config.my.toggleUsers.dev { inherit packages; };
}) })
{ {
home-manager.users = let home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.dev (user: {
userLib = import ../lib.nix { inherit lib; };
in userLib.mkHomeManagerUsers config.my.toggleUsers.dev (user: {
xdg.configFile = { xdg.configFile = {
"npm/npmrc".source = ../../dotfiles/npmrc; "npm/npmrc".source = ../../dotfiles/npmrc;
"configstore/update-notifier-npm-check.json".text = builtins.toJSON { "configstore/update-notifier-npm-check.json".text = builtins.toJSON {

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -25,8 +26,6 @@ in
}; };
}; };
config = lib.mkIf config.my.dev.julia.enable { config = lib.mkIf config.my.dev.julia.enable {
users.users = let users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; };
userLib = import ../lib.nix { inherit lib; };
in userLib.mkUserAttrs config.my.toggleUsers.dev { inherit packages; };
}; };
} }

View File

@@ -33,12 +33,8 @@ in
}; };
}; };
config = lib.mkIf config.my.dev.nix.enable { config = lib.mkIf config.my.dev.nix.enable {
users.users = let users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; };
userLib = import ../lib.nix { inherit lib; }; home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.dev (user: {
in userLib.mkUserAttrs config.my.toggleUsers.dev { inherit packages; };
home-manager.users = let
userLib = import ../lib.nix { inherit lib; };
in userLib.mkHomeManagerUsers config.my.toggleUsers.dev (user: {
programs.${shellType}.shellAliases = programs.${shellType}.shellAliases =
inputs.self.lib.mergeAliases inputs.self.lib.commonAliases inputs.self.lib.mergeAliases inputs.self.lib.commonAliases
{ {

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -46,14 +47,10 @@ in
}; };
config = lib.mkMerge [ config = lib.mkMerge [
(lib.mkIf config.my.dev.python.enable { (lib.mkIf config.my.dev.python.enable {
users.users = let users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; };
userLib = import ../lib.nix { inherit lib; };
in userLib.mkUserAttrs config.my.toggleUsers.dev { inherit packages; };
}) })
{ {
home-manager.users = let home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.dev (user: {
userLib = import ../lib.nix { inherit lib; };
in userLib.mkHomeManagerUsers config.my.toggleUsers.dev (user: {
xdg.configFile."python/pythonrc".source = ../../dotfiles/pythonrc; xdg.configFile."python/pythonrc".source = ../../dotfiles/pythonrc;
}); });
environment.variables.PYTHONSTARTUP = "\${XDG_CONFIG_HOME}/python/pythonrc"; environment.variables.PYTHONSTARTUP = "\${XDG_CONFIG_HOME}/python/pythonrc";

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -27,9 +28,7 @@ in
}; };
config = lib.mkMerge [ config = lib.mkMerge [
(lib.mkIf config.my.dev.ruby.enable { (lib.mkIf config.my.dev.ruby.enable {
users.users = let users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; };
userLib = import ../lib.nix { inherit lib; };
in userLib.mkUserAttrs config.my.toggleUsers.dev { inherit packages; };
}) })
{ {
environment.variables = { environment.variables = {

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -32,9 +33,7 @@ in
}; };
config = lib.mkMerge [ config = lib.mkMerge [
(lib.mkIf config.my.dev.rust.enable { (lib.mkIf config.my.dev.rust.enable {
users.users = let users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; };
userLib = import ../lib.nix { inherit lib; };
in userLib.mkUserAttrs config.my.toggleUsers.dev { inherit packages; };
}) })
{ {
environment.variables.CARGO_HOME = "\${XDG_DATA_HOME}/cargo"; environment.variables.CARGO_HOME = "\${XDG_DATA_HOME}/cargo";

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -30,8 +31,6 @@ in
}; };
}; };
config = lib.mkIf config.my.dev.sh.enable { config = lib.mkIf config.my.dev.sh.enable {
users.users = let users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; };
userLib = import ../lib.nix { inherit lib; };
in userLib.mkUserAttrs config.my.toggleUsers.dev { inherit packages; };
}; };
} }

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -28,8 +29,6 @@ in
}; };
}; };
config = lib.mkIf config.my.dev.zig.enable { config = lib.mkIf config.my.dev.zig.enable {
users.users = let users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; };
userLib = import ../lib.nix { inherit lib; };
in userLib.mkUserAttrs config.my.toggleUsers.dev { inherit packages; };
}; };
} }

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -37,11 +38,10 @@
}; };
config = lib.mkIf (lib.any (s: s.enable) (lib.attrValues config.my.scripts)) { config = lib.mkIf (lib.any (s: s.enable) (lib.attrValues config.my.scripts)) {
users.users = let users.users = let
userLib = import ../lib.nix { inherit lib; };
packages = config.my.scripts packages = config.my.scripts
|> lib.mapAttrsToList (_name: script: lib.optional (script.enable && script.install) script.package) |> lib.mapAttrsToList (_name: script: lib.optional (script.enable && script.install) script.package)
|> lib.flatten; |> lib.flatten;
in userLib.mkUserPackages config.my.toggleUsers.scripts packages; in inputs.self.lib.mkUserPackages lib config.my.toggleUsers.scripts packages;
systemd.user.services = systemd.user.services =
config.my.scripts config.my.scripts
|> lib.mapAttrs' ( |> lib.mapAttrs' (

View File

@@ -1,25 +0,0 @@
# Helper functions for multi-user toggle support
# Usage: import this file in your module and use the helpers
{ lib }:
let
normalizeUsers = users:
if lib.isString users then [ users ] else users;
mkUserPackages = users: packages:
lib.mkMerge (map (user: {
${user}.packages = packages;
}) (normalizeUsers users));
mkUserAttrs = users: attrs:
lib.mkMerge (map (user: {
${user} = attrs;
}) (normalizeUsers users));
mkHomeManagerUsers = users: fn:
lib.mkMerge (map (user: {
${user} = fn user;
}) (normalizeUsers users));
getFirstUser = users:
if lib.isString users then users else (builtins.head users);
in
{
inherit normalizeUsers mkUserPackages mkUserAttrs mkHomeManagerUsers getFirstUser;
}

View File

@@ -111,13 +111,15 @@ in
shell = "jawz"; shell = "jawz";
scripts = "jawz"; scripts = "jawz";
services = "jawz"; services = "jawz";
stylix = "jawz";
}; };
description = "Map toggle categories to users. Can be a single user (string) or multiple users (list). Determines which user(s) get packages from each toggle category."; description = "Map toggle categories to users. Can be a single user (string) or multiple users (list). Determines which user(s) get packages from each toggle category.";
example = { example = {
apps = "jawz"; apps = "jawz";
dev = "bearded_dragonn"; dev = "bearded_dragonn";
shell = "jawz"; shell = "jawz";
gaming = [ "jawz" "bearded_dragonn" ]; # Install gaming on both users gaming = [ "jawz" "bearded_dragonn" ];
stylix = [ "jawz" "bearded_dragonn" ];
}; };
}; };
}; };

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -14,9 +15,8 @@ in
options.my.services.printing.enable = lib.mkEnableOption "printing services and drivers"; options.my.services.printing.enable = lib.mkEnableOption "printing services and drivers";
config = lib.mkIf config.my.services.printing.enable { config = lib.mkIf config.my.services.printing.enable {
users.users = let users.users = let
userLib = import ../lib.nix { inherit lib; };
packages = [ pkgs.simple-scan ]; packages = [ pkgs.simple-scan ];
in userLib.mkUserPackages config.my.toggleUsers.services packages; in inputs.self.lib.mkUserPackages lib config.my.toggleUsers.services packages;
services.printing = { services.printing = {
enable = true; enable = true;
drivers = printingDrivers; drivers = printingDrivers;

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -14,11 +15,9 @@
description = "The shell to use system-wide (bash or zsh)"; description = "The shell to use system-wide (bash or zsh)";
}; };
config = { config = {
users.users = let users.users = lib.mkMerge (map (user: {
userLib = import ../lib.nix { inherit lib; };
in lib.mkMerge (map (user: {
${user}.shell = pkgs.${config.my.shell.type}; ${user}.shell = pkgs.${config.my.shell.type};
}) (userLib.normalizeUsers config.my.toggleUsers.shell)); }) (inputs.self.lib.normalizeUsers config.my.toggleUsers.shell));
programs.zsh.enable = config.my.shell.type == "zsh"; programs.zsh.enable = config.my.shell.type == "zsh";
}; };
} }

View File

@@ -1,5 +1,6 @@
{ {
config, config,
inputs,
lib, lib,
pkgs, pkgs,
... ...
@@ -8,13 +9,12 @@
options.my.shell.exercism.enable = lib.mkEnableOption "Exercism coding practice platform"; options.my.shell.exercism.enable = lib.mkEnableOption "Exercism coding practice platform";
config = lib.mkIf config.my.shell.exercism.enable { config = lib.mkIf config.my.shell.exercism.enable {
users.users = let users.users = let
userLib = import ../lib.nix { inherit lib; };
packages = builtins.attrValues { packages = builtins.attrValues {
inherit (pkgs) inherit (pkgs)
exercism # learn to code exercism # learn to code
bats # testing system, required by Exercism bats # testing system, required by Exercism
; ;
}; };
in userLib.mkUserPackages config.my.toggleUsers.shell packages; in inputs.self.lib.mkUserPackages lib config.my.toggleUsers.shell packages;
}; };
} }

View File

@@ -9,17 +9,14 @@
options.my.shell.multimedia.enable = lib.mkEnableOption "multimedia CLI tools and codecs"; options.my.shell.multimedia.enable = lib.mkEnableOption "multimedia CLI tools and codecs";
config = lib.mkIf config.my.shell.multimedia.enable { config = lib.mkIf config.my.shell.multimedia.enable {
sops.secrets."gallery-dl/secrets" = let sops.secrets."gallery-dl/secrets" = let
userLib = import ../lib.nix { inherit lib; };
# Use first user for secret ownership # Use first user for secret ownership
user = userLib.getFirstUser config.my.toggleUsers.shell; user = inputs.self.lib.getFirstUser config.my.toggleUsers.shell;
in { in {
sopsFile = ../../secrets/gallery.yaml; sopsFile = ../../secrets/gallery.yaml;
owner = user; owner = user;
mode = "0400"; mode = "0400";
}; };
home-manager.users = let home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.shell (user: {
userLib = import ../lib.nix { inherit lib; };
in userLib.mkHomeManagerUsers config.my.toggleUsers.shell (user: {
programs = { programs = {
yt-dlp = { yt-dlp = {
enable = true; enable = true;
@@ -46,7 +43,6 @@
}; };
}); });
users.users = let users.users = let
userLib = import ../lib.nix { inherit lib; };
packages = builtins.attrValues { packages = builtins.attrValues {
inherit (pkgs) inherit (pkgs)
ffmpeg # not ffmpreg, the coolest video conversion tool! ffmpeg # not ffmpreg, the coolest video conversion tool!
@@ -54,6 +50,6 @@
ffpb # make ffmpeg encoding... a bit fun ffpb # make ffmpeg encoding... a bit fun
; ;
}; };
in userLib.mkUserPackages config.my.toggleUsers.shell packages; in inputs.self.lib.mkUserPackages lib config.my.toggleUsers.shell packages;
}; };
} }

View File

@@ -11,9 +11,7 @@ in
{ {
options.my.shell.tools.enable = lib.mkEnableOption "shell tools and utilities"; options.my.shell.tools.enable = lib.mkEnableOption "shell tools and utilities";
config = lib.mkIf config.my.shell.tools.enable { config = lib.mkIf config.my.shell.tools.enable {
home-manager.users = let home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.shell (user: {
userLib = import ../lib.nix { inherit lib; };
in userLib.mkHomeManagerUsers config.my.toggleUsers.shell (user: {
programs = { programs = {
hstr.enable = true; hstr.enable = true;
htop = { htop = {
@@ -99,7 +97,6 @@ in
}; };
}; };
users.users = let users.users = let
userLib = import ../lib.nix { inherit lib; };
packages = builtins.attrValues { packages = builtins.attrValues {
inherit (pkgs) inherit (pkgs)
ripgrep # modern grep ripgrep # modern grep
@@ -115,7 +112,7 @@ in
rmlint # amazing dupe finder that integrates well with BTRFS rmlint # amazing dupe finder that integrates well with BTRFS
; ;
}; };
in userLib.mkUserPackages config.my.toggleUsers.shell packages; in inputs.self.lib.mkUserPackages lib config.my.toggleUsers.shell packages;
environment.variables = { environment.variables = {
HISTFILE = "\${XDG_STATE_HOME}/bash/history"; HISTFILE = "\${XDG_STATE_HOME}/bash/history";
LESSHISTFILE = "-"; LESSHISTFILE = "-";

View File

@@ -213,6 +213,7 @@ in
windows_vm = ../secrets/ssh/ed25519_windows_vm.pub; windows_vm = ../secrets/ssh/ed25519_windows_vm.pub;
}; };
getSshKeys = keyNames: keyNames |> map (name: inputs.self.lib.sshKeys.${name}); getSshKeys = keyNames: keyNames |> map (name: inputs.self.lib.sshKeys.${name});
# Helper functions for multi-user toggle support
normalizeUsers = users: normalizeUsers = users:
if builtins.isString users then [ users ] else users; if builtins.isString users then [ users ] else users;
mkUserPackages = lib: users: packages: mkUserPackages = lib: users: packages: