diff --git a/waybar/config.template b/waybar/config.template
new file mode 100644
index 000000000..dfe0d18d9
--- /dev/null
+++ b/waybar/config.template
@@ -0,0 +1,238 @@
+// This is not a valid Waybar config file. It is a template designed to work with:
+// https://git.john.me.tz/jpm/scripts/src/branch/master/sway/displays.pl
+// You can make changes to the bar, but leave the '__' variables intact.
+// The script will build a config with these settings for each enabled display.
+// The '__' variables are defined in the hash in that script file.
+[{
+ "name": "window",
+ "output": __OUTPUT__,
+ "ipc": true,
+ "id": "bar-1",
+ "width": 1000,
+ "mode": "hide",
+ "hidden_state": "hide",
+ "layer": "top", // Waybar at top layer
+ "position": "top", // Waybar position (top|bottom|left|right)
+ "margin-left": 75,
+ "margin-right": 75,
+ "margin-top": 68,
+ "modules-left": [],
+ "modules-center": ["sway/mode", "sway/window"],
+ "modules-right": [],
+ "sway/mode": {
+ "format": "{}"
+ },
+},{
+ // LAUNCHER
+ "name": "launcher",
+ "output": __OUTPUT__,
+ "ipc": true,
+ "id": "bar-1",
+ "mode": "hide",
+ "hidden_state": "hide",
+ "layer": "top", // Waybar at top layer
+ "position": "bottom", // Waybar position (top|bottom|left|right)
+ "margin-left": 20,
+ "margin-right": 20,
+ "margin-bottom": 20,
+ "modules-left": ["custom/launcher"],
+ "modules-center": [],
+ "modules-right": ["tray", "custom/todo", "custom/osk", "custom/pkg", "custom/bar", "idle_inhibitor", "custom/clock", "custom/power"],
+ // Modules configuration
+ "custom/launcher": {
+ "format": "",
+ "on-click": "if [ $(sudo pgrep -xc rofi) -gt 0 ]; then pkill rofi; else rofi -config ${HOME}/.config/rofi/config.rasi -show drun -lines 20; fi"
+ },
+ //"mpd": {
+ //"server": "10.10.0.66",
+ //"port": 6600,
+ //"interval": 10,
+ //"timeout": 30,
+ //"unknown-tag": "⚠",
+ //"format": "▶️{title}",
+ //"format-paused": "⏸️{title}",
+ //"format-stopped": "⏹️ mpd",
+ //"format-disconnected": "⚠ mpd",
+ //"on-click": "${HOME}/scripts/waybar/waybar-mpd.sh"
+ //},
+ "tray": {
+ "icon-size": 28,
+ "spacing": 10
+ },
+ "custom/todo": {
+ "format": "🗈",
+ "on-click": "${HOME}/scripts/waybar/waybar-todo.sh",
+ "tooltip": false
+ },
+ "custom/osk": {
+ "format": "⌨",
+ "on-click": "${HOME}/scripts/waybar/waybar-keyboard.sh",
+ "tooltip": false
+ },
+ "custom/pkg": {
+ "interval": 60,
+ "tooltip-format": "{:%d %B}\n{calendar}",
+ "on-click": "${HOME}/scripts/waybar/waybar-pkg.sh upgrade",
+ "return-type": "json",
+ "exec": "${HOME}/scripts/waybar/waybar-pkg.sh bar"
+ },
+ "custom/bar": {
+ "format": "",
+ "tooltip": false,
+ "on-click": "${HOME}/scripts/waybar/toggle.sh"
+ },
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "format-icons": {
+ "activated": "",
+ "deactivated": ""
+ },
+ "on-click": "echo {status} > .config/idle_inhibitor"
+ },
+ "custom/clock": {
+ "interval": 60,
+ "tooltip": true,
+ "on-click": "${HOME}/.local/bin/firefox/firefox-bin https://papillon.john.me.tz/calendar.php",
+ "return-type": "json",
+ "exec": "echo '{\"class\": \"clock\", \"text\": \"'$(date '+%H:%M')'\", \"tooltip\": \"'$(date '+%A, %B %d, %Y | %Y-%m-%d')'\"}'"
+ },
+ "custom/power": {
+ "format": "\u23FB",
+ "on-click": "if [ $(sudo pgrep -xc rofi) -gt 0 ]; then pkill rofi; else ${HOME}/scripts/rofi/rofi-power-menu.sh; fi"
+ },
+},
+{
+ "name": "status",
+ "output": __OUTPUT__,
+ "ipc": true,
+ "id": "bar-1",
+ "mode": "hide",
+ "hidden_state": "hide",
+ "layer": "top", // Waybar at top layer
+ "position": "top", // Waybar position (top|bottom|left|right)
+ "margin-left": 20,
+ "margin-right": 20,
+ "margin-top": 20,
+ // Choose the order of the modules
+ "modules-left": ["sway/workspaces"],
+ "modules-center": [],
+ "modules-right": ["custom/weather", "network", "network#wireguard", "cpu", "memory", "custom/disk", "temperature", "backlight", "custom/battery", "pulseaudio"],
+ // Modules configuration
+ "sway/workspaces": {
+ // "disable-scroll": true,
+ // "all-outputs": true,
+ "format": "{icon}",
+ "numeric-first": true,
+ "format-icons": {
+ "0": "0 \uf073",
+ "1": "1 \uf27a",
+ "2": "2 \uf0e0",
+ "3": "3 \uf268",
+ "4": "4 \uf144",
+ "5": "5 \uf095",
+ "6": "6 \uf120",
+ "7": "7 \uf269",
+ "8": "8 \uf121",
+ "9": "9 \uf126",
+ "C0": "C0",
+ "C1": "C1",
+ "C2": "C2",
+ "C3": "C3",
+ "C4": "C4",
+ "C5": "C5",
+ "C6": "C6",
+ "C7": "C7",
+ "C8": "C8",
+ "C9": "C9",
+ "grave": "",
+ "urgent": "!",
+ "focused": "",
+ "default": ""
+ }
+ },
+ //"mpd": {
+ //"server": "10.10.0.66",
+ //"port": 6600,
+ //"interval": 10,
+ //"timeout": 30,
+ //"unknown-tag": "⚠",
+ //"format": "▶️ {title}",
+ //"format-paused": "⏸️ {title}",
+ //"format-stopped": "⏹️ mpd",
+ //"format-disconnected": "⚠ mpd",
+ //"on-click": "${HOME}/scripts/waybar/waybar-mpd.sh"
+ //},
+ "custom/weather": {
+ "interval": 600,
+ "tooltip-format": "{:%d %B}\n{calendar}",
+ "on-click": "${HOME}/scripts/waybar/waybar-weather.pl notify",
+ "exec": "${HOME}/scripts/waybar/waybar-weather.sh bar"
+ },
+ "network": {
+ // "interface": "wlp58s0", // (Optional) To force the use of this interface
+ "interval": 10,
+ "tooltip": "{ipaddr}",
+ "format-ethernet": "",
+ "format-wifi": "",
+ "format-disconnected": "⛖",
+ "on-click": "${HOME}/scripts/waybar/waybar-nm.sh"
+ //"on-click": "if [ $(sudo pgrep -c nmtui) -gt 0 ]; then sudo pkill nmtui; else /usr/bin/xterm -e 'sudo /usr/bin/nmtui'; fi"
+ },
+ "network#wireguard": {
+ "interval": 10,
+ "interface": "wg0", // (Optional) To force the use of this interface
+ "tooltip": "{ipaddr}",
+ "format": "🔒",
+ "format-disconnected": "🔓",
+ "on-click": "if [ $(sudo pgrep -xc rofi) -gt 0 ]; then pkill rofi; else ${HOME}/scripts/rofi/rofi-openvpn.sh; fi"
+ },
+ "cpu": {
+ "format": "{usage}%",
+ "tooltip": true,
+ "on-click": "${HOME}/scripts/waybar/waybar-cpu.sh"
+ },
+ "memory": {
+ "format": "{}%",
+ "on-click": "${HOME}/scripts/waybar/waybar-mem.sh"
+ },
+ "custom/disk": {
+ "format": "\uf0a0{}",
+ "exec": "df / | tail -n 1 | awk {'print $5'}",
+ "on-click": "${HOME}/scripts/waybar/waybar-disk.sh"
+ },
+ "temperature": {
+ "critical-threshold": 80,
+ "format": "{temperatureC}°C"
+ },
+ "backlight": {
+ // "device": "acpi_video1",
+ "format": "{icon}{percent}%",
+ "format-icons": [ "•", "☼", "o", "", ""],
+ "on-click": "${HOME}/scripts/thinkpad/blc.pl --notify %",
+ "on-scroll-up": "${HOME}/scripts/thinkpad/blc.pl --notify ++",
+ "on-scroll-down": "${HOME}/scripts/thinkpad/blc.pl --notify --"
+ },
+ "custom/battery": {
+ "format": "{}",
+ "return-type": "json",
+ "exec": "${HOME}/scripts/thinkpad/pow.pl -b",
+ "interval": 5,
+ "on-click": "notify-send Power \"`${HOME}/scripts/thinkpad/pow.pl -p`\""
+ },
+ "pulseaudio": {
+ //"scroll-step": 1,
+ "format": "{icon}{volume}%",
+ "format-bluetooth": "{icon}{volume}%",
+ "format-muted": "",
+ "format-icons": {
+ "headphones": "",
+ "handsfree": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", ""]
+ },
+ "on-click": "${HOME}/scripts/waybar/waybar-audio.sh"
+ },
+}]
diff --git a/waybar/gruvbox-oled.css b/waybar/gruvbox-oled.css
new file mode 100644
index 000000000..fdd52579b
--- /dev/null
+++ b/waybar/gruvbox-oled.css
@@ -0,0 +1,37 @@
+/*
+* Pure Black spin of Gruvbox
+*/
+@define-color black #000000;
+@define-color white #FFFFFF;
+@define-color fg #EBDBB2;
+@define-color fghi #FBF1C7;
+@define-color bg #282828;
+@define-color hibg #1d2021;
+@define-color grey00 #1d2021;
+@define-color grey01 #282828;
+@define-color grey02 #323836;
+@define-color grey03 #504945;
+@define-color grey04 #665c54;
+@define-color grey05 #7C6F64;
+@define-color grey06 #928374;
+@define-color grey07 #A89984;
+@define-color grey08 #BDAE93;
+@define-color grey09 #D5C4A1;
+@define-color grey10 #EBDBB2;
+@define-color grey11 #FBF1C7;
+@define-color red #CC241d;
+@define-color green #98971A;
+@define-color yellow #D79921;
+@define-color blue #458588;
+@define-color purple #B16286;
+@define-color aqua #8EC07C;
+@define-color orange #D65D0E;
+@define-color redhi #FB4934;
+@define-color greenhi #B8BB26;
+@define-color yellowhi #FABD2F;
+@define-color bluehi #83A598;
+@define-color purplehi #D3869B;
+@define-color aquahi #8EC07C;
+@define-color orangehi #FE8019;
+@define-color alert #D65D0E;
+@define-color warning #FE8019;
diff --git a/waybar/style.css b/waybar/style.css
new file mode 100644
index 000000000..e45885ecd
--- /dev/null
+++ b/waybar/style.css
@@ -0,0 +1,252 @@
+@import "gruvbox-oled.css";
+/*
+ * Available colours
+ * black
+ * white
+ * fg
+ * fghi
+ * bg
+ * bghi
+ * grey00 = bghi
+ * grey01 = bg
+ * grey02
+ * grey03
+ * grey04
+ * grey05
+ * grey06
+ * grey07
+ * grey08
+ * grey09
+ * grey10 = fg
+ * grey11 = fghi
+ * red
+ * green
+ * yellow
+ * blue
+ * purple
+ * aqua
+ * redhi
+ * greenhi
+ * yellowhi
+ * bluehi
+ * purple hi
+ * aquahi
+ * orangehi
+ * alert = orange
+ * warning = orangehi
+ */
+
+/* Global/Multi */
+
+* {
+ font-family: "Anonymous Pro", "Font Awesome 5 Brands", "Font Awesome 5 Free", Monospace;
+ font-size: 24px;
+ min-height: 0;
+}
+
+window#waybar.window {
+ font-size: 12px;
+}
+
+window#waybar {
+ border-radius: 30px;
+ border: solid 2px @fg;
+ font-size: 12px;
+ background-color: @bg;
+ animation-name: fadeIn;
+ animation-duration: 1s;
+ color: @fg;
+}
+
+#window, #custom-launcher, #workspaces, #mode, #mpd, #network, #cpu, #memory, #custom-disk, #temperature, #backlight, #custom-battery, #pulseaudio, #custom-clock, #tray, #custom-todo, #custom-osk, #idle_inhibitor, #custom-power, #custom-weather {
+ color: @grey06;
+ padding: 0 5px;
+ margin: 0px;
+}
+
+/* Tray */
+
+#tray, #custom-todo, #custom-osk, #custom-apt, #custom-bar, #idle_inhibitor, #custom-clock, #custom-power {
+ color: @bluehi;
+}
+
+#mode, #mpd, #network, #cpu, #memory, #custom-disk, #temperature, #backlight, #custom-battery, #custom-clock, #tray, #custom-todo, #custom-osk, #idle_inhibitor {
+ border-top: solid 2px @fg;
+ border-bottom: solid 2px @fg;
+}
+
+#window {
+ padding: 10px;
+}
+
+/* Start Launcher */
+
+#custom-launcher {
+ margin-left: 15px;
+ color: @fg;
+}
+
+/* Workspaces */
+
+#workspaces {
+ color: @fg;
+ padding: 0px 0px;
+ margin: 0px;
+ margin-left: 15px;
+ border-radius: 0px;
+}
+
+#workspaces button.visible {
+ background-color: @grey06;
+}
+
+#workspaces button.focused {
+ background-color: @fg;
+ color: @grey06;
+}
+
+#workspaces button.urgent {
+ background-color: @redhi;
+ color: @white;
+}
+
+/* Mode */
+
+#mode {
+ background-color: @grey06;
+ color: @bg;
+}
+
+/* Window title */
+
+#window {
+ color: @fg;
+}
+
+/* MPD */
+
+#mpd {
+ color: @bg;
+}
+
+/* Networks */
+
+#network {
+ color: @blue;
+}
+
+#network.disconnected {
+ color: @red;
+ padding: 0px;
+}
+
+#network.wifi {
+}
+
+/* CPU */
+
+#cpu {
+ color: @fg;
+ color: @greenhi;
+}
+
+/* Memory */
+
+#memory {
+ color: @fg;
+ color: @purplehi;
+}
+
+/* Disk */
+
+#custom-disk {
+ color: @fg;
+ color: @purple;
+}
+
+/* Temperature */
+
+#temperature {
+ color: @fg;
+ color: @yellowhi;
+}
+
+#temperature.critical {
+ color: @redhi;
+}
+
+/* Backlight */
+
+#backlight {
+ color: @fg;
+ color: @greenhi;
+}
+
+/* Battery */
+
+#custom-battery {
+ color: @yellow;
+}
+
+#custom-battery.charging {
+ color: @green;
+}
+
+#custom-battery.discharging {
+ color: @orange;
+}
+
+#custom-battery.critical {
+ animation-name: blink;
+ animation-duration: 0.5s;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+ color: @redhi;
+}
+
+/* Pulseaudio */
+
+#pulseaudio {
+ margin-right: 15px;
+ color: @bluehi;
+}
+
+#pulseaudio.muted {
+ color: @grey06;
+}
+
+/* Clock */
+
+#custom-clock {
+ color: @fg;
+}
+
+/* Todo-txt */
+
+#custom-todo {
+ color: @fg;
+ color: @bluehi;
+}
+
+/* On-Screen Keyboard */
+
+#custom-osk {
+ color: @fg;
+ color: @bluehi;
+}
+
+/* Idle Inhibitor */
+
+#idle_inhibitor.activated {
+ /* background-color: @fg; */
+ color: @white;
+}
+
+/* Power button */
+
+#custom-power {
+ margin-right: 15px;
+ color: @red;
+}
+