Add Hyprland Void desktop profile

This commit is contained in:
Fabio Scotto di Santolo
2026-06-06 16:08:35 +02:00
parent 3460c2a9cb
commit 769e61a488
26 changed files with 746 additions and 17 deletions

View File

@@ -0,0 +1,3 @@
# Per-host Hyprland overrides. Empty by default; hosts that need tuning
# ship their own version via host_hyprland_dotfiles, which overwrites this
# placeholder during deploy.

View File

@@ -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
}

View File

@@ -0,0 +1,226 @@
# Hyprland config, aligned with the Sway desktop profile.
$mod = SUPER
$terminal = alacritty
$browser = firefox
monitor = ,preferred,auto,1
env = XCURSOR_THEME,Yaru
env = XCURSOR_SIZE,24
input {
kb_layout = us
kb_variant = intl
follow_mouse = 0
}
cursor {
no_hardware_cursors = false
}
general {
gaps_in = 10
gaps_out = 4
border_size = 2
col.active_border = rgba(4a90d9ff)
col.inactive_border = rgba(2b2b36ff)
layout = master
}
decoration {
rounding = 8
blur {
enabled = true
size = 5
passes = 1
}
shadow {
enabled = true
}
dim_inactive = true
dim_strength = 0.1
}
animations {
enabled = true
bezier = easeOutQuint,0.23,1,0.32,1
animation = windows,1,2,easeOutQuint,popin 85%
animation = border,1,2,easeOutQuint
animation = fade,1,2,easeOutQuint
animation = workspaces,1,2,easeOutQuint,slidevert
animation = layers,1,2,easeOutQuint,fade
}
master {
new_status = slave
orientation = left
}
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
force_default_wallpaper = 0
focus_on_activate = true
}
xwayland {
enabled = true
}
# Per-host overrides (terminal wrapper, env, monitors, workspace rules, etc.).
source = ~/.config/hypr/host.conf
# Window rules
windowrule = float on, match:class (?i)(polkit)
windowrule = float on, match:title ^Authentication Required$
windowrule = float on, match:title ^Open File$
windowrule = float on, match:title ^Save File$
windowrule = float on, match:class (?i)(blueman-manager)
windowrule = float on, match:class (?i)(nm-connection-editor)
windowrule = float on, match:class (?i)(pinentry)
windowrule = float on, match:class (?i)(firefox), match:title ^Library$
windowrule = float on, match:class (?i)(firefox), match:title ^About Mozilla Firefox$
windowrule = float on, match:class org.freedesktop.impl.portal.desktop.gtk
windowrule = idle_inhibit fullscreen, match:fullscreen true
windowrule = idle_inhibit focus, match:content 2
# Autostart — XDG and session services
exec-once = dbus-update-activation-environment DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP XDG_SESSION_TYPE XDG_SESSION_DESKTOP
exec-once = dex --autostart --environment Hyprland
exec-once = gnome-keyring-daemon --start --components=secrets
exec-once = ~/.local/bin/setup-gtk-theme
exec-once = /usr/libexec/xdg-desktop-portal
exec-once = /usr/libexec/xdg-desktop-portal-hyprland
exec-once = /usr/libexec/xdg-desktop-portal-gtk
# Audio/session services
exec-once = pipewire
exec-once = pipewire-pulse
exec-once = wireplumber
# Desktop services
exec-once = hyprctl setcursor Yaru 24
exec-once = hyprpaper
exec-once = waybar -c ~/.config/waybar/hyprland.jsonc
exec-once = swayosd-server
exec-once = dunst
exec-once = /usr/libexec/xfce-polkit
exec-once = nm-applet
exec-once = blueman-applet
exec-once = udiskie
exec-once = hypridle
# Clipboard manager
exec-once = wl-paste --type text --watch cliphist store
exec-once = wl-paste --type image --watch cliphist store
# Applications
bind = $mod, Return, exec, $terminal
bind = $mod SHIFT, Return, exec, foot
bind = $mod SHIFT, E, exec, emacsclient -c -n
bind = $mod, D, exec, rofi -show drun -theme ~/.config/rofi/config.rasi
bind = $mod, C, exec, cliphist list | rofi -dmenu -theme ~/.config/rofi/config.rasi | cliphist decode | wl-copy
bind = $mod SHIFT, V, exec, pavucontrol
bind = $mod SHIFT, F, exec, thunar
bind = $mod SHIFT, D, exec, dunstctl set-paused toggle
bind = $mod SHIFT, X, exec, hyprlock
bind = $mod SHIFT, Q, killactive
# Screenshots (Hyprland-native: grim/slurp/wl-copy; Flameshot is unstable here)
bind = , Print, exec, ~/.config/hypr/scripts/screenshot region
bind = SHIFT, Print, exec, ~/.config/hypr/scripts/screenshot full
bind = ALT, Print, exec, ~/.config/hypr/scripts/screenshot output
# Focus
bind = $mod, H, movefocus, l
bind = $mod, J, movefocus, d
bind = $mod, K, movefocus, u
bind = $mod, L, movefocus, r
bind = $mod, left, movefocus, l
bind = $mod, down, movefocus, d
bind = $mod, up, movefocus, u
bind = $mod, right, movefocus, r
# Move windows
bind = $mod SHIFT, H, movewindow, l
bind = $mod SHIFT, J, movewindow, d
bind = $mod SHIFT, K, movewindow, u
bind = $mod SHIFT, L, movewindow, r
bind = $mod SHIFT, left, movewindow, l
bind = $mod SHIFT, down, movewindow, d
bind = $mod SHIFT, up, movewindow, u
bind = $mod SHIFT, right, movewindow, r
# Layouts / floating
bind = $mod, F, fullscreen
bind = $mod SHIFT, Space, togglefloating
bind = $mod, Space, cyclenext
bind = $mod, A, layoutmsg, swapwithmaster
bindm = $mod, mouse:272, movewindow
bindm = $mod, mouse:273, resizewindow
# Scratchpad-like special workspace
bind = $mod SHIFT, minus, movetoworkspace, special
bind = $mod, minus, togglespecialworkspace
# Volume / brightness / media
bind = , XF86AudioRaiseVolume, exec, swayosd-client --output-volume raise
bind = , XF86AudioLowerVolume, exec, swayosd-client --output-volume lower
bind = , XF86AudioMute, exec, swayosd-client --output-volume mute-toggle
bind = , XF86AudioMicMute, exec, swayosd-client --input-volume mute-toggle
bind = , XF86MonBrightnessUp, exec, swayosd-client --brightness raise
bind = , XF86MonBrightnessDown, exec, swayosd-client --brightness lower
bind = , XF86AudioPlay, exec, playerctl play-pause
bind = , XF86AudioNext, exec, playerctl next
bind = , XF86AudioPrev, exec, playerctl previous
# Workspaces
bind = $mod, 1, workspace, 1
bind = $mod, 2, workspace, 2
bind = $mod, 3, workspace, 3
bind = $mod, 4, workspace, 4
bind = $mod, 5, workspace, 5
bind = $mod, 6, workspace, 6
bind = $mod, 7, workspace, 7
bind = $mod, 8, workspace, 8
bind = $mod, 9, workspace, 9
bind = $mod, 0, workspace, 10
bind = $mod, comma, exec, ~/.config/hypr/scripts/workspace-cycle prev
bind = $mod, period, exec, ~/.config/hypr/scripts/workspace-cycle next
bind = $mod SHIFT, 1, movetoworkspace, 1
bind = $mod SHIFT, 2, movetoworkspace, 2
bind = $mod SHIFT, 3, movetoworkspace, 3
bind = $mod SHIFT, 4, movetoworkspace, 4
bind = $mod SHIFT, 5, movetoworkspace, 5
bind = $mod SHIFT, 6, movetoworkspace, 6
bind = $mod SHIFT, 7, movetoworkspace, 7
bind = $mod SHIFT, 8, movetoworkspace, 8
bind = $mod SHIFT, 9, movetoworkspace, 9
bind = $mod SHIFT, 0, movetoworkspace, 10
# Reload / exit
bind = $mod SHIFT, C, exec, hyprctl reload
bind = $mod SHIFT, R, exec, hyprctl reload
bind = $mod SHIFT, BackSpace, exit
bind = $mod SHIFT, Escape, exec, ~/.config/hypr/scripts/powermenu.sh
# Resize submap
bind = $mod, R, submap, resize
submap = resize
bind = , H, resizeactive, -10 0
bind = , J, resizeactive, 0 10
bind = , K, resizeactive, 0 -10
bind = , L, resizeactive, 10 0
bind = , left, resizeactive, -10 0
bind = , down, resizeactive, 0 10
bind = , up, resizeactive, 0 -10
bind = , right, resizeactive, 10 0
bind = , Return, submap, reset
bind = , Escape, submap, reset
bind = $mod, R, submap, reset
submap = reset

