From 8772bae58c0a1390727aaf13802debfa29757d67 Mon Sep 17 00:00:00 2001 From: Aidan Gauland Date: Sat, 7 Dec 2024 16:23:14 +1300 Subject: [PATCH] nushell: allow installing plugins When the version of Nushell or any Nushell plugin changes, the plugin registry must be regenerated. --- modules/misc/news.nix | 9 +++++++ modules/programs/nushell.nix | 26 ++++++++++++++++++- .../programs/nushell/example-settings.nix | 6 +++-- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/modules/misc/news.nix b/modules/misc/news.nix index 1b6fd3299..a0150bf32 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1890,6 +1890,15 @@ in { NOTE: The minus symbol means to NOT use that particular TLS version. ''; } + + { + time = "2024-12-10T22:20:10+00:00"; + condition = config.programs.nushell.enable; + message = '' + The module 'programs.nushell' can now manage the Nushell plugin + registry with the option 'programs.nushell.plugins'. + ''; + } ]; }; } diff --git a/modules/programs/nushell.nix b/modules/programs/nushell.nix index 6586d1e1a..ec00210af 100644 --- a/modules/programs/nushell.nix +++ b/modules/programs/nushell.nix @@ -39,7 +39,8 @@ let }; }); in { - meta.maintainers = [ maintainers.Philipp-M maintainers.joaquintrinanes ]; + meta.maintainers = + [ maintainers.Philipp-M maintainers.joaquintrinanes maintainers.aidalgol ]; imports = [ (mkRemovedOptionModule [ "programs" "nushell" "settings" ] '' @@ -134,6 +135,15 @@ in { ''; }; + plugins = mkOption { + type = types.listOf types.package; + default = [ ]; + example = lib.literalExpression "[ pkgs.nushellPlugins.formats ]"; + description = '' + A list of nushell plugins to write to the plugin registry file. + ''; + }; + shellAliases = mkOption { type = types.attrsOf types.str; default = { }; @@ -203,6 +213,20 @@ in { cfg.extraLogin ]; }) + + (let + msgPackz = pkgs.runCommand "nushellMsgPackz" { } '' + mkdir -p "$out" + ${lib.getExe cfg.package} \ + --plugin-config "$out/plugin.msgpackz" \ + --commands '${ + concatStringsSep "; " + (map (plugin: "plugin add ${lib.getExe plugin}") cfg.plugins) + }' + ''; + in mkIf (cfg.plugins != [ ]) { + "${configDir}/plugin.msgpackz".source = "${msgPackz}/plugin.msgpackz"; + }) ]; }; } diff --git a/tests/modules/programs/nushell/example-settings.nix b/tests/modules/programs/nushell/example-settings.nix index 4fc1402a4..e758000bf 100644 --- a/tests/modules/programs/nushell/example-settings.nix +++ b/tests/modules/programs/nushell/example-settings.nix @@ -23,6 +23,8 @@ } ''; + plugins = [ pkgs.nushellPlugins.formats ]; + shellAliases = { "lsname" = "(ls | get name)"; "ll" = "ls -a"; @@ -41,8 +43,6 @@ }; }; - test.stubs.nushell = { }; - nmt.script = let configDir = if pkgs.stdenv.isDarwin && !config.xdg.enable then "home-files/Library/Application Support/nushell" @@ -58,5 +58,7 @@ assertFileContent \ "${configDir}/login.nu" \ ${./login-expected.nu} + assertFileExists \ + "${configDir}/plugin.msgpackz" ''; }