diff --git a/dot_config/waybar/Normal.png b/dot_config/waybar/Normal.png
new file mode 100644
index 0000000..07826fb
--- /dev/null
+++ b/dot_config/waybar/Normal.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7cc2571124573dca4d5d7669f9fef1338de59f321f23a1cce142c6d7ae8378f9
+size 74556
diff --git a/dot_config/waybar/README.md b/dot_config/waybar/README.md
new file mode 100644
index 0000000..a0b9833
--- /dev/null
+++ b/dot_config/waybar/README.md
@@ -0,0 +1,29 @@
+# Getting Started
+
+## Dependancies
+
+TODO: wip sorry
+
+- `playerctl`
+- `jq`
+- for update tracking: `paru` (modify `modules/updates.sh` for a different AUR helper)
+
+Optionals (unused):
+- `zscroll`
+
+##
+
+You know the drills : download and extract to your `${XDG_CONFIG_HOME}/waybar`
+
+# Screenshots
+
+
+
+
+
+
+
+
+
+screenshot by BLACKmeow(x:@miji_black, p:91709880)
+
diff --git a/dot_config/waybar/archlinux.svg b/dot_config/waybar/archlinux.svg
new file mode 100644
index 0000000..497d1c8
--- /dev/null
+++ b/dot_config/waybar/archlinux.svg
@@ -0,0 +1,12 @@
+
+
diff --git a/dot_config/waybar/biome.json b/dot_config/waybar/biome.json
new file mode 100644
index 0000000..e858ab5
--- /dev/null
+++ b/dot_config/waybar/biome.json
@@ -0,0 +1,7 @@
+{
+ "json": {
+ "formatter": {
+ "indentStyle": "space"
+ }
+ }
+}
diff --git a/dot_config/waybar/config.jsonc b/dot_config/waybar/config.jsonc
new file mode 100644
index 0000000..7d30851
--- /dev/null
+++ b/dot_config/waybar/config.jsonc
@@ -0,0 +1,472 @@
+{
+ "output": ["DP-1", "HDMI-A-1"],
+ "layer": "top",
+ "position": "top",
+ "height": 32,
+ "modules-left": [
+ //"hyprland/workspaces",
+ //"sway/workspaces#sway"
+ "river/tags",
+ //"river/layout",
+
+ "group/visualisation"
+ // "custom/media",
+ // "hyprland/window",
+ ],
+ "modules-center": [
+ "group/tray-group",
+ "wlr/taskbar"
+ // "mpd",
+ ],
+ "modules-right": [
+ "group/hardware",
+ "group/audio",
+ "network",
+ "group/rightmost"
+ ],
+ "group/tray-group": {
+ "orientation": "horizontal",
+ "modules": [
+ "tray",
+ "gamemode"
+ // "keyboard-state",
+ ]
+ },
+ "group/mpdris": {
+ "orientation": "horizontal",
+ "modules": [
+ // "image#album-art",
+ "mpris"
+ ]
+ },
+ "group/visualisation": {
+ "orientation": "horizontal",
+ "drawer": {
+ "transition-duration": 500,
+ "children-class": "visualiser",
+ "transition-left-to-right": true
+ },
+ "modules": ["cava", "group/mpdris"]
+ },
+ "group/audio": {
+ "orientation": "horizontal",
+ "drawer": {
+ "transition-duration": 500,
+ "children-class": "not-power",
+ "transition-left-to-right": false
+ },
+ "modules": [
+ "pulseaudio"
+ // "pulseaudio/slider"
+ ]
+ },
+ "group/hardware": {
+ "orientation": "horizontal",
+ "drawer": {
+ "transition-duration": 500,
+ "children-class": "not-power",
+ "transition-left-to-right": false
+ },
+ "modules": ["temperature", "memory", "cpu", "temperature#amdgpu"]
+ },
+ "group/rightmost": {
+ "orientation": "horizontal",
+ "modules": [
+ "custom/notification",
+ "custom/updates",
+ "clock"
+ // "custom/logo"
+ ]
+ },
+ "hyprland/workspaces": {
+ "active-only": false,
+ "disable-scroll": true,
+ "all-outputs": false,
+ "format": "{name}",
+ "sort-by-number": true,
+ "format-icons": {
+ "active": "",
+ "default": ""
+ }
+ },
+ "sway/workspaces#sway": {
+ "current-only": false,
+ "disable-scroll": true,
+ "all-outputs": false,
+ "format": "{name}: {icon}",
+ "numeric-first": true,
+ "format-icons": {
+ "1": " ",
+ "2": " ",
+ "3": " ",
+ "4": " ",
+ "5": " ",
+ "6": " ",
+ "7": " ",
+ "8": " ",
+ "9": " ",
+ "default": " "
+ }
+ // "persistent-workspaces": {
+ // "1": ["DP-1"],
+ // "2": ["DP-1"],
+ // "3": ["DP-1"],
+ // "4": ["DP-1"],
+ // "5": ["DP-1"],
+ // "6": ["HDMI-A-1"],
+ // "7": ["HDMI-A-1"],
+ // "8": ["HDMI-A-1"],
+ // "9": ["HDMI-A-1"],
+ // "10": ["HDMI-A-1"]
+ // }
+ },
+ "river/tags": {
+ "num-tags": 8,
+ "set-tags": [
+ // 00000001
+ 2147483649,
+
+ // 00000010
+ 2147483650,
+
+ // 00000100
+ 2147483652,
+
+ // 00001000
+ 2147483656,
+
+ // 00010000
+ 2147483664,
+
+ // 00100000
+ 2147483680,
+
+ // 01000000
+ 2147483712,
+
+ // 10000000
+ 2147483776
+ ],
+ "tag-labels": [" ", " ", " ", " ", " ", " ", " ", " "]
+ },
+ "river/layout": {
+ "format": "{}",
+ "min-length": 4,
+ "align": "right"
+ },
+ "wlr/taskbar": {
+ "all-outputs": false,
+ "format": "{icon}",
+ "icon-size": 14,
+ "icon-theme": "Papirus-Dark",
+ "active-first": false,
+ "tooltip-format": "{title} - {app_id}",
+ "on-click": "activate",
+ "on-click-middle": "close",
+ "ignore-list": [],
+ "app_ids-mapping": {
+ "firefoxdeveloperedition": "firefox-developer-edition"
+ }
+ },
+ "tray": {
+ "icon-size": 12,
+ "spacing": 10
+ },
+ "custom/media": {
+ "format": "{icon} {}",
+ "max-length": 40,
+ "escape": true,
+ "exec": "$HOME/.config/waybar/modules/mpris/scroll_status.sh NOBAR",
+ "on-click": "playerctl play-pause",
+ "on-click-middle": "playerctl previous",
+ "on-click-right": "playerctl next"
+ },
+ "mpd": {
+ "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S})",
+ "format-disconnected": "Disconnected",
+ "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon} Stopped",
+ "interval": 10,
+ "consume-icons": {
+ "on": " " // Icon shows only when "consume" is on
+ },
+ "random-icons": {
+ "off": " ", // Icon grayed out when "random" is off
+ "on": " "
+ },
+ "repeat-icons": {
+ "on": " "
+ },
+ "single-icons": {
+ "on": "1 "
+ },
+ "state-icons": {
+ "paused": "",
+ "playing": ""
+ },
+ "tooltip-format": "MPD (connected)",
+ "tooltip-format-disconnected": "MPD (disconnected)"
+ },
+ "mpris": {
+ "markup": true,
+ "interval": 5,
+ // "format": "{player_icon} {title} - {artist}\n{album}",
+ // "format-paused": "{player_icon} {title} - {artist}\n{album}",
+ "format": "{player_icon} {dynamic}",
+ "format-paused": "{status_icon} {dynamic}",
+ "title-len": 30,
+ "dynamic-len": 60,
+ "player-icons": {
+ "default": " ",
+ "mpv": " ",
+ "plasma-browser-integration": " ",
+ "firefox": " ",
+ "spotify": " "
+ },
+ "status-icons": {
+ "paused": "▶"
+ }
+ // "ignored-players": ["firefox"]
+ },
+ "memory": {
+ "interval": 30,
+ "format": " {used:0.1f}G/{total:0.1f}G"
+ },
+ "cpu": {
+ "interval": 1,
+ "max-length": 15,
+ // "format": " {}%",
+ "format": "{icon0}{icon1}{icon2}{icon3}{icon4}{icon5}{icon6}{icon7}{icon8}{icon9}{icon10}{icon11}{icon12}{icon13}{icon14}{icon15}",
+ "format-icons": [
+ "▁", // green
+ "▂", // blue
+ "▃", // white
+ "▄", // white
+ "▅", // yellow
+ "▆", // yellow
+ "▇", // orange
+ "█" // red
+ ]
+ },
+ "custom/notification": {
+ "tooltip": false,
+ "format": "{icon} ",
+ "format-icons": {
+ "notification": "",
+ "none": "",
+ "dnd-notification": "",
+ "dnd-none": "",
+ "inhibited-notification": "",
+ "inhibited-none": "",
+ "dnd-inhibited-notification": "",
+ "dnd-inhibited-none": ""
+ },
+ "return-type": "json",
+ "exec-if": "which swaync-client",
+ "exec": "swaync-client -swb",
+ "on-click-release": "swaync-client -t -sw",
+ "on-click-middle-release": "sleep 0.150 && swaync-client -d -sw",
+ "escape": true
+ },
+ "gamemode": {
+ "format": "{glyph}",
+ "format-alt": "{glyph} {count}",
+ "glyph": " ",
+ "hide-not-running": true,
+ "use-icon": true,
+ "icon-name": "input-gaming-symbolic",
+ "icon-spacing": 4,
+ "icon-size": 20,
+ "tooltip": true,
+ "tooltip-format": "Games running: {count}"
+ },
+ "clock": {
+ "format": "{:%R}",
+ // "format": "{:%a %d %b %R}",
+ "tooltip-format": "{calendar}",
+ "calendar": {
+ "mode": "month",
+ "mode-mon-col": 3,
+ "weeks-pos": "right",
+ "on-scroll": 1,
+ "on-click-right": "mode",
+ "format": {
+ "months": "{}",
+ "days": "{}",
+ "weeks": "W{}",
+ "weekdays": "{}",
+ "today": "{}"
+ }
+ }
+ },
+ "temperature": {
+ "thermal-zone": 0,
+ "hwmon-path": "/sys/class/hwmon/hwmon3/temp1_input",
+ "critical-threshold": 80,
+ "format-critical": "{icon}",
+ "format": "{icon}",
+ "tooltip-format": "CPU: {temperatureC}°C",
+ "format-icons": [
+ " ▁", // green
+ " ▂", // blue
+ " ▃", // white
+ " ▄", // white
+ " ▅", // yellow
+ " ▆", // yellow
+ " ▇", // orange
+ " █" // red
+ ]
+ },
+ "temperature#amdgpu": {
+ "thermal-zone": 0,
+ "hwmon-path": "/sys/class/hwmon/hwmon0/temp1_input",
+ "critical-threshold": 100,
+ "format-critical": "{icon}",
+ "format": "{icon}",
+ "tooltip-format": "GPU (edge): {temperatureC}°C",
+ "format-icons": [
+ " ▁", // green
+ " ▂", // blue
+ " ▃", // white
+ " ▄", // white
+ " ▅", // yellow
+ " ▆", // yellow
+ " ▇", // orange
+ " █" // red
+ ]
+ },
+ "network": {
+ "format-wifi": "",
+ "format-ethernet": "",
+ "format-linked": "{ifname} (No IP) ",
+ "format-disconnected": " Disconnected",
+ "tooltip-format-ethernet": "{ifname} | {ipaddr}/{cidr} | Down Speed: {bandwidthDownBits}, Up Speed: {bandwidthUpBits}",
+ "tooltip-format-wifi": "{ifname} | {ipaddr}/{cidr} | {essid} | Signal Strenght: {signalStrength}% | Down Speed: {bandwidthDownBits}, Up Speed: {bandwidthUpBits}",
+ "on-click": "networkmanager_dmenu"
+ },
+ "image#album-art": {
+ "exec": "~/.config/waybar/modules/mpris/album_art.sh",
+ "size": 20,
+ "interval": 30
+ },
+ "custom/updates": {
+ "interval": 120,
+ "return-type": "string",
+ "exec": "~/.config/waybar/modules/updates.sh",
+ "tooltip": false,
+ "on-click": "setsid -f foot -e paru -Syyu"
+ },
+ "custom/downloads": {
+ "interval": 600,
+ "return-type": "string",
+ "exec": "~/.config/waybar/modules/downloads.py",
+ "tooltip": false,
+ "on-click": "xdg-open https://github.com/xelphlinux/xelph-iso"
+ },
+ "custom/logo": {
+ "format": " ",
+ "tooltip": false,
+ "on-click-release": "rofi -show power-menu -modi power-menu:rofi-power-menu"
+ },
+ "wireplumber": {
+ "format": "{volume}%",
+ "format-muted": "",
+ "on-click": "helvum",
+ "max-volume": 150,
+ "scroll-step": 0.2
+ },
+ "pulseaudio": {
+ "format": "{icon}",
+ "format-bluetooth": "{icon} ",
+ "format-muted": " ",
+ "tooltip-format": "{icon} {volume}% {format_source} {desc}",
+ "on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle",
+ "on-click-middle": "helvum",
+ "on-click-right": "pavucontrol",
+ "scroll-step": 5,
+ // "format-icons": {
+ // "headphone": "",
+ // "hands-free": "",
+ // "headset": "",
+ // "phone": "",
+ // "portable": "",
+ // "car": "",
+ // "default": ["", "", ""]
+ // },
+ "format-icons": [
+ " ▁", // green
+ " ▂", // blue
+ " ▃", // white
+ " ▄", // white
+ " ▅", // yellow
+ " ▆", // yellow
+ " ▇", // orange
+ " █" // red
+ ],
+ "ignored-sinks": ["Easy Effects Sink"]
+ },
+ "pulseaudio/slider": {
+ "min": 0,
+ "max": 100,
+ "orientation": "horizontal"
+ },
+ "cava": {
+ //"cava_config": "$HOME/.config/cava/config",
+ "framerate": 144,
+ "hide_on_silence": false,
+ "autosens": 1,
+ "bars": 12,
+ "lower_cutoff_freq": 50,
+ "higher_cutoff_freq": 10000,
+ "method": "pulse",
+ "source": "auto",
+ "stereo": true,
+ "reverse": false,
+ "bar_delimiter": 0,
+ "monstercat": false,
+ "waves": false,
+ "noise_reduction": 0.77,
+ "input_delay": 2,
+ "format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"],
+ "actions": {
+ // "on-click-right": "mode"
+ }
+ },
+ "keyboard-state": {
+ "numlock": false,
+ "capslock": true,
+ "format": {
+ "numlock": "N {icon}",
+ "capslock": "{icon}"
+ },
+ "format-icons": {
+ "locked": "",
+ "unlocked": ""
+ }
+ },
+ "hyprland/window": {
+ "format": "{title}",
+ "separate-outputs": false
+ },
+ "privacy": {
+ "icon-spacing": 4,
+ "icon-size": 18,
+ "transition-duration": 250,
+ "modules": [
+ {
+ "type": "screenshare",
+ "tooltip": true,
+ "tooltip-icon-size": 24
+ },
+ {
+ "type": "audio-out",
+ "tooltip": true,
+ "tooltip-icon-size": 24
+ },
+ {
+ "type": "audio-in",
+ "tooltip": true,
+ "tooltip-icon-size": 24
+ }
+ ]
+ }
+}
diff --git a/dot_config/waybar/fullscreen.png b/dot_config/waybar/fullscreen.png
new file mode 100644
index 0000000..3ce446c
--- /dev/null
+++ b/dot_config/waybar/fullscreen.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cff72c6b679fed2606e42930d7fe68ea7916cbd8ac12a2a4e8843d64513b95cc
+size 2412221
diff --git a/dot_config/waybar/modules/executable_calendar.sh b/dot_config/waybar/modules/executable_calendar.sh
new file mode 100644
index 0000000..7ba97a3
--- /dev/null
+++ b/dot_config/waybar/modules/executable_calendar.sh
@@ -0,0 +1,31 @@
+#! /bin/bash
+
+send_notification() {
+ TODAY=$(date '+%-d')
+ HEAD=$(cal "$1" | head -n1)
+ BODY=$(cal "$1" | tail -n7 | sed -z "s|$TODAY|$TODAY|1")
+ notify-send -h string:x-canonical-private-synchronous:calendar \
+ "$HEAD" "$BODY$FOOT" -u NORMAL
+}
+
+handle_action() {
+ echo "$DIFF" > "$TMP"
+ if [ "$DIFF" -ge 0 ]; then
+ send_notification "+$DIFF months"
+ else
+ send_notification "$((-DIFF)) months ago"
+ fi
+}
+
+TMP=${XDG_RUNTIME_DIR:-/tmp}/"$UID"_calendar_notification_month
+touch "$TMP"
+
+DIFF=$(<"$TMP")
+
+case $1 in
+ "curr") DIFF=0;;
+ "next") DIFF=$((DIFF+1));;
+ "prev") DIFF=$((DIFF-1));;
+esac
+
+handle_action
diff --git a/dot_config/waybar/modules/executable_datetime.sh b/dot_config/waybar/modules/executable_datetime.sh
new file mode 100644
index 0000000..e9c7a8f
--- /dev/null
+++ b/dot_config/waybar/modules/executable_datetime.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+echo "$(date '+%A, %d/%m/%y %r') "
diff --git a/dot_config/waybar/modules/executable_downloads.py b/dot_config/waybar/modules/executable_downloads.py
new file mode 100644
index 0000000..4448ead
--- /dev/null
+++ b/dot_config/waybar/modules/executable_downloads.py
@@ -0,0 +1,37 @@
+#!/bin/python3
+
+import requests
+from bs4 import BeautifulSoup as soup
+
+class OS:
+
+ def __init__(self, url, os):
+ self.url = url
+ self.os = os
+
+ def mk_request(self):
+ try:
+ with requests.get(self.url) as response:
+ page = soup(response.text, 'html.parser')
+ return page
+ except requests.HTTPError as err:
+ print(f"Error! {err}")
+
+ def num_downloads(self):
+ page = OS(self.url, self.os).mk_request()
+
+ for downloads in page.find('title'):
+ fmt_name = self.os.split('-')[0]
+ fmt_dl = downloads.text.split(': ')[1]
+ # if fmt_dl.endswith('k'):
+ # return int(fmt_dl.replace('k', '000'))
+ # else:
+ return fmt_dl
+
+
+if __name__ == '__main__':
+ base_url = "https://img.shields.io/github/downloads/"
+ distros = [('xelphlinux', 'xelph-iso')]
+
+ for distro in distros:
+ print(f" {OS(f'{base_url}{distro[0]}/{distro[1]}/total?label=downloads',distro[0].capitalize()).num_downloads()}")
diff --git a/dot_config/waybar/modules/executable_updates.sh b/dot_config/waybar/modules/executable_updates.sh
new file mode 100644
index 0000000..2d48bf4
--- /dev/null
+++ b/dot_config/waybar/modules/executable_updates.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+pkg_updates() {
+ updates=$(pacman -Qu | wc -l)
+ aurupdates=$(paru -Qua | wc -l)
+ updates=$((updates + aurupdates))
+ if [ $updates -gt 0 ]; then
+ echo -n " $updates"
+ fi
+}
+pkg_updates
diff --git a/dot_config/waybar/modules/mpris/executable_album_art.bak.sh b/dot_config/waybar/modules/mpris/executable_album_art.bak.sh
new file mode 100644
index 0000000..d72008a
--- /dev/null
+++ b/dot_config/waybar/modules/mpris/executable_album_art.bak.sh
@@ -0,0 +1,10 @@
+
+#!/bin/bash
+album_art=$(playerctl metadata mpris:artUrl)
+if [[ -z $album_art ]]
+then
+ # spotify is dead, we should die to.
+ exit
+fi
+curl -s "${album_art}" --output "/tmp/cover.jpeg"
+echo "/tmp/cover.jpeg"
diff --git a/dot_config/waybar/modules/mpris/executable_album_art.sh b/dot_config/waybar/modules/mpris/executable_album_art.sh
new file mode 100644
index 0000000..12b3261
--- /dev/null
+++ b/dot_config/waybar/modules/mpris/executable_album_art.sh
@@ -0,0 +1,41 @@
+
+#!/bin/bash
+
+write_art() {
+ album_art=$(playerctl -p $1 metadata mpris:artUrl)
+ status=$?
+ if [[ -z $album_art || $status -eq 0 ]]
+ then
+ album_art=$(playerctl metadata mpris:artUrl)
+ if [[ -z $album_art ]]
+ then
+ exit
+ fi
+ fi
+
+ curl -s "${album_art}" --output "/tmp/cover.jpeg"
+ echo "/tmp/cover.jpeg"
+}
+
+
+
+
+read -d'\n' -ra PLAYERS <<<"$(playerctl -l 2>/dev/null)"
+declare -a PAUSED
+for player in "${PLAYERS[@]}"; do
+ [ "$player" = "playerctld" ] && continue;
+
+ p_status=$(playerctl -p "$player" status 2>/dev/null)
+
+ # if we have one playing, we'll use it and EXIT
+ if [ "$p_status" = "Playing" ]; then
+ write_art "$player"
+ exit 0;
+ fi
+
+ [ "$p_status" = "Paused" ] && PAUSED+=("$player")
+done
+
+if [ -n "${PAUSED[0]}" ]; then
+ write_art "${PAUSED[0]}"
+fi
diff --git a/dot_config/waybar/modules/mpris/executable_get_status.sh b/dot_config/waybar/modules/mpris/executable_get_status.sh
new file mode 100644
index 0000000..d139476
--- /dev/null
+++ b/dot_config/waybar/modules/mpris/executable_get_status.sh
@@ -0,0 +1,76 @@
+#!/bin/bash
+
+# The name of polybar bar which houses the main spotify module and the control modules.
+PARENT_BAR="${1:-music}"
+PARENT_BAR_PID=$(pgrep -a "polybar" | grep "$PARENT_BAR" | cut -d" " -f1)
+
+urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }
+
+send_hook() {
+ [ -z "$1" ] && echo "send_hook: missing arg" && exit 1
+ polybar-msg -p "$PARENT_BAR_PID" hook mpris-play-pause "$1" 1>/dev/null 2>&1
+}
+
+
+extract_meta() {
+ grep "$1\W" <<< "$meta" | awk '{$1=$2=""; print $0}' | sed 's/^ *//; s/; */;/g' | paste -s -d/ -
+}
+
+# if "icon" given, determine icon. otherwise, print metadata
+get_info() {
+ if [ -z "$1" ]; then
+ echo "Usage: get_info PLAYER [icon]"
+ exit 1
+ fi
+
+ meta=$(playerctl -p "$1" metadata)
+
+ # get title
+ title=$(extract_meta title)
+ # if no title, try url e.g. vlc
+ if [ -z "$title" ]; then
+ title=$(extract_meta url)
+ title=$(urldecode "${title##*/}")
+ fi
+
+ # if not "icon", display information and return
+ artist=$(extract_meta artist)
+ [ -z "$artist" ] && artist=$(extract_meta albumArtist)
+
+ if [ -n "$artist" ]; then
+ album=$(extract_meta album)
+ [ -n "$album" ] && echo -n " $album "
+
+ echo -n " $artist "
+ fi
+
+ echo "$title"
+ return 0
+}
+
+# manually go through players
+read -d'\n' -ra PLAYERS <<<"$(playerctl -l 2>/dev/null)"
+declare -a PAUSED
+for player in "${PLAYERS[@]}"; do
+ [ "$player" = "playerctld" ] && continue;
+
+ p_status=$(playerctl -p "$player" status 2>/dev/null)
+
+ # if we have one playing, we'll use it and EXIT
+ if [ "$p_status" = "Playing" ]; then
+ send_hook 1
+ get_info "$player" "$2"
+ exit 0;
+ fi
+
+ [ "$p_status" = "Paused" ] && PAUSED+=("$player")
+done
+
+# if we have a paused, show it otherwise assume there are no players or have all stopped
+if [ -n "${PAUSED[0]}" ]; then
+ send_hook 2
+ get_info "${PAUSED[0]}" "$2"
+else
+ [ "$2" = icon ] && echo "none" || echo " no players "
+fi
+
diff --git a/dot_config/waybar/modules/mpris/executable_get_status_paused.sh b/dot_config/waybar/modules/mpris/executable_get_status_paused.sh
new file mode 100644
index 0000000..8c5148f
--- /dev/null
+++ b/dot_config/waybar/modules/mpris/executable_get_status_paused.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# manually go through players
+read -d'\n' -ra PLAYERS <<<"$(playerctl -l 2>/dev/null)"
+declare -a PAUSED
+for player in "${PLAYERS[@]}"; do
+ [ "$player" = "playerctld" ] && continue;
+
+ p_status=$(playerctl -p "$player" status 2>/dev/null)
+
+ # if we have one playing, we'll use it and EXIT
+ if [ "$p_status" = "Playing" ]; then
+ echo "Playing"
+ exit 0;
+ fi
+done
+
+echo "Paused"
diff --git a/dot_config/waybar/modules/mpris/executable_scroll_status.sh b/dot_config/waybar/modules/mpris/executable_scroll_status.sh
new file mode 100644
index 0000000..af75583
--- /dev/null
+++ b/dot_config/waybar/modules/mpris/executable_scroll_status.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+cmd="${0%/*}/get_status.sh $1"
+
+zscroll -l 30 \
+ --scroll-padding "$(printf ' %.0s' {1..8})" \
+ -d 0.5 \
+ -M "${0%/*}/get_status_paused.sh $1" \
+ -m "Playing" "--scroll 1" \
+ -m "Paused" "--scroll 0" \
+ -m "Stopped" "--scroll 0" \
+ -U 5 -u true "$cmd" &
+
+wait
+
diff --git a/dot_config/waybar/private_nohup.out b/dot_config/waybar/private_nohup.out
new file mode 100644
index 0000000..e980369
--- /dev/null
+++ b/dot_config/waybar/private_nohup.out
@@ -0,0 +1,29 @@
+[2024-05-11 22:49:26.897] [info] Using configuration file /home/eric/.config/waybar/config.jsonc
+[2024-05-11 22:49:26.899] [info] Discovered appearance 'dark'
+[2024-05-11 22:49:26.899] [info] Using CSS file /home/eric/.config/waybar/style.css
+[2024-05-11 22:49:26.905] [info] Hyprland IPC starting
+[2024-05-11 22:49:26.906] [info] Loading persistent workspaces from Hyprland workspace rules
+[2024-05-11 22:49:27.724] [info] Loading persistent workspaces from Hyprland workspace rules
+[2024-05-11 22:49:28.131] [warning] Waybar has been built without rfkill support.
+[2024-05-11 22:49:28.191] [warning] Waybar has been built without rfkill support.
+
+** (waybar:19350): WARNING **: 22:49:28.289: Status Notifier Item with bus name ':1.292' and object path '/org/ayatana/NotificationItem/nm_applet' is already registered
+[2024-05-11 22:49:28.582] [info] Bar configured (width: 1920, height: 32) for output: HDMI-A-1
+[2024-05-11 22:49:28.582] [info] Bar configured (width: 1920, height: 32) for output: DP-1
+[2024-05-11 22:52:59.097] [info] Hyprland config reloaded, reinitializing hyprland/workspaces module...
+[2024-05-11 22:52:59.101] [info] Loading persistent workspaces from Hyprland workspace rules
+[2024-05-11 22:52:59.101] [info] Hyprland config reloaded, reinitializing hyprland/workspaces module...
+[2024-05-11 22:52:59.101] [info] Loading persistent workspaces from Hyprland workspace rules
+[2024-05-11 22:52:59.724] [info] Hyprland config reloaded, reinitializing hyprland/workspaces module...
+[2024-05-11 22:52:59.724] [info] Loading persistent workspaces from Hyprland workspace rules
+[2024-05-11 22:52:59.724] [info] Hyprland config reloaded, reinitializing hyprland/workspaces module...
+[2024-05-11 22:52:59.725] [info] Loading persistent workspaces from Hyprland workspace rules
+[2024-05-11 22:54:00.819] [info] Hyprland config reloaded, reinitializing hyprland/workspaces module...
+[2024-05-11 22:54:00.820] [info] Loading persistent workspaces from Hyprland workspace rules
+[2024-05-11 22:54:00.820] [info] Hyprland config reloaded, reinitializing hyprland/workspaces module...
+[2024-05-11 22:54:00.821] [info] Loading persistent workspaces from Hyprland workspace rules
+[2024-05-11 22:54:07.842] [info] Hyprland config reloaded, reinitializing hyprland/workspaces module...
+[2024-05-11 22:54:07.842] [info] Loading persistent workspaces from Hyprland workspace rules
+[2024-05-11 22:54:07.842] [info] Hyprland config reloaded, reinitializing hyprland/workspaces module...
+[2024-05-11 22:54:07.843] [info] Loading persistent workspaces from Hyprland workspace rules
+Gdk-Message: 22:54:31.307: Lost connection to Wayland compositor.
diff --git a/dot_config/waybar/style.css b/dot_config/waybar/style.css
new file mode 100644
index 0000000..e3ab86a
--- /dev/null
+++ b/dot_config/waybar/style.css
@@ -0,0 +1,242 @@
+* {
+ border: none;
+ border-radius: 0;
+ font-family: Lexend, FiraCode Nerd Font, "M PLUS 1", Noto Sans CJK JP;
+ font-size: 10px;
+ font-weight: 600;
+ min-height: 0;
+}
+
+window#waybar {
+ background: rgba(24, 25, 38, 0.0);
+ color: white;
+}
+
+tooltip {
+ background: rgba(24, 25, 38, 0.95);
+ border-radius: 5px;
+ border-width: 0px;
+ border-style: solid;
+ border-color: rgb(24, 25, 38);
+}
+
+.modules-left,
+.modules-center,
+.modules-right,
+#mpdris {
+ background-color: #1e2030;
+ margin: 2px;
+ padding: 2px;
+}
+
+.modules-left,
+.modules-center,
+.modules-right,
+#clock,
+#visualisation,
+#mpdris,
+#custom-updates,
+#layout,
+#custom-notification.notification
+{
+ border-radius: 5px 5px 5px 5px;
+}
+
+#tray,
+widget>label {
+ padding: 0px 8px;
+}
+
+#mpdris {
+ color: #f4dbd6;
+}
+
+#visualisation
+{
+ color: #1e2030;
+ background-color: #f4dbd6;
+}
+
+#layout {
+ color: #f4dbd6;
+}
+
+
+#layout.focused {
+ margin-right: 2px;
+ color: #1e2030;
+ background-color: #f4dbd6;
+}
+
+#tags button {
+ color: #939ab7;
+ margin-right: 2px;
+ border-radius: 5px;
+}
+
+#tags button.occupied {
+ color: #f4dbd6;
+}
+
+#workspaces button {
+ color: #f4dbd6;
+ margin-right: 2px;
+ border-radius: 5px;
+}
+
+#workspaces button.empty,
+#workspaces.sway button.persistent {
+ color: #939ab7;
+}
+
+#workspaces button.empty.active {
+ background-color: #939ab7;
+}
+
+#workspaces button.urgent {
+ color: #0f0f0f;
+ background-color: #9ec3c4;
+}
+
+#workspaces button:hover {
+ background-color: rgba(244, 219, 214, 0.7);
+ color: #0f0f0f;
+}
+
+#workspaces.sway button.persistent:hover,
+#workspaces button.empty:hover {
+ background-color: rgba(147, 154, 183, 0.7);
+ color: #0f0f0f;
+}
+
+#workspaces button.active,
+#workspaces button.focused,
+#tags button.focused {
+ color: #0f0f0f;
+ background-color: #f4dbd6;
+}
+
+
+#mpris {
+ font-size: 7px;
+}
+
+#custom-notification {
+ color: #eb6f92;
+ padding-left: 12px;
+ margin-right: 2px;
+}
+
+#custom-notification.notification {
+ color: #0f0f0f;
+ background-color: #eb6f92;
+}
+
+#taskbar button {
+ margin: 0px 2px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ padding-left: 10px;
+ padding-right: 8px;
+ border-radius: 4px;
+ background-color: #363a4f;
+ transition-duration: 150ms;
+}
+
+#taskbar button:hover {
+ background-color: #494d64;
+ border-radius: 4px;
+}
+
+#taskbar button.maximized,
+#taskbar button.fullscreen {
+ border-bottom: 3px solid #8aadf4;
+}
+
+#taskbar button.active {
+ background-color: #5b6078;
+ border-radius: 4px;
+ border-bottom: 3px solid #b7bdf8;
+}
+
+#clock {
+ color: #1e2030;
+ background-color: #8aadf4;
+}
+
+#custom-updates {
+ margin-right: 2px;
+ color: #1e2030;
+ background-color: #9ccfd8;
+}
+
+#custom-downloads {
+ color: #eed49f;
+}
+
+#custom-logo {
+ font-size: 14px;
+}
+
+#network {
+ color: #f5a97f;
+}
+
+#cpu {
+ color: #a6da95;
+}
+
+#pulseaudio {
+ color: #7dc4e4;
+}
+
+#pulseaudio.bluetooth {
+ color: #8aadf4;
+}
+
+#pulseaudio.muted {
+ color: #ed8796;
+}
+
+#pulseaudio-slider {
+ min-width: 50px;
+}
+
+#pulseaudio-slider slider {
+ min-height: 0px;
+ min-width: 0px;
+ border-radius: 20px;
+ opacity: 0;
+ background-image: none;
+ border: none;
+ box-shadow: none;
+}
+
+#pulseaudio-slider trough {
+ min-height: 4px;
+ min-width: 10px;
+ border-radius: 5px;
+ background-color: #363a4f;
+}
+
+#pulseaudio-slider highlight {
+ min-width: 10px;
+ border-radius: 5px;
+ background-color: #91d7e3;
+}
+
+#cava {
+ font-family: FiraCode Nerd Font Mono;
+}
+
+#memory {
+ color: #b7bdf8;
+}
+
+#temperature {
+ color: #91d7e3;
+}
+
+#temperature.critical {
+ color: #ed8796;
+}
diff --git a/dot_config/waybar/waybar-extended1.png b/dot_config/waybar/waybar-extended1.png
new file mode 100644
index 0000000..690b798
--- /dev/null
+++ b/dot_config/waybar/waybar-extended1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a6e9b04ab293ac0227ecaba8eed32f10bec305d40d019fba65da938f4e0e9dc9
+size 25980
diff --git a/dot_config/waybar/waybar-extended2.png b/dot_config/waybar/waybar-extended2.png
new file mode 100644
index 0000000..7621d28
--- /dev/null
+++ b/dot_config/waybar/waybar-extended2.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cbd814c108532651262253be602cab51a32ca56c2f115d58910c04e086f2ab98
+size 44905