old
1{
2 lib,
3 config,
4 pkgs,
5 ...
6}: {
7 options = {
8 xdg.user-dirs = {
9 enable = lib.mkEnableOption "Whether to manage `$XDG_CONFIG_HOME/user-dirs.dirs`";
10 package = lib.mkPackageOption pkgs "xdg-user-dirs" {nullable = true;};
11 setSessionVariables = lib.mkEnableOption "Whether to set the XDG user dir environment variables";
12 directories = lib.mkOption {
13 type = lib.types.lazyAttrsOf lib.types.str;
14 description = "All user directories";
15 default = {
16 desktop = "${config.directory}/Desktop";
17 documents = "${config.directory}/Documents";
18 download = "${config.directory}/Downloads";
19 music = "${config.directory}/Music";
20 pictures = "${config.directory}/Pictures";
21 projects = "${config.directory}/Projects";
22 publicShare = "${config.directory}/publicShare";
23 templates = "${config.directory}/Templates";
24 videos = "${config.directory}/Videos";
25 };
26 };
27 };
28 };
29 config = let
30 cfg = config.xdg.user-dirs;
31 mkXDGVariable = dirs:
32 lib.mapAttrs'
33 (dir: path: lib.nameValuePair "XDG_${lib.strings.toUpper dir}_DIR" path)
34 dirs;
35 in
36 lib.mkIf cfg.enable {
37 packages = lib.optional (cfg.package != null) cfg.package;
38
39 xdg.config.files."user-dirs.dirs" = {
40 generator = lib.generators.toKeyValue {};
41 value = lib.mapAttrs (_: dir: ''"${dir}"'') (mkXDGVariable cfg.directories);
42 };
43 xdg.config.files."user-dirs.conf".text = "enabled=False";
44
45 environment.sessionVariables = lib.mkIf cfg.setSessionVariables (mkXDGVariable cfg.directories);
46 };
47}