summaryrefslogtreecommitdiff
path: root/os/pc/modules/wayland.nix
blob: 33f25c884608675cbea170b38d54ba83130920f6 (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
{ config, pkgs, ... }: let
  user = config.global.userdata.name;

  fontSans = config.global.font.sans.name;
  fontMonospace = config.global.font.monospace.name;
  fontPackages = config.global.font.monospace.packages
    ++ config.global.font.sans.packages;
in {
  fonts = {
    packages = fontPackages;
    enableDefaultPackages = true;

    fontconfig = {
      hinting.style = "full";
      subpixel.rgba = "rgb";

      defaultFonts = {
        monospace = [ fontMonospace ];
        serif = [ fontSans ];
        sansSerif = [ fontSans ];
      };
    };
  };

  users.users.${user}.extraGroups = [ "seat" ];
  services = {
    seatd.enable = true;
    dbus = {
      enable = true;
      implementation = "broker";
    };
  };

  systemd.services.swaynag_battery = {
    path = [ pkgs.sway pkgs.systemd ];
    environment = {
      # TODO: don't hardcode them
      WAYLAND_DISPLAY = "wayland-1";
      XDG_RUNTIME_DIR = "/run/user/1000";
    };
    script = ''
      swaynag \
          -m '󰂃  Critical battery level, system hibernation imminent, please connect to a power source' \
          --layer  overlay \
          --dismiss-button  'Hibernate now' &&
      systemctl hibernate
    '';
  };
  services.udev.extraRules = let
    start = "${pkgs.systemd}/bin/systemctl start swaynag_battery";
    stop = "${pkgs.systemd}/bin/systemctl stop swaynag_battery";
  in ''
    SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="[0-9]", RUN+="${start}"
    SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="${stop}"
    SUBSYSTEM=="power_supply", ATTR{status}=="Charging", RUN+="${stop}"
  '';

  hardware.graphics = {
    enable = true;
    enable32Bit = true;
  };

  security.pam.services.swaylock = {};
}