modules: add env option

(cherry picked from commit db01a0dd97)
This commit is contained in:
Gaetan Lepage 2025-03-23 12:27:50 +01:00 committed by Mergify
parent d35dc6dfca
commit 5bef8e43ce
3 changed files with 72 additions and 1 deletions

View file

@ -28,6 +28,26 @@ let
in
{
options = {
env = mkOption {
type =
with types;
lazyAttrsOf (oneOf [
str
path
int
float
]);
description = "Environment variables to set in the neovim wrapper.";
default = { };
example = {
FOO = 1;
PI = 3.14;
BAR_PATH = "/home/me/.local/share/bar";
INFER_MODE = "local";
BAZ_MAX_COUNT = 1000;
};
};
extraPlugins = mkOption {
type = with types; listOf (either package pluginWithConfigType);
default = [ ];

View file

@ -319,7 +319,16 @@ in
initSource;
extraWrapperArgs = builtins.concatStringsSep " " (
(optional (
# Setting environment variables in the wrapper
(lib.mapAttrsToList (
name: value:
lib.escapeShellArgs [
"--set"
name
value
]
) config.env)
++ (optional (
config.extraPackages != [ ]
) ''--prefix PATH : "${lib.makeBinPath config.extraPackages}"'')
++ (optional config.wrapRc ''--add-flags -u --add-flags "${initFile}"'')

View file

@ -0,0 +1,42 @@
{
env-variables = {
env = {
FOO = "1";
FOO_INT = 42;
FOO_FLOAT = 3.14;
STRING_PATH = "/home/me/.local/share/bar";
REAL_PATH = ./env.nix;
BAZ_MAX_COUNT = "1000";
MUST_BE_ESCAPED = "esc'ape\nme";
};
extraConfigLua = ''
assert(
os.getenv("FOO") == "1"
)
assert(
tonumber(os.getenv("FOO_INT")) == 42
)
assert(
tonumber(os.getenv("FOO_FLOAT")) == 3.14
)
assert(
os.getenv("STRING_PATH") == "/home/me/.local/share/bar"
)
local file_path = os.getenv("REAL_PATH")
assert(
vim.fn.filereadable(file_path)
)
assert(
os.getenv("BAZ_MAX_COUNT") == "1000"
)
assert(
os.getenv("MUST_BE_ESCAPED") == "esc'ape\nme"
)
'';
};
}