diff --git a/hm/modules/linux/desktop-environment/hyprland/binds.nix b/hm/modules/linux/desktop-environment/hyprland/binds.nix
new file mode 100644
index 0000000..2c84058
--- /dev/null
+++ b/hm/modules/linux/desktop-environment/hyprland/binds.nix
@@ -0,0 +1,144 @@
+{
+ lib,
+ pkgs,
+ config,
+ ...
+}:
+let
+ cfg = config.liminalOS.desktop.hyprland;
+in
+{
+ wayland.windowManager.hyprland.settings = lib.mkIf cfg.enable {
+ bind =
+ [
+ # Window actions
+ "$mod, Q, killactive"
+ "$mod, W, togglefloating"
+ "$mod, V, togglesplit"
+ "$mod, Return, fullscreen"
+
+ # Move around
+ "$mod, $Left, movefocus, l"
+ "$mod, $Right, movefocus, r"
+ "$mod, $Up, movefocus, u"
+ "$mod, $Down, movefocus, d"
+
+ "$mod, 1, workspace, 1"
+ "$mod, 2, workspace, 2"
+ "$mod, 3, workspace, 3"
+ "$mod, 4, workspace, 4"
+ "$mod, 5, workspace, 5"
+ "$mod, 6, workspace, 6"
+ "$mod, 7, workspace, 7"
+ "$mod, 8, workspace, 8"
+ "$mod, 9, workspace, 9"
+ "$mod, 0, workspace, 10"
+
+ # Move windows around
+ "$mod+Shift, $Left, movewindow, l"
+ "$mod+Shift, $Right, movewindow, r"
+ "$mod+Shift, $Up, movewindow, u"
+ "$mod+Shift, $Down, movewindow, d"
+
+ "$mod+Ctrl, bracketright, movetoworkspace, r+1"
+ "$mod+Ctrl, bracketleft, movetoworkspace, r-1"
+
+ "$mod, bracketright, workspace, r+1"
+ "$mod, bracketleft, workspace, r-1"
+
+ # Utilities
+ "$mod, Space, exec, pkill -x rofi || rofi -show drun" # Run rofi application launcher
+ "$mod, X, exec, pkill -x rofi || rofi -show window" # Run rofi window switcher
+
+ ''$mod+Shift, P, exec, ${pkgs.grim}/bin/grim - | ${pkgs.swappy}/bin/swappy -f -'' # Screenshot
+
+ "$mod, Backspace, exec, pkill -x wlogout || wlogout" # show logout menu
+
+ "$mod, Z, exec, loginctl lock-session"
+
+ # Media controls
+ ",XF86AudioMute, exec, ${pkgs.pamixer}/bin/pamixer -t"
+ ",XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox play-pause"
+ ",XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox next"
+ ",XF86AudioRewind, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox previous"
+
+ # Move active window to a workspace with mainMod + SHIFT + [0-9]
+ "$mod+Shift, 1, movetoworkspace, 1"
+ "$mod+Shift, 2, movetoworkspace, 2"
+ "$mod+Shift, 3, movetoworkspace, 3"
+ "$mod+Shift, 4, movetoworkspace, 4"
+ "$mod+Shift, 5, movetoworkspace, 5"
+ "$mod+Shift, 6, movetoworkspace, 6"
+ "$mod+Shift, 7, movetoworkspace, 7"
+ "$mod+Shift, 8, movetoworkspace, 8"
+ "$mod+Shift, 9, movetoworkspace, 9"
+ "$mod+Shift, 0, movetoworkspace, 10"
+ ]
+ ++ (lib.optionals (!cfg.useAdvancedBindings) [
+ "$mod, S, togglespecialworkspace"
+ "$mod+Alt, S, movetoworkspacesilent, special"
+ "$mod, Tab, workspace, previous"
+ ''$mod, P, exec, ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" - | ${pkgs.swappy}/bin/swappy -f -'' # Screenshot
+ ])
+ ++ (lib.optionals cfg.useAdvancedBindings [
+ # Special workspace
+ "$mod, C, togglespecialworkspace"
+ "$mod+Alt, C, movetoworkspacesilent, special"
+
+ ''$mod, semicolon, exec, ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" - | ${pkgs.swappy}/bin/swappy -f -'' # Screenshot
+
+ "$mod, a, workspace, 1"
+ "$mod, s, workspace, 2"
+ "$mod, d, workspace, 3"
+ "$mod, f, workspace, 4"
+ "$mod, g, workspace, 5"
+ "$mod, y, workspace, 6"
+ "$mod, u, workspace, 7"
+ "$mod, i, workspace, 8"
+ "$mod, o, workspace, 9"
+ "$mod, p, workspace, 10"
+
+ "$mod+Shift, a, movetoworkspace, 1"
+ "$mod+Shift, s, movetoworkspace, 2"
+ "$mod+Shift, d, movetoworkspace, 3"
+ "$mod+Shift, f, movetoworkspace, 4"
+ "$mod+Shift, g, movetoworkspace, 5"
+ "$mod+Shift, y, movetoworkspace, 6"
+ "$mod+Shift, u, movetoworkspace, 7"
+ "$mod+Shift, i, movetoworkspace, 8"
+ "$mod+Shift, o, movetoworkspace, 9"
+ "$mod+Shift, p, movetoworkspace, 10"
+ ])
+ ++ (lib.optionals config.liminalOS.programs.zen.enable [
+ "$mod, B, exec, zen"
+ ])
+ ++ (lib.optionals config.liminalOS.desktop.swaync.enable [
+ "$mod, N, exec, sleep 0.1 && ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw"
+ ])
+ ++ (lib.optionals config.liminalOS.programs.enable [
+ # Application Keybinds
+ "$mod, R, exec, ${pkgs.pavucontrol}/bin/pavucontrol -t 3" # open pavucontrol on 'outputs' tab
+ "$mod, T, exec, ${pkgs.kitty}/bin/kitty"
+ "$mod, E, exec, ${pkgs.xfce.thunar}/bin/thunar"
+ "$mod, M, exec, ${pkgs.thunderbird}/bin/thunderbird"
+ ]);
+
+ bindm = [
+ "$mod, mouse:272, movewindow"
+ "$mod, mouse:273, resizewindow"
+ ];
+ bindel = [
+ ",XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%-"
+ ",XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%+"
+ ",XF86AudioRaiseVolume, exec, ${pkgs.pamixer}/bin/pamixer -i 5"
+ ",XF86AudioLowerVolume, exec, ${pkgs.pamixer}/bin/pamixer -d 5"
+ ];
+ binde = [
+ # Resize windows
+ "$mod+Alt, $Right, resizeactive, 30 0"
+ "$mod+Alt, $Left, resizeactive, -30 0"
+ "$mod+Alt, $Up, resizeactive, 0 -30"
+ "$mod+Alt, $Down, resizeactive, 0 30"
+ ];
+ };
+}
diff --git a/hm/modules/linux/desktop-environment/hyprland/default.nix b/hm/modules/linux/desktop-environment/hyprland/default.nix
index 50bc938..e856333 100644
--- a/hm/modules/linux/desktop-environment/hyprland/default.nix
+++ b/hm/modules/linux/desktop-environment/hyprland/default.nix
@@ -9,6 +9,12 @@ let
cfg = config.liminalOS.desktop.hyprland;
in
{
+ imports = [
+ ./binds.nix
+ ./utilities.nix
+ ./windowrules.nix
+ ];
+
options.liminalOS.desktop.hyprland = {
enable = lib.mkOption {
type = lib.types.bool;
@@ -17,6 +23,7 @@ in
Whether to enable and rice Hyprland as well as some basic desktop utilities.
'';
};
+ useAdvancedBindings = lib.mkEnableOption "advanced keybinds";
applyGtkFix = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
@@ -93,129 +100,6 @@ in
"XCURSOR_THEME,Bibata-Modern-Ice"
"XCURSOR_SIZE,26"
]);
- bind =
- [
- # Window actions
- "$mod, Q, killactive"
- "$mod, W, togglefloating"
- "$mod, V, togglesplit"
- "$mod, Return, fullscreen"
-
- # Move around
- "$mod, $Left, movefocus, l"
- "$mod, $Right, movefocus, r"
- "$mod, $Up, movefocus, u"
- "$mod, $Down, movefocus, d"
-
- "$mod, D, workspace, previous"
-
- "$mod, 1, workspace, 1"
- "$mod+Ctrl, H, workspace, 1"
- "$mod, 2, workspace, 2"
- "$mod+Ctrl, J, workspace, 2"
- "$mod, 3, workspace, 3"
- "$mod+Ctrl, K, workspace, 3"
- "$mod, 4, workspace, 4"
- "$mod+Ctrl, L, workspace, 4"
- "$mod, 5, workspace, 5"
- "$mod+Ctrl, semicolon, workspace, 5"
- "$mod, 6, workspace, 6"
- "$mod+Ctrl, apostrophe, workspace, 6"
- "$mod, 7, workspace, 7"
- "$mod+Ctrl, U, workspace, 7"
- "$mod, 8, workspace, 8"
- "$mod+Ctrl, I, workspace, 8"
- "$mod, 9, workspace, 9"
- "$mod+Ctrl, O, workspace, 9"
- "$mod, 0, workspace, 10"
- "$mod+Ctrl, P, workspace, 10"
-
- # Move active window to a workspace with mainMod + SHIFT + [0-9]
- "$mod+Shift, 1, movetoworkspace, 1"
- "$mod+Ctrl+Shift, H, movetoworkspace, 1"
- "$mod+Shift, 2, movetoworkspace, 2"
- "$mod+Ctrl+Shift, J, movetoworkspace, 2"
- "$mod+Shift, 3, movetoworkspace, 3"
- "$mod+Ctrl+Shift, K, movetoworkspace, 3"
- "$mod+Shift, 4, movetoworkspace, 4"
- "$mod+Ctrl+Shift, L, movetoworkspace, 4"
- "$mod+Shift, 5, movetoworkspace, 5"
- "$mod+Ctrl+Shift, semicolon, movetoworkspace, 5"
- "$mod+Shift, 6, movetoworkspace, 6"
- "$mod+Ctrl+Shift, apostrophe, movetoworkspace, 6"
- "$mod+Shift, 7, movetoworkspace, 7"
- "$mod+Ctrl+Shift, U, movetoworkspace, 7"
- "$mod+Shift, 8, movetoworkspace, 8"
- "$mod+Ctrl+Shift, I, movetoworkspace, 8"
- "$mod+Shift, 9, movetoworkspace, 9"
- "$mod+Ctrl+Shift, O, movetoworkspace, 9"
- "$mod+Shift, 0, movetoworkspace, 10"
- "$mod+Ctrl+Shift, P, movetoworkspace, 10"
-
- # Special workspace
- "$mod, S, togglespecialworkspace"
- "$mod+Alt, S, movetoworkspacesilent, special"
-
- # Move windows around
- "$mod+Shift, $Left, movewindow, l"
- "$mod+Shift, $Right, movewindow, r"
- "$mod+Shift, $Up, movewindow, u"
- "$mod+Shift, $Down, movewindow, d"
-
- "$mod+Ctrl, bracketright, movetoworkspace, r+1"
- "$mod+Ctrl, bracketleft, movetoworkspace, r-1"
-
- "$mod, bracketright, workspace, r+1"
- "$mod, bracketleft, workspace, r-1"
-
- # Utilities
- "$mod, Space, exec, pkill -x rofi || rofi -show drun" # Run rofi application launcher
- "$mod, G, exec, pkill -x rofi || rofi -show window" # Run rofi window switcher
-
- ''$mod, P, exec, ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" - | ${pkgs.swappy}/bin/swappy -f -'' # Screenshot
- ''$mod+Shift, P, exec, ${pkgs.grim}/bin/grim - | ${pkgs.swappy}/bin/swappy -f -'' # Screenshot
-
- "$mod, Backspace, exec, pkill -x wlogout || wlogout" # show logout menu
-
- "$mod, Z, exec, loginctl lock-session"
-
- # Media controls
- ",XF86AudioMute, exec, ${pkgs.pamixer}/bin/pamixer -t"
- ",XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox play-pause"
- ",XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox next"
- ",XF86AudioRewind, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox previous"
- ]
- ++ (lib.optionals config.liminalOS.programs.zen.enable [
- "$mod, F, exec, zen"
- ])
- ++ (lib.optionals config.liminalOS.desktop.swaync.enable [
- "$mod, N, exec, sleep 0.1 && ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw"
- ])
- ++ (lib.optionals config.liminalOS.programs.enable [
- # Application Keybinds
- "$mod, R, exec, ${pkgs.pavucontrol}/bin/pavucontrol -t 3" # open pavucontrol on 'outputs' tab
- "$mod, T, exec, ${pkgs.kitty}/bin/kitty"
- "$mod, E, exec, ${pkgs.xfce.thunar}/bin/thunar"
- "$mod, M, exec, ${pkgs.thunderbird}/bin/thunderbird"
- ]);
- bindm = [
- "$mod, mouse:272, movewindow"
- "$mod, mouse:273, resizewindow"
- ];
- bindel = [
- ",XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%-"
- ",XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%+"
- ",XF86AudioRaiseVolume, exec, ${pkgs.pamixer}/bin/pamixer -i 5"
- ",XF86AudioLowerVolume, exec, ${pkgs.pamixer}/bin/pamixer -d 5"
- ];
- binde = [
- # Resize windows
- "$mod+Alt, $Right, resizeactive, 30 0"
- "$mod+Alt, $Left, resizeactive, -30 0"
- "$mod+Alt, $Up, resizeactive, 0 -30"
- "$mod+Alt, $Down, resizeactive, 0 30"
- ];
- windowrulev2 = import ./windowrulev2.nix;
layerrule = [
"blur,rofi"
"ignorezero,rofi"
@@ -316,107 +200,6 @@ in
scroll_factor = 0.15;
};
- services.hyprpaper.enable = true;
-
- programs.wlogout.enable = true;
-
- programs.rofi = {
- enable = true;
- package = pkgs.rofi-wayland;
- # theme = "gruvbox-dark";
- terminal = "${pkgs.kitty}/bin/kitty";
- extraConfig = {
- modi = "window,drun,ssh,combi,filebrowser,recursivebrowser";
- display-drun = " ";
- combi-modi = "window,drun,ssh";
- run-shell-command = "{terminal} -e {cmd}";
- sidebar-mode = true;
- background-color = "transparent";
- sorting = "fuzzy";
- };
- };
-
- programs.hyprlock = lib.mkIf cfg.screenlocker.enable {
- enable = true;
- settings = {
- general = {
- hide_cursor = true;
- grace = 0;
- };
- background = {
- monitor = cfg.screenlocker.monitor;
- path = lib.mkIf cfg.screenlocker.useNvidiaCrashFix "/tmp/__hyprlock-monitor-screenshot.png";
- blur_passes = 3;
- blur_size = 7;
- noise = 0.0117;
- contrast = 0.8916;
- brightness = 0.8172;
- vibrancy = 0.1696;
- vibrancy_darkness = 0.0;
- };
- input-field = {
- monitor = "";
- size = "200, 50";
- outline_thickness = 3;
- dots_size = 0.33;
- dots_spacing = 0.15;
- dots_center = false;
- dots_rounding = -1;
- outer_color = "rgb(151515)";
- inner_color = "rgb(200, 200, 200)";
- font_color = "rgb(10, 10, 10)";
- fade_on_empty = true;
- fade_timeout = 1000;
- placeholder_text = "Input Password...";
- hide_input = false;
- rounding = -1;
- check_color = "rgb(204, 136, 34)";
- fail_color = "rgb(204, 34, 34)";
- fail_text = "$FAIL ($ATTEMPTS)";
- fail_timeout = 2000;
- fail_transition = 300;
- capslock_color = -1;
- numlock_color = -1;
- bothlock_color = -1;
- invert_numlock = false;
- swap_font_color = false;
-
- position = "0, -20";
- halign = "center";
- valign = "center";
- };
- };
- };
-
- services.hypridle = lib.mkIf cfg.idleDaemon.enable {
- enable = true;
- settings = {
- general = {
- lock_cmd =
- if cfg.screenlocker.useNvidiaCrashFix then
- "pidof hyprlock || ${pkgs.grim}/bin/grim -o ${config.programs.hyprlock.settings.background.monitor} /tmp/__hyprlock-monitor-screenshot.png && ${pkgs.hyprlock}/bin/hyprlock"
- else
- "pidof hyprlock || hyprlock";
- before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
- after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
- };
- listener = [
- {
- timeout = 1500;
- on-timeout = "loginctl lock-session";
- }
- {
- timeout = 330; # 5.5min
- on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
- on-resume = "hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired.
- }
- {
- timeout = 1800;
- on-timeout = "systemctl suspend";
- }
- ];
- };
- };
assertions = [
{
assertion =
diff --git a/hm/modules/linux/desktop-environment/hyprland/utilities.nix b/hm/modules/linux/desktop-environment/hyprland/utilities.nix
new file mode 100644
index 0000000..a172fc1
--- /dev/null
+++ b/hm/modules/linux/desktop-environment/hyprland/utilities.nix
@@ -0,0 +1,114 @@
+{
+ pkgs,
+ lib,
+ config,
+ ...
+}:
+let
+ cfg = config.liminalOS.desktop.hyprland;
+in
+{
+ config = lib.mkIf cfg.enable {
+ services.hyprpaper.enable = true;
+
+ programs.wlogout.enable = true;
+
+ programs.rofi = {
+ enable = true;
+ package = pkgs.rofi-wayland;
+ # theme = "gruvbox-dark";
+ terminal = "${pkgs.kitty}/bin/kitty";
+ extraConfig = {
+ modi = "window,drun,ssh,combi,filebrowser,recursivebrowser";
+ display-drun = " ";
+ combi-modi = "window,drun,ssh";
+ run-shell-command = "{terminal} -e {cmd}";
+ sidebar-mode = true;
+ background-color = "transparent";
+ sorting = "fuzzy";
+ };
+ };
+
+ programs.hyprlock = lib.mkIf cfg.screenlocker.enable {
+ enable = true;
+ settings = {
+ general = {
+ hide_cursor = true;
+ grace = 0;
+ };
+ background = {
+ monitor = cfg.screenlocker.monitor;
+ path = lib.mkIf cfg.screenlocker.useNvidiaCrashFix "/tmp/__hyprlock-monitor-screenshot.png";
+ blur_passes = 3;
+ blur_size = 7;
+ noise = 0.0117;
+ contrast = 0.8916;
+ brightness = 0.8172;
+ vibrancy = 0.1696;
+ vibrancy_darkness = 0.0;
+ };
+ input-field = {
+ monitor = "";
+ size = "200, 50";
+ outline_thickness = 3;
+ dots_size = 0.33;
+ dots_spacing = 0.15;
+ dots_center = false;
+ dots_rounding = -1;
+ outer_color = "rgb(151515)";
+ inner_color = "rgb(200, 200, 200)";
+ font_color = "rgb(10, 10, 10)";
+ fade_on_empty = true;
+ fade_timeout = 1000;
+ placeholder_text = "Input Password...";
+ hide_input = false;
+ rounding = -1;
+ check_color = "rgb(204, 136, 34)";
+ fail_color = "rgb(204, 34, 34)";
+ fail_text = "$FAIL ($ATTEMPTS)";
+ fail_timeout = 2000;
+ fail_transition = 300;
+ capslock_color = -1;
+ numlock_color = -1;
+ bothlock_color = -1;
+ invert_numlock = false;
+ swap_font_color = false;
+
+ position = "0, -20";
+ halign = "center";
+ valign = "center";
+ };
+ };
+ };
+
+ services.hypridle = lib.mkIf cfg.idleDaemon.enable {
+ enable = true;
+ settings = {
+ general = {
+ lock_cmd =
+ if cfg.screenlocker.useNvidiaCrashFix then
+ "pidof hyprlock || ${pkgs.grim}/bin/grim -o ${config.programs.hyprlock.settings.background.monitor} /tmp/__hyprlock-monitor-screenshot.png && ${pkgs.hyprlock}/bin/hyprlock"
+ else
+ "pidof hyprlock || hyprlock";
+ before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
+ after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
+ };
+ listener = [
+ {
+ timeout = 1500;
+ on-timeout = "loginctl lock-session";
+ }
+ {
+ timeout = 330; # 5.5min
+ on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
+ on-resume = "hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired.
+ }
+ {
+ timeout = 1800;
+ on-timeout = "systemctl suspend";
+ }
+ ];
+ };
+ };
+ };
+}
diff --git a/hm/modules/linux/desktop-environment/hyprland/windowrules.nix b/hm/modules/linux/desktop-environment/hyprland/windowrules.nix
new file mode 100644
index 0000000..70d5d9f
--- /dev/null
+++ b/hm/modules/linux/desktop-environment/hyprland/windowrules.nix
@@ -0,0 +1,91 @@
+{ config, lib, ... }:
+{
+ config.wayland.windowManager.hyprland.settings.windowrulev2 =
+ lib.mkIf config.liminalOS.desktop.hyprland.enable
+ [
+ "opacity 0.90 0.90,class:^(librewolf)$"
+ "opacity 0.90 0.90,class:^(floorp)$"
+ "opacity 0.90 0.90,class:^(zen-alpha)$"
+ "opacity 0.90 0.90,class:^(zen-beta)$"
+ "opacity 0.90 0.90,class:^(Brave-browser)$"
+ "opacity 0.80 0.80,class:^(Steam)$"
+ "opacity 0.80 0.80,class:^(steam)$"
+ "opacity 0.80 0.80,class:^(steamwebhelper)$"
+ "opacity 0.80 0.80,class:^(Spotify)$"
+ "opacity 0.80 0.80,initialTitle:^(Spotify Premium)$"
+ "opacity 0.80 0.80,initialTitle:^(Spotify Free)$"
+ "opacity 0.80 0.80,class:^(code-oss)$"
+ "opacity 0.80 0.80,class:^(Code)$"
+ "opacity 0.80 0.80,class:^(code-url-handler)$"
+ "opacity 0.80 0.80,class:^(code-insiders-url-handler)$"
+ "opacity 0.80 0.80,class:^(kitty)$"
+ "opacity 0.80 0.80,class:^(neovide)$"
+ "opacity 0.80 0.80,class:^(org.kde.dolphin)$"
+ "opacity 0.80 0.80,class:^(thunar)$"
+ "opacity 0.80 0.80,class:^(org.kde.ark)$"
+ "opacity 0.80 0.80,class:^(nwg-look)$"
+ "opacity 0.80 0.80,class:^(qt5ct)$"
+ "opacity 0.80 0.80,class:^(qt6ct)$"
+ "opacity 0.80 0.80,class:^(kvantummanager)$"
+ "opacity 0.80 0.80,class:^(waypaper)$"
+ "opacity 0.80 0.80,class:^(org.pulseaudio.pavucontrol)$"
+ "opacity 0.80 0.80,class:^(com.github.wwmm.easyeffects)$"
+ "opacity 0.80 0.80,class:^(thunderbird)$"
+
+ "opacity 0.90 0.90,class:^(com.github.rafostar.Clapper)$ # Clapper-Gtk"
+ "opacity 0.80 0.80,class:^(com.github.tchx84.Flatseal)$ # Flatseal-Gtk"
+ "opacity 0.80 0.80,class:^(hu.kramo.Cartridges)$ # Cartridges-Gtk"
+ "opacity 0.80 0.80,class:^(com.obsproject.Studio)$ # Obs-Qt"
+ "opacity 0.80 0.80,class:^(gnome-boxes)$ # Boxes-Gtk"
+ "opacity 0.80 0.80,class:^(discord)$ # Discord-Electron"
+ "opacity 0.80 0.80,class:^(vesktop)$ # Vesktop-Electron"
+ "opacity 0.80 0.80,class:^(ArmCord)$ # ArmCord-Electron"
+ "opacity 0.80 0.80,class:^(app.drey.Warp)$ # Warp-Gtk"
+ "opacity 0.80 0.80,class:^(net.davidotek.pupgui2)$ # ProtonUp-Qt"
+ "opacity 0.80 0.80,class:^(yad)$ # Protontricks-Gtk"
+ "opacity 0.80 0.80,class:^(signal)$ # Signal-Gtk"
+ "opacity 0.80 0.80,class:^(io.github.alainm23.planify)$ # planify-Gtk"
+ "opacity 0.80 0.80,class:^(io.gitlab.theevilskeleton.Upscaler)$ # Upscaler-Gtk"
+ "opacity 0.80 0.80,class:^(com.github.unrud.VideoDownloader)$ # VideoDownloader-Gtk"
+ "opacity 0.80 0.80,class:^(lutris)$ # Lutris game launcher"
+
+ "opacity 0.80 0.70,class:^(pavucontrol)$"
+ "opacity 0.80 0.70,class:^(blueman-manager)$"
+ "opacity 0.80 0.70,class:^(nm-applet)$"
+ "opacity 0.80 0.70,class:^(nm-connection-editor)$"
+ "opacity 0.80 0.70,class:^(org.kde.polkit-kde-authentication-agent-1)$"
+
+ "float,class:^(org.kde.dolphin)$,title:^(Progress Dialog — Dolphin)$"
+ "float,class:^(org.kde.dolphin)$,title:^(Copying — Dolphin)$"
+ "float,title:^(Picture-in-Picture)$"
+ "float,class:^(librewolf)$,title:^(Library)$"
+ "float,class:^(floorp)$,title:^(Library)$"
+ "float,class:^(zen-alpha)$,title:^(Library)$"
+ "float,title:^(Extension: (Bitwarden Password Manager))$"
+ "float,class:^(vlc)$"
+ "float,class:^(kvantummanager)$"
+ "float,class:^(qt5ct)$"
+ "float,class:^(qt6ct)$"
+ "float,class:^(nwg-look)$"
+ "float,class:^(org.kde.ark)$"
+ "float,class:^(org.pulseaudio.pavucontrol)$"
+ "float,class:^(com.github.rafostar.Clapper)$ # Clapper-Gtk"
+ "float,class:^(app.drey.Warp)$ # Warp-Gtk"
+ "float,class:^(net.davidotek.pupgui2)$ # ProtonUp-Qt"
+ "float,class:^(yad)$ # Protontricks-Gtk"
+ "float,class:^(eog)$ # Imageviewer-Gtk"
+ "float,class:^(io.github.alainm23.planify)$ # planify-Gtk"
+ "float,class:^(io.gitlab.theevilskeleton.Upscaler)$ # Upscaler-Gtk"
+ "float,class:^(com.github.unrud.VideoDownloader)$ # VideoDownloader-Gkk"
+ "float,class:^(blueman-manager)$"
+ "float,class:^(nm-applet)$"
+ "float,class:^(nm-connection-editor)$"
+ "float,class:^(org.kde.polkit-kde-authentication-agent-1)$"
+ "opacity 0.80 0.80,class:^(org.freedesktop.impl.portal.desktop.gtk)$"
+ "opacity 0.80 0.80,class:^(org.freedesktop.impl.portal.desktop.hyprland)$"
+
+ "size 50% 50%,class:^(org.pulseaudio.pavucontrol)"
+
+ "stayfocused, class:^(pinentry-)" # fix pinentry losing focus
+ ];
+}
diff --git a/hm/modules/linux/desktop-environment/hyprland/windowrulev2.nix b/hm/modules/linux/desktop-environment/hyprland/windowrulev2.nix
deleted file mode 100644
index d366ae7..0000000
--- a/hm/modules/linux/desktop-environment/hyprland/windowrulev2.nix
+++ /dev/null
@@ -1,86 +0,0 @@
-[
- "opacity 0.90 0.90,class:^(librewolf)$"
- "opacity 0.90 0.90,class:^(floorp)$"
- "opacity 0.90 0.90,class:^(zen-alpha)$"
- "opacity 0.90 0.90,class:^(zen-beta)$"
- "opacity 0.90 0.90,class:^(Brave-browser)$"
- "opacity 0.80 0.80,class:^(Steam)$"
- "opacity 0.80 0.80,class:^(steam)$"
- "opacity 0.80 0.80,class:^(steamwebhelper)$"
- "opacity 0.80 0.80,class:^(Spotify)$"
- "opacity 0.80 0.80,initialTitle:^(Spotify Premium)$"
- "opacity 0.80 0.80,initialTitle:^(Spotify Free)$"
- "opacity 0.80 0.80,class:^(code-oss)$"
- "opacity 0.80 0.80,class:^(Code)$"
- "opacity 0.80 0.80,class:^(code-url-handler)$"
- "opacity 0.80 0.80,class:^(code-insiders-url-handler)$"
- "opacity 0.80 0.80,class:^(kitty)$"
- "opacity 0.80 0.80,class:^(neovide)$"
- "opacity 0.80 0.80,class:^(org.kde.dolphin)$"
- "opacity 0.80 0.80,class:^(thunar)$"
- "opacity 0.80 0.80,class:^(org.kde.ark)$"
- "opacity 0.80 0.80,class:^(nwg-look)$"
- "opacity 0.80 0.80,class:^(qt5ct)$"
- "opacity 0.80 0.80,class:^(qt6ct)$"
- "opacity 0.80 0.80,class:^(kvantummanager)$"
- "opacity 0.80 0.80,class:^(waypaper)$"
- "opacity 0.80 0.80,class:^(org.pulseaudio.pavucontrol)$"
- "opacity 0.80 0.80,class:^(com.github.wwmm.easyeffects)$"
- "opacity 0.80 0.80,class:^(thunderbird)$"
-
- "opacity 0.90 0.90,class:^(com.github.rafostar.Clapper)$ # Clapper-Gtk"
- "opacity 0.80 0.80,class:^(com.github.tchx84.Flatseal)$ # Flatseal-Gtk"
- "opacity 0.80 0.80,class:^(hu.kramo.Cartridges)$ # Cartridges-Gtk"
- "opacity 0.80 0.80,class:^(com.obsproject.Studio)$ # Obs-Qt"
- "opacity 0.80 0.80,class:^(gnome-boxes)$ # Boxes-Gtk"
- "opacity 0.80 0.80,class:^(discord)$ # Discord-Electron"
- "opacity 0.80 0.80,class:^(vesktop)$ # Vesktop-Electron"
- "opacity 0.80 0.80,class:^(ArmCord)$ # ArmCord-Electron"
- "opacity 0.80 0.80,class:^(app.drey.Warp)$ # Warp-Gtk"
- "opacity 0.80 0.80,class:^(net.davidotek.pupgui2)$ # ProtonUp-Qt"
- "opacity 0.80 0.80,class:^(yad)$ # Protontricks-Gtk"
- "opacity 0.80 0.80,class:^(signal)$ # Signal-Gtk"
- "opacity 0.80 0.80,class:^(io.github.alainm23.planify)$ # planify-Gtk"
- "opacity 0.80 0.80,class:^(io.gitlab.theevilskeleton.Upscaler)$ # Upscaler-Gtk"
- "opacity 0.80 0.80,class:^(com.github.unrud.VideoDownloader)$ # VideoDownloader-Gtk"
- "opacity 0.80 0.80,class:^(lutris)$ # Lutris game launcher"
-
- "opacity 0.80 0.70,class:^(pavucontrol)$"
- "opacity 0.80 0.70,class:^(blueman-manager)$"
- "opacity 0.80 0.70,class:^(nm-applet)$"
- "opacity 0.80 0.70,class:^(nm-connection-editor)$"
- "opacity 0.80 0.70,class:^(org.kde.polkit-kde-authentication-agent-1)$"
-
- "float,class:^(org.kde.dolphin)$,title:^(Progress Dialog — Dolphin)$"
- "float,class:^(org.kde.dolphin)$,title:^(Copying — Dolphin)$"
- "float,title:^(Picture-in-Picture)$"
- "float,class:^(librewolf)$,title:^(Library)$"
- "float,class:^(floorp)$,title:^(Library)$"
- "float,class:^(zen-alpha)$,title:^(Library)$"
- "float,title:^(Extension: (Bitwarden Password Manager))$"
- "float,class:^(vlc)$"
- "float,class:^(kvantummanager)$"
- "float,class:^(qt5ct)$"
- "float,class:^(qt6ct)$"
- "float,class:^(nwg-look)$"
- "float,class:^(org.kde.ark)$"
- "float,class:^(org.pulseaudio.pavucontrol)$"
- "float,class:^(com.github.rafostar.Clapper)$ # Clapper-Gtk"
- "float,class:^(app.drey.Warp)$ # Warp-Gtk"
- "float,class:^(net.davidotek.pupgui2)$ # ProtonUp-Qt"
- "float,class:^(yad)$ # Protontricks-Gtk"
- "float,class:^(eog)$ # Imageviewer-Gtk"
- "float,class:^(io.github.alainm23.planify)$ # planify-Gtk"
- "float,class:^(io.gitlab.theevilskeleton.Upscaler)$ # Upscaler-Gtk"
- "float,class:^(com.github.unrud.VideoDownloader)$ # VideoDownloader-Gkk"
- "float,class:^(blueman-manager)$"
- "float,class:^(nm-applet)$"
- "float,class:^(nm-connection-editor)$"
- "float,class:^(org.kde.polkit-kde-authentication-agent-1)$"
- "opacity 0.80 0.80,class:^(org.freedesktop.impl.portal.desktop.gtk)$"
- "opacity 0.80 0.80,class:^(org.freedesktop.impl.portal.desktop.hyprland)$"
-
- "size 50% 50%,class:^(org.pulseaudio.pavucontrol)"
-
- "stayfocused, class:^(pinentry-)" # fix pinentry losing focus
-]
diff --git a/reference/users/youwen/hm.nix b/reference/users/youwen/hm.nix
index 5da46f3..a4467e3 100644
--- a/reference/users/youwen/hm.nix
+++ b/reference/users/youwen/hm.nix
@@ -14,6 +14,7 @@
liminalOS = {
utils.easyeffects.enable = true;
desktop.hyprland.screenlocker.useNvidiaCrashFix = true;
+ desktop.hyprland.useAdvancedBindings = true;
};
programs.git = {