diff --git a/home/wm/addon/waybar/default.nix b/home/wm/addon/waybar/default.nix index 9068129..a66b8f9 100644 --- a/home/wm/addon/waybar/default.nix +++ b/home/wm/addon/waybar/default.nix @@ -2,7 +2,10 @@ { programs.waybar = { enable = true; - package = pkgs.waybar; + package = pkgs.waybar.override { + hyprlandSupport = true; + swaySupport = false; + }; systemd.enable = true; style = ./style.css; settings = { @@ -10,7 +13,7 @@ layer = "top"; position = "top"; height = 28; - modules-left = [ "niri/workspaces" "niri/window" ]; + modules-left = [ "niri/workspaces" "hyprland/workspaces" "niri/window" "hyprland/window" "hyprland/submap" ]; modules-center = [ ]; modules-right = [ "tray" "idle_inhibitor" "network" "bluetooth" "wireplumber" "backlight" "battery" "clock" "custom/notification" ]; "niri/workspaces" = { @@ -19,6 +22,9 @@ "niri/window" = { separate-outputs = true; }; + "hyprland/workspaces" = { + separate-outputs = true; + }; idle_inhibitor = { format = "{icon}"; format-icons = { diff --git a/home/wm/default.nix b/home/wm/default.nix index bdbb077..3f75e43 100644 --- a/home/wm/default.nix +++ b/home/wm/default.nix @@ -2,6 +2,7 @@ { imports = [ ./niri + ./hyprland ./addon ]; xdg.portal = { diff --git a/home/wm/hyprland/default.nix b/home/wm/hyprland/default.nix new file mode 100644 index 0000000..a2a25ba --- /dev/null +++ b/home/wm/hyprland/default.nix @@ -0,0 +1,226 @@ +{ config +, pkgs +, lib +, ... +}: +let + brightnessctl = "${pkgs.brightnessctl}/bin/brightnessctl"; + firefox = "${config.programs.firefox.finalPackage}/bin/firefox"; + grimblast = "${pkgs.grimblast}/bin/grimblast"; + hyprctl = "${pkgs.hyprland}/bin/hyprctl"; + kitty = "${config.programs.kitty.package}/bin/kitty"; + librewolf = "${pkgs.librewolf}/bin/librewolf"; + loginctl = "${pkgs.systemd}/bin/loginctl"; + playerctl = "${pkgs.playerctl}/bin/playerctl"; + rofi = "${config.programs.rofi.package}/bin/rofi"; + swaync-client = "${pkgs.swaynotificationcenter}/bin/swaync-client"; + tmux = "${config.programs.tmux.package}/bin/tmux"; + wpaperctl = "${config.programs.wpaperd.package}/bin/wpaperctl"; + wpctl = "${pkgs.wireplumber}/bin/wpctl"; + yazi = "${pkgs.yazi}/bin/yazi"; + youtube = "${pkgs.youtube}/bin/youtube"; + + pictures = "${config.xdg.userDirs.pictures}"; +in +{ + xdg.portal = { + extraPortals = [ pkgs.xdg-desktop-portal-hyprland ]; + configPackages = [ pkgs.hyprland ]; + }; + programs.zsh.profileExtra = '' + if [ -z $DISPLAY ] && [ "$(tty)" = "/dev/tty1" ] ; then + exec ${lib.getExe config.wayland.windowManager.hyprland.package} + fi + ''; + wayland.windowManager.hyprland = { + enable = true; + systemd = { + enable = true; + variables = [ "--all" ]; + }; + settings = { + general = { + border_size = 1; + "col.active_border" = "rgb(bd93f9)"; + "col.inactive_border" = "rgba(44475aaa)"; + "col.nogroup_border" = "rgba(282a36dd)"; + "col.nogroup_border_active" = "rgb(bd93f9)"; + gaps_in = 2; + gaps_out = 4; + layout = "master"; + }; + + master = { + mfact = 0.65; + new_status = "master"; + new_on_top = true; + no_gaps_when_only = 1; + }; + + decoration = { + "col.shadow" = "rgba(1E202966)"; + dim_around = 0.6; + drop_shadow = "yes"; + rounding = 5; + shadow_range = 60; + shadow_offset = "1 2"; + shadow_render_power = 3; + shadow_scale = 0.97; + }; + + monitor = [ + "eDP-1, 1920x1080, 0x0, 1" + ", preferred, auto, 1" + ]; + + input = { + kb_layout = "us"; + kb_options = "rupeesign:4"; + kb_variant = "altgr-intl"; + touchpad = { + clickfinger_behavior = true; + disable_while_typing = true; + natural_scroll = true; + tap-to-click = true; + }; + }; + + misc = { + disable_hyprland_logo = true; + disable_splash_rendering = true; + vfr = true; + }; + + animation = [ + "windows,1,3,default,slide" + "fade,1,3,default" + "border,1,3,default" + "borderangle,1,3,default" + "workspaces,1,3,default,slide" + ]; + + windowrulev2 = [ + "bordercolor rgb(ff5555),xwayland:1" + + "workspace 2,class:^(firefox)$,title:^(Mozilla Firefox)$" + + "float,class:^(pavucontrol)$" + "size 50% 50%,class:^(pavucontrol)$" + "center,class:^(pavucontrol)$" + + "float,class:^(nm-connection-editor)$" + "size 50% 50%,class:^(nm-connection-editor)$" + "center,class:^(nm-connection-editor)$" + + "float,class:^(blueberry.py)$" + "size 50% 50%,class:^(blueberry.py)$" + "center,class:^(blueberry.py)$" + + "float,class:^(mpv)$" + "size 90% 90%,class:^(mpv)$" + "center,class:^(mpv)$" + "dimaround,class:^(mpv)$" + + "float,class:^(swayimg_.*)$" + "size 90% 90%,class:^(swayimg_.*)$" + "center,class:^(swayimg_.*)$" + + "float,class:^(org.pwmt.zathura)$" + "size 90% 90%,class:^(org.pwmt.zathura)$" + "center,class:^(org.pwmt.zathura)$" + + "float,class:^(.yubioath-flutter-wrapped_)$" + "center,class:^(.yubioath-flutter-wrapped_)$" + + "float,class:lutris" + "center,class:lutris" + "size 60% 60%,class:lutris" + + "dimaround,class:^(gcr-prompter)$" + + "float,class:^(virt-manager)$" + "size 25% 50%,class:^(virt-manager)$,title:^(Virtual Machine Manager)$" + "move 5%% 10%,class:^(virt-manager)$,title:^(Virtual Machine Manager)$" + ]; + + exec-once = [ + "${hyprctl} setcursor ${config.gtk.cursorTheme.name} 24" + ]; + + bindm = [ + "SUPER,mouse:272, movewindow" + "SUPER_SHIFT,mouse:272, resizewindow" + ]; + + bind = [ + "SUPER_SHIFT,Q, killactive," + "SUPER_SHIFT,space, togglefloating,active" + "SUPER_SHIFT,space, centerwindow" + "SUPER_SHIFT,F, fullscreen,0" + + "SUPER_SHIFT,C, exec, ${hyprctl} reload" + "SUPER_SHIFT,C, exec, systemctl --user restart kanshi.service" + + "SUPER,Return, exec, ${kitty} ${tmux} new" + "SUPER_SHIFT,Return, exec, ${kitty}" + "SUPER,d, exec, ${rofi} -show drun" + "SUPER,e, exec, ${kitty} --class=yazi ${yazi}" + "SUPER_SHIFT,u, exec, ${swaync-client} -t -sw" + "SUPER,i, exec, ${firefox}" + "SUPER_SHIFT,i, exec, ${librewolf}" + + "SUPER_SHIFT,escape, exec, ${pkgs.misc-scripts}/bin/power-menu" + "SUPER,f11, exec, ${pkgs.misc-scripts}/bin/tmux-sessions" + "SUPER_SHIFT,y, exec, ${youtube}" + "SUPER_SHIFT,b, exec, ${pkgs.rofi-bluetooth}/bin/rofi-bluetooth" + + "SUPER,escape, exec, ${loginctl} lock-session" + "SUPER_SHIFT,W, exec, ${wpaperctl} next" + + "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,9, workspace, 9" + "SUPER,0, workspace, 10" + + "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" + "SUPER_SHIFT,9, movetoworkspace, 9" + "SUPER_SHIFT,0, movetoworkspace, 10" + + "SUPER,l, layoutmsg,rollnext" + "SUPER,h, layoutmsg,rollprev" + "SUPER,m, layoutmsg,focusmaster" + "SUPER_SHIFT,m, layoutmsg,swapwithmaster" + + ",XF86AudioMute, exec, ${wpctl} set-mute @DEFAULT_AUDIO_SINK@ toggle" + ",XF86AudioPlay, exec, ${playerctl} play-pause" + ",XF86AudioNext, exec, ${playerctl} next" + ",XF86AudioPrev, exec, ${playerctl} previous" + ]; + + bindr = [ + ",print, exec, XDG_SCREENSHOTS_DIR=${pictures}/Screenshots ${grimblast} --notify save screen" + "SHIFT,print, exec, XDG_SCREENSHOTS_DIR=${pictures}/Screenshots ${grimblast} --notify --freeze save area" + ]; + + binde = [ + ",XF86MonBrightnessUp, exec, ${brightnessctl} --quiet --device=intel_backlight set +5%" + ",XF86MonBrightnessDown, exec, ${brightnessctl} --quiet --device=intel_backlight set 5%-" + ",XF86AudioRaiseVolume, exec, ${wpctl} set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" + ",XF86AudioLowerVolume, exec, ${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 5%-" + ]; + }; + }; +}