nix-module-wrapper-manager-fds/modules/wrapper-manager/xdg-dirs.nix

77 lines
1.9 KiB
Nix

{ config, lib, ... }:
let
cfg = config.xdg;
xdgDirsOption = {
configDirs = lib.mkOption {
type = with lib.types; listOf str;
description = ''
A list of paths to be appended as part of the `XDG_CONFIG_DIRS`
environment to be applied per-wrapper.
'';
default = [ ];
example = lib.literalExpression ''
wrapperManagerLib.getXdgConfigDirs (with pkgs; [
yt-dlp
neofetch
])
'';
};
dataDirs = lib.mkOption {
type = with lib.types; listOf str;
description = ''
A list of paths to be appended as part of the `XDG_DATA_DIRS`
environment to be applied per-wrapper.
'';
default = [ ];
example = lib.literalExpression ''
wrapperManagerLib.getXdgDataDirs (with pkgs; [
yt-dlp
neofetch
])
'';
};
};
in
{
options.xdg = xdgDirsOption;
options.wrappers = lib.mkOption {
type =
let
xdgDirsType =
{
name,
lib,
config,
...
}:
{
options.xdg = xdgDirsOption;
config = lib.mkMerge [
{
# When set this way, we could allow the user to override everything.
xdg.configDirs = cfg.configDirs;
xdg.dataDirs = cfg.dataDirs;
}
(lib.mkIf (config.xdg.configDirs != [ ]) {
env.XDG_CONFIG_DIRS.value = lib.lists.map builtins.toString config.xdg.configDirs;
env.XDG_CONFIG_DIRS.action = "prefix";
})
(lib.mkIf (config.xdg.dataDirs != [ ]) {
env.XDG_DATA_DIRS.value = lib.lists.map builtins.toString config.xdg.dataDirs;
env.XDG_DATA_DIRS.action = "prefix";
})
];
};
in
with lib.types;
attrsOf (submodule xdgDirsType);
};
}