{ flake.modules = { nixos.hyprland = { config, inputs, pkgs, ... }: let hyprland-package = inputs.hyprland.packages.${pkgs.system}.hyprland; focus-1password = pkgs.writeShellScriptBin "focus-or-open-1pass" '' running=$(hyprctl -j clients | jq -r '.[] | select(.class == "1password") | .workspace.id') if [[ $running != "" ]]; then hyprctl dispatch workspace $running else # always open on w/space 4 hyprctl dispatch workspace 9 ELECTRON_OZONE_PLATFORM_HINT=x11 1password& fi ''; in { environment.systemPackages = with pkgs; [ # Auth Agent hyprpolkitagent # Notification daemon libnotify # Wayland Utilities wlr-randr # Clipboard Stuff wl-clipboard xclip clipnotify # clipsync # Screenshot Utility grimblast # File Manager xfce.thunar # clean sddm theme elegant-sddm # json cli parser for bash script to focus 1password jq hyprpanel ##### xdg-dbus-proxy ] ++ lib.optional config.programs._1password.enable focus-1password; programs = { hyprland = { enable = true; package = hyprland-package; portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland; withUWSM = true; }; }; xdg = { autostart.enable = true; portal = { enable = true; extraPortals = [ pkgs.xdg-desktop-portal pkgs.xdg-desktop-portal-gtk ]; xdgOpenUsePortal = true; config = { common = { default = [ "*" ]; "org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ]; }; hyprland = { default = [ "hyprland" "gtk" ]; "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; "org.freedesktop.impl.portal.OpenURI" = [ "gtk" ]; }; }; }; }; security.pam.services.gdm.enableGnomeKeyring = true; services.displayManager.gdm = { enable = true; wayland = true; }; environment.sessionVariables = { NIXOS_OZONE_WL = "1"; # Hint electron apps to use wayland ELECTRON_OZONE_PLATFORM_HINT = "auto"; XDG_SESSION_TYPE = "wayland"; QT_AUTO_SCREEN_SCALE_FACTOR = "1"; QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; QT_QPA_PLATFORM = "wayland;xcb"; }; }; homeManager.cholli = { inputs, lib, pkgs, osConfig, ... }: let hyprland-package = inputs.hyprland.packages.${pkgs.system}.hyprland; in { config = lib.mkIf osConfig.programs.hyprland.enable { wayland.windowManager.hyprland = { enable = true; package = hyprland-package; plugins = [ inputs.hy3.packages.${pkgs.system}.hy3 ]; systemd.variables = [ "--all" ]; settings = { "$mod" = "SUPER"; exec-once = [ "systemctl --user start hyprpolkitagent" "[workspace 1 silent] zen-beta" "[workspace 2 silent] steam" "[workspace 7 silent] obsidian" "[workspace 8 silent] discord" "[workspace 9 silent] ELECTRON_OZONE_PLATFORM_HINT=x11 1password" # fix for promts not showing up anymore "${pkgs.xorg.xhost}/bin/xhost +" "${lib.getExe pkgs.xorg.xrandr} --output DP-1 --primary" ]; windowrulev2 = [ #steam is a bit wierd, since it opens in multiple phases, so just move the last window to the workspace "workspace 2 silent, class:^(steam)$, title:^(Steam)" "workspace 7 silent, class:^(com.obsproject.Studio)$" "workspace 8 silent, class:^(steam)$, title:^(Friends List)" "workspace 8 silent, class:^(discord)$, title:^(Discord)" ]; monitor = lib.mkIf (osConfig.networking.hostName == "yggdrasil") [ #Ultrawide "DP-1,3440x1440@144, 0x0, 1" #Vertical "HDMI-A-1, 1920x1080@144, auto-right, 1, transform, 1" ]; workspace = lib.mkIf (osConfig.networking.hostName == "yggdrasil") [ "1, monitor:DP-1" "2, monitor:DP-1" "3, monitor:DP-1" "4, monitor:DP-1" "5, monitor:DP-1" "6, monitor:DP-1" "7, monitor:HDMI-A-1" "8, monitor:HDMI-A-1" "9, monitor:HDMI-A-1" ]; general = { layout = "hy3"; gaps_in = 5; gaps_out = 5; border_size = 1; "col.active_border" = "rgba(88888888)"; "col.inactive_border" = "rgba(00000088)"; allow_tearing = true; resize_on_border = true; }; misc = { # hyprchan force_default_wallpaper = 2; # focus new windows that want to be focused focus_on_activate = true; }; decoration = { rounding = 16; blur = { enabled = true; brightness = 1.0; contrast = 1.0; noise = 1.0e-2; vibrancy = 0.2; vibrancy_darkness = 0.5; passes = 4; size = 7; popups = true; popups_ignorealpha = 0.2; }; shadow = { enabled = true; range = 100; render_power = 2; ignore_window = true; color = "rgba(00000055)"; offset = "0 15"; scale = 0.97; }; }; animations = { enabled = true; animation = [ "border, 1, 2, default" "fade, 1, 4, default" "windows, 1, 3, default, popin 80%" "workspaces, 1, 2, default, slide" ]; }; bind = [ # compositor commands "$mod SHIFT, R, exec, hyprctl reload" "$mod SHIFT, Q, killactive," "$mod SHIFT, E, exec, pkill Hyprland" "$mod CTRL, l, exec, hyprlock-blur" "$mod, F, fullscreen," "$mod, G, togglegroup," "$mod SHIFT, N, changegroupactive, f" "$mod SHIFT, P, changegroupactive, b" "$mod, R, togglesplit," "$mod, T, togglefloating," "$mod ALT, ,resizeactive," "$mod CTRL, left, movecurrentworkspacetomonitor, l" "$mod CTRL, right, movecurrentworkspacetomonitor, r" # move focus "$mod, h, movefocus, l" "$mod, j, movefocus, d" "$mod, k, movefocus, u" "$mod, l, movefocus, r" "$mod, left, movefocus, l" "$mod, down, movefocus, d" "$mod, up, movefocus, u" "$mod, right, movefocus, r" # move focus "$mod SHIFT, h, movewindow, l, once" "$mod SHIFT, j, movewindow, d, once" "$mod SHIFT, k, movewindow, u, once" "$mod SHIFT, l, movewindow, r, once" "$mod SHIFT, left, movewindow, l, once" "$mod SHIFT, down, movewindow, d, once" "$mod SHIFT, up, movewindow, u, once" "$mod SHIFT, right, movewindow, r, once" #run important programs "$mod, Return, exec, kitty" "$mod, D, exec, fuzzel" "$mod, P, exec, focus-or-open-1pass" # "$mod, D, exec, rofi -show combi" #screenshot ", Print, exec, grimblast copy area" ] ++ ( # workspaces # binds $mod + [shift +] {1..9} to [move to] workspace {1..9} builtins.concatLists ( builtins.genList ( i: let ws = i + 1; in [ "$mod, code:1${toString i}, workspace, ${toString ws}" "$mod SHIFT, code:1${toString i}, movetoworkspace, ${toString ws}" ] ) 9 ) ); # mouse movements bindm = [ "$mod, mouse:272, movewindow" "$mod, mouse:273, resizewindow" "$mod ALT, mouse:272, resizewindow" ]; bindl = [ # volume ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" ]; bindle = [ # volume ", XF86AudioRaiseVolume, exec, wpctl set-volume -l '1.0' @DEFAULT_AUDIO_SINK@ 6%+" ", XF86AudioLowerVolume, exec, wpctl set-volume -l '1.0' @DEFAULT_AUDIO_SINK@ 6%-" ]; input = { kb_layout = "us"; # focus change on cursor move follow_mouse = 2; force_no_accel = 1; accel_profile = "flat"; }; plugin = { hy3 = { autotile = { enable = true; trigger_width = 800; trigger_height = 500; }; }; }; }; }; }; }; }; }