aboutsummaryrefslogtreecommitdiff
path: root/home-manager/modules/misc/xdg.nix
diff options
context:
space:
mode:
authorKatharina Fey <kookie@spacekookie.de>2019-10-05 12:06:29 +0000
committerKatharina Fey <kookie@spacekookie.de>2019-10-05 12:42:50 +0000
commit1148b1d122bc03e9a3665856c9b7bb96bd4e3994 (patch)
tree1a9586de593790e236349d5caa0abdff7f3f6856 /home-manager/modules/misc/xdg.nix
parent919d4e75699aa4ba456fd2d3d416a0522c9c7294 (diff)
parent8bddc1adab0f7a51476f819fa2197353e8e1d136 (diff)
Add 'home-manager/' from commit '8bddc1adab0f7a51476f819fa2197353e8e1d136'
git-subtree-dir: home-manager git-subtree-mainline: 919d4e75699aa4ba456fd2d3d416a0522c9c7294 git-subtree-split: 8bddc1adab0f7a51476f819fa2197353e8e1d136
Diffstat (limited to 'home-manager/modules/misc/xdg.nix')
-rw-r--r--home-manager/modules/misc/xdg.nix104
1 files changed, 104 insertions, 0 deletions
diff --git a/home-manager/modules/misc/xdg.nix b/home-manager/modules/misc/xdg.nix
new file mode 100644
index 00000000000..84ab4ada59a
--- /dev/null
+++ b/home-manager/modules/misc/xdg.nix
@@ -0,0 +1,104 @@
+{ options, config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.xdg;
+
+ dag = config.lib.dag;
+
+ fileType = (import ../lib/file-type.nix {
+ inherit (config.home) homeDirectory;
+ inherit lib pkgs;
+ }).fileType;
+
+ defaultCacheHome = "${config.home.homeDirectory}/.cache";
+ defaultConfigHome = "${config.home.homeDirectory}/.config";
+ defaultDataHome = "${config.home.homeDirectory}/.local/share";
+
+ getXdgDir = name: fallback:
+ let
+ value = builtins.getEnv name;
+ in
+ if value != "" then value else fallback;
+
+in
+
+{
+ options.xdg = {
+ enable = mkEnableOption "management of XDG base directories";
+
+ cacheHome = mkOption {
+ type = types.path;
+ defaultText = "~/.cache";
+ description = ''
+ Absolute path to directory holding application caches.
+ '';
+ };
+
+ configFile = mkOption {
+ type = fileType "<varname>xdg.configHome</varname>" cfg.configHome;
+ default = {};
+ description = ''
+ Attribute set of files to link into the user's XDG
+ configuration home.
+ '';
+ };
+
+ configHome = mkOption {
+ type = types.path;
+ defaultText = "~/.config";
+ description = ''
+ Absolute path to directory holding application configurations.
+ '';
+ };
+
+ dataFile = mkOption {
+ type = fileType "<varname>xdg.dataHome</varname>" cfg.dataHome;
+ default = {};
+ description = ''
+ Attribute set of files to link into the user's XDG
+ data home.
+ '';
+ };
+
+ dataHome = mkOption {
+ type = types.path;
+ defaultText = "~/.local/share";
+ description = ''
+ Absolute path to directory holding application data.
+ '';
+ };
+ };
+
+ config = mkMerge [
+ (mkIf cfg.enable {
+ xdg.cacheHome = mkDefault defaultCacheHome;
+ xdg.configHome = mkDefault defaultConfigHome;
+ xdg.dataHome = mkDefault defaultDataHome;
+
+ home.sessionVariables = {
+ XDG_CACHE_HOME = cfg.cacheHome;
+ XDG_CONFIG_HOME = cfg.configHome;
+ XDG_DATA_HOME = cfg.dataHome;
+ };
+ })
+
+ (mkIf (!cfg.enable) {
+ xdg.cacheHome = getXdgDir "XDG_CACHE_HOME" defaultCacheHome;
+ xdg.configHome = getXdgDir "XDG_CONFIG_HOME" defaultConfigHome;
+ xdg.dataHome = getXdgDir "XDG_DATA_HOME" defaultDataHome;
+ })
+
+ {
+ home.file = mkMerge [
+ cfg.configFile
+ cfg.dataFile
+ {
+ "${config.xdg.cacheHome}/.keep".text = "";
+ }
+ ];
+ }
+ ];
+}