diff --git a/modules/misc/xdg.nix b/modules/misc/xdg.nix index 2b331dfa..76d926ab 100644 --- a/modules/misc/xdg.nix +++ b/modules/misc/xdg.nix @@ -15,7 +15,7 @@ let defaultConfigHome = "${config.home.homeDirectory}/.config"; defaultDataHome = "${config.home.homeDirectory}/.local/share"; - getXdgDir = name: fallback: + getEnvFallback = name: fallback: let value = builtins.getEnv name; in if value != "" then value else fallback; @@ -26,6 +26,7 @@ in { cacheHome = mkOption { type = types.path; defaultText = "~/.cache"; + apply = toString; description = '' Absolute path to directory holding application caches. ''; @@ -43,6 +44,7 @@ in { configHome = mkOption { type = types.path; defaultText = "~/.config"; + apply = toString; description = '' Absolute path to directory holding application configurations. ''; @@ -60,6 +62,7 @@ in { dataHome = mkOption { type = types.path; defaultText = "~/.local/share"; + apply = toString; description = '' Absolute path to directory holding application data. ''; @@ -81,9 +84,11 @@ in { # Legacy non-deterministic setup. (mkIf (!cfg.enable && versionOlder config.home.stateVersion "20.09") { - xdg.cacheHome = getXdgDir "XDG_CACHE_HOME" defaultCacheHome; - xdg.configHome = getXdgDir "XDG_CONFIG_HOME" defaultConfigHome; - xdg.dataHome = getXdgDir "XDG_DATA_HOME" defaultDataHome; + xdg.cacheHome = + mkDefault (getEnvFallback "XDG_CACHE_HOME" defaultCacheHome); + xdg.configHome = + mkDefault (getEnvFallback "XDG_CONFIG_HOME" defaultConfigHome); + xdg.dataHome = mkDefault (getEnvFallback "XDG_DATA_HOME" defaultDataHome); }) # "Modern" deterministic setup. @@ -95,13 +100,11 @@ in { { home.file = mkMerge [ - (mapAttrs' - (name: file: nameValuePair "${config.xdg.configHome}/${name}" file) + (mapAttrs' (name: file: nameValuePair "${cfg.configHome}/${name}" file) cfg.configFile) - (mapAttrs' - (name: file: nameValuePair "${config.xdg.dataHome}/${name}" file) + (mapAttrs' (name: file: nameValuePair "${cfg.dataHome}/${name}" file) cfg.dataFile) - { "${config.xdg.cacheHome}/.keep".text = ""; } + { "${cfg.cacheHome}/.keep".text = ""; } ]; } ]; diff --git a/tests/modules/misc/xdg/default.nix b/tests/modules/misc/xdg/default.nix index b637cd1b..e3104dd9 100644 --- a/tests/modules/misc/xdg/default.nix +++ b/tests/modules/misc/xdg/default.nix @@ -1,6 +1,6 @@ { xdg-mime-apps-basics = ./mime-apps-basics.nix; - xdg-file-attr-names = ./file-attr-names.nix; xdg-system-dirs = ./system-dirs.nix; xdg-desktop-entries = ./desktop-entries.nix; + xdg-file-gen = ./file-gen.nix; } diff --git a/tests/modules/misc/xdg/file-attr-names.nix b/tests/modules/misc/xdg/file-attr-names.nix deleted file mode 100644 index 0aa8fcff..00000000 --- a/tests/modules/misc/xdg/file-attr-names.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; - -{ - config = { - xdg.configFile.test.text = "config"; - xdg.dataFile.test.text = "data"; - home.file.test.text = "home"; - - nmt.script = '' - assertFileExists home-files/.config/test - assertFileExists home-files/.local/share/test - assertFileExists home-files/test - assertFileContent \ - home-files/.config/test \ - ${builtins.toFile "test" "config"} - assertFileContent \ - home-files/.local/share/test \ - ${builtins.toFile "test" "data"} - assertFileContent \ - home-files/test \ - ${builtins.toFile "test" "home"} - ''; - }; -} diff --git a/tests/modules/misc/xdg/file-gen.nix b/tests/modules/misc/xdg/file-gen.nix new file mode 100644 index 00000000..bf7bb339 --- /dev/null +++ b/tests/modules/misc/xdg/file-gen.nix @@ -0,0 +1,30 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + config = { + xdg.configHome = /. + "${config.home.homeDirectory}/.dummy-config"; + xdg.dataHome = /. + "${config.home.homeDirectory}/.dummy-data"; + xdg.cacheHome = /. + "${config.home.homeDirectory}/.dummy-cache"; + + xdg.configFile.test.text = "config"; + xdg.dataFile.test.text = "data"; + home.file."${config.xdg.cacheHome}/test".text = "cache"; + + nmt.script = '' + assertFileExists home-files/.dummy-config/test + assertFileExists home-files/.dummy-cache/test + assertFileExists home-files/.dummy-data/test + assertFileContent \ + home-files/.dummy-config/test \ + ${builtins.toFile "test" "config"} + assertFileContent \ + home-files/.dummy-data/test \ + ${builtins.toFile "test" "data"} + assertFileContent \ + home-files/.dummy-cache/test \ + ${builtins.toFile "test" "cache"} + ''; + }; +}