diff --git a/modules/wm/hyprland/default.nix b/modules/wm/hyprland/default.nix index 2e5f56c..ce7bd03 100644 --- a/modules/wm/hyprland/default.nix +++ b/modules/wm/hyprland/default.nix @@ -283,6 +283,24 @@ in { workspaceSwipe = false; }; + group = { + autoGroup = false; + dragIntoGroup = 2; + + col = { + borderActive = config.horseman.wm.hyprland.config.general.col.activeBorder; # I don't wanna believe this can't be done better :( + borderInactive = config.horseman.wm.hyprland.config.general.col.inactiveBorder; + borderLockedActive = config.horseman.wm.hyprland.config.general.col.activeBorder; + borderLockedInactive = config.horseman.wm.hyprland.config.general.col.inactiveBorder; + }; + + groupbar = { + fontSize = 14; + height = 26; + keepUpperGap = true; + }; + }; + monitors = { defaultMonitor = true; }; diff --git a/modules/wm/hyprland/keybindings.nix b/modules/wm/hyprland/keybindings.nix index af860aa..7725c38 100644 --- a/modules/wm/hyprland/keybindings.nix +++ b/modules/wm/hyprland/keybindings.nix @@ -65,6 +65,21 @@ in { dispatcher = "exec"; params = "hyprlock"; } + { + flags = ["e"]; + mods = ["SUPER"]; + key = "TAB"; + dispatcher = "changegroupactive"; + params = "f"; + } + + { + flags = ["e"]; + mods = ["SUPER" "SHIFT"]; + key = "TAB"; + dispatcher = "changegroupactive"; + params = "b"; + } { flags = []; mods = ["SUPER"]; @@ -72,6 +87,14 @@ in { dispatcher = "togglefloating"; params = ""; } + { + flags = []; + mods = ["SUPER"]; + key = "T"; + dispatcher = "togglegroup"; + params = ""; + } + { flags = []; mods = ["SUPER"]; diff --git a/modules/wm/hyprland/options.nix b/modules/wm/hyprland/options.nix index 25dfb48..9a337e9 100644 --- a/modules/wm/hyprland/options.nix +++ b/modules/wm/hyprland/options.nix @@ -156,6 +156,22 @@ in { workspaceSwipe = mkOption {type = types.bool;}; }; + group = { + autoGroup = mkOption {type = types.bool;}; + dragIntoGroup = mkOption {type = types.enum [0 1 2];}; + + col.borderActive = mkOption {type = types.str;}; + col.borderInactive = mkOption {type = types.str;}; + col.borderLockedActive = mkOption {type = types.str;}; + col.borderLockedInactive = mkOption {type = types.str;}; + + groupbar = { + fontSize = mkOption {type = types.int;}; + height = mkOption {type = types.int;}; + keepUpperGap = mkOption {type = types.bool;}; + }; + }; + monitors = { defaultMonitor = mkOption {type = types.bool;}; bindWorkspaces = mkOption { @@ -366,6 +382,28 @@ in { workspace_swipe = ${trivial.boolToString cfg.config.gestures.workspaceSwipe} } + + group { + auto_group = ${trivial.boolToString cfg.config.group.autoGroup} + drag_into_group = ${toString cfg.config.group.dragIntoGroup} + + col.border_active = ${cfg.config.group.col.borderActive} + col.border_inactive = ${cfg.config.group.col.borderInactive} + col.border_locked_active = ${cfg.config.group.col.borderLockedActive} + col.border_locked_inactive = ${cfg.config.group.col.borderLockedInactive} + + groupbar { + font_size = ${toString cfg.config.group.groupbar.fontSize} + height = ${toString cfg.config.group.groupbar.height} + keep_upper_gap = ${trivial.boolToString cfg.config.group.groupbar.keepUpperGap} + + col.active = ${cfg.config.group.col.borderActive} + col.inactive = ${cfg.config.group.col.borderInactive} + col.locked_active = ${cfg.config.group.col.borderLockedActive} + col.locked_inactive = ${cfg.config.group.col.borderLockedInactive} + } + } + ${concatStringsSep "\n" (map (mon: "monitor = ${mon.output}, ${mon.resolution}@${mon.refreshRate}, ${toString mon.x}x${toString mon.y}, ${strings.floatToString mon.scale}, transform, ${toString mon.transform}") cfg.config.monitors.displays)} ${