diff --git a/module.nix b/module.nix index da53a90..5f4fd4a 100644 --- a/module.nix +++ b/module.nix @@ -19,6 +19,36 @@ in { programs.dconf.enable = lib.mkIf graphical true; programs.fish.enable = true; + services.udev.packages = [ + (pkgs.writeTextDir "/etc/udev/rules.d/98-user-power-supply.rules" '' + SUBSYSTEM=="power_supply", KERNEL=="AC", TAG+="systemd", ENV{SYSTEMD_USER_WANTS}+="power-internal.target power-external.target" + '') + ]; + + systemd.user = { + targets = { + power-internal = { + description = "On internal power supply"; + conflicts = [ "power-external.target" ]; + wantedBy = [ "default.target" ]; + unitConfig = { + ConditionACPower = false; + DefaultDependencies = false; + }; + }; + + power-external = { + description = "On external power supply"; + conflicts = [ "power-internal.target" ]; + wantedBy = [ "default.target" ]; + unitConfig = { + ConditionACPower = true; + DefaultDependencies = false; + }; + }; + }; + }; + users.users.${user} = { isNormalUser = true; shell = config.programs.fish.package; diff --git a/wayland.nix b/wayland.nix index e5dd2bc..51ead3f 100644 --- a/wayland.nix +++ b/wayland.nix @@ -436,6 +436,13 @@ in lib.mkIf (osConfig.hardware.graphics.enable or false) { }; }; + systemd.user.services = lib.genAttrs [ "syncthing" ] (service: { + Unit = { + ConditionACPower = true; + StopPropagatedFrom = [ "power-external.target" ]; + }; + }); + systemd.user.targets.tray = { Unit = { BindsTo = "waybar.service";