treewide: null package support (#6582)

Can generate the config without installing application through home-manager. Helpful when a package is broken (or not provided) on a specific platform through nixpkgs and needs to be installed through other means but you still can benefit from the declarative configuration.
This commit is contained in:
Austin Horstman 2025-03-07 18:17:52 -06:00 committed by GitHub
parent 6c2b79403e
commit d2c014e1c7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
83 changed files with 269 additions and 222 deletions

View file

@ -46,7 +46,7 @@ in {
options.programs.nushell = {
enable = lib.mkEnableOption "nushell";
package = lib.mkPackageOption pkgs "nushell" { };
package = lib.mkPackageOption pkgs "nushell" { nullable = true; };
configFile = lib.mkOption {
type = types.nullOr (linesOrSource "config.nu");
@ -197,7 +197,13 @@ in {
};
config = lib.mkIf cfg.enable {
home.packages = [ cfg.package ];
warnings = lib.optional (cfg.package == null && cfg.plugins != [ ]) ''
You have configured `plugins` for `nushell` but have not set `package`.
The listed plugins will not be installed.
'';
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
home.file = lib.mkMerge [
(let
@ -261,7 +267,7 @@ in {
(map (plugin: "plugin add ${lib.getExe plugin}") cfg.plugins)
}'
'';
in lib.mkIf (cfg.plugins != [ ]) {
in lib.mkIf ((cfg.package != null) && (cfg.plugins != [ ])) {
"${configDir}/plugin.msgpackz".source = "${msgPackz}/plugin.msgpackz";
})
];