From 0c8fa3a2a270747f3dbb54fe8792f3f0aec997e3 Mon Sep 17 00:00:00 2001 From: Ryan Schanzenbacher Date: Mon, 3 Aug 2026 01:22:44 -0400 Subject: Initial commit: combined darwin + guix-linux home-manager flake Supersedes nix-dotfiles (darwin) and guix-dotfiles' ad-hoc nix-home-manager flake (linux). See README.md/MIGRATION.md. --- users/ryan/linux/hypr/hyprland.conf | 336 ++++++++++++++++++++++++++++++++++++ 1 file changed, 336 insertions(+) create mode 100644 users/ryan/linux/hypr/hyprland.conf (limited to 'users/ryan/linux/hypr/hyprland.conf') diff --git a/users/ryan/linux/hypr/hyprland.conf b/users/ryan/linux/hypr/hyprland.conf new file mode 100644 index 0000000..e51b54c --- /dev/null +++ b/users/ryan/linux/hypr/hyprland.conf @@ -0,0 +1,336 @@ +exec-once = dbus-update-activation-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP=Hyprland + +# +# Please note not all available settings / options are set here. +# For a full list, see the wiki +# + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=,preferred,auto,1 + +# Cursor theme is set via home.pointerCursor in linux.nix (pkgs.bibata-cursors, +# theme "Bibata-Modern-Classic"). The old vendored theme used +# hyprcursor/daed9-versioned names that only existed in the manually-packaged +# asset; nixpkgs' build uses the plain name below for both HYPRCURSOR_THEME +# and XCURSOR_THEME. +env = HYPRCURSOR_THEME,Bibata-Modern-Classic +env = HYPRCURSOR_SIZE,24 +env = XCURSOR_THEME,Bibata-Modern-Classic +env = XCURSOR_SIZE,24 + +env = AQ_NO_MODIFIERS,1 + +render { + expand_undersized_textures = false +} + +ecosystem { + no_update_news = true +} + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# Execute your favorite apps at launch +# exec-once = waybar & hyprpaper & firefox + +# Source a file (multi-file configs) +source = ~/.config/hypr/monitors.conf + +# Some default env vars. +env = XCURSOR_SIZE,24 + +debug { + disable_logs = false + enable_stdout_logs = true +} + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + numlock_by_default = true + + follow_mouse = 1 + + touchpad { + natural_scroll = no + middle_button_emulation = true + clickfinger_behavior = true + } + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out = 10 + border_size = 2 + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + layout = dwindle +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 5 + blur { + enabled = yes + size = 3 + passes = 1 + new_optimizations = on + } + + shadow { + enabled = true + range = 4 + render_power = 3 + color = rgba(1a1a1aee) + } +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + 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 = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +#master { +# # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more +# new_is_master = true +#} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more +device { + name = epic-mouse-v1 + sensitivity = -0.5 +} + +# Example windowrule v1 +# windowrule = float, ^(kitty)$ +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, Return, exec, foot +bind = $mainMod CTRL, Return, exec, foot -a float-foot +bind = $mainMod SHIFT, Q, killactive +bind = $mainMod SHIFT, E, exit +bind = $mainMod SHIFT, Space, togglefloating +bind = $mainMod SHIFT, Return, pin, active +bind = $mainMod, D, exec, fuzzel --width=35 --font='Hack:weight=bold:size=12' --background-color='282a36fa' --selection-color='3d4460fa' --line-height=20 --border-radius=20 +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle +bind = $mainMod, F, fullscreen, 1 +bind = $mainMod SHIFT, F, fullscreen +bind = ,XF86MonBrightnessUp, exec, light -A 10 +bind = ,XF86MonBrightnessDown, exec, light -U 10 +bind = ,XF86AudioRaiseVolume, exec, pamixer -i 5 +bind = ,XF86AudioLowerVolume, exec, pamixer -d 5 +bind = ,XF86AudioMute, exec, pamixer -t +bind = ,XF86AudioPlay, exec, playerctl play-pause +bind = ,XF86AudioPause, exec, playerctl play-pause +bind = ,XF86AudioNext, exec, playerctl next +bind = ,XF86AudioPrev, exec, playerctl previous +bind = ,XF86AudioStop, exec, playerctl stop + +# "Auto-connect headphones" +bind = $mainMod, H, exec, bluetoothctl connect AC:80:0A:1C:D6:C7 + +# Move workspace between monitors +bind = $mainMod CTRL SHIFT, left, movecurrentworkspacetomonitor, l +bind = $mainMod CTRL SHIFT, right, movecurrentworkspacetomonitor, r +bind = $mainMod CTRL SHIFT, up, movecurrentworkspacetomonitor, u +bind = $mainMod CTRL SHIFT, down, movecurrentworkspacetomonitor, d + +# 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 + +# Move window with mainMod + SHIFT + arrow keys +bind = $mainMod SHIFT, left, movewindow, l +bind = $mainMod SHIFT, right, movewindow, r +bind = $mainMod SHIFT, up, movewindow, u +bind = $mainMod SHIFT, down, movewindow, 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 + +# Bind mainMod + L to screenlocker +bind = $mainMod, L, exec, hyprlock +bind = $mainMod SHIFT, L, exec, loginctl suspend + +# Keybind to toggle "performance mode" (toggles GPU intensive things) +bind = $mainMod, F1, exec, ~/.config/hypr/scripts/perf_mode.sh + +bind = $mainMod SHIFT, Z, exec, pypr zoom + +# Keybind for screenshot (satty) +bind = $mainMod SHIFT, S, exec, grimblast save output - | satty --fullscreen --copy-command 'wl-copy' --filename - +bind = $mainMod, S, exec, grimblast copy area +bind = $mainMod, Print, exec, export TEMP=$(mktemp) && grimblast copy area && wl-paste > $TEMP && imv $TEMP && rm $TEMP + +# Keybind for screenshot (old) +# bind = $mainMod SHIFT, S, exec, grimblast copy area +# bind = $mainMod SHIFT, Print, exec, grimblast edit area +# bind = $mainMod, S, exec, imv <(grimblast save area -) + +# Keybind for screenshot (flameshot) +#bind = $mainMod SHIFT, S, exec, flameshot gui --raw | wl-copy +#bind = $mainMod SHIFT CTRL, S, exec, flameshot gui --raw -d $(( 1000 * $(fuzzel -l0 --dmenu -p"Delay> ") )) | wl-copy +#bind = $mainMod, S, exec, flameshot gui + +# Notifications keybinds +bind = $mainMod, N, exec, makoctl dismiss +bind = $mainMod SHIFT, N, exec, makoctl dismiss -a + +# Color picker +bind = $mainMod SHIFT, C, exec, hyprpicker -a + +# LinkedIn Joke (very serious) +bind = $mainMod SHIFT CTRL ALT, L, exec, xdg-open https://linkedin.com + +# Window Rules + +# Firefox PiP +windowrulev2 = float, class:^(zen-beta)$, title:^(Picture-in-Picture)$ +windowrulev2 = pin, class:^(zen-beta)$, title:^(Picture-in-Picture)$ +windowrulev2 = size 22% 22%, class:^(zen-beta)$, title:^(Picture-in-Picture)$ +windowrulev2 = move 76% 8%, class:^(zen-beta)$, title:^(Picture-in-Picture)$ + +# Firefox Sharing Indicator +windowrulev2 = float, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$ +windowrulev2 = size 56 31, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$ +windowrulev2 = move 50% 0, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$ +windowrulev2 = suppressevent fullscreen maximize, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$ + +# Weather +windowrulev2 = float,class:^(ala-wttr)$ +windowrulev2 = size 822 1026, class:^(ala-wttr)$ + +# Floating terminal +windowrulev2 = float,class:^(float-foot)$ +windowrulev2 = size 930 680,class:^(float-foot)$ +windowrulev2 = center,class:^(float-foot)$ + +# Change color of pinned windows +windowrulev2 = bordercolor rgba(bf0000ee) rgba(ab00adee) 45deg,pinned:1 + +# Fun Keybinds +# Subway surfer +bind = $mainMod CTRL SHIFT, S, exec, mpv ~/.config/hypr/subwaysurfer.webm +windowrulev2 = float,class:^(mpv)$, title:^(subwaysurfer.webm - mpv)$ +windowrulev2 = size 310 554,class:^(mpv)$, title:^(subwaysurfer.webm - mpv)$ +windowrulev2 = move 81% 46% ,class:^(mpv)$, title:^(subwaysurfer.webm - mpv)$ +windowrulev2 = pin,class:^(mpv)$, title:^(subwaysurfer.webm - mpv)$ + +# Family guy funny moments +bind = $mainMod CTRL SHIFT, F, exec, mpv ~/.config/hypr/family_guy.mp4 +windowrulev2 = float,class:^(mpv)$, title:^(family_guy.mp4 - mpv)$ +windowrulev2 = size 595 336,class:^(mpv)$, title:^(family_guy.mp4 - mpv)$ +windowrulev2 = move 67% 5% ,class:^(mpv)$, title:^(family_guy.mp4 - mpv)$ +windowrulev2 = pin,class:^(mpv)$, title:^(family_guy.mp4 - mpv)$ + +# Satty windowrules +windowrulev2 = fullscreen,class:^(com.gabm.satty)$ + +exec-once = ~/.config/hypr/scripts/autostart.sh + +misc { + disable_hyprland_logo = true + force_default_wallpaper = 0 +} + +# Cursors! +plugin:dynamic-cursors { + enabled = true + mode = tilt + threshold = 2 + tilt { + limit = 5000 + function = negative_quadratic + } + + shake { + enabled = true + nearest = true + threshold = 6.0 + base = 4.0 + speed = 4.0 + influence = 0.0 + + limit = 0.0 + + timeout = 2000 + + effects = true + + ipc = false + } + + hyprcursor { + nearest = true + enabled = true + resolution = -1 + fallback = clientside + } +} -- cgit v1.3.1