{ config, lib, pkgs, ... }: with lib; let cfg = config.xdg.systemDirs; configDirs = concatStringsSep ":" cfg.config; dataDirs = concatStringsSep ":" cfg.data; in { meta.maintainers = with maintainers; [ tadfisher ]; options.xdg.systemDirs = { config = mkOption { type = types.listOf types.str; default = [ ]; example = literalExpression ''[ "/etc/xdg" ]''; description = '' Directory names to add to XDG_CONFIG_DIRS in the user session. ''; }; data = mkOption { type = types.listOf types.str; default = [ ]; example = literalExpression ''[ "/usr/share" "/usr/local/share" ]''; description = '' Directory names to add to XDG_DATA_DIRS in the user session. ''; }; }; config = mkMerge [ (mkIf (cfg.config != [ ] || cfg.data != [ ]) { assertions = [ (hm.assertions.assertPlatform "xdg.systemDirs" pkgs platforms.linux) ]; }) (mkIf (cfg.config != [ ]) { home.sessionVariables.XDG_CONFIG_DIRS = "${configDirs}\${XDG_CONFIG_DIRS:+:$XDG_CONFIG_DIRS}"; systemd.user.sessionVariables.XDG_CONFIG_DIRS = "${configDirs}\${XDG_CONFIG_DIRS:+:$XDG_CONFIG_DIRS}"; }) (mkIf (cfg.data != [ ]) { home.sessionVariables.XDG_DATA_DIRS = "${dataDirs}\${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}"; systemd.user.sessionVariables.XDG_DATA_DIRS = "${dataDirs}\${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}"; }) ]; }