diff --git a/colors.lua b/colors.lua new file mode 100644 index 0000000..75988f1 --- /dev/null +++ b/colors.lua @@ -0,0 +1,5 @@ +return { + active_border = "rgba(b4d088ff)", + inactive_border = "rgba(45483daa)", + shadow = "rgba(12140ebf)", +} diff --git a/functions.lua b/functions.lua index bd8fcd7..429cb52 100644 --- a/functions.lua +++ b/functions.lua @@ -397,16 +397,16 @@ function M.setupMonitors() -- Dynamically spawn waybar only for connected monitors, and use a robust kill sequence -- inside the background script to prevent race conditions during rapid hotplug events - local waybar_cmds = { - "killall -q waybar", - "sleep 0.5", - "killall -q waybar" - } - for logical, _ in pairs(logical_to_physical) do - table.insert(waybar_cmds, string.format("nohup waybar -c ~/.config/waybar/config-%s.jsonc -s ~/.config/waybar/style-%s.css >/dev/null 2>&1 &", logical, logical)) - end - - hl.dispatch(hl.dsp.exec_cmd("bash -c '" .. table.concat(waybar_cmds, "\n") .. "'")) + -- local waybar_cmds = { + -- "killall -q waybar", + -- "sleep 0.5", + -- "killall -q waybar" + -- } + -- for logical, _ in pairs(logical_to_physical) do + -- table.insert(waybar_cmds, string.format("nohup waybar -c ~/.config/waybar/config-%s.jsonc -s ~/.config/waybar/style-%s.css >/dev/null 2>&1 &", logical, logical)) + -- end + -- + -- hl.dispatch(hl.dsp.exec_cmd("bash -c '" .. table.concat(waybar_cmds, "\n") .. "'")) end return M diff --git a/hyprland.lua b/hyprland.lua index f266df9..c9c94aa 100644 --- a/hyprland.lua +++ b/hyprland.lua @@ -5,7 +5,7 @@ ----------------------------------------------------- local copy = "wl-copy --trim-newline" local paste = "wl-paste" -local launcher = "rofi -show run -p 'launch'" +local launcher = "ags request \"launcher:app\"" -- local clear = "cliphist list | head -n1 | cliphist delete" @@ -37,14 +37,16 @@ hl.env("XDG_SESSION_DESKTOP", "Hyprland") ----------------------------------------------------- -- Appearance & Input (from appearance.conf & input.conf) ----------------------------------------------------- +local colors = require("colors") + hl.config({ general = { gaps_in = 1, gaps_out = 2, border_size = 2, col = { - active_border = "rgba(fabd2f99)", - inactive_border = "rgba(595959aa)", + active_border = colors.active_border, + inactive_border = colors.inactive_border, }, resize_on_border = false, allow_tearing = false, @@ -58,9 +60,10 @@ hl.config({ inactive_opacity = 1.0, shadow = { enabled = true, - range = 4, + range = 25, render_power = 3, - color = "rgba(1a1a1aee)" + color = colors.shadow, + color_inactive = colors.shadow }, blur = { enabled = true, @@ -111,7 +114,7 @@ hl.config({ resolve_binds_by_sym = 1, kb_layout = "us, us", kb_variant = "colemak,", - kb_options = "ctrl:nocaps, compose:ralt, grp:ctrls_toggle", + kb_options = "ctrl:nocaps,compose:ralt,grp:ctrls_toggle", follow_mouse = 1, sensitivity = 0, touchpad = { natural_scroll = false } @@ -165,6 +168,14 @@ hl.window_rule({ workspace = "name:browser silent", match = { class = browsers } hl.window_rule({ workspace = "name:jobs silent", match = { class = ".*[Vv]ivaldi-stable.*" } }) hl.window_rule({ workspace = "name:meeting silent", match = { class = meeting } }) +----------------------------------------------------- +-- Layer Rules +----------------------------------------------------- +hl.layer_rule({ blur = true, ignore_alpha = 0.1, match = { namespace = "^bar.*" } }) +hl.layer_rule({ blur = true, ignore_alpha = 0.1, match = { namespace = "^dashboard" } }) +hl.layer_rule({ blur = true, ignore_alpha = 0.1, match = { namespace = "^dimmer.*" } }) + + ----------------------------------------------------- -- Workspaces (from workspaces.conf) @@ -179,7 +190,7 @@ local bind = hl.bind local dsp = hl.dsp local fn = require("functions") -bind("SUPER + Q", dsp.exec_cmd("hyprctl reload && hyprctl eval 'require(\"functions\").setupMonitors()' && notify-send 'Hyprland' 'Config Reloaded' -u low -t 2000")) +bind("SUPER + Q", dsp.exec_cmd("hyprctl reload && hyprctl eval 'require(\"functions\").setupMonitors()' && notify-send 'Hyprland' 'Config Reloaded' -u low -t 2000; ags quit; ags run &")) -- BUG FIX: SUPER + SHIFT + Q was bound to both tmux kill and uwsm stop. -- bind("SUPER + SHIFT + Q", dsp.exec_cmd("tmux kill-server")) bind("SUPER + SHIFT + Q", dsp.exec_cmd("killall -q signal-desktop; uwsm stop")) @@ -209,7 +220,9 @@ bind("SUPER + ALT + H", function() fn.focusOrLaunch("qutebrowser", "org.qutebrow bind("SUPER + S", dsp.exec_cmd(launcher)) -- Win+S for Search/Launcher bind("SUPER + R", dsp.exec_cmd(launcher)) -- Win+R for Run bind("SUPER + E", dsp.exec_cmd("nautilus")) -- Win+E for Explorer -bind("SUPER + V", dsp.exec_cmd("cliphist list | rofi -dmenu -p 'paste' | cliphist decode | " .. copy .. " && " .. paste)) -- Win+V for Clipboard +bind("SUPER + O", dsp.exec_cmd("ags request \"launcher:open\"")) -- Win+O for Open File +bind("SUPER + SHIFT + O", dsp.exec_cmd("ags request \"launcher:openwith\"")) -- Win+Shift+O for Open With +bind("SUPER + V", dsp.exec_cmd("ags request \"launcher:cliphist\"")) -- Win+V for Clipboard bind("SUPER + SHIFT + S", function() fn.focusOrLaunch("pavucontrol", "org.pulseaudio.pavucontrol", "org.pulseaudio.pavucontrol") end) -- Window control @@ -230,7 +243,7 @@ local function cycle_layout() hl.config({ general = { layout = new_layout } }) os.execute("echo '" .. layout_icons[new_layout] .. "' > /tmp/hypr_layout.txt") - os.execute("pkill -RTMIN+8 waybar") + -- os.execute("pkill -RTMIN+8 waybar") end bind("SUPER + right", function() cycle_layout() end) @@ -244,16 +257,16 @@ bind("SUPER + K", hl.dsp.window.cycle_next({ prev = true })) bind("ALT + Tab", hl.dsp.window.cycle_next()) bind("ALT + SHIFT + Tab", hl.dsp.window.cycle_next({ prev = true })) -bind("SUPER + X", dsp.exec_cmd("dunstctl close")) -bind("SUPER + Y", dsp.exec_cmd("dunstctl close-all")) +bind("SUPER + X", dsp.exec_cmd("ags request close-notification")) +bind("SUPER + Y", dsp.exec_cmd("ags request close-all-notifications")) -- Workspace control bind("SUPER + CTRL + right", function() hl.dispatch(hl.dsp.focus({ workspace = "m+1" })) end) bind("SUPER + CTRL + left", function() hl.dispatch(hl.dsp.focus({ workspace = "m-1" })) end) bind("SUPER + SHIFT + H", function() hl.dispatch(hl.dsp.focus({ workspace = "m-1" })) end) bind("SUPER + SHIFT + L", function() hl.dispatch(hl.dsp.focus({ workspace = "m+1" })) end) -bind("SUPER + SHIFT + M", function() fn.mv2workspace() end) -bind("SUPER + SHIFT + N", function() fn.createWorkspace() end) +bind("SUPER + SHIFT + M", dsp.exec_cmd("ags request \"launcher:movetoworkspace\"")) +bind("SUPER + SHIFT + N", dsp.exec_cmd("ags request \"launcher:workspace\"")) bind("SUPER + SHIFT + X", function() fn.deleteWorkspace() end) bind("SUPER + SHIFT + Z", function() fn.createWorkspace(fn.getActiveWorkspaceName()) end) bind("SUPER + SHIFT + left", function() fn.moveWorkspace(-1) end) @@ -286,8 +299,9 @@ hl.on("hyprland.start", function() hl.exec_cmd("uwsm app -- hypridle") hl.exec_cmd("hyprpaper &") -- Waybar is now managed entirely by functions.setupMonitors() + hl.exec_cmd("uwsm app -- ags run") hl.exec_cmd("uwsm app -- espanso start") - hl.exec_cmd("uwsm app -- dunst") + -- hl.exec_cmd("uwsm app -- dunst") -- Replaced with AGS Notifd hl.exec_cmd("nm-applet") hl.exec_cmd("signal-desktop") hl.exec_cmd("hp-systray") diff --git a/hyprpaper.conf b/hyprpaper.conf index 4699886..b4eec31 100644 --- a/hyprpaper.conf +++ b/hyprpaper.conf @@ -3,18 +3,18 @@ splash = false wallpaper { monitor = eDP-1 - path = /home/trey/images/Seven Beats Music/2025-02-24.jpg + path = /home/trey/images/Seven Beats Music/2024-07-15.jpg fit_mode = cover } wallpaper { - monitor = DP-9 - path = /home/trey/images/Seven Beats Music/2024-09-09.jpg + monitor = DP-7 + path = /home/trey/images/Seven Beats Music/2024-12-09.jpg fit_mode = cover } wallpaper { - monitor = DP-10 - path = /home/trey/images/Seven Beats Music/2026-01-26.jpg + monitor = DP-8 + path = /home/trey/images/Seven Beats Music/2024-10-14.jpg fit_mode = cover } diff --git a/legacy/variables.conf b/legacy/variables.conf index bcb70ee..8ace5d5 100644 --- a/legacy/variables.conf +++ b/legacy/variables.conf @@ -4,7 +4,7 @@ # application related scripts and commands $app = ~/.config/hypr/scripts/focusOrLaunch -$launcher = rofi -show run -p "launch" +$launcher = ags request "launcher:app" $timetracker_prompt = ~/.config/hypr/scripts/timetracker-log-prompt $timetracker_print = ~/.config/hypr/scripts/timetracker-log-print $selection = rofi -dmenu -theme-str 'inputbar {enabled: false;}' -i -matching prefix -auto-select -l 2 diff --git a/scripts/battery-notify.sh b/scripts/battery-notify.sh index 32a7fee..2ed17ba 100644 --- a/scripts/battery-notify.sh +++ b/scripts/battery-notify.sh @@ -20,23 +20,26 @@ while true; do if [ "$STATUS" == "Discharging" ] && [ "$CAPACITY" -le 5 ]; then if [ ! -f "/run/user/${UID}/battery_low" ]; then logger "Low power! Triggering notification...." - dunstify --urgency=critical \ + # -p returns the ID so we can close it later + NOTIF_ID=$(dunstify --urgency=critical \ + -p \ --icon=/usr/share/icons/breeze-dark/emblems/16/emblem-warning.svg \ "LOW BATTERY!" \ - "Battery level is at ${CAPACITY}%, plug power quick!" - touch "/run/user/${UID}/battery_low" + "Battery level is at ${CAPACITY}%, plug power quick!") + echo "$NOTIF_ID" > "/run/user/${UID}/battery_low" fi # Clear the notification if we plug back in and rise above 5% elif [ "$STATUS" == "Charging" ] && [ "$CAPACITY" -gt 5 ]; then if [ -f "/run/user/${UID}/battery_low" ]; then logger "Power reconnected and above 5 percent, clearing notification state." - rm -f "/run/user/${UID}/battery_low" - # Find and close the specific dunst notification by ID - for id in $(dunstctl history | jq '.data[0][] | select(.summary.data == "LOW BATTERY!") | .id.data'); do - dunstify --close=${id} - done + NOTIF_ID=$(cat "/run/user/${UID}/battery_low") + if [ -n "$NOTIF_ID" ]; then + dunstify --close=$NOTIF_ID + fi + + rm -f "/run/user/${UID}/battery_low" fi fi diff --git a/workspace_config.lua b/workspace_config.lua index 49bcaac..f28270b 100644 --- a/workspace_config.lua +++ b/workspace_config.lua @@ -5,5 +5,4 @@ return { { name = "work", monitor = "desc:Ancor Communications Inc ASUS VS228 E3LMTF071438" }, { name = "meeting", monitor = "eDP-1" }, { name = "monitoring", monitor = "eDP-1" }, - { name = "blah", monitor = "DP-8" }, }