{ pkgs, lib, config, ... }: let configure-gtk = pkgs.writeTextFile { name = "configure-gtk"; destination = "/bin/configure-gtk"; executable = true; text = let schema = pkgs.gsettings-desktop-schemas; datadir = "${schema}/share/gsettings-schemas/${schema.name}"; gtk-theme = config.gtk.theme.name; icon-theme = config.gtk.iconTheme.name; cursor-theme = config.gtk.cursorTheme.name; in '' export XDG_DATA_DIRS=${datadir}:$XDG_DATA_DIRS gnome_schema=org.gnome.desktop.interface gsettings set $gnome_schema gtk-theme '${gtk-theme}' gsettings set $gnome_schema icon-theme '${icon-theme}' gsettings set $gnome_schema cursor-theme '${cursor-theme}' ''; }; in { imports = [ ./waybar ./swaylock.nix ./gtk.nix ./dunst.nix ./rofi.nix ]; home.packages = with pkgs; [ hyprpaper configure-gtk pipewire wireplumber wl-clipboard swayimg brightnessctl ]; programs.firefox.package = pkgs.firefox-wayland; programs.rofi.package = pkgs.rofi-wayland; wayland.windowManager.hyprland = { enable = true; package = null; # Use package from nixpkgs xwayland = { enable = true; hidpi = true; }; extraConfig = '' exec-once = waybar & hyprpaper & dunst source = ./macchiato.conf source = ./display.conf env = XDG_CURRENT_DESKTOP=Hyprland env = XDG_SESSION_TYPE=wayland env = XDG_SESSION_DESKTOP=Hyprland env = GDK_BACKEND=wayland,x11 env = GTK_THEME,Sweet-Dark env = XCURSOR_THEME,Catppuccin-Macchiato-Dark-Cursors env = XCURSOR_SIZE,24 input { kb_layout = gb follow_mouse = 1 touchpad { natural_scroll = yes } } general { gaps_in = 5 gaps_out = 20 border_size = 2 col.active_border = $mauve col.group_border_active = $mauve col.inactive_border = $surface2 col.group_border = $surface2 layout = dwindle } dwindle { force_split = 2 preserve_split = true } decoration { rounding = 10 blur = yes blur_size = 5 blur_passes = 3 blur_new_optimizations = on blur_xray = off drop_shadow = yes shadow_range = 4 shadow_render_power = 3 col.shadow = $base } animations { enabled = yes bezier = myBezier, 0.05, 0.9, 0.1, 1.05 animation = windows, 1, 7, myBezier animation = windowsOut, 1, 7, default, popin 80% animation = border, 1, 10, default animation = borderangle, 1, 8, default animation = fade, 1, 7, default animation = workspaces, 1, 6, default } # See https://wiki.hyprland.org/Configuring/Keywords/ for more bind = SUPER, Return, exec, wezterm bind = SUPER, Space, exec, pkill rofi || rofi -show drun bind = SUPER, W, exec, firefox bind = SUPER, E, exec, thunar bind = SUPER, Q, killactive, bind = SUPER, F1, exec, swaylock bind = SUPER, M, fullscreen, 1 bind = SUPER SHIFT, M, fullscreen, 0 bind = SUPER SHIFT, P, exec, powermenu bind = SUPER SHIFT, Space, togglefloating, bind = , Print, exec, grim -g "$(slurp)" bind = , XF86AudioMute, exec, pamixer -t binde = , XF86AudioRaiseVolume, exec, pamixer -i 2 binde = , XF86AudioLowerVolume, exec, pamixer -d 2 bind = SUPER, H, movefocus, l bind = SUPER, L, movefocus, r bind = SUPER, K, movefocus, u bind = SUPER, J, movefocus, d bind = SUPER SHIFT, H, movewindow, l bind = SUPER SHIFT, L, movewindow, r bind = SUPER SHIFT, K, movewindow, u bind = SUPER SHIFT, J, movewindow, d bind = SUPER, A, moveworkspacetomonitor, 1 current bind = SUPER, A, workspace, 1 bind = SUPER, S, moveworkspacetomonitor, 2 current bind = SUPER, S, workspace, 2 bind = SUPER, D, moveworkspacetomonitor, 3 current bind = SUPER, D, workspace, 3 bind = SUPER, F, moveworkspacetomonitor, 4 current bind = SUPER, F, workspace, 4 bind = SUPER, U, moveworkspacetomonitor, 5 current bind = SUPER, U, workspace, 5 bind = SUPER, I, moveworkspacetomonitor, 6 current bind = SUPER, I, workspace, 6 bind = SUPER, O, moveworkspacetomonitor, 7 current bind = SUPER, O, workspace, 7 bind = SUPER, P, moveworkspacetomonitor, 8 current bind = SUPER, P, workspace, 8 bind = SUPER SHIFT, A, movetoworkspace, 1 bind = SUPER SHIFT, S, movetoworkspace, 2 bind = SUPER SHIFT, D, movetoworkspace, 3 bind = SUPER SHIFT, F, movetoworkspace, 4 bind = SUPER SHIFT, U, movetoworkspace, 5 bind = SUPER SHIFT, I, movetoworkspace, 6 bind = SUPER SHIFT, O, movetoworkspace, 7 bind = SUPER SHIFT, P, movetoworkspace, 8 bind = SUPER, period, workspace, m+1 bind = SUPER, comma, workspace, m-1 bind = SUPER, bracketright, focusmonitor, +1 bind = SUPER, bracketleft, focusmonitor, -1 bind = SUPER SHIFT, bracketright, movecurrentworkspacetomonitor, +1 bind = SUPER SHIFT, bracketleft, movecurrentworkspacetomonitor, -1 bind = SUPER, N, workspace, empty bind = SUPER, C, togglespecialworkspace bind = SUPER, tab, workspace, previous bind = SUPER SHIFT, N, movetoworkspace, empty bind = SUPER SHIFT, C, movetoworkspace, special bind = SUPER SHIFT, tab, movetoworkspace, previous # Move/resize windows with mainMod + LMB/RMB and dragging bindm = SUPER, mouse:272, movewindow bindm = SUPER, mouse:273, resizewindow # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more windowrule = workspace 2,(neovide) windowrule = workspace 3,(firefox) windowrule = workspace 4,(libreoffice).* windowrule = workspace 4,(Zotero) windowrule = workspace 5,(Signal) windowrule = workspace 5,(fractal) windowrule = workspace 5,(discord) windowrule = workspace 5,(teams-for-linux) windowrule = workspace 5,title:^(Zoom|zoom).*,xwayland:1 windowrule = nofullscreenrequest,title:^(Zoom|zoom).* windowrule = workspace 6,(Nxplayer.bin) windowrule = float,class:(Nxplayer.bin),title:^(NoMachine)$ windowrule = maximize,class:(Nxplayer.bin),title:^(NoMachine).+$ windowrule = float,(foot) windowrule = center,(foot) windowrule = float,(pavucontrol) windowrule = size 800 600,(pavucontrol) windowrule = move 100%-820 10%,(pavucontrol) windowrule = float,(.blueman-manager-wrapped) windowrule = size 800 600,(.blueman-manager-wrapped) windowrule = move 100%-820 10%,(.blueman-manager-wrapped) windowrule = float,(nm-connection-editor) windowrule = size 800 600,(nm-connection-editor) windowrule = move 100%-820 10%,(nm-connection-editor) windowrule = float,(otpclient) windowrule = move 10% 10%,(otpclient) windowrule = float,(thunar) windowrule = center,(thunar) ''; }; xdg.configFile."hypr/display.conf".text = lib.mkDefault '' monitor=,preferred,auto,auto ''; xdg.configFile."hypr/macchiato.conf".text = '' $rosewaterAlpha = f4dbd6 $flamingoAlpha = f0c6c6 $pinkAlpha = f5bde6 $mauveAlpha = c6a0f6 $redAlpha = ed8796 $maroonAlpha = ee99a0 $peachAlpha = f5a97f $yellowAlpha = eed49f $greenAlpha = a6da95 $tealAlpha = 8bd5ca $skyAlpha = 91d7e3 $sapphireAlpha = 7dc4e4 $blueAlpha = 8aadf4 $lavenderAlpha = b7bdf8 $textAlpha = cad3f5 $subtext1Alpha = b8c0e0 $subtext0Alpha = a5adcb $overlay2Alpha = 939ab7 $overlay1Alpha = 8087a2 $overlay0Alpha = 6e738d $surface2Alpha = 5b6078 $surface1Alpha = 494d64 $surface0Alpha = 363a4f $baseAlpha = 24273a $mantleAlpha = 1e2030 $crustAlpha = 181926 $rosewater = 0xfff5e0dc $flamingo = 0xfff2cdcd $pink = 0xfff5c2e7 $mauve = 0xffcba6f7 $red = 0xfff38ba8 $maroon = 0xffeba0ac $peach = 0xfffab387 $yellow = 0xfff9e2af $green = 0xffa6e3a1 $teal = 0xff94e2d5 $sky = 0xff89dceb $sapphire = 0xff74c7ec $blue = 0xff89b4fa $lavender = 0xffb4befe $text = 0xffcdd6f4 $subtext1 = 0xffbac2de $subtext0 = 0xffa6adc8 $overlay2 = 0xff9399b2 $overlay1 = 0xff7f849c $overlay0 = 0xff6c7086 $surface2 = 0xff585b70 $surface1 = 0xff45475a $surface0 = 0xff313244 $base = 0xff1e1e2e $mantle = 0xff181825 $crust = 0xff11111b ''; }