parent
f2f4a01c6a
commit
f246c31794
|
@ -129,6 +129,7 @@
|
|||
libinput
|
||||
libratbag
|
||||
];
|
||||
vrr-fullscreen = [ ];
|
||||
}
|
||||
// lib.mapAttrs importScript {
|
||||
wdmenu = ./wdmenu.nix;
|
||||
|
|
28
scripts/vrr-fullscreen
Executable file
28
scripts/vrr-fullscreen
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# List of supported outputs for VRR
|
||||
output_vrr_whitelist=(
|
||||
"DP-1"
|
||||
"DP-2"
|
||||
)
|
||||
|
||||
# Toggle VRR for fullscreened apps in prespecified displays to avoid stutters while in desktop
|
||||
swaymsg -t subscribe -m '[ "window" ]' | while read window_json; do
|
||||
window_event=$(echo ${window_json} | jq -r '.change')
|
||||
|
||||
# Process only focus change and fullscreen toggle
|
||||
if [[ $window_event = "focus" || $window_event = "fullscreen_mode" ]]; then
|
||||
output_json=$(swaymsg -t get_outputs | jq -r '.[] | select(.focused == true)')
|
||||
output_name=$(echo ${output_json} | jq -r '.name')
|
||||
|
||||
# Use only VRR in whitelisted outputs
|
||||
if [[ ${output_vrr_whitelist[*]} =~ ${output_name} ]]; then
|
||||
output_vrr_status=$(echo ${output_json} | jq -r '.adaptive_sync_status')
|
||||
window_fullscreen_status=$(echo ${window_json} | jq -r '.container.fullscreen_mode')
|
||||
|
||||
# Only update output if nesseccary to avoid flickering
|
||||
[[ $output_vrr_status = "disabled" && $window_fullscreen_status = "1" ]] && swaymsg output "${output_name}" adaptive_sync 1
|
||||
[[ $output_vrr_status = "enabled" && $window_fullscreen_status = "0" ]] && swaymsg output "${output_name}" adaptive_sync 0
|
||||
fi
|
||||
fi
|
||||
done
|
|
@ -69,9 +69,9 @@ in
|
|||
};
|
||||
output = {
|
||||
"*" = {
|
||||
adaptive_sync = "off";
|
||||
bg = "${theme.background} fill";
|
||||
mode = "1920x1080@144.000Hz";
|
||||
adaptive_sync = "on";
|
||||
};
|
||||
};
|
||||
fonts = {
|
||||
|
@ -122,6 +122,21 @@ in
|
|||
indicator = true;
|
||||
};
|
||||
|
||||
systemd.user.services.vrr-fullscreen = {
|
||||
Unit = {
|
||||
Description = "Enable VRR for fullscreen windows";
|
||||
PartOf = [ "graphical-session.target" ];
|
||||
After = [ "graphical-session.target" ];
|
||||
};
|
||||
Service = {
|
||||
ExecStart = "${lib.getExe pkgs.vrr-fullscreen}";
|
||||
Restart = "on-failure";
|
||||
};
|
||||
Install = {
|
||||
WantedBy = [ "sway-session.target" ];
|
||||
};
|
||||
};
|
||||
|
||||
services.gpg-agent.pinentryPackage = pkgs.pinentry-all;
|
||||
|
||||
xdg.configFile."OpenTabletDriver/settings.json".source = ./open-tablet-driver.json;
|
||||
|
|
Loading…
Reference in a new issue