{ theme, ... }: { home.file = { ".config/hypr/hyprland.conf" = { enable = true; text = '' layerrule = blur, waybar # Laptop specific: monitor=,highrr,auto,1.25 # https://wiki.hyprland.org/Configuring/Variables/ env = GDK_SCALE,1 env = XCURSOR_SIZE,22 # unscale XWayland xwayland { force_zero_scaling = true } # nVidia Speficic Settings: # https://wiki.hyprland.org/Nvidia/ # env = LIBVA_DRIVER_NAME,nvidia # env = XDG_SESSION_TYPE,wayland # env = GBM_BACKEND,nvidia-drm # env = __GLX_VENDOR_LIBRARY_NAME,nvidia env = WLR_NO_HARDWARE_CURSORS,1 general { gaps_in = 10 gaps_out = 20 border_size = 3 # First six are color, last 2 are opacity col.active_border = rgba(d5c4a1bb) # Gruvbox fg2, opacity bb col.inactive_border = rgba(504945dd) # Gruvbox bg2, opacity aa resize_on_border = true extend_border_grab_area = 15 layout = dwindle } input { kb_layout = us follow_mouse = 1 touchpad { natural_scroll = true disable_while_typing = true tap-to-click = true clickfinger_behavior = true drag_lock = true } sensitivity = 0 } gestures { # https://wiki.hyprland.org/0.24.1/Configuring/Keywords/#gestures workspace_swipe = true workspace_swipe_fingers = 3 workspace_swipe_numbered = false } misc { disable_hyprland_logo = true mouse_move_enables_dpms = true key_press_enables_dpms = true } decoration { rounding = 5 active_opacity = 0.9 inactive_opacity = 0.7 fullscreen_opacity = 0.9 drop_shadow = true shadow_range = 4 shadow_render_power = 3 col.shadow = rgba(1a1a1aee) blur { size = 8 passes = 3 ignore_opacity = true } } animations { # https://wiki.hyprland.org/Configuring/Animations/ enabled = true 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 } dwindle { # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more pseudotile = true # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below preserve_split = true # you probably want this no_gaps_when_only = 1 } master { # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more new_is_master = true } # See https://wiki.hyprland.org/Configuring/Keywords/ for more $mainMod = SUPER # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more bind = $mainMod, Q, exec, kitty bind = $mainMod, C, killactive, bind = $mainMod, M, exit, bind = $mainMod, V, togglefloating, bind = $mainMod, R, exec, wofi --show drun bind = $mainMod, P, pseudo, # dwindle bind = $mainMod, J, togglesplit, # dwindle # Move focus with mainMod + arrow keys # bind = $mainMod, left, movefocus, l # bind = $mainMod, right, movefocus, r # bind = $mainMod, up, movefocus, u # bind = $mainMod, down, movefocus, d # Switch workspaces with mainMod + [0-9] bind = $mainMod, 1, workspace, 1 bind = $mainMod, 2, workspace, 2 bind = $mainMod, 3, workspace, 3 bind = $mainMod, 4, workspace, 4 bind = $mainMod, 5, workspace, 5 bind = $mainMod, 6, workspace, 6 bind = $mainMod, 7, workspace, 7 bind = $mainMod, 8, workspace, 8 bind = $mainMod, 9, workspace, 9 bind = $mainMod, 0, workspace, 10 # Move active window to a workspace with mainMod + SHIFT + [0-9] bind = $mainMod SHIFT, 1, movetoworkspace, 1 bind = $mainMod SHIFT, 2, movetoworkspace, 2 bind = $mainMod SHIFT, 3, movetoworkspace, 3 bind = $mainMod SHIFT, 4, movetoworkspace, 4 bind = $mainMod SHIFT, 5, movetoworkspace, 5 bind = $mainMod SHIFT, 6, movetoworkspace, 6 bind = $mainMod SHIFT, 7, movetoworkspace, 7 bind = $mainMod SHIFT, 8, movetoworkspace, 8 bind = $mainMod SHIFT, 9, movetoworkspace, 9 bind = $mainMod SHIFT, 0, movetoworkspace, 10 # Scroll through existing workspaces with mainMod + scroll bind = $mainMod, mouse_down, workspace, e+1 bind = $mainMod, mouse_up, workspace, e-1 # Move/resize windows with mainMod + LMB/RMB and dragging bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:273, resizewindow ############################################################################# # Custom keybinds # Show Rofi on SUPER-SPACE bind = $mainMod, space, exec, rofi -show drun -show-icons # Take a screenshot with the Print key bind = , Print, exec, grim -g "$(slurp)" | wl-copy -t image/png # Move to the previous / next workspace with SUPER-LEFT and SUPER-RIGHT bind = $mainMod , right, workspace, e+1 bind = $mainMod , left , workspace, e-1 bind = $mainMod SHIFT, right, movetoworkspace, e+1 bind = $mainMod SHIFT, left , movetoworkspace, e-1 # Launch various applications bind = $mainMod, R, exec, ranger bind = $mainMod, S, exec, steam # Lock the screen, send to swaylock and pause music bind = $mainMod, L, exec, swaylock && playerctl pause # Lid closure: # trigger when the switch is toggled # bindl=,switch:[switch name],exec,swaylock # trigger when the switch is turning on bindl=,switch:on:1241ec0,exec,hyprctl keyword monitor "eDP-1, 2560x1600, 0x0, 1" # trigger when the switch is turning off bindl=,switch:off:1241ec0,exec,hyprctl keyword monitor "eDP-1, disable" # Laptop specific config # Set up the FN keys: # F1 - Mute # bind = , XF86AudioMute, exec, amixer set Master toggle && swayosd --output-volume=mute-toggle bind = , XF86AudioMute, exec, swayosd --output-volume=mute-toggle # F2 - Volume Down # binde = , XF86AudioLowerVolume, exec, amixer set Master 3%- binde = , XF86AudioLowerVolume, exec, swayosd --output-volume=lower # F3 - Volume Up # binde = , XF86AudioRaiseVolume, exec, amixer set Master 3%+ binde = , XF86AudioRaiseVolume, exec, swayosd --output-volume=raise # F4 - Mute Microphone # bind = , XF86AudioMicMute, exec, amixer set Capture toggle bind = , XF86AudioMicMute, exec, swayosd --input-volume=mute-toggle # F5 - Brightness Down # binde = , XF86MonBrightnessDown, exec, light -U 5 binde = , XF86MonBrightnessDown, exec, swayosd --brightness=lower # F6 - Brightness Up # binde = , XF86MonBrightnessUp, exec, light -A 5 binde = , XF86MonBrightnessUp, exec, swayosd --brightness=raise # F7 - External Displays # bind = , XF86 # F8 - Airplane Mode # bind = , XF86 # F9 - Notifications? # bind = , XF86 # F10 - Call Answer? # bind = , XF86 # F11 - Call Hang Up? # bind = , XF86 # F12 - Favorites? # bind = , XF86 # Use rofi as an alt-tab switcher # bind = ALT, TAB, exec, rofi -show window # Resize bind = $mainMod, R, exec, notify-send "Entered resize mode. Press ESC to quit." bind = $mainMod, R, submap, resize submap = resize binde = , H, resizeactive,-50 0 binde = , L, resizeactive,50 0 binde = , K, resizeactive,0 -50 binde = , J, resizeactive,0 50 binde = , left, resizeactive,-50 0 binde = , right, resizeactive,50 0 binde = , up, resizeactive,0 -50 binde = , down, resizeactive,0 50 bind = , escape, submap, reset submap = reset # Start the config: exec-once=bash ~/.config/hypr/start.sh >> ~/hypr.log ''; }; # Set the custom launcher script ".config/hypr/start.sh" = { enable = true; executable = true; text = '' #!/usr/bin/env bash # https://wiki.hyprland.org/FAQ/#some-of-my-apps-take-a-really-long-time-to-open dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP & # Set the wallpaper swww init & # Waybar waybar & # Set up the idle management daemon swayidle -w \ timeout 120 'swaylock -f && playerctl pause' \ timeout 180 'hyprctl dispatch dpms off' \ timeout 300 'systemctl suspend-then-hibernate' \ resume 'hyprctl dispatch dpms on' \ before-sleep 'swaylock -f' \ before-sleep 'playerctl pause' # Automatic device mounting udiskie & swww clear DIR=/etc/nixos/git/wallpapers/${theme} IMG=`ls $DIR | shuf -n 1` && swww img $DIR/$IMG -t random # Notification listener mako ''; }; }; }