{ config, pkgs, lib, ... }: let scripts = ./scripts; shell = "quickshell"; in { wayland.windowManager.hyprland = { enable = true; systemd.enable = true; xwayland.enable = true; plugins = [ pkgs.hyprlandPlugins.hy3 ]; settings = { "$mod" = "SUPER"; "$terminal" = "alacritty"; env = [ "HYPRCURSOR_THEME,macos" "HYPRCURSOR_SIZE,12" ]; general = { layout = "hy3"; border_size = 3; gaps_in = 8; gaps_out = 8; resize_on_border = true; "col.inactive_border" = "rgb(474f6f)"; "col.active_border" = "rgb(b4f9f8)"; }; windowrulev2 = [ "bordercolor rgb(f7768e), fullscreen:1" "noanim, initialClass:ueberzug(.*)" ]; cursor = { inactive_timeout = 5; hide_on_key_press = true; }; plugin.hy3 = { tab_first_window = false; tabs = { height = 6; render_text = false; border_width = 0; "col.active" = "rgb(b4f9f8)"; "col.inactive" = "rgb(474f6f)"; "col.urgent" = "rgb(f7768e)"; }; }; decoration = { rounding = 10; shadow.color = "rgba(16161ea0)"; }; group.groupbar = { font_family = "JetBrainsMono Nerd Font"; font_size = 14; }; layerrule = [ "noanim, ^(notifications)$" ]; animations = { bezier = [ "overshot, 0.13, 0.99, 0.29, 1.06" ]; animation = [ "windows, 1, 2, default, popin 70%" "windowsMove, 1, 4, overshot, slide" "border, 1, 8, default," "fade, 1, 8, default," "workspaces, 1, 5, overshot, slidevert" ]; }; misc = { disable_hyprland_logo = true; disable_autoreload = true; new_window_takes_over_fullscreen = 2; focus_on_activate = true; }; # Bindings bind = [ "$mod, Return, exec, $terminal" "$mod, D, global, ${shell}:launcher" "$mod Shift, D, global, ${shell}:dashboard" "$mod, M, exec, hyprlock --immediate" # Exit "$mod Shift, E, global, ${shell}:session" # Emacs Everywhere # "$mod, Q, exec, $HOME/.config/emacs/bin/doom +everywhere" # Windows "$mod, Left, hy3:movefocus, l" "$mod, Right, hy3:movefocus, r" "$mod, Up, hy3:movefocus, u" "$mod, Down, hy3:movefocus, d" "$mod, H, hy3:movefocus, l" "$mod, L, hy3:movefocus, r" "$mod, K, hy3:movefocus, u" "$mod, J, hy3:movefocus, d" "$mod Shift, Left, hy3:movewindow, l" "$mod Shift, Right, hy3:movewindow, r" "$mod Shift, Up, hy3:movewindow, u" "$mod Shift, Down, hy3:movewindow, d" "$mod Shift, H, hy3:movewindow, l" "$mod Shift, L, hy3:movewindow, r" "$mod Shift, K, hy3:movewindow, u" "$mod Shift, J, hy3:movewindow, d" "$mod, F, fullscreen, 1" "$mod Shift, F, fullscreen, 0" "$mod Shift, Q, hy3:killactive," "$mod, V, hy3:makegroup, v, ephemeral" "$mod, B, hy3:makegroup, h, ephemeral" "$mod, T, hy3:makegroup, tab" "$mod Shift, T, hy3:changegroup, toggletab" "$mod, E, hy3:changegroup, opposite" "$mod, A, hy3:changefocus, raise" # Screenshot "$mod, P, exec, ${scripts}/screenshot-save" # Workspace manipulation "$mod, N, global, ${shell}:newworkspace" "$mod Shift, N, global, ${shell}:movetonewworkspace" ] ++ builtins.concatMap (n: let wsp = builtins.toString n; key = if n == 10 then "0" else wsp; in [ "$mod, ${key}, global, ${shell}:workspace${wsp}" "$mod Shift, ${key}, global, ${shell}:movetoworkspace${wsp}" ]) (lib.range 1 10); bindn = [ ", mouse:272, hy3:focustab, mouse" ", escape, global, ${shell}:escape" ]; bindl = [ # XF86 key bindings ", XF86AudioMute, global, ${shell}:mute" ", XF86AudioMicMute, global, ${shell}:muteMic" ", XF86AudioPlay, global, ${shell}:mediaToggle" ", XF86AudioNext, global, ${shell}:mediaNext" ", XF86AudioPrev, global, ${shell}:mediaPrev" ", XF86AudioStop, global, ${shell}:mediaStop" # Screenshot ", Print, exec, ${scripts}/screenshot" "Shift, Print, exec, ${scripts}/screenshot-slurp" ]; bindle = [ # XF86 key bindings ", XF86AudioRaiseVolume, global, ${shell}:volumeUp" ", XF86AudioLowerVolume, global, ${shell}:volumeDown" ", XF86MonBrightnessUp, global, ${shell}:brightnessUp" ", XF86MonBrightnessDown, global, ${shell}:brightnessDown" ]; }; }; }