summaryrefslogtreecommitdiff
path: root/hosts/sif/greetd/default.nix
blob: 081b6346c248ca210da643ae4c7c0280e7f7ab93 (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
{ config, pkgs, lib, flakeInputs, ... }:

let
  gkleenConfig = config.home-manager.users."gkleen";
  toIni = lib.generators.toINI {
    mkKeyValue =
      key: value:
      let
        value' = if lib.isBool value then lib.boolToString value else toString value;
      in
      "${lib.escape [ "=" ] key}=${value'}";
  };
  toDconfIni = let
    gvariant = import (flakeInputs.home-manager + "/modules/lib/gvariant.nix") { inherit lib; };
    mkIniKeyValue = key: value: "${key}=${toString (gvariant.mkValue value)}";
  in lib.generators.toINI { mkKeyValue = mkIniKeyValue; };
in {
  config = {
    services.greetd = {
      enable = true;
      settings.default_session.command = lib.getExe (pkgs.writeShellApplication {
        name = "sway";
        runtimeInputs = [ pkgs.sway pkgs.fontconfig ];
        runtimeEnv = {
          XDG_DATA_DIRS = lib.makeSearchPath "share" [
            pkgs.equilux-theme pkgs.paper-icon-theme pkgs.fira
          ];
          QT_PLUGIN_PATH = lib.makeSearchPath (pkgs.qt6.qtbase.qtPluginPrefix) [
            pkgs.qt6Packages.qtbase
          ];
          QML2_IMPORT_PATH = lib.makeSearchPath (pkgs.qt6.qtbase.qtQmlPrefix) [
            pkgs.qt6Packages.qtbase
          ];
          QT_QPA_PLATFORMTHEME = "gtk3";
          XDG_CONFIG_DIR = pkgs.symlinkJoin {
            name = "config";
            paths = [
              (pkgs.writeTextDir "gtk-3.0/settings.ini" (toIni {
                Settings = {
                  gtk-font-name = "Fira Sans 10";
                  gtk-theme-name = "Equilux-compact";
                  gtk-icon-theme-name = "Paper-Mono-Dark";
                };
              }))
            ];
          };
          # XDG_CACHE_HOME = "/var/cache/greetd/greeter";
          # XDG_CONFIG_HOME = "/var/cache/greetd/greeter/config";
        };
        text = ''
          exec &>/tmp/sway-$$.log

          unset MANAGERPID SYSTEMD_EXEC_PID

          # ${lib.getExe' pkgs.coreutils "mkdir"} -p ''${XDG_CONFIG_HOME}/dconf
          ${lib.getExe pkgs.dconf} load / < ${pkgs.writeText "dconf.ini" (toDconfIni {
            "org/gnome/desktop/interface" = {
              "color-scheme" = "prefer-dark";
              "font-name" = "Fira Sans 10";
              "gtk-theme" = "Equilux-compact";
              "icon-theme" = "Paper-Mono-Dark";
            };
          })}

          exec sway --unsupported-gpu --config ${pkgs.writeText "sway-config" ''
            exec "${lib.getExe' config.systemd.package "systemctl"} --user import-environment {,WAYLAND_}DISPLAY SWAYSOCK; ${lib.getExe gkleenConfig.programs.quickshell.package} --path ${gkleenConfig.xdg.configFile."quickshell".source}/displaymanager.qml; swaymsg exit"

            input type:keyboard {
              xkb_layout "us,us"
              xkb_variant "dvp,"
              xkb_options "compose:caps,grp:win_space_toggle"
            }

            output eDP-1 scale 1.5
          ''}
        '';
      });
    };

    # security.pam.services.greetd.fprintAuth = false;

    systemd.services.greetd.serviceConfig = {
      ExecStartPre = ''${lib.getExe' pkgs.coreutils "install"} -d -o greeter -g greeter -m 0700 ''${CACHE_DIRECTORY}/greeter'';
      # CacheDirectory = "greetd";
    };

    users.users.greeter = {
      home = "/var/lib/greeter";
      createHome = true;
    };
  };
}