diff --git a/modules/programs/nushell.nix b/modules/programs/nushell.nix index d2eca6287..bfedc0a96 100644 --- a/modules/programs/nushell.nix +++ b/modules/programs/nushell.nix @@ -9,12 +9,6 @@ let inherit (lib.hm.nushell) isNushellInline toNushell; cfg = config.programs.nushell; - configDir = - if pkgs.stdenv.isDarwin && !config.xdg.enable then - "Library/Application Support/nushell" - else - "${config.xdg.configHome}/nushell"; - linesOrSource = name: types.submodule ( @@ -54,6 +48,24 @@ in package = lib.mkPackageOption pkgs "nushell" { nullable = true; }; + configDir = lib.mkOption { + type = types.either types.str types.path; + default = + if pkgs.stdenv.isDarwin && !config.xdg.enable then + "Library/Application Support/nushell" + else + "${config.xdg.configHome}/nushell"; + defaultText = lib.literalExpression '' + if pkgs.stdenv.isDarwin && !config.xdg.enable then + "Library/Application Support/nushell" + else + "''${config.xdg.configHome}/nushell"; + ''; + description = '' + Location of the nushell config directory. This directory contains the {file}`config.nu`, {file}`env.nu`, and {file}`login.nu` files, as well as history and plugin files. + ''; + }; + configFile = lib.mkOption { type = types.nullOr (linesOrSource "config.nu"); default = null; @@ -224,7 +236,7 @@ in ); in lib.mkIf writeConfig { - "${configDir}/config.nu".text = lib.mkMerge [ + "${cfg.configDir}/config.nu".text = lib.mkMerge [ ( let hasEnvVars = cfg.environmentVariables != { }; @@ -265,13 +277,13 @@ in ) (lib.mkIf (cfg.envFile != null || cfg.extraEnv != "") { - "${configDir}/env.nu".text = lib.mkMerge [ + "${cfg.configDir}/env.nu".text = lib.mkMerge [ (lib.mkIf (cfg.envFile != null) cfg.envFile.text) cfg.extraEnv ]; }) (lib.mkIf (cfg.loginFile != null || cfg.extraLogin != "") { - "${configDir}/login.nu".text = lib.mkMerge [ + "${cfg.configDir}/login.nu".text = lib.mkMerge [ (lib.mkIf (cfg.loginFile != null) cfg.loginFile.text) cfg.extraLogin ]; @@ -289,7 +301,7 @@ in ''; in lib.mkIf ((cfg.package != null) && (cfg.plugins != [ ])) { - "${configDir}/plugin.msgpackz".source = "${msgPackz}/plugin.msgpackz"; + "${cfg.configDir}/plugin.msgpackz".source = "${msgPackz}/plugin.msgpackz"; } ) ]; diff --git a/tests/modules/programs/nushell/config-dir.nix b/tests/modules/programs/nushell/config-dir.nix new file mode 100644 index 000000000..1df3281d7 --- /dev/null +++ b/tests/modules/programs/nushell/config-dir.nix @@ -0,0 +1,30 @@ +{ config, ... }: +{ + programs.nushell = { + enable = true; + configDir = "${config.xdg.configHome}/nushell-alt-path"; + extraConfig = '' + # extra config + ''; + extraEnv = '' + # extra env + ''; + extraLogin = '' + # extra login + ''; + }; + + nmt.script = '' + assertDirectoryExists home-files/.config/nushell-alt-path + + assertFileExists home-files/.config/nushell-alt-path/config.nu + assertFileRegex home-files/.config/nushell-alt-path/config.nu '# extra config' + + assertFileExists home-files/.config/nushell-alt-path/env.nu + assertFileRegex home-files/.config/nushell-alt-path/env.nu "# extra env" + + assertFileExists home-files/.config/nushell-alt-path/login.nu + assertFileRegex home-files/.config/nushell-alt-path/login.nu '# extra login' + + ''; +} diff --git a/tests/modules/programs/nushell/default.nix b/tests/modules/programs/nushell/default.nix index 52d9b3c7b..101006533 100644 --- a/tests/modules/programs/nushell/default.nix +++ b/tests/modules/programs/nushell/default.nix @@ -1 +1,4 @@ -{ nushell-example-settings = ./example-settings.nix; } +{ + nushell-example-settings = ./example-settings.nix; + nushell-config-dir = ./config-dir.nix; +}