345 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			345 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| {
 | |
|   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;
 | |
|                   };
 | |
|                 };
 | |
|               };
 | |
|             };
 | |
|           };
 | |
|         };
 | |
|       };
 | |
|   };
 | |
| }
 |