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/family_guy.mp4 | Bin 0 -> 20881473 bytes users/ryan/linux/hypr/hypridle.conf | 16 ++ users/ryan/linux/hypr/hyprland.conf | 336 +++++++++++++++++++++++++++++ users/ryan/linux/hypr/hyprlock.conf | 57 +++++ users/ryan/linux/hypr/kanshi.conf | 22 ++ users/ryan/linux/hypr/monitors.conf | 2 + users/ryan/linux/hypr/pyprland.toml | 5 + users/ryan/linux/hypr/scripts/autostart.sh | 40 ++++ users/ryan/linux/hypr/scripts/perf_mode.sh | 14 ++ users/ryan/linux/hypr/subwaysurfer.webm | Bin 0 -> 77979199 bytes 10 files changed, 492 insertions(+) create mode 100644 users/ryan/linux/hypr/family_guy.mp4 create mode 100644 users/ryan/linux/hypr/hypridle.conf create mode 100644 users/ryan/linux/hypr/hyprland.conf create mode 100644 users/ryan/linux/hypr/hyprlock.conf create mode 100644 users/ryan/linux/hypr/kanshi.conf create mode 100644 users/ryan/linux/hypr/monitors.conf create mode 100644 users/ryan/linux/hypr/pyprland.toml create mode 100755 users/ryan/linux/hypr/scripts/autostart.sh create mode 100755 users/ryan/linux/hypr/scripts/perf_mode.sh create mode 100644 users/ryan/linux/hypr/subwaysurfer.webm (limited to 'users/ryan/linux/hypr') diff --git a/users/ryan/linux/hypr/family_guy.mp4 b/users/ryan/linux/hypr/family_guy.mp4 new file mode 100644 index 0000000..077fe49 Binary files /dev/null and b/users/ryan/linux/hypr/family_guy.mp4 differ diff --git a/users/ryan/linux/hypr/hypridle.conf b/users/ryan/linux/hypr/hypridle.conf new file mode 100644 index 0000000..72688da --- /dev/null +++ b/users/ryan/linux/hypr/hypridle.conf @@ -0,0 +1,16 @@ +general { + lock_cmd = pidof hyprlock || hyprlock + before_sleep_cmd = loginctl lock-session + after_sleep_cmd = hyprctl dispatch dpms on +} + +listener { + timeout = 300 + on-timeout = loginctl lock-session +} + +listener { + timeout = 600 + on-timeout = hyprctl dispatch dpms off + on-resume = hyprctl dispatch dpms on +} 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 + } +} diff --git a/users/ryan/linux/hypr/hyprlock.conf b/users/ryan/linux/hypr/hyprlock.conf new file mode 100644 index 0000000..5c63fad --- /dev/null +++ b/users/ryan/linux/hypr/hyprlock.conf @@ -0,0 +1,57 @@ +background { + monitor = + #path = /home/ryan/.config/hypr/Wallpapers/static/autumn1.png + path = screenshot + + # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations + blur_passes = 2 # 0 disables blurring + blur_size = 7 + noise = 0.2 + contrast = 0.8916 + brightness = 0.8172 + vibrancy = 0.1696 + vibrancy_darkness = 0.0 +} + +input-field { + monitor = + size = 200, 50 + outline_thickness = 3 + dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = false + dots_rounding = -1 # -1 default circle, -2 follow input-field rounding + outer_color = rgb(151515) + inner_color = rgb(200, 200, 200) + font_color = rgb(10, 10, 10) + fade_on_empty = true + fade_timeout = 1000 # Milliseconds before fade_on_empty is triggered. + placeholder_text = Input Password... # Text rendered in the input box when it's empty. + hide_input = false + rounding = -1 # -1 means complete rounding (circle/oval) + check_color = rgb(204, 136, 34) + fail_color = rgb(204, 34, 34) # if authentication failed, changes outer_color and fail message color + fail_text = $FAIL ($ATTEMPTS) # can be set to empty + fail_timeout = 2000 # milliseconds before fail_text and fail_color disappears + fail_transition = 300 # transition time in ms between normal outer_color and fail_color + capslock_color = -1 + numlock_color = -1 + bothlock_color = -1 # when both locks are active. -1 means don't change outer color (same for above) + invert_numlock = false # change color if numlock is off + swap_font_color = false # see below + + position = 0, -20 + halign = center + valign = center +} + +label { + monitor = + text = cmd[update:1000] echo "$(date +"%-H:%M:%S")" + #color = rgba(255, 255, 255, 0.6) + font_size = 80 + position = 0, 300 + halign = center + valign = center + font_family = Lilex Nerd Font +} diff --git a/users/ryan/linux/hypr/kanshi.conf b/users/ryan/linux/hypr/kanshi.conf new file mode 100644 index 0000000..52c3c0f --- /dev/null +++ b/users/ryan/linux/hypr/kanshi.conf @@ -0,0 +1,22 @@ +profile { + output "AU Optronics 0x103D Unknown" enable +} + +profile emilydesk { + output "AU Optronics 0x103D Unknown" disable + output "Dell Inc. DELL U2422H JN4SF83" position 0,0 mode 1920x1080 + output "Dell Inc. DELL U2414H R9F1P5C59WDL" position 1920,0 mode 1920x1080 + output "Dell Inc. DELL U2422H 5S9SF83" position 3840,0 mode 1920x1080 +} + +profile justindesk { + output "AU Optronics 0x103D Unknown" position 0,0 mode 1920x1080 + output "Dell Inc. DELL U2417H XVNNT7CDC80L" position 1920,0 mode 1920x1080 + output "Dell Inc. DELL U2417H XVNNT82M978L" position 3840,0 mode 1920x1080 +} + +profile homedesk { + output "AU Optronics 0x103D Unknown" disable + output "Samsung Electric Company C27F390 H1AK500000" position 0,0 mode 1920x1080 + output "Samsung Electric Company S22R35x H4TNA01683" position 1920,0 mode 1920x1080 +} diff --git a/users/ryan/linux/hypr/monitors.conf b/users/ryan/linux/hypr/monitors.conf new file mode 100644 index 0000000..7b3b503 --- /dev/null +++ b/users/ryan/linux/hypr/monitors.conf @@ -0,0 +1,2 @@ +monitor=eDP-1,1920x1080, 0x0, 1 +monitor=HDMI-A-1,1920x1080, 1920x0, 1 diff --git a/users/ryan/linux/hypr/pyprland.toml b/users/ryan/linux/hypr/pyprland.toml new file mode 100644 index 0000000..cd081fe --- /dev/null +++ b/users/ryan/linux/hypr/pyprland.toml @@ -0,0 +1,5 @@ +[pyprland] +plugins = ["magnify"] + +[magnify] +factor = 2.5 diff --git a/users/ryan/linux/hypr/scripts/autostart.sh b/users/ryan/linux/hypr/scripts/autostart.sh new file mode 100755 index 0000000..706f82f --- /dev/null +++ b/users/ryan/linux/hypr/scripts/autostart.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +waybar & + +mako & + +#swaybg -i ~/.config/hypr/Wallpapers/above-clouds.jpg & + +nice -n13 swww init & + +#~/.config/hypr/wallpaper-daemon.sh & +wpaperd -d & + +pypr & + +#swayidle -w timeout 300 'swaylock --screenshots --clock --indicator --grace 3 --fade-in 1 --effect-blur 7x5 --effect-greyscale' timeout 600 'hyprctl dispatch dpms off' resume 'hyprctl dispatch dpms on' before-sleep 'swaylock -f -c 000000' & + +hypridle & + +syncthing serve --no-browser & + +# Kill any orphans of this +killall wl-clip-persist +wl-clip-persist -c regular --reconnect-tries 5 & + +kanshi -c ~/.config/hypr/kanshi.conf & + +# Start the portals + +sleep 0.5 +killall -e xdg-desktop-portal-hyprland +killall xdg-desktop-portal-gtk +killall xdk-desktop-portal + +~/.nix-profile/libexec/xdg-desktop-portal-hyprland & +~/.nix-profile/libexec/xdg-desktop-portal-gtk & +sleep 2 +XDG_DESKTOP_PORTAL_DIR="/home/ryan/.nix-profile/share/xdg-desktop-portal/portals" ~/.nix-profile/libexec/xdg-desktop-portal & + +#flameshot & diff --git a/users/ryan/linux/hypr/scripts/perf_mode.sh b/users/ryan/linux/hypr/scripts/perf_mode.sh new file mode 100755 index 0000000..c195688 --- /dev/null +++ b/users/ryan/linux/hypr/scripts/perf_mode.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}') +if [ "$HYPRGAMEMODE" = 1 ] ; then + hyprctl --batch "\ + keyword animations:enabled 0;\ + keyword decoration:drop_shadow 0;\ + keyword decoration:blur:enabled 0;\ + keyword general:gaps_in 0;\ + keyword general:gaps_out 0;\ + keyword general:border_size 1;\ + keyword decoration:rounding 0" + exit +fi +hyprctl reload diff --git a/users/ryan/linux/hypr/subwaysurfer.webm b/users/ryan/linux/hypr/subwaysurfer.webm new file mode 100644 index 0000000..594e1c0 Binary files /dev/null and b/users/ryan/linux/hypr/subwaysurfer.webm differ -- cgit v1.3.1