mirror of
https://github.com/moons-14/dotfiles.git
synced 2026-10-06 08:28:11 +09:00
suspend
This commit is contained in:
@@ -1,16 +1,10 @@
|
|||||||
{
|
{
|
||||||
inputs,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
|
||||||
unstable = inputs.nixpkgs-unstable.legacyPackages.${pkgs.stdenv.hostPlatform.system};
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
programs.labwc = {
|
programs.labwc = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = unstable.labwc;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# NixOS decides whether a graphical session manages graphical-session.target
|
# NixOS decides whether a graphical session manages graphical-session.target
|
||||||
|
|||||||
@@ -3,9 +3,15 @@
|
|||||||
|
|
||||||
hardware.nvidia = {
|
hardware.nvidia = {
|
||||||
modesetting.enable = true;
|
modesetting.enable = true;
|
||||||
nvidiaSettings = true;
|
|
||||||
|
|
||||||
# RTX 3060 Ti (Ampere) supports NVIDIA's open kernel modules.
|
|
||||||
open = true;
|
open = true;
|
||||||
|
|
||||||
|
powerManagement = {
|
||||||
|
enable = true;
|
||||||
|
kernelSuspendNotifier = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
moduleParams.nvidia.NVreg_TemporaryFilePath = "/var/tmp";
|
||||||
|
|
||||||
|
nvidiaSettings = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
# every system sleep path; screen blanking while locked is handled by
|
# every system sleep path; screen blanking while locked is handled by
|
||||||
# services.swayidle in the graphical session.
|
# services.swayidle in the graphical session.
|
||||||
systemd.sleep.settings.Sleep = {
|
systemd.sleep.settings.Sleep = {
|
||||||
AllowSuspend = false;
|
|
||||||
AllowHibernation = false;
|
AllowHibernation = false;
|
||||||
AllowHybridSleep = false;
|
AllowHybridSleep = false;
|
||||||
AllowSuspendThenHibernate = false;
|
AllowSuspendThenHibernate = false;
|
||||||
|
|||||||
@@ -2,90 +2,75 @@
|
|||||||
let
|
let
|
||||||
brightnessctl = lib.getExe pkgs.brightnessctl;
|
brightnessctl = lib.getExe pkgs.brightnessctl;
|
||||||
loginctl = lib.getExe' pkgs.systemd "loginctl";
|
loginctl = lib.getExe' pkgs.systemd "loginctl";
|
||||||
rm = "${pkgs.coreutils}/bin/rm";
|
rm = lib.getExe' pkgs.coreutils "rm";
|
||||||
systemctl = lib.getExe' pkgs.systemd "systemctl";
|
systemctl = lib.getExe' pkgs.systemd "systemctl";
|
||||||
wlopm = lib.getExe pkgs.wlopm;
|
wlopm = lib.getExe pkgs.wlopm;
|
||||||
|
noctalia = lib.getExe pkgs.noctalia-shell;
|
||||||
|
|
||||||
brightnessState = "$XDG_RUNTIME_DIR/swayidle-brightness";
|
brightnessState = "$XDG_RUNTIME_DIR/swayidle-brightness";
|
||||||
|
|
||||||
skipIfOnAC = ''
|
onBattery = pkgs.writeShellScript "swayidle-on-battery" ''
|
||||||
for supply in /sys/class/power_supply/*; do
|
for supply in /sys/class/power_supply/*; do
|
||||||
if [ -f "$supply/type" ] \
|
[ -f "$supply/type" ] || continue
|
||||||
&& [ "$(< "$supply/type")" = "Mains" ] \
|
[ "$(< "$supply/type")" = "Battery" ] || continue
|
||||||
&& [ -f "$supply/online" ] \
|
[ -f "$supply/status" ] || continue
|
||||||
&& [ "$(< "$supply/online")" = "1" ]; then
|
[ "$(< "$supply/status")" = "Discharging" ] && exit 0
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
'';
|
||||||
|
|
||||||
|
isLocked = pkgs.writeShellScript "swayidle-is-locked" ''
|
||||||
|
[ -n "$XDG_SESSION_ID" ] \
|
||||||
|
&& [ "$(${loginctl} show-session "$XDG_SESSION_ID" \
|
||||||
|
--property=LockedHint --value)" = "yes" ]
|
||||||
'';
|
'';
|
||||||
|
|
||||||
dimScreen = pkgs.writeShellScript "swayidle-dim-screen" ''
|
dimScreen = pkgs.writeShellScript "swayidle-dim-screen" ''
|
||||||
${skipIfOnAC}
|
if ${onBattery}; then
|
||||||
${brightnessctl} get > "${brightnessState}" 2>/dev/null || exit 0
|
${brightnessctl} get > "${brightnessState}" 2>/dev/null || exit 0
|
||||||
${brightnessctl} set 10% >/dev/null 2>&1 || true
|
${brightnessctl} set 10% >/dev/null 2>&1 || true
|
||||||
'';
|
elif ${isLocked}; then
|
||||||
|
|
||||||
restoreBrightness = pkgs.writeShellScript "swayidle-restore-brightness" ''
|
|
||||||
if [ -f "${brightnessState}" ]; then
|
|
||||||
saved=$(< "${brightnessState}")
|
|
||||||
${brightnessctl} set "$saved" >/dev/null 2>&1 || true
|
|
||||||
${rm} -f "${brightnessState}"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
suspendOnBattery = pkgs.writeShellScript "swayidle-suspend-on-battery" ''
|
|
||||||
${skipIfOnAC}
|
|
||||||
exec ${systemctl} suspend
|
|
||||||
'';
|
|
||||||
|
|
||||||
afterResume = pkgs.writeShellScript "swayidle-after-resume" ''
|
|
||||||
${wlopm} --on '*'
|
|
||||||
${restoreBrightness}
|
|
||||||
'';
|
|
||||||
|
|
||||||
turnOffLockedDisplays = pkgs.writeShellScript "swayidle-turn-off-locked-displays" ''
|
|
||||||
if [ -n "$XDG_SESSION_ID" ] \
|
|
||||||
&& [ "$(${loginctl} show-session "$XDG_SESSION_ID" --property=LockedHint --value)" = "yes" ]; then
|
|
||||||
${wlopm} --off '*'
|
${wlopm} --off '*'
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
|
|
||||||
turnOnDisplays = pkgs.writeShellScript "swayidle-turn-on-displays" ''
|
restoreScreen = pkgs.writeShellScript "swayidle-restore-screen" ''
|
||||||
${wlopm} --on '*'
|
${wlopm} --on '*' >/dev/null 2>&1 || true
|
||||||
|
|
||||||
|
if [ -f "${brightnessState}" ]; then
|
||||||
|
${brightnessctl} set "$(< "${brightnessState}")" >/dev/null 2>&1 || true
|
||||||
|
${rm} -f "${brightnessState}"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
suspend = pkgs.writeShellScript "swayidle-suspend" ''
|
||||||
|
if ${onBattery} || ${isLocked}; then
|
||||||
|
exec ${systemctl} suspend
|
||||||
|
fi
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
services.swayidle = {
|
services.swayidle = {
|
||||||
enable = true;
|
enable = true;
|
||||||
systemdTargets = [ "graphical-session.target" ];
|
systemdTargets = [ "graphical-session.target" ];
|
||||||
|
|
||||||
timeouts = [
|
timeouts = [
|
||||||
{
|
{
|
||||||
timeout = 300;
|
timeout = 300;
|
||||||
command = "${dimScreen}";
|
command = "${dimScreen}";
|
||||||
resumeCommand = "${restoreBrightness}";
|
resumeCommand = "${restoreScreen}";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
timeout = 360;
|
timeout = 360;
|
||||||
command = "${suspendOnBattery}";
|
command = "${suspend}";
|
||||||
}
|
|
||||||
{
|
|
||||||
# Do not blank an unlocked desktop. Once the logind session is locked,
|
|
||||||
# blank its outputs after ten minutes and restore them on input.
|
|
||||||
timeout = 600;
|
|
||||||
command = "${turnOffLockedDisplays}";
|
|
||||||
resumeCommand = "${turnOnDisplays}";
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
events = {
|
events = {
|
||||||
after-resume = "${afterResume}";
|
lock = "${noctalia} msg session lock";
|
||||||
lock = "loginctl lock-session";
|
before-sleep = "${noctalia} msg session lock";
|
||||||
before-sleep = "loginctl lock-session";
|
after-resume = "${restoreScreen}";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.user.services.swayidle.Service.PassEnvironment = [
|
|
||||||
"WAYLAND_DISPLAY"
|
|
||||||
"XDG_RUNTIME_DIR"
|
|
||||||
"DBUS_SESSION_BUS_ADDRESS"
|
|
||||||
"XDG_SESSION_ID"
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user