From 788777b536df6e4c48fa158a9245c6f8a82beb43 Mon Sep 17 00:00:00 2001
From: Yt <raphael@megzari.com>
Date: Wed, 3 May 2023 18:12:21 -0400
Subject: [PATCH] nushell: add envVars attribute (#3930)

---
 modules/programs/nushell.nix                     | 16 +++++++++++++++-
 tests/modules/programs/nushell/env-expected.nu   |  2 ++
 .../programs/nushell/example-settings.nix        |  2 ++
 3 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/modules/programs/nushell.nix b/modules/programs/nushell.nix
index 9772f711..a977bd4a 100644
--- a/modules/programs/nushell.nix
+++ b/modules/programs/nushell.nix
@@ -121,6 +121,15 @@ in {
         this option) to command strings or directly to build outputs.
       '';
     };
+
+    environmentVariables = mkOption {
+      type = types.attrsOf types.str;
+      default = { };
+      example = { FOO = "BAR"; };
+      description = ''
+        An attribute set that maps an environment variable to a shell interpreted string.
+      '';
+    };
   };
 
   config = mkIf cfg.enable {
@@ -141,10 +150,15 @@ in {
         ];
       })
 
-      (mkIf (cfg.envFile != null || cfg.extraEnv != "") {
+      (let
+        envVarsStr = concatStringsSep "\n"
+          (mapAttrsToList (k: v: "let-env ${k} = ${v}")
+            cfg.environmentVariables);
+      in mkIf (cfg.envFile != null || cfg.extraEnv != "" || envVarsStr != "") {
         "${configDir}/env.nu".text = mkMerge [
           (mkIf (cfg.envFile != null) cfg.envFile.text)
           cfg.extraEnv
+          envVarsStr
         ];
       })
     ];
diff --git a/tests/modules/programs/nushell/env-expected.nu b/tests/modules/programs/nushell/env-expected.nu
index 280b59bf..3d818c42 100644
--- a/tests/modules/programs/nushell/env-expected.nu
+++ b/tests/modules/programs/nushell/env-expected.nu
@@ -1,2 +1,4 @@
 let-env FOO = 'BAR'
 
+
+let-env BAR = $'(echo BAZ)'
\ No newline at end of file
diff --git a/tests/modules/programs/nushell/example-settings.nix b/tests/modules/programs/nushell/example-settings.nix
index 28060d7b..d8cb01a7 100644
--- a/tests/modules/programs/nushell/example-settings.nix
+++ b/tests/modules/programs/nushell/example-settings.nix
@@ -20,6 +20,8 @@
       "lsname" = "(ls | get name)";
       "ll" = "ls -a";
     };
+
+    environmentVariables = { BAR = "$'(echo BAZ)'"; };
   };
 
   test.stubs.nushell = { };