I don't plan to go back to Hyprland from Niri at all so it's useless bloat in my configs at this point.
R5EABBYA5FVI4TE4L7XEZZWUHNWJRQDKHYCVIDR4KDHPIMPCAH7QC UV2PAKVR4OYV6VKKV563V3QJTGF2QK2L3CIFXJRWKQQQFZ7BUXPAC CBE7JXANL7356AQKV5WRYF4FMDX6BC5V23ZC5TX2LGJIBHSOM3IAC JHY2T27QR73MRSNR3RW7O4VADWJLHGXP4P2IXZM2SIU5D376BO7AC RVV2KSCIXFU4HLXELZV67QDRTKG7OU6FZHFMPYO6HN6ISXPALX6QC AW5JS6N3UHGDNFJANWKJOKCXVRC3XULESTAYTZ6LCGHXVPZ67NQQC VU6EDVWWOYP6VBI6FWN4HYCKXSFF32RSGFOGJTV46A47GL7BS4MAC 5ITZKZT3J5DF2LSQU7BMBOBPAGJQC6ILCSCQADD44C5UQY2KAVKQC DQKCPBYIW34BPR3BNMCBID7HL3MHGKR47LGBJ6B7VSIKMCOV3EFAC NRNPHRXJ6EXUI26E4KQ4KAXT5CJKRLVBEOOPU7IJ4XUKEGIA44QAC LP62BFDMIBR5KIOV2QFD3N77UZYK6RLFGCASYGR6AZDLWR36KZFAC E5WANV7PYNPZFSJE4AMZABQ76TUNKVZN3M6ZFD5V6CKAFKG444NAC 55COBP3OQZ4U5O7WPRF2K5TESK3CXJWDIWVNLJGXIGCYK7I4KITQC Y6NY2LPV67XLNG26FLTYIMRLNVBJN3HVHXF6NIOB4Q6X43LE3NMAC PM3FRXZGL4V4OXK3FM5T6SEK3FNNDW4KW4DWCH7UTUDULZIGJQUAC ZEYQL5D47VOWKYYHUIUH4UAZTQUPZBDVYCMTQ43DUZX4T23MQY5AC OX4Y4L3TFQRGLQNAZRJ4XTA75AIRBH7ZREAMWPXRKDHTUJYODI5QC 7JFCUUFW2X6AYCFMBTC3JCPTWD4LTCB2BM23TWOHA3TCJ5LMBLCQC YVX32TAPGYVZ255ITOPRIPIZNF62YPIWRXTA7FZF32QP25WWGWHAC ICHS4YUWK6D3WCHMFD4NRZBAHIVSSKBAPXCS4G6KRH2WWNKOT7EQC USA5NQJAPQIM3Y64IIHREDDOBZWAM6VDI4JTCFFU5X3TENEDILXQC TS7WMBCXZGCVPYD7XITC3FSRX43GPFEBHBVQRTXKWMDRHLMZICYAC 4KIK3RDHXZRZ3E4OTZ26F6DUDWNKR3ZDH446O4COUNN3WAS2FOTAC 52HVMFIW3TW3ZIYAXXZYH5LAR6PV4V63QWWK6QMWBUQJVQXQ7OAAC 25NNQ2Y4GSN634KW6GJJCXSY7NBK7WVDA5LT4GFOKUD2DVNMTIJAC VHIVMDBD2LRHV5IFJZLP2MZ2F47CV3OOPFEC55QMQQARF66TTU3AC WMG5N4OXZUKELULLZ3Q5374APUH5H5XMWR6QDJFPLGBB7HTXC5MQC FTYEX5OPGKWBAOXTRLVQEHALFSD3UY2L3RTWVYAIQ3TIHNETPSHAC RU4727VMULVSBIYF4EDAR57GTUU3M2TZSASQKESYPBS3NFKQEI6AC IAGCKKCI5DKL6UNAPRJ5XS2OYX62MKCIEN6T6QHZZJQ5SHAV2JAAC CG4ND52NJKGW4ZWDVJTNEL63CFPMLUVFXCDZFBQSRIO5QMBQVVXAC MZCZLR27GPIN6H7YXALWBTSCYZJSJ2H7WGICRKPZP45SXIWY5DJQC HE5KRFUW623R2AH75GSBZGDZBJHUFCZ4WOMAKH65IVLJYBB2AT5AC ADWCOO2XCHI4TMAWVB7JZQGQESEQD3ZYAIBHDMVEVLXMYJFFGPEAC AC36PU6A3WCWD362UV66XAZAIUDXYGW7XYE6M4VYPCUAX2BZ4IBAC 6BF2X5F5G5SMRD6KVPCXRQVKTQVNIHYS6X4W6PHXKFYR2SGJSZXAC FOY53J7C5KFYAA35S75QVCGBFU6NYSNXZ33NALOTFX6LP74JFE5AC ZWZAFUAL4EJP4R44XYSZG6KJR5XTURDWAL7NOBFKUP6NLRUA6U6QC CSEGRBR7JH4T24I2EIQXYWJS4Q7EILSF2BB3TP3IN6JKMAQHXPOQC KSEFLQSN3XGXQP3JMMXSALBN2Y4WSQBGU4UY76UIOB7NUMJ7QOEAC YGLYNBOJLMAK6AA6FK6EVSV6HXZNLSRG3XR2NHGEZTCUXWQWU57AC NXTW2NDKHVO6RFWLSYPFKNOXZG2R6S4RAM6WNLNV5VFLP7OLSIUAC JBGYFAUGWDTX5VNHJUPWP6WD7VSS2HQJ4MYRLEPYRFWDXBWYBFFAC L6SN5PMKPZ2VPVJAH2G64EU3T6L5XOWVDH7DP7RU4EC2TU377RPAC J253K4PJNI5D5TCNNJYNG7DSMVTY4NS2HX6ZAHQNKYAA735NCFAQC SWHC2UCZMDT2ZDJHWWJB6BPHT5PJ7U2ADHTRPO6OFIGRZVPXDXLAC CE6B4WAWIVJWL6YOKBOFJURBDM57MLRTOA6ZYJNW6CLUTKFCCORQC NLGCV3BRXEQ6DRHZUCKU2F7DLEEYMB2F56NJP7LBPUWJGZ2A7DVAC D7SWFVAB7NEWQPPIYCIN5ZVDUJVZHE5TIOE7SLBDL3BIO2MZ54HAC ANMDKHKOF4TK66SMHVWBKCWKVJZFVPHT3GBNE365AJQD7GW3BW7AC HBSVMHMQ2CQFZXFPIECPGNT7DB46YEHSE72BB4XGHKPS4IPNKYLQC { config, lib, pkgs, ... }: letinherit (lib) mkIf;window-switcher = pkgs.writeShellScriptBin "window-switcher" ''# Get all windows, format them nicely, let user select, then focusselected=$(${pkgs.hyprland}/bin/hyprctl clients -j | \${pkgs.fuzzel}/bin/fuzzel --dmenu --prompt "Window: ")if [ -n "$selected" ]; then# Extract the address (first word) and focus the windowaddress=$(echo "$selected" | awk '{print $1}')${pkgs.hyprland}/bin/hyprctl dispatch focuswindow address:$addressfi'';in mkIf config.isDesktop {environment.systemPackages = [window-switcher];}${pkgs.jq}/bin/jq -r '.[] | "[\(.workspace.name)] \(.class) - \(.title)"' | \
{ config, lib, pkgs, ... }: letin mkIf config.isDesktopNotWsl {hardware.graphics = enabled;programs.xwayland = enabled;environment.systemPackages = [pkgs.hyprland];home-manager.sharedModules = [{systemd = enabled {enableXdgAutostart = true;};settings = {bind = ["SUPER, O, exec, hyprctl reload""SUPER, Q, killactive""SUPER, M, exec, hyprctl dispatch movetoworkspace special""SUPER, H, movefocus, l""SUPER, J, movefocus, d""SUPER, K, movefocus, u""SUPER, L, movefocus, r""SUPER SHIFT, H, movewindow, l""SUPER SHIFT, J, movewindow, d""SUPER SHIFT, K, movewindow, u""SUPER SHIFT, L, movewindow, r""SUPER SHIFT, Return, layoutmsg, swapwithmaster""SUPER SHIFT, F, fullscreen, 1""SUPER, 1, workspace, 1""SUPER, 2, workspace, 2""SUPER, 3, workspace, 3""SUPER, 4, workspace, 4""SUPER, 5, workspace, 5""SUPER, 6, workspace, 6""SUPER, 7, workspace, 7""SUPER, 8, workspace, 8""SUPER SHIFT, 1, movetoworkspace, 1""SUPER SHIFT, 2, movetoworkspace, 2""SUPER SHIFT, 3, movetoworkspace, 3""SUPER SHIFT, 4, movetoworkspace, 4""SUPER SHIFT, 5, movetoworkspace, 5""SUPER SHIFT, 6, movetoworkspace, 6""SUPER SHIFT, 7, movetoworkspace, 7""SUPER SHIFT, 8, movetoworkspace, 8""CTRL, BackSpace, exec, fuzzel"];binde = ["SUPER, equal, resizeactive, 50 0""SUPER, minus, resizeactive, -50 0""SUPER SHIFT, equal, resizeactive, 0 50""SUPER SHIFT, minus, resizeactive, 0 -50"];exec-once = ["waybar"];};decoration = {};windowrulev2 = [# Floating windows - transparency + blur."opacity 0.92 0.88, floating:1"# Game window rules - Steam games only.# Kitty scratchpad."float, class:^(.*)(scratchpad)$""monitor 0, class:^(.*)(scratchpad)$""size 960 590, class:^(.*)(scratchpad)$""move 640 52, class:^(.*)(scratchpad)$""pin, class:^(.*)(scratchpad)$""animation slide top, class:^(.*)(scratchpad)$"# Exceptions - always opaque (must come after general rules)."opaque, class:^(zen)(.*)$""opaque, class:^(org.qutebrowser)(.*)$"# Process monitor popup."float, class:^(btop-popup)$""monitor 0, class:^(btop-popup)$""size 600 490, class:^(btop-popup)$""move 100%-612 52, class:^(btop-popup)$""pin, class:^(btop-popup)$""noinitialfocus, class:^(btop-popup)$""animation slide top, class:^(btop-popup)$""workspace special:games, class:^(steam_app_).*""fullscreen, class:^(steam_app_).*"];"immediate, class:^(steam_app_).*" # Reduce input lag."noborder, class:^(steam_app_).*" # Remove borders for fullscreen."noanim, class:^(steam_app_).*" # Disable animations for performance."noblur, class:^(steam_app_).*" # Disable blur for performance."noshadow, class:^(steam_app_).*" # Disable shadows for performance."monitor 0, class:^(steam_app_).*" # Force games to primary monitor.# Normal (tiled) windows - slight transparency."opacity 0.97 0.97, floating:0"input = {};};};}];}kb_layout = "us";follow_mouse = 1;left_handed = true;accel_profile = "flat";sensitivity = 0;touchpad.natural_scroll = false;# Disable mouse acceleration.# Layer rules for blur on layer surfaces (notifications, launchers).layerrule = ["blur, notifications""blur, launcher""ignorealpha 0.5, notifications""ignorealpha 0.5, launcher"];# Window rules.};cursor = {hide_on_key_press = true;inactive_timeout = 10;no_warps = true;};dwindle = {preserve_split = true;smart_resizing = false;};animations = {animation = [];};misc = {animate_manual_resizes = true;background_color = config.theme.with0x.base00;disable_hyprland_logo = true;disable_splash_rendering = true;# Wakes screen.key_press_enables_dpms = true;mouse_move_enables_dpms = true;"border , 1, 10, default""fade , 1, 4, easeOutCirc""layers , 1, 2, fluent_decel, slide""windows , 1, 4, fluent_decel, popin 90%""workspaces, 1, 6, easeOutCubic, slide"bezier = ["material_decelerate, 0.05, 0.7, 0.1, 1""fluent_decel, 0, 0.2, 0.4, 1""easeOutCirc, 0, 0.55, 0.45, 1""easeOutCubic, 0.33, 1, 0.68, 1"];blur = {enabled = true;size = 5;passes = 1;new_optimizations = true;ignore_opacity = true;};shadow = {enabled = true;range = 8;render_power = 2;color = "0x66${config.theme.colors.base00}";};dim_inactive = true;dim_strength = 0.05;rounding = config.theme.radius.normal;"col.inactive_border" = "0xFF${colors.base00}";"col.nogroup_border" = "0xFF${colors.base00}";# Gradient window borders."col.active_border" = "rgb(${colors.base0B}) rgb(${colors.base09}) 45deg";"col.nogroup_border_active" = "rgb(${colors.base0B}) rgb(${colors.base09}) 45deg";general = with config.theme; {gaps_in = margin.small;gaps_out = margin.normal;border_size = border.normal;# Basic appearance.# Auto-start waybar.# Resize controls."SUPER, V, exec, cliphist list | fuzzel --dmenu | cliphist decode | wl-copy""SUPER, Tab, exec, window-switcher""SUPER, G, togglespecialworkspace, games""SUPER SHIFT, G, movetoworkspace, special:games""SUPER, C, exec, cliphist list | fuzzel --dmenu | cliphist decode | wl-copy""SUPER SHIFT, P, exec, power-menu""SUPER, D, exec, todo-scratchpad""SUPER, S, exec, random-scratchpad""SUPER, T, exec, process-monitor""SUPER, P, exec, process-killer"# Launcher.# Move windows to workspaces.# Workspaces.# Window toggles."SUPER SHIFT, T, togglefloating"# Move windows.# Focus windows."SUPER SHIFT, M, togglespecialworkspace"# Config and window controls.monitor = [ ",preferred,auto,1" ];wayland.windowManager.hyprland = enabled {pkgs.wl-clipboardinherit (lib) enabled disabled mkIf;
home-manager.sharedModules = [{}];}settings.global = {settings.urgency_critical = {frame_color = "${base08}";highlight = "${base08}";background = "${base00}";foreground = "${base04}";timeout = 30;settings.urgency_low = {};settings.urgency_normal = {};frame_color = "${base09}";highlight = "${base09}";background = "${base00}";foreground = "${base04}";timeout = 20;frame_color = "${base0E}";highlight = "${base0E}";background = "${base00}";foreground = "${base04}";timeout = 10;progress_bar_min_width = 0;progress_bar_max_width = 750;progress_bar_corner_radius = config.theme.radius.normal;};};settings.general = {appname = "*";summary = "*";body = "*download*|*steam*|*now playing*|*error*|*failed*|*success*|*complete*";urgency = "normal";};};padding = config.theme.padding.normal;horizontal_padding = config.theme.padding.normal;corner_radius = config.theme.radius.big;frame_width = config.theme.border.normal;monitor = if config.networking.hostName == "yuzu" then 1 else 0;width = ''(350, 500)'';height = ''(0, 750)'';offset = ''(${toString config.theme.margin.normal}, ${toString config.theme.margin.normal})'';font = "${config.theme.font.sans.name}:size=${toString config.theme.font.size.normal}";dmenu = "fuzzel --dmenu";sort = "update";enable_recursive_icon_lookup = true;format = "<b>%a</b>\n<b>%s</b>\n%b";show_age_threshold = 30;transparency = 0; # Doesn't work on Wayland.separator_height = config.theme.border.normal;iconTheme.name = config.theme.icons.name;iconTheme.package = config.theme.icons.package;iconTheme.size = "32";services.dunst = with config.theme.withHash; disabled {{ config, lib, ... }: letin mkIf config.isDesktopNotWsl {inherit (lib) mkIf disabled;
"hyprland/workspaces" = {all-outputs = true;format = "{icon}";format-icons = {default = "○";active = "●";};persistent-workspaces."*" = 4;};
};"hyprland/window" = {max-length = 50;separate-outputs = true;rewrite = {"(.*) — Zen Browser" = " $1";"(.*) - Discord" = " $1";"(.*) — nu" = " $1";};