Commit 6fe222a
Changed files (3)
hjemModules
modules
core
desktop
hjemModules/xdg/user-dirs.nix
@@ -0,0 +1,47 @@
+{
+ lib,
+ config,
+ pkgs,
+ ...
+}: {
+ options = {
+ xdg.user-dirs = {
+ enable = lib.mkEnableOption "Whether to manage `$XDG_CONFIG_HOME/user-dirs.dirs`";
+ package = lib.mkPackageOption pkgs "xdg-user-dirs" {nullable = true;};
+ setSessionVariables = lib.mkEnableOption "Whether to set the XDG user dir environment variables";
+ directories = lib.mkOption {
+ type = lib.types.lazyAttrsOf lib.types.str;
+ description = "All user directories";
+ default = {
+ desktop = "${config.directory}/Desktop";
+ documents = "${config.directory}/Documents";
+ download = "${config.directory}/Downloads";
+ music = "${config.directory}/Music";
+ pictures = "${config.directory}/Pictures";
+ projects = "${config.directory}/Projects";
+ publicShare = "${config.directory}/publicShare";
+ templates = "${config.directory}/Templates";
+ videos = "${config.directory}/Videos";
+ };
+ };
+ };
+ };
+ config = let
+ cfg = config.xdg.user-dirs;
+ mkXDGVariable = dirs:
+ lib.mapAttrs'
+ (dir: path: lib.nameValuePair "XDG_${lib.strings.toUpper dir}_DIR" path)
+ dirs;
+ in
+ lib.mkIf cfg.enable {
+ packages = lib.optional (cfg.package != null) cfg.package;
+
+ xdg.config.files."user-dirs.dirs" = {
+ generator = lib.generators.toKeyValue {};
+ value = lib.mapAttrs (_: dir: ''"${dir}"'') (mkXDGVariable cfg.directories);
+ };
+ xdg.config.files."user-dirs.conf".text = "enabled=False";
+
+ environment.sessionVariables = lib.mkIf cfg.setSessionVariables (mkXDGVariable cfg.directories);
+ };
+}
modules/core/xdg-dir.nix
@@ -1,8 +1,12 @@
{
den.aspects.core.xdg-dir = {
- cacheHome = {config, ...}: {
+ cacheUser = {
+ user,
+ config,
+ ...
+ }: {
directories = [
- config.xdg.cacheHome
+ config.hjem.users.${user.userName}.xdg.cache.directory
];
};
@@ -16,6 +20,19 @@
};
};
+ hjem = {config, ...}: {
+ environment.sessionVariables = {
+ XDG_BIN_HOME = "${config.directory}/.local/bin";
+ };
+
+ xdg = {
+ cache.directory = "${config.directory}/.cache";
+ config.directory = "${config.directory}/.config";
+ data.directory = "${config.directory}/.local/share";
+ state.directory = "${config.directory}/.local/state";
+ };
+ };
+
homeManager = {config, ...}: {
home.preferXdgDirectories = true;
modules/desktop/xdg.nix
@@ -1,7 +1,15 @@
-{lib, ...}: {
+{
+ self,
+ lib,
+ ...
+}: {
den.aspects.desktop.xdg-user-dirs = {
- persistHome = {config, ...}: {
- directories = with config.xdg.userDirs; [
+ persistUser = {
+ user,
+ config,
+ ...
+ }: {
+ directories = with config.hjem.users.${user.userName}.xdg.user-dirs.directories; [
desktop
documents
music
@@ -25,6 +33,27 @@
};
};
+ hjem = {config, ...}: {
+ imports = ["${self.outPath}/hjemModules/xdg/user-dirs.nix"];
+
+ xdg.user-dirs = {
+ enable = true;
+ setSessionVariables = true;
+ directories = {
+ desktop = "${config.directory}/Desktop";
+ documents = "${config.directory}/Documents";
+ download = "${config.directory}/Downloads";
+ music = "${config.directory}/Musics";
+ pictures = "${config.directory}/Pictures";
+ projects = "${config.directory}/Development";
+ videos = "${config.directory}/Videos";
+ publicShare = "${config.directory}/Share";
+ templates = "${config.directory}/Templates";
+ screenshots = "${config.xdg.user-dirs.directories.pictures}/Screenshots";
+ };
+ };
+ };
+
homeManager = {
config,
pkgs,
@@ -47,9 +76,9 @@
in {
xdg.userDirs =
{
- enable = true;
+ enable = false;
createDirectories = true;
- setSessionVariables = true;
+ setSessionVariables = false;
publicShare = "${config.home.homeDirectory}/Share";
templates = "${config.home.homeDirectory}/Templates";