# So best window tiling manager { pkgs, config, inputs, lib, ... }: let border-size = config.theme.border-size; gaps-in = config.theme.gaps-in; gaps-out = config.theme.gaps-out; active-opacity = config.theme.active-opacity; inactive-opacity = config.theme.inactive-opacity; rounding = config.theme.rounding; blur = config.theme.blur; keyboardLayout = config.var.keyboardLayout; background = "rgb(" + config.lib.stylix.colors.base00 + ")"; in { imports = [ ./animations.nix ./bindings.nix ./polkitagent.nix ./keyboard-backlight.nix # CHANGEME: This is for my laptop only # FIXME: Broken on unstable # ./hyprspace.nix ]; home.packages = with pkgs; [ qt5.qtwayland qt6.qtwayland libsForQt5.qt5ct qt6ct hyprshot hyprpicker swappy imv wf-recorder wlr-randr wl-clipboard brightnessctl gnome-themes-extra libva dconf wayland-utils wayland-protocols glib direnv meson ]; wayland.windowManager.hyprland = { enable = true; xwayland.enable = true; systemd = { enable = false; variables = [ "--all" ]; # https://wiki.hyprland.org/Nix/Hyprland-on-Home-Manager/#programs-dont-work-in-systemd-services-but-do-on-the-terminal }; package = null; portalPackage = null; settings = { "$mod" = "SUPER"; "$shiftMod" = "SUPER_SHIFT"; exec-once = [ "dbus-update-activation-environment --systemd --all &" "systemctl --user enable --now hyprpaper.service &" "systemctl --user enable --now hypridle.service &" "systemctl --user enable --now nextcloud-client.service &" ]; monitor = [ "eDP-2,highres,0x0,1" # My internal laptop screen "desc:AOC U34G2G1 0x00000E06,3440x1440@99.98,auto,1" # My external monitor "desc:United Microelectr Corporation UMC SHARP,3840x2160,auto,2" # TV ",prefered,auto,1" # default ]; env = [ "XDG_CURRENT_DESKTOP,Hyprland" "MOZ_ENABLE_WAYLAND,1" "ANKI_WAYLAND,1" "DISABLE_QT5_COMPAT,0" "NIXOS_OZONE_WL,1" "XDG_SESSION_TYPE,wayland" "XDG_SESSION_DESKTOP,Hyprland" "QT_AUTO_SCREEN_SCALE_FACTOR,1" "QT_QPA_PLATFORM=wayland,xcb" "QT_WAYLAND_DISABLE_WINDOWDECORATION,1" "ELECTRON_OZONE_PLATFORM_HINT,auto" "__GL_GSYNC_ALLOWED,0" "__GL_VRR_ALLOWED,0" "DISABLE_QT5_COMPAT,0" "DIRENV_LOG_FORMAT," "WLR_DRM_NO_ATOMIC,1" "WLR_BACKEND,vulkan" "WLR_RENDERER,vulkan" "WLR_NO_HARDWARE_CURSORS,1" "SDL_VIDEODRIVER,wayland" "CLUTTER_BACKEND,wayland" "AQ_DRM_DEVICES,/dev/dri/card2:/dev/dri/card1" # CHANGEME: Related to the GPU ]; cursor = { no_hardware_cursors = true; default_monitor = "eDP-2"; }; general = { resize_on_border = true; gaps_in = gaps-in; gaps_out = gaps-out; border_size = border-size; layout = "master"; "col.inactive_border" = lib.mkForce background; }; decoration = { active_opacity = active-opacity; inactive_opacity = inactive-opacity; rounding = rounding; shadow = { enabled = true; range = 20; render_power = 3; }; blur = { enabled = if blur then "true" else "false"; size = 18; }; }; master = { new_status = true; allow_small_split = true; mfact = 0.5; }; gestures = { workspace_swipe = true; }; misc = { vfr = true; disable_hyprland_logo = true; disable_splash_rendering = true; disable_autoreload = true; focus_on_activate = true; new_window_takes_over_fullscreen = 2; }; windowrulev2 = [ "float, tag:modal" "pin, tag:modal" "center, tag:modal" # telegram media viewer "float, title:^(Media viewer)$" # Bitwarden extension "float, title:^(.*Bitwarden Password Manager.*)$" # gnome calculator "float, class:^(org.gnome.Calculator)$" "size 360 490, class:^(org.gnome.Calculator)$" # make Firefox/Zen PiP window floating and sticky "float, title:^(Picture-in-Picture)$" "pin, title:^(Picture-in-Picture)$" # idle inhibit while watching videos "idleinhibit focus, class:^(mpv|.+exe|celluloid)$" "idleinhibit focus, class:^(zen)$, title:^(.*YouTube.*)$" "idleinhibit fullscreen, class:^(zen)$" "dimaround, class:^(gcr-prompter)$" "dimaround, class:^(xdg-desktop-portal-gtk)$" "dimaround, class:^(polkit-gnome-authentication-agent-1)$" "dimaround, class:^(zen)$, title:^(File Upload)$" # fix xwayland apps "rounding 0, xwayland:1" "center, class:^(.*jetbrains.*)$, title:^(Confirm Exit|Open Project|win424|win201|splash)$" "size 640 400, class:^(.*jetbrains.*)$, title:^(splash)$" ]; layerrule = [ "noanim, launcher" "noanim, ^ags-.*" ]; input = { kb_layout = keyboardLayout; kb_options = "caps:escape"; follow_mouse = 1; sensitivity = 0.5; repeat_delay = 300; repeat_rate = 50; numlock_by_default = true; touchpad = { natural_scroll = true; clickfinger_behavior = true; }; }; }; }; }