Wi-Fi kept failing with "Secrets were required, but not provided". NM ran on top of iwd while impala (SUPER+W) drove iwd directly, so two managers held separate saved networks; iwd couldn't load its own .psk files, asked NM for the passphrase, and NM had no secret agent to answer. impala is iwd-only, so NM goes instead: iwd owns Wi-Fi, networkd does DHCP and resolved does DNS, on both hosts. eduroam's iwd profile is seeded once via tmpfiles (C, so a password added later is never overwritten). On mbp, resolved's mDNS is off because avahi owns .local. On pc the GigE camera link (enp7s0) is now declared: static 192.168.12.1/24, no RAs, not required for online. It used to take AAU's IPv6 RAs on that segment, which made v6 default out a dead-end port and every v6-first connection stall until fallback. Drop the virtual-desktops plugin: SUPER+N now switches only the monitor that workspace lives on, as in AeroSpace. SUPER+SHIFT+N sends the window without following, SUPER+Tab goes back, SUPER+ALT/SHIFT+Tab sends the workspace to the next monitor. pc's three screens get workspaces 1-3 as their homes again. New windows no longer open maximized: kitty 0.49 requests maximize ~250ms after mapping, so suppress app maximize requests (SUPER+F still works). Also bumps zen-browser. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
176 lines
5.8 KiB
Text
176 lines
5.8 KiB
Text
# -- Monitors & input defaults --
|
|
# Monitor layout is host-specific; written by the flake per host.
|
|
source = ~/.config/hypr/monitors.conf
|
|
|
|
device {
|
|
name = apple-spi-keyboard
|
|
kb_options = caps:ctrl_modifier,grp:win_space_toggle
|
|
}
|
|
|
|
# TrackPoint (Corne nipple): hold middle button + move to scroll, joystick-style
|
|
device {
|
|
name = corne-tp
|
|
scroll_method = on_button_down
|
|
scroll_button = 274 # BTN_MIDDLE
|
|
scroll_button_lock = false # set true to toggle scroll on/off with a tap instead of holding
|
|
}
|
|
|
|
input {
|
|
kb_layout = us,dk
|
|
kb_options = grp:win_space_toggle
|
|
follow_mouse = 1
|
|
repeat_rate = 50
|
|
repeat_delay = 300
|
|
accel_profile = custom
|
|
scroll_points = 0.5 1.0 1.5 2.0 2.5
|
|
touchpad {
|
|
natural_scroll = true
|
|
scroll_factor = 0.9
|
|
tap-to-click = false
|
|
clickfinger_behavior = true # 2-finger click = right-click, 3-finger = middle (Mac-like)
|
|
disable_while_typing = true
|
|
}
|
|
}
|
|
|
|
general {
|
|
gaps_in = 0
|
|
gaps_out = 0
|
|
border_size = 0
|
|
layout = dwindle
|
|
}
|
|
|
|
animations {
|
|
enabled = false
|
|
}
|
|
|
|
dwindle {
|
|
preserve_split = true
|
|
force_split = 2
|
|
}
|
|
|
|
# Apps don't get to maximize themselves: kitty (0.49) asks ~250ms after it
|
|
# maps, so every new terminal opened maximized. SUPER+F still works.
|
|
windowrule = match:class .*, suppress_event maximize
|
|
|
|
misc {
|
|
disable_hyprland_logo = true
|
|
disable_splash_rendering = true
|
|
focus_on_activate = true
|
|
}
|
|
|
|
ecosystem {
|
|
no_update_news = true
|
|
no_donation_nag = true
|
|
}
|
|
|
|
# -- Environment --
|
|
env = QT_QPA_PLATFORMTHEME,qt6ct
|
|
env = QT_STYLE_OVERRIDE,Adwaita-Dark
|
|
env = XDG_SCREENSHOTS_DIR,$HOME/Pictures/Screenshots
|
|
# hyprshot ignores XDG_SCREENSHOTS_DIR: it reads HYPRSHOT_DIR, else XDG_PICTURES_DIR,
|
|
# else $HOME. Without this, screenshots land loose in ~/Pictures.
|
|
env = HYPRSHOT_DIR,$HOME/Pictures/Screenshots
|
|
|
|
# -- Autostart --
|
|
exec-once = uwsm finalize
|
|
# Boot lands on the lock screen rather than an unlocked desktop. Unlocking it
|
|
# also unlocks the keyring (see security.pam.services.hyprlock in flake.nix).
|
|
exec-once = hyprlock
|
|
exec-once = swaybg -c '#16181a'
|
|
exec-once = GDK_BACKEND=wayland eww daemon
|
|
exec-once = systemctl --user start hyprpolkitagent
|
|
|
|
# -- Core --
|
|
bind = SUPER, Return, exec, kitty
|
|
bind = SUPER, D, exec, fuzzel
|
|
bind = SUPER, R, exec, eww open battery-popup
|
|
bindr = SUPER, R, exec, eww close battery-popup
|
|
bind = SUPER, Q, killactive
|
|
bind = SUPER, F, fullscreen, 1
|
|
bind = SUPER SHIFT, Space, togglefloating
|
|
bind = SUPER, Escape, exec, hyprlock
|
|
|
|
# Amphetamine-style stay-awake toggle: idle + sleep + lid. See flake.nix.
|
|
bind = SUPER, A, exec, caffeine
|
|
|
|
# -- Floating panels --
|
|
# Each gets its own app_id so the rule below floats only these and not every
|
|
# terminal. Quit with the TUI's own `q`; no toggle wrapper.
|
|
#
|
|
# The float/size rule is in monitors.conf, generated per host: Hyprland 0.56
|
|
# `size` takes ONLY absolute pixels -- percentages are silently ignored (they
|
|
# parse fine and then do nothing), so the value depends on the resolution.
|
|
bind = SUPER, W, exec, kitty --class panel-wifi impala
|
|
bind = SUPER, E, exec, kitty --class panel-bt bluetui
|
|
|
|
|
|
# -- Focus --
|
|
bind = SUPER, h, movefocus, l
|
|
bind = SUPER, j, movefocus, d
|
|
bind = SUPER, k, movefocus, u
|
|
bind = SUPER, l, movefocus, r
|
|
|
|
# -- Move windows --
|
|
bind = SUPER SHIFT, h, movewindow, l
|
|
bind = SUPER SHIFT, j, movewindow, d
|
|
bind = SUPER SHIFT, k, movewindow, u
|
|
bind = SUPER SHIFT, l, movewindow, r
|
|
|
|
# -- Workspaces (AeroSpace-style) --
|
|
# Each workspace lives on one monitor. SUPER+N shows N on its monitor and
|
|
# focuses it, leaving the other screens alone; a new workspace opens on the
|
|
# focused monitor. SUPER+ALT+h/l carries a workspace to another monitor.
|
|
bind = SUPER, 1, workspace, 1
|
|
bind = SUPER, 2, workspace, 2
|
|
bind = SUPER, 3, workspace, 3
|
|
bind = SUPER, 4, workspace, 4
|
|
bind = SUPER, 5, workspace, 5
|
|
|
|
# Send the window without following it, like AeroSpace's move-node-to-workspace.
|
|
bind = SUPER SHIFT, 1, movetoworkspacesilent, 1
|
|
bind = SUPER SHIFT, 2, movetoworkspacesilent, 2
|
|
bind = SUPER SHIFT, 3, movetoworkspacesilent, 3
|
|
bind = SUPER SHIFT, 4, movetoworkspacesilent, 4
|
|
bind = SUPER SHIFT, 5, movetoworkspacesilent, 5
|
|
|
|
# AeroSpace's alt-tab / alt-shift-tab: previous workspace, and send the
|
|
# current workspace to the next monitor (+1 wraps past the last one).
|
|
bind = SUPER, Tab, workspace, previous
|
|
bind = SUPER SHIFT, Tab, movecurrentworkspacetomonitor, +1
|
|
bind = SUPER ALT, Tab, movecurrentworkspacetomonitor, +1
|
|
|
|
# -- Move current workspace to another monitor --
|
|
bind = SUPER ALT, h, movecurrentworkspacetomonitor, l
|
|
bind = SUPER ALT, l, movecurrentworkspacetomonitor, r
|
|
|
|
# -- Resize (hold for repeat) --
|
|
binde = SUPER CTRL, h, resizeactive, -40 0
|
|
binde = SUPER CTRL, j, resizeactive, 0 40
|
|
binde = SUPER CTRL, k, resizeactive, 0 -40
|
|
binde = SUPER CTRL, l, resizeactive, 40 0
|
|
|
|
# -- Mouse --
|
|
bindm = SUPER, mouse:272, movewindow
|
|
bindm = SUPER, mouse:273, resizewindow
|
|
|
|
# -- Audio (bindel: locked + repeat; bindl: locked, no repeat) --
|
|
bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+
|
|
bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
|
bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
|
bindl = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
|
|
|
# -- Brightness --
|
|
bindel = , XF86MonBrightnessUp, exec, brightnessctl set 5%+
|
|
bindel = , XF86MonBrightnessDown, exec, brightnessctl set 5%-
|
|
|
|
# -- Media --
|
|
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
|
bindl = , XF86AudioNext, exec, playerctl next
|
|
bindl = , XF86AudioPrev, exec, playerctl previous
|
|
|
|
# -- Screenshots --
|
|
# Super+Ctrl+S: focused monitor -> file + clipboard
|
|
bind = SUPER CTRL, S, exec, hyprshot -m output
|
|
# Super+Shift+S: region (screen frozen while selecting) -> file + clipboard
|
|
bind = SUPER SHIFT, S, exec, hyprshot -m region -z
|
|
|