From 4b29099855e00a345a0390d2c971f8fa68a38d87 Mon Sep 17 00:00:00 2001 From: Eriq Taing Date: Wed, 14 May 2025 12:21:35 -0400 Subject: [PATCH] Added hyprland config and scripts --- files/system/usr/share/hyprland/hyprland.conf | 150 ++++++++++++++++++ .../hyprland/hyprland.conf.d/autostart.conf | 31 ++++ .../hyprland/hyprland.conf.d/browser.conf | 11 ++ .../hyprland.conf.d/discord_workspace.conf | 26 +++ .../hyprland/hyprland.conf.d/env_vars.conf | 31 ++++ .../hyprland.conf.d/game_workspace.conf | 41 +++++ .../hyprland/hyprland.conf.d/keybinds.conf | 38 +++++ .../keybinds.conf.d/arrow_move_window.conf | 7 + .../keybinds.conf.d/media_binds.conf | 16 ++ .../keybinds.conf.d/workspace_binds.conf | 34 ++++ .../hyprland/hyprland.conf.d/terminal.conf | 13 ++ .../scripts/hypr_power/hypr_close_clients | 18 +++ .../hyprland/scripts/hypr_power/hypr_logout | 5 + .../hyprland/scripts/hypr_power/hypr_reboot | 5 + .../hyprland/scripts/hypr_power/hypr_shutdown | 5 + .../hyprland/scripts/load-kwallet-apps.sh | 3 + .../share/hyprland/scripts/load-kwallet.sh | 5 + .../usr/share/hyprland/scripts/local-lua | 4 + .../usr/share/hyprland/scripts/menu.lua | 27 ++++ .../usr/share/hyprland/scripts/powermenu.lua | 14 ++ 20 files changed, 484 insertions(+) create mode 100644 files/system/usr/share/hyprland/hyprland.conf create mode 100644 files/system/usr/share/hyprland/hyprland.conf.d/autostart.conf create mode 100644 files/system/usr/share/hyprland/hyprland.conf.d/browser.conf create mode 100644 files/system/usr/share/hyprland/hyprland.conf.d/discord_workspace.conf create mode 100644 files/system/usr/share/hyprland/hyprland.conf.d/env_vars.conf create mode 100644 files/system/usr/share/hyprland/hyprland.conf.d/game_workspace.conf create mode 100644 files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf create mode 100644 files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/arrow_move_window.conf create mode 100644 files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/media_binds.conf create mode 100644 files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/workspace_binds.conf create mode 100644 files/system/usr/share/hyprland/hyprland.conf.d/terminal.conf create mode 100755 files/system/usr/share/hyprland/scripts/hypr_power/hypr_close_clients create mode 100755 files/system/usr/share/hyprland/scripts/hypr_power/hypr_logout create mode 100755 files/system/usr/share/hyprland/scripts/hypr_power/hypr_reboot create mode 100755 files/system/usr/share/hyprland/scripts/hypr_power/hypr_shutdown create mode 100755 files/system/usr/share/hyprland/scripts/load-kwallet-apps.sh create mode 100755 files/system/usr/share/hyprland/scripts/load-kwallet.sh create mode 100755 files/system/usr/share/hyprland/scripts/local-lua create mode 100644 files/system/usr/share/hyprland/scripts/menu.lua create mode 100644 files/system/usr/share/hyprland/scripts/powermenu.lua diff --git a/files/system/usr/share/hyprland/hyprland.conf b/files/system/usr/share/hyprland/hyprland.conf new file mode 100644 index 0000000..87ff80f --- /dev/null +++ b/files/system/usr/share/hyprland/hyprland.conf @@ -0,0 +1,150 @@ +# hyprland.conf + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=,preferred,auto,auto + +# Sources +source = /usr/share/hyprland/hyprland.conf.d/env_vars.conf +source = /usr/share/hyprland/hyprland.conf.d/game_workspace.conf +source = /usr/share/hyprland/hyprland.conf.d/discord_workspace.conf +source = /usr/share/hyprland/hyprland.conf.d/autostart.conf +source = /usr/share/hyprland/hyprland.conf.d/terminal.conf +source = /usr/share/hyprland/hyprland.conf.d/keybinds.conf +source = /usr/share/hyprland/hyprland.conf.d/browser.conf +source = /usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/arrow_move_window.conf +source = /usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/workspace_binds.conf +source = /usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/media_binds.conf +source = /usr/share/hyprland/hyprland.conf.d/misc_apps.conf +source = /usr/share/hyprland/hyprland.conf.d/devices.conf + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# workspaces +workspace = 1, persistent:true, default:true +workspace = 2 +workspace = 3 +workspace = 4 +workspace = 5, persistent:true, border:false, rounding:false +workspace = 6 +workspace = 7 +workspace = 8 +workspace = 9 +workspace = 10 +workspace = special:magic + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + touchpad { + natural_scroll = no + } + + sensitivity = 0 # -1.0 to 1.0, 0 means no modification. +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out = 10 + border_size = 2 + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + layout = dwindle + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false +} + +#xwayland { +# force_zero_scaling = true +#} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + blur { + enabled = true + size = 3 + passes = 1 + } + + shadow { + enabled = yes + range = 4 + render_power = 3 + color = rgba(1a1a1aee) + } + + rounding = 15 +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default + animation = specialWorkspace, 1, 3, default, slidefadevert -50% +} + +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_status = slave +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = off +} + +misc { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers + disable_splash_rendering = true +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more +device { + name = epic-mouse-v1 + sensitivity = -0.5 +} + +debug { + disable_logs = false +} + +experimental { + #hdr = true + #xx_color_management_v4 = true +} + +# Example windowrule v1 +# windowrule = float, ^(kitty)$ +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. +#windowrulev2 = workspace special, class:(scratchy) diff --git a/files/system/usr/share/hyprland/hyprland.conf.d/autostart.conf b/files/system/usr/share/hyprland/hyprland.conf.d/autostart.conf new file mode 100644 index 0000000..e4aba05 --- /dev/null +++ b/files/system/usr/share/hyprland/hyprland.conf.d/autostart.conf @@ -0,0 +1,31 @@ +# autostart.conf + +$polkit = /usr/libexec/kf6/polkit-kde-authentication-agent-1 +#$kwalletInit = exec --no-startup-id /usr/lib/pam_kwallet_init + +# menu bar +exec-once = /usr/bin/waybar + +# hyprpaper +# exec-once = hyprpaper + +## services +# polkit +exec-once = $polkit + +# notification system +exec-once = /usr/bin/swaync + +# unlock kwallet +# exec-once = /usr/share/hyprland/scripts/load-kwallet.sh + +# load kwallet dependent apps +# exec-once = /usr/share/hyprland/scripts/load-kwallet-apps.sh + +# dbus stuff +exec-once = /usr/bin/dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP + +# nextcloud +# exec-once = sleep 1 && flatpak run --branch=stable --arch=x86_64 --command=nextcloud --file-forwarding com.nextcloud.desktopclient.nextcloud + +# exec-once = akregator --hide-mainwindow diff --git a/files/system/usr/share/hyprland/hyprland.conf.d/browser.conf b/files/system/usr/share/hyprland/hyprland.conf.d/browser.conf new file mode 100644 index 0000000..7df8850 --- /dev/null +++ b/files/system/usr/share/hyprland/hyprland.conf.d/browser.conf @@ -0,0 +1,11 @@ +# browser.conf + +# floorp +$browser = /usr/bin/flatpak run one.ablaze.floorp +$mainMod = SUPER + +## autostart +exec-once = [workspace 1 silent] $browser + +## keybind +bind = $mainMod, F, exec, $browser diff --git a/files/system/usr/share/hyprland/hyprland.conf.d/discord_workspace.conf b/files/system/usr/share/hyprland/hyprland.conf.d/discord_workspace.conf new file mode 100644 index 0000000..56b422b --- /dev/null +++ b/files/system/usr/share/hyprland/hyprland.conf.d/discord_workspace.conf @@ -0,0 +1,26 @@ +# discord_workspace.conf + +$discord = /usr/bin/flatpak run com.discordapp.Discord + +$discord_class = class:^(vesktop)$|^(discord)$|^(com.discord.app.Discord)$|^(WebCord)$|^(equibop)$ + +# workspace +workspace = special:discord + +# window rule +windowrule = workspace special:discord silent, $discord_class +#windowrule = workspace special:discord silent, class:^(discord)$ +#windowrule = opacity 0.9 0.9, $discord_class +windowrule = allowsinput on, $discord_class + +# key binds +$mainMod = SUPER +#bind = $mainMod, D, focuswindow, vesktop +bind = $mainMod, D, togglespecialworkspace, discord +bind = $mainMod SHIFT, D, movetoworkspace, special:discord + +# discord overlay +#exec-once = discover-overlay + +# launch discord +exec-once = $discord \ No newline at end of file diff --git a/files/system/usr/share/hyprland/hyprland.conf.d/env_vars.conf b/files/system/usr/share/hyprland/hyprland.conf.d/env_vars.conf new file mode 100644 index 0000000..962bf4c --- /dev/null +++ b/files/system/usr/share/hyprland/hyprland.conf.d/env_vars.conf @@ -0,0 +1,31 @@ +# env_vars.conf + +# hyprcursor +env = HYPRCURSOR_THEME,Bibata-Modern-Classic +env = HYPRCURSOR_SIZE,24 + +# Some default env vars. +env = XCURSOR_THEME,Bibata-Modern-Classic +env = XCURSOR_SIZE,24 +# Toolkit Backend Vars +env = CLUTTER_BACKEND,wayland +# QT Variables +env = QT_QPA_PLATFORMTHEME,kde +env = QT_AUTO_SCREEN_SCALE_FACTOR,1 +env = QT_QPA_PLATFORM,wayland +env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 +# XDG specs vars +env = XDG_CURRENT_DESKTOP,Hyprland +env = XDG_SESSION_TYPE,wayland +env = XDG_SESSION_DESKTOP,Hyprland +# set gtk-theme +env = QT_QUICK_CONTROLS_STYLE,org.kde.desktop + +# copy some environments into systemctl +exec = /usr/bin/systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME + +# set default editor +env = EDITOR,/usr/bin/nvim + +# for hdr games +env = DXVK_HDR,1 diff --git a/files/system/usr/share/hyprland/hyprland.conf.d/game_workspace.conf b/files/system/usr/share/hyprland/hyprland.conf.d/game_workspace.conf new file mode 100644 index 0000000..feb661d --- /dev/null +++ b/files/system/usr/share/hyprland/hyprland.conf.d/game_workspace.conf @@ -0,0 +1,41 @@ +# game_workspace.conf + +# workspace number +$game-workspace-number = 5 + +exec-once = steam %U + +# window rules +windowrule = workspace 9 silent, title:^(Steam)$ + +# key binds +$mainMod = SUPER +bind = $mainMod, G, focuswindow, class:^(gamescope|steam) + +# To put the window rules for the game workspace + +# steam apps +windowrule = workspace $game-workspace-number silent, class:^steam_app_\d+$ + +# gamescope +windowrule = fullscreen, class:^(gamescope)$ +windowrule = workspace $game-workspace-number silent, class:^(gamescope)$ + +# Minecraft +windowrule = workspace $game-workspace-number, class:^Minecraft.* + +# factorio +windowrule = workspace $game-workspace-number, class:^(factorio)$ + +# RetroArch flatpak +windowrule = workspace $game-workspace-number, class:^(org.libretro.RetroArch)$ + +# dolphin emulator +windowrule = workspace $game-workspace-number, class:^(dolphin-emu)$ + +# Slay the Spire +windowrule = workspace $game-workspace-number, class:^(Slay the Spire)$ + +# Terraria +windowrule = workspace $game-workspace-number, class:^(dotnet)$ +windowrule = fullscreen, class:^(dotnet)$ diff --git a/files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf b/files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf new file mode 100644 index 0000000..0d25b59 --- /dev/null +++ b/files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf @@ -0,0 +1,38 @@ +# key_binds.conf + +# Set programs that you use +$fileManager = dolphin +$menu = rofi -show drun +#$menu = ags request -i launcher show +$screenshot = grim -g "$(slurp -d)" - | wl-copy +$powermenu = /usr/share/hyprland/scripts/local-lua /usr/share/hyprland/scripts/powermenu.lua + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod SHIFT, C, killactive, +bind = $mainMod, M, exec, $powermenu +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, V, togglefloating, +bind = $mainMod, R, exec, $menu +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle +bind = $mainMod SHIFT, F, fullscreen + +# screenshots and screen recorder aylur dot files +bind = $mainMod SHIFT, Print, exec, $screenshot + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod SHIFT, mouse:272, movewindow +bindm = $mainMod SHIFT, mouse:273, resizewindow + +# global hotkeys +# discord mute +bind = CTRL SHIFT, M, pass, initialclass:^(discord)$ \ No newline at end of file diff --git a/files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/arrow_move_window.conf b/files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/arrow_move_window.conf new file mode 100644 index 0000000..46caffc --- /dev/null +++ b/files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/arrow_move_window.conf @@ -0,0 +1,7 @@ +# arrow_move_window.conf + +# Move window with mainMod + Shift + arrow kyes +bind = $mainMod SHIFT, left, movewindow, l +bind = $mainMod SHIFT, right, movewindow, r +bind = $mainMod SHIFT, up, movewindow, u +bind = $mainMod SHIFT, down, movewindow, d diff --git a/files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/media_binds.conf b/files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/media_binds.conf new file mode 100644 index 0000000..0f0ca16 --- /dev/null +++ b/files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/media_binds.conf @@ -0,0 +1,16 @@ +# media_binds.conf +$mainMod = SUPER + +# media play-pause toggle +bind = , XF86AudioPlay, exec, playerctl play-pause + +# media volume up/down +bind = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%- +bind = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 1%+ + +# media volume up/down +bind = $mainMod, XF86AudioLowerVolume, exec, playerctl position 5- +bind = $mainMod, XF86AudioRaiseVolume, exec, playerctl position 5+ + +# media pause +bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle diff --git a/files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/workspace_binds.conf b/files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/workspace_binds.conf new file mode 100644 index 0000000..b839ed0 --- /dev/null +++ b/files/system/usr/share/hyprland/hyprland.conf.d/keybinds.conf.d/workspace_binds.conf @@ -0,0 +1,34 @@ +# workspace_binds.conf +$mainMod = SUPER + +# Switch workspaces with mainMod + [0-9] +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 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +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 + +# Example special workspace (scratchpad) +bind = $mainMod, S, togglespecialworkspace, magic +bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 \ No newline at end of file diff --git a/files/system/usr/share/hyprland/hyprland.conf.d/terminal.conf b/files/system/usr/share/hyprland/hyprland.conf.d/terminal.conf new file mode 100644 index 0000000..3aab930 --- /dev/null +++ b/files/system/usr/share/hyprland/hyprland.conf.d/terminal.conf @@ -0,0 +1,13 @@ +# terminal.conf +$terminal = kitty + +# workspace +workspace = special:terminal + +# launch a terminal +exec-once = [workspace special:terminal silent] $terminal + +# key binds +$mainMod = SUPER +bind = $mainMod, T, togglespecialworkspace, terminal +bind = $mainMod SHIFT, T, movetoworkspace, special:terminal diff --git a/files/system/usr/share/hyprland/scripts/hypr_power/hypr_close_clients b/files/system/usr/share/hyprland/scripts/hypr_power/hypr_close_clients new file mode 100755 index 0000000..10a5dca --- /dev/null +++ b/files/system/usr/share/hyprland/scripts/hypr_power/hypr_close_clients @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +HYPRCMDS=$(hyprctl -j clients | jq -j '.[] | "dispatch closewindow address:\(.address); "') +hyprctl --batch "$HYPRCMDS" >>/tmp/hyprexitwithgrace.log 2>&1 + +notify-send "power controls" "Closing Applications..." + +sleep 2 + +COUNT=$(hyprctl clients | grep "class:" | wc -l) + +if [ "$COUNT" -eq "0" ]; then + notify-send "power controls" "Closed Applications." + return +else + notify-send "power controls" "Some apps didn't close. Not shutting down." + exit 1 +fi diff --git a/files/system/usr/share/hyprland/scripts/hypr_power/hypr_logout b/files/system/usr/share/hyprland/scripts/hypr_power/hypr_logout new file mode 100755 index 0000000..3abbbe4 --- /dev/null +++ b/files/system/usr/share/hyprland/scripts/hypr_power/hypr_logout @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +/usr/share/hyprland/scripts/hypr_power/hypr_close_clients + +hyprctl dispatch exit diff --git a/files/system/usr/share/hyprland/scripts/hypr_power/hypr_reboot b/files/system/usr/share/hyprland/scripts/hypr_power/hypr_reboot new file mode 100755 index 0000000..d39cd0d --- /dev/null +++ b/files/system/usr/share/hyprland/scripts/hypr_power/hypr_reboot @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +/usr/share/hyprland/scripts/hypr_power/hypr_close_clients + +systemctl reboot diff --git a/files/system/usr/share/hyprland/scripts/hypr_power/hypr_shutdown b/files/system/usr/share/hyprland/scripts/hypr_power/hypr_shutdown new file mode 100755 index 0000000..2b6dd03 --- /dev/null +++ b/files/system/usr/share/hyprland/scripts/hypr_power/hypr_shutdown @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +~/bin/hypr_power/hypr_close_clients + +systemctl poweroff diff --git a/files/system/usr/share/hyprland/scripts/load-kwallet-apps.sh b/files/system/usr/share/hyprland/scripts/load-kwallet-apps.sh new file mode 100755 index 0000000..a65b328 --- /dev/null +++ b/files/system/usr/share/hyprland/scripts/load-kwallet-apps.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +# nextcloud desktop +sleep 15 && flatpak run --branch=stable --arch=x86_64 --command=nextcloud --file-forwarding com.nextcloud.desktopclient.nextcloud diff --git a/files/system/usr/share/hyprland/scripts/load-kwallet.sh b/files/system/usr/share/hyprland/scripts/load-kwallet.sh new file mode 100755 index 0000000..b480b05 --- /dev/null +++ b/files/system/usr/share/hyprland/scripts/load-kwallet.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +kwalletmanager5 & +sleep 1 && exec --no-startup-id /usr/lib/pam_kwallet_init +notify-send -e --expire-time=2000 'Kwallet has been loaded. Loading dependent apps...' +sleep 2 && hyprctl dispatch closewindow class:org.kde.kwalletmanager diff --git a/files/system/usr/share/hyprland/scripts/local-lua b/files/system/usr/share/hyprland/scripts/local-lua new file mode 100755 index 0000000..7604e5e --- /dev/null +++ b/files/system/usr/share/hyprland/scripts/local-lua @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +BIN_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) + +LUA_PATH="${BIN_DIR}/?.lua;;" lua $1 diff --git a/files/system/usr/share/hyprland/scripts/menu.lua b/files/system/usr/share/hyprland/scripts/menu.lua new file mode 100644 index 0000000..6788ca2 --- /dev/null +++ b/files/system/usr/share/hyprland/scripts/menu.lua @@ -0,0 +1,27 @@ +#!/usr/bin/env lua +local menu = {} + +function menu:clean_string(str) + str = string.gsub(str, "^%s+", "") + str = string.gsub(str, "%s+$", "") + return string.gsub(str, "[\n]+", " ") +end + +function menu:bring_menu(prompt, options) + local options_string = "" + local length = 1 + for _, value in pairs(options) do + options_string = options_string .. value .. "\n" + length = length + 1 + end + + options_string = options_string:sub(1, -2) + + local command = "echo -e '" .. options_string .. "' | rofi -dmenu -i -p '" .. prompt .. "'" + local f = assert(io.popen(command, "r")) + local s = menu:clean_string(assert(f:read("*a"))) + f:close() + return s +end + +return menu diff --git a/files/system/usr/share/hyprland/scripts/powermenu.lua b/files/system/usr/share/hyprland/scripts/powermenu.lua new file mode 100644 index 0000000..3ed3e58 --- /dev/null +++ b/files/system/usr/share/hyprland/scripts/powermenu.lua @@ -0,0 +1,14 @@ +#!/usr/bin/env lua +local menu = require("menu") +local executable = { + ["Shutdown"] = "/usr/share/hyprland/scripts/hypr_power/hypr_shutdown", + ["Reboot"] = "/usr/share/hyprland/scripts/hypr_power/hypr_reboot", + ["Log out"] = "/usr/share/hyprland/scripts/hypr_power/hypr_logout", + ["Cancel"] = "", +} + +local options = { "Shutdown", "Reboot", "Log out", "Cancel" } + +local s = menu:bring_menu("Power menu", options) + +os.execute(executable[s])