Commit 2e86b5d

HPCesia <me@hpcesia.com>
2026-06-13 05:32:22
Add XDG config
1 parent 6651794
Changed files (7)
modules
modules/core/xdg-dir.nix
@@ -0,0 +1,33 @@
+{
+  den.aspects.core.xdg-dir = {
+    cacheHome = {config, ...}: {
+      directories = [
+        config.xdg.cacheHome
+      ];
+    };
+
+    nixos = {
+      environment.sessionVariables = {
+        XDG_CACHE_HOME = "\${HOME}/.cache";
+        XDG_CONFIG_HOME = "\${HOME}/.config";
+        XDG_DATA_HOME = "\${HOME}/.local/share";
+        XDG_STATE_HOME = "\${HOME}/.local/state";
+        XDG_BIN_HOME = "\${HOME}/.local/bin";
+      };
+    };
+
+    homeManager = {config, ...}: {
+      home.preferXdgDirectories = true;
+
+      xdg = {
+        enable = true;
+        # Use absolue path for persistence
+        binHome = "${config.home.homeDirectory}/.local/bin";
+        cacheHome = "${config.home.homeDirectory}/.cache";
+        configHome = "${config.home.homeDirectory}/.config";
+        dataHome = "${config.home.homeDirectory}/.local/share";
+        stateHome = "${config.home.homeDirectory}/.local/state";
+      };
+    };
+  };
+}
modules/desktop/xdg.nix
@@ -0,0 +1,50 @@
+{
+  den.aspects.desktop.xdg-user-dirs = {
+    persistHome = {config, ...}: {
+      directories = with config.xdg.userDirs; [
+        desktop
+        documents
+        music
+        pictures
+        projects
+        publicShare
+        templates
+        videos
+      ];
+    };
+    cacheHome = {config, ...}: let
+    in {
+      directories = [
+        config.xdg.userDirs.download
+      ];
+    };
+
+    nixos = {
+      environment.variables = {
+        XCOMPOSECACHE = "$XDG_CACHE_HOME/X11/xcompose";
+      };
+    };
+
+    homeManager = {config, ...}: {
+      xdg.userDirs = {
+        enable = true;
+        createDirectories = true;
+        setSessionVariables = true;
+
+        desktop = "${config.home.homeDirectory}/Desktop";
+        documents = "${config.home.homeDirectory}/Documents";
+        download = "${config.home.homeDirectory}/Downloads";
+        music = "${config.home.homeDirectory}/Musics";
+        pictures = "${config.home.homeDirectory}/Pictures";
+        projects = "${config.home.homeDirectory}/Development";
+        publicShare = "${config.home.homeDirectory}/Share";
+        templates = "${config.home.homeDirectory}/Templates";
+        videos = "${config.home.homeDirectory}/Videos";
+
+        extraConfig = {
+          SCREENSHOTS = "${config.xdg.userDirs.pictures}/Screenshots";
+        };
+      };
+    };
+  };
+}
modules/develop/xdg.nix
@@ -0,0 +1,47 @@
+{den, ...}: {
+  den.aspects.develop.xdg = {
+    includes = with den.aspects.develop.xdg; [
+      android
+      go
+      java
+      npm
+    ];
+
+    android = {
+      nixos.environment.variables = {
+        ANDROID_HOME = "$XDG_DATA_HOME/android";
+        ANDROID_USER_HOME = "$XDG_DATA_HOME/android";
+      };
+    };
+
+    go = {
+      nixos.environment.variables = {
+        GOPATH = "$XDG_DATA_HOME/go";
+      };
+    };
+
+    java = {
+      nixos.environment.variables = {
+        _JAVA_OPTIONS = "-Djava.util.prefs.userRoot=$XDG_CONFIG_HOME/java";
+        M2_HOME = "$XDG_DATA_HOME/m2";
+        GRADLE_USER_HOME = "$XDG_DATA_HOME/gradle";
+      };
+    };
+
+    npm = {
+      nixos = {
+        environment.variables = {
+          NPM_CONFIG_CACHE = "$XDG_CACHE_HOME/npm";
+          NPM_CONFIG_TMP = "$XDG_RUNTIME_DIR/npm";
+          NPM_CONFIG_USERCONFIG = "$XDG_CONFIG_HOME/npm/config";
+        };
+        environment.etc."npmrc".text = ''
+          prefix=$XDG_DATA_HOME/npm
+          cache=$XDG_CACHE_HOME/npm
+          tmp=$XDG_RUNTIME_DIR/npm
+          init-module=$XDG_CONFIG_HOME/npm/config/npm-init.js
+        '';
+      };
+    };
+  };
+}
modules/hosts/kevin/default.nix
@@ -24,6 +24,7 @@
   den.aspects.kevin = {
     includes = [
       den.aspects.roles.default
+      den.aspects.roles.desktop
       den.aspects.roles.develop
     ];
   };
modules/roles/default.nix
@@ -22,6 +22,7 @@
       core.systemd
       core.time-sync
       core.utils
+      core.xdg-dir
 
       secrets.vaultix
     ];
modules/roles/desktop.nix
@@ -0,0 +1,7 @@
+{den, ...}: {
+  den.aspects.roles.desktop = {
+    includes = with den.aspects; [
+      desktop.xdg-user-dirs
+    ];
+  };
+}
modules/roles/develop.nix
@@ -3,6 +3,7 @@
     includes = with den.aspects; [
       develop.binfmt
       develop.direnv
+      develop.xdg
 
       services.podman
     ];