-
Notifications
You must be signed in to change notification settings - Fork 0
matic: hyprland settings and services #754
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
48561ef
f017f53
23101a2
32a3943
e5dee93
b2f61d3
ffa0f20
5262b10
e7dee32
3776fab
fb41e76
383369d
cc38075
880ef02
b270944
5f725df
35be2a8
708d6cb
12e8184
335e3ab
13f16d0
b939f0e
f5c4f5d
9e81026
d1d9e26
727cef3
6bb49de
ecfe830
9ecbddb
3cc717c
9b769b2
673ac73
7c14a9b
6055105
88e0cbd
d5c2e02
752815a
5729266
a8f8815
194b422
600ed5b
62c6937
98fe51c
77dfecd
3db5160
925ade9
3f1512e
05e3df5
96f5341
b78219c
37e389a
8733e3a
72d9fd2
e06f064
c86eaf6
004df5d
4c001d6
f7ffe11
bbabfe8
d7f815a
0b9695c
de8cfe1
f578378
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -32,10 +32,8 @@ in | |
| [ | ||
| ./gtk | ||
| ./hyprland | ||
| ./swaync | ||
| ./waybar | ||
| ./wlogout | ||
| ./wofi | ||
| ./hyprpanel | ||
| ./walker | ||
| ] | ||
| else | ||
| [ ] | ||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -23,21 +23,24 @@ $mod = SUPER | |||||
| # ============================================================================= | ||||||
| env = XCURSOR_THEME,Adwaita | ||||||
| env = XCURSOR_SIZE,24 | ||||||
| env = HYPRCURSOR_SIZE,24 | ||||||
| env = HYPRCURSOR_THEME,Adwaita | ||||||
| env = GTK_THEME,Adwaita:dark | ||||||
| env = GDK_SCALE,1.5 | ||||||
| env = QT_AUTO_SCREEN_SCALE_FACTOR,1 | ||||||
| env = QT_QPA_PLATFORM,wayland | ||||||
| env = SDL_VIDEODRIVER,wayland | ||||||
| env = MOZ_ENABLE_WAYLAND,1 | ||||||
| env = ELECTRON_OZONE_PLATFORM_HINT,wayland | ||||||
| env = OZONE_PLATFORM,wayland | ||||||
|
Comment on lines
+34
to
+35
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Consider removing 🤖 Prompt for AI Agents |
||||||
| env = GDK_BACKEND,wayland | ||||||
|
|
||||||
| # ============================================================================= | ||||||
| # Startup | ||||||
| # ============================================================================= | ||||||
| exec-once = dbus-update-activation-environment --systemd --all | ||||||
| exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE XDG_RUNTIME_DIR HYPRLAND_INSTANCE_SIGNATURE XDG_SESSION_DESKTOP | ||||||
|
|
||||||
| # Status bar | ||||||
| exec-once = waybar | ||||||
|
|
||||||
| # Notification daemon | ||||||
| exec-once = swaync | ||||||
| exec-once = sleep 1 && systemctl --user restart xdg-desktop-portal-hyprland && sleep 0.5 && systemctl --user restart xdg-desktop-portal-gtk && sleep 0.5 && systemctl --user restart xdg-desktop-portal | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Portal restart chain is fragile with hardcoded sleeps. If any ♻️ Proposed fix-exec-once = sleep 1 && systemctl --user restart xdg-desktop-portal-hyprland && sleep 0.5 && systemctl --user restart xdg-desktop-portal-gtk && sleep 0.5 && systemctl --user restart xdg-desktop-portal
+exec-once = sleep 1; systemctl --user restart xdg-desktop-portal-hyprland; sleep 0.5; systemctl --user restart xdg-desktop-portal-gtk; sleep 0.5; systemctl --user restart xdg-desktop-portal📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
|
|
||||||
| # Clipboard history | ||||||
| exec-once = wl-paste --type text --watch cliphist store | ||||||
|
|
@@ -46,8 +49,11 @@ exec-once = wl-paste --type image --watch cliphist store | |||||
| # Idle management | ||||||
| exec-once = hypridle | ||||||
|
|
||||||
| # Volume/brightness OSD | ||||||
| exec-once = rm -f /tmp/wobpipe && mkfifo /tmp/wobpipe && tail -f /tmp/wobpipe | wob | ||||||
| # Blue light filter | ||||||
| exec-once = hyprsunset | ||||||
|
|
||||||
| # Clipboard persistence | ||||||
| exec-once = wl-clip-persist --clipboard regular & clipse -listen | ||||||
|
|
||||||
| # ============================================================================= | ||||||
| # Monitor (Framework 13" 2256x1504) | ||||||
|
|
@@ -136,6 +142,7 @@ animations { | |||||
| animation = borderangle, 1, 30, liner, loop | ||||||
| animation = fade, 1, 3, default | ||||||
| animation = workspaces, 1, 3, snap | ||||||
| animation = specialWorkspace, 1, 3, snap, slidevert | ||||||
| } | ||||||
|
|
||||||
| # ============================================================================= | ||||||
|
|
@@ -145,24 +152,78 @@ misc { | |||||
| disable_hyprland_logo = true | ||||||
| disable_splash_rendering = true | ||||||
| force_default_wallpaper = 0 | ||||||
| focus_on_activate = true | ||||||
| background_color = rgb(000000) | ||||||
| } | ||||||
|
|
||||||
| ecosystem { | ||||||
| no_update_news = true | ||||||
| } | ||||||
|
|
||||||
| # ============================================================================= | ||||||
| # Window Rules | ||||||
| # ============================================================================= | ||||||
| windowrule = float on, match:class ^(wofi)$ | ||||||
| windowrule = float on, match:class ^(1Password)$ | ||||||
| windowrule = float on, match:title ^(Picture-in-Picture)$ | ||||||
| windowrule = pin on, match:title ^(Picture-in-Picture)$ | ||||||
|
|
||||||
| # Notification center blur | ||||||
| layerrule = blur on, match:namespace swaync-control-center | ||||||
| layerrule = blur on, match:namespace swaync-notification-window | ||||||
| layerrule = ignore_alpha 0.0, match:namespace swaync-control-center | ||||||
| layerrule = ignore_alpha 0.0, match:namespace swaync-notification-window | ||||||
| # Screen-share indicator (auto-hide to special workspace) | ||||||
| $shareIndicator = match:title ^(.*)(is sharing (your screen|a window).*)$ | ||||||
| windowrule = no_focus on, $shareIndicator | ||||||
| windowrule = workspace special:share silent, $shareIndicator | ||||||
|
|
||||||
| # Google Meet PIP | ||||||
| $meetPip = match:title ^(Meet - .+)$ | ||||||
| windowrule = float on, $meetPip | ||||||
| windowrule = pin on, $meetPip | ||||||
| windowrule = size 320 540, $meetPip | ||||||
| windowrule = move 100%-340 60, $meetPip | ||||||
|
|
||||||
| # Workspace assignments removed — forced workspace rules apply to ALL | ||||||
| # windows of that class (including Cmd+N new windows), breaking expected | ||||||
| # behavior. Use Super+G/S/D focus-or-launch bindings instead. | ||||||
|
|
||||||
| # Settings management (float for audio/bluetooth GUIs) | ||||||
| windowrule = float on, match:class ^(org.pulseaudio.pavucontrol|.blueman-manager-wrapped|blueman-manager)$ | ||||||
|
|
||||||
| # Clipse clipboard manager (float centered) | ||||||
| windowrule = float on, match:class ^(clipse)$ | ||||||
| windowrule = size 622 652, match:class ^(clipse)$ | ||||||
| windowrule = stay_focused on, match:class ^(clipse)$ | ||||||
|
|
||||||
| # Suppress maximize for all windows | ||||||
| windowrule = suppress_event maximize, match:class .* | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🌐 Web query:
💡 Result: In Hyprland v0.53, window rules use the new
|
||||||
|
|
||||||
| # Slight opacity for visual depth | ||||||
| windowrule = opacity 0.95 0.90, match:class ^(com.mitchellh.ghostty)$ | ||||||
| windowrule = opacity 0.90 0.85, match:class ^(google-chrome.*)$ | ||||||
| windowrule = opacity 0.95 0.90, match:class ^(Slack)$ | ||||||
| windowrule = opacity 0.90 0.85, match:class ^(code-url-handler)$ | ||||||
|
|
||||||
| # Full opacity in fullscreen | ||||||
| windowrule = opacity 1.0 override 1.0 override, match:fullscreen 1 | ||||||
|
|
||||||
| # Ghostty scratchpad | ||||||
| windowrule = workspace special:scratchpad silent, match:class ^(ghostty-scratchpad)$ | ||||||
| windowrule = float on, match:class ^(ghostty-scratchpad)$ | ||||||
| windowrule = size 90% 70%, match:class ^(ghostty-scratchpad)$ | ||||||
| windowrule = center on, match:class ^(ghostty-scratchpad)$ | ||||||
|
|
||||||
| # Prevent wofi animation | ||||||
| layerrule = animation slide, match:namespace ^(wofi)$ | ||||||
| # ============================================================================= | ||||||
| # Layer Rules | ||||||
| # ============================================================================= | ||||||
| # Blur for HyprPanel bar (frosted glass) | ||||||
| layerrule = blur on, match:namespace ^(bar-\d+)$ | ||||||
| layerrule = ignore_alpha 0.3, match:namespace ^(bar-\d+)$ | ||||||
|
|
||||||
| # Blur for HyprPanel notifications (frosted glass) | ||||||
| layerrule = blur on, match:namespace ^(notifications-window)$ | ||||||
| layerrule = ignore_alpha 0.3, match:namespace ^(notifications-window)$ | ||||||
|
|
||||||
| # Blur for walker | ||||||
| layerrule = blur on, match:namespace ^(walker)$ | ||||||
| layerrule = ignore_alpha on, match:namespace ^(walker)$ | ||||||
| layerrule = animation slide top, match:namespace ^(walker)$ | ||||||
|
|
||||||
| # ============================================================================= | ||||||
| # App Launch Hotkeys (Super + letter) | ||||||
|
|
@@ -173,15 +234,22 @@ bind = $mod, S, exec, hyprctl clients -j | grep -q '"class": "Slack"' && hyprctl | |||||
| bind = $mod, C, exec, cursor | ||||||
| bind = $mod, P, exec, gtk-launch 1password | ||||||
| bind = $mod, M, exec, gtk-launch signal-desktop | ||||||
| bind = $mod, D, exec, hyprctl clients -j | grep -q '"class": "discord"' && hyprctl dispatch focuswindow class:discord || discord | ||||||
| bind = $mod, N, exec, ghostty -e yazi | ||||||
|
|
||||||
| # ============================================================================= | ||||||
| # System GUIs (WiFi / Bluetooth / Audio) | ||||||
| # ============================================================================= | ||||||
| bind = $mod, I, exec, hyprpanel toggleWindow network-menu | ||||||
| bind = $mod, B, exec, blueman-manager | ||||||
| bind = $mod, A, exec, pavucontrol | ||||||
|
|
||||||
| # ============================================================================= | ||||||
| # Launcher & Clipboard | ||||||
| # ============================================================================= | ||||||
| bind = CTRL ALT SHIFT, SPACE, exec, walker | ||||||
| bind = $mod, V, exec, code | ||||||
| bind = $mod, D, exec, wofi --show drun | ||||||
| bind = $mod, E, exec, wofi-emoji | ||||||
| bind = $mod SHIFT, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy | ||||||
| bind = $mod, E, exec, emote | ||||||
|
|
||||||
| # ============================================================================= | ||||||
| # Window Management | ||||||
|
|
@@ -190,7 +258,7 @@ bind = $mod, W, killactive, | |||||
| bind = $mod, F, togglefloating, | ||||||
| bind = CTRL ALT SHIFT, F, exec, hyprctl --batch "dispatch movetoworkspace empty; dispatch fullscreen 0" | ||||||
| bind = SUPER CTRL, F, fullscreen, 0 | ||||||
| bind = $mod SHIFT, Q, exec, wlogout | ||||||
| bind = $mod SHIFT, Q, exec, hyprpanel toggleWindow power-menu | ||||||
| bind = $mod, TAB, hyprexpo:expo, toggle | ||||||
|
|
||||||
| # Focus (vim keys) | ||||||
|
|
@@ -259,9 +327,27 @@ bindm = $mod, mouse:272, movewindow | |||||
| bindm = $mod, mouse:273, resizewindow | ||||||
|
|
||||||
| # ============================================================================= | ||||||
| # Screenshot | ||||||
| # Scratchpad & Recording | ||||||
| # ============================================================================= | ||||||
| bind = $mod CTRL, T, exec, ~/.config/hypr/scripts/toggle-terminal.sh | ||||||
| bind = $mod SHIFT, R, exec, ~/.config/hypr/scripts/record-screen.sh | ||||||
|
|
||||||
| # Quick previous-window toggle (like macOS Cmd+`) | ||||||
| bind = $mod, GRAVE, focuscurrentorlast | ||||||
|
|
||||||
| # ============================================================================= | ||||||
| # Screenshot (grim+slurp+swappy for annotated, hyprshot for quick) | ||||||
| # ============================================================================= | ||||||
| bind = $mod SHIFT, S, exec, grim -g "$(slurp)" - | swappy -f - | ||||||
| bind = , PRINT, exec, hyprshot -m region | ||||||
| bind = SHIFT, PRINT, exec, hyprshot -m window | ||||||
| bind = CTRL, PRINT, exec, hyprshot -m output | ||||||
|
|
||||||
| # Color picker | ||||||
| bind = $mod, PRINT, exec, hyprpicker -a | ||||||
|
|
||||||
| # Clipboard manager (clipse) | ||||||
| bind = CTRL $mod, V, exec, ghostty --class clipse -e clipse | ||||||
|
|
||||||
| # ============================================================================= | ||||||
| # Media / Hardware Keys (Framework 13 AI 300) | ||||||
|
|
@@ -273,8 +359,8 @@ bindl = , F1, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle | |||||
| bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- | ||||||
| bindel = , F2, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- | ||||||
| # F3: Volume up | ||||||
| bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+ | ||||||
| bindel = , F3, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+ | ||||||
| bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ | ||||||
| bindel = , F3, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ | ||||||
|
Comment on lines
+362
to
+363
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Volume can exceed 100% — consider adding a limit.
🔊 Proposed fix-bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume `@DEFAULT_AUDIO_SINK`@ 5%+
-bindel = , F3, exec, wpctl set-volume `@DEFAULT_AUDIO_SINK`@ 5%+
+bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 `@DEFAULT_AUDIO_SINK`@ 5%+
+bindel = , F3, exec, wpctl set-volume -l 1.0 `@DEFAULT_AUDIO_SINK`@ 5%+🤖 Prompt for AI Agents |
||||||
| # F4: Previous track | ||||||
| bindl = , XF86AudioPrev, exec, playerctl previous | ||||||
| bindl = , F4, exec, playerctl previous | ||||||
|
|
@@ -297,9 +383,8 @@ bindl = , F9, exec, hyprctl -j monitors | jq -r '.[0].scale' | awk '{if($1>1.3) | |||||
| # F10: Airplane mode | ||||||
| bindl = , XF86RFKill, exec, nmcli radio wifi toggle | ||||||
| bindl = , F10, exec, nmcli radio wifi toggle | ||||||
| # F11: Print screen | ||||||
| bind = , Print, exec, grim -g "$(slurp)" - | swappy -f - | ||||||
| bind = , F11, exec, grim -g "$(slurp)" - | swappy -f - | ||||||
| # F11: Print screen (full output via hyprshot) | ||||||
| bind = , F11, exec, hyprshot -m output | ||||||
|
|
||||||
| # ============================================================================= | ||||||
| # Display Zoom (Framework + / - , macOS-style) | ||||||
|
|
@@ -312,12 +397,12 @@ binde = CTRL ALT SHIFT, minus, exec, hyprctl -j monitors | jq -r '.[0].scale' | | |||||
| # ============================================================================= | ||||||
| # Lock Screen | ||||||
| # ============================================================================= | ||||||
| bind = $mod CTRL, L, exec, hyprlock | ||||||
| bind = $mod SHIFT, L, exec, hyprlock | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2: The new lock screen binding reuses Prompt for AI agents
Suggested change
|
||||||
|
|
||||||
| # ============================================================================= | ||||||
| # Notification Toggle | ||||||
| # ============================================================================= | ||||||
| bind = $mod SHIFT, D, exec, swaync-client -t -sw | ||||||
| bind = $mod SHIFT, D, exec, hyprpanel toggleWindow notifications-center | ||||||
|
|
||||||
| # ============================================================================= | ||||||
| # Plugins | ||||||
|
|
||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
Repository: shunkakinoki/dotfiles
Length of output: 226
🏁 Script executed:
Repository: shunkakinoki/dotfiles
Length of output: 15718
Keybind conflict with Hyprland will break split navigation.
super+h/j/k/lare already bound in Hyprland for window focus movement (lines 355–358 inconfig/hyprland/hyprland.conf). Since Hyprland is the compositor, these keybinds will be intercepted at the global level before Ghostty receives them, making Ghostty's split navigation keybinds completely inoperative. Use different modifiers, such asctrl+shift+h/j/k/loralt+h/j/k/l.🤖 Prompt for AI Agents