diff --git a/config/derek.nix b/config/derek.nix index 1e46728..1de1878 100644 --- a/config/derek.nix +++ b/config/derek.nix @@ -5,6 +5,32 @@ ... }: { + my = { + apps = { + art.enable = true; + art.users = "bearded_dragonn"; + fonts.enable = true; + fonts.users = "bearded_dragonn"; + gaming.enable = true; + gaming.users = "bearded_dragonn"; + }; + dev = { + nix.enable = true; + nix.users = "bearded_dragonn"; + python.enable = true; + python.users = "bearded_dragonn"; + sh.enable = true; + sh.users = "bearded_dragonn"; + }; + shell = { + exercism.enable = true; + exercism.users = "bearded_dragonn"; + tools.enable = true; + tools.users = "bearded_dragonn"; + multimedia.enable = true; + multimedia.users = "bearded_dragonn"; + }; + }; sops.secrets = lib.mkIf config.my.secureHost { derek-password.neededForUsers = true; }; @@ -44,4 +70,5 @@ "games" ]; }; + home-manager.users.bearded_dragonn.home.stateVersion = "23.05"; } diff --git a/config/stylix.nix b/config/stylix.nix index c9dac9e..7504b5b 100644 --- a/config/stylix.nix +++ b/config/stylix.nix @@ -14,7 +14,14 @@ let gnomeEnabled = config.services.desktopManager.gnome.enable; in { - options.my.stylix.enable = lib.mkEnableOption "system-wide theming with Stylix"; + options.my.stylix = { + enable = lib.mkEnableOption "system-wide theming with Stylix"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.stylix; + description = "Users to apply Stylix theming for"; + }; + }; config = { stylix = { inherit (scheme) image polarity; @@ -23,7 +30,7 @@ in targets.qt.platform = lib.mkForce "qtct"; } // lib.optionalAttrs (scheme ? base16Scheme) { inherit (scheme) base16Scheme; }; - home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.stylix (user: { + home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.stylix.users (user: { gtk = lib.mkIf (!cfg.enable && gnomeEnabled) { enable = true; iconTheme = { diff --git a/modules/apps/art.nix b/modules/apps/art.nix index 3d83d85..cd97fe4 100644 --- a/modules/apps/art.nix +++ b/modules/apps/art.nix @@ -37,12 +37,19 @@ let in { options.my = { - apps.art.enable = lib.mkEnableOption "digital art and creative applications"; + apps.art = { + enable = lib.mkEnableOption "digital art and creative applications"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.apps; + description = "Users to install art packages for"; + }; + }; dev.gameDev.enable = lib.mkEnableOption "game development tools and engines"; }; config.users.users = let packages = artPackages ++ gameDevPackages; in - inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages; + inputs.self.lib.mkUserPackages lib config.my.apps.art.users packages; } diff --git a/modules/apps/dictionaries.nix b/modules/apps/dictionaries.nix index b68dbe1..8a47bdf 100644 --- a/modules/apps/dictionaries.nix +++ b/modules/apps/dictionaries.nix @@ -18,8 +18,15 @@ let }; in { - options.my.apps.dictionaries.enable = lib.mkEnableOption "dictionaries and language tools"; + options.my.apps.dictionaries = { + enable = lib.mkEnableOption "dictionaries and language tools"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.apps; + description = "Users to install dictionaries packages for"; + }; + }; config = lib.mkIf config.my.apps.dictionaries.enable { - users.users = inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages; + users.users = inputs.self.lib.mkUserPackages lib config.my.apps.dictionaries.users packages; }; } diff --git a/modules/apps/gaming.nix b/modules/apps/gaming.nix index 1b09c60..1133cdc 100644 --- a/modules/apps/gaming.nix +++ b/modules/apps/gaming.nix @@ -23,7 +23,14 @@ in { imports = [ inputs.nix-gaming.nixosModules.platformOptimizations ]; options.my.apps = { - gaming.enable = lib.mkEnableOption "gaming applications and emulators"; + gaming = { + enable = lib.mkEnableOption "gaming applications and emulators"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.apps; + description = "Users to install gaming packages for"; + }; + }; switch.enable = lib.mkEnableOption "Nintendo Switch homebrew tools"; }; config = lib.mkIf config.my.apps.gaming.enable { @@ -71,6 +78,6 @@ in ; }; in - inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages; + inputs.self.lib.mkUserPackages lib config.my.apps.gaming.users packages; }; } diff --git a/modules/apps/internet.nix b/modules/apps/internet.nix index d9ba600..0ab4f84 100644 --- a/modules/apps/internet.nix +++ b/modules/apps/internet.nix @@ -28,9 +28,16 @@ let krisp-patcher = pkgs.writers.writePython3Bin "krisp-patcher" krisp-settings krisp-patch; 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"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.apps; + description = "Users to install internet packages for"; + }; + }; config = lib.mkIf config.my.apps.internet.enable { - home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.apps (_user: { + home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.apps.internet.users (_user: { programs.librewolf = import ./librewolf.nix; }); programs.geary.enable = true; @@ -54,6 +61,6 @@ in ; }; in - inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages; + inputs.self.lib.mkUserPackages lib config.my.apps.internet.users packages; }; } diff --git a/modules/apps/misc.nix b/modules/apps/misc.nix index 6d612c9..35b3629 100644 --- a/modules/apps/misc.nix +++ b/modules/apps/misc.nix @@ -6,7 +6,14 @@ ... }: { - options.my.apps.misc.enable = lib.mkEnableOption "miscellaneous desktop applications"; + options.my.apps.misc = { + enable = lib.mkEnableOption "miscellaneous desktop applications"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.apps; + description = "Users to install misc packages for"; + }; + }; config = lib.mkIf config.my.apps.misc.enable { users.users = let @@ -19,6 +26,6 @@ ; }; in - inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages; + inputs.self.lib.mkUserPackages lib config.my.apps.misc.users packages; }; } diff --git a/modules/apps/multimedia.nix b/modules/apps/multimedia.nix index 19beadb..3c50477 100644 --- a/modules/apps/multimedia.nix +++ b/modules/apps/multimedia.nix @@ -6,7 +6,14 @@ ... }: { - options.my.apps.multimedia.enable = lib.mkEnableOption "multimedia applications and media players"; + options.my.apps.multimedia = { + enable = lib.mkEnableOption "multimedia applications and media players"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.apps; + description = "Users to install multimedia packages for"; + }; + }; config = lib.mkIf config.my.apps.multimedia.enable { users.users = let @@ -21,6 +28,6 @@ ; }; in - inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages; + inputs.self.lib.mkUserPackages lib config.my.apps.multimedia.users packages; }; } diff --git a/modules/apps/music.nix b/modules/apps/music.nix index f6c10dd..0c0fabf 100644 --- a/modules/apps/music.nix +++ b/modules/apps/music.nix @@ -6,7 +6,14 @@ ... }: { - 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"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.apps; + description = "Users to install piano packages for"; + }; + }; config = lib.mkIf config.my.apps.piano.enable { users.users = let @@ -18,6 +25,6 @@ ; }; in - inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages; + inputs.self.lib.mkUserPackages lib config.my.apps.piano.users packages; }; } diff --git a/modules/apps/office.nix b/modules/apps/office.nix index 1e7fc21..0000ae4 100644 --- a/modules/apps/office.nix +++ b/modules/apps/office.nix @@ -6,7 +6,14 @@ ... }: { - options.my.apps.office.enable = lib.mkEnableOption "office applications and productivity tools"; + options.my.apps.office = { + enable = lib.mkEnableOption "office applications and productivity tools"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.apps; + description = "Users to install office packages for"; + }; + }; config = lib.mkIf config.my.apps.office.enable { environment.variables.CALIBRE_USE_SYSTEM_THEME = "1"; users.users = @@ -22,6 +29,6 @@ ; }; in - inputs.self.lib.mkUserPackages lib config.my.toggleUsers.apps packages; + inputs.self.lib.mkUserPackages lib config.my.apps.office.users packages; }; } diff --git a/modules/dev/cc.nix b/modules/dev/cc.nix index caf0392..f4a1e14 100644 --- a/modules/dev/cc.nix +++ b/modules/dev/cc.nix @@ -18,7 +18,14 @@ let in { options = { - my.dev.cc.enable = lib.mkEnableOption "Install C/C++ tooling globally"; + my.dev.cc = { + enable = lib.mkEnableOption "Install C/C++ tooling globally"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.dev; + description = "Users to install C/C++ packages for"; + }; + }; devShells.cc = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { @@ -32,6 +39,6 @@ in }; }; config = lib.mkIf config.my.dev.cc.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; }; + users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.cc.users { inherit packages; }; }; } diff --git a/modules/dev/docker.nix b/modules/dev/docker.nix index 875d66e..0d889dc 100644 --- a/modules/dev/docker.nix +++ b/modules/dev/docker.nix @@ -15,7 +15,14 @@ let in { options = { - my.dev.docker.enable = lib.mkEnableOption "Install Docker tooling globally"; + my.dev.docker = { + enable = lib.mkEnableOption "Install Docker tooling globally"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.dev; + description = "Users to install Docker packages for"; + }; + }; devShells.docker = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { @@ -30,7 +37,7 @@ in }; config = lib.mkMerge [ (lib.mkIf config.my.dev.docker.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; }; + users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.docker.users { inherit packages; }; }) { environment.variables.DOCKER_CONFIG = "\${XDG_CONFIG_HOME}/docker"; diff --git a/modules/dev/emacs.nix b/modules/dev/emacs.nix index c6b5ec0..fac11e8 100644 --- a/modules/dev/emacs.nix +++ b/modules/dev/emacs.nix @@ -6,9 +6,16 @@ ... }: { - options.my.emacs.enable = lib.mkEnableOption "Doom Emacs configuration"; + options.my.emacs = { + enable = lib.mkEnableOption "Doom Emacs configuration"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.dev; + description = "Users to install Emacs packages for"; + }; + }; config = lib.mkIf config.my.emacs.enable { - home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.dev (_user: { + home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.emacs.users (_user: { xdg.dataFile = { "doom/templates/events.org".source = ../../dotfiles/doom/templates/events.org; "doom/templates/default.org".source = ../../dotfiles/doom/templates/default.org; @@ -48,7 +55,7 @@ ; }; in - inputs.self.lib.mkUserPackages lib config.my.toggleUsers.dev packages; + inputs.self.lib.mkUserPackages lib config.my.emacs.users packages; services.emacs = { enable = true; defaultEditor = true; @@ -60,7 +67,7 @@ epkgs: let inherit - (config.home-manager.users.${inputs.self.lib.getFirstUser config.my.toggleUsers.dev}.programs.emacs) + (config.home-manager.users.${inputs.self.lib.getFirstUser config.my.emacs.users}.programs.emacs) extraPackages extraConfig ; diff --git a/modules/dev/go.nix b/modules/dev/go.nix index c74fd5a..17735b2 100644 --- a/modules/dev/go.nix +++ b/modules/dev/go.nix @@ -21,7 +21,14 @@ let in { options = { - my.dev.go.enable = lib.mkEnableOption "Install Go tooling globally"; + my.dev.go = { + enable = lib.mkEnableOption "Install Go tooling globally"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.dev; + description = "Users to install Go packages for"; + }; + }; devShells.go = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { @@ -39,7 +46,7 @@ in environment.variables = { inherit GOPATH; }; } (lib.mkIf config.my.dev.go.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; }; + users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.go.users { inherit packages; }; }) ]; } diff --git a/modules/dev/haskell.nix b/modules/dev/haskell.nix index 6a36d70..0e54a0f 100644 --- a/modules/dev/haskell.nix +++ b/modules/dev/haskell.nix @@ -19,7 +19,14 @@ let in { options = { - my.dev.haskell.enable = lib.mkEnableOption "Install Haskell tooling globally"; + my.dev.haskell = { + enable = lib.mkEnableOption "Install Haskell tooling globally"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.dev; + description = "Users to install Haskell packages for"; + }; + }; devShells.haskell = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { @@ -34,7 +41,7 @@ in }; config = lib.mkMerge [ (lib.mkIf config.my.dev.haskell.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; }; + users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.haskell.users { inherit packages; }; }) { environment.variables = { diff --git a/modules/dev/javascript.nix b/modules/dev/javascript.nix index 56be303..ac4e9e9 100644 --- a/modules/dev/javascript.nix +++ b/modules/dev/javascript.nix @@ -13,7 +13,14 @@ let in { options = { - my.dev.javascript.enable = lib.mkEnableOption "Install JavaScript tooling globally"; + my.dev.javascript = { + enable = lib.mkEnableOption "Install JavaScript tooling globally"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.dev; + description = "Users to install JavaScript packages for"; + }; + }; devShells.javascript = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { @@ -28,10 +35,10 @@ in }; config = lib.mkMerge [ (lib.mkIf config.my.dev.javascript.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; }; + users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.javascript.users { inherit packages; }; }) { - home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.dev (_user: { + home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.dev.javascript.users (_user: { xdg.configFile = { "npm/npmrc".source = ../../dotfiles/npmrc; "configstore/update-notifier-npm-check.json".text = builtins.toJSON { diff --git a/modules/dev/julia.nix b/modules/dev/julia.nix index 0a65e36..42a3cd9 100644 --- a/modules/dev/julia.nix +++ b/modules/dev/julia.nix @@ -12,7 +12,14 @@ let in { options = { - my.dev.julia.enable = lib.mkEnableOption "Install Julia globally"; + my.dev.julia = { + enable = lib.mkEnableOption "Install Julia globally"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.dev; + description = "Users to install Julia packages for"; + }; + }; devShells.julia = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { @@ -26,6 +33,6 @@ in }; }; config = lib.mkIf config.my.dev.julia.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; }; + users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.julia.users { inherit packages; }; }; } diff --git a/modules/dev/nix.nix b/modules/dev/nix.nix index 196d1d2..a671815 100644 --- a/modules/dev/nix.nix +++ b/modules/dev/nix.nix @@ -19,7 +19,14 @@ let in { options = { - my.dev.nix.enable = lib.mkEnableOption "Install Nix tooling globally"; + my.dev.nix = { + enable = lib.mkEnableOption "Install Nix tooling globally"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.dev; + description = "Users to install Nix packages for"; + }; + }; devShells.nix = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { @@ -33,8 +40,8 @@ in }; }; config = lib.mkIf config.my.dev.nix.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; }; - home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.dev (_user: { + users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.nix.users { inherit packages; }; + home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.dev.nix.users (_user: { programs.${shellType}.shellAliases = inputs.self.lib.mergeAliases inputs.self.lib.commonAliases { nixformat = '' deadnix -e && \ diff --git a/modules/dev/python.nix b/modules/dev/python.nix index 3a02f5c..d405363 100644 --- a/modules/dev/python.nix +++ b/modules/dev/python.nix @@ -31,7 +31,14 @@ let in { options = { - my.dev.python.enable = lib.mkEnableOption "Install Python tools globally"; + my.dev.python = { + enable = lib.mkEnableOption "Install Python tools globally"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.dev; + description = "Users to install Python packages for"; + }; + }; devShells.python = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { @@ -47,10 +54,10 @@ in }; config = lib.mkMerge [ (lib.mkIf config.my.dev.python.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; }; + users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.python.users { inherit packages; }; }) { - home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.dev (_user: { + home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.dev.python.users (_user: { xdg.configFile."python/pythonrc".source = ../../dotfiles/pythonrc; }); environment.variables.PYTHONSTARTUP = "\${XDG_CONFIG_HOME}/python/pythonrc"; diff --git a/modules/dev/ruby.nix b/modules/dev/ruby.nix index f50c651..60910be 100644 --- a/modules/dev/ruby.nix +++ b/modules/dev/ruby.nix @@ -13,7 +13,14 @@ let in { options = { - my.dev.ruby.enable = lib.mkEnableOption "Install Ruby tooling globally"; + my.dev.ruby = { + enable = lib.mkEnableOption "Install Ruby tooling globally"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.dev; + description = "Users to install Ruby packages for"; + }; + }; devShells.ruby = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { @@ -28,7 +35,7 @@ in }; config = lib.mkMerge [ (lib.mkIf config.my.dev.ruby.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; }; + users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.ruby.users { inherit packages; }; }) { environment.variables = { diff --git a/modules/dev/rust.nix b/modules/dev/rust.nix index 15bc254..766cb7c 100644 --- a/modules/dev/rust.nix +++ b/modules/dev/rust.nix @@ -18,7 +18,14 @@ let in { options = { - my.dev.rust.enable = lib.mkEnableOption "Install Rust tooling globally"; + my.dev.rust = { + enable = lib.mkEnableOption "Install Rust tooling globally"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.dev; + description = "Users to install Rust packages for"; + }; + }; devShells.rust = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { @@ -33,7 +40,7 @@ in }; config = lib.mkMerge [ (lib.mkIf config.my.dev.rust.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; }; + users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.rust.users { inherit packages; }; }) { environment.variables.CARGO_HOME = "\${XDG_DATA_HOME}/cargo"; diff --git a/modules/dev/sh.nix b/modules/dev/sh.nix index 8004225..62b441e 100644 --- a/modules/dev/sh.nix +++ b/modules/dev/sh.nix @@ -17,7 +17,14 @@ let in { options = { - my.dev.sh.enable = lib.mkEnableOption "Install shell scripting tools globally"; + my.dev.sh = { + enable = lib.mkEnableOption "Install shell scripting tools globally"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.dev; + description = "Users to install shell scripting packages for"; + }; + }; devShells.sh = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { @@ -31,6 +38,6 @@ in }; }; config = lib.mkIf config.my.dev.sh.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; }; + users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.sh.users { inherit packages; }; }; } diff --git a/modules/dev/zig.nix b/modules/dev/zig.nix index 9d32deb..b74acda 100644 --- a/modules/dev/zig.nix +++ b/modules/dev/zig.nix @@ -15,7 +15,14 @@ let in { options = { - my.dev.zig.enable = lib.mkEnableOption "Install Zig tooling globally"; + my.dev.zig = { + enable = lib.mkEnableOption "Install Zig tooling globally"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.dev; + description = "Users to install Zig packages for"; + }; + }; devShells.zig = lib.mkOption { type = lib.types.package; default = pkgs.mkShell { @@ -29,6 +36,6 @@ in }; }; config = lib.mkIf config.my.dev.zig.enable { - users.users = inputs.self.lib.mkUserAttrs lib config.my.toggleUsers.dev { inherit packages; }; + users.users = inputs.self.lib.mkUserAttrs lib config.my.dev.zig.users { inherit packages; }; }; } diff --git a/modules/factories/mkscript.nix b/modules/factories/mkscript.nix index bed5e76..640b7da 100644 --- a/modules/factories/mkscript.nix +++ b/modules/factories/mkscript.nix @@ -13,6 +13,11 @@ enable = lib.mkEnableOption "Whether to enable this script"; install = lib.mkEnableOption "Whether to install the script package"; service = lib.mkEnableOption "Whether to enable the script service"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.scripts; + description = "Users to install this script for"; + }; name = lib.mkOption { type = lib.types.str; description = "Name of the script."; @@ -39,12 +44,27 @@ config = lib.mkIf (lib.any (s: s.enable) (lib.attrValues config.my.scripts)) { users.users = let - packages = + scriptList = 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) |> lib.flatten; + userMap = lib.foldl' ( + acc: script: + let + users = inputs.self.lib.normalizeUsers script.users; + in + lib.foldl' ( + acc': user: + acc' + // { + ${user} = (acc'.${user} or [ ]) ++ [ script.package ]; + } + ) acc users + ) { } scriptList; in - inputs.self.lib.mkUserPackages lib config.my.toggleUsers.scripts packages; + lib.mkMerge ( + lib.mapAttrsToList (user: packages: inputs.self.lib.mkUserPackages lib user packages) userMap + ); systemd.user.services = config.my.scripts |> lib.mapAttrs' ( diff --git a/modules/scripts/update-dns.nix b/modules/scripts/update-dns.nix index 9355387..22bf062 100644 --- a/modules/scripts/update-dns.nix +++ b/modules/scripts/update-dns.nix @@ -11,8 +11,10 @@ cloudflare-api.sopsFile = ../../secrets/env.yaml; dns = { sopsFile = ../../secrets/env.yaml; - owner = config.users.users.${config.my.toggleUsers.scripts}.name; - inherit (config.users.users.${config.my.toggleUsers.scripts}) group; + owner = config.users.users.${inputs.self.lib.getFirstUser config.my.scripts.update-dns.users}.name; + inherit (config.users.users.${inputs.self.lib.getFirstUser config.my.scripts.update-dns.users}) + group + ; }; }; services.cloudflare-dyndns = { diff --git a/modules/services/printing.nix b/modules/services/printing.nix index b536502..f992e35 100644 --- a/modules/services/printing.nix +++ b/modules/services/printing.nix @@ -12,13 +12,20 @@ let ]; in { - options.my.services.printing.enable = lib.mkEnableOption "printing services and drivers"; + options.my.services.printing = { + enable = lib.mkEnableOption "printing services and drivers"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.services; + description = "Users to install printing packages for"; + }; + }; config = lib.mkIf config.my.services.printing.enable { users.users = let packages = [ pkgs.simple-scan ]; in - inputs.self.lib.mkUserPackages lib config.my.toggleUsers.services packages; + inputs.self.lib.mkUserPackages lib config.my.services.printing.users packages; services.printing = { enable = true; drivers = printingDrivers; diff --git a/modules/shell/config.nix b/modules/shell/config.nix index 32cb1f2..ace9ad2 100644 --- a/modules/shell/config.nix +++ b/modules/shell/config.nix @@ -6,19 +6,26 @@ ... }: { - options.my.shell.type = lib.mkOption { - type = lib.types.enum [ - "bash" - "zsh" - ]; - default = "bash"; - description = "The shell to use system-wide (bash or zsh)"; + options.my.shell = { + type = lib.mkOption { + type = lib.types.enum [ + "bash" + "zsh" + ]; + default = "bash"; + description = "The shell to use system-wide (bash or zsh)"; + }; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.shell; + description = "Users to configure shell for"; + }; }; config = { users.users = lib.mkMerge ( map (user: { ${user}.shell = pkgs.${config.my.shell.type}; - }) (inputs.self.lib.normalizeUsers config.my.toggleUsers.shell) + }) (inputs.self.lib.normalizeUsers config.my.shell.users) ); programs.zsh.enable = config.my.shell.type == "zsh"; }; diff --git a/modules/shell/exercism.nix b/modules/shell/exercism.nix index 93b6778..dcb3fed 100644 --- a/modules/shell/exercism.nix +++ b/modules/shell/exercism.nix @@ -6,7 +6,14 @@ ... }: { - options.my.shell.exercism.enable = lib.mkEnableOption "Exercism coding practice platform"; + options.my.shell.exercism = { + enable = lib.mkEnableOption "Exercism coding practice platform"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.shell; + description = "Users to install Exercism for"; + }; + }; config = lib.mkIf config.my.shell.exercism.enable { users.users = let @@ -17,6 +24,6 @@ ; }; in - inputs.self.lib.mkUserPackages lib config.my.toggleUsers.shell packages; + inputs.self.lib.mkUserPackages lib config.my.shell.exercism.users packages; }; } diff --git a/modules/shell/multimedia.nix b/modules/shell/multimedia.nix index f5bb6f1..2bb17eb 100644 --- a/modules/shell/multimedia.nix +++ b/modules/shell/multimedia.nix @@ -6,44 +6,52 @@ ... }: { - options.my.shell.multimedia.enable = lib.mkEnableOption "multimedia CLI tools and codecs"; + options.my.shell.multimedia = { + enable = lib.mkEnableOption "multimedia CLI tools and codecs"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.shell; + description = "Users to install multimedia shell tools for"; + }; + }; config = lib.mkIf config.my.shell.multimedia.enable { sops.secrets."gallery-dl/secrets" = let - # Use first user for secret ownership - user = inputs.self.lib.getFirstUser config.my.toggleUsers.shell; + user = inputs.self.lib.getFirstUser config.my.shell.multimedia.users; in { sopsFile = ../../secrets/gallery.yaml; owner = user; mode = "0400"; }; - home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.shell (user: { - programs = { - yt-dlp = { - enable = true; - settings = { - embed-thumbnail = true; - embed-subs = true; - sub-langs = "all"; - cookies-from-browser = "firefox+gnomekeyring:/home/${user}/.librewolf/${user}"; + home-manager.users = + inputs.self.lib.mkHomeManagerUsers lib config.my.shell.multimedia.users + (user: { + programs = { + yt-dlp = { + enable = true; + settings = { + embed-thumbnail = true; + embed-subs = true; + sub-langs = "all"; + cookies-from-browser = "firefox+gnomekeyring:/home/${user}/.librewolf/${user}"; + }; + }; + gallery-dl = { + enable = true; + settings = inputs.self.lib.importDotfile ../../dotfiles/gallery-dl.nix; + }; + ${config.my.shell.type} = { + initExtra = lib.mkAfter '' + if [ -r "${config.sops.secrets."gallery-dl/secrets".path}" ]; then + set -a # automatically export all variables + source "${config.sops.secrets."gallery-dl/secrets".path}" + set +a # stop automatically exporting + fi + ''; + }; }; - }; - gallery-dl = { - enable = true; - settings = inputs.self.lib.importDotfile ../../dotfiles/gallery-dl.nix; - }; - ${config.my.shell.type} = { - initExtra = lib.mkAfter '' - if [ -r "${config.sops.secrets."gallery-dl/secrets".path}" ]; then - set -a # automatically export all variables - source "${config.sops.secrets."gallery-dl/secrets".path}" - set +a # stop automatically exporting - fi - ''; - }; - }; - }); + }); users.users = let packages = builtins.attrValues { @@ -54,6 +62,6 @@ ; }; in - inputs.self.lib.mkUserPackages lib config.my.toggleUsers.shell packages; + inputs.self.lib.mkUserPackages lib config.my.shell.multimedia.users packages; }; } diff --git a/modules/shell/tools.nix b/modules/shell/tools.nix index 1220122..adba415 100644 --- a/modules/shell/tools.nix +++ b/modules/shell/tools.nix @@ -9,9 +9,16 @@ let shellType = config.my.shell.type; in { - options.my.shell.tools.enable = lib.mkEnableOption "shell tools and utilities"; + options.my.shell.tools = { + enable = lib.mkEnableOption "shell tools and utilities"; + users = lib.mkOption { + type = lib.types.either lib.types.str (lib.types.listOf lib.types.str); + default = config.my.toggleUsers.shell; + description = "Users to install shell tools for"; + }; + }; config = lib.mkIf config.my.shell.tools.enable { - home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.toggleUsers.shell (user: { + home-manager.users = inputs.self.lib.mkHomeManagerUsers lib config.my.shell.tools.users (user: { programs = { hstr.enable = true; htop = { @@ -114,7 +121,7 @@ in ; }; in - inputs.self.lib.mkUserPackages lib config.my.toggleUsers.shell packages; + inputs.self.lib.mkUserPackages lib config.my.shell.tools.users packages; environment.variables = { HISTFILE = "\${XDG_STATE_HOME}/bash/history"; LESSHISTFILE = "-";