feat(hyprland): improve gaming experience and workspace navigation
- Implemented a modular gaming configuration with a local games list. - Added dynamic window rules for games: monitor 0, dedicated 'gaming' workspace, fullscreen, immediate mode, and stayfocused. - Enabled 'allow_tearing' to support immediate mode for reduced latency. - Created a dedicated 'name:gaming' workspace bound to monitor 0 with a 'SUPER+G' shortcut. - Enabled 'workspace_back_and_forth' for intuitive workspace toggling.
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
{pkgs, ...}: {
|
{pkgs, ...}: {
|
||||||
# TODO: implement a way to show binds, preferably use vicinae.
|
# TODO: implement a way to show binds, preferably use vicinae.
|
||||||
wayland.windowManager.hyprland.settings = {
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
binds = {
|
||||||
|
workspace_back_and_forth = true;
|
||||||
|
};
|
||||||
bindel = [
|
bindel = [
|
||||||
", XF86MonBrightnessUp, exec, ddcutil setvcp 10 + 10"
|
", XF86MonBrightnessUp, exec, ddcutil setvcp 10 + 10"
|
||||||
", XF86MonBrightnessDown, exec, ddcutil setvcp 10 - 10"
|
", XF86MonBrightnessDown, exec, ddcutil setvcp 10 - 10"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
gaps_in = 5;
|
gaps_in = 5;
|
||||||
gaps_out = 15;
|
gaps_out = 15;
|
||||||
layout = "dwindle";
|
layout = "dwindle";
|
||||||
|
allow_tearing = true;
|
||||||
};
|
};
|
||||||
decoration = {
|
decoration = {
|
||||||
rounding = 0;
|
rounding = 0;
|
||||||
|
|||||||
+51
-16
@@ -1,4 +1,30 @@
|
|||||||
{pkgs, ...}: {
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
myConfig,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
games = [
|
||||||
|
"Deadlock"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Generate monitor rules for each game in the config
|
||||||
|
gameRules =
|
||||||
|
lib.flatten (map (game: [
|
||||||
|
"monitor 0, title:^(${game})$"
|
||||||
|
"workspace name:gaming, title:^(${game})$"
|
||||||
|
"fullscreen, title:^(${game})$"
|
||||||
|
"immediate, title:^(${game})$"
|
||||||
|
"stayfocused, title:^(${game})$"
|
||||||
|
|
||||||
|
"monitor 0, class:^(${game})$"
|
||||||
|
"workspace name:gaming, class:^(${game})$"
|
||||||
|
"fullscreen, class:^(${game})$"
|
||||||
|
"immediate, class:^(${game})$"
|
||||||
|
"stayfocused, class:^(${game})$"
|
||||||
|
])
|
||||||
|
games);
|
||||||
|
in {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
protonup-qt
|
protonup-qt
|
||||||
protontricks
|
protontricks
|
||||||
@@ -19,6 +45,10 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
wayland.windowManager.hyprland.settings = {
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
workspace = [
|
||||||
|
"name:gaming, monitor:0, default:true"
|
||||||
|
];
|
||||||
|
|
||||||
exec-once = [
|
exec-once = [
|
||||||
"[workspace special:steam silent] uwsm app -- steam"
|
"[workspace special:steam silent] uwsm app -- steam"
|
||||||
];
|
];
|
||||||
@@ -26,24 +56,29 @@
|
|||||||
bindd = [
|
bindd = [
|
||||||
"SUPER, T, Toggle Steam, togglespecialworkspace, steam"
|
"SUPER, T, Toggle Steam, togglespecialworkspace, steam"
|
||||||
"SUPER SHIFT, T, Move to Steam Special Workspace, movetoworkspace, special:steam"
|
"SUPER SHIFT, T, Move to Steam Special Workspace, movetoworkspace, special:steam"
|
||||||
|
"SUPER, G, Switch to Gaming Workspace, workspace, name:gaming"
|
||||||
];
|
];
|
||||||
|
|
||||||
windowrulev2 = [
|
windowrulev2 =
|
||||||
# --- STEAM RULES ---
|
[
|
||||||
"workspace special:steam silent, class:^(steam)$"
|
# --- STEAM RULES ---
|
||||||
"noinitialfocus, class:^(steam)$"
|
"workspace special:steam silent, class:^(steam)$"
|
||||||
"suppressevent activate, class:^(steam)$"
|
"noinitialfocus, class:^(steam)$"
|
||||||
|
"suppressevent activate, class:^(steam)$"
|
||||||
|
|
||||||
# --- GAMING RULES ---
|
# --- GAMING RULES ---
|
||||||
"fullscreen, class:^steam_app_\d+$"
|
"fullscreen, class:^steam_app_\d+$"
|
||||||
"monitor 0, class:^steam_app_\d+$"
|
"monitor 0, class:^steam_app_\d+$"
|
||||||
"workspace 1, class:^steam_app_\d+$"
|
"workspace name:gaming, class:^steam_app_\d+$"
|
||||||
|
"immediate, class:^steam_app_\d+$"
|
||||||
|
"stayfocused, class:^steam_app_\d+$"
|
||||||
|
|
||||||
"fullscreen, class:^(gamescope)$"
|
"fullscreen, class:^(gamescope)$"
|
||||||
"fullscreen, class:^(lutris)$"
|
"fullscreen, class:^(lutris)$"
|
||||||
"fullscreen, class:^(heroic)$"
|
"fullscreen, class:^(heroic)$"
|
||||||
"fullscreen, class:^wine-.*$"
|
"fullscreen, class:^wine-.*$"
|
||||||
"fullscreen, title:^Wine .*$"
|
"fullscreen, title:^Wine .*$"
|
||||||
];
|
]
|
||||||
|
++ gameRules;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user