From 70829a0af6e4eb428acfe112fe51a09da3ec3291 Mon Sep 17 00:00:00 2001 From: sinanmohd Date: Fri, 30 Aug 2024 17:57:55 +0530 Subject: common: hibernate on critical battery level --- os/common/configuration.nix | 8 +++++++- os/pc/modules/wayland.nix | 26 +++++++++++++++++++++++++- 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; -- cgit v1.2.3