diff --git a/.config/waybar/Goal /config.jsonc b/.config/waybar/Goal /config.jsonc
new file mode 100644
index 0000000..93b2a77
--- /dev/null
+++ b/.config/waybar/Goal /config.jsonc
@@ -0,0 +1,217 @@
+// -*- mode: jsonc -*-
+[{
+ "output": ["DP-1", "eDP-2"],
+ // "layer": "top", // Waybar at top layer
+ // "position": "bottom", // Waybar position (top|bottom|left|right)
+ "height": 24, // Waybar height (to be removed for auto height)
+ // "width": 1280, // Waybar width
+ "spacing": 8, // Gaps between modules (4px)
+ // Choose the order of the modules
+ "modules-left": [
+ "sway/workspaces",
+ "cava",
+ "sway/mode",
+ "sway/scratchpad"
+ ],
+ "modules-center": [
+ "sway/window"
+ ],
+ "modules-right": [
+ "mpris",
+ "idle_inhibitor",
+ "load",
+ "wireplumber",
+ "backlight",
+ "clock",
+ "battery",
+ "tray"
+ ],
+ // Modules configuration
+ "sway/workspaces": {
+ "all-outputs": true,
+ "warp-on-scroll": false,
+ "enable-bar-scroll": true,
+ "disable-scroll-wraparound": true,
+ "format": "{icon}",
+ "format-icons": {
+ "1": "",
+ "2": "",
+ "3": "",
+ "4": "",
+ "5": "",
+ "9": "",
+ "10": ""
+ }
+ },
+ "sway/window": {
+ "format": "{title}",
+ "max-length": 60,
+ "all-outputs": true
+ },
+ "cava": {
+ // "cava_config": "$XDG_CONFIG_HOME/cava/cava.conf",
+ "framerate": 30,
+ "autosens": 1,
+ "bars": 14,
+ "lower_cutoff_freq": 50,
+ "higher_cutoff_freq": 10000,
+ "method": "pipewire",
+ "source": "auto",
+ "stereo": true,
+ "bar_delimiter": 0,
+ "noise_reduction": 0.77,
+ "input_delay": 2,
+ "hide_on_silence": true,
+ "format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" ],
+ "actions": {
+ "on-click-right": "mode"
+ }
+ },
+ "mpris": {
+ "format": " {status_icon} {dynamic}",
+ "interval": 1,
+ "dynamic-len": 40,
+ "status-icons": {
+ "playing": "▶",
+ "paused": "⏸",
+ "stopped": ""
+ },
+ "dynamic-order": ["title", "artist"],
+ "ignored-players": ["firefox"]
+ },
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "format-icons": {
+ "activated": "",
+ "deactivated": ""
+ }
+ },
+ "sway/mode": {
+ "format": "{}"
+ },
+ "sway/scratchpad": {
+ "format": "{icon} {count}",
+ "show-empty": false,
+ "format-icons": ["", ""],
+ "tooltip": true,
+ "tooltip-format": "{app}: {title}"
+ },
+ "tray": {
+ "icon-size": 14,
+ "spacing": 10
+ },
+ "load": {
+ "format": " {}"
+ },
+ "clock": {
+ // "timezone": "America/New_York",
+ "tooltip-format": "{:%Y %B}\n{calendar}",
+ "format-alt": "{:%Y-%m-%d}"
+ },
+ "cpu": {
+ "format": "{usage}% ",
+ "tooltip": false
+ },
+ "memory": {
+ "format": "{}% "
+ },
+ "temperature": {
+ // "thermal-zone": 2,
+ // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
+ "critical-threshold": 80,
+ // "format-critical": "{temperatureC}°C {icon}",
+ "format": "{temperatureC}°C {icon}",
+ "format-icons": ["", "", ""]
+ },
+ "backlight": {
+ // "device": "acpi_video1",
+ "format": "{icon} {percent}%",
+ "format-icons": ["", "", "", "", "", "", "", "", ""]
+ },
+ "battery": {
+ "states": {
+ // "good": 95,
+ "warning": 30,
+ "critical": 15
+ },
+ "format": "{icon} {capacity}%",
+ "format-full": "{icon} {capacity}%",
+ "format-charging": " {capacity}%",
+ "format-plugged": " {capacity}%",
+ "format-alt": "{icon} {time}",
+ // "format-good": "", // An empty format will hide the module
+ // "format-full": "",
+ "format-icons": ["", "", "", "", ""]
+ },
+ "wireplumber": {
+ "scroll-step": 5, // %, can be a float
+ "format": "{icon} {volume}%",
+ "format-bluetooth": "{icon} {volume}% ",
+ "format-bluetooth-muted": " {icon}",
+ "format-muted": "",
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", "", ""]
+ },
+ "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
+ }
+},{
+ "output": ["HDMI-A-1"],
+ // "layer": "top", // Waybar at top layer
+ // "position": "bottom", // Waybar position (top|bottom|left|right)
+ "height": 24, // Waybar height (to be removed for auto height)
+ // "width": 1280, // Waybar width
+ "spacing": 4, // Gaps between modules (4px)
+ // Choose the order of the modules
+ "modules-left": [
+ "sway/workspaces",
+ "sway/mode",
+ "sway/scratchpad"
+ ],
+ "modules-center": [
+ "clock"
+ ],
+ "modules-right": [
+ "sway/window"
+ ],
+ "sway/workspaces": {
+ "all-outputs": true,
+ "warp-on-scroll": true,
+ "enable-bar-scroll": true,
+ "format": "{icon}",
+ "format-icons": {
+ "1": "",
+ "2": "",
+ "3": "",
+ "4": "",
+ "5": "",
+ "9": "",
+ "10": ""
+ }
+ },
+ "sway/window": {
+ "format": "{title}",
+ "max-length": 60,
+ "all-outputs": true
+ },
+ "sway/mode": {
+ "format": "{}"
+ },
+ "sway/scratchpad": {
+ "format": "{icon} {count}",
+ "show-empty": false,
+ "format-icons": ["", ""],
+ "tooltip": true,
+ "tooltip-format": "{app}: {title}"
+ },
+ "clock": {
+ // "timezone": "America/New_York",
+ "tooltip-format": "{:%Y %B}\n{calendar}",
+ "format-alt": "{:%Y-%m-%d}"
+ }
+}]
diff --git a/.config/waybar/Goal /style.css b/.config/waybar/Goal /style.css
new file mode 100644
index 0000000..b4eec29
--- /dev/null
+++ b/.config/waybar/Goal /style.css
@@ -0,0 +1,175 @@
+* {
+ font-size: 20px;
+ border-radius: 5px;
+}
+
+window#waybar {
+ /* `otf-font-awesome` is required to be installed for icons */
+ font-family: JetBrainsMonoNL NF SemiBold;
+ background-color: transparent;
+ border-bottom: 0px;
+ color: #ebdbb2;
+ transition-property: background-color;
+ transition-duration: .5s;
+}
+
+window#waybar.hidden {
+ opacity: 0.2;
+}
+
+window#waybar.empty #window {
+ background-color: transparent;
+}
+
+/*
+window#waybar.empty {
+ background-color: transparent;
+}
+window#waybar.solo {
+ background-color: #FFFFFF;
+}
+*/
+
+.modules-right {
+ margin: 10px 10px 0 0;
+}
+.modules-center {
+ margin: 10px 0 0 0;
+}
+.modules-left {
+ margin: 10px 0 0 10px;
+}
+
+button {
+ /* Use box-shadow instead of border so the text isn't offset */
+ /* box-shadow: inset 0 -3px transparent; */
+ border: none;
+}
+
+/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
+/*
+button:hover {
+ background: inherit;
+ box-shadow: inset 0 -3px #ebdbb2;
+} */
+
+#workspaces {
+ background-color: #282828;
+}
+
+#workspaces button {
+ padding: 0 5px;
+ background-color: transparent;
+ color: #ebdbb2;
+ border-radius: 0;
+}
+
+#workspaces button:first-child {
+ border-radius: 5px 0 0 5px;
+}
+
+#workspaces button:last-child {
+ border-radius: 0 5px 5px 0;
+}
+
+#workspaces button:hover {
+ color: #d79921;
+}
+
+#workspaces button.focused {
+ background-color: #665c54;
+ /* box-shadow: inset 0 -3px #ffffff; */
+}
+
+#workspaces button.urgent {
+ background-color: #b16286;
+}
+
+#idle_inhibitor,
+#cava,
+#scratchpad,
+#mode,
+#window,
+#clock,
+#battery,
+#backlight,
+#wireplumber,
+#tray,
+#mpris,
+#load {
+ padding: 0 10px;
+ background-color: #282828;
+ color: #ebdbb2;
+}
+
+#mode {
+ background-color: #689d6a;
+ color: #282828;
+ /* box-shadow: inset 0 -3px #ffffff; */
+}
+
+/* If workspaces is the leftmost module, omit left margin */
+.modules-left > widget:first-child > #workspaces {
+ margin-left: 0;
+}
+
+/* If workspaces is the rightmost module, omit right margin */
+.modules-right > widget:last-child > #workspaces {
+ margin-right: 0;
+}
+
+#cava {
+ padding: 0 5px;
+}
+
+#battery.charging, #battery.plugged {
+ background-color: #98971a;
+ color: #282828;
+}
+
+@keyframes blink {
+ to {
+ background-color: #282828;
+ color: #ebdbb2;
+ }
+}
+
+/* Using steps() instead of linear as a timing function to limit cpu usage */
+#battery.critical:not(.charging) {
+ background-color: #cc241d;
+ color: #ebdbb2;
+ animation-name: blink;
+ animation-duration: 0.5s;
+ animation-timing-function: steps(12);
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+}
+
+label:focus {
+ background-color: #000000;
+}
+
+#wireplumber.muted {
+ background-color: #458588;
+}
+
+#tray > .passive {
+ -gtk-icon-effect: dim;
+}
+
+#tray > .needs-attention {
+ -gtk-icon-effect: highlight;
+}
+
+#mpris.playing {
+ background-color: #d79921;
+ color: #282828;
+}
+
+#tray menu {
+ font-family: sans-serif;
+}
+
+#scratchpad.empty {
+ background: transparent;
+}
diff --git a/.config/waybar/config.ctl b/.config/waybar/config.ctl
new file mode 100644
index 0000000..d59e0f3
--- /dev/null
+++ b/.config/waybar/config.ctl
@@ -0,0 +1,25 @@
+0|28|bottom|( cpu memory custom/cpuinfo custom/gpuinfo ) ( idle_inhibitor clock )|( hyprland/workspaces hyprland/window )|( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( privacy tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
+0|28|top|( cpu memory custom/cpuinfo custom/gpuinfo ) ( idle_inhibitor clock )|( hyprland/workspaces hyprland/window )|( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( privacy tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
+0|28|bottom|( cpu memory custom/cpuinfo custom/gpuinfo ) ( idle_inhibitor clock ) ( hyprland/workspaces )|( hyprland/window )|( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( privacy tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
+0|28|top|( cpu memory custom/cpuinfo ) ( idle_inhibitor clock ) ( hyprland/workspaces )|( hyprland/window )|( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( privacy tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
+0||bottom|( hyprland/workspaces hyprland/window )|( idle_inhibitor clock )|( cpu memory custom/cpuinfo custom/gpuinfo ) ( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( privacy tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
+0||top|( hyprland/workspaces hyprland/window )|( idle_inhibitor clock )|( cpu memory custom/cpuinfo custom/gpuinfo ) ( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( privacy tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
+0|31|bottom|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( wlr/taskbar custom/spotify ) |( idle_inhibitor clock )|( privacy tray battery ) ( backlight network pulseaudio pulseaudio#microphone custom/notifications custom/keybindhint )
+0|31|left|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( wlr/taskbar custom/spotify ) |( idle_inhibitor clock )|( privacy tray battery ) ( backlight network pulseaudio pulseaudio#microphone custom/keybindhint )
+1|31|top|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( wlr/taskbar custom/spotify ) |( idle_inhibitor clock )|( privacy tray battery ) ( backlight network pulseaudio pulseaudio#microphone custom/keybindhint )
+0|31|right|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( wlr/taskbar custom/spotify ) |( idle_inhibitor clock )|( privacy tray battery ) ( backlight network pulseaudio pulseaudio#microphone custom/keybindhint )
+0|32|bottom||( custom/power ) ( privacy tray battery ) ( wlr/taskbar idle_inhibitor clock ) ( custom/cliphist ) ( custom/wbar ) ( custom/wallchange ) ( custom/theme )|
+0|32|left||( custom/power ) ( privacy tray battery ) ( wlr/taskbar idle_inhibitor clock ) ( custom/cliphist ) ( custom/wbar ) ( custom/wallchange ) ( custom/theme )|
+0|32|top||( custom/power ) ( privacy tray battery ) ( wlr/taskbar idle_inhibitor clock ) ( custom/cliphist ) ( custom/wbar ) ( custom/wallchange ) ( custom/theme )|
+0|32|right||( custom/power ) ( privacy tray battery ) ( wlr/taskbar idle_inhibitor clock ) ( custom/cliphist ) ( custom/wbar ) ( custom/wallchange ) ( custom/theme )|
+0|31|bottom|( cpu memory custom/cpuinfo custom/gpuinfo ) ( idle_inhibitor clock ) ( hyprland/workspaces )|( wlr/taskbar )|( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( privacy tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
+0|31|top|( cpu memory custom/cpuinfo custom/gpuinfo ) ( idle_inhibitor clock ) ( hyprland/workspaces )|( wlr/taskbar )|( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( privacy tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
+0|29|bottom|( wlr/taskbar mpris )|( idle_inhibitor clock )|( backlight network pulseaudio pulseaudio#microphone custom/updates ) ( privacy tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
+0|29|left|( wlr/taskbar mpris )|( idle_inhibitor clock )|( backlight network pulseaudio pulseaudio#microphone custom/updates ) ( privacy tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
+0|29|top|( wlr/taskbar mpris )|( idle_inhibitor clock )|( backlight network pulseaudio pulseaudio#microphone custom/updates ) ( privacy tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
+0|29|right|( wlr/taskbar mpris )|( idle_inhibitor clock )|( backlight network pulseaudio pulseaudio#microphone custom/updates ) ( privacy tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
+0|28|bottom|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( idle_inhibitor clock custom/spotify )|( wlr/taskbar )|( privacy tray ) ( backlight network pulseaudio pulseaudio#microphone )
+0|28|left|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( idle_inhibitor clock custom/spotify )|( wlr/taskbar )|( privacy tray ) ( backlight network pulseaudio pulseaudio#microphone )
+0|28|top|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( idle_inhibitor clock custom/spotify )|( wlr/taskbar )|( privacy tray ) ( backlight network pulseaudio pulseaudio#microphone )
+0|28|right|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( idle_inhibitor clock custom/spotify )|( wlr/taskbar )|( privacy tray ) ( backlight network pulseaudio pulseaudio#microphone )
+0|40|top|( hyprland/workspaces )|( custom/cava idle_inhibitor clock )|( backlight pulseaudio pulseaudio#microphone tray battery custom/keybindhint custom/cliphist custom/power )
diff --git a/.config/waybar/config.jsonc b/.config/waybar/config.jsonc
new file mode 100644
index 0000000..66f8fac
--- /dev/null
+++ b/.config/waybar/config.jsonc
@@ -0,0 +1,341 @@
+// --// waybar config generated by wbarconfgen.sh //-- //
+{
+ // sourced from header module //
+ "layer": "top",
+ "position": "top",
+ "mod": "dock",
+ "height": 31,
+ "exclusive": true,
+ "passthrough": false,
+ "gtk-layer-shell": true,
+ "reload_style_on_change": true,
+ // positions generated based on config.ctl //
+ "modules-left": [
+ "custom/padd",
+ "custom/l_end",
+ "custom/power",
+ "custom/cliphist",
+ "custom/r_end",
+ "custom/l_end",
+ "idle_inhibitor",
+ "clock",
+ "custom/spotify",
+ "custom/r_end",
+ "custom/l_end",
+ "memory",
+ "cpu",
+ "custom/r_end",
+ "custom/l_end",
+ "custom/cava",
+ "custom/r_end",
+ "custom/padd",
+ ],
+ "modules-center": [
+ "custom/padd",
+ "custom/l_end",
+ "wlr/taskbar",
+ "custom/r_end",
+ "custom/padd",
+ ],
+ "modules-right": [
+ "custom/padd",
+ "custom/l_end",
+ "backlight",
+ "network",
+ "pulseaudio",
+ "custom/r_end",
+ "custom/l_end",
+ "privacy",
+ "tray",
+ "custom/r_end",
+ "custom/padd",
+ ],
+ // sourced from modules based on config.ctl //
+ "custom/cava": {
+ "format": "{}",
+ "exec": "waybar_cava.sh",
+ "restart-interval": 1,
+ "hide-empty": true,
+ },
+ "mpris": {
+ "format": "{player_icon} {dynamic}",
+ "rotate": 0,
+ "format-paused": "{status_icon} {dynamic}",
+ "player-icons": {
+ "default": "▶",
+ "mpv": "🎵",
+ },
+ "status-icons": {
+ "paused": "",
+ },
+ // "ignored-players": ["firefox"]
+ "max-length": 1000,
+ "interval": 1,
+ },
+ "cpu": {
+ "interval": 10,
+ "format": "| {usage}%",
+ "rotate": 0,
+ "format-alt": "{icon0}{icon1}{icon2}{icon3}",
+ "format-icons": [
+ "▁",
+ "▂",
+ "▃",
+ "▄",
+ "▅",
+ "▆",
+ "▇",
+ "█"
+ ],
+ },
+ "memory": {
+ "states": {
+ "c": 90, // critical
+ "h": 60, // high
+ "m": 30, // medium
+ },
+ "interval": 30,
+ "format": " {used}gb|",
+ "rotate": 0,
+ "format-m": " {used}gb",
+ "format-h": " {used}gb",
+ "format-c": " {used}gb",
+ "format-alt": " {percentage}%",
+ "max-length": 10,
+ "tooltip": true,
+ "tooltip-format": " {percentage}%\n {used:0.1f}gb/{total:0.1f}gb",
+ },
+ "custom/power": {
+ "format": " {}",
+ "rotate": 0,
+ "exec": "echo ; echo logout",
+ "on-click": "logoutlaunch.sh 2",
+ "on-click-right": "logoutlaunch.sh 1",
+ "interval": 86400, // once every day
+ "tooltip": true,
+ },
+ "custom/cliphist": {
+ "format": " {}",
+ "rotate": 0,
+ "exec": "echo ; echo clipboard history",
+ "on-click": "sleep 0.1 && cliphist.sh c",
+ "on-click-right": "sleep 0.1 && cliphist.sh d",
+ "on-click-middle": "sleep 0.1 && cliphist.sh w",
+ "interval": 86400, // once every day
+ "tooltip": true,
+ },
+ "wlr/taskbar": {
+ "format": "{icon}",
+ "rotate": 0,
+ "icon-size": 25,
+ "icon-theme": "Gruvbox-Plus-Dark",
+ "spacing": 0,
+ "tooltip-format": "{title}",
+ "on-click": "activate",
+ "on-click-middle": "close",
+ "ignore-list": [
+ "Alacritty"
+ ],
+ "app_ids-mapping": {
+ "firefoxdeveloperedition": "firefox-developer-edition",
+ "jetbrains-datagrip": "DataGrip",
+ },
+ },
+ "custom/spotify": {
+ "exec": "mediaplayer.py --player spotify",
+ "format": " {}",
+ "rotate": 0,
+ "return-type": "json",
+ "on-click": "playerctl play-pause --player spotify",
+ "on-click-right": "playerctl next --player spotify",
+ "on-click-middle": "playerctl previous --player spotify",
+ "on-scroll-up": "volumecontrol.sh -p spotify i",
+ "on-scroll-down": "volumecontrol.sh -p spotify d",
+ "max-length": 25,
+ "escape": true,
+ "tooltip": true,
+ },
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "rotate": 0,
+ "format-icons": {
+ "activated": " ",
+ "deactivated": " ",
+ },
+ },
+ "clock": {
+ "format": "{:%I:%M %p}",
+ "rotate": 0,
+ "format-alt": "{:%R %d·%m·%y}",
+ "tooltip-format": "{calendar}",
+ "calendar": {
+ "mode": "month",
+ "mode-mon-col": 3,
+ "on-scroll": 1,
+ "on-click-right": "mode",
+ "format": {
+ "months": "{}",
+ "weekdays": "{}",
+ "today": "{}",
+ },
+ },
+ "actions": {
+ "on-click-right": "mode",
+ "on-click-forward": "tz_up",
+ "on-click-backward": "tz_down",
+ "on-scroll-up": "shift_up",
+ "on-scroll-down": "shift_down",
+ },
+ },
+ "privacy": {
+ "icon-size": 14,
+ "icon-spacing": 5,
+ "transition-duration": 250,
+ "modules": [
+ {
+ "type": "screenshare",
+ "tooltip": true,
+ "tooltip-icon-size": 24,
+ },
+ {
+ "type": "audio-in",
+ "tooltip": true,
+ "tooltip-icon-size": 24,
+ },
+ ],
+ },
+ "tray": {
+ "icon-size": 25,
+ "rotate": 0,
+ "spacing": 5,
+ },
+ "battery": {
+ "states": {
+ "good": 95,
+ "warning": 30,
+ "critical": 20,
+ },
+ "format": "{icon} {capacity}%",
+ "rotate": 0,
+ "format-charging": " {capacity}%",
+ "format-plugged": " {capacity}%",
+ "format-alt": "{time} {icon}",
+ "format-icons": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ },
+ "backlight": {
+ "device": "intel_backlight",
+ "rotate": 0,
+ "format": "{icon} {percent}%",
+ "format-icons": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "on-scroll-up": "brightnessctl set 1%+",
+ "on-scroll-down": "brightnessctl set 1%-",
+ "min-length": 6,
+ },
+ "network": {
+ "tooltip": true,
+ "format-wifi": " ",
+ "rotate": 0,
+ "format-ethernet": " {bandwidthDownBytes} {bandwidthUpBytes}",
+ "tooltip-format": "Network: {essid}\nSignal strength: {signaldBm}dBm ({signalStrength}%)\nFrequency: {frequency}MHz\nInterface: {ifname}\nIP: {ipaddr}/{cidr}\nGateway: {gwaddr}\nNetmask: {netmask}",
+ "format-linked": " {ifname} (No IP)",
+ "format-disconnected": " ",
+ "tooltip-format-disconnected": "Disconnected",
+ // "format-alt": " {bandwidthDownBytes} {bandwidthUpBytes}",
+ "interval": 2,
+ },
+ "pulseaudio": {
+ "format": "{icon} {volume}",
+ "rotate": 0,
+ "format-muted": "婢",
+ "on-click": "pavucontrol -t 3",
+ "on-click-right": "volumecontrol.sh -s ''",
+ "on-click-middle": "volumecontrol.sh -o m",
+ "on-scroll-up": "volumecontrol.sh -o i",
+ "on-scroll-down": "volumecontrol.sh -o d",
+ "tooltip-format": "{icon} {desc} // {volume}%",
+ "scroll-step": 5,
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": [
+ "",
+ "",
+ ""
+ ],
+ },
+ },
+ "pulseaudio#microphone": {
+ "format": "{format_source}",
+ "rotate": 0,
+ "format-source": "",
+ "format-source-muted": "",
+ "on-click": "pavucontrol -t 4",
+ "on-click-middle": "volumecontrol.sh -i m",
+ "on-scroll-up": "volumecontrol.sh -i i",
+ "on-scroll-down": "volumecontrol.sh -i d",
+ "tooltip-format": "{format_source} {source_desc} // {source_volume}%",
+ "scroll-step": 5,
+ },
+ // modules for padding //
+ "custom/l_end": {
+ "format": " ",
+ "interval": "once",
+ "tooltip": false,
+ },
+ "custom/r_end": {
+ "format": " ",
+ "interval": "once",
+ "tooltip": false,
+ },
+ "custom/sl_end": {
+ "format": " ",
+ "interval": "once",
+ "tooltip": false,
+ },
+ "custom/sr_end": {
+ "format": " ",
+ "interval": "once",
+ "tooltip": false,
+ },
+ "custom/rl_end": {
+ "format": " ",
+ "interval": "once",
+ "tooltip": false,
+ },
+ "custom/rr_end": {
+ "format": " ",
+ "interval": "once",
+ "tooltip": false,
+ },
+ "custom/padd": {
+ "format": " ",
+ "interval": "once",
+ "tooltip": false,
+ },
+}
diff --git a/.config/waybar/modules/backlight.jsonc b/.config/waybar/modules/backlight.jsonc
new file mode 100644
index 0000000..b289e68
--- /dev/null
+++ b/.config/waybar/modules/backlight.jsonc
@@ -0,0 +1,10 @@
+ "backlight": {
+ "device": "intel_backlight",
+ "rotate": ${r_deg},
+ "format": "{icon} {percent}%",
+ "format-icons": ["", "", "", "", "", "", "", "", ""],
+ "on-scroll-up": "brightnessctl set 1%+",
+ "on-scroll-down": "brightnessctl set 1%-",
+ "min-length": 6
+ },
+
diff --git a/.config/waybar/modules/battery.jsonc b/.config/waybar/modules/battery.jsonc
new file mode 100644
index 0000000..51d6482
--- /dev/null
+++ b/.config/waybar/modules/battery.jsonc
@@ -0,0 +1,14 @@
+ "battery": {
+ "states": {
+ "good": 95,
+ "warning": 30,
+ "critical": 20
+ },
+ "format": "{icon} {capacity}%",
+ "rotate": ${r_deg},
+ "format-charging": " {capacity}%",
+ "format-plugged": " {capacity}%",
+ "format-alt": "{time} {icon}",
+ "format-icons": ["", "", "", "", "", "", "", "", "", "", ""]
+ },
+
diff --git a/.config/waybar/modules/bluetooth.jsonc b/.config/waybar/modules/bluetooth.jsonc
new file mode 100644
index 0000000..919bbd8
--- /dev/null
+++ b/.config/waybar/modules/bluetooth.jsonc
@@ -0,0 +1,15 @@
+ "bluetooth": {
+ "format": "",
+ "rotate": ${r_deg},
+ "format-disabled": "",
+ "format-connected": " {num_connections}",
+ "format-connected-battery": "{icon} {num_connections}",
+ // "format-connected-battery": "{icon} {device_alias}-{device_battery_percentage}%",
+ "format-icons": ["", "", "", "", "", "", "", "", "", "", ""],
+ // "format-device-preference": [ "device1", "device2" ], // preference list deciding the displayed device If this config option is not defined or none of the devices in the list are connected, it will fall back to showing the last connected device.
+ "tooltip-format": "{controller_alias}\n{num_connections} connected",
+ "tooltip-format-connected": "{controller_alias}\n{num_connections} connected\n\n{device_enumerate}",
+ "tooltip-format-enumerate-connected": "{device_alias}",
+ "tooltip-format-enumerate-connected-battery": "{device_alias}\t{icon} {device_battery_percentage}%"
+ },
+
diff --git a/.config/waybar/modules/cava.jsonc b/.config/waybar/modules/cava.jsonc
new file mode 100644
index 0000000..d5d2277
--- /dev/null
+++ b/.config/waybar/modules/cava.jsonc
@@ -0,0 +1,6 @@
+"custom/cava": {
+ "format": "{}",
+ "exec": "waybar_cava.sh",
+ "restart-interval": 1,
+ "hide-empty": true
+},
\ No newline at end of file
diff --git a/.config/waybar/modules/cliphist.jsonc b/.config/waybar/modules/cliphist.jsonc
new file mode 100644
index 0000000..02024fa
--- /dev/null
+++ b/.config/waybar/modules/cliphist.jsonc
@@ -0,0 +1,11 @@
+ "custom/cliphist": {
+ "format": "{}",
+ "rotate": ${r_deg},
+ "exec": "echo ; echo clipboard history",
+ "on-click": "sleep 0.1 && cliphist.sh c",
+ "on-click-right": "sleep 0.1 && cliphist.sh d",
+ "on-click-middle": "sleep 0.1 && cliphist.sh w",
+ "interval" : 86400, // once every day
+ "tooltip": true
+ },
+
diff --git a/.config/waybar/modules/clock.jsonc b/.config/waybar/modules/clock.jsonc
new file mode 100644
index 0000000..17f9a15
--- /dev/null
+++ b/.config/waybar/modules/clock.jsonc
@@ -0,0 +1,25 @@
+ "clock": {
+ "format": "{:%I:%M %p}",
+ "rotate": ${r_deg},
+ "format-alt": "{:%R %d·%m·%y}",
+ "tooltip-format": "{calendar}",
+ "calendar": {
+ "mode": "month",
+ "mode-mon-col": 3,
+ "on-scroll": 1,
+ "on-click-right": "mode",
+ "format": {
+ "months": "{}",
+ "weekdays": "{}",
+ "today": "{}"
+ }
+ },
+ "actions": {
+ "on-click-right": "mode",
+ "on-click-forward": "tz_up",
+ "on-click-backward": "tz_down",
+ "on-scroll-up": "shift_up",
+ "on-scroll-down": "shift_down"
+ }
+ },
+
diff --git a/.config/waybar/modules/cpu.jsonc b/.config/waybar/modules/cpu.jsonc
new file mode 100644
index 0000000..cc89cb0
--- /dev/null
+++ b/.config/waybar/modules/cpu.jsonc
@@ -0,0 +1,8 @@
+ "cpu": {
+ "interval": 10,
+ "format": " {usage}%",
+ "rotate": ${r_deg},
+ "format-alt": "{icon0}{icon1}{icon2}{icon3}",
+ "format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"]
+ },
+
diff --git a/.config/waybar/modules/cpuinfo.jsonc b/.config/waybar/modules/cpuinfo.jsonc
new file mode 100644
index 0000000..fb6bb76
--- /dev/null
+++ b/.config/waybar/modules/cpuinfo.jsonc
@@ -0,0 +1,10 @@
+ "custom/cpuinfo": {
+ "exec": " cpuinfo.sh",
+ "return-type": "json",
+ "format": "{}",
+ "rotate": ${r_deg},
+ "interval": 5, // once every 5 seconds
+ "tooltip": true,
+ "max-length": 1000
+ },
+
diff --git a/.config/waybar/modules/footer.jsonc b/.config/waybar/modules/footer.jsonc
new file mode 100644
index 0000000..1387f74
--- /dev/null
+++ b/.config/waybar/modules/footer.jsonc
@@ -0,0 +1,47 @@
+
+// modules for padding //
+
+ "custom/l_end": {
+ "format": " ",
+ "interval" : "once",
+ "tooltip": false
+ },
+
+ "custom/r_end": {
+ "format": " ",
+ "interval" : "once",
+ "tooltip": false
+ },
+
+ "custom/sl_end": {
+ "format": " ",
+ "interval" : "once",
+ "tooltip": false
+ },
+
+ "custom/sr_end": {
+ "format": " ",
+ "interval" : "once",
+ "tooltip": false
+ },
+
+ "custom/rl_end": {
+ "format": " ",
+ "interval" : "once",
+ "tooltip": false
+ },
+
+ "custom/rr_end": {
+ "format": " ",
+ "interval" : "once",
+ "tooltip": false
+ },
+
+ "custom/padd": {
+ "format": " ",
+ "interval" : "once",
+ "tooltip": false
+ }
+
+}
+
diff --git a/.config/waybar/modules/gpuinfo.jsonc b/.config/waybar/modules/gpuinfo.jsonc
new file mode 100644
index 0000000..f9f5d61
--- /dev/null
+++ b/.config/waybar/modules/gpuinfo.jsonc
@@ -0,0 +1,41 @@
+ "custom/gpuinfo": {
+ "exec": " gpuinfo.sh",
+ "return-type": "json",
+ "format": "{}",
+ "rotate": ${r_deg},
+ "interval": 5, // once every 5 seconds
+ "tooltip": true,
+ "max-length": 1000,
+ "on-click": "gpuinfo.sh --toggle",
+ },
+
+ "custom/gpuinfo#nvidia": {
+ "exec": " gpuinfo.sh --use nvidia ",
+ "return-type": "json",
+ "format": "{}",
+ "rotate": ${r_deg},
+ "interval": 5, // once every 5 seconds
+ "tooltip": true,
+ "max-length": 1000,
+ },
+
+ "custom/gpuinfo#amd": {
+ "exec": " gpuinfo.sh --use amd ",
+ "return-type": "json",
+ "format": "{}",
+ "rotate": ${r_deg},
+ "interval": 5, // once every 5 seconds
+ "tooltip": true,
+ "max-length": 1000,
+ },
+
+ "custom/gpuinfo#intel": {
+ "exec": " gpuinfo.sh --use intel ",
+ "return-type": "json",
+ "format": "{}",
+ "rotate": ${r_deg},
+ "interval": 5, // once every 5 seconds
+ "tooltip": true,
+ "max-length": 1000,
+ },
+
diff --git a/.config/waybar/modules/header.jsonc b/.config/waybar/modules/header.jsonc
new file mode 100644
index 0000000..688d476
--- /dev/null
+++ b/.config/waybar/modules/header.jsonc
@@ -0,0 +1,13 @@
+// --// waybar config generated by wbarconfgen.sh //-- //
+
+{
+// sourced from header module //
+
+ "layer": "top",
+ "position": "${w_position}",
+ "mod": "dock",
+ "${hv_pos}": ${w_height},
+ "exclusive": true,
+ "passthrough": false,
+ "gtk-layer-shell": true,
+ "reload_style_on_change": true,
diff --git a/.config/waybar/modules/idle_inhibitor.jsonc b/.config/waybar/modules/idle_inhibitor.jsonc
new file mode 100644
index 0000000..d109a95
--- /dev/null
+++ b/.config/waybar/modules/idle_inhibitor.jsonc
@@ -0,0 +1,9 @@
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "rotate": ${r_deg},
+ "format-icons": {
+ "activated": "",
+ "deactivated": ""
+ }
+ },
+
diff --git a/.config/waybar/modules/keybindhint.jsonc b/.config/waybar/modules/keybindhint.jsonc
new file mode 100644
index 0000000..e9edd21
--- /dev/null
+++ b/.config/waybar/modules/keybindhint.jsonc
@@ -0,0 +1,6 @@
+ "custom/keybindhint": {
+ "format": " ",
+ "rotate": ${r_deg},
+ "on-click": "keybinds_hint.sh"
+ },
+
diff --git a/.config/waybar/modules/language.jsonc b/.config/waybar/modules/language.jsonc
new file mode 100644
index 0000000..6045d28
--- /dev/null
+++ b/.config/waybar/modules/language.jsonc
@@ -0,0 +1,6 @@
+ "hyprland/language": {
+ "format": "{short} {variant}",
+ "rotate": ${r_deg},
+ "on-click": "keyboardswitch.sh",
+ },
+
diff --git a/.config/waybar/modules/memory.jsonc b/.config/waybar/modules/memory.jsonc
new file mode 100644
index 0000000..5908996
--- /dev/null
+++ b/.config/waybar/modules/memory.jsonc
@@ -0,0 +1,18 @@
+ "memory": {
+ "states": {
+ "c": 90, // critical
+ "h": 60, // high
+ "m": 30, // medium
+ },
+ "interval": 30,
+ "format": " {used}gb",
+ "rotate": ${r_deg},
+ "format-m": " {used}gb",
+ "format-h": " {used}gb",
+ "format-c": " {used}gb",
+ "format-alt": " {percentage}%",
+ "max-length": 10,
+ "tooltip": true,
+ "tooltip-format": " {percentage}%\n {used:0.1f}gb/{total:0.1f}gb"
+ },
+
diff --git a/.config/waybar/modules/mpris.jsonc b/.config/waybar/modules/mpris.jsonc
new file mode 100644
index 0000000..04ff2cd
--- /dev/null
+++ b/.config/waybar/modules/mpris.jsonc
@@ -0,0 +1,16 @@
+ "mpris": {
+ "format": "{player_icon} {dynamic}",
+ "rotate": ${r_deg},
+ "format-paused": "{status_icon} {dynamic}",
+ "player-icons": {
+ "default": "▶",
+ "mpv": "🎵"
+ },
+ "status-icons": {
+ "paused": ""
+ },
+ // "ignored-players": ["firefox"]
+ "max-length": 1000,
+ "interval": 1
+ },
+
diff --git a/.config/waybar/modules/network.jsonc b/.config/waybar/modules/network.jsonc
new file mode 100644
index 0000000..1c5231d
--- /dev/null
+++ b/.config/waybar/modules/network.jsonc
@@ -0,0 +1,13 @@
+ "network": {
+ "tooltip": true,
+ "format-wifi": " ",
+ "rotate": ${r_deg},
+ "format-ethernet": " ",
+ "tooltip-format": "Network: {essid}\nSignal strength: {signaldBm}dBm ({signalStrength}%)\nFrequency: {frequency}MHz\nInterface: {ifname}\nIP: {ipaddr}/{cidr}\nGateway: {gwaddr}\nNetmask: {netmask}",
+ "format-linked": " {ifname} (No IP)",
+ "format-disconnected": " ",
+ "tooltip-format-disconnected": "Disconnected",
+ "format-alt": " {bandwidthDownBytes} {bandwidthUpBytes}",
+ "interval": 2,
+ },
+
diff --git a/.config/waybar/modules/notifications.jsonc b/.config/waybar/modules/notifications.jsonc
new file mode 100644
index 0000000..125e87a
--- /dev/null
+++ b/.config/waybar/modules/notifications.jsonc
@@ -0,0 +1,29 @@
+ "custom/notifications": {
+ "format": "{icon} {}",
+ "rotate": ${r_deg},
+ "format-icons": {
+ "email-notification": "",
+ "chat-notification": "",
+ "warning-notification": "",
+ "error-notification": "",
+ "network-notification": "",
+ "battery-notification": "",
+ "update-notification": "",
+ "music-notification": "",
+ "volume-notification": "",
+ "notification": "",
+ "dnd": "",
+ "none": ""
+ },
+ "return-type": "json",
+ "exec-if": "which dunstctl",
+ "exec": "notifications.py",
+ "on-scroll-down": "sleep 0.1 && dunstctl history-pop",
+ "on-click": "dunstctl set-paused toggle",
+ "on-click-middle": "dunstctl history-clear",
+ "on-click-right": "dunstctl close-all",
+ "interval": 1,
+ "tooltip": true,
+ "escape": true
+ },
+
diff --git a/.config/waybar/modules/power.jsonc b/.config/waybar/modules/power.jsonc
new file mode 100644
index 0000000..a41eaf6
--- /dev/null
+++ b/.config/waybar/modules/power.jsonc
@@ -0,0 +1,10 @@
+ "custom/power": {
+ "format": "{}",
+ "rotate": ${r_deg},
+ "exec": "echo ; echo logout",
+ "on-click": "logoutlaunch.sh 2",
+ "on-click-right": "logoutlaunch.sh 1",
+ "interval" : 86400, // once every day
+ "tooltip": true
+ },
+
diff --git a/.config/waybar/modules/privacy.jsonc b/.config/waybar/modules/privacy.jsonc
new file mode 100644
index 0000000..8556586
--- /dev/null
+++ b/.config/waybar/modules/privacy.jsonc
@@ -0,0 +1,18 @@
+ "privacy": {
+ "icon-size": ${i_priv},
+ "icon-spacing": 5,
+ "transition-duration": 250,
+ "modules": [
+ {
+ "type": "screenshare",
+ "tooltip": true,
+ "tooltip-icon-size": 24
+ },
+ {
+ "type": "audio-in",
+ "tooltip": true,
+ "tooltip-icon-size": 24
+ }
+ ]
+ },
+
diff --git a/.config/waybar/modules/pulseaudio.jsonc b/.config/waybar/modules/pulseaudio.jsonc
new file mode 100644
index 0000000..c5770a7
--- /dev/null
+++ b/.config/waybar/modules/pulseaudio.jsonc
@@ -0,0 +1,35 @@
+"pulseaudio": {
+ "format": "{icon} {volume}",
+ "rotate": ${r_deg},
+ "format-muted": "婢",
+ "on-click": "pavucontrol -t 3",
+ "on-click-right": "volumecontrol.sh -s ''",
+ "on-click-middle": "volumecontrol.sh -o m",
+ "on-scroll-up": "volumecontrol.sh -o i",
+ "on-scroll-down": "volumecontrol.sh -o d",
+ "tooltip-format": "{icon} {desc} // {volume}%",
+ "scroll-step": 5,
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", "", ""]
+ }
+},
+
+"pulseaudio#microphone": {
+ "format": "{format_source}",
+ "rotate": ${r_deg},
+ "format-source": "",
+ "format-source-muted": "",
+ "on-click": "pavucontrol -t 4",
+ "on-click-middle": "volumecontrol.sh -i m",
+ "on-scroll-up": "volumecontrol.sh -i i",
+ "on-scroll-down": "volumecontrol.sh -i d",
+ "tooltip-format": "{format_source} {source_desc} // {source_volume}%",
+ "scroll-step": 5
+},
+
diff --git a/.config/waybar/modules/spotify.jsonc b/.config/waybar/modules/spotify.jsonc
new file mode 100644
index 0000000..13bd6bc
--- /dev/null
+++ b/.config/waybar/modules/spotify.jsonc
@@ -0,0 +1,15 @@
+ "custom/spotify": {
+ "exec": "mediaplayer.py --player spotify",
+ "format": " {}",
+ "rotate": ${r_deg},
+ "return-type": "json",
+ "on-click": "playerctl play-pause --player spotify",
+ "on-click-right": "playerctl next --player spotify",
+ "on-click-middle": "playerctl previous --player spotify",
+ "on-scroll-up": "volumecontrol.sh -p spotify i",
+ "on-scroll-down": "volumecontrol.sh -p spotify d",
+ "max-length": 25,
+ "escape": true,
+ "tooltip": true
+ },
+
diff --git a/.config/waybar/modules/style.css b/.config/waybar/modules/style.css
new file mode 100644
index 0000000..93da5c3
--- /dev/null
+++ b/.config/waybar/modules/style.css
@@ -0,0 +1,151 @@
+* {
+ border: none;
+ border-radius: 0px;
+ font-family: "JetBrainsMono Nerd Font";
+ font-weight: bold;
+ font-size: ${s_fontpx}px;
+ min-height: 10px;
+}
+
+@import "theme.css";
+
+window#waybar {
+ background: @bar-bg;
+}
+
+tooltip {
+ background: @main-bg;
+ color: @main-fg;
+ border-radius: ${t_radius}px;
+ border-width: 0px;
+}
+
+#workspaces button {
+ box-shadow: none;
+ text-shadow: none;
+ padding: 0px;
+ border-radius: ${w_radius}px;
+ margin-${x1}: ${w_margin}px;
+ margin-${x2}: ${w_margin}px;
+ margin-${x3}: 0px;
+ padding-${x3}: ${w_paddin}px;
+ padding-${x4}: ${w_paddin}px;
+ margin-${x4}: 0px;
+ color: @main-fg;
+ animation: ws_normal 20s ease-in-out 1;
+}
+
+#workspaces button.active {
+ background: @wb-act-bg;
+ color: @wb-act-fg;
+ margin-${x3}: ${w_margin}px;
+ padding-${x3}: ${w_padact}px;
+ padding-${x4}: ${w_padact}px;
+ margin-${x4}: ${w_margin}px;
+ animation: ws_active 20s ease-in-out 1;
+ transition: all 0.4s cubic-bezier(.55,-0.68,.48,1.682);
+}
+
+#workspaces button:hover {
+ background: @wb-hvr-bg;
+ color: @wb-hvr-fg;
+ animation: ws_hover 20s ease-in-out 1;
+ transition: all 0.3s cubic-bezier(.55,-0.68,.48,1.682);
+}
+
+#taskbar button {
+ box-shadow: none;
+ text-shadow: none;
+ padding: 0px;
+ border-radius: ${w_radius}px;
+ margin-${x1}: ${w_margin}px;
+ margin-${x2}: ${w_margin}px;
+ margin-${x3}: 0px;
+ padding-${x3}: ${w_paddin}px;
+ padding-${x4}: ${w_paddin}px;
+ margin-${x4}: 0px;
+ color: @wb-color;
+ animation: tb_normal 20s ease-in-out 1;
+}
+
+#taskbar button.active {
+ background: @wb-act-bg;
+ color: @wb-act-color;
+ margin-${x3}: ${w_margin}px;
+ padding-${x3}: ${w_padact}px;
+ padding-${x4}: ${w_padact}px;
+ margin-${x4}: ${w_margin}px;
+ animation: tb_active 20s ease-in-out 1;
+ transition: all 0.4s cubic-bezier(.55,-0.68,.48,1.682);
+}
+
+#taskbar button:hover {
+ background: @wb-hvr-bg;
+ color: @wb-hvr-color;
+ animation: tb_hover 20s ease-in-out 1;
+ transition: all 0.3s cubic-bezier(.55,-0.68,.48,1.682);
+}
+
+#tray menu * {
+ min-height: 16px
+}
+
+#tray menu separator {
+ min-height: 10px
+}
+
+${modules_ls}
+#custom-l_end,
+#custom-r_end,
+#custom-sl_end,
+#custom-sr_end,
+#custom-rl_end,
+#custom-rr_end {
+ color: @main-fg;
+ background: @main-bg;
+ opacity: 1;
+ margin: ${x1g_margin}px ${x2g_margin}px ${x3g_margin}px ${x4g_margin}px;
+ padding-${x3}: ${g_paddin}px;
+ padding-${x4}: ${g_paddin}px;
+}
+
+#workspaces,
+#taskbar {
+ padding: 0px;
+}
+
+#custom-r_end {
+ border-radius: ${x1rb_radius}px ${x2rb_radius}px ${x3rb_radius}px ${x4rb_radius}px;
+ margin-${x4}: ${e_margin}px;
+ padding-${x4}: ${e_paddin}px;
+}
+
+#custom-l_end {
+ border-radius: ${x1lb_radius}px ${x2lb_radius}px ${x3lb_radius}px ${x4lb_radius}px;
+ margin-${x3}: ${e_margin}px;
+ padding-${x3}: ${e_paddin}px;
+}
+
+#custom-sr_end {
+ border-radius: 0px;
+ margin-${x4}: ${e_margin}px;
+ padding-${x4}: ${e_paddin}px;
+}
+
+#custom-sl_end {
+ border-radius: 0px;
+ margin-${x3}: ${e_margin}px;
+ padding-${x3}: ${e_paddin}px;
+}
+
+#custom-rr_end {
+ border-radius: ${x1rc_radius}px ${x2rc_radius}px ${x3rc_radius}px ${x4rc_radius}px;
+ margin-${x4}: ${e_margin}px;
+ padding-${x4}: ${e_paddin}px;
+}
+
+#custom-rl_end {
+ border-radius: ${x1lc_radius}px ${x2lc_radius}px ${x3lc_radius}px ${x4lc_radius}px;
+ margin-${x3}: ${e_margin}px;
+ padding-${x3}: ${e_paddin}px;
+}
diff --git a/.config/waybar/modules/taskbar.jsonc b/.config/waybar/modules/taskbar.jsonc
new file mode 100644
index 0000000..630d574
--- /dev/null
+++ b/.config/waybar/modules/taskbar.jsonc
@@ -0,0 +1,18 @@
+ "wlr/taskbar": {
+ "format": "{icon}",
+ "rotate": ${r_deg},
+ "icon-size": ${i_task},
+ "icon-theme": "${i_theme}",
+ "spacing": 0,
+ "tooltip-format": "{title}",
+ "on-click": "activate",
+ "on-click-middle": "close",
+ "ignore-list": [
+ "Alacritty"
+ ],
+ "app_ids-mapping": {
+ "firefoxdeveloperedition": "firefox-developer-edition",
+ "jetbrains-datagrip": "DataGrip"
+ }
+ },
+
diff --git a/.config/waybar/modules/theme.jsonc b/.config/waybar/modules/theme.jsonc
new file mode 100644
index 0000000..6482c6e
--- /dev/null
+++ b/.config/waybar/modules/theme.jsonc
@@ -0,0 +1,11 @@
+ "custom/theme": {
+ "format": "{}",
+ "rotate": ${r_deg},
+ "exec": "echo ; echo switch theme",
+ "on-click": "themeswitch.sh -n",
+ "on-click-right": "themeswitch.sh -p",
+ "on-click-middle": "sleep 0.1 && themeselect.sh",
+ "interval" : 86400, // once every day
+ "tooltip": true
+ },
+
diff --git a/.config/waybar/modules/tray.jsonc b/.config/waybar/modules/tray.jsonc
new file mode 100644
index 0000000..d7c0bce
--- /dev/null
+++ b/.config/waybar/modules/tray.jsonc
@@ -0,0 +1,6 @@
+ "tray": {
+ "icon-size": ${i_size},
+ "rotate": ${r_deg},
+ "spacing": 5
+ },
+
diff --git a/.config/waybar/modules/updates.jsonc b/.config/waybar/modules/updates.jsonc
new file mode 100644
index 0000000..996f732
--- /dev/null
+++ b/.config/waybar/modules/updates.jsonc
@@ -0,0 +1,10 @@
+ "custom/updates": {
+ "exec": "systemupdate.sh",
+ "return-type": "json",
+ "format": "{}",
+ "rotate": ${r_deg},
+ "on-click": "hyprctl dispatch exec 'systemupdate.sh up'",
+ "interval": 86400, // once every day
+ "tooltip": true,
+ "signal": 20,
+ },
diff --git a/.config/waybar/modules/wallchange.jsonc b/.config/waybar/modules/wallchange.jsonc
new file mode 100644
index 0000000..0c839ca
--- /dev/null
+++ b/.config/waybar/modules/wallchange.jsonc
@@ -0,0 +1,11 @@
+ "custom/wallchange": {
+ "format": "{}",
+ "rotate": ${r_deg},
+ "exec": "echo ; echo switch wallpaper",
+ "on-click": "swwwallpaper.sh -n",
+ "on-click-right": "swwwallpaper.sh -p",
+ "on-click-middle": "sleep 0.1 && swwwallselect.sh",
+ "interval" : 86400, // once every day
+ "tooltip": true
+ },
+
diff --git a/.config/waybar/modules/wbar.jsonc b/.config/waybar/modules/wbar.jsonc
new file mode 100644
index 0000000..7738657
--- /dev/null
+++ b/.config/waybar/modules/wbar.jsonc
@@ -0,0 +1,11 @@
+ "custom/wbar": {
+ "format": "{}", // //
+ "rotate": ${r_deg},
+ "exec": "echo ; echo switch bar // dock",
+ "on-click": "wbarconfgen.sh n",
+ "on-click-right": "wbarconfgen.sh p",
+ "on-click-middle": "sleep 0.1 && quickapps.sh kitty firefox spotify code dolphin",
+ "interval" : 86400,
+ "tooltip": true
+ },
+
diff --git a/.config/waybar/modules/window.jsonc b/.config/waybar/modules/window.jsonc
new file mode 100644
index 0000000..3c56b28
--- /dev/null
+++ b/.config/waybar/modules/window.jsonc
@@ -0,0 +1,17 @@
+ "hyprland/window": {
+ "format": " {}",
+ "rotate": ${r_deg},
+ "separate-outputs": true,
+ "rewrite": {
+ "${USER}@${set_sysname}:(.*)": "$1 ",
+ "(.*) — Mozilla Firefox": "$1 ",
+ "(.*)Mozilla Firefox": "Firefox ",
+ "(.*) - Visual Studio Code": "$1 ",
+ "(.*)Visual Studio Code": "Code ",
+ "(.*) — Dolphin": "$1 ",
+ "(.*)Spotify": "Spotify ",
+ "(.*)Steam": "Steam "
+ },
+ "max-length": 50
+ },
+
diff --git a/.config/waybar/modules/workspaces.jsonc b/.config/waybar/modules/workspaces.jsonc
new file mode 100644
index 0000000..c1e580a
--- /dev/null
+++ b/.config/waybar/modules/workspaces.jsonc
@@ -0,0 +1,13 @@
+ "hyprland/workspaces": {
+ "disable-scroll": true,
+ "rotate": ${r_deg},
+ "all-outputs": true,
+ "active-only": false,
+ "on-click": "activate",
+ "disable-scroll": false,
+ "on-scroll-up": "hyprctl dispatch workspace -1",
+ "on-scroll-down": "hyprctl dispatch workspace +1",
+ "persistent-workspaces": {
+ }
+ },
+
diff --git a/.config/waybar/style.css b/.config/waybar/style.css
new file mode 100644
index 0000000..a0182c7
--- /dev/null
+++ b/.config/waybar/style.css
@@ -0,0 +1,178 @@
+* {
+ border: none;
+ border-radius: 0px;
+ font-family: "JetBrainsMono Nerd Font";
+ font-weight: bold;
+ font-size: 20px;
+ min-height: 10px;
+}
+
+@import "theme.css";
+
+window#waybar {
+ background: @bar-bg;
+}
+
+tooltip {
+ background: @main-bg;
+ color: @main-fg;
+ border-radius: 7px;
+ border-width: 0px;
+}
+
+#workspaces button {
+ box-shadow: none;
+ text-shadow: none;
+ padding: 0px;
+ border-radius: 9px;
+ margin-top: 3px;
+ margin-bottom: 3px;
+ margin-left: 0px;
+ padding-left: 3px;
+ padding-right: 3px;
+ margin-right: 0px;
+ color: @main-fg;
+ animation: ws_normal 20s ease-in-out 1;
+}
+
+#workspaces button.active {
+ background: @wb-act-bg;
+ color: @wb-act-fg;
+ margin-left: 3px;
+ padding-left: 12px;
+ padding-right: 12px;
+ margin-right: 3px;
+ animation: ws_active 20s ease-in-out 1;
+ transition: all 0.4s cubic-bezier(.55,-0.68,.48,1.682);
+}
+
+#workspaces button:hover {
+ background: @wb-hvr-bg;
+ color: @wb-hvr-fg;
+ animation: ws_hover 20s ease-in-out 1;
+ transition: all 0.3s cubic-bezier(.55,-0.68,.48,1.682);
+}
+
+#taskbar button {
+ box-shadow: none;
+ text-shadow: none;
+ padding: 0px;
+ border-radius: 9px;
+ margin-top: 3px;
+ margin-bottom: 3px;
+ margin-left: 0px;
+ padding-left: 3px;
+ padding-right: 3px;
+ margin-right: 0px;
+ color: @wb-color;
+ animation: tb_normal 20s ease-in-out 1;
+}
+
+#taskbar button.active {
+ background: @wb-act-bg;
+ color: @wb-act-color;
+ margin-left: 3px;
+ padding-left: 12px;
+ padding-right: 12px;
+ margin-right: 3px;
+ animation: tb_active 20s ease-in-out 1;
+ transition: all 0.4s cubic-bezier(.55,-0.68,.48,1.682);
+}
+
+#taskbar button:hover {
+ background: @wb-hvr-bg;
+ color: @wb-hvr-color;
+ animation: tb_hover 20s ease-in-out 1;
+ transition: all 0.3s cubic-bezier(.55,-0.68,.48,1.682);
+}
+
+#tray menu * {
+ min-height: 16px
+}
+
+#tray menu separator {
+ min-height: 10px
+}
+
+#backlight,
+#battery,
+#bluetooth,
+#custom-cava,
+#custom-cliphist,
+#clock,
+#custom-cpuinfo,
+#cpu,
+#custom-gpuinfo,
+#idle_inhibitor,
+#custom-keybindhint,
+#language,
+#memory,
+#mpris,
+#network,
+#custom-notifications,
+#custom-power,
+#privacy,
+#pulseaudio,
+#custom-spotify,
+#taskbar,
+#custom-theme,
+#tray,
+#custom-updates,
+#custom-wallchange,
+#custom-wbar,
+#window,
+#workspaces,
+#custom-l_end,
+#custom-r_end,
+#custom-sl_end,
+#custom-sr_end,
+#custom-rl_end,
+#custom-rr_end {
+ color: @main-fg;
+ background: @main-bg;
+ opacity: 1;
+ margin: 4px 0px 4px 0px;
+ padding-left: 4px;
+ padding-right: 4px;
+}
+
+#workspaces,
+#taskbar {
+ padding: 0px;
+}
+
+#custom-r_end {
+ border-radius: 0px 21px 21px 0px;
+ margin-right: 9px;
+ padding-right: 3px;
+}
+
+#custom-l_end {
+ border-radius: 21px 0px 0px 21px;
+ margin-left: 9px;
+ padding-left: 3px;
+}
+
+#custom-sr_end {
+ border-radius: 0px;
+ margin-right: 9px;
+ padding-right: 3px;
+}
+
+#custom-sl_end {
+ border-radius: 0px;
+ margin-left: 9px;
+ padding-left: 3px;
+}
+
+#custom-rr_end {
+ border-radius: 0px 7px 7px 0px;
+ margin-right: 9px;
+ padding-right: 3px;
+}
+
+#custom-rl_end {
+ border-radius: 7px 0px 0px 7px;
+ margin-left: 9px;
+ padding-left: 3px;
+}
diff --git a/.config/waybar/theme.css b/.config/waybar/theme.css
new file mode 100644
index 0000000..691cf6b
--- /dev/null
+++ b/.config/waybar/theme.css
@@ -0,0 +1,10 @@
+@define-color bar-bg rgba(0, 0, 0, 0);
+
+@define-color main-bg #11111b;
+@define-color main-fg #cdd6f4;
+
+@define-color wb-act-bg #a6adc8;
+@define-color wb-act-fg #313244;
+
+@define-color wb-hvr-bg #f5c2e7;
+@define-color wb-hvr-fg #313244;