aboutsummaryrefslogtreecommitdiff
path: root/modules/services/nixos/glance.nix
blob: 8d305a55f1a4a6b5470a274686a78c075fb3d590 (plain)
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
{
  pkgs,
  config,
  lib,
  ...
}: let
  cfg = config.collinux.services.glance;

  servicesLinks = builtins.attrValues cfg.homelabServices;

  settings = {
    server = {
      inherit (cfg) port;
      proxied = true;
      host = "127.0.0.1";
      assets-path = "/var/lib/glance";
    };

    branding.hide-footer = true;
    pages = [
      {
        name = "Dashboard";
        width = "slim";
        hide-desktop-navigation = true;
        center-vertically = true;
        columns = [
          {
            size = "full";
            widgets = [
              {
                type = "search";
                autofocus = true;
                search-engine = "duckduckgo";
                bangs = [
                  {
                    title = "GitHub";
                    shortcut = "gh";
                    url = "https://github.com/search?q={QUERY}&type=repositories";
                  }
                  {
                    title = "I'm Feeling Lucky";
                    shortcut = "!";
                    url = "https://www.google.com/search?q={QUERY}&btnI=&sourceid=navclient&gfns=1";
                  }
                  {
                    title = "YouTube Music";
                    shortcut = "ytm";
                    url = "https://music.youtube.com/search?q={QUERY}";
                  }
                  {
                    title = "Google AI Mode";
                    shortcut = "ai";
                    url = "https://www.google.com/search?udm=50&q={QUERY}";
                  }
                ];
              }
              {
                type = "server-stats";
                servers = [
                  {
                    type = "local";
                    name = "ganymede";
                    hide-mountpoints-by-default = true;
                    mountpoints = {
                      "/".hide = false;
                      "/media".hide = false;
                    };
                  }
                ];
              }
              {
                type = "monitor";
                cache = "1m";
                title = "Services";
                sites = servicesLinks;
              }
            ];
          }
        ];
      }
    ];
  };

  settingsFile = (pkgs.formats.yaml {}).generate "config.yml" settings;
in {
  config = lib.mkIf cfg.enable {
    systemd.services."glance" = {
      restartIfChanged = true;
      wants = ["network-online.target"];
      after = ["network-online.target"];
      wantedBy = ["multi-user.target"];

      serviceConfig = {
        Type = "simple";

        DynamicUser = true;
        StateDirectory = "glance";

        ExecStart = "${lib.getExe pkgs.glance} -config ${settingsFile}";

        NoNewPrivileges = true;
        PrivateTmp = true;
        ProtectSystem = "strict";
        ProtectHome = true;
        ProtectKernelTunables = true;
        ProtectKernelModules = true;
        ProtectControlGroups = true;
      };
    };

    services.caddy.virtualHosts."home.ganymede".extraConfig = ''
      tls internal
      reverse_proxy 127.0.0.1:${toString cfg.port}
    '';
  };
}