sway: only enable vrr on fullscreen
This commit is contained in:
parent
43dd44d237
commit
36a717072a
|
@ -126,6 +126,7 @@
|
||||||
wl-clipboard
|
wl-clipboard
|
||||||
];
|
];
|
||||||
auto_connect_gamepad = [ bluez ];
|
auto_connect_gamepad = [ bluez ];
|
||||||
|
vrr-fullscreen = [ ];
|
||||||
}
|
}
|
||||||
// lib.mapAttrs import_script {
|
// lib.mapAttrs import_script {
|
||||||
wdmenu = ./wdmenu.nix;
|
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,7 +69,7 @@ in
|
||||||
};
|
};
|
||||||
output = {
|
output = {
|
||||||
"*" = {
|
"*" = {
|
||||||
adaptive_sync = "enabled";
|
adaptive_sync = "off";
|
||||||
bg = "${theme.background} fill";
|
bg = "${theme.background} fill";
|
||||||
mode = "1920x1080@144.000Hz";
|
mode = "1920x1080@144.000Hz";
|
||||||
};
|
};
|
||||||
|
@ -116,6 +116,21 @@ in
|
||||||
indicator = true;
|
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" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
xdg.configFile."OpenTabletDriver/settings.json".source = ./open-tablet-driver.json;
|
xdg.configFile."OpenTabletDriver/settings.json".source = ./open-tablet-driver.json;
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
|
|
Loading…
Reference in a new issue