From 0e6b4e953afd26cef5afb4cc2d8a8e7ba5b02063 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Fri, 8 May 2026 23:12:26 +0800 Subject: bump: hypr --- dot-config/hypr/.luarc.json | 15 ++ dot-config/hypr/autostart.lua | 122 +++++++++++ dot-config/hypr/bg.conf | 2 +- dot-config/hypr/binds.lua | 234 +++++++++++++++++++++ dot-config/hypr/colors.conf | 40 ++-- dot-config/hypr/cursor.lua | 9 + dot-config/hypr/decor.lua | 121 +++++++++++ dot-config/hypr/decor.luabAial9.bck | 107 ++++++++++ dot-config/hypr/env.lua | 76 +++++++ dot-config/hypr/group.lua | 23 +++ dot-config/hypr/hyprland.conf | 6 +- dot-config/hypr/hyprland.lua | 106 ++++++++++ dot-config/hypr/hyprlandd.lua | 393 ++++++++++++++++++++++++++++++++++++ dot-config/hypr/hyprtoolkit.conf | 14 +- dot-config/hypr/input.lua | 18 ++ dot-config/hypr/layout.lua | 27 +++ dot-config/hypr/misc.lua | 28 +++ dot-config/hypr/perms.lua | 36 ++++ dot-config/hypr/render.lua | 11 + dot-config/hypr/rules.lua | 280 +++++++++++++++++++++++++ dot-config/hypr/vars.lua | 26 +++ 21 files changed, 1663 insertions(+), 31 deletions(-) create mode 100644 dot-config/hypr/.luarc.json create mode 100644 dot-config/hypr/autostart.lua create mode 100644 dot-config/hypr/binds.lua create mode 100644 dot-config/hypr/cursor.lua create mode 100644 dot-config/hypr/decor.lua create mode 100644 dot-config/hypr/decor.luabAial9.bck create mode 100644 dot-config/hypr/env.lua create mode 100644 dot-config/hypr/group.lua create mode 100644 dot-config/hypr/hyprland.lua create mode 100644 dot-config/hypr/hyprlandd.lua create mode 100644 dot-config/hypr/input.lua create mode 100644 dot-config/hypr/layout.lua create mode 100644 dot-config/hypr/misc.lua create mode 100644 dot-config/hypr/perms.lua create mode 100644 dot-config/hypr/render.lua create mode 100644 dot-config/hypr/rules.lua create mode 100644 dot-config/hypr/vars.lua diff --git a/dot-config/hypr/.luarc.json b/dot-config/hypr/.luarc.json new file mode 100644 index 00000000..ac416b5f --- /dev/null +++ b/dot-config/hypr/.luarc.json @@ -0,0 +1,15 @@ +{ + "workspace": { + "library": [ + "/usr/share/hypr/stubs" + ] + }, + "diagnostics": { + "globals": [ + "hl", + "vars", + "color", + "colors" + ] + } +} \ No newline at end of file diff --git a/dot-config/hypr/autostart.lua b/dot-config/hypr/autostart.lua new file mode 100644 index 00000000..6777954b --- /dev/null +++ b/dot-config/hypr/autostart.lua @@ -0,0 +1,122 @@ +hl.on("hyprland.start", function() + -- + -- AUTOSTART -- + -- + + -- Autostart necessary processes (like notifications daemons, status bars, etc.) + -- Or execute your favorite apps at launch like this: + + -- FIX CURSOR because keep reseting(see: https://www.reddit.com/r/hyprland/comments/1fgfmqb/gtk_apps_not_respecting_cursor_theme/) + -- hl.exec_cmd('gsettings set org.gnome.desktop.interface cursor-theme Bibata-Modern-Classic') + -- hl.exec_cmd('hyprctl setcursor Bibata-Modern-Classic 24') + + -- Launch hyprland plugins + hl.exec_cmd('hyprpm reload || hyprpm update') + -- Start pyprland daemon + -- hl.exec_cmd('pyprland') + + -- Waybar + -- hl.exec_cmd('waybar') + -- Quickshell + hl.exec_cmd('qs -d') + -- Hypr-Eco + -- hl.exec_cmd('hyprpaper') + -- hl.exec_cmd($'SCRIPTSDIR/hyprpaper.sh') + hl.exec_cmd(vars.bgChangerBin) + -- hl.exec_cmd($'SCRIPTSDIR/mpvpaper.sh') + hl.exec_cmd('hypridle') + + hl.exec_cmd('hyprsunset') + + -- XWayland + hl.exec_cmd('xrdb -merge ~/.Xresources') + + -- Auth agent + -- hl.exec_cmd('systemctl --user start plasma-polkit-agent -- doesnt respect themeing') + -- hl.exec_cmd(/'usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1') + hl.exec_cmd('systemctl --user start hyprpolkitagent') + -- keyring agent + hl.exec_cmd('gnome-keyring-daemon --start --components=pkcs11,secrets,ssh') + -- Location service + hl.exec_cmd('/usr/lib/geoclue-2.0/demos/agent &') + -- input method + hl.exec_cmd('fcitx5 -d') + -- app armor notifications + hl.exec_cmd('aa-notify -p -s 1 -w 60 -f /var/log/audit/audit.log') + + -- Clipboard history + -- hl.exec_cmd('wl-paste --watch cliphist store') + hl.exec_cmd('wl-paste --type text --watch cliphist store') + hl.exec_cmd('wl-paste --type image --watch cliphist store') + -- hl.exec_cmd('clipsync') + -- hl.exec_cmd('wl-clip-persist --clipboard regular') + + -- Notification agent + hl.exec_cmd('while true; do swaync; done') + + -- window swicher daemon + hl.exec_cmd('hyprswitch init --size-factor 5') + + -- audio auto adjust + -- hl.exec_cmd($'HOME/scripts/audio-autoAdjust.sh --daemon') + hl.exec_cmd('while true; do $HOME/.cargo/bin/audio-adjuster; done') + + -- effect for audio + hl.exec_cmd('while true; do easyeffects --gapplication-service; done') + + -- startup sound + hl.exec_cmd('$HOME/scripts/startupsound.sh') + + -- misc + -- sys hud + -- hl.exec_cmd('syshud -M audio_in,audio_out,brightness -b /sys/bus/ddcci/devices/ddcci13/backlight/ddcci13/') + hl.exec_cmd('syshud') + -- night light + -- hl.exec_cmd('gammastep -l geoclue2') + hl.exec_cmd('$HOME/scripts/hyprsunset.sh') + hl.exec_cmd('systemd-inhibit --who="Hyprland" --why="Handling power key" --what=handle-power-key sleep infinity') + + -- user applications + hl.exec_cmd('udiskie') + hl.exec_cmd('bitwarden-desktop') + -- hl.exec_cmd('kdeconnectd') + -- hl.exec_cmd('killall input-leap input-leaps; input-leap -- works with https://github.com/3l0w/Hyprland/tree/feat/input-capture-impl') + hl.exec_cmd('nextcloud --background') + -- hl.exec_cmd(['noinitialfocus; workspace, special] localsend --hidden') + -- hl.exec_cmd(['workspace 6 silent; noinitialfocus] discord --start-minimized') + hl.exec_cmd('beeper $waylandarg --no-sandbox --hidden --default-frame --enable-wayland-ime') + -- hl.exec_cmd('bash -c "echo 'ddcci 0x37' | sudo tee /sys/bus/i2c/devices/i2c-13/new_device"') + + -- Notify if stuff is already started + hl.exec_cmd("warp-cli status | grep Connect && notify-send 'warp-vpn' 'connected'") + hl.exec_cmd( + "pactl get-source-mute @DEFAULT_SOURCE@ | grep 'Mute: yes' >/dev/null && notify-send 'microphone' 'muted'") + hl.exec_cmd("modprobe uvcvideo || notify-send 'uvcvideo' 'disabled'") + hl.exec_cmd("pgrep -f gpu-screen-recorder && notify-send 'recorder' 'recording'") + + -- restore session + hl.exec_cmd('hyprsession') + + -- restore stuff like music etc + hl.exec_cmd(vars.SCRIPTSDIR .. '/hypridle.sh --stopidle') + + -- spam of notification at start(e.g. chromium) + hl.exec_cmd( + 'if [[ $(swaync-client --get-dnd) == "false" ]]; then swaync-client --dnd-on && sleep 3 && swaync-client --dnd-off; fi') + -- thunar launch faster + hl.exec_cmd('while true; do thunar --daemon; done') + + -- alacritty + -- hl.exec_cmd('while true; do alacritty --daemon; done') + + -- ghostty + -- hl.exec_cmd(['workspace, special] ghostty') + + -- backlight + -- hl.exec_cmd('wf-recorder --muxer=v4l2 --codec=rawvideo --file=/dev/video9 -x yuv420p') + hl.exec_cmd('while true; do hyperhdr; done') + -- hl.exec_cmd('video-guard') + + hl.exec_cmd('while true; do ~/scripts/flipper-ac.py "$(nc -lp 4883)"; done') + hl.exec_cmd('while true; do nc -lp 4884 -e "~/scripts/flipper-ac.py statusBool"; done') +end) diff --git a/dot-config/hypr/bg.conf b/dot-config/hypr/bg.conf index 87e649ca..a0d24de3 100644 --- a/dot-config/hypr/bg.conf +++ b/dot-config/hypr/bg.conf @@ -1 +1 @@ -$bg = /home/system/Pictures/wallpapers/a_train_tracks_in_a_foggy_day.jpg +$bg = /home/system/Pictures/wallpapers/geowaves.png diff --git a/dot-config/hypr/binds.lua b/dot-config/hypr/binds.lua new file mode 100644 index 00000000..2a11eed4 --- /dev/null +++ b/dot-config/hypr/binds.lua @@ -0,0 +1,234 @@ +hl.config({ + binds = { + -- allow_workspace_cycles = yes + -- movefocus_cycles_fullscreen = true + allow_pin_fullscreen = true, + scroll_event_delay = 0, + }, + +}) + +-- See https://wiki.hyprland.org/Configuring/Keywords/ +local mod = "SUPER" -- Sets "SUPER" key as main modifier + +-- Launching... +hl.bind(mod .. " + return", hl.dsp.exec_cmd(vars.termLaunch)) +hl.bind(mod .. " + SHIFT + return", hl.dsp.exec_cmd(vars.termfloat)) +-- bind = mod space, return, execr, $terminal start --class pseudo +hl.bind(mod .. " + ALT + Delete", hl.dsp.exec_cmd(vars.rofiexec .. "/rofi_powermenu")) +hl.bind("ALT + F1", hl.dsp.exec_cmd("qs ipc call launcher toggle")) +hl.bind("ALT + F2", hl.dsp.exec_cmd(vars.rofiexec .. "/rofi_runner")) +hl.bind("ALT + F4", hl.dsp.exec_cmd(vars.rofiexec .. "/sgpt")) +-- bind = mod, period, execr, $rofiexec/rofi_emoji +hl.bind(mod .. " + period", hl.dsp.exec_cmd("qs ipc call launcher standalone Emoji")) +-- utils +hl.bind(mod .. " + C", hl.dsp.exec_cmd(vars.rofiexec .. "/rofi_configs")) +-- bind = mod, m, execr, $rofiexec/rofi_music +hl.bind(mod .. " + N", hl.dsp.exec_cmd("nmd")) +-- bind = mod, r, execr, $rofiexec/rofi_asroot +-- bind = mod, s, execr, $rofiexec/rofi_screenshot +-- bind = mod, v, execr, $rofiexec/rofi_clipboard +hl.bind(mod .. " + V", hl.dsp.exec_cmd("qs ipc call launcher standalone Clip")) +-- bind = mod, w, execr, $rofiexec/rofi_windows +-- bind = mod, x, execr, $rofiexec/rofi_powermenu +-- bind = mod, b, execr, $rofiexec/rofi_bluetooth +-- GUI +hl.bind(mod .. " + SHIFT + F", hl.dsp.exec_cmd(vars.fileManager)) +-- bind = mod shift, w, execr, $browser --restore-last-session +hl.bind(mod .. " + SHIFT + W", hl.dsp.exec_cmd(vars.browser .. " -new-tab about:sessionrestore")) +hl.bind(mod .. " + SHIFT + E", hl.dsp.exec_cmd("zeditor")) +hl.bind(mod .. " + SHIFT + D", hl.dsp.exec_cmd("discord " .. vars.waylandarg)) +hl.bind(mod .. " + SHIFT + B", hl.dsp.exec_cmd("beeper " .. vars.waylandarg)) +-- CLI +hl.bind("CTRL + ALT + A", hl.dsp.exec_cmd(vars.termfloat .. " --title=pulsemixer -e pulsemixer")) +hl.bind("CTRL + ALT + R", hl.dsp.exec_cmd(vars.termfloat .. " --title=ranger -e ranger")) +hl.bind("CTRL + ALT + V", hl.dsp.exec_cmd(vars.termfloat .. " -e " .. vars.editor)) + +-- Emergency +hl.bind("CTRL + ALT + B", hl.dsp.exec_cmd(vars.termfloat .. " --title=btop -e sudo nice -n -20 ionice -c 1 sudo btop"), + { transparent = true, bypass = true }) +hl.bind("CTRL + ALT + Delete", hl.dsp.exec_cmd("$HOME/scripts/hyprshutdown.sh"), { transparent = true, bypass = true }) +hl.bind("CTRL + SHIFT + Escape", hl.dsp.exec_cmd("missioncenter"), { transparent = true, bypass = true }) + +-- Misc +-- bind = ctrl alt, m, execr, music +hl.bind(mod .. " + P", hl.dsp.exec_cmd("hyprpicker --autocopy")) +hl.bind("CTRL + ALT + L", hl.dsp.exec_cmd("loginctl lock-session"), { transparent = true, bypass = true }) +-- Misc +hl.bind(mod .. " + SHIFT + G", hl.dsp.exec_cmd("gtk-launch shortwave.desktop")) +-- bind = mod shift, c, execr, gtk-launch google-chat.desktop + +-- XF86 keys & Misc +-- hl.bind("XF86Print", hl.dsp.exec_cmd("pidof slurp || $HOME/scripts/sysutil.sh screenshot --now")) +hl.bind(mod .. " + SHIFT + S", hl.dsp.exec_cmd("$HOME/scripts/sysutil.sh screenshot --area")) + +-- Volume +hl.bind("XF86AudioRaiseVolume", + hl.dsp.exec_cmd( + "wpctl set-mute @DEFAULT_AUDIO_SINK@ 0 & wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ && pw-play /usr/share/sounds/freedesktop/stereo/audio-volume-change.oga"), + { repeating = true }) +hl.bind("XF86AudioLowerVolume", + hl.dsp.exec_cmd( + "wpctl set-mute @DEFAULT_AUDIO_SINK@ 0 & wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- && pw-play /usr/share/sounds/freedesktop/stereo/audio-volume-change.oga"), + { repeating = true }) +hl.bind("XF86AudioMute", + hl.dsp.exec_cmd( + "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && pw-play /usr/share/sounds/freedesktop/stereo/audio-volume-change.oga")) +hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle")) +hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl position 5+")) +hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl -p spotify next"), { long_press = true }) +hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl position 5-")) +hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl -p spotify previous"), { long_press = true }) +hl.bind("XF86AudioPlay", + hl.dsp.exec_cmd( + "[workspace 7 silent; noinitialfocus] playerctl -p spotify play-pause || LD_PRELOAD=/usr/lib/spotify-adblock.so spotify"), + { locked = true }) +-- bindl = ,XF86AudioPlay, exec, [workspace 7 silent; noinitialfocus] playerctl -p chromium play-pause || /opt/Aonsoku/aonsoku +hl.bind("XF86AudioPlay", + hl.dsp.exec_cmd( + "[workspace 7 silent; noinitialfocus] playerctl --all-players pause || LD_PRELOAD=/usr/lib/spotify-adblock.so spotify"), + { locked = true, long_press = true }) +-- bindol = ,XF86AudioPlay, exec, [workspace 7 silent; noinitialfocus] playerctl --all-players pause || /opt/Aonsoku/aonsoku +hl.bind("XF86AudioStop", hl.dsp.exec_cmd("playerctl -p spotify stop")) +hl.bind("XF86PowerOff", hl.dsp.exec_cmd("$HOME/scripts/hyprshutdown.sh")) + +-- Pause +hl.bind(mod .. " + Pause", hl.dsp.exec_cmd("hyprfreeze -s -a")) + +-- Print +hl.bind("Print", hl.dsp.exec_cmd("$HOME/scripts/hyprshot --now")) + +-- Brightness +hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("$HOME/scripts/sysutil.sh brightness --inc"), { repeating = true }) +hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("$HOME/scripts/sysutil.sh brightness --dec"), { repeating = true }) +-- binde = ,XF86MonBrightnessUp, execr, hyprctl hyprsunset gamma +5 +-- binde = ,XF86MonBrightnessDown, execr, hyprctl hyprsunset gamma -5 + +-- Window management +hl.bind(mod .. " + D", hl.dsp.window.move({ workspace = "special:minimized", follow = false })) +hl.bind(mod .. " + I", hl.dsp.workspace.toggle_special("minimized")) +hl.bind(mod .. " + I", hl.dsp.window.move({ workspace = "+0" })) +hl.bind(mod .. " + Q", hl.dsp.window.close(), { repeating = true }) +hl.bind(mod .. " + SHIFT + Q", hl.dsp.window.close({ force = true })) +hl.bind("CTRL + ALT + Escape", hl.dsp.exec_cmd("hyprctl kill")) +hl.bind("CTRL + " .. mod .. " + SHIFT + R", hl.dsp.exec_cmd("hyprctl reload")) + +-- restart bar +hl.bind("CTRL + " .. mod .. " + Escape", hl.dsp.exec_cmd("qs ipc call qs reload false || qs &")) + +-- reload wall +hl.bind(mod .. " + ALT + B", + hl.dsp.exec_cmd("killall wallust " .. vars.bgChangerBin .. " " .. vars.bgChanger .. "; " .. vars.bgChangerBin)) +-- hl.bind("CTRL + " .. mod .. " + ALT + up", hl.dsp.scroller("jump")) + +-- hyprswitch +hl.bind("ALT + Tab", + hl.dsp.exec_cmd( + "hyprswitch gui --mod-key alt_l --key tab --close mod-key-release --reverse-key=key=grave && hyprswitch dispatch")) +hl.bind("ALT + grave", + hl.dsp.exec_cmd( + "hyprswitch gui --mod-key alt_l --key tab --close mod-key-release --reverse-key=key=grave && hyprswitch dispatch -r")) + +hl.bind("CTRL + ALT + left", hl.dsp.focus({ workspace = "-1" }), { repeating = true }) +hl.bind("CTRL + ALT + right", hl.dsp.focus({ workspace = "+1" }), { repeating = true }) +hl.bind(mod .. " + SHIFT + H", hl.dsp.layout("swapcol l"), { repeating = true }) +hl.bind(mod .. " + SHIFT + L", hl.dsp.layout("swapcol r"), { repeating = true }) +hl.bind(mod .. " + SHIFT + K", hl.dsp.window.move({ direction = "u" }), { repeating = true }) +hl.bind(mod .. " + SHIFT + J", hl.dsp.window.move({ direction = "d" }), { repeating = true }) + +hl.bind("CTRL + " .. mod .. " + ALT + space", hl.dsp.layout("fit active"), { repeating = true }) + +hl.bind("CTRL + " .. mod .. " + SHIFT + H", hl.dsp.layout("colresize -conf"), { repeating = true }) +hl.bind("CTRL + " .. mod .. " + SHIFT + L", hl.dsp.layout("colresize +conf"), { repeating = true }) + +-- fixme +-- hl.bind("CTRL + " .. mod .. " + SHIFT + J", hl.dsp.window.resize({ x = "0%", y = "50%", relative = true }), +-- { repeating = true }) +-- hl.bind("CTRL + " .. mod .. " + SHIFT + K", hl.dsp.window.resize({ x = "0%", y = "-50%", relative = true }), +-- { repeating = true }) + +-- hl.bind(mod .. " + CTRL + H", hl.dsp.group.move_into_or_create({ direction = "l" }), { repeating = true }) +-- hl.bind(mod .. " + CTRL + L", hl.dsp.group.move_into_or_create({ direction = "r" }), { repeating = true }) +-- hl.bind(mod .. " + ALT + H", hl.dsp.group.move_out({ direction = "r" }), { repeating = true }) +-- hl.bind(mod .. " + ALT + L", hl.dsp.group.move_out({ direction = "l" }), { repeating = true }) + +-- zoom +local function update_zoom(multiplier) + local current_zoom = hl.get_config("cursor.zoom_factor") + local new_zoom = current_zoom * multiplier + if new_zoom < 1.0 then + new_zoom = 1.0 + end + hl.config({ + cursor = { + zoom_factor = new_zoom + } + }) +end + +local function reset_zoom() + hl.config({ + cursor = { + zoom_factor = 1.0 + } + }) +end + +hl.bind("SUPER + mouse_down", function() update_zoom(1.1) end) +hl.bind("SUPER + mouse_up", function() update_zoom(0.9) end) + +hl.bind("SUPER + equal", function() update_zoom(1.1) end, { repeating = true }) +hl.bind("SUPER + minus", function() update_zoom(0.9) end, { repeating = true }) + +hl.bind("SUPER + SHIFT + minus", reset_zoom) +hl.bind("SUPER + SHIFT + equal", reset_zoom) +hl.bind("SUPER + SHIFT + mouse_down", reset_zoom) +hl.bind("SUPER + SHIFT + mouse_up", reset_zoom) +-- spotify lyrics ig +-- bind = mod shift, u, execr, $SCRIPTSDIR/togglespot.sh + +-- window shortcuts +hl.bind(mod .. " + F", hl.dsp.window.fullscreen()) +hl.bind("CTRL + ALT + F", hl.dsp.window.fullscreen({ state = 1 })) +hl.bind(mod .. " + space", hl.dsp.window.float({ action = "toggle" })) +hl.bind(mod .. " + SHIFT + space", hl.dsp.window.pseudo()) -- dwindle +hl.bind(mod .. " + SHIFT + M", hl.dsp.layout("togglesplit")) -- dwindle +hl.bind(mod .. " + S", hl.dsp.window.pin()) + +-- Move focus with mainMod + arrow keys +hl.bind("CTRL + " .. mod .. " + K", hl.dsp.focus({ window = "floating" })) +hl.bind("CTRL + " .. mod .. " + J", hl.dsp.focus({ window = "tiled" })) +-- Move focus with mainMod + arrow keys / vim binds +local focus_dirs = { h = "l", l = "r", k = "u", j = "d" } +for k, v in pairs(focus_dirs) do + hl.bind(mod .. " + " .. string.upper(k), hl.dsp.focus({ direction = v }), { repeating = true }) +end + +hl.bind("CTRL + " .. mod .. " + K", hl.dsp.focus({ window = "floating" })) +hl.bind("CTRL + " .. mod .. " + J", hl.dsp.focus({ window = "tiled" })) + +-- Switch workspaces and move active window to a workspace with mod + [0-9] +for i = 1, 10 do + local key = i % 10 + hl.bind(mod .. " + " .. key, hl.dsp.focus({ workspace = i })) + hl.bind(mod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i, silent = (i == 10) and true or nil })) +end + +-- Move/resize windows with mainMod + LMB/RMB and dragging +hl.bind(mod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true }) +hl.bind(mod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true }) + +-- Autoclicker binds +local autoclickers = { + { bind = "mouse:276", name = "left", args = "" }, + { bind = "mouse:275", name = "right", args = " right" } +} + +for _, ac in ipairs(autoclickers) do + hl.bind(ac.bind, + hl.dsp.exec_cmd("exec -a autoclicker-" .. + ac.name .. " zsh -c 'while true; do wlrctl pointer click" .. ac.args .. "; sleep $((0.$RANDOM/10)); done'"), + { ignore_mods = true }) + hl.bind(ac.bind, hl.dsp.exec_cmd("kill $(pgrep -f autoclicker-" .. ac.name .. ")"), + { ignore_mods = true, release = true }) +end diff --git a/dot-config/hypr/colors.conf b/dot-config/hypr/colors.conf index 0fa10983..989a0da4 100644 --- a/dot-config/hypr/colors.conf +++ b/dot-config/hypr/colors.conf @@ -1,20 +1,20 @@ -$wallpaper = /home/system/Pictures/wallpapers/a_train_tracks_in_a_foggy_day.jpg -$background = rgb(000000) -$foreground = rgb(D8E4F4) -$cursor = rgb(9EABBC) -$color0 = rgb(000000) -$color1 = rgb(747B83) -$color2 = rgb(6C788A) -$color3 = rgb(6F7C8F) -$color4 = rgb(6A798E) -$color5 = rgb(7F9BBF) -$color6 = rgb(90B2DE) -$color7 = rgb(BFD0E6) -$color8 = rgb(8692A1) -$color9 = rgb(747B83) -$color10 = rgb(6C788A) -$color11 = rgb(6F7C8F) -$color12 = rgb(6A798E) -$color13 = rgb(7F9BBF) -$color14 = rgb(90B2DE) -$color15 = rgb(BFD0E6) +$wallpaper = /usr/share/backgrounds/nature/nature-11.jpg +$background = rgb(040000) +$foreground = rgb(F6E5CA) +$cursor = rgb(AD9B83) +$color0 = rgb(0F0B05) +$color1 = rgb(867567) +$color2 = rgb(877968) +$color3 = rgb(E06B4D) +$color4 = rgb(E06B4D) +$color5 = rgb(BA9359) +$color6 = rgb(E5B468) +$color7 = rgb(EAD1AB) +$color8 = rgb(A49278) +$color9 = rgb(867567) +$color10 = rgb(877968) +$color11 = rgb(E06B4D) +$color12 = rgb(E06B4D) +$color13 = rgb(BA9359) +$color14 = rgb(E5B468) +$color15 = rgb(EAD1AB) diff --git a/dot-config/hypr/cursor.lua b/dot-config/hypr/cursor.lua new file mode 100644 index 00000000..7eca0c19 --- /dev/null +++ b/dot-config/hypr/cursor.lua @@ -0,0 +1,9 @@ +hl.config({ + cursor = { + use_cpu_buffer = true, + -- no_hardware_cursors = true, + no_break_fs_vrr = true, + zoom_rigid = true, + persistent_warps = true, + } +}) diff --git a/dot-config/hypr/decor.lua b/dot-config/hypr/decor.lua new file mode 100644 index 00000000..b771e3a5 --- /dev/null +++ b/dot-config/hypr/decor.lua @@ -0,0 +1,121 @@ +hl.config({ + general = { + gaps_in = 3, + gaps_out = 7, + float_gaps = -1, + border_size = 3, + + col = { + active_border = { colors = { colors.color15, colors.color13, colors.color10, colors.color8, colors.color6, colors.color4, colors.color2, colors.color0, } }, -- angle = 45 + inactive_border = colors.background, + }, + }, + + decoration = { + rounding = 7, + rounding_power = 10, + border_part_of_window = true, + + -- Change transparency of focused and unfocused windows + -- active_opacity = 0.95 + inactive_opacity = 0.85, + fullscreen_opacity = 1.0, + + shadow = { + enabled = true, + range = 15, + render_power = 4, + -- sharp = true, + -- ignore_window = true, + color = colors.background, + -- color = rgba(1a1a1aee), + }, + + blur = { + enabled = true, + -- heavy, + size = 5, -- 10, + passes = 5, -- 4, + -- light, + -- size = 8, + -- passes = 3, + -- noise = 0, + -- crazy & cool options, + -- brightness = 1, + -- contrast = 2, + -- vibrancy = 1.5, + -- vibrancy_darkness = 1, + popups = true, + ignore_opacity = true, -- KEEP THIS, THIS MAKE BLUR ACTUALLY BLUR COOL + input_methods = true, + special = true, + }, + }, + + animations = { + enabled = true, + }, +}) + + +-- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/ + +-- hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" }) + +-- -- Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + +-- hl.curve("windowovershot", { type = "bezier", points = { {1, 1}, {0, 1.05} } }) +-- hl.curve("overshot", { type = "bezier", points = { {0.5, 1}, {0, 1.2} } }) +-- hl.curve("sovershot", { type = "bezier", points = { {0.5, 1}, {0, 1.1} } }) +-- -- hl.curve("outsideIn", { type = "bezier", points = { {0.5, 1.1}, {0, 0.9} } }) +-- hl.curve("slow-fast", { type = "bezier", points = { {1, 0.33}, {0.3, 1} } }) +hl.curve("fast-slow", { type = "bezier", points = { { 0.33, 0.8 }, { 0, 1 } } }) +-- hl.curve("linear", { type = "bezier", points = { {0, 0}, {1, 1} } }) +-- -- hl.curve("linear", { type = "bezier", points = { {0, 0}, {1, 1} } }) +-- -- hl.curve("md3_standard", { type = "bezier", points = { {0.2, 0}, {0, 1} } }) +hl.curve("md3_decel", { type = "bezier", points = { { 0.05, 0.7 }, { 0.1, 1 } } }) +-- -- hl.curve("md3_accel", { type = "bezier", points = { {0.3, 0}, {0.8, 0.15} } }) +-- -- hl.curve("overshot", { type = "bezier", points = { {0.05, 0.9}, {0.1, 1.1} } }) +-- -- hl.curve("crazyshot", { type = "bezier", points = { {0.1, 1.5}, {0.76, 0.92} } }) +-- -- hl.curve("hyprnostretch", { type = "bezier", points = { {0.05, 0.9}, {0.1, 1.0} } }) +-- -- hl.curve("menu_decel", { type = "bezier", points = { {0.1, 1}, {0, 1} } }) +-- -- hl.curve("menu_accel", { type = "bezier", points = { {0.38, 0.04}, {1, 0.07} } }) +-- -- hl.curve("easeInOutCirc", { type = "bezier", points = { {0.85, 0}, {0.15, 1} } }) +-- -- hl.curve("easeOutCirc", { type = "bezier", points = { {0, 0.55}, {0.45, 1} } }) +-- -- hl.curve("easeOutExpo", { type = "bezier", points = { {0.16, 1}, {0.3, 1} } }) +-- -- hl.curve("softAcDecel", { type = "bezier", points = { {0.26, 0.26}, {0.15, 1} } }) +-- hl.curve("md2", { type = "bezier", points = { {0.4, 0}, {0.2, 1} } }) -- use with .2s duration + +hl.animation({ leaf = "fade", enabled = true, speed = 4, bezier = "md3_decel" }) + +-- hl.animation({ leaf = "windows", enabled = true, speed = 3, bezier = "overshot", style = "gnome" }) +-- -- hl.animation({ leaf = "windowsOut", enabled = true, speed = 2, bezier = "slow-fast", style = "popin 15%" }) +-- hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.5, bezier = "slow-fast", style = "popin 15%" }) +-- -- hl.animation({ leaf = "windowsMove", enabled = true, speed = 2, bezier = "md3_accel" }) -- when new window appears, it will block it for a while since its slower then windowIn animation +-- hl.animation({ leaf = "workspaces", enabled = true, speed = 5, bezier = "fast-slow", style = "slide" }) +-- hl.animation({ leaf = "workspacesIn", enabled = true, speed = 5, bezier = "fast-slow", style = "slidefade" }) +-- hl.animation({ leaf = "borderangle", enabled = true, speed = 100, bezier = "linear", style = "loop" }) + +-- hl.animation({ leaf = "layers", enabled = true, speed = 3, bezier = "sovershot", style = "popin 15%" }) + +hl.animation({ leaf = "zoomFactor", enabled = true, speed = 3, bezier = "fast-slow" }) + +hl.curve("spring", { type = "spring", mass = 3, stiffness = 200, dampening = 35 }) + +hl.curve("open", { type = "spring", mass = 4, stiffness = 325, dampening = 46 }) +hl.curve("move", { type = "spring", mass = 4, stiffness = 375, dampening = 48 }) + +hl.curve("workspace", { type = "spring", mass = 4, stiffness = 325, dampening = 50 }) +hl.curve("workspaceIn", { type = "spring", mass = 4, stiffness = 375, dampening = 51 }) + +-- hl.curve("zoom", { type = "spring", mass = 3, stiffness = 225, dampening = 38 }) + +hl.animation({ leaf = "global", enabled = true, speed = 3, spring = "spring" }) + +hl.animation({ leaf = "windowsIn", enabled = true, speed = 3, spring = "open" }) +hl.animation({ leaf = "windowsMove", enabled = true, speed = 3, spring = "move" }) + +hl.animation({ leaf = "workspaces", enabled = true, speed = 3, spring = "workspace" }) +hl.animation({ leaf = "workspacesIn", enabled = true, speed = 3, spring = "workspaceIn", style = "slidefade" }) + +-- hl.animation({ leaf = "zoomFactor", enabled = true, speed = 3, spring = "zoom" }) diff --git a/dot-config/hypr/decor.luabAial9.bck b/dot-config/hypr/decor.luabAial9.bck new file mode 100644 index 00000000..77528ca8 --- /dev/null +++ b/dot-config/hypr/decor.luabAial9.bck @@ -0,0 +1,107 @@ +hl.config({ + general = { + gaps_in = 3, + gaps_out = 7, + float_gaps = -1, + border_size = 3, + + col = { + active_border = { colors = { colors.color15, colors.color13, colors.color10, colors.color8, colors.color6, colors.color4, colors.color2, colors.color0, } }, -- angle = 45 + inactive_border = colors.background, + }, + }, + + decoration = { + rounding = 7, + rounding_power = 10, + border_part_of_window = true, + + -- Change transparency of focused and unfocused windows + -- active_opacity = 0.95 + inactive_opacity = 0.85, + fullscreen_opacity = 1.0, + + shadow = { + enabled = true, + range = 15, + render_power = 4, + -- sharp = true, + -- ignore_window = true, + color = colors.background, + -- color = rgba(1a1a1aee), + }, + + blur = { + enabled = true, + -- heavy, + size = 5, -- 10, + passes = 5, -- 4, + -- light, + -- size = 8, + -- passes = 3, + -- noise = 0, + -- crazy & cool options, + -- brightness = 1, + -- contrast = 2, + -- vibrancy = 1.5, + -- vibrancy_darkness = 1, + popups = true, + ignore_opacity = true, -- KEEP THIS, THIS MAKE BLUR ACTUALLY BLUR COOL + input_methods = true, + special = true, + }, + }, + + animations = { + enabled = true, + }, +}) + + +-- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/ + +-- hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" }) + +-- -- Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + +-- hl.curve("windowovershot", { type = "bezier", points = { {1, 1}, {0, 1.05} } }) +-- hl.curve("overshot", { type = "bezier", points = { {0.5, 1}, {0, 1.2} } }) +-- hl.curve("sovershot", { type = "bezier", points = { {0.5, 1}, {0, 1.1} } }) +-- -- hl.curve("outsideIn", { type = "bezier", points = { {0.5, 1.1}, {0, 0.9} } }) +-- hl.curve("slow-fast", { type = "bezier", points = { {1, 0.33}, {0.3, 1} } }) +-- hl.curve("fast-slow", { type = "bezier", points = { {0.33, 0.8}, {0, 1} } }) +-- hl.curve("linear", { type = "bezier", points = { {0, 0}, {1, 1} } }) +-- -- hl.curve("linear", { type = "bezier", points = { {0, 0}, {1, 1} } }) +-- -- hl.curve("md3_standard", { type = "bezier", points = { {0.2, 0}, {0, 1} } }) +hl.curve("md3_decel", { type = "bezier", points = { { 0.05, 0.7 }, { 0.1, 1 } } }) +-- -- hl.curve("md3_accel", { type = "bezier", points = { {0.3, 0}, {0.8, 0.15} } }) +-- -- hl.curve("overshot", { type = "bezier", points = { {0.05, 0.9}, {0.1, 1.1} } }) +-- -- hl.curve("crazyshot", { type = "bezier", points = { {0.1, 1.5}, {0.76, 0.92} } }) +-- -- hl.curve("hyprnostretch", { type = "bezier", points = { {0.05, 0.9}, {0.1, 1.0} } }) +-- -- hl.curve("menu_decel", { type = "bezier", points = { {0.1, 1}, {0, 1} } }) +-- -- hl.curve("menu_accel", { type = "bezier", points = { {0.38, 0.04}, {1, 0.07} } }) +-- -- hl.curve("easeInOutCirc", { type = "bezier", points = { {0.85, 0}, {0.15, 1} } }) +-- -- hl.curve("easeOutCirc", { type = "bezier", points = { {0, 0.55}, {0.45, 1} } }) +-- -- hl.curve("easeOutExpo", { type = "bezier", points = { {0.16, 1}, {0.3, 1} } }) +-- -- hl.curve("softAcDecel", { type = "bezier", points = { {0.26, 0.26}, {0.15, 1} } }) +-- hl.curve("md2", { type = "bezier", points = { {0.4, 0}, {0.2, 1} } }) -- use with .2s duration + +hl.animation({ leaf = "fade", enabled = true, speed = 4, bezier = "md3_decel" }) + +-- hl.animation({ leaf = "windows", enabled = true, speed = 3, bezier = "overshot", style = "gnome" }) +-- -- hl.animation({ leaf = "windowsOut", enabled = true, speed = 2, bezier = "slow-fast", style = "popin 15%" }) +-- hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.5, bezier = "slow-fast", style = "popin 15%" }) +-- -- hl.animation({ leaf = "windowsMove", enabled = true, speed = 2, bezier = "md3_accel" }) -- when new window appears, it will block it for a while since its slower then windowIn animation +-- hl.animation({ leaf = "workspaces", enabled = true, speed = 5, bezier = "fast-slow", style = "slide" }) +-- hl.animation({ leaf = "workspacesIn", enabled = true, speed = 5, bezier = "fast-slow", style = "slidefade" }) +-- hl.animation({ leaf = "borderangle", enabled = true, speed = 100, bezier = "linear", style = "loop" }) + +-- hl.animation({ leaf = "layers", enabled = true, speed = 3, bezier = "sovershot", style = "popin 15%" }) + +-- hl.animation({ leaf = "zoomFactor", enabled = true, speed = 3, bezier = "fast-slow" }) + +hl.curve("spring", { type = "spring", mass = 4, stiffness = 250, dampening = 32 }) +hl.curve("open", { type = "spring", mass = 4, stiffness = 350, dampening = 32 }) + +hl.animation({ leaf = "global", enabled = true, speed = 3, spring = "spring" }) +hl.animation({ leaf = "windows", enabled = true, speed = 1, spring = "open" }) diff --git a/dot-config/hypr/env.lua b/dot-config/hypr/env.lua new file mode 100644 index 00000000..cc4a513a --- /dev/null +++ b/dot-config/hypr/env.lua @@ -0,0 +1,76 @@ +-- +-- ENVIRONMENT VARIABLES -- +-- + +-- See https://wiki.hyprland.org/Configuring/Environment-variables/ + +hl.env("XCURSOR_SIZE", "24") +hl.env("XCURSOR_THEME", "Bibata-Modern-Classic") +hl.env("HYPRCURSOR_SIZE", "24") +hl.env("HYPRCURSOR_THEME", "Bibata-Modern-Classic") + +-- Nvidia +hl.env("LIBVA_DRIVER_NAME", "nvidia") +hl.env("GBM_BACKEND", "nvidia-drm") +hl.env("__GLX_VENDOR_LIBRARY_NAME", "nvidia") +-- hl.env("__GL_GSYNC_ALLOWED", "1") +hl.env("VDPAU_DRIVER", "nvidia") +hl.env("NVD_BACKEND", "direct") +-- just in case if it tried to use igpu for hardware accel +-- hl.env("AQ_DRM_DEVICES", "/dev/dri/card1:/dev/dri/card0") + +-- XDG +hl.env("XDG_SESSION_DESKTOP", "Hyprland") +-- set by hyprland +-- hl.env("XDG_CURRENT_DESKTOP", "Hyprland") +-- hl.env("XDG_SESSION_TYPE", "wayland") + +-- QT & scale +hl.env("QT_AUTO_SCREEN_SCALE_FACTOR", "1") +hl.env("QT_QPA_PLATFORM", "wayland;xcb") +hl.env("QT_WAYLAND_DISABLE_WINDOWDECORATION", "1") +hl.env("QT_QPA_PLATFORMTHEME", "qt5ct:qt6ct") +-- hl.env("SDL_VIDEODRIVER", "wayland") +hl.env("QT_ENABLE_HIGHDPI_SCALE", "1") +-- hl.env("QT_SCALE_FACTOR", "2") + +-- java fix +hl.env("_JAVA_AWT_WM_NONREPARENTING", "1") +-- hl.env("GDK_DPI_SCALE", "1.5") + +-- Electron blurry etc fix +hl.env("ELECTRON_OZONE_PLATFORM_HINT", "wayland") + +-- Input method +-- hl.env("GTK_IM_MODULE", "fcitx") +hl.env("QT_IM_MODULE", "fcitx") +hl.env("QT_IM_MODULES", "wayland;fcitx;ibus") +hl.env("XMODIFIERS", "@im=fcitx") +hl.env("SDL_IM_MODULE", "fcitx") +hl.env("GLFW_IM_MODULE", "fcitx") +hl.env("INPUT_METHOD", "fcitx") +hl.env("XMODIFIERS", "fcitx") +hl.env("IMSETTINGS_MODULE", "fcitx") + +-- wine +hl.env("WINEPREFIX", "/opt/windows.wine") + +-- howdy avoid spam from gstreamer +-- hl.env("OPENCV_LOG_LEVEL", "ERROR") + +-- temp fix for gtk apps seg fault +-- hl.env("GSK_RENDERER", "ngl") + +-- Toolkit backend +hl.env("GDK_BACKEND", "wayland, x11, *") +hl.env("QT_QPA_PLATFORM", "wayland;xcb") +hl.env("SDL_VIDEODRIVER", "wayland, x11") -- Remove or set to x11 if games that provide older versions of SDL cause compatibility issues" + +-- firefox +hl.env("MOZ_DISABLE_RDD_SANDBOX", "1") +hl.env("MOZ_ENABLE_WAYLAND", "1") + +-- defaults +hl.env("BROWSER", "zen-browser") +hl.env("EDITOR", "hx") +hl.env("TERM", "kitty") diff --git a/dot-config/hypr/group.lua b/dot-config/hypr/group.lua new file mode 100644 index 00000000..ad71bcb8 --- /dev/null +++ b/dot-config/hypr/group.lua @@ -0,0 +1,23 @@ +hl.config({ + group = { + auto_group = false, + -- disbandgrouponnone = true, + groupbar = { + -- enabled = false, + render_titles = false, + text_color = colors.foreground, + col = { + active = colors.color0, + inactive = colors.background, + locked_active = colors.color0, + locked_inactive = colors.background, + }, + }, + col = { + border_active = { colors = { colors.color0, colors.color15, colors.foreground, colors.cursor } }, + border_inactive = colors.background, + border_locked_active = { colors = { colors.color0, colors.background } }, + border_locked_inactive = colors.background, + }, + } +}) diff --git a/dot-config/hypr/hyprland.conf b/dot-config/hypr/hyprland.conf index a79d913c..b46aa20a 100644 --- a/dot-config/hypr/hyprland.conf +++ b/dot-config/hypr/hyprland.conf @@ -32,8 +32,8 @@ $HYPRDIR = $HOME/.config/hypr $WAYBARDIR = $HOME/.config/waybar $SCRIPTSDIR = $HOME/scripts $rofiexec = $HOME/.config/rofi/scripts -$bgChangerBin = $SCRIPTSDIR/walls/swww.sh -$bgChanger = swww.sh +$bgChangerBin = $SCRIPTSDIR/walls/awww.sh +$bgChanger = awww.sh source = $HYPRDIR/colors.conf @@ -207,7 +207,7 @@ misc { disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( disable_autoreload = false # vfr = false - vrr = 1 # 1 = always, 2 = only in full screen + # vrr = 1 # 1 = always, 2 = only in full screen # mouse_move_enables_dpms = true key_press_enables_dpms = true # animate_manual_resizes = true diff --git a/dot-config/hypr/hyprland.lua b/dot-config/hypr/hyprland.lua new file mode 100644 index 00000000..2fe1d687 --- /dev/null +++ b/dot-config/hypr/hyprland.lua @@ -0,0 +1,106 @@ +------------------ +---- MONITORS ---- +------------------ + +-- See https://wiki.hypr.land/Configuring/Basics/Monitors/ +hl.monitor({ + output = "", + mode = "highres@highrr", + position = "auto", + scale = "auto", + bitdepth = 10 +}) + + +--------------------- +------ GLOBALS ------ +--------------------- + +vars = require("vars") +colors = require("colors") + +------------------- +---- AUTOSTART ---- +------------------- + +require("autostart") + + +------------------------------- +---- ENVIRONMENT VARIABLES ---- +------------------------------- + +require("env") + +----------------------- +----- PERMISSIONS ----- +----------------------- + +require("perms") + +----------------------- +---- LOOK AND FEEL ---- +----------------------- + +require("decor") + +----------------------- +------- LAYOUTS ------- +----------------------- + +-- See https://wiki.hypr.land/Configuring/Layouts/Dwindle-Layout/ for more +require("layout") + +---------------- +---- MISC ---- +---------------- + +require("misc") + +---------------- +---- GROUP ---- +---------------- + +require("group") + +--------------- +---- RENDER --- +--------------- + +require("render") + +--------------- +---- INPUT ---- +--------------- + +require("input") + +require("cursor") + +--------------------- +---- KEYBINDINGS ---- +--------------------- + +require("binds") + +-------------------------------- +---- WINDOWS AND WORKSPACES ---- +-------------------------------- + +require("rules") + + +-- hl.config({ +-- debug = { +-- -- disable_scale_checks = true, +-- disable_logs = false, +-- -- overlay = true, -- show fps +-- suppress_errors = true, +-- -- pass = true, +-- error_position = 1, +-- -- log_damage = true, +-- -- damage_blink = true, +-- full_cm_proto = true, +-- } + +-- }) diff --git a/dot-config/hypr/hyprlandd.lua b/dot-config/hypr/hyprlandd.lua new file mode 100644 index 00000000..df797500 --- /dev/null +++ b/dot-config/hypr/hyprlandd.lua @@ -0,0 +1,393 @@ +-- This is an example Hyprland Lua config file. +-- Refer to the wiki for more information. +-- https://wiki.hypr.land/Configuring/Start/ + +-- Please note not all available settings / options are set here. +-- For a full list, see the wiki + +-- You can (and should!!) split this configuration into multiple files +-- Create your files separately and then require them like this: +-- require("myColors") + + +------------------ +---- MONITORS ---- +------------------ + +-- See https://wiki.hypr.land/Configuring/Basics/Monitors/ +hl.monitor({ + output = "", + mode = "preferred", + position = "auto", + scale = "auto", +}) + + +--------------------- +---- MY PROGRAMS ---- +--------------------- + +-- Set programs that you use +local terminal = "kitty" +local fileManager = "dolphin" +local menu = "hyprlauncher" + + +------------------- +---- AUTOSTART ---- +------------------- + +-- See https://wiki.hypr.land/Configuring/Basics/Autostart/ + +-- Autostart necessary processes (like notifications daemons, status bars, etc.) +-- Or execute your favorite apps at launch like this: +-- +-- hl.on("hyprland.start", function () +-- hl.exec_cmd(terminal) +-- hl.exec_cmd("nm-applet") +-- hl.exec_cmd("waybar & hyprpaper & firefox") +-- end) + + +------------------------------- +---- ENVIRONMENT VARIABLES ---- +------------------------------- + +-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Environment-variables/ + +hl.env("XCURSOR_SIZE", "24") +hl.env("HYPRCURSOR_SIZE", "24") + + +----------------------- +----- PERMISSIONS ----- +----------------------- + +-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Permissions/ +-- Please note permission changes here require a Hyprland restart and are not applied on-the-fly +-- for security reasons + +-- hl.config({ +-- ecosystem = { +-- enforce_permissions = true, +-- }, +-- }) + +-- hl.permission("/usr/(bin|local/bin)/grim", "screencopy", "allow") +-- hl.permission("/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland", "screencopy", "allow") +-- hl.permission("/usr/(bin|local/bin)/hyprpm", "plugin", "allow") + + +----------------------- +---- LOOK AND FEEL ---- +----------------------- + +-- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/ +hl.config({ + general = { + gaps_in = 5, + gaps_out = 20, + + border_size = 2, + + col = { + active_border = { colors = {"rgba(33ccffee)", "rgba(00ff99ee)"}, angle = 45 }, + inactive_border = "rgba(595959aa)", + }, + + -- Set to true to enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = false, + + -- Please see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Tearing/ before you turn this on + allow_tearing = false, + + layout = "scrolling", + }, + + decoration = { + rounding = 10, + rounding_power = 2, + + -- Change transparency of focused and unfocused windows + active_opacity = 1.0, + inactive_opacity = 1.0, + + shadow = { + enabled = true, + range = 4, + render_power = 3, + color = 0xee1a1a1a, + }, + + blur = { + enabled = true, + size = 3, + passes = 1, + vibrancy = 0.1696, + }, + }, + + animations = { + enabled = true, + }, +}) + +-- Default curves and animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/ +hl.curve("easeOutQuint", { type = "bezier", points = { {0.23, 1}, {0.32, 1} } }) +hl.curve("easeInOutCubic", { type = "bezier", points = { {0.65, 0.05}, {0.36, 1} } }) +hl.curve("linear", { type = "bezier", points = { {0, 0}, {1, 1} } }) +hl.curve("almostLinear", { type = "bezier", points = { {0.5, 0.5}, {0.75, 1} } }) +hl.curve("quick", { type = "bezier", points = { {0.15, 0}, {0.1, 1} } }) + +-- Default springs +hl.curve("easy", { type = "spring", mass = 1, stiffness = 71.2633, dampening = 15.8273644 }) + +hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" }) +hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" }) +hl.animation({ leaf = "windows", enabled = true, speed = 4.79, spring = "easy" }) +hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, spring = "easy", style = "popin 87%" }) +hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.49, bezier = "linear", style = "popin 87%" }) +hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" }) +hl.animation({ leaf = "fadeOut", enabled = true, speed = 1.46, bezier = "almostLinear" }) +hl.animation({ leaf = "fade", enabled = true, speed = 3.03, bezier = "quick" }) +hl.animation({ leaf = "layers", enabled = true, speed = 3.81, bezier = "easeOutQuint" }) +hl.animation({ leaf = "layersIn", enabled = true, speed = 4, bezier = "easeOutQuint", style = "fade" }) +hl.animation({ leaf = "layersOut", enabled = true, speed = 1.5, bezier = "linear", style = "fade" }) +hl.animation({ leaf = "fadeLayersIn", enabled = true, speed = 1.79, bezier = "almostLinear" }) +hl.animation({ leaf = "fadeLayersOut", enabled = true, speed = 1.39, bezier = "almostLinear" }) +hl.animation({ leaf = "workspaces", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" }) +hl.animation({ leaf = "workspacesIn", enabled = true, speed = 1.21, bezier = "almostLinear", style = "fade" }) +hl.animation({ leaf = "workspacesOut", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" }) +hl.animation({ leaf = "zoomFactor", enabled = true, speed = 7, bezier = "quick" }) + +-- Ref https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/ +-- "Smart gaps" / "No gaps when only" +-- uncomment all if you wish to use that. +-- hl.workspace_rule({ workspace = "w[tv1]", gaps_out = 0, gaps_in = 0 }) +-- hl.workspace_rule({ workspace = "f[1]", gaps_out = 0, gaps_in = 0 }) +-- hl.window_rule({ +-- name = "no-gaps-wtv1", +-- match = { float = false, workspace = "w[tv1]" }, +-- border_size = 0, +-- rounding = 0, +-- }) +-- hl.window_rule({ +-- name = "no-gaps-f1", +-- match = { float = false, workspace = "f[1]" }, +-- border_size = 0, +-- rounding = 0, +-- }) + +-- See https://wiki.hypr.land/Configuring/Layouts/Dwindle-Layout/ for more +hl.config({ + dwindle = { + preserve_split = true, -- You probably want this + }, +}) + +-- See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more +hl.config({ + master = { + new_status = "master", + }, +}) + +-- See https://wiki.hypr.land/Configuring/Layouts/Scrolling-Layout/ for more +hl.config({ + scrolling = { + fullscreen_on_one_column = true, + }, +}) + +---------------- +---- MISC ---- +---------------- + +hl.config({ + misc = { + force_default_wallpaper = -1, -- Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = false, -- If true disables the random hyprland logo / anime girl background. :( + }, +}) + + +--------------- +---- INPUT ---- +--------------- + +hl.config({ + input = { + kb_layout = "us", + kb_variant = "", + kb_model = "", + kb_options = "", + kb_rules = "", + + follow_mouse = 1, + + sensitivity = 0, -- -1.0 - 1.0, 0 means no modification. + + touchpad = { + natural_scroll = false, + }, + }, +}) + +hl.gesture({ + fingers = 3, + direction = "horizontal", + action = "workspace" +}) + +-- Example per-device config +-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Devices/ for more +hl.device({ + name = "epic-mouse-v1", + sensitivity = -0.5, +}) + + +--------------------- +---- KEYBINDINGS ---- +--------------------- + +local mainMod = "SUPER" -- Sets "Windows" key as main modifier + +-- Example binds, see https://wiki.hypr.land/Configuring/Basics/Binds/ for more +hl.bind(mainMod .. " + Q", hl.dsp.exec_cmd(terminal)) +local closeWindowBind = hl.bind(mainMod .. " + C", hl.dsp.window.close()) +-- closeWindowBind:set_enabled(false) +hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'")) +hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(fileManager)) +hl.bind(mainMod .. " + V", hl.dsp.window.float({ action = "toggle" })) +hl.bind(mainMod .. " + R", hl.dsp.exec_cmd(menu)) +hl.bind(mainMod .. " + P", hl.dsp.window.pseudo()) +hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only + +-- Move focus with mainMod + arrow keys +hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" })) +hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" })) +hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" })) +hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" })) + +-- Switch workspaces with mainMod + [0-9] +-- Move active window to a workspace with mainMod + SHIFT + [0-9] +for i = 1, 10 do + local key = i % 10 -- 10 maps to key 0 + hl.bind(mainMod .. " + " .. key, hl.dsp.focus({ workspace = i})) + hl.bind(mainMod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i })) +end + +-- Example special workspace (scratchpad) +hl.bind(mainMod .. " + S", hl.dsp.workspace.toggle_special("magic")) +hl.bind(mainMod .. " + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" })) + +-- Scroll through existing workspaces with mainMod + scroll +hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" })) +hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" })) + +-- Move/resize windows with mainMod + LMB/RMB and dragging +hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true }) +hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true }) + +-- Laptop multimedia keys for volume and LCD brightness +hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true }) +hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true }) +hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { locked = true, repeating = true }) +hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true }) +hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), { locked = true, repeating = true }) +hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), { locked = true, repeating = true }) + +-- Requires playerctl +hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true }) +hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true }) +hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true }) +hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true }) + + +-------------------------------- +---- WINDOWS AND WORKSPACES ---- +-------------------------------- + +-- See https://wiki.hypr.land/Configuring/Basics/Window-Rules/ +-- and https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/ + +-- Example window rules that are useful + +local suppressMaximizeRule = hl.window_rule({ + -- Ignore maximize requests from all apps. You'll probably like this. + name = "suppress-maximize-events", + match = { class = ".*" }, + + suppress_event = "maximize", +}) +-- suppressMaximizeRule:set_enabled(false) + +hl.window_rule({ + -- Fix some dragging issues with XWayland + name = "fix-xwayland-drags", + match = { + class = "^$", + title = "^$", + xwayland = true, + float = true, + fullscreen = false, + pin = false, + }, + + no_focus = true, +}) + +-- Layer rules also return a handle. +-- local overlayLayerRule = hl.layer_rule({ +-- name = "no-anim-overlay", +-- match = { namespace = "^my-overlay$" }, +-- no_anim = true, +-- }) +-- overlayLayerRule:set_enabled(false) + +-- Hyprland-run windowrule +hl.window_rule({ + name = "move-hyprland-run", + match = { class = "hyprland-run" }, + + move = "20 monitor_h-120", + float = true, +}) + +vars = require("vars") +require("rules") +local mod = "SUPER" -- Sets "SUPER" key as main modifier +hl.bind(mod .. " + SHIFT + return", hl.dsp.exec_cmd(vars.termfloat)) +hl.config({ + dwindle = { + preserve_split = true, -- You probably want this + force_split = 3, + precise_mouse_move = true + }, + + -- See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more + master = { + new_status = "inherits", + }, + + -- See https://wiki.hypr.land/Configuring/Layouts/Scrolling-Layout/ for more + scrolling = { + follow_min_visible = 0.01, + fullscreen_on_one_column = true, + -- explicit_column_widths = 0.333, + -- 0.5, + -- 0.667, + -- 1.0 + -- focus_fit_method = 1 + }, +}) + + +-- Move focus with mainMod + arrow keys / vim binds +local focus_dirs = { h = "l", l = "r", k = "u", j = "d" } +for k, v in pairs(focus_dirs) do + hl.bind(mod .. " + " .. string.upper(k), hl.dsp.focus({ direction = v }), { repeating = true }) +end + + diff --git a/dot-config/hypr/hyprtoolkit.conf b/dot-config/hypr/hyprtoolkit.conf index 81acf054..57deedd1 100644 --- a/dot-config/hypr/hyprtoolkit.conf +++ b/dot-config/hypr/hyprtoolkit.conf @@ -1,7 +1,7 @@ -background = FF000000 -base = FF000000 -text = FFD8E4F4 -alternate_base = FF8692A1 -bright_text = FFBFD0E6 -accent = FF6C788A -accent_secondary = FF6A798E +background = FF151218 +base = FF413C44 +text = FFEEF9FF +alternate_base = FF9CA7AD +bright_text = FFDFEEF7 +accent = FF618A85 +accent_secondary = FFAEDAFC diff --git a/dot-config/hypr/input.lua b/dot-config/hypr/input.lua new file mode 100644 index 00000000..f760aebc --- /dev/null +++ b/dot-config/hypr/input.lua @@ -0,0 +1,18 @@ +hl.config({ + input = { + kb_layout = us, + -- kb_options = caps:swapescape -- changed in kb settings + + follow_mouse = 1, -- 2 + scroll_factor = 1.0, + + sensitivity = 0, -- -1.0 - 1.0, 0 means no modification. + -- force_no_accel = true, + numlock_by_default = true, + repeat_delay = 300, + -- touchpad { + -- natural_scroll = false + -- } + } + +}) diff --git a/dot-config/hypr/layout.lua b/dot-config/hypr/layout.lua new file mode 100644 index 00000000..57cb6872 --- /dev/null +++ b/dot-config/hypr/layout.lua @@ -0,0 +1,27 @@ +hl.config({ + general = { + layout = "scrolling", + }, + + dwindle = { + preserve_split = true, -- You probably want this + force_split = 3, + precise_mouse_move = true + }, + + -- See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more + master = { + new_status = "inherits", + }, + + -- See https://wiki.hypr.land/Configuring/Layouts/Scrolling-Layout/ for more + scrolling = { + follow_min_visible = 0.01, + fullscreen_on_one_column = true, + -- explicit_column_widths = 0.333, + -- 0.5, + -- 0.667, + -- 1.0 + -- focus_fit_method = 1 + }, +}) diff --git a/dot-config/hypr/misc.lua b/dot-config/hypr/misc.lua new file mode 100644 index 00000000..3660690a --- /dev/null +++ b/dot-config/hypr/misc.lua @@ -0,0 +1,28 @@ +hl.config({ + general = { + -- Set to true to enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = false, + + snap = { + enabled = true, + respect_gaps = true + }, + + }, + misc = { + force_default_wallpaper = 1, -- Set to 0 or 1 to disable the anime mascot wallpapers, + focus_on_activate = true, + disable_hyprland_logo = true, -- If true disables the random hyprland logo / anime girl background. :(, + disable_autoreload = false, + -- vfr = false, + -- vrr = 1 -- 1 = always, 2 = only in full screen, + -- mouse_move_enables_dpms = true, + key_press_enables_dpms = true, + -- animate_manual_resizes = true, + -- animate_mouse_windowdragging = true, + middle_click_paste = false, + enable_swallow = false, + -- swallow_regex = ^(Alacritty)$, + -- new_window_takes_over_fullscreen = 2, + }, +}) diff --git a/dot-config/hypr/perms.lua b/dot-config/hypr/perms.lua new file mode 100644 index 00000000..b6a67e18 --- /dev/null +++ b/dot-config/hypr/perms.lua @@ -0,0 +1,36 @@ +hl.config({ + ecosystem = { + enforce_permissions = true, + }, +}) + +hl.permission("/usr/(bin|local/bin)/grim", "screencopy", "allow") +hl.permission("/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland", "screencopy", "allow") +hl.permission("/usr/(bin|local/bin)/hyprpm", "plugin", "allow") + +hl.permission("/usr/bin/grim", "screencopy", "allow") +hl.permission("/usr/bin/hyprlock", "screencopy", "allow") +hl.permission("/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland", "screencopy", "allow") + +hl.permission("/var/cache/hyprpm/system/dynamic-cursors/dynamic-cursors.so", "plugin", "allow") +hl.permission("/var/cache/hyprpm/system/hyprscroller/hyprscroller.so", "plugin", "allow") + +-- Keyboards +hl.permission("^yubico-yubikey-otp\\+fido\\+ccid$", "keyboard", "allow") +hl.permission("^wooting-wooting-two-he-\\(arm\\)$", "keyboard", "allow") +hl.permission("^wooting-wooting-two-he-\\(arm\\)-system-control$", "keyboard", "allow") +hl.permission("^wooting-wooting-two-he-\\(arm\\)-consumer-control$", "keyboard", "allow") +hl.permission("^company--usb-device-$", "keyboard", "allow") +hl.permission("^company--usb-device--keyboard$", "keyboard", "allow") +hl.permission("^logitech-brio-consumer-control$", "keyboard", "allow") +hl.permission("^video-bus$", "keyboard", "allow") +hl.permission("^power-button$", "keyboard", "allow") +hl.permission("^power-button-1$", "keyboard", "allow") +hl.permission("^sleep-button$", "keyboard", "allow") +hl.permission("^hp-wmi-hotkeys$", "keyboard", "allow") +hl.permission("^hl-virtual-keyboard$", "keyboard", "allow") +hl.permission("^hl-virtual-keyboard-fcitx5$", "keyboard", "allow") + +hl.permission("^company--usb-device--keyboard-1$", "keyboard", "allow") + +hl.permission(".*", "keyboard", "ask") diff --git a/dot-config/hypr/render.lua b/dot-config/hypr/render.lua new file mode 100644 index 00000000..395b4880 --- /dev/null +++ b/dot-config/hypr/render.lua @@ -0,0 +1,11 @@ +hl.config({ + general = { -- Please see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Tearing/ before you turn this on + allow_tearing = true, +}, + render = { + direct_scanout = 1, + -- xp_mode = true, -- crazy drag bg + new_render_scheduling = true, + ctm_animation = 1, + }, +}) diff --git a/dot-config/hypr/rules.lua b/dot-config/hypr/rules.lua new file mode 100644 index 00000000..f69d2c80 --- /dev/null +++ b/dot-config/hypr/rules.lua @@ -0,0 +1,280 @@ +-------------------------------------- +--- WINDOWS AND WORKSPACES --- +-------------------------------------- +-- Ref https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/ +-- "Smart gaps" / "No gaps when only" +-- uncomment all if you wish to use that. +-- hl.workspace_rule({ workspace = "w[tv1]", gaps_out = 0, gaps_in = 0 }) +-- hl.workspace_rule({ workspace = "f[1]", gaps_out = 0, gaps_in = 0 }) +-- hl.window_rule({ +-- name = "no-gaps-wtv1", +-- match = { float = false, workspace = "w[tv1]" }, +-- border_size = 0, +-- rounding = 0, +-- }) +-- hl.window_rule({ +-- name = "no-gaps-f1", +-- match = { float = false, workspace = "f[1]" }, +-- border_size = 0, +-- rounding = 0, +-- }) + +-- workspaces +local tag_workspaces = { + terminal = 1, + web = 2, + file = 3, + code = 4, + office = 5, + communication = 6, + media = 7, + games = 8, + system = 9, + misc = 10 +} + +for tag, ws in pairs(tag_workspaces) do + hl.window_rule({ match = { tag = tag }, workspace = tostring(ws) }) +end + +-- content hints +hl.window_rule({ match = { tag = "games" }, content = "game" }) + +-- GUI Utils +hl.window_rule({ + match = { tag = "gui-utils" }, + opacity = "0.85 0.75", + pin = true, + size = { "(monitor_w*0.53)", "(monitor_h*0.6)" }, + move = { "(monitor_w*0.465)", "(monitor_h*0.048)" }, + animation = "slide right top" +}) + +-- media contents +hl.window_rule({ + match = { tag = "media-contents" }, + float = true, + pin = true, + no_initial_focus = true, + no_shadow = true, + keep_aspect_ratio = true, + no_dim = true, + suppress_event = "activatefocus" +}) + +-- positions +local positions = { + ["top-left"] = { "0", "0" }, + ["top-right"] = { "(monitor_w-window_w)", "0" }, + ["bottom-left"] = { "0", "(monitor_h-window_h)" }, + ["bottom-right"] = { "(monitor_w-window_w)", "(monitor_h-window_h)" } +} + +for tag, pos in pairs(positions) do + hl.window_rule({ match = { tag = tag }, move = pos }) +end + +-- fake fullscreen +hl.window_rule({ match = { tag = "fakefullscreen" }, fullscreen_state = "0 2" }) + +-- Games +hl.window_rule({ match = { tag = "games" }, fullscreen = true, immediate = true }) + +-- fh5 & game focus suppression +hl.window_rule({ match = { title = "^(Forza Horizon 5)$" }, suppress_event = "activatefocus" }) +hl.window_rule({ match = { class = "^(steam_app_1551360)$" }, suppress_event = "activatefocus" }) +hl.window_rule({ match = { tag = "games" }, suppress_event = "activatefocus" }) + +-- time-sensitive app rules +hl.window_rule({ + match = { tag = "time-sensitive" }, + stay_focused = true, + pin = true, + dim_around = true, + center = true, + float = true +}) + +-- popup +hl.window_rule({ + match = { tag = "popup" }, + dim_around = true, + center = true, + float = true +}) + +-- cli util apps +hl.window_rule({ + match = { tag = "cli-utils" }, + float = true, + pin = true, + dim_around = true +}) + +-- hidden +hl.window_rule({ match = { tag = "hidden" }, workspace = "special:minimized silent" }) + +-- Grouping tags by class/title matches +local app_tags = { + { class = "^(Alacritty|Xfce4-terminal|Kitty|" .. (vars.term or "$term") .. "|com.mitchellh.ghostty)$", tag = "+terminal" }, + { class = "^(" .. (vars.browser or "$browser") .. "|Brave-browser|chromium|firefox|thorium|zen)$", tag = "+web" }, + { class = "^(" .. (vars.fileManager or "$fileManager") .. "|Pcmanfm|thunar|qBittorrent|Caja)$", tag = "+file" }, + { class = "^(code|code-url-handler|cursor-url-handler|code-oss|Code - OSS|install4j-burp-StartBurp|burp-StartBurp|Unity|jetbrains-pycharm-ce|Postman|jetbrains-clion|.*\\.zed\\.Zed-.*)$", tag = "+code" }, + { class = "^(LibreOffice.*|libreoffice.*|Typora|obsidian|figma-linux|anytype|craft-nativefier-e0958b|evince|org.gnome.Evince|ClickUp)$", tag = "+office" }, + { class = "^(discord|vesktop|VencordDesktop|Chat-gpt|Whatsapp-for-linux|Chatbox)$", tag = "+communication" }, + { class = "^(Audacity|Music|MPlayer|Lxmusic|Inkscape|Gimp|Blender|obs|zoom|Zoom|Pitivi|kdenlive|openshot|vlc|cider|Cider|shotwell|Shotwell|fr.handbrake.ghb|spotify|spotify)$", tag = "+media" }, + { class = "^(Minecraft|Badlion|War|steam_proton|steam|csgo_linux64|cs2|minecraft-launcher|lutris|genshinimpact\\.exe|moe\\.launcher\\.an-anime-game-launcher|lunarclient|Lunar Client.*|zenlesszonezero\\.exe|moe\\.launcher\\.sleepy-launcher|org\\.vinegarhq\\.Sober|War Thunder.*|steam_app_.*)$", tag = "+games" }, + { class = "^(virt-manager|blueman-adapters|blueman-manager|GParted|Xdm-app|timeshift-gtk|com\\.nextcloud\\.desktopclient\\.nextcloud|gearlever|Lxappearance|Lxtask|Lxrandr|Arandr|System-config-printer\\.py|Pavucontrol|Exo-helper-1|Protonvpn|Xfce4-power-manager-settings|Mysql-workbench-bin|Grub-customizer|Nitrogen|archlinux-tweak-tool\\.py|pamac-manager|helvum|Vmware|btrfs-assistant|Bitwarden|wootility-lekker|nwg-look|com\\.github\\.wwmm\\.easyeffects|kvantummanager)$", tag = "+system" }, + { class = "^(os_server|Os_server)$", tag = "+misc" }, + { title = ".*\\.exe", tag = "+games" }, + { title = "^(War Thunder.*)$", tag = "+games" }, + { content = "3", tag = "+games" }, + { class = "^(thorium-app.shortwave.com__-Default|thorium-mdpkiolbdkhdjpekfbkbmhigcaggjagi-Profile_1|thorium-lnachpgegbbmnnlgpokibfjlmppeciah-Default|BeeperTexts)$", tag = "+gui-utils" }, + { class = "^(blobdrop|dragon|dragon-drop)$", tag = "+media-contents" }, + { class = "^(blobdrop|dragon|dragon-drop)$", tag = "+bottom-right" }, + { title = "^(Picture-in-Picture)$", tag = "+media-contents" }, + { title = "^(Picture-in-Picture)$", tag = "+top-right" }, + { class = "^(thorium-mdpkiolbdkhdjpekfbkbmhigcaggjagi-Profile_1|thorium-lnachpgegbbmnnlgpokibfjlmppeciah-Default)$", tag = "+fakefullscreen" }, + { class = "^(polkit-gnome-authentication-agent-1|hyprland-share-picker.*|gcr-prompter|io.missioncenter.MissionCenter|hyprpolkitagent|hyprland-dialog|.*pinentry.*)$", tag = "+time-sensitive" }, + { title = "^(Open File|Open|Select a File|Choose wallpaper|Open Folder|Save As|Save File|Open Files|File Operation Progress|Library|File Upload|.*- Properties|Enter name of file to save to.*)$", tag = "+popup" }, + { class = "^(xdg-desktop-portal.*|.*\\.portal..*)$", tag = "+popup" }, + { class = "^thunar$", title = "^Rename.*", tag = "+popup" }, + { class = "^zenity$", title = "^Protontricks$", tag = "+popup" }, + { class = "^zen$", title = "^Extension:.*", tag = "+popup" }, + { title = "^(nmd|cliphist|pulsemixer|ranger|btop)$", tag = "+cli-utils" } +} + +for _, rule in ipairs(app_tags) do + local match_tbl = {} + if rule.class then match_tbl.class = rule.class end + if rule.title then match_tbl.title = rule.title end + if rule.content then match_tbl.content = rule.content end + hl.window_rule({ match = match_tbl, tag = rule.tag }) +end + +-- Floating applications +hl.window_rule({ match = { class = "^(zoom|sxiv|Sxiv|[Vv]iewnior|feh|nm-connection-editor|install4j-burp-StartBurp|thorium-app.shortwave.com__-Default|thorium-mdpkiolbdkhdjpekfbkbmhigcaggjagi-Profile_1|thorium-lnachpgegbbmnnlgpokibfjlmppeciah-Default|BeeperTexts|electron|com.github.rafostar.Clapper|io.github.celluloid_player.Celluloid|qimgv)$" }, float = true }) +hl.window_rule({ match = { title = "^(Steam Settings|Sign in – Google accounts)$" }, float = true }) + +-- Specific window pin/stay_focused rules +hl.window_rule({ match = { title = "^(zoom_linux_float_video_window)$" }, pin = true }) +hl.window_rule({ match = { title = "(menu window)" }, stay_focused = true }) +hl.window_rule({ match = { title = "^(btop)$" }, stay_focused = true }) + +hl.window_rule({ match = { tag = "gui-utils" }, animation = "slide right top" }) + +-- bitwarden chrome extension popup +hl.window_rule({ + match = { class = "^(thorium-nngceckbapebfimnlniiiahkandclblb-Default)$" }, + pin = true, + float = true, + stay_focused = true +}) + +-- firefox +hl.window_rule({ match = { title = "^Extension" }, float = true }) + +-- PIP sizing +hl.window_rule({ match = { title = "^(Picture-in-Picture)$" }, size = { "(monitor_w*0.25)", "(monitor_h*0.25)" } }) + +hl.window_rule({ match = { tag = "time-sensitive" }, dim_around = true }) +hl.window_rule({ match = { tag = "cli-utils" }, dim_around = true }) + +-- No shadow for tiled window +hl.window_rule({ match = { float = false }, no_shadow = true }) + +-- Opacity rules +local opacity_rules = { + { class = "^cursor-url-handler$", active = "0.85", inactive = "0.75" }, + { title = "^Myass$", active = "0", inactive = "0" }, + { class = "^TelegramDesktop$", active = "1.00", inactive = "0.90" }, + { class = "^spotify$", active = "0.90", inactive = "0.80" }, + { class = "^Cider$", active = "0.90", inactive = "0.80" }, + { class = "^Brave-browser$", active = "0.90", inactive = "0.80" }, + { class = "^thunar$", active = "0.90", inactive = "0.80" }, + { class = "^discord$", active = "0.85", inactive = "0.75" }, + { class = "^Caja$", active = "0.90", inactive = "0.80" }, + { class = "^polkit-gnome-authentication-agent-1$", active = "0.80", inactive = "0.70" }, + { title = "^Open$", active = "0.80", inactive = "0.70" }, + { title = "^New Tab - Thorium$", active = "0.8", inactive = "0.5" } +} + +for _, rule in ipairs(opacity_rules) do + local match_tbl = {} + if rule.class then match_tbl.class = rule.class end + if rule.title then match_tbl.title = rule.title end + hl.window_rule({ match = match_tbl, opacity = rule.active .. " " .. rule.inactive }) +end + +-- Full screen no idle +hl.window_rule({ match = { class = ".*" }, idle_inhibit = "fullscreen" }) + +-- no blurs +hl.window_rule({ match = { title = "^(Annotation - Zoom)$" }, no_blur = true }) + +-- Layer rules / blur +local layer_rules = { + { namespace = ".*", blur_popups = true }, + { namespace = "^rofi$", blur = true, ignore_alpha = 0, dim_around = true, animation = "popin 45%" }, + { namespace = "^quickshell::launcher.*$", blur = true, ignore_alpha = 0, dim_around = true, animation = "popin 45%" }, + { namespace = "^notifications$", blur = true, ignore_alpha = 0 }, + { namespace = "^swaync-notification-window$", blur = true, ignore_alpha = 0, animation = "slide right" }, + { namespace = "^swaync-control-center$", blur = true, ignore_alpha = 0, animation = "slide right" }, + { namespace = "^logout_dialog$", blur = true }, + { namespace = "^waybar$", blur = true, ignore_alpha = 0 }, + { namespace = "^quickshell::bar$", blur = true, ignore_alpha = 0 }, + { namespace = "^quickshell::CC$", blur = true, ignore_alpha = 0, dim_around = true }, + { namespace = "^syshud$", blur = true, ignore_alpha = 0 }, + { namespace = "^selection$", animation = "none" }, + { namespace = "^mpvpaper$", animation = "gnome 0%" } +} + +for _, rule in ipairs(layer_rules) do + local params = { match = { namespace = rule.namespace } } + for k, v in pairs(rule) do + if k ~= "namespace" then params[k] = v end + end + hl.layer_rule(params) +end + +-- Misc + +-- xwaylandvideobridge +hl.window_rule({ + match = { class = "^(xwaylandvideobridge)$" }, + opacity = "0.0 override", + no_anim = true, + no_initial_focus = true, + max_size = { "1", "1" }, + no_blur = true +}) + +-- Roblox join private server +hl.window_rule({ match = { class = "^(org.vinegarhq.Sober)$", title = "^(Join Friends)$" }, float = true }) + +-- No transparency for fullscreen windows +-- hl.window_rule({ match = { fullscreen = false }, ["plugin:chromakey"] = true }) + +-- suppressevent +hl.window_rule({ match = { class = "^spotify$" }, suppress_event = "activatefocus activate" }) + +-- Fix some dragging issues with XWayland +hl.window_rule({ + match = { + class = "^$", + title = "^$", + xwayland = true, + float = true, + fullscreen = false, + pin = false + }, + no_focus = true +}) + +-- Smart gaps overrides (commented out in original) +-- hl.workspace_rule({ workspace = "w[tv1]", gaps_out = 0, gaps_in = 0 }) +-- hl.workspace_rule({ workspace = "f[1]", gaps_out = 0, gaps_in = 0 }) +-- hl.window_rule({ match = { float = false, workspace = "w[tv1]" }, border_size = 0 }) +-- hl.window_rule({ match = { float = false, workspace = "w[tv1]" }, rounding = 0 }) +-- hl.window_rule({ match = { float = false, workspace = "f[1]" }, border_size = 0 }) +-- hl.window_rule({ match = { float = false, workspace = "f[1]" }, rounding = 0 }) diff --git a/dot-config/hypr/vars.lua b/dot-config/hypr/vars.lua new file mode 100644 index 00000000..23bbd821 --- /dev/null +++ b/dot-config/hypr/vars.lua @@ -0,0 +1,26 @@ +local M = {} + +-- Program defaults +M.term = "kitty" +M.termLaunch = M.term .. " -1" +M.termfloat = "[float on; center on; size (monitor_w*0.4) (monitor_h*0.4); workspace unset] " .. M.term +M.editor = "zeditor" +-- $browser = thorium-browser +M.browser = "zen-browser" +M.fileManager = "thunar" +M.sessionManager = "sddm" + +-- Dirs +M.HYPRDIR = "$HOME/.config/hypr" +M.SCRIPTSDIR = "$HOME/scripts" +M.rofiexec = "$HOME/.config/rofi/scripts" + +-- Files +M.bgChangerBin = M.SCRIPTSDIR .. "/walls/awww.sh" +M.bgChanger = "awww.sh" + +-- misc +M.waylandarg = +"--enable-features=WaylandWindowDecorations,UseOzonePlatform,WebRTCPipeWireCapturer --ozone-platform-hint=wayland --enable-wayland-ime" + +return M -- cgit v1.2.3