From cdb912796e28c30550e54a16e4a15d60ef0cb43d Mon Sep 17 00:00:00 2001 From: mrfluffy Date: Mon, 8 Sep 2025 12:35:41 +0100 Subject: [PATCH] hureland refactor --- dots/hyprland.nix | 720 ++++++++++++++++++++++++---------------------- flake.lock | 154 +++++----- 2 files changed, 459 insertions(+), 415 deletions(-) diff --git a/dots/hyprland.nix b/dots/hyprland.nix index 34c07ab..8dd39e2 100755 --- a/dots/hyprland.nix +++ b/dots/hyprland.nix @@ -9,352 +9,396 @@ }: let caelestia-cli = inputs.caelestia-cli.packages.${pkgs.system}.caelestia-cli; - mod = "Alt"; - terminal = "footclient"; - fileManager = "dolphin"; - runner = "${lib.getExe caelestia-cli} shell drawers toggle launcher"; - #runner = "anyrun"; - browser = "zen-beta"; - editor = "emacsclient -c"; + + mod = "Alt"; + terminal = "footclient"; + fileManager = "dolphin"; + runner = "${lib.getExe caelestia-cli} shell drawers toggle launcher"; + # runner = "anyrun"; + browser = "zen-beta"; + editor = "emacsclient -c"; in { - wayland = { - windowManager = { - hyprland = { - enable = window_manager == "hyprland" || window_manager == "all"; - plugins = [ - pkgs.hyprlandPlugins.hyprsplit - pkgs.hyprlandPlugins.hyprscrolling + wayland.windowManager.hyprland = { + enable = window_manager == "hyprland" || window_manager == "all"; + plugins = [ + pkgs.hyprlandPlugins.hyprsplit + pkgs.hyprlandPlugins.hyprscrolling + ]; + + settings = { + ########################################################################## + # Monitors + ########################################################################## + + # See https://wiki.hyprland.org/Configuring/Monitors/ + # monitor = lib.mkMerge [ + # (lib.mkIf (systemName == "laptop") [ "eDP-1,1920x1080@59.99700,0x0,1" ]) + # (lib.mkIf (systemName == "pc") [ + # "DP-2,2560x1440@144,0x0,1" + # "DP-1,2560x1440@239.97,2569x0,1" + # #"DP-1,2560x1440@144,1920x0,1,bitdepth,10,cm,hdr" + # ]) + # ]; + + monitorv2 = + [ ] + ++ lib.optional (systemName == "laptop") { + output = "eDP-1"; + mode = "1920x1080@59.99700"; + scale = 1; + position = "0x0"; + } + ++ lib.optional (systemName == "pc") { + output = "DP-1"; + mode = "2560x1440@239.97"; + position = "2560x0"; # Corrected from 2569x0 for seamless alignment + scale = 1; + #supports_wide_color = 1; + bitdepth = 10; + cm = "hdr"; + supports_hdr = 1; + sdr_min_luminance = 0; # For true black on OLED + sdr_max_luminance = 275; # Matches typical SDR brightness + min_luminance = 0; + max_luminance = 1000; # HDR peak + max_avg_luminance = 400; # Average frame luminance + sdrbrightness = 1.2; # Slight boost to avoid washed out look + sdrsaturation = 1.0; + #transform = 2; # Uncomment if needed + } + ++ lib.optional (systemName == "pc") { + output = "DP-2"; + mode = "2560x1440@144"; + scale = 1; + position = "0x0"; + }; + + ########################################################################## + # Autostart + ########################################################################## + + # Autostart necessary processes (like notifications daemons, status bars, etc.) + # Or execute your favorite apps at launch like this: + exec-once = + [ + # "waybar" + # "quickshell" + "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1" + "fcitx5 -d" + "foot -s" + "systemctl --user import-environment DBUS_SESSION_BUS_ADDRESS WAYLAND_DISPLAY XDG_SESSION_TYPE XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP QT_QPA_PLATFORMTHEME GTK_THEME" + "dbus-update-activation-environment --systemd --all" + ] + ++ lib.optionals (config.home.username == "work") [ + "thunderbird" + "sleep 10 && emacsclient -c --frame-parameters='((name . \"work\"))' $HOME/Documents/work/README.org" ]; - settings = { + # ++ lib.optional (systemName == "laptop") + # "swaybg -o eDP-1 -i ${../assets/Wallpapers/138.png}" + # + # ++ lib.optional (systemName == "pc") + # "swaybg -o HDMI-A-1 -i ${../assets/Wallpapers/138.png} -o DP-1 -i ${../assets/Wallpapers/138.png}"; - # See https://wiki.hyprland.org/Configuring/Monitors/ - #monitor = lib.mkMerge [ - # (lib.mkIf (systemName == "laptop") [ "eDP-1,1920x1080@59.99700,0x0,1" ]) - # (lib.mkIf (systemName == "pc") [ - # "DP-2,2560x1440@144,0x0,1" - # "DP-1,2560x1440@239.97,2569x0,1" - # #"DP-1,2560x1440@144,1920x0,1,bitdepth,10,cm,hdr" - # ]) - #]; - monitorv2 = [ + ########################################################################## + # Plugins + ########################################################################## + plugin = { + hyprsplit = { + num_workspaces = 10; + persistent_workspaces = true; + }; - ] - ++ lib.optional (systemName == "laptop"){ - output = "eDP-1"; - mode = "1920x1080@59.99700"; - scale = 1; - position = "0x0"; - } - ++ lib.optional (systemName == "pc"){ - output = "DP-1"; - mode = "2560x1440@239.97"; - position = "2560x0"; # Corrected from 2569x0 for seamless alignment - scale = 1; - #supports_wide_color = 1; - bitdepth = 10; - cm = "hdr"; - supports_hdr = 1; - sdr_min_luminance = 0; # For true black on OLED - sdr_max_luminance = 275; # Matches typical SDR brightness - min_luminance = 0; - max_luminance = 1000; # HDR peak - max_avg_luminance = 400; # Average frame luminance - sdrbrightness = 1.2; # Slight boost to avoid washed out look - sdrsaturation = 1.0; - #transform = 2; # Uncomment if needed - } - ++ lib.optional (systemName == "pc"){ - output = "DP-2"; - mode = "2560x1440@144"; - scale = 1; - position = "0x0"; - }; - # Autostart necessary processes (like notifications daemons, status bars, etc.) - # Or execute your favorite apps at launch like this: - exec-once = [ - #"waybar" - #"quickshell" - "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1" - "fcitx5 -d" - "foot -s" - "systemctl --user import-environment DBUS_SESSION_BUS_ADDRESS WAYLAND_DISPLAY XDG_SESSION_TYPE XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP QT_QPA_PLATFORMTHEME GTK_THEME" - "dbus-update-activation-environment --systemd --all" - ] - ++ lib.optionals (config.home.username == "work") [ - "thunderbird" - "sleep 10 && emacsclient -c --frame-parameters='((name . \"work\"))' $HOME/Documents/work/README.org" - ]; - #++ lib.optional (systemName == "laptop") "swaybg -o eDP-1 -i ${../assets/Wallpapers/138.png}" - #++ - # lib.optional (systemName == "pc") - # "swaybg -o HDMI-A-1 -i ${../assets/Wallpapers/138.png} -o DP-1 -i ${../assets/Wallpapers/138.png}"; - - #plugins - plugin = { - hyprsplit = { - num_workspaces = 10; - persistent_workspaces = true; - }; - hyprscrolling = { - fullscreen_on_one_column = false; - column_width = 0.7; - explicit_column_widths = [ - 0.333 - 0.5 - 0.667 - 1.0 - ]; - focus_fit_method = 0; - }; - }; - - env = [ - "XCURSOR_SIZE, 24" - "HYPRCURSOR_SIZE, 24" - ]; - # Refer to https://wiki.hyprland.org/Configuring/Variables/ - # https://wiki.hyprland.org/Configuring/Variables/#general - general = { - gaps_in = 5; - gaps_out = 10; - border_size = 2; - # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors - #"col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg"; - #"col.inactive_border" = "rgba(595959aa)"; - # Set to true enable resizing windows by clicking and dragging on borders and gaps - resize_on_border = false; - # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on - allow_tearing = false; - layout = "dwindle"; - }; - - render = { - cm_enabled = true; # turn on the CM pipeline (requires Hyprland restart) - cm_fs_passthrough = 2; # passthrough only for HDR content (safer than 1) - cm_auto_hdr = 1; # auto-switch monitor to HDR for fullscreen apps - send_content_type = true; # helps auto HDR on some displays - # optional: keep your existing line - # cm_fs_passthrough = 1; # <- you can replace with 2 as above - }; - - # https://wiki.hyprland.org/Configuring/Variables/#decoration - decoration = { - rounding = 10; - rounding_power = 2; - # Change transparency of focused and unfocused windows - active_opacity = 1.0; - inactive_opacity = 1.0; - shadow = { - enabled = true; - range = 4; - render_power = 3; - #color = "rgba(1a1a1aee)"; - }; - # https://wiki.hyprland.org/Configuring/Variables/#blur - blur = { - enabled = true; - size = 3; - passes = 1; - vibrancy = 0.1696; - }; - }; - animations = { - enabled = "yes, please :)"; - # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more - bezier = [ - "easeOutQuint,0.23,1,0.32,1" - "easeInOutCubic,0.65,0.05,0.36,1" - "linear,0,0,1,1" - "almostLinear,0.5,0.5,0.75,1.0" - "quick,0.15,0,0.1,1" - ]; - animation = [ - "global, 1, 10, default" - "border, 1, 5.39, easeOutQuint" - "windows, 1, 4.79, easeOutQuint" - "windowsIn, 1, 4.1, easeOutQuint, popin 87%" - "windowsOut, 1, 1.49, linear, popin 87%" - "fadeIn, 1, 1.73, almostLinear" - "fadeOut, 1, 1.46, almostLinear" - "fade, 1, 3.03, quick" - "layers, 1, 3.81, easeOutQuint" - "layersIn, 1, 4, easeOutQuint, fade" - "layersOut, 1, 1.5, linear, fade" - "fadeLayersIn, 1, 1.79, almostLinear" - "fadeLayersOut, 1, 1.39, almostLinear" - "workspaces, 1, 1.94, almostLinear, fade" - "workspacesIn, 1, 1.21, almostLinear, fade" - "workspacesOut, 1, 1.94, almostLinear, fade" - ]; - }; - # Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ - # "Smart gaps" / "No gaps when only" - # uncomment all if you wish to use that. - # workspace = w[tv1], gapsout:0, gapsin:0 - # workspace = f[1], gapsout:0, gapsin:0 - # windowrule = bordersize 0, floating:0, onworkspace:w[tv1] - # windowrule = rounding 0, floating:0, onworkspace:w[tv1] - # windowrule = bordersize 0, floating:0, onworkspace:f[1] - # windowrule = rounding 0, floating:0, onworkspace:f[1] - - # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more - dwindle = { - pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = true; # You probably want this - force_split = 2; - }; - - # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more - master = { - new_status = "master"; - }; - - # https://wiki.hyprland.org/Configuring/Variables/#misc - misc = { - force_default_wallpaper = -1; # Set to 0 or 1 to disable the anime mascot wallpapers - disable_hyprland_logo = false; # If true disables the random hyprland logo / anime girl background. :( - enable_swallow = true; - swallow_regex = "foot"; - }; - - # https://wiki.hyprland.org/Configuring/Variables/#input - input = { - kb_layout = lib.mkMerge [ - (lib.mkIf (systemName == "laptop") "ie") - (lib.mkIf (systemName == "pc") "us") - ]; - repeat_rate = 40; - repeat_delay = 500; - #kb_variant = - #kb_model = - #kb_options = - #kb_rules = - follow_mouse = 1; - sensitivity = 0; # -1.0 - 1.0, 0 means no modification. - touchpad = { - natural_scroll = false; - }; - }; - # https://wiki.hyprland.org/Configuring/Variables/#gestures - #gestures = { - # workspace_swipe = true; - # workspace_swipe_cancel_ratio = 0.15; - #}; - - # Example per-device config - # See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more - device = { - name = "epic-mouse-v1"; - sensitivity = -0.5; - }; - - bind = [ - # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more - "${mod}, Return, exec, ${terminal}" - "${mod}, B, exec, ${browser}" - "${mod}, Q, killactive," - "${mod}, M, exit," - "${mod}, F, exec, ${fileManager}" - "${mod}, V, togglefloating," - "${mod}, T, fullscreen" - "${mod}, D, exec, ${runner}" - "${mod}, E, exec, ${editor}" - #",Print, exec, grim -g \"$(slurp)\" - | swappy -f -" - ",Print, exec, ${lib.getExe caelestia-cli} screenshot -r -f" - "${mod}, P, pseudo, " # dwindle - #focus with mainMod + arrow keys - #"${mod}, H, movefocus, l" - #"${mod}, L, movefocus, r" - "${mod}, K, movefocus, u" - "${mod}, J, movefocus, d" - "${mod} SHIFT, H, movewindow, l" - "${mod}, h, layoutmsg, move -col" - "${mod} SHIFT, L, movewindow, r" - "${mod}, L, layoutmsg, move +col" - "${mod} SHIFT, K, movewindow, u" - "${mod} SHIFT, J, movewindow, d" - - # Switch workspaces with Mod + [0-9] - "${mod}, 1, split:workspace, 1 " - "${mod}, 2, split:workspace, 2 " - "${mod}, 3, split:workspace, 3 " - "${mod}, 4, split:workspace, 4 " - "${mod}, 5, split:workspace, 5 " - "${mod}, 6, split:workspace, 6 " - "${mod}, 7, split:workspace, 7 " - "${mod}, 8, split:workspace, 8 " - "${mod}, 9, split:workspace, 9 " - "${mod}, 0, split:workspace, 10" - # Move active window to a workspace with mainMod + SHIFT + [0-9] - "${mod} SHIFT, 1, split:movetoworkspacesilent, 1 " - "${mod} SHIFT, 2, split:movetoworkspacesilent, 2 " - "${mod} SHIFT, 3, split:movetoworkspacesilent, 3 " - "${mod} SHIFT, 4, split:movetoworkspacesilent, 4 " - "${mod} SHIFT, 5, split:movetoworkspacesilent, 5 " - "${mod} SHIFT, 6, split:movetoworkspacesilent, 6 " - "${mod} SHIFT, 7, split:movetoworkspacesilent, 7 " - "${mod} SHIFT, 8, split:movetoworkspacesilent, 8 " - "${mod} SHIFT, 9, split:movetoworkspacesilent, 9 " - "${mod} SHIFT, 0, split:movetoworkspacesilent, 10" - # Example special workspace (scratchpad) - "${mod}, SLASH, togglespecialworkspace, magic" - "${mod} SHIFT, SLASH, movetoworkspace, special:magic" - # Scroll through existing workspaces with mainMod + scroll - "${mod}, mouse_down, workspace, e+1" - "${mod}, mouse_up, workspace, e-1" - # 8BitDo keyboard big red b Button - "${mod} SHIFT, F1, exec, scrcpy --video-source=camera -m3000 --camera-facing=back --v4l2-sink=/dev/video1 --no-video-playback --no-audio" - - ]; - - bindm = [ - # Move/resize windows with mainMod + LMB/RMB and dragging - "${mod}, mouse:272, movewindow" - "${mod}, mouse:273, resizewindow" - ]; - - bindel = [ - ",XF86AudioRaiseVolume, exec, pamixer -i 5" - ",XF86AudioLowerVolume, exec, pamixer -d 5" - ",XF86AudioMute, exec, pamixer --toggle-mute" - ",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" - #",XF86MonBrightnessUp, exec, light -A 5" - #",XF86MonBrightnessDown, exec, light -U 5" - - # Brightness - ",XF86MonBrightnessUp, global, caelestia:brightnessUp" - ",XF86MonBrightnessDown, global, caelestia:brightnessDown" - ]; - bindl = [ - ", XF86AudioNext, exec, playerctl next" - ", XF86AudioPause, exec, playerctl play-pause" - ", XF86AudioPlay, exec, playerctl play-pause " - ", XF86AudioPrev, exec, playerctl previous " - ]; - binds = [ - - ]; - - # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more - # See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules - - # Example windowrule - # windowrule = float,class:^(kitty)$,title:^(kitty)$ - - # Ignore maximize requests from apps. You'll probably like this. - windowrule = [ - # Ignore maximize requests from apps. You'll probably like this. - "suppressevent maximize, class:.*" - # Fix some dragging issues with XWayland - "nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0" - "workspace special:magic silent, class:thunderbird" - "workspace special:magic silent, class:emacs, title:work" - ]; - + hyprscrolling = { + fullscreen_on_one_column = false; + column_width = 0.7; + explicit_column_widths = [ 0.333 0.5 0.667 1.0 ]; + focus_fit_method = 0; }; }; + + ########################################################################## + # Environment + ########################################################################## + + env = [ + "XCURSOR_SIZE, 24" + "HYPRCURSOR_SIZE, 24" + ]; + + ########################################################################## + # General / Render / Decoration / Animations + ########################################################################## + + # https://wiki.hyprland.org/Configuring/Variables/ + # https://wiki.hyprland.org/Configuring/Variables/#general + general = { + gaps_in = 5; + gaps_out = 10; + border_size = 2; + # "col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg"; + # "col.inactive_border" = "rgba(595959aa)"; + resize_on_border = false; # enable resizing windows by clicking and dragging on borders and gaps + allow_tearing = false; # see https://wiki.hyprland.org/Configuring/Tearing/ before enabling + layout = "dwindle"; + }; + + render = { + cm_enabled = true; # turn on the CM pipeline (requires Hyprland restart) + cm_fs_passthrough = 2; # passthrough only for HDR content (safer than 1) + cm_auto_hdr = 1; # auto-switch monitor to HDR for fullscreen apps + send_content_type = true; # helps auto HDR on some displays + # cm_fs_passthrough = 1; # optional: keep your existing line; you can replace with 2 as above + }; + + # https://wiki.hyprland.org/Configuring/Variables/#decoration + decoration = { + rounding = 10; + rounding_power = 2; + active_opacity = 1.0; + inactive_opacity= 1.0; + + shadow = { + enabled = true; + range = 4; + render_power = 3; + # color = "rgba(1a1a1aee)"; + }; + + # https://wiki.hyprland.org/Configuring/Variables/#blur + blur = { + enabled = false; + size = 3; + passes = 1; + vibrancy = 0.1696; + }; + }; + + animations = { + enabled = "yes, please :)"; + + # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + bezier = [ + "easeOutQuint,0.23,1,0.32,1" + "easeInOutCubic,0.65,0.05,0.36,1" + "linear,0,0,1,1" + "almostLinear,0.5,0.5,0.75,1.0" + "quick,0.15,0,0.1,1" + ]; + + animation = [ + "global, 1, 10, default" + "border, 1, 5.39, easeOutQuint" + "windows, 1, 4.79, easeOutQuint" + "windowsIn, 1, 4.1, easeOutQuint, popin 87%" + "windowsOut, 1, 1.49, linear, popin 87%" + "fadeIn, 1, 1.73, almostLinear" + "fadeOut, 1, 1.46, almostLinear" + "fade, 1, 3.03, quick" + "layers, 1, 3.81, easeOutQuint" + "layersIn, 1, 4, easeOutQuint, fade" + "layersOut, 1, 1.5, linear, fade" + "fadeLayersIn, 1, 1.79, almostLinear" + "fadeLayersOut, 1, 1.39, almostLinear" + "workspaces, 1, 1.94, almostLinear, fade" + "workspacesIn, 1, 1.21, almostLinear, fade" + "workspacesOut, 1, 1.94, almostLinear, fade" + ]; + }; + + ########################################################################## + # Layouts + ########################################################################## + + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + dwindle = { + pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds + preserve_split= true; # You probably want this + force_split = 2; + }; + + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + master = { + new_status = "master"; + }; + + ########################################################################## + # Misc / Input / Gestures / Devices + ########################################################################## + + # https://wiki.hyprland.org/Configuring/Variables/#misc + misc = { + force_default_wallpaper = -1; # Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = true; # If true disables the random hyprland logo / anime girl background. :( + enable_swallow = true; + swallow_regex = "footclient"; + }; + + # https://wiki.hyprland.org/Configuring/Variables/#input + input = { + kb_layout = lib.mkMerge [ + (lib.mkIf (systemName == "laptop") "ie") + (lib.mkIf (systemName == "pc") "us") + ]; + repeat_rate = 40; + repeat_delay = 500; + # kb_variant = + # kb_model = + # kb_options = + # kb_rules = + follow_mouse = 1; + sensitivity = 0; # -1.0 - 1.0, 0 means no modification. + + touchpad = { + natural_scroll = false; + }; + }; + + # https://wiki.hyprland.org/Configuring/Variables/#gestures + # gestures = { + # workspace_swipe = true; + # workspace_swipe_cancel_ratio = 0.15; + # }; + + # Example per-device config + # See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs + device = { + name = "epic-mouse-v1"; + sensitivity = -0.5; + }; + + ########################################################################## + # Binds + ########################################################################## + + bind = [ + # Launcher / apps + "${mod}, Return, exec, ${terminal}" + "${mod}, B, exec, ${browser}" + "${mod}, F, exec, ${fileManager}" + "${mod}, D, exec, ${runner}" + "${mod}, E, exec, ${editor}" + + # Session / window controls + "${mod}, Q, killactive," + "${mod}, M, exit," + "${mod}, V, togglefloating," + "${mod}, T, fullscreen" + # ",Print, exec, grim -g \"$(slurp)\" - | swappy -f -" + ",Print, exec, ${lib.getExe caelestia-cli} screenshot -r -f" + + # Dwindle + "${mod}, P, pseudo, " + + # Focus (arrows) + # "${mod}, H, movefocus, l" + # "${mod}, L, movefocus, r" + "${mod}, K, movefocus, u" + "${mod}, J, movefocus, d" + + # Column movement (hyprscrolling) + "${mod}, h, layoutmsg, move -col" + "${mod}, L, layoutmsg, move +col" + + # Move window + "${mod} SHIFT, H, movewindow, l" + "${mod} SHIFT, L, movewindow, r" + "${mod} SHIFT, K, movewindow, u" + "${mod} SHIFT, J, movewindow, d" + + # Workspaces (switch) + "${mod}, 1, split:workspace, 1 " + "${mod}, 2, split:workspace, 2 " + "${mod}, 3, split:workspace, 3 " + "${mod}, 4, split:workspace, 4 " + "${mod}, 5, split:workspace, 5 " + "${mod}, 6, split:workspace, 6 " + "${mod}, 7, split:workspace, 7 " + "${mod}, 8, split:workspace, 8 " + "${mod}, 9, split:workspace, 9 " + "${mod}, 0, split:workspace, 10" + + # Workspaces (move active window) + "${mod} SHIFT, 1, split:movetoworkspacesilent, 1 " + "${mod} SHIFT, 2, split:movetoworkspacesilent, 2 " + "${mod} SHIFT, 3, split:movetoworkspacesilent, 3 " + "${mod} SHIFT, 4, split:movetoworkspacesilent, 4 " + "${mod} SHIFT, 5, split:movetoworkspacesilent, 5 " + "${mod} SHIFT, 6, split:movetoworkspacesilent, 6 " + "${mod} SHIFT, 7, split:movetoworkspacesilent, 7 " + "${mod} SHIFT, 8, split:movetoworkspacesilent, 8 " + "${mod} SHIFT, 9, split:movetoworkspacesilent, 9 " + "${mod} SHIFT, 0, split:movetoworkspacesilent, 10" + + # Special workspace (scratchpad) + "${mod}, SLASH, togglespecialworkspace, magic" + "${mod} SHIFT, SLASH, movetoworkspace, special:magic" + + # Scroll through existing workspaces with mainMod + scroll + "${mod}, mouse_down, workspace, e+1" + "${mod}, mouse_up, workspace, e-1" + + # 8BitDo keyboard big red b Button + "${mod} SHIFT, F1, exec, scrcpy --video-source=camera -m3000 --camera-facing=back --v4l2-sink=/dev/video1 --no-video-playback --no-audio" + ]; + + bindm = [ + # Move/resize windows with mainMod + LMB/RMB and dragging + "${mod}, mouse:272, movewindow" + "${mod}, mouse:273, resizewindow" + ]; + + bindel = [ + ",XF86AudioRaiseVolume, exec, pamixer -i 5" + ",XF86AudioLowerVolume, exec, pamixer -d 5" + ",XF86AudioMute, exec, pamixer --toggle-mute" + ",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + # ",XF86MonBrightnessUp, exec, light -A 5" + # ",XF86MonBrightnessDown, exec, light -U 5" + + # Brightness + ",XF86MonBrightnessUp, global, caelestia:brightnessUp" + ",XF86MonBrightnessDown, global, caelestia:brightnessDown" + ]; + + bindl = [ + ", XF86AudioNext, exec, playerctl next" + ", XF86AudioPause, exec, playerctl play-pause" + ", XF86AudioPlay, exec, playerctl play-pause " + ", XF86AudioPrev, exec, playerctl previous " + ]; + + binds = [ ]; + + ########################################################################## + # Rules (windows / workspaces) + ########################################################################## + + # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + # See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules + + # Example windowrule + # windowrule = float,class:^(kitty)$,title:^(kitty)$ + + # Smart gaps / No gaps when only + # workspace = w[tv1], gapsout:0, gapsin:0 + # workspace = f[1], gapsout:0, gapsin:0 + # windowrule = bordersize 0, floating:0, onworkspace:w[tv1] + # windowrule = rounding 0, floating:0, onworkspace:w[tv1] + # windowrule = bordersize 0, floating:0, onworkspace:f[1] + # windowrule = rounding 0, floating:0, onworkspace:f[1] + + windowrule = [ + # Ignore maximize requests from apps. You'll probably like this. + "suppressevent maximize, class:.*" + + # Fix some dragging issues with XWayland + "nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0" + + "workspace special:magic silent, class:thunderbird" + "workspace special:magic silent, class:emacs, title:work" + ]; }; }; } diff --git a/flake.lock b/flake.lock index f2cde28..1103677 100644 --- a/flake.lock +++ b/flake.lock @@ -27,11 +27,11 @@ "fromYaml": "fromYaml" }, "locked": { - "lastModified": 1746562888, - "narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=", + "lastModified": 1755819240, + "narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=", "owner": "SenchoPens", "repo": "base16.nix", - "rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89", + "rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6", "type": "github" }, "original": { @@ -112,11 +112,11 @@ "quickshell": "quickshell" }, "locked": { - "lastModified": 1757082294, - "narHash": "sha256-McEI6T5Y0BdOjzsfXrWbigwm/Tb445D31TEQYFBPxK4=", + "lastModified": 1757207876, + "narHash": "sha256-JgwRcx4mJmVV00aeKuzsxNEHlze33HZInlznKgbTic8=", "owner": "caelestia-dots", "repo": "shell", - "rev": "cfc1dc447c8bf6306de74d1fb1dba7943a1e1232", + "rev": "139c36ba5a0fa07efc58d9cc683d7b0ff73d7d75", "type": "github" }, "original": { @@ -136,11 +136,11 @@ ] }, "locked": { - "lastModified": 1756556373, - "narHash": "sha256-mYlZV3bSOMV4w4kquzkgMyKiaN/uXUVHR9IA4OJjS+A=", + "lastModified": 1757123223, + "narHash": "sha256-WE20W7OTKxw+Tvmthpy0CEV0KOvLWuvaW+bceTZ8yhk=", "owner": "caelestia-dots", "repo": "cli", - "rev": "8bc7e495af42c778143771179d23312f8ff7a3c8", + "rev": "12abcf2336e9277c47d745ac3cae04effa28d674", "type": "github" }, "original": { @@ -155,11 +155,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1757037033, - "narHash": "sha256-Gz8WGnGGJ4vlvxvYXZ9mjv8fd200M7fSZRd6mFmdM7Q=", + "lastModified": 1757210367, + "narHash": "sha256-9FeNHGZ2reB2jQ6USdUXNlME7c8sURuzHlvwellc2yM=", "owner": "caelestia-dots", "repo": "cli", - "rev": "d6c1e1324629381813ab69704846718f220ac0ac", + "rev": "d7b7d2ae048abb4e4d987e3e96717779b4a21388", "type": "github" }, "original": { @@ -180,11 +180,11 @@ "quickshell": "quickshell_2" }, "locked": { - "lastModified": 1756992456, - "narHash": "sha256-Z5NUzDghpaO49VX+kPPcZquB1TYdB0XSeY1++xxNQrY=", + "lastModified": 1757207876, + "narHash": "sha256-JgwRcx4mJmVV00aeKuzsxNEHlze33HZInlznKgbTic8=", "owner": "caelestia-dots", "repo": "shell", - "rev": "59d8f7602d4731fec0e07f37ae92ef53b39a30e3", + "rev": "139c36ba5a0fa07efc58d9cc683d7b0ff73d7d75", "type": "github" }, "original": { @@ -196,11 +196,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1748383148, - "narHash": "sha256-pGvD/RGuuPf/4oogsfeRaeMm6ipUIznI2QSILKjKzeA=", + "lastModified": 1756083905, + "narHash": "sha256-UqYGTBgI5ypGh0Kf6zZjom/vABg7HQocB4gmxzl12uo=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "4eb2714fbed2b80e234312611a947d6cb7d70caf", + "rev": "b655eaf16d4cbec9c3472f62eee285d4b419a808", "type": "github" }, "original": { @@ -285,11 +285,11 @@ ] }, "locked": { - "lastModified": 1751413152, - "narHash": "sha256-Tyw1RjYEsp5scoigs1384gIg6e0GoBVjms4aXFfRssQ=", + "lastModified": 1756770412, + "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "77826244401ea9de6e3bac47c2db46005e1f30b5", + "rev": "4524271976b625a4a605beefd893f270620fd751", "type": "github" }, "original": { @@ -338,11 +338,11 @@ ] }, "locked": { - "lastModified": 1757075491, - "narHash": "sha256-a+NMGl5tcvm+hyfSG2DlVPa8nZLpsumuRj1FfcKb2mQ=", + "lastModified": 1757256385, + "narHash": "sha256-WK7tOhWwr15mipcckhDg2no/eSpM1nIh4C9le8HgHhk=", "owner": "nix-community", "repo": "home-manager", - "rev": "f56bf065f9abedc7bc15e1f2454aa5c8edabaacf", + "rev": "f35703b412c67b48e97beb6e27a6ab96a084cd37", "type": "github" }, "original": { @@ -361,11 +361,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1757071535, - "narHash": "sha256-I3ppQKxd2oxQfwMCW04TSWnIwp5an5kTMY+tx0W8jaA=", + "lastModified": 1757246205, + "narHash": "sha256-x+cTvOZL5Fwa/YVmfMEnXg1+bjj4e8wYGoe1pt6c/oM=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "efa08fc58d7da5be64cfebc52b7dc44bf8d19ba9", + "rev": "4f38421373b783cfbe395973fda7a1b39af60200", "type": "github" }, "original": { @@ -394,11 +394,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1756926064, - "narHash": "sha256-5/1vyFRLvJWxhBgpPaV2orC0pjSgIny6JM6+joLyZok=", + "lastModified": 1757242823, + "narHash": "sha256-EqZPBr+fPs7uoFCDLxRa8kRcrUgn0kZTVTky/7I81aI=", "owner": "YaLTeR", "repo": "niri", - "rev": "c69464c1288789020d9a086f86c970a7dc49b8c7", + "rev": "22f629c24b9f81a2fcaaf3a79d75128484c6ed78", "type": "github" }, "original": { @@ -476,11 +476,11 @@ "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1757035152, - "narHash": "sha256-XMwzR/QY6WhwW6bXr8RVi9C+0ZPrrezgmkVyMiMKrcg=", + "lastModified": 1757207094, + "narHash": "sha256-uADYOTehuYQu6XsCHPe+57GYOxQNo063Ws52DqGbZDs=", "owner": "kaylorben", "repo": "nixcord", - "rev": "a34d2f6ec22197a6b21495921e2fb753d36d801a", + "rev": "f96fbdd36e43319a5459bd8a807395afe4d63105", "type": "github" }, "original": { @@ -491,11 +491,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1756542300, - "narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=", + "lastModified": 1756787288, + "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d7600c775f877cd87b4f5a831c28aa94137377aa", + "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", "type": "github" }, "original": { @@ -553,11 +553,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1756787288, - "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", + "lastModified": 1757068644, + "narHash": "sha256-NOrUtIhTkIIumj1E/Rsv1J37Yi3xGStISEo8tZm3KW4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", + "rev": "8eb28adfa3dc4de28e792e3bf49fcf9007ca8ac9", "type": "github" }, "original": { @@ -569,11 +569,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1756787288, - "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", + "lastModified": 1757068644, + "narHash": "sha256-NOrUtIhTkIIumj1E/Rsv1J37Yi3xGStISEo8tZm3KW4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", + "rev": "8eb28adfa3dc4de28e792e3bf49fcf9007ca8ac9", "type": "github" }, "original": { @@ -601,11 +601,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1756787288, - "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", + "lastModified": 1757068644, + "narHash": "sha256-NOrUtIhTkIIumj1E/Rsv1J37Yi3xGStISEo8tZm3KW4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", + "rev": "8eb28adfa3dc4de28e792e3bf49fcf9007ca8ac9", "type": "github" }, "original": { @@ -617,11 +617,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1751792365, - "narHash": "sha256-J1kI6oAj25IG4EdVlg2hQz8NZTBNYvIS0l4wpr9KcUo=", + "lastModified": 1756819007, + "narHash": "sha256-12V64nKG/O/guxSYnr5/nq1EfqwJCdD2+cIGmhz3nrE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1fd8bada0b6117e6c7eb54aad5813023eed37ccb", + "rev": "aaff8c16d7fc04991cac6245bee1baa31f72b1e1", "type": "github" }, "original": { @@ -643,11 +643,11 @@ ] }, "locked": { - "lastModified": 1751906969, - "narHash": "sha256-BSQAOdPnzdpOuCdAGSJmefSDlqmStFNScEnrWzSqKPw=", + "lastModified": 1756961635, + "narHash": "sha256-hETvQcILTg5kChjYNns1fD5ELdsYB/VVgVmBtqKQj9A=", "owner": "nix-community", "repo": "NUR", - "rev": "ddb679f4131e819efe3bbc6457ba19d7ad116f25", + "rev": "6ca27b2654ac55e3f6e0ca434c1b4589ae22b370", "type": "github" }, "original": { @@ -684,11 +684,11 @@ ] }, "locked": { - "lastModified": 1756352679, - "narHash": "sha256-UkKaPXTPzT7HAcBOV4NlWx2GAEJaTf0eb5OX6Q6jPqg=", + "lastModified": 1756981260, + "narHash": "sha256-GhuD9QVimjynHI0OOyZsqJsnlXr2orowh9H+HYz4YMs=", "ref": "refs/heads/master", - "rev": "f7597cdae2d537c5b12843599955856090dc49d5", - "revCount": 668, + "rev": "6eb12551baf924f8fdecdd04113863a754259c34", + "revCount": 672, "type": "git", "url": "https://git.outfoxxed.me/outfoxxed/quickshell" }, @@ -706,11 +706,11 @@ ] }, "locked": { - "lastModified": 1756352679, - "narHash": "sha256-UkKaPXTPzT7HAcBOV4NlWx2GAEJaTf0eb5OX6Q6jPqg=", + "lastModified": 1756981260, + "narHash": "sha256-GhuD9QVimjynHI0OOyZsqJsnlXr2orowh9H+HYz4YMs=", "ref": "refs/heads/master", - "rev": "f7597cdae2d537c5b12843599955856090dc49d5", - "revCount": 668, + "rev": "6eb12551baf924f8fdecdd04113863a754259c34", + "revCount": 672, "type": "git", "url": "https://git.outfoxxed.me/outfoxxed/quickshell" }, @@ -775,11 +775,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1756960927, - "narHash": "sha256-iG2DUobrDPzuVpDVHyqph1jtgAS0XOg1x8KGdsEkBms=", + "lastModified": 1757172691, + "narHash": "sha256-VOn/s24rb+iO6auhmGfT5kyr0ixRK6weBsNCKkGo2yY=", "owner": "nix-community", "repo": "stylix", - "rev": "584d9c57a8550bace5ffa2901dfebbde367bea54", + "rev": "9991299fe9aad330fb6b96bb58def37033271177", "type": "github" }, "original": { @@ -854,11 +854,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1750770351, - "narHash": "sha256-LI+BnRoFNRa2ffbe3dcuIRYAUcGklBx0+EcFxlHj0SY=", + "lastModified": 1754779259, + "narHash": "sha256-8KG2lXGaXLUE0F/JVwLQe7kOVm21IDfNEo0gfga5P4M=", "owner": "tinted-theming", "repo": "schemes", - "rev": "5a775c6ffd6e6125947b393872cde95867d85a2a", + "rev": "097d751b9e3c8b97ce158e7d141e5a292545b502", "type": "github" }, "original": { @@ -870,11 +870,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1751159871, - "narHash": "sha256-UOHBN1fgHIEzvPmdNMHaDvdRMgLmEJh2hNmDrp3d3LE=", + "lastModified": 1754788770, + "narHash": "sha256-LAu5nBr7pM/jD9jwFc6/kyFY4h7Us4bZz7dvVvehuwo=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "bded5e24407cec9d01bd47a317d15b9223a1546c", + "rev": "fb2175accef8935f6955503ec9dd3c973eec385c", "type": "github" }, "original": { @@ -886,11 +886,11 @@ "tinted-zed": { "flake": false, "locked": { - "lastModified": 1751158968, - "narHash": "sha256-ksOyv7D3SRRtebpXxgpG4TK8gZSKFc4TIZpR+C98jX8=", + "lastModified": 1755613540, + "narHash": "sha256-zBFrrTxHLDMDX/OYxkCwGGbAhPXLi8FrnLhYLsSOKeY=", "owner": "tinted-theming", "repo": "base16-zed", - "rev": "86a470d94204f7652b906ab0d378e4231a5b3384", + "rev": "937bada16cd3200bdbd3a2f5776fc3b686d5cba0", "type": "github" }, "original": { @@ -919,11 +919,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1756869116, - "narHash": "sha256-SGcqX3amLH4xiA+dwF2Fu2mt1O8zHc60v0+NEZGDJhw=", + "lastModified": 1757179758, + "narHash": "sha256-TIvyWzRt1miQj6Cf5Wy8Qz43XIZX7c4vTVwRLAT5S4Y=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "41e865c8d35468c67b991ef5a245a98b3e44108c", + "rev": "970728d0d9d1eada342bb8860af214b601139e58", "type": "github" }, "original": { @@ -942,11 +942,11 @@ ] }, "locked": { - "lastModified": 1757049497, - "narHash": "sha256-giZI7Jef2QWQxDscP1T/E0we/NZcapbtsI/wdcxbFuQ=", + "lastModified": 1757218898, + "narHash": "sha256-mB3z1ssPry/wHgLd8gFOaltwQ9kIRTqrzikkcnxG720=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "dc60eac4a109f5b5601dca3766299643e6e5612e", + "rev": "2255b29eece0757827b9911ef685c963996542b6", "type": "github" }, "original": {