From 18b4e1ea6f1655b3b3fb7625893fa500b51e1d33 Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Mon, 1 Jun 2026 12:45:19 -0500 Subject: [PATCH] xdg-user-dirs: assert extraConfig key warning --- modules/misc/xdg-user-dirs.nix | 53 ++++++++++++------- tests/modules/misc/xdg/default.nix | 1 + .../misc/xdg/user-dirs-mixed-current.nix | 14 +++++ tests/modules/misc/xdg/user-dirs-mixed.nix | 7 +++ 4 files changed, 55 insertions(+), 20 deletions(-) create mode 100644 tests/modules/misc/xdg/user-dirs-mixed-current.nix diff --git a/modules/misc/xdg-user-dirs.nix b/modules/misc/xdg-user-dirs.nix index 833c725b0..367bc5cc9 100644 --- a/modules/misc/xdg-user-dirs.nix +++ b/modules/misc/xdg-user-dirs.nix @@ -113,25 +113,6 @@ in MISC = "''${config.home.homeDirectory}/Misc"; } ''; - apply = - if lib.versionOlder config.home.stateVersion "26.05" then - lib.mapAttrs' ( - k: - let - matches = lib.match "XDG_(.*)_DIR" k; - in - lib.nameValuePair ( - if matches == null then - k - else - let - name = lib.elemAt matches 0; - in - lib.warn "using keys like ‘${k}’ for xdg.userDirs.extraConfig is deprecated in favor of keys like ‘${name}’" name - ) - ) - else - lib.id; description = '' Other user directories. @@ -175,6 +156,23 @@ in config = let + legacyExtraConfigKeys = lib.filter (key: lib.match "XDG_(.*)_DIR" key != null) ( + lib.attrNames cfg.extraConfig + ); + + normalizeExtraConfigKey = + key: + let + matches = lib.match "XDG_(.*)_DIR" key; + in + if matches == null then key else lib.elemAt matches 0; + + extraConfig = + if lib.versionOlder config.home.stateVersion "26.05" then + lib.mapAttrs' (key: lib.nameValuePair (normalizeExtraConfigKey key)) cfg.extraConfig + else + cfg.extraConfig; + directories = (lib.filterAttrs (_n: v: !isNull v) { DESKTOP = cfg.desktop; @@ -187,11 +185,26 @@ in TEMPLATES = cfg.templates; VIDEOS = cfg.videos; }) - // cfg.extraConfig; + // extraConfig; bindings = lib.mapAttrs' (k: lib.nameValuePair "XDG_${k}_DIR") directories; in lib.mkIf cfg.enable { + warnings = lib.optionals (lib.versionOlder config.home.stateVersion "26.05") ( + map ( + key: + lib.hm.deprecations.mkDeprecatedOptionValueWarning { + option = [ + "xdg" + "userDirs" + "extraConfig" + ]; + old = "keys like `${key}`"; + replacement = "keys like `${normalizeExtraConfigKey key}`"; + } + ) legacyExtraConfigKeys + ); + xdg.configFile."user-dirs.dirs".text = let # For some reason, these need to be wrapped with quotes to be valid. diff --git a/tests/modules/misc/xdg/default.nix b/tests/modules/misc/xdg/default.nix index 3a43fa716..f119d829b 100644 --- a/tests/modules/misc/xdg/default.nix +++ b/tests/modules/misc/xdg/default.nix @@ -8,6 +8,7 @@ xdg-local-bin-in-path = ./local-bin-in-path.nix; xdg-local-bin-not-in-path = ./local-bin-not-in-path.nix; xdg-user-dirs-mixed = ./user-dirs-mixed.nix; + xdg-user-dirs-mixed-current = ./user-dirs-mixed-current.nix; xdg-user-dirs-null = ./user-dirs-null.nix; xdg-user-dirs-short = ./user-dirs-short.nix; xdg-user-dirs-session-vars-legacy = ./user-dirs-session-vars-legacy.nix; diff --git a/tests/modules/misc/xdg/user-dirs-mixed-current.nix b/tests/modules/misc/xdg/user-dirs-mixed-current.nix new file mode 100644 index 000000000..06b971ad3 --- /dev/null +++ b/tests/modules/misc/xdg/user-dirs-mixed-current.nix @@ -0,0 +1,14 @@ +{ config, ... }: + +{ + config = { + home.stateVersion = "26.05"; + + xdg.userDirs = { + enable = true; + extraConfig.XDG_MISC_DIR = "${config.home.homeDirectory}/Misc"; + }; + + test.asserts.warnings.expected = [ ]; + }; +} diff --git a/tests/modules/misc/xdg/user-dirs-mixed.nix b/tests/modules/misc/xdg/user-dirs-mixed.nix index 69e0909fd..30270b0fb 100644 --- a/tests/modules/misc/xdg/user-dirs-mixed.nix +++ b/tests/modules/misc/xdg/user-dirs-mixed.nix @@ -15,6 +15,13 @@ extraConfig.XDG_MISC_DIR = "${config.home.homeDirectory}/Misc"; }; + test.asserts.warnings.expected = [ + '' + Using `xdg.userDirs.extraConfig` as keys like `XDG_MISC_DIR` is deprecated and will be + removed in a future release. Please use keys like `MISC` instead. + '' + ]; + nmt.script = '' configFile=home-files/.config/user-dirs.dirs assertFileExists $configFile