diff --git a/eww/.local/bin/eww/.config/eww/eww.scss b/eww/.local/bin/eww/.config/eww/eww.scss
new file mode 100644
index 0000000..2b32d39
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/eww.scss
@@ -0,0 +1,189 @@
+
+*{
+ all: unset;
+}
+
+window {
+ font-family: "JetBrainsMono Nerd Font", monospace;
+ background-color: #000000;
+ color: #FFFFFF;
+}
+
+/* Global normalization - no widget should add spacing */
+eventbox, box, label, scale {
+ padding: 0;
+ margin: 0;
+}
+
+$font-family: "JetBrainsMono Nerd Font", monospace;
+
+// Global colors (sync with ~/.config/colors)
+$bg-bar: #000000;
+$track: #3a3a3a;
+$accent: #E0AF68;
+$urgent: #F7768E;
+$fg: #ffffff;
+
+// Legacy
+$background: $bg-bar;
+$foreground: $fg;
+
+.workspace-entry {
+ /* Styles for all workspace entries */
+ padding: 0 0.5em;
+ font-family: $font-family;
+ color : $foreground;
+}
+
+.workspace-entry.current {
+ /* Styles for the current workspace */
+ color: $accent;
+ font-weight: bold;
+}
+
+.workspace-entry.urgent {
+ /* Styles for urgent workspaces */
+ color: $urgent;
+ font-weight: bold;
+}
+
+.time-label {
+ font-family: $font-family;
+ color : $foreground;
+ font-weight: bold;
+ margin-right: 5px;
+}
+
+.notification-eventbox {
+ padding: 0;
+ min-width: 0;
+ min-height: 0;
+}
+
+.notification-icon {
+ font-family: $font-family;
+ color : $foreground;
+ font-weight: bold;
+ margin-right: 5px;
+}
+
+.battery-percent {
+ font-family: $font-family;
+ color : $foreground;
+ font-weight: bold;
+ margin-right: 5px;
+}
+
+.battery-icon {
+ font-family: $font-family;
+ color : $foreground;
+ font-weight: bold;
+}
+
+.bar {
+ background-color: $background;
+}
+
+.wifi-eventbox {
+ padding: 0;
+ min-width: 0;
+ min-height: 0;
+}
+
+.wifi-icon{
+ color : $foreground;
+ background-color: $background;
+ font-weight: bold;
+}
+
+.brightness-icon {
+ color: $foreground;
+ font-weight: bold;
+ margin-right: 3px;
+}
+
+.volume-icon {
+ color: $foreground;
+ font-weight: bold;
+ margin-right: 3px;
+}
+
+.volume-bar {
+ min-width: 10px;
+ min-height: 6px;
+ padding: 0;
+ margin: 0;
+ margin-right: 10px;
+ border: none;
+ outline: none;
+}
+
+.volume-bar trough {
+ background-color: $track;
+ border-radius: 3px;
+ min-height: 6px;
+ min-width: 10px;
+ padding: 0;
+ margin: 0;
+ border: none;
+ outline: none;
+}
+
+.volume-bar highlight {
+ background-color: $fg;
+ border-radius: 3px;
+ padding: 0;
+ margin: 0;
+}
+
+.volume-bar slider {
+ all: unset;
+ padding: 0;
+ margin: 0;
+ min-width: 0;
+ min-height: 0;
+}
+
+.brightness-bar {
+ min-width: 10px;
+ min-height: 6px;
+ padding: 0;
+ margin: 0;
+ margin-right: 10px;
+ border: none;
+ outline: none;
+}
+
+.brightness-bar trough {
+ background-color: $track;
+ border-radius: 3px;
+ min-height: 6px;
+ min-width: 10px;
+ padding: 0;
+ margin: 0;
+ border: none;
+ outline: none;
+}
+
+.brightness-bar highlight {
+ background-color: $fg;
+ border-radius: 3px;
+ padding: 0;
+ margin: 0;
+}
+
+.brightness-bar slider {
+ all: unset;
+ padding: 0;
+ margin: 0;
+ min-width: 0;
+ min-height: 0;
+}
+
+tooltip {
+ background-color: $bg-bar;
+ color: $fg;
+ border: none;
+ border-radius: 0;
+ font-family: "JetBrainsMono Nerd Font", monospace;
+}
diff --git a/eww/.local/bin/eww/.config/eww/eww.yuck b/eww/.local/bin/eww/.config/eww/eww.yuck
new file mode 100644
index 0000000..7da06e5
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/eww.yuck
@@ -0,0 +1,122 @@
+(deflisten workspaces :initial "[]" "bash ~/.config/eww/scripts/get-workspaces")
+
+(deflisten current_workspace :initial "1" "bash ~/.config/eww/scripts/get-active-workspace")
+
+(defwidget workspaces [monitor]
+ (eventbox :onscroll "bash ~/.config/eww/scripts/change-active-workspace {} ${current_workspace}" :class "workspaces-widget"
+ (box :spacing 10 :orientation "h" :halign "start" :space-evenly false
+ (label :text "${workspaces}${current_workspace}" :visible false)
+ (for workspace in workspaces
+ (box
+ :visible {workspace.output == monitor}
+ (eventbox :onclick "swaymsg workspace number ${workspace.id}"
+ (box :class "workspace-entry ${workspace.focused ? 'current' : ''} ${workspace.urgent ? 'urgent' : ''}"
+ (label :text "${workspace.id}"))))))))
+
+
+(defpoll time :interval "1s"
+ "date '+%H:%M'")
+
+(defpoll time_tooltip :interval "1s"
+ "date '+%A, %B %d, %Y'")
+
+
+(defwidget time-widget []
+ (label
+ :text {time}
+ :tooltip time_tooltip
+ :class "time-label"))
+
+(defwidget notification-widget []
+ (eventbox :class "notification-eventbox" :onclick "bash ~/.config/eww/scripts/notification-history-toggle"
+ :tooltip "Toggle notification history"
+ (label :text "" :class "notification-icon")))
+
+(deflisten BATPERC :initial "" "bash ~/.config/eww/scripts/battery-perc-monitor")
+(deflisten BATICON :initial "" "bash ~/.config/eww/scripts/battery-icon-monitor")
+(deflisten BATTIME :initial "" "bash ~/.config/eww/scripts/battery-time-monitor")
+
+(defwidget battery-widget []
+ (box :orientation "horizontal" :spacing 0 :tooltip "Time remaining: ${BATTIME}"
+ (label :text {BATICON} :class "battery-icon")
+ (label :text {BATPERC} :class "battery-percent")))
+
+(defwidget internet []
+ (label :text wifi-icon
+ :tooltip wifi-name
+ :class "wifi-icon"))
+(deflisten wifi-icon :initial "" "bash ~/.config/eww/scripts/wifi-monitor")
+(deflisten wifi-name :initial "" "bash ~/.config/eww/scripts/wifi-name-monitor")
+
+(deflisten brightness :initial "50" "bash ~/.config/eww/scripts/brightness")
+
+(defwidget brightness-widget []
+ (eventbox :onscroll "[ {} = up ] && brightnessctl set 10%+ || brightnessctl set 10%-"
+ :tooltip "Brightness: ${brightness}%"
+ (box :orientation "h" :spacing 0
+ (label :text "" :class "brightness-icon")
+ (scale :min 0
+ :max 100
+ :value brightness
+ :class "brightness-bar"
+ :onchange "brightnessctl set {}%"))))
+
+(deflisten volume :initial "50" "bash ~/.config/eww/scripts/volume")
+(deflisten volume-icon :initial "" "bash ~/.config/eww/scripts/volume-icon-monitor")
+
+(defwidget volume-widget []
+ (eventbox :onscroll "[ {} = up ] && pactl set-sink-volume @DEFAULT_SINK@ +10% || pactl set-sink-volume @DEFAULT_SINK@ -10%"
+ :tooltip "Volume: ${volume}%"
+ (box :orientation "h" :spacing 0
+ (label :text volume-icon :class "volume-icon")
+ (scale :min 0
+ :max 100
+ :value volume
+ :class "volume-bar"
+ :onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%"))))
+
+(defwidget system []
+ (box :orientation "h" :halign "end" :spacing 0
+ (internet)
+ (brightness-widget)
+ (volume-widget)
+ (battery-widget)
+ (time-widget)
+ (notification-widget)))
+
+
+(defwidget bar [monitor]
+ (box :orientation "h" :space-evenly false
+ (workspaces :monitor monitor)
+ (box :hexpand true)
+ (system)))
+
+(defwindow bar0
+ :monitor 0
+ :geometry (geometry :x "0%"
+ :y "0px"
+ :width "100%"
+ :height "30px"
+ :anchor "top center")
+ :stacking "fg"
+ :exclusive true
+ :reserve (struts :distance "40px" :side "top")
+ :windowtype "dock"
+ :wm-ignore false
+ (bar :monitor "HDMI-A-1"))
+
+(defwindow bar1
+ :monitor 1
+ :geometry (geometry :x "0%"
+ :y "0px"
+ :width "100%"
+ :height "30px"
+ :anchor "top center")
+ :stacking "fg"
+ :exclusive true
+ :reserve (struts :distance "40px" :side "top")
+ :windowtype "dock"
+ :wm-ignore false
+ (bar :monitor "eDP-1"))
+
+
diff --git a/eww/.local/bin/eww/.config/eww/eww.yuck.backup b/eww/.local/bin/eww/.config/eww/eww.yuck.backup
new file mode 100644
index 0000000..a734ad7
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/eww.yuck.backup
@@ -0,0 +1,92 @@
+(deflisten workspaces :initial "[]" "bash ~/.config/eww/scripts/get-workspaces")
+
+(deflisten current_workspace :initial "1" "bash ~/.config/eww/scripts/get-active-workspace")
+
+(defwidget workspaces [monitor]
+ (eventbox :onscroll "bash ~/.config/eww/scripts/change-active-workspace {} ${current_workspace}" :class "workspaces-widget"
+ (box :spacing 10 :orientation "h" :halign "start" :space-evenly false
+ (label :text "${workspaces}${current_workspace}" :visible false)
+ (for workspace in workspaces
+ (box
+ :visible {workspace.output == monitor}
+ (eventbox :onclick "swaymsg workspace number ${workspace.id}"
+ (box :class "workspace-entry ${workspace.focused ? 'current' : ''} ${workspace.urgent ? 'urgent' : ''}"
+ (label :text "${workspace.id}"))))))))
+
+
+(defpoll time :interval "1s"
+ "date '+%H:%M'")
+
+
+(defwidget time-widget []
+ (label
+ :text {time}
+ :class "time-label"))
+
+(deflisten BATPERC :initial "" "bash ~/.config/eww/scripts/battery-perc-monitor")
+(deflisten BATICON :initial "" "bash ~/.config/eww/scripts/battery-icon-monitor")
+
+(defwidget battery-widget []
+ (box :orientation "horizontal" :spacing 0
+ (label :text {BATICON} :class "battery-icon")
+ (label :text {BATPERC} :class "battery-percent")))
+
+(defwidget wifi []
+ (label :text wifi-icon
+ :class "wifi-icon"))
+(deflisten wifi-icon :initial "" "bash ~/.config/eww/scripts/wifi-monitor")
+(deflisten wifi-name :initial "" "bash ~/.config/eww/scripts/wifi-name-monitor")
+
+(deflisten brightness :initial "50" "bash ~/.config/eww/scripts/brightness")
+
+(defwidget brightness-widget []
+ (eventbox :onscroll "[ {} = up ] && brightnessctl set 5%+ || brightnessctl set 5%-"
+ (box :orientation "h" :spacing 0
+ (label :text "" :class "brightness-icon")
+ (scale :min 0
+ :max 100
+ :value brightness
+ :class "brightness-bar"
+ :onchange "brightnessctl set {}%"))))
+
+(deflisten volume :initial "50" "bash ~/.config/eww/scripts/volume")
+
+(defwidget volume-widget []
+ (box :orientation "h" :spacing 0
+ (label :text "" :class "volume-icon")
+ (scale :min 0
+ :max 100
+ :value volume
+ :class "volume-bar"
+ :onchange "pactl set-sink-volume @DEFAULT_SINK@ {}%")))
+
+(defwidget system []
+ (box :orientation "h" :halign "end" :spacing 0
+ (brightness-widget)
+ (volume-widget)
+ (wifi)
+ (battery-widget)
+ (time-widget)))
+
+
+(defwidget bar [monitor]
+ (box :orientation "h" :space-evenly false
+ (workspaces :monitor monitor)
+ (box :hexpand true)
+ (system)))
+
+(defwindow bar0
+ :monitor 0
+ :geometry (geometry :x "0%"
+ :y "0px"
+ :width "100%"
+ :height "30px"
+ :anchor "top center")
+ :stacking "fg"
+ :exclusive true
+ :reserve (struts :distance "40px" :side "top")
+ :windowtype "dock"
+ :wm-ignore false
+ (bar :monitor "eDP-1"))
+
+
diff --git a/eww/.local/bin/eww/.config/eww/scripts/battery b/eww/.local/bin/eww/.config/eww/scripts/battery
new file mode 100644
index 0000000..ecf21f3
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/battery
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+## Get battery info
+BATTERY="$(acpi | awk -F ' ' 'NR==1 {print $4; exit}' | tr -d \%,)"
+CHARGE="$(acpi | awk -F ' ' 'END {print $3}' | tr -d \,)"
+
+main() {
+ if [[ ($CHARGE = *"Charging"*) && ($BATTERY -lt "100") ]]; then
+ echo ""
+ elif [[ $CHARGE = *"Full"* ]]; then
+ echo ""
+ else
+ if [[ ($BATTERY -lt 100) && (($BATTERY -gt 65) || ($BATTERY -eq 65)) ]]; then
+ echo ""
+ elif [[ ($BATTERY -lt 65) && (($BATTERY -gt 35) || ($BATTERY -eq 35)) ]]; then
+ echo ""
+ elif [[ ($BATTERY -lt 35) && (($BATTERY -gt 10) || ($BATTERY -eq 10)) ]]; then
+ echo ""
+ elif [[ ($BATTERY -lt 10) && (($BATTERY -gt 0) || ($BATTERY -eq 0)) ]]; then
+ echo ""
+ fi
+ fi
+}
+
+if [[ $1 == '--icon' ]]; then
+ main
+elif [[ $1 == '--perc' ]]; then
+ echo "${BATTERY}%"
+fi
diff --git a/eww/.local/bin/eww/.config/eww/scripts/battery-icon-monitor b/eww/.local/bin/eww/.config/eww/scripts/battery-icon-monitor
new file mode 100644
index 0000000..4782224
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/battery-icon-monitor
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+get_icon() {
+ bash ~/.config/eww/scripts/battery --icon
+}
+
+# Output initial state
+get_icon
+
+# Monitor battery events using upower
+upower --monitor | while read -r line; do
+ get_icon
+done
diff --git a/eww/.local/bin/eww/.config/eww/scripts/battery-perc-monitor b/eww/.local/bin/eww/.config/eww/scripts/battery-perc-monitor
new file mode 100644
index 0000000..1cc0a50
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/battery-perc-monitor
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+get_perc() {
+ bash ~/.config/eww/scripts/battery --perc
+}
+
+# Output initial state
+get_perc
+
+# Monitor battery events using upower
+upower --monitor | while read -r line; do
+ get_perc
+done
diff --git a/eww/.local/bin/eww/.config/eww/scripts/battery-time-monitor b/eww/.local/bin/eww/.config/eww/scripts/battery-time-monitor
new file mode 100644
index 0000000..f1164d2
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/battery-time-monitor
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+get_time() {
+ acpi -b | grep -oP '\d{2}:\d{2}:\d{2}' || echo "Calculating..."
+}
+
+# Output initial state
+get_time
+
+# Monitor battery events using upower
+upower --monitor | while read -r line; do
+ get_time
+done
diff --git a/eww/.local/bin/eww/.config/eww/scripts/brightness b/eww/.local/bin/eww/.config/eww/scripts/brightness
new file mode 100644
index 0000000..f509ae6
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/brightness
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Get current brightness percentage
+get_brightness() {
+ local current=$(brightnessctl get)
+ local max=$(brightnessctl max)
+ echo $((current * 100 / max))
+}
+
+# Output initial brightness
+get_brightness
+
+# Monitor brightness changes
+inotifywait -m -e modify /sys/class/backlight/*/brightness 2>/dev/null | while read -r; do
+ get_brightness
+done
diff --git a/eww/.local/bin/eww/.config/eww/scripts/change-active-workspace b/eww/.local/bin/eww/.config/eww/scripts/change-active-workspace
new file mode 100644
index 0000000..469d2c4
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/change-active-workspace
@@ -0,0 +1,8 @@
+#!/bin/bash
+current=$1
+direction=$2
+if [ "$direction" = "up" ]; then
+ swaymsg workspace number $((current + 1))
+elif [ "$direction" = "down" ]; then
+ swaymsg workspace number $((current - 1))
+fi
diff --git a/eww/.local/bin/eww/.config/eww/scripts/get-active-workspace b/eww/.local/bin/eww/.config/eww/scripts/get-active-workspace
new file mode 100644
index 0000000..196d76f
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/get-active-workspace
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# Function to get focused workspace
+get_focused() {
+ swaymsg -t get_workspaces | jq -r '.[] | select(.focused==true) | .num'
+}
+
+# Output initial state
+get_focused
+
+# Subscribe to workspace events and output updates
+swaymsg -t subscribe -m '["workspace"]' | while read -r event; do
+ get_focused
+done
diff --git a/eww/.local/bin/eww/.config/eww/scripts/get-workspaces b/eww/.local/bin/eww/.config/eww/scripts/get-workspaces
new file mode 100644
index 0000000..db145b7
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/get-workspaces
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# Function to get and format workspaces
+get_workspaces() {
+ swaymsg -t get_workspaces | jq -c '[.[] | {id: .num, output: .output, focused: .focused, visible: .visible, urgent: .urgent}]'
+}
+
+# Output initial state
+get_workspaces
+
+# Subscribe to workspace events and output updates
+swaymsg -t subscribe -m '["workspace"]' | while read -r event; do
+ get_workspaces
+done
diff --git a/eww/.local/bin/eww/.config/eww/scripts/notification-history-toggle b/eww/.local/bin/eww/.config/eww/scripts/notification-history-toggle
new file mode 100644
index 0000000..486a334
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/notification-history-toggle
@@ -0,0 +1,16 @@
+#!/bin/bash
+# Toggle notification history display (mako version)
+# Shows up to 10 previous notifications, or closes all if any are displayed
+
+# Check if there are any notifications currently displayed
+displayed=$(makoctl list 2>/dev/null | grep -c "^Notification" 2>/dev/null)
+
+if [ "$displayed" -gt 0 ]; then
+ # If notifications are showing, dismiss them all
+ makoctl dismiss -a
+else
+ # If no notifications are showing, restore up to 10 from history
+ for i in {1..10}; do
+ makoctl restore 2>/dev/null || break
+ done
+fi
diff --git a/eww/.local/bin/eww/.config/eww/scripts/popup b/eww/.local/bin/eww/.config/eww/scripts/popup
new file mode 100644
index 0000000..7d2b4c4
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/popup
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+
+if [ "$1" = "wifi" ]; then
+alacritty -e nmtui
+fi
diff --git a/eww/.local/bin/eww/.config/eww/scripts/volume b/eww/.local/bin/eww/.config/eww/scripts/volume
new file mode 100644
index 0000000..f5d979e
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/volume
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# Get current volume percentage
+get_volume() {
+ pactl get-sink-volume @DEFAULT_SINK@ | grep -oP '\d+%' | head -1 | tr -d '%'
+}
+
+# Output initial volume
+get_volume
+
+# Subscribe to volume changes
+pactl subscribe | grep --line-buffered "sink" | while read -r line; do
+ get_volume
+done
diff --git a/eww/.local/bin/eww/.config/eww/scripts/volume-icon-monitor b/eww/.local/bin/eww/.config/eww/scripts/volume-icon-monitor
new file mode 100755
index 0000000..dfacfab
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/volume-icon-monitor
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+# Get current mute state and return appropriate icon
+get_volume_icon() {
+ muted=$(pactl get-sink-mute @DEFAULT_SINK@ | grep -o 'yes\|no')
+ if [ "$muted" = "yes" ]; then
+ echo " "
+ else
+ echo ""
+ fi
+}
+
+# Output initial icon
+get_volume_icon
+
+# Subscribe to volume changes (including mute/unmute)
+pactl subscribe | grep --line-buffered "sink" | while read -r line; do
+ get_volume_icon
+done
diff --git a/eww/.local/bin/eww/.config/eww/scripts/wifi b/eww/.local/bin/eww/.config/eww/scripts/wifi
new file mode 100644
index 0000000..40240ae
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/wifi
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+symbol() {
+[ $(cat /sys/class/net/w*/operstate) = down ] && echo && exit
+echo
+}
+
+name() {
+nmcli | grep "^wlp" | sed 's/\ connected\ to\ /Connected to /g' | cut -d ':' -f2
+}
+
+[ "$1" = "icon" ] && symbol && exit
+[ "$1" = "name" ] && name && exit
diff --git a/eww/.local/bin/eww/.config/eww/scripts/wifi-monitor b/eww/.local/bin/eww/.config/eww/scripts/wifi-monitor
new file mode 100644
index 0000000..62bc24c
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/wifi-monitor
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+get_icon() {
+ [ $(cat /sys/class/net/w*/operstate 2>/dev/null) = down ] && echo "" || echo ""
+}
+
+# Output initial state
+get_icon
+
+# Monitor network changes
+nmcli monitor | while read -r line; do
+ get_icon
+done
diff --git a/eww/.local/bin/eww/.config/eww/scripts/wifi-name-monitor b/eww/.local/bin/eww/.config/eww/scripts/wifi-name-monitor
new file mode 100644
index 0000000..9513bc7
--- /dev/null
+++ b/eww/.local/bin/eww/.config/eww/scripts/wifi-name-monitor
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+get_name() {
+ nmcli | grep "^wlp" | sed 's/\ connected\ to\ /Connected to /g' | cut -d ':' -f2
+}
+
+# Output initial state
+get_name
+
+# Monitor network changes
+nmcli monitor | while read -r line; do
+ get_name
+done
diff --git a/eww/.local/bin/eww/.config/eww/wallpaper b/eww/.local/bin/eww/.config/eww/wallpaper
new file mode 100644
index 0000000..41c41d0
Binary files /dev/null and b/eww/.local/bin/eww/.config/eww/wallpaper differ
diff --git a/mako/.config/mako/config b/mako/.config/mako/config
new file mode 100644
index 0000000..eadf35e
--- /dev/null
+++ b/mako/.config/mako/config
@@ -0,0 +1,49 @@
+# Mako notification configuration
+# Styled to match Sway/Fuzzel/eww theme
+# Generated from template using ~/.config/update-colors
+
+# Appearance
+font=JetBrainsMono Nerd Font 10
+background-color=#1c2433
+text-color=#afbbd2
+border-color=#69C3FF
+border-size=3
+border-radius=7
+width=300
+height=300
+margin=5
+padding=8
+icon-path=/usr/share/icons/Papirus-Dark
+
+# Layout
+anchor=top-right
+outer-margin=30,0,0,0
+
+# Behavior
+default-timeout=6000
+ignore-timeout=0
+max-visible=20
+sort=-time
+
+# Format - show app name in italics
+format=%s (%a)\n%b
+markup=1
+
+# Mouse bindings - click to focus app, invoke action, and close
+on-button-left=exec ~/.config/mako/scripts/handle-click $id
+on-button-middle=none
+on-button-right=exec makoctl dismiss -n $id
+
+# Urgency levels
+[urgency=low]
+background-color=#212a3b
+border-color=#405275
+
+[urgency=normal]
+background-color=#1c2433
+border-color=#69C3FF
+
+[urgency=critical]
+background-color=#1c2433
+border-color=#FF738A
+default-timeout=0
diff --git a/mako/.config/mako/config.template b/mako/.config/mako/config.template
new file mode 100644
index 0000000..7d1d273
--- /dev/null
+++ b/mako/.config/mako/config.template
@@ -0,0 +1,49 @@
+# Mako notification configuration
+# Styled to match Sway/Fuzzel/eww theme
+# Generated from template using ~/.config/update-colors
+
+# Appearance
+font=JetBrainsMono Nerd Font 10
+background-color=#$BG
+text-color=#$FG
+border-color=#$BORDER
+border-size=3
+border-radius=7
+width=300
+height=300
+margin=5
+padding=8
+icon-path=/usr/share/icons/Papirus-Dark
+
+# Layout
+anchor=top-center
+outer-margin=30,0,0,0
+
+# Behavior
+default-timeout=6000
+ignore-timeout=0
+max-visible=20
+sort=-time
+
+# Format - show app name in italics
+format=%s (%a)\n%b
+markup=1
+
+# Mouse bindings - click to focus app, invoke action, and close
+on-button-left=exec ~/.config/mako/scripts/handle-click $id
+on-button-middle=none
+on-button-right=exec makoctl dismiss -n $id
+
+# Urgency levels
+[urgency=low]
+background-color=#$BG_BAR
+border-color=#$TRACK
+
+[urgency=normal]
+background-color=#$BG
+border-color=#$BORDER
+
+[urgency=critical]
+background-color=#$BG
+border-color=#$URGENT
+default-timeout=0
diff --git a/mako/.config/mako/scripts/handle-click b/mako/.config/mako/scripts/handle-click
new file mode 100644
index 0000000..ae5f495
--- /dev/null
+++ b/mako/.config/mako/scripts/handle-click
@@ -0,0 +1,43 @@
+#!/bin/bash
+# Handle notification click: focus app → invoke action → close
+# Called by mako with notification ID as parameter
+
+ID="$1"
+
+if [ -z "$ID" ]; then
+ exit 0
+fi
+
+# Get app name from notification using makoctl
+APPNAME=$(makoctl list | grep -A 2 "^Notification $ID" | grep "App name:" | cut -d: -f2- | xargs)
+
+# Step 1: Focus the application window in Sway (if app name found)
+if [ -n "$APPNAME" ]; then
+ # Get the workspace of the window
+ WORKSPACE=$(swaymsg -t get_tree | jq -r ".. | select(.app_id?==\"$APPNAME\" or .window_properties?.class?==\"$APPNAME\") | .workspace" | head -1)
+
+ # If workspace not found, try case-insensitive
+ if [ -z "$WORKSPACE" ] || [ "$WORKSPACE" = "null" ]; then
+ WORKSPACE=$(swaymsg -t get_tree | jq -r ".. | select(.app_id?|test(\"$APPNAME\";\"i\") or .window_properties?.class?|test(\"$APPNAME\";\"i\")) | .workspace" | head -1)
+ fi
+
+ # Switch to the workspace if found
+ if [ -n "$WORKSPACE" ] && [ "$WORKSPACE" != "null" ]; then
+ swaymsg workspace "$WORKSPACE" 2>/dev/null
+ sleep 0.1
+ fi
+
+ # Now focus the window
+ swaymsg "[app_id=\"$APPNAME\"]" focus 2>/dev/null || \
+ swaymsg "[app_id=\"(?i)$APPNAME\"]" focus 2>/dev/null || \
+ swaymsg "[class=\"$APPNAME\"]" focus 2>/dev/null || \
+ swaymsg "[class=\"(?i)$APPNAME\"]" focus 2>/dev/null
+
+ sleep 0.1
+fi
+
+# Step 2: Invoke the notification's default action (if any)
+makoctl invoke -n "$ID" 2>/dev/null
+
+# Step 3: Dismiss the notification
+makoctl dismiss -n "$ID" 2>/dev/null
diff --git a/wezterm/.local/bin/wezterm/.config/wezterm/theme/init.lua b/wezterm/.local/bin/wezterm/.config/wezterm/theme/init.lua
new file mode 100644
index 0000000..32f7a4f
--- /dev/null
+++ b/wezterm/.local/bin/wezterm/.config/wezterm/theme/init.lua
@@ -0,0 +1,240 @@
+-- Bearded Arc Theme
+-- Based on: https://github.com/BeardedBear/bearded-theme
+-- Adapted for WezTerm
+
+local main = {}
+
+local main_palette = {
+ base = '#1c2433',
+ overlay = '#212a3b',
+ muted = '#4a5e84',
+ text = '#afbbd2',
+ red = '#FF738A',
+ yellow = '#EACD61',
+ orange = '#FF955C',
+ green = '#3CEC85',
+ cyan = '#69C3FF',
+ purple = '#B78AFF',
+ highlight = '#8196b5',
+}
+
+local main_active_tab = {
+ bg_color = main_palette.overlay,
+ fg_color = main_palette.text,
+}
+
+local main_inactive_tab = {
+ bg_color = main_palette.base,
+ fg_color = main_palette.muted,
+}
+
+function main.colors()
+ return {
+ foreground = main_palette.text,
+ background = main_palette.base,
+ cursor_bg = main_palette.yellow,
+ cursor_border = main_palette.yellow,
+ cursor_fg = main_palette.text,
+ selection_bg = '#405275',
+ selection_fg = main_palette.text,
+
+ ansi = {
+ main_palette.overlay,
+ main_palette.red,
+ main_palette.green,
+ main_palette.yellow,
+ main_palette.cyan,
+ main_palette.purple,
+ main_palette.orange,
+ main_palette.text,
+ },
+
+ brights = {
+ main_palette.muted,
+ main_palette.red,
+ main_palette.green,
+ main_palette.yellow,
+ main_palette.cyan,
+ main_palette.purple,
+ main_palette.orange,
+ main_palette.text,
+ },
+
+ tab_bar = {
+ background = main_palette.base,
+ active_tab = main_active_tab,
+ inactive_tab = main_inactive_tab,
+ inactive_tab_hover = main_active_tab,
+ new_tab = main_inactive_tab,
+ new_tab_hover = main_active_tab,
+ inactive_tab_edge = main_palette.muted, -- (Fancy tab bar only)
+ },
+ }
+end
+
+function main.window_frame() -- (Fancy tab bar only)
+ return {
+ active_titlebar_bg = main_palette.base,
+ inactive_titlebar_bg = main_palette.base,
+ }
+end
+
+local moon = {}
+
+local moon_palette = {
+ base = '#1a212f',
+ overlay = '#253043',
+ muted = '#4a5e84',
+ text = '#afbbd2',
+ red = '#FF738A',
+ yellow = '#EACD61',
+ orange = '#FF955C',
+ green = '#3CEC85',
+ cyan = '#69C3FF',
+ purple = '#B78AFF',
+ highlight = '#8196b5',
+}
+
+local moon_active_tab = {
+ bg_color = moon_palette.overlay,
+ fg_color = moon_palette.text,
+}
+
+local moon_inactive_tab = {
+ bg_color = moon_palette.base,
+ fg_color = moon_palette.muted,
+}
+
+function moon.colors()
+ return {
+ foreground = moon_palette.text,
+ background = moon_palette.base,
+ cursor_bg = moon_palette.yellow,
+ cursor_border = moon_palette.yellow,
+ cursor_fg = moon_palette.text,
+ selection_bg = moon_palette.overlay,
+ selection_fg = moon_palette.text,
+
+ ansi = {
+ moon_palette.overlay,
+ moon_palette.red,
+ moon_palette.green,
+ moon_palette.yellow,
+ moon_palette.cyan,
+ moon_palette.purple,
+ moon_palette.orange,
+ moon_palette.text,
+ },
+
+ brights = {
+ moon_palette.muted,
+ moon_palette.red,
+ moon_palette.green,
+ moon_palette.yellow,
+ moon_palette.cyan,
+ moon_palette.purple,
+ moon_palette.orange,
+ moon_palette.text,
+ },
+
+ tab_bar = {
+ background = moon_palette.base,
+ active_tab = moon_active_tab,
+ inactive_tab = moon_inactive_tab,
+ inactive_tab_hover = moon_active_tab,
+ new_tab = moon_inactive_tab,
+ new_tab_hover = moon_active_tab,
+ inactive_tab_edge = moon_palette.muted, -- (Fancy tab bar only)
+ },
+ }
+end
+
+function moon.window_frame() -- (Fancy tab bar only)
+ return {
+ active_titlebar_bg = moon_palette.base,
+ inactive_titlebar_bg = moon_palette.base,
+ }
+end
+
+local dawn = {}
+
+local dawn_palette = {
+ base = '#151b26',
+ overlay = '#1a212f',
+ muted = '#4a5e84',
+ text = '#d0d7e4',
+ red = '#E35535',
+ yellow = '#FF955C',
+ magenta = '#F38CEC',
+ green = '#3CEC85',
+ cyan = '#69C3FF',
+ purple = '#B78AFF',
+ highlight = '#405275',
+}
+
+local dawn_active_tab = {
+ bg_color = dawn_palette.overlay,
+ fg_color = dawn_palette.text,
+}
+
+local dawn_inactive_tab = {
+ bg_color = dawn_palette.base,
+ fg_color = dawn_palette.muted,
+}
+
+function dawn.colors()
+ return {
+ foreground = dawn_palette.text,
+ background = dawn_palette.base,
+ cursor_bg = dawn_palette.muted,
+ cursor_border = dawn_palette.muted,
+ cursor_fg = dawn_palette.text,
+ selection_bg = dawn_palette.overlay,
+ selection_fg = dawn_palette.text,
+
+ ansi = {
+ dawn_palette.overlay,
+ dawn_palette.red,
+ dawn_palette.green,
+ dawn_palette.yellow,
+ dawn_palette.cyan,
+ dawn_palette.purple,
+ dawn_palette.magenta,
+ dawn_palette.text,
+ },
+
+ brights = {
+ dawn_palette.muted,
+ dawn_palette.red,
+ dawn_palette.green,
+ dawn_palette.yellow,
+ dawn_palette.cyan,
+ dawn_palette.purple,
+ dawn_palette.magenta,
+ dawn_palette.text,
+ },
+
+ tab_bar = {
+ background = dawn_palette.base,
+ active_tab = dawn_active_tab,
+ inactive_tab = dawn_inactive_tab,
+ inactive_tab_hover = dawn_active_tab,
+ new_tab = dawn_inactive_tab,
+ new_tab_hover = dawn_active_tab,
+ inactive_tab_edge = dawn_palette.muted, -- (Fancy tab bar only)
+ },
+ }
+end
+
+function dawn.window_frame() -- (Fancy tab bar only)
+ return {
+ active_titlebar_bg = dawn_palette.base,
+ inactive_titlebar_bg = dawn_palette.base,
+ }
+end
+
+return {
+ main = main,
+ moon = moon,
+ dawn = dawn,
+}
diff --git a/wezterm/.local/bin/wezterm/.config/wezterm/wezterm.lua b/wezterm/.local/bin/wezterm/.config/wezterm/wezterm.lua
new file mode 100644
index 0000000..7d4779a
--- /dev/null
+++ b/wezterm/.local/bin/wezterm/.config/wezterm/wezterm.lua
@@ -0,0 +1,23 @@
+local wezterm = require 'wezterm'
+local config = {}
+local theme = require('theme/init').main
+
+-- Font configuration
+config.font = wezterm.font 'JetBrainsMono Nerd Font'
+config.font_size = 11.0
+
+config.colors = theme.colors()
+
+-- Window
+config.enable_tab_bar = false
+config.window_close_confirmation = 'NeverPrompt'
+
+config.wayland_scroll_factor = 0.15
+
+-- Wayland specific fixes
+config.enable_wayland = true
+
+-- Enable Kitty keyboard protocol for better key disambiguation (Ctrl+I vs Tab)
+config.enable_kitty_keyboard = true
+
+return config