View File

@@ -0,0 +1,26 @@
general {
hide_cursor = true
}
background {
monitor =
path = ~/.config/hypr/wallpapers/maxresdefault.jpg
blur_passes = 2
blur_size = 4
}
input-field {
monitor =
size = 300, 48
outline_thickness = 2
dots_size = 0.25
dots_spacing = 0.20
outer_color = rgba(4a90d9ff)
inner_color = rgba(1f1f28dd)
font_color = rgba(ffffffff)
fade_on_empty = false
placeholder_text = Password
position = 0, -80
halign = center
valign = center
}

View File

@@ -0,0 +1,7 @@
splash = false
wallpaper {
monitor =
path = ~/.config/hypr/wallpapers/darth-vader-sam.jpg
fit_mode = contain
}

View File

@@ -0,0 +1,29 @@
#!/bin/sh
choice="$(printf "⏻ Shutdown\n Reboot\n Logout\n Lock\n⏾ Suspend" \
| rofi -dmenu \
-i \
-p "Power" \
-theme ~/.config/rofi/config.rasi \
-theme-str 'window { width: 20%; location: center; anchor: center; } listview { columns: 1; spacing: 6px; }')"
[ -z "$choice" ] && exit 0
case "$choice" in
*Lock)
hyprlock
;;
*Logout)
hyprctl dispatch exit
;;
*Suspend)
hyprlock &
loginctl suspend
;;
*Reboot)
loginctl reboot
;;
*Shutdown)
loginctl poweroff
;;
esac

