From b139155bee6006f21993f3b2b6bfd5adde6fff6f Mon Sep 17 00:00:00 2001 From: lassulus Date: Tue, 26 Jul 2016 21:36:47 +0200 Subject: l 3 power-action -> k 3 power-action --- krebs/3modules/power-action.nix | 97 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 krebs/3modules/power-action.nix (limited to 'krebs/3modules/power-action.nix') diff --git a/krebs/3modules/power-action.nix b/krebs/3modules/power-action.nix new file mode 100644 index 000000000..4c2533eb7 --- /dev/null +++ b/krebs/3modules/power-action.nix @@ -0,0 +1,97 @@ +{ config, lib, pkgs, ... }: + +with config.krebs.lib; + +let + cfg = config.krebs.power-action; + + out = { + options.krebs.power-action = api; + config = lib.mkIf cfg.enable imp; + }; + + api = { + enable = mkEnableOption "power-action"; + battery = mkOption { + type = types.str; + default = "BAT0"; + }; + user = mkOption { + type = types.user; + default = { + name = "power-action"; + }; + }; + startAt = mkOption { + type = types.str; + default = "*:0/1"; + }; + plans = mkOption { + type = with types; attrsOf (submodule { + options = { + charging = mkOption { + type = nullOr bool; + default = null; + description = '' + check for charging status. + null = don't care + true = only if system is charging + false = only if system is discharging + ''; + }; + upperLimit = mkOption { + type = int; + }; + lowerLimit = mkOption { + type = int; + }; + action = mkOption { + type = path; + }; + }; + }); + }; + }; + + imp = { + systemd.services.power-action = { + serviceConfig = rec { + ExecStart = startScript; + User = cfg.user.name; + }; + startAt = cfg.startAt; + }; + users.users.${cfg.user.name} = { + inherit (cfg.user) name uid; + }; + }; + + startScript = pkgs.writeDash "power-action" '' + set -euf + + power="$(${powerlvl})" + state="$(${state})" + ${concatStringsSep "\n" (mapAttrsToList writeRule cfg.plans)} + ''; + charging_check = plan: + if (plan.charging == null) then "" else + if plan.charging + then ''&& [ "$state" = "true" ]'' + else ''&& ! [ "$state" = "true" ]'' + ; + + writeRule = _: plan: + "if [ $power -ge ${toString plan.lowerLimit} ] && [ $power -le ${toString plan.upperLimit} ] ${charging_check plan}; then ${plan.action}; fi"; + + powerlvl = pkgs.writeDash "powerlvl" '' + cat /sys/class/power_supply/${cfg.battery}/capacity + ''; + + state = pkgs.writeDash "state" '' + if [ "$(cat /sys/class/power_supply/${cfg.battery}/status)" = "Discharging" ] + then echo "false" + else echo "true" + fi + ''; + +in out -- cgit v1.3.1 From def975ffb2c1d955e30f12a92f49789ace8d8eb2 Mon Sep 17 00:00:00 2001 From: lassulus Date: Tue, 2 Aug 2016 14:59:31 +0200 Subject: k 3 power-action: don't create configured user --- krebs/3modules/power-action.nix | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'krebs/3modules/power-action.nix') diff --git a/krebs/3modules/power-action.nix b/krebs/3modules/power-action.nix index 4c2533eb7..7227f4a9a 100644 --- a/krebs/3modules/power-action.nix +++ b/krebs/3modules/power-action.nix @@ -17,10 +17,8 @@ let default = "BAT0"; }; user = mkOption { - type = types.user; - default = { - name = "power-action"; - }; + type = types.string; + default = "power-action"; }; startAt = mkOption { type = types.str; @@ -57,13 +55,10 @@ let systemd.services.power-action = { serviceConfig = rec { ExecStart = startScript; - User = cfg.user.name; + User = cfg.user; }; startAt = cfg.startAt; }; - users.users.${cfg.user.name} = { - inherit (cfg.user) name uid; - }; }; startScript = pkgs.writeDash "power-action" '' -- cgit v1.3.1 From 35f0b5a22326fa67016a112ab78ffeaf55da4cef Mon Sep 17 00:00:00 2001 From: lassulus Date: Tue, 2 Aug 2016 14:59:58 +0200 Subject: k 3 power-action: fix description --- krebs/3modules/power-action.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'krebs/3modules/power-action.nix') diff --git a/krebs/3modules/power-action.nix b/krebs/3modules/power-action.nix index 7227f4a9a..bb5b3e521 100644 --- a/krebs/3modules/power-action.nix +++ b/krebs/3modules/power-action.nix @@ -33,7 +33,7 @@ let description = '' check for charging status. null = don't care - true = only if system is charging + true = only if system is charging or unknown false = only if system is discharging ''; }; -- cgit v1.3.1