summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--os/common/configuration.nix8
-rw-r--r--os/pc/modules/wayland.nix26
2 files changed, 32 insertions, 2 deletions
diff --git a/os/common/configuration.nix b/os/common/configuration.nix
index 047b153..8026b9f 100644
--- a/os/common/configuration.nix
+++ b/os/common/configuration.nix
@@ -1,4 +1,4 @@
-{ config, lib, ... }: let
+{ config, pkgs, lib, ... }: let
host = config.networking.hostName;
in {
disabledModules = [
@@ -23,6 +23,12 @@ in {
size = 2048; # 2GB
}];
+ services.udev.extraRules = let
+ cmd = "${pkgs.systemd}/bin/systemctl hibernate";
+ in ''
+ SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="[0-5]", RUN+="${cmd}"
+ '';
+
sops = {
defaultSopsFile = ../${host}/secrets.yaml;
age.keyFile = "/var/secrets/${host}.sops";
diff --git a/os/pc/modules/wayland.nix b/os/pc/modules/wayland.nix
index 7380e71..33f25c8 100644
--- a/os/pc/modules/wayland.nix
+++ b/os/pc/modules/wayland.nix
@@ -1,4 +1,4 @@
-{ config, ... }: let
+{ config, pkgs, ... }: let
user = config.global.userdata.name;
fontSans = config.global.font.sans.name;
@@ -31,6 +31,30 @@ in {
};
};
+ 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;