hyprlua + disk

This commit is contained in:
Daniel Bulant 2026-07-31 14:18:13 +02:00
parent 922d3aff74
commit 3c0afc8a99
No known key found for this signature in database
5 changed files with 258 additions and 529 deletions

View file

@ -1,500 +0,0 @@
#env=LIBSEAT_BACKEND,seatd
# env = HYPRLAND_LOG_WLR,1
#env = WLR_DRM_DEVICES,$HOME/.config/hypr/nvidia:$HOME/.config/hypr/amd
#env = WLR_DRM_DEVICES,$HOME/.config/hypr/amd:$HOME/.config/hypr/nvidia
# env = WLR_DRM_DEVICES,$HOME/.config/hypr/amd-render:$HOME/.config/hypr/nvidia-render
#env = LIBVA_DRIVER_NAME,nvidia
#env = XDG_SESSION_TYPE,wayland
#env = GBM_BACKEND,nvidia-drm
#env = __GLX_VENDOR_LIBRARY_NAME,nvidia
#cursor { no_hardware_cursors = true }
# env = AQ_DRM_DEVICES,/dev/dri/card1
#env = AQ_NO_MODIFIERS,1
#monitor=,preferred,auto,1
#monitor=eDP-1,1920x1200@60.0,3564x0,1.0,cm,hdr,sdrbrightness,1.4,sdrsaturation,0.8,bitdepth,10
# Generated by nwg-displays on 2026-02-17 at 11:54:19. Do not edit manually.
#monitor=eDP-1,1920x1200@60.0,3564x0,1.0
#monitor=HDMI-A-1,2560x1440@144.0,1004x0,1.0
# env = LIBVA_DRIVER_NAME,nvidia
# env = XDG_SESSION_TYPE,wayland
# env = GBM_BACKEND,nvidia-drm
# env = __GLX_VENDOR_LIBRARY_NAME,nvidia
cursor {
no_hardware_cursors = true
}
#render {
#explicit_sync = false
#}
source = ~/.config/hypr/monitors.conf
source = ~/.config/hypr/workspaces.conf
#source = ~/.config/hypr/hyprland.colors.conf
monitor=desc:ASUSTek COMPUTER INC VG27AQL5A T7LMQS022027,2560x1440@144.0,0x0,1.0,bitdepth,10
monitor=eDP-1,1920x1200@60.0,2560x0,1.0,bitdepth,10,cm,srgb
debug:disable_logs = false
debug {
disable_logs = false
}
plugin {
hyprtrails {
color = rgba(ffaa00ff)
}
hyprexpo {
columns = 3
gap_size = 5
bg_col = rgb(111111)
workspace_method = center current # [center/first] [workspace] e.g. first 1 or center m+1
# enable_gesture = true # laptop touchpad
# gesture_fingers = 3 # 3 or 4
# gesture_distance = 300 # how far is the "max"
# gesture_positive = true # positive = swipe down. Negative = swipe up.
}
}
# See https://wiki.hyprland.org/Configuring/Monitors/
#monitor=,preferred,auto,auto
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
env = QT_QPA_PLATFORMTHEME,qt5ct
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
env = QT_ENABLE_HIGHDPI_SCALING,1
env = QT_QPA_PLATFORM,wayland;xcb
env = XCURSOR_SIZE,24
env = LIBVA_DRIVER_NAME,nvidia
env = XDG_SESSION_TYPE,wayland
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
#env = WLR_NO_HARDWARE_CURSORS,1
env = WLR_DRM_DEVICES,/dev/dri/card1:/dev/dri/card0
env = GDK_SCALE,1
env = GDK_BACKEND,wayland,x11
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = MOZ_ENABLE_WAYLAND,1
env = XDG_SESSION_DESKTOP,Hyprland
env = XDG_CURRENT_DESKTOP,Hyprland
env = QT_ENABLE_FONTCONFIG_CACHE,1
# Execute your favorite apps at launch
# exec-once = waybar & hyprpaper & firefox
# Import the completed Hyprland session environment before launching long-lived helpers.
exec-once=dbus-update-activation-environment --systemd --all
exec-once=systemctl --user import-environment WAYLAND_DISPLAY DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE WLR_DRM_DEVICES LIBVA_DRIVER_NAME __GLX_VENDOR_LIBRARY_NAME QT_QPA_PLATFORM QT_QPA_PLATFORMTHEME GDK_BACKEND MOZ_ENABLE_WAYLAND PATH XDG_DATA_DIRS XDG_CONFIG_DIRS DBUS_SESSION_BUS_ADDRESS
# KDE auth agent
# exec-once=/usr/lib/polkit-kde-authentication-agent-1
exec-once = systemctl --user start hyprpolkitagent
exec-once=otd-daemon
exec-once=lorri daemon
exec-once=/etc/pam_init
#exec-once=wlsunset -S 6:00 -s 21:30
# exec-once=swaybg -m fill -i ~/.config/hypr/wallpapers/sunflowers.jpg
#exec-once = swww-daemon
# "$(cat ~/.local/state/quickshell/user/generated/wallpaper/path.txt)"
#exec-once = sleep 0.5; swww img ~/.config/hypr/wallpapers/sunflowers.jpg --transition-step 100 --transition-fps 120 --transition-type grow --transition-angle 30 --transition-duration 1
# exec-once=waybar
# exec-once=quickshell -c ii
exec-once=blueman-applet
# exec-once=dunst
exec-once=udev-block-notify
#exec-once=~/.config/hypr/scripts/sleep.sh
exec-once=echo us > /tmp/kb_layout
#exec-once=hyprctl setcursor Sweet 30
#exec-once=sleep 10;aw-qt& sleep 2; awatcher
exec-once = nm-applet --indicator # systray app for Network/Wifi
exec-once=kdeconnect-indicator
exec-once = hyprpm reload -n
exec-once = wl-paste --type text --watch cliphist store
exec-once = wl-paste --type image --watch cliphist store
exec-once = fcitx5
exec-once = easyeffects --gapplication-service
exec-once = voxtype daemon
exec-once = openrgb --startminimized
exec-once = dms run
#$swaylock = swaylock --screenshots --clock --indicator --effect-blur 6x6 --fade-in 0.2 --ring-color 4e9dc2 --key-hl-color 71b0ce
$swaylock = hyprlock
# exec-once=hypridle
# exec-once=swayidle -w timeout 300 '$swaylock --grace 2' before-sleep '$swaylock'
# Needs repackaging...
# exec-once=/usr/lib/pam_kwallet_init
#monitor=eDP-1,highrr,0x0,1.25
#monitor=eDP-2,highrr,0x0,1.25
#monitor=desc:AOC 24G2W1G4 0x0000297D,highrr,auto,1
#monitor=HDMI-A-1,highrr,2048x0,1
#monitor=HDMI-A-1,highrr,auto,1
#monitor=,preferred,auto,1
# TV frame
#monitor=HDMI-A-1,addreserved,50,50,50,50
#monitor=HDMI-A-1,preferred,auto,1,transform,2
#monitor=HDMI-A-1,preferred,auto,1,mirror,eDP-2
#workspace = 10,monitor:HDMI-A-1,default:true
xwayland {
force_zero_scaling = true
}
# Source a file (multi-file configs)
# source = ~/.config/hypr/myColors.conf
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
kb_layout=us,cz
kb_variant=,qwerty
kb_model=
kb_options=grp:win_space_toggle
kb_rules=
numlock_by_default=trues
follow_mouse=1
float_switch_override_focus=true
touchpad {
natural_scroll = yes
}
touchdevice {
output = HDMI-A-1
transform = 2
}
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 = 1
# col.active_border = rgba(75DDDD50) rgba(09BC8A50) 45deg
# col.inactive_border = rgba(172A3AFF)
layout = master
resize_on_border = true
}
decoration {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
rounding = 10
blur {
enabled = true
size = 2
passes = 4
new_optimizations = on
ignore_opacity = on
# xray = true
}
# drop_shadow = yes
# shadow_range = 4
# shadow_render_power = 3
# col.shadow = rgba(1a1a1aee)
}
animations {
enabled = yes
bezier = wind, 0.05, 0.9, 0.1, 1.05
bezier = winIn, 0.1, 1, 0.1, 1
bezier = winOut, 0.3, 0, 0, 1
bezier = liner, 1, 1, 1, 1
animation = windows, 1, 6, wind, slide
animation = windowsIn, 1, 6, winIn, popin 80%
animation = windowsOut, 1, 5, winOut, popin 80%
animation = windowsMove, 1, 5, wind, slide
animation = border, 1, 1, liner
animation = borderangle, 1, 30, liner, loop
animation = fade, 1, 10, default
animation = workspaces, 1, 5, wind
}
group {
groupbar {
# font_size = 10
# col.active = rgb(F7E733)
# col.inactive = rgba(F7E73330)
}
# col.border_active = rgba(75DDDDFF) rgba(75DDDD70) 45deg
# col.border_inactive = rgb(172A3A)
}
# 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 = false
}
#gestures {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
# workspace_swipe = true
#}
gesture = 3, horizontal, workspace
gesture = 3, up, fullscreen
gesture = 3, down, fullscreen, maximize
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
#device:epic-mouse-v1 {
# sensitivity = -0.5
#}
misc {
disable_hyprland_logo=true
disable_splash_rendering=true
mouse_move_enables_dpms=true
}
#windowrule=float,class:blueman
#windowrule=float,class:Anydesk
#windowrule=float,class:file_progress
#windowrule=float,class:confirm
#windowrule=float,class:dialog
#windowrule=float,class:download
#windowrule=float,class:notification
#windowrule=float,class:error
#windowrule=float,class:splash
#windowrule=float,class:confirmreset
#windowrule=float,title:Open File
#windowrule=float,title:branchdialog
#windowrule=tile,title:*vivaldi*
# can be more specific (:bar, :mediaControls, etc)
layerrule = blur on, match:namespace quickshell:bar
layerrule = ignore_alpha .2, match:namespace quickshell:bar
layerrule = blur on, match:namespace quickshell:popup
layerrule = ignore_alpha .2, match:namespace quickshell:popup
layerrule = blur on, match:namespace quickshell:notificationPopup
layerrule = ignore_alpha .2, match:namespace quickshell:notificationPopup
layerrule = blur on, match:namespace quickshell:overview
layerrule = blur_popups on, match:namespace quickshell:overview
layerrule = ignore_alpha .2, match:namespace quickshell:overview
layerrule = blur on, match:namespace quickshell:sidebarLeft
layerrule = blur_popups on, match:namespace quickshell:sidebarLeft
layerrule = ignore_alpha .2, match:namespace quickshell:sidebarLeft
layerrule = blur on, match:namespace quickshell:sidebarRight
layerrule = blur_popups on, match:namespace quickshell:sidebarRight
layerrule = ignore_alpha .2, match:namespace quickshell:sidebarRight
layerrule {
name="blur dms"
match:namespace = dms:(color-picker|clipboard|spotlight|settings)
blur = on
ignore_alpha = 0
}
# layerrule = noanim, match:namespace ^(dms)$
blurls=gtk-layer-shell
blurls=lockscreen
blurls = rofi
$dir = ~/.config
#! quickshell
bindr = SUPER+ALT, R, exec, pkill rofi || $dir/rofi/bin/launcher
# bind = SUPER, r, global, quickshell:overviewSearchToggle
# bind = SUPER, r, exec, dms ipc call spotlight toggle
bind = SUPER+ALT, P, exec, pkill rofi || $dir/rofi/bin/powermenu
# bind = SUPER, p, exec, dms ipc call powermenu open
# bind = SUPER, tab, exec, dms ipc call hypr toggleOverview
# bind = SUPER, p, global, quickshell:sessionToggle
# bind = SUPER, m, global, quickshell:mediaControlsToggle
# bind = SUPER, grave, global, quickshell:sidebarLeftToggle
# bind = SUPER, b, global, quickshell:sidebarRightToggle
# bind = SUPER, slash, global, quickshell:cheatsheetToggle
# bind = SUPER, tab, global, quickshell:overviewToggle
# bindrt = SUPER, SUPER_L, global, quickshell:workspaceNumber
# bindd = Super, h, Clipboard history >> clipboard, global, quickshell:overviewClipboardToggle # Clipboard history >> clipboard
# bindd = Super, Period, Emoji >> clipboard, global, quickshell:overviewEmojiToggle # Emoji >> clipboard
bind = , XF86AudioRecord, exec, voxtype record-toggle
#bind = SUPER, O, exec, voxtype record-toggle
bind = SUPER, O, exec, voxtype record start
bindr = SUPER, O, exec, voxtype record stop
#bind = SUPER, V, exec, voxtype record start
#bindr = SUPER, V, exec, voxtype record stop
$mainMod = SUPER
#! programs
bind = $mainMod, T, exec, kitty
bind=$mainMod,K,exec,kitty
bind=SUPER,B,exec,vivaldi-stable
bind = super+ctrl, q, exit,
bind = $mainMod, E, exec, cosmic-files
bind = $mainMod+SHIFT, E, exec, dolphin
#! current window management
bind = $mainMod, Q, killactive,
# bind = $mainMod, V, togglefloating,
#bind = $mainMod, R, exec, rofi -show drun
#bind = $mainMod, P, pseudo, # dwindle
# bind = $mainMod, J, togglesplit, # dwindle
bind = SUPER, G, togglegroup
bind=SUPER,V,togglefloating,
bind=SUPER,F,fullscreen,
bind=SUPER,A,swapactiveworkspaces,current +1
# bind = SUPER, grave, hyprexpo:expo, toggle
#! media keys
bindle=, XF86MonBrightnessUp, exec, xbacklight -inc 10
bindle=, XF86MonBrightnessDown, exec, xbacklight -dec 10
# bindle=, XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_SINK@ 5%+;canberra-gtk-play -i audio-volume-change -d "volumeChange"
# bindle=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_SINK@ 5%-;canberra-gtk-play -i audio-volume-change -d "volumeChange"
bindl=, XF86AudioMute, exec, wpctl set-mute @DEFAULT_SINK@ toggle
bindl=, XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle
bindl=, XF86AudioPlay, exec, playerctl play-pause # the stupid key is called play , but it toggles
bindl=, XF86AudioNext, exec, playerctl next
bindl=, XF86AudioPrev, exec, playerctl previous
#! focus
bind = SUPER+ALT, left, movefocus, l
bind = SUPER+ALT, right, movefocus, r
bind = SUPER+ALT, up, movefocus, u
bind = SUPER+ALT, down, movefocus, d
bind = SUPER+SHIFT, left,changegroupactive,b
bind = SUPER+SHIFT,right,changegroupactive,f
#! workspaces
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
bind = $mainMod+ALT, 1, workspace, 10
bind = $mainMod+ALT, 2, workspace, 11
bind = $mainMod+ALT, 3, workspace, 12
bind = $mainMod+ALT, 4, workspace, 13
bind = $mainMod+ALT, 5, workspace, 14
bind = $mainMod+ALT, 6, workspace, 15
bind = $mainMod+ALT, 7, workspace, 16
bind = $mainMod+ALT, 8, workspace, 17
bind = $mainMod+ALT, 9, workspace, 18
bind = $mainMod+ALT, 0, workspace, 19
bind = SUPER+CONTROL, right, workspace, +1
bind = SUPER+CONTROL, left, workspace, -1
bind = super+control+shift,left,movetoworkspace,-1
bind = super+control+shift,right,movetoworkspace,+1
#! window movement
bind = SUPER, right, movewindow, mon:+1
bind = SUPER, left, movewindow, mon:-1
bind = ALT, tab, cyclenext,
bind = ALT+SHIFT, tab, cyclenext, prev
#! screenshots
# bind = ,Print,exec,grim - | wl-copy
bind = ,Print,exec,hyprshot --clipboard-only --mode active --mode output
# bind = SUPER+SHIFT,S,exec,spectacle --copy-image --region --background # no gui
# bind = SUPER+SHIFT,S,exec,grim -g "$(slurp)" - | wl-copy
bind = SUPER+SHIFT,S,exec,hyprshot --freeze --clipboard-only --mode region
# bind = SUPER, L,exec,$swaylock
#! move windows to workspaces
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
#! mouse bindings
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
bind = super alt, m, layoutmsg,swapwithmaster
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
#! global keybinds
bind = CTRL+ALT,1,pass,^(com\.obsproject\.Studio)$
bind = CTRL+ALT,2,pass,^(com\.obsproject\.Studio)$
#windowrulev2=opacity 0.9,class:Code
#windowrulev2=opacity 0.9,class:Spotify
#windowrulev2 = suppress_event maximize,class:^(vesktop)$
#windowrulev2=workspace 10,class:Code # Open Code on secondary monitor
#windowrulev2 = float,class:^(qt5ct)$
#windowrulev2 = float,class:^(nwg-look)$
#windowrulev2 = float,class:^(org.kde.ark)$
#windowrulev2 = float,class:^(Signal)$ #Signal-Gtk
#windowrulev2 = float,class:^(com.github.rafostar.Clapper)$ #Clapper-Gtk
#windowrulev2 = float,class:^(app.drey.Warp)$ #Warp-Gtk
#windowrulev2 = float,class:^(net.davidotek.pupgui2)$ #ProtonUp-Qt
#windowrulev2 = float,class:^(yad)$ #Protontricks-Gtk
#windowrulev2 = float,class:^(eog)$ #Imageviewer-Gtk
#windowrulev2 = float,class:^(io.gitlab.theevilskeleton.Upscaler)$ #Upscaler-Gtk
#windowrulev2 = float,class:^(pavucontrol)$
#windowrulev2 = float,class:^(blueman-manager)$
#windowrulev2 = float,class:^(nm-applet)$
#windowrulev2 = float,class:^(nm-connection-editor)$
#windowrulev2 = float,class:^(org.kde.polkit-kde-authentication-agent-1)$
#windowrulev2 = tile,class:dev.warp.Warp
# some themeing
exec = gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
exec = gsettings set org.gnome.desktop.interface font-antialiasing 'rgba'
exec = gsettings set org.gnome.desktop.interface font-hinting 'full'
decoration {
dim_special = 0.3
blur {
special = true
}
}
#windowrule = nofullscreenrequest,flameshot
#windowrule = float,title:flameshot
#windowrule = monitor 1,title:flameshot
#windowrule = move 0 0,title:flameshot
#windowrule = noanim,title:flameshot
#enable once dms fixes config; uses old hyprland syntax
source = ~/.config/hypr/dms/colors.conf
source = ~/.config/hypr/dms/binds.conf
source = ~/.config/hypr/dms/layout.conf

