mirror of
https://github.com/foo-dogsquared/nixos-config.git
synced 2025-01-31 22:57:55 +00:00
Gabriel Arazas
3324c12d4c
Now, there could be multiple wrappers within the configuration but it should still result with one derivation unlike the original version. This could be handy for making package overrides with multiple binaries (for example, 7Z) while making the interface consistent. This turns out to be way nicer than I thought which is a good thing.
128 lines
3.5 KiB
Nix
128 lines
3.5 KiB
Nix
{ name, lib, config, pkgs, envConfig, ... }:
|
|
|
|
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\"";
|
|
};
|
|
|
|
executableName = lib.mkOption {
|
|
type = lib.types.nonEmptyStr;
|
|
description = "The name of the executable.";
|
|
default = name;
|
|
example = "custom-name";
|
|
};
|
|
|
|
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" ];
|
|
};
|
|
|
|
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 fragments to run before the main executable. This option is only
|
|
used when the wrapper script is not compiled into a binary (that is,
|
|
when {option}`build.isBinary` is set to `false`).
|
|
'';
|
|
default = "";
|
|
example = lib.literalExpression ''
|
|
echo "HELLO WORLD!"
|
|
'';
|
|
};
|
|
|
|
makeWrapperArgs = lib.mkOption {
|
|
type = with lib.types; listOf str;
|
|
description = ''
|
|
A list of extra arguments to be passed as part of makeWrapper.
|
|
'';
|
|
example = [ "--inherit-argv0" ];
|
|
readOnly = true;
|
|
};
|
|
};
|
|
|
|
config = {
|
|
makeWrapperArgs = [
|
|
"--argv0" config.arg0
|
|
]
|
|
++ (lib.mapAttrsToList (n: v: "--set ${n} ${v}") config.env)
|
|
++ (builtins.map (v: "--unset ${v}") config.unset)
|
|
++ (builtins.map (v: "--prefix 'PATH' ':' ${lib.escapeShellArg v}") config.pathAdd)
|
|
++ (builtins.map (v: "--add-flags ${v}") config.prependArgs)
|
|
++ (builtins.map (v: "--append-flags ${v}") config.appendArgs)
|
|
++ (lib.optionals (!envConfig.build.isBinary && config.preScript != "") (
|
|
let
|
|
preScript =
|
|
pkgs.runCommand "wrapper-script-prescript-${config.executableName}" { } config.preScript;
|
|
in
|
|
[ "--run" preScript ]));
|
|
};
|
|
}
|