diff --git a/gui/bluelight.nix b/gui/bluelight.nix deleted file mode 100644 index d47e1f1..0000000 --- a/gui/bluelight.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ pkgs, ... }: -{ - systemd.user.services.night-color-temperature = { - Unit = { - Description = "Set night color temperature via wl-gammarelay"; - }; - Service = { - Type = "oneshot"; - ExecStart = "${pkgs.systemd}/bin/busctl --user set-property rs.wl-gammarelay / rs.wl.gammarelay Temperature q 2700"; - }; - }; - - systemd.user.timers.night-color-temperature = { - Unit = { - Description = "Timer to set night color temperature at 19:00"; - }; - Timer = { - OnCalendar = "19:00"; - Persistent = true; - }; - Install = { - WantedBy = [ "timers.target" ]; - }; - }; - - systemd.user.services.day-color-temperature = { - Unit = { - Description = "Set day color temperature via wl-gammarelay"; - }; - Service = { - Type = "oneshot"; - ExecStart = "${pkgs.systemd}/bin/busctl --user set-property rs.wl-gammarelay / rs.wl.gammarelay Temperature q 5500"; - }; - }; - - systemd.user.timers.day-color-temperature = { - Unit = { - Description = "Timer to set day color temperature at 07:00"; - }; - Timer = { - OnCalendar = "07:00"; - Persistent = true; - }; - Install = { - WantedBy = [ "timers.target" ]; - }; - }; -} diff --git a/gui/home.nix b/gui/home.nix index 746e5e7..e3f2bf2 100644 --- a/gui/home.nix +++ b/gui/home.nix @@ -1,7 +1,6 @@ { ... }: { imports = [ - ./bluelight.nix ./niri.nix ./idle.nix ./kitty.nix diff --git a/gui/idle.nix b/gui/idle.nix index d27fc70..a5885c2 100644 --- a/gui/idle.nix +++ b/gui/idle.nix @@ -5,34 +5,44 @@ }: let + bt = "${pkgs.brightnessctl}/bin/brightnessctl"; + dim60 = pkgs.writeShellScriptBin "dim60" '' if pidof swaylock > /dev/null; then - OLD_B=$(${pkgs.systemd}/bin/busctl --user get-property rs.wl-gammarelay / rs.wl.gammarelay Brightness | awk '{print $2}') - echo "$OLD_B" > /tmp/wl_gamma_brightness_60 - ${pkgs.systemd}/bin/busctl --user set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 0.0 - touch /tmp/dimmed_by_60 + OLD_B=$(${bt} get 2>/dev/null || echo "") + if [ -n "$OLD_B" ]; then + echo "$OLD_B" > /tmp/brightness_before_60 + ${bt} set 0% > /dev/null 2>&1 + touch /tmp/dimmed_by_60 + fi fi ''; resume60 = pkgs.writeShellScriptBin "resume60" '' if [ -f /tmp/dimmed_by_60 ]; then - OLD_B=$(cat /tmp/wl_gamma_brightness_60 || echo 1.0) - ${pkgs.systemd}/bin/busctl --user set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d "$OLD_B" + OLD_B=$(cat /tmp/brightness_before_60 2>/dev/null || ${bt} max 2>/dev/null || echo "") + if [ -n "$OLD_B" ]; then + ${bt} set "$OLD_B" > /dev/null 2>&1 + fi rm -f /tmp/dimmed_by_60 fi ''; dim120 = pkgs.writeShellScriptBin "dim120" '' if [ ! -f /tmp/dimmed_by_60 ]; then - OLD_B=$(${pkgs.systemd}/bin/busctl --user get-property rs.wl-gammarelay / rs.wl.gammarelay Brightness | awk '{print $2}') - echo "$OLD_B" > /tmp/wl_gamma_brightness_120 - ${pkgs.systemd}/bin/busctl --user set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 0.0 - touch /tmp/dimmed_by_120 + OLD_B=$(${bt} get 2>/dev/null || echo "") + if [ -n "$OLD_B" ]; then + echo "$OLD_B" > /tmp/brightness_before_120 + ${bt} set 0% > /dev/null 2>&1 + touch /tmp/dimmed_by_120 + fi fi ${pkgs.systemd}/bin/systemctl --user stop break-timer.service ''; resume120 = pkgs.writeShellScriptBin "resume120" '' if [ -f /tmp/dimmed_by_120 ]; then - OLD_B=$(cat /tmp/wl_gamma_brightness_120 || echo 1.0) - ${pkgs.systemd}/bin/busctl --user set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d "$OLD_B" + OLD_B=$(cat /tmp/brightness_before_120 2>/dev/null || ${bt} max 2>/dev/null || echo "") + if [ -n "$OLD_B" ]; then + ${bt} set "$OLD_B" > /dev/null 2>&1 + fi rm -f /tmp/dimmed_by_120 fi ${pkgs.systemd}/bin/systemctl --user start break-timer.service diff --git a/gui/niri.nix b/gui/niri.nix index c399d93..6677866 100644 --- a/gui/niri.nix +++ b/gui/niri.nix @@ -19,11 +19,24 @@ let }; notifyBrightness = pkgs.writeShellScriptBin "notify-brightness" '' - VAL=$(${pkgs.systemd}/bin/busctl --user get-property rs.wl-gammarelay / rs.wl.gammarelay Brightness | ${pkgs.gawk}/bin/awk '{print $2}') - VAL=''${VAL:-1} - PCT=$(${pkgs.gawk}/bin/awk "BEGIN {printf \"%.0f\", $VAL * 100}") + VAL=$(${pkgs.brightnessctl}/bin/brightnessctl get 2>/dev/null || echo 0) + MAX=$(${pkgs.brightnessctl}/bin/brightnessctl max 2>/dev/null || echo 1) + PCT=$(${pkgs.gawk}/bin/awk "BEGIN {printf \"%.0f\", $VAL / $MAX * 100}") notify-send "Brightness" "$PCT%" --expire-time=500 -p --replace-id=$(cat '/tmp/niri-Brightness' 2>/dev/null || echo 0) > '/tmp/niri-Brightness' || notify-send "Brightness" "$PCT%" --expire-time=500 -p > '/tmp/niri-Brightness' ''; + + notifyScreenpadBrightness = pkgs.writeShellScriptBin "notify-screenpad-brightness" '' + VAL=$(${pkgs.brightnessctl}/bin/brightnessctl -d asus_screenpad get 2>/dev/null || echo 0) + MAX=$(cat /sys/class/backlight/asus_screenpad/max_brightness 2>/dev/null || echo 1) + PCT=$(${pkgs.gawk}/bin/awk "BEGIN {printf \"%.0f\", $VAL / $MAX * 100}") + notify-send "Screenpad Brightness" "$PCT%" --expire-time=500 -p --replace-id=$(cat '/tmp/niri-screenpad-brightness' 2>/dev/null || echo 0) > '/tmp/niri-screenpad-brightness' || notify-send "Screenpad Brightness" "$PCT%" --expire-time=500 -p > '/tmp/niri-screenpad-brightness' + ''; + + notifyTemperature = pkgs.writeShellScriptBin "notify-temperature" '' + VAL=$(${pkgs.systemd}/bin/busctl --user get-property rs.wl-gammarelay / rs.wl.gammarelay Temperature 2>/dev/null | ${pkgs.gawk}/bin/awk '{print $2}') + VAL=''${VAL:-6500} + notify-send "Temperature" "$VAL K" --expire-time=500 -p --replace-id=$(cat '/tmp/niri-Temperature' 2>/dev/null || echo 0) > '/tmp/niri-Temperature' || notify-send "Temperature" "$VAL K" --expire-time=500 -p > '/tmp/niri-Temperature' + ''; in { services = { @@ -35,6 +48,7 @@ in swaybg wtype wl-gammarelay-rs + brightnessctl ]; systemd.user.services.voxtype = { @@ -241,13 +255,26 @@ in "XF86MonBrightnessUp" = { allow-when-locked = true; action = spawn "bash" "-c" ( - "${pkgs.systemd}/bin/busctl --user call rs.wl-gammarelay / rs.wl.gammarelay UpdateBrightness d -- 0.05; ${notifyBrightness}/bin/notify-brightness" + "${pkgs.brightnessctl}/bin/brightnessctl set +10% > /dev/null 2>&1; ${notifyBrightness}/bin/notify-brightness" ); }; "XF86MonBrightnessDown" = { allow-when-locked = true; action = spawn "bash" "-c" ( - "${pkgs.systemd}/bin/busctl --user call rs.wl-gammarelay / rs.wl.gammarelay UpdateBrightness d -- -0.05; ${notifyBrightness}/bin/notify-brightness" + "${pkgs.brightnessctl}/bin/brightnessctl set 10%- > /dev/null 2>&1; ${notifyBrightness}/bin/notify-brightness" + ); + }; + + "Shift+XF86MonBrightnessUp" = { + allow-when-locked = true; + action = spawn "bash" "-c" ( + "${pkgs.brightnessctl}/bin/brightnessctl -d asus_screenpad set +10% > /dev/null 2>&1; ${notifyScreenpadBrightness}/bin/notify-screenpad-brightness" + ); + }; + "Shift+XF86MonBrightnessDown" = { + allow-when-locked = true; + action = spawn "bash" "-c" ( + "${pkgs.brightnessctl}/bin/brightnessctl -d asus_screenpad set 10%- > /dev/null 2>&1; ${notifyScreenpadBrightness}/bin/notify-screenpad-brightness" ); }; @@ -263,13 +290,40 @@ in "Mod+Alt+TouchpadScrollDown" = { allow-when-locked = true; action = spawn "bash" "-c" ( - "${pkgs.systemd}/bin/busctl --user call rs.wl-gammarelay / rs.wl.gammarelay UpdateBrightness d -- 0.005; ${notifyBrightness}/bin/notify-brightness" + "${pkgs.brightnessctl}/bin/brightnessctl set +1% > /dev/null 2>&1; ${notifyBrightness}/bin/notify-brightness" ); }; "Mod+Alt+TouchpadScrollUp" = { allow-when-locked = true; action = spawn "bash" "-c" ( - "${pkgs.systemd}/bin/busctl --user call rs.wl-gammarelay / rs.wl.gammarelay UpdateBrightness d -- -0.005; ${notifyBrightness}/bin/notify-brightness" + "${pkgs.brightnessctl}/bin/brightnessctl set 1%- > /dev/null 2>&1; ${notifyBrightness}/bin/notify-brightness" + ); + }; + + "Mod+Shift+TouchpadScrollDown" = { + allow-when-locked = true; + action = spawn "bash" "-c" ( + "${pkgs.brightnessctl}/bin/brightnessctl -d asus_screenpad set +1% > /dev/null 2>&1; ${notifyScreenpadBrightness}/bin/notify-screenpad-brightness" + ); + }; + "Mod+Shift+TouchpadScrollUp" = { + allow-when-locked = true; + action = spawn "bash" "-c" ( + "${pkgs.brightnessctl}/bin/brightnessctl -d asus_screenpad set 1%- > /dev/null 2>&1; ${notifyScreenpadBrightness}/bin/notify-screenpad-brightness" + ); + }; + + # Temperature (gamma LUT only — brightness is hardware backlight) + "Alt+TouchpadScrollDown" = { + allow-when-locked = true; + action = spawn "bash" "-c" ( + "${pkgs.systemd}/bin/busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay UpdateTemperature n -200; ${notifyTemperature}/bin/notify-temperature" + ); + }; + "Alt+TouchpadScrollUp" = { + allow-when-locked = true; + action = spawn "bash" "-c" ( + "${pkgs.systemd}/bin/busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay UpdateTemperature n 200; ${notifyTemperature}/bin/notify-temperature" ); }; @@ -287,21 +341,23 @@ in "Mod+1" = { allow-when-locked = true; action = spawn "bash" "-c" '' - STATE_FILE="/tmp/dp2_state" - if [ ! -f "$STATE_FILE" ]; then - echo "off" > "$STATE_FILE" - fi - STATE=$(cat "$STATE_FILE") - if [ "$STATE" = "off" ]; then - niri msg output DP-2 on - sudo ~/.config/scripts/power.sh screenpad on || true - echo "on" > "$STATE_FILE" - notify-send "Secondary Display" "Turned ON" -t 1000 -p > /tmp/niri-dp2-notif - else + if niri msg -j outputs 2>/dev/null | grep -q '"DP-2".*"logical":{'; then + # turn OFF: niri output first, then backlight niri msg output DP-2 off - sudo ~/.config/scripts/power.sh screenpad off || true - echo "off" > "$STATE_FILE" + sudo ~/.config/scripts/power.sh screenpad off notify-send "Secondary Display" "Turned OFF" -t 1000 -p > /tmp/niri-dp2-notif + else + # turn ON: backlight first (wakes up the display), then poll for niri output + sudo ~/.config/scripts/power.sh screenpad on + for i in 1 2 3 4 5 6 7 8; do + if niri msg -j outputs 2>/dev/null | grep -q '"DP-2".*"logical":{'; then + notify-send "Secondary Display" "Already on" -t 1000 -p > /tmp/niri-dp2-notif + exit 0 + fi + niri msg output DP-2 on 2>/dev/null && break + sleep 0.3 + done + notify-send "Secondary Display" "Turned ON" -t 1000 -p > /tmp/niri-dp2-notif fi ''; }; @@ -334,13 +390,6 @@ in ]; } { argv = [ "${pkgs.wl-gammarelay-rs}/bin/wl-gammarelay-rs" ]; } - { - argv = [ - "bash" - "-c" - "for i in {1..20}; do if ${pkgs.systemd}/bin/busctl --user set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 0.7 && ${pkgs.systemd}/bin/busctl --user set-property rs.wl-gammarelay / rs.wl.gammarelay Temperature q 4500; then break; fi; sleep 0.5; done" - ]; - } { argv = [ "kitty" ]; } { argv = [ @@ -351,6 +400,13 @@ in "center" ]; } + { + argv = [ + "bash" + "-c" + "niri msg output DP-2 off || true" + ]; + } { argv = [ "sudo"