223
.config/hypr/hyprland.lua Normal file
View file

@ -0,0 +1,223 @@
-- Hyprland 0.55+ Lua configuration.
-- https://wiki.hypr.land/Configuring/Start/
hl.config({ autogenerated = false })
-- Environment variables that must be present before the compositor starts.
hl.env("QT_QPA_PLATFORMTHEME", "qt5ct")
hl.env("QT_AUTO_SCREEN_SCALE_FACTOR", "1")
hl.env("QT_ENABLE_HIGHDPI_SCALING", "1")
hl.env("QT_QPA_PLATFORM", "wayland;xcb")
hl.env("XCURSOR_SIZE", "24")
hl.env("LIBVA_DRIVER_NAME", "nvidia")
hl.env("XDG_SESSION_TYPE", "wayland")
hl.env("__GLX_VENDOR_LIBRARY_NAME", "nvidia")
hl.env("WLR_DRM_DEVICES", "/dev/dri/card1:/dev/dri/card0")
hl.env("GDK_SCALE", "1")
hl.env("GDK_BACKEND", "wayland,x11")
hl.env("QT_WAYLAND_DISABLE_WINDOWDECORATION", "1")
hl.env("MOZ_ENABLE_WAYLAND", "1")
hl.env("XDG_SESSION_DESKTOP", "Hyprland")
hl.env("XDG_CURRENT_DESKTOP", "Hyprland")
hl.env("QT_ENABLE_FONTCONFIG_CACHE", "1")
hl.config({
cursor = { no_hardware_cursors = true },
debug = { disable_logs = false },
xwayland = { force_zero_scaling = true },
input = {
kb_layout = "us,cz",
kb_variant = ",qwerty",
kb_model = "",
kb_options = "grp:win_space_toggle",
kb_rules = "",
numlock_by_default = true,
follow_mouse = 1,
float_switch_override_focus = true,
sensitivity = 0,
touchpad = { natural_scroll = true },
touchdevice = { output = "HDMI-A-1", transform = 2 },
},
general = {
gaps_in = 5,
gaps_out = 10,
border_size = 1,
layout = "master",
resize_on_border = true,
},
decoration = {
rounding = 10,
dim_special = 0.3,
blur = {
enabled = true,
size = 2,
passes = 4,
new_optimizations = true,
ignore_opacity = true,
special = true,
},
},
animations = { enabled = true },
misc = {
disable_hyprland_logo = true,
disable_splash_rendering = true,
mouse_move_enables_dpms = true,
},
plugin = {
hyprtrails = { color = "rgba(ffaa00ff)" },
hyprexpo = {
columns = 3,
gap_size = 5,
bg_col = "rgb(111111)",
workspace_method = "center current",
},
},
})
hl.curve("wind", { type = "bezier", points = { { 0.05, 0.9 }, { 0.1, 1.05 } } })
hl.curve("winIn", { type = "bezier", points = { { 0.1, 1 }, { 0.1, 1 } } })
hl.curve("winOut", { type = "bezier", points = { { 0.3, 0 }, { 0, 1 } } })
hl.curve("liner", { type = "bezier", points = { { 1, 1 }, { 1, 1 } } })
hl.animation({ leaf = "windows", enabled = true, speed = 6, bezier = "wind", style = "slide" })
hl.animation({ leaf = "windowsIn", enabled = true, speed = 6, bezier = "winIn", style = "popin 80%" })
hl.animation({ leaf = "windowsOut", enabled = true, speed = 5, bezier = "winOut", style = "popin 80%" })
hl.animation({ leaf = "windowsMove", enabled = true, speed = 5, bezier = "wind", style = "slide" })
hl.animation({ leaf = "border", enabled = true, speed = 1, bezier = "liner" })
hl.animation({ leaf = "borderangle", enabled = true, speed = 30, bezier = "liner", style = "loop" })
hl.animation({ leaf = "fade", enabled = true, speed = 10, bezier = "default" })
hl.animation({ leaf = "workspaces", enabled = true, speed = 5, bezier = "wind" })
hl.gesture({ fingers = 3, direction = "horizontal", action = "workspace" })
hl.gesture({ fingers = 3, direction = "up", action = "fullscreen" })
hl.gesture({ fingers = 3, direction = "down", action = "fullscreen", mode = "maximize" })
-- Import the completed session environment before launching long-lived helpers.
hl.on("hyprland.start", function()
local commands = {
"dbus-update-activation-environment --systemd --all",
"systemctl --user import-environment WAYLAND_DISPLAY DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE WLR_DRM_DEVICES LIBVA_DRIVER_NAME __GLX_VENDOR_LIBRARY_NAME QT_QPA_PLATFORM QT_QPA_PLATFORMTHEME GDK_BACKEND MOZ_ENABLE_WAYLAND PATH XDG_DATA_DIRS XDG_CONFIG_DIRS DBUS_SESSION_BUS_ADDRESS",
"systemctl --user start hyprpolkitagent",
"otd-daemon",
"lorri daemon",
"/etc/pam_init",
"blueman-applet",
"udev-block-notify",
"echo us > /tmp/kb_layout",
"nm-applet --indicator",
"kdeconnect-indicator",
"hyprpm reload -n",
"wl-paste --type text --watch cliphist store",
"wl-paste --type image --watch cliphist store",
"fcitx5",
"easyeffects --gapplication-service",
"voxtype daemon",
"openrgb --startminimized",
"dms run",
}
for _, command in ipairs(commands) do hl.exec_cmd(command) end
end)
-- Layer effects for DMS and the older quickshell namespaces still in use.
local blurredNamespaces = {
"^quickshell:bar$", "^quickshell:popup$", "^quickshell:notificationPopup$",
"^quickshell:overview$", "^quickshell:sidebarLeft$", "^quickshell:sidebarRight$",
}
for _, namespace in ipairs(blurredNamespaces) do
hl.layer_rule({ match = { namespace = namespace }, blur = true, ignore_alpha = 0.2 })
end
for _, namespace in ipairs({ "^quickshell:overview$", "^quickshell:sidebarLeft$", "^quickshell:sidebarRight$" }) do
hl.layer_rule({ match = { namespace = namespace }, blur_popups = true })
end
hl.layer_rule({
name = "blur-dms",
match = { namespace = "^dms:(color-picker|clipboard|spotlight|settings)$" },
blur = true,
ignore_alpha = 0,
})
for _, namespace in ipairs({ "^gtk-layer-shell$", "^lockscreen$", "^rofi$" }) do
hl.layer_rule({ match = { namespace = namespace }, blur = true })
end
local function bind(keys, dispatcher, options)
hl.bind(keys, dispatcher, options)
end
-- Launchers and applications.
bind("SUPER + ALT + R", hl.dsp.exec_cmd("pkill rofi || ~/.config/rofi/bin/launcher"), { release = true })
bind("SUPER + ALT + P", hl.dsp.exec_cmd("pkill rofi || ~/.config/rofi/bin/powermenu"))
bind("XF86AudioRecord", hl.dsp.exec_cmd("voxtype record-toggle"))
bind("SUPER + O", hl.dsp.exec_cmd("voxtype record start"))
bind("SUPER + O", hl.dsp.exec_cmd("voxtype record stop"), { release = true })
bind("SUPER + T", hl.dsp.exec_cmd("kitty"))
bind("SUPER + K", hl.dsp.exec_cmd("kitty"))
bind("SUPER + B", hl.dsp.exec_cmd("vivaldi-stable"))
bind("SUPER + CTRL + Q", hl.dsp.exit())
bind("SUPER + E", hl.dsp.exec_cmd("cosmic-files"))
bind("SUPER + SHIFT + E", hl.dsp.exec_cmd("dolphin"))
-- Window and group management.
bind("SUPER + Q", hl.dsp.window.close())
bind("SUPER + G", hl.dsp.group.toggle())
bind("SUPER + V", hl.dsp.window.float({ action = "toggle" }))
bind("SUPER + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
bind("SUPER + A", hl.dsp.workspace.swap_monitors({ monitor1 = "current", monitor2 = "+1" }))
bind("SUPER + ALT + M", hl.dsp.layout("swapwithmaster"))
-- Media keys.
bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("xbacklight -inc 10"), { locked = true, repeating = true })
bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("xbacklight -dec 10"), { locked = true, repeating = true })
bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_SINK@ toggle"), { locked = true })
bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_SOURCE@ toggle"), { locked = true })
bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
-- Focus and group navigation.
for key, direction in pairs({ left = "l", right = "r", up = "u", down = "d" }) do
bind("SUPER + ALT + " .. key, hl.dsp.focus({ direction = direction }))
end
bind("SUPER + SHIFT + left", hl.dsp.group.prev())
bind("SUPER + SHIFT + right", hl.dsp.group.next())
-- Workspaces. Lua lets the repeated numeric bindings stay compact.
for i = 1, 10 do
local key = i % 10
bind("SUPER + " .. key, hl.dsp.focus({ workspace = tostring(i) }))
bind("SUPER + SHIFT + " .. key, hl.dsp.window.move({ workspace = tostring(i) }))
end
for key = 0, 9 do
local workspace = key == 0 and 19 or key + 9
bind("SUPER + ALT + " .. key, hl.dsp.focus({ workspace = tostring(workspace) }))
end
bind("SUPER + CTRL + right", hl.dsp.focus({ workspace = "+1" }))
bind("SUPER + CTRL + left", hl.dsp.focus({ workspace = "-1" }))
bind("SUPER + CTRL + SHIFT + left", hl.dsp.window.move({ workspace = "-1" }))
bind("SUPER + CTRL + SHIFT + right", hl.dsp.window.move({ workspace = "+1" }))
bind("SUPER + right", hl.dsp.window.move({ monitor = "+1" }))
bind("SUPER + left", hl.dsp.window.move({ monitor = "-1" }))
bind("ALT + Tab", hl.dsp.window.cycle_next())
bind("ALT + SHIFT + Tab", hl.dsp.window.cycle_next({ next = false }))
-- Screenshots, mouse, and application pass-through.
bind("Print", hl.dsp.exec_cmd("hyprshot --clipboard-only --mode active --mode output"))
bind("SUPER + SHIFT + S", hl.dsp.exec_cmd("hyprshot --freeze --clipboard-only --mode region"))
bind("SUPER + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
bind("SUPER + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
bind("SUPER + mouse:272", hl.dsp.window.drag(), { mouse = true })
bind("SUPER + mouse:273", hl.dsp.window.resize(), { mouse = true })
bind("CTRL + ALT + 1", hl.dsp.pass({ window = "class:^(com\\.obsproject\\.Studio)$" }))
bind("CTRL + ALT + 2", hl.dsp.pass({ window = "class:^(com\\.obsproject\\.Studio)$" }))
-- Apply GTK preferences on each config load, matching the former `exec` keywords.
hl.exec_cmd("gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'")
hl.exec_cmd("gsettings set org.gnome.desktop.interface font-antialiasing 'rgba'")
hl.exec_cmd("gsettings set org.gnome.desktop.interface font-hinting 'full'")
-- DMS 1.5+ owns these fragments. In particular, Display Settings rewrites outputs.lua.
require("dms.colors")
require("dms.outputs")
require("dms.layout")
require("dms.cursor")
require("dms.binds")
require("dms.binds-user")
require("dms.windowrules")

7
.luarc.json Normal file
View file

@ -0,0 +1,7 @@
{
"workspace": {
"library": [
"/usr/share/hypr/stubs"
]
}
}

View file

@ -290,17 +290,17 @@
}, },
"dms": { "dms": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_5",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ]
"quickshell": "quickshell"
}, },
"locked": { "locked": {
"lastModified": 1777431599, "lastModified": 1785111455,
"narHash": "sha256-g6r/Gx8PTDzO3jCNzzySA+Ff1lmLF9nDlMCNyyoQjoE=", "narHash": "sha256-aTNuC9NDBnYAeEtFsleeUwmGX3AZlKOutbl+LQRPkmQ=",
"owner": "AvengeMedia", "owner": "AvengeMedia",
"repo": "DankMaterialShell", "repo": "DankMaterialShell",
"rev": "eb5afcdc40ea5446c27e18552ff4a19f9daf9484", "rev": "069ddab041c738236a8910e4c39b65d9628d3018",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -443,6 +443,22 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat_7": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": { "flake-parts": {
"inputs": { "inputs": {
"nixpkgs-lib": "nixpkgs-lib" "nixpkgs-lib": "nixpkgs-lib"
@ -1314,7 +1330,7 @@
}, },
"nix-gaming": { "nix-gaming": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_6", "flake-compat": "flake-compat_7",
"flake-parts": "flake-parts_3", "flake-parts": "flake-parts_3",
"git-hooks": "git-hooks_2", "git-hooks": "git-hooks_2",
"nixpkgs": "nixpkgs_11" "nixpkgs": "nixpkgs_11"
@ -1877,7 +1893,7 @@
}, },
"pre-commit-hooks": { "pre-commit-hooks": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_5", "flake-compat": "flake-compat_6",
"gitignore": "gitignore", "gitignore": "gitignore",
"nixpkgs": [ "nixpkgs": [
"hyprland-plugins", "hyprland-plugins",
@ -1977,28 +1993,6 @@
"type": "github" "type": "github"
} }
}, },
"quickshell": {
"inputs": {
"nixpkgs": [
"dms",
"nixpkgs"
]
},
"locked": {
"lastModified": 1776854048,
"narHash": "sha256-lLbV66V3RMNp1l8/UelmR4YzoJ5ONtgvEtiUMJATH/o=",
"ref": "refs/heads/master",
"rev": "783c953987dc56ff0601abe6845ed96f1d00495a",
"revCount": 806,
"type": "git",
"url": "https://git.outfoxxed.me/quickshell/quickshell"
},
"original": {
"rev": "783c953987dc56ff0601abe6845ed96f1d00495a",
"type": "git",
"url": "https://git.outfoxxed.me/quickshell/quickshell"
}
},
"reenv": { "reenv": {
"inputs": { "inputs": {
"flake-parts": "flake-parts_4", "flake-parts": "flake-parts_4",

View file

@ -18,6 +18,11 @@
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=@" ]; options = [ "subvol=@" ];
}; };
fileSystems."/media/large" =
{ device = "/dev/disk/by-uuid/30f7482a-34d9-408b-8ccc-318788ff6b8d";
fsType = "btrfs";
options = [ "subvol=@" ];
};
fileSystems."/boot" = fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/3CC7-A154"; { device = "/dev/disk/by-uuid/3CC7-A154";