about summary refs log tree commit diff
path: root/modules/nixos/common/xdg.nix
blob: d74bf8256bfa1e24b6a9edd238b8c0667b75e6b9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
{
  config,
  lib,
  this,
  ...
}:
with lib; {
  imports = let
    withBase = s: ["home-manager" "users" my.username "xdg" s];
  in [
    (mkAliasOptionModule ["dirs" "cache"] (withBase "cacheHome"))
    (mkAliasOptionModule ["dirs" "config"] (withBase "configHome"))
    (mkAliasOptionModule ["dirs" "data"] (withBase "dataHome"))
    (mkAliasOptionModule ["dirs" "state"] (withBase "stateHome"))
    (mkAliasOptionModule ["userDirs"] (withBase "userDirs"))
  ];

  xdg.portal = mkIf this.isHeadful {
    enable = true;
    xdgOpenUsePortal = true;
  };

  hm.xdg = mkMerge [
    {
      enable = true;

      userDirs = let
        inherit (config.my) home;
        tmp = home + "/tmp";
      in {
        enable = true;

        desktop = tmp;
        documents = "${home}/doc";
        download = tmp;
        music = tmp;
        pictures = tmp;
        publicShare = "${home}/share";
        templates = tmp;
        videos = tmp;
      };
    }
    (mkIf this.isHeadful {
      mimeApps = {
        enable = true;
        defaultApplications = mkMerge (mapAttrsToList
          (n: v: genAttrs v (_: ["${n}.desktop"]))
          {
            emacsclient = [
              "application/json"
              "application/vnd.ms-publisher"
              "application/x-desktop"
              "application/x-shellscript"
              "application/x-trash"
              "application/x-wine-extension-ini"
              "application/xml"
              "text/markdown"
              "text/plain"
            ];
            firefox = [
              "text/html"
              "x-scheme-handler/http"
              "x-scheme-handler/https"
            ];
            imv = [
              "image/bmp"
              "image/gif"
              "image/jpeg"
              "image/jpg"
              "image/png"
              "image/svg+xml"
              "image/tiff"
              "image/webp"
            ];
            mpv = [
              "audio/aac"
              "audio/flac"
              "audio/mp3"
              "audio/ogg"
              "audio/wav"
              "audio/webm"
              "video/mkv"
              "video/mp4"
              "video/ogg"
              "video/webm"
              "video/x-matroska"
            ];
          });
      };
    })
  ];
}

Consider giving Nix/NixOS a try! <3