This commit is contained in:
2026-08-03 19:59:45 +09:00
parent 3627587bc7
commit 15ca59e43c
4 changed files with 49 additions and 65 deletions
-6
View File
@@ -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
+9 -3
View File
@@ -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;
+40 -55
View File
@@ -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"
];
} }