View File

@@ -0,0 +1,38 @@
#!/bin/sh
# Quick screenshot helpers for Hyprland. Captures via grim, saves to disk and
# also copies to the Wayland clipboard. Use the flameshot binding for
# annotations / fancy capture.
#
# Usage: screenshot {full|region|output|window}
set -eu
mode="${1:-full}"
dir="$HOME/Pictures/Screenshots"
mkdir -p "$dir"
file="$dir/$(date +%Y%m%d_%H%M%S).png"
case "$mode" in
full)
grim "$file"
;;
region)
grim -g "$(slurp)" "$file"
;;
output)
out=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .name')
grim -o "$out" "$file"
;;
window)
geom=$(hyprctl activewindow -j \
| jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"')
grim -g "$geom" "$file"
;;
*)
printf 'Usage: %s {full|region|output|window}\n' "$0" >&2
exit 1
;;
esac
wl-copy < "$file"
notify-send "Screenshot saved" "$file" -i image-x-generic >/dev/null 2>&1 || true

View File

@@ -0,0 +1,34 @@
#!/bin/sh
# Cycle Hyprland workspaces within the fixed 1..10 desktop set.
set -eu
direction="${1:-next}"
current="$(hyprctl activeworkspace -j | jq -r '.id')"
case "$current" in
''|*[!0-9-]*) current=1 ;;
esac
case "$direction" in
next)
if [ "$current" -ge 10 ] || [ "$current" -lt 1 ]; then
target=1
else
target=$((current + 1))
fi
;;
prev)
if [ "$current" -le 1 ] || [ "$current" -gt 10 ]; then
target=10
else
target=$((current - 1))
fi
;;
*)
printf 'Usage: %s {next|prev}\n' "$0" >&2
exit 1
;;
esac
exec hyprctl dispatch workspace "$target"

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

View File

