nix-module-wrapper-manager-fds/modules/wrapper-manager/base.nix

122 lines
3.2 KiB
Nix

{ config, lib, ... }:
let
flagType = with lib.types; listOf (coercedTo anything (x: builtins.toString x) str);
in
{
options = {
prependArgs = lib.mkOption {
type = flagType;
description = ''
A list of arguments to be prepended to the user-given argument for the
wrapper script.
'';
default = [ ];
example = lib.literalExpression ''
[
"--config" ./config.conf
]
'';
};
appendArgs = lib.mkOption {
type = flagType;
description = ''
A list of arguments to be appended to the user-given argument for the
wrapper script.
'';
default = [ ];
example = lib.literalExpression ''
[
"--name" "doggo"
"--location" "Your mom's home"
]
'';
};
arg0 = lib.mkOption {
type = lib.types.str;
description = ''
The first argument of the wrapper script. This option is used when the
{option}`build.variant` is `executable`.
'';
example = lib.literalExpression "lib.getExe' pkgs.neofetch \"neofetch\"";
};
package = lib.mkOption {
type = lib.types.package;
description = ''
The package to be wrapped. This is used only when the
{option}`build.variant` is set to `package.`
'';
example = lib.literalExpression "pkgs.hello";
};
env = lib.mkOption {
type = with lib.types; attrsOf str;
description = ''
A set of environment variables to be declared in the wrapper script.
'';
default = { };
example = {
"FOO_TYPE" = "custom";
"FOO_LOG_STYLE" = "systemd";
};
};
unset = lib.mkOption {
type = with lib.types; listOf nonEmptyStr;
description = ''
A list of environment variables to be unset into the wrapper script.
'';
default = [ ];
example = [ "NO_COLOR" ];
};
executableName = lib.mkOption {
type = lib.types.nonEmptyStr;
description = ''
The name of the executable of the wrapper script.
This option behaves differently depending on {option}`build.variant`.
- When the build variant option is `executable`, it sets the name of the
wrapper script.
- When the build variant option is `package`, it depends on the name on
one of the executables from the given package.
'';
default =
if config.build.variant == "executable" then
lib.last (lib.path.subpath.components (lib.removePrefix "/" config.arg0))
else
config.package.meta.mainProgram or config.package.pname;
example = "custom-name";
};
pathAdd = lib.mkOption {
type = with lib.types; listOf path;
description = ''
A list of paths to be added as part of the `PATH` environment variable.
'';
default = [ ];
example = lib.literalExpression ''
wrapperManagerLib.getBin (with pkgs; [
yt-dlp
gallery-dl
])
'';
};
preScript = lib.mkOption {
type = lib.types.lines;
description = ''
Script to run before the main executable.
'';
default = "";
example = lib.literalExpression ''
echo "HELLO WORLD!"
'';
};
};
}