@@ -0,0 +1,115 @@
{
"layer": "top",
"position": "top",
"height": 26,
"spacing": 4,
"modules-left": ["hyprland/workspaces"],
"modules-center": [],
"modules-right": ["cpu", "memory", "disk", "temperature", "backlight", "network", "pulseaudio", "battery", "tray", "clock", "custom/dnd", "custom/power"],
"hyprland/workspaces": {
"disable-scroll": true,
"all-outputs": false,
"format": "{icon}",
"format-icons": {
"1": "I",
"2": "II",
"3": "III",
"4": "IV",
"5": "V",
"6": "VI",
"7": "VII",
"8": "VIII",
"9": "IX",
"10": "X"
},
"persistent-workspaces": {
"*": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
},
"clock": {
"interval": 60,
"format": "{:%Y-%m-%d %H:%M}",
"tooltip-format": "<tt>{calendar}</tt>"
},
"cpu": {
"interval": 5,
"format": " {usage}%"
},
"memory": {
"interval": 10,
"format": " {used:0.1f}G / {total:0.1f}G"
},
"disk": {
"interval": 60,
"path": "/",
"format": " {used} / {total}"
},
"temperature": {
"interval": 10,
"critical-threshold": 80,
"format": " {temperatureC}°C",
"format-critical": " {temperatureC}°C"
},
"backlight": {
"format": " {percent}%",
"on-scroll-up": "brightnessctl set +5%",
"on-scroll-down": "brightnessctl set 5%-"
},
"network": {
"interval": 5,
"format-wifi": " {essid} {signalStrength}%",
"format-ethernet": " {ifname}",
"format-disconnected": " offline",
"tooltip-format": "{ifname} {ipaddr}"
},
"pulseaudio": {
"format": "{icon} {volume}%",
"format-muted": " muted",
"format-bluetooth": "{icon} {volume}% ",
"format-icons": { "default": ["", "", ""] },
"on-click": "swayosd-client --output-volume mute-toggle",
"on-click-right": "pavucontrol"
},
"battery": {
"bat": "BAT0",
"interval": 30,
"states": {
"warning": 30,
"critical": 15
},
"format": "{icon} {capacity}%",
"format-charging": " {capacity}%",
"format-full": " full",
"format-icons": ["", "", "", "", ""]
},
"tray": {
"icon-size": 16,
"spacing": 6
},
"custom/dnd": {
"exec": "dunstctl is-paused | grep -q true && echo '{\"text\":\"󰂛\",\"class\":\"paused\"}' || echo '{\"text\":\"󰂚\",\"class\":\"\"}'",
"return-type": "json",
"interval": 2,
"on-click": "dunstctl set-paused toggle",
"tooltip": false
},
"custom/power": {
"format": "⏻",
"tooltip": false,
"on-click": "~/.config/hypr/scripts/powermenu.sh"
}
}

View File

@@ -0,0 +1,27 @@
#!/bin/sh
[ -r /etc/profile ] && . /etc/profile
[ -r "$HOME/.profile" ] && . "$HOME/.profile"
export XDG_CURRENT_DESKTOP=Hyprland
export XDG_SESSION_DESKTOP=Hyprland
export XDG_SESSION_TYPE=wayland
export MOZ_ENABLE_WAYLAND=1
export QT_QPA_PLATFORM='wayland;xcb'
export _JAVA_AWT_WM_NONREPARENTING=1
export SDL_VIDEODRIVER=wayland
export GDK_BACKEND='wayland,x11'
export SSH_AUTH_SOCK="$HOME/.local/state/ssh-agent/socket"
# Per-host session environment (GPU / Wayland tuning, etc.)
[ -r "$HOME/.config/hypr/session-env" ] && . "$HOME/.config/hypr/session-env"
exec dbus-run-session sh -eu -c '
umask 077
printf "%s\n" "$DBUS_SESSION_BUS_ADDRESS" > "$HOME/.dbus-session-bus-address"
gpgconf --launch gpg-agent
"$HOME/.local/bin/update-turnstile-env"
exec /usr/bin/start-hyprland
'

View File

@@ -0,0 +1,24 @@
$terminal = ~/.local/bin/prime-run /usr/bin/alacritty
# Prefer the integrated panel as primary, and place the docked display to its right.
monitor = eDP-1,1920x1080,0x0,1
monitor = DP-1,3440x1440@100,1920x0,1
monitor = DP-2,disable
monitor = HDMI-A-1,disable
monitor = HDMI-A-2,disable
workspace = 1, monitor:eDP-1
workspace = 2, monitor:DP-1
workspace = 3, monitor:DP-1
workspace = 4, monitor:DP-1
workspace = 5, monitor:DP-1
workspace = 6, monitor:DP-1
workspace = 7, monitor:DP-1
workspace = 8, monitor:DP-1
workspace = 9, monitor:DP-1
workspace = 10, monitor:DP-1
env = LIBVA_DRIVER_NAME,iHD
env = QT_QPA_PLATFORM,wayland;xcb
env = WLR_DRM_DEVICES,/dev/dri/card0:/dev/dri/card1
env = WLR_NO_HARDWARE_CURSORS,1

View File

@@ -0,0 +1,4 @@
export LIBVA_DRIVER_NAME=iHD
export QT_QPA_PLATFORM='wayland;xcb'
export WLR_DRM_DEVICES=/dev/dri/card0:/dev/dri/card1
export WLR_NO_HARDWARE_CURSORS=1