diff --git a/.config/aerospace/aerospace.toml b/.config/aerospace/aerospace.toml
index 30f03632..8f00cd85 100644
--- a/.config/aerospace/aerospace.toml
+++ b/.config/aerospace/aerospace.toml
@@ -9,11 +9,6 @@
# Available commands: https://nikitabobko.github.io/AeroSpace/commands
after-login-command = []
-# You can use it to add commands that run after AeroSpace startup.
-# 'after-startup-command' is run after 'after-login-command'
-# Available commands : https://nikitabobko.github.io/AeroSpace/commands
-after-startup-command = []
-
# Start AeroSpace at login
start-at-login = true
@@ -38,6 +33,14 @@ default-root-container-orientation = 'auto'
# See https://nikitabobko.github.io/AeroSpace/guide#key-mapping
key-mapping.preset = 'qwerty'
+### SketchyBar
+
+after-startup-command = ['exec-and-forget /opt/homebrew/opt/sketchybar/bin/sketchybar']
+exec-on-workspace-change = [
+ '/bin/bash', '-c',
+ 'sketchybar --trigger aerospace_workspace_change FOCUSED_WORKSPACE=$AEROSPACE_FOCUSED_WORKSPACE'
+]
+
# Gaps between windows (inner-*) and between monitor edges (outer-*).
# Possible values:
# - Constant: gaps.outer.top = 8
diff --git a/.config/sketchybar/plugins/aerospace.sh b/.config/sketchybar/plugins/aerospace.sh
new file mode 100755
index 00000000..3c7104fa
--- /dev/null
+++ b/.config/sketchybar/plugins/aerospace.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+if [ -n "$FOCUSED_WORKSPACE" ]; then
+ sketchybar --set "$NAME" label="$FOCUSED_WORKSPACE"
+fi
diff --git a/.config/sketchybar/plugins/battery.sh b/.config/sketchybar/plugins/battery.sh
new file mode 100755
index 00000000..9dd9627b
--- /dev/null
+++ b/.config/sketchybar/plugins/battery.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+PERCENTAGE="$(pmset -g batt | grep -Eo "\d+%" | cut -d% -f1)"
+CHARGING="$(pmset -g batt | grep 'AC Power')"
+
+if [ "$PERCENTAGE" = "" ]; then
+ exit 0
+fi
+
+case "${PERCENTAGE}" in
+ 9[0-9]|100) ICON=""
+ ;;
+ [6-8][0-9]) ICON=""
+ ;;
+ [3-5][0-9]) ICON=""
+ ;;
+ [1-2][0-9]) ICON=""
+ ;;
+ *) ICON=""
+esac
+
+if [[ "$CHARGING" != "" ]]; then
+ ICON=""
+fi
+
+# The item invoking this script (name $NAME) will get its icon and label
+# updated with the current battery status
+sketchybar --set "$NAME" icon="$ICON" label="${PERCENTAGE}%"
diff --git a/.config/sketchybar/plugins/clock.sh b/.config/sketchybar/plugins/clock.sh
new file mode 100755
index 00000000..6cc739bd
--- /dev/null
+++ b/.config/sketchybar/plugins/clock.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# The $NAME variable is passed from sketchybar and holds the name of
+# the item invoking this script:
+# https://felixkratz.github.io/SketchyBar/config/events#events-and-scripting
+
+sketchybar --set "$NAME" label="$(date '+%d/%m %H:%M')"
+
diff --git a/.config/sketchybar/plugins/front_app.sh b/.config/sketchybar/plugins/front_app.sh
new file mode 100755
index 00000000..fb6d0b32
--- /dev/null
+++ b/.config/sketchybar/plugins/front_app.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# Some events send additional information specific to the event in the $INFO
+# variable. E.g. the front_app_switched event sends the name of the newly
+# focused application in the $INFO variable:
+# https://felixkratz.github.io/SketchyBar/config/events#events-and-scripting
+
+if [ "$SENDER" = "front_app_switched" ]; then
+ sketchybar --set "$NAME" label="$INFO"
+fi
diff --git a/.config/sketchybar/plugins/space.sh b/.config/sketchybar/plugins/space.sh
new file mode 100755
index 00000000..b8602b55
--- /dev/null
+++ b/.config/sketchybar/plugins/space.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# The $SELECTED variable is available for space components and indicates if
+# the space invoking this script (with name: $NAME) is currently selected:
+# https://felixkratz.github.io/SketchyBar/config/components#space----associate-mission-control-spaces-with-an-item
+
+sketchybar --set "$NAME" background.drawing="$SELECTED"
diff --git a/.config/sketchybar/plugins/volume.sh b/.config/sketchybar/plugins/volume.sh
new file mode 100755
index 00000000..6e69a5d9
--- /dev/null
+++ b/.config/sketchybar/plugins/volume.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# The volume_change event supplies a $INFO variable in which the current volume
+# percentage is passed to the script.
+
+if [ "$SENDER" = "volume_change" ]; then
+ VOLUME="$INFO"
+
+ case "$VOLUME" in
+ [6-9][0-9]|100) ICON=""
+ ;;
+ [3-5][0-9]) ICON=""
+ ;;
+ [1-9]|[1-2][0-9]) ICON=""
+ ;;
+ *) ICON=""
+ esac
+
+ sketchybar --set "$NAME" icon="$ICON" label="$VOLUME%"
+fi
diff --git a/.config/sketchybar/sketchybarrc b/.config/sketchybar/sketchybarrc
new file mode 100755
index 00000000..490b6a4f
--- /dev/null
+++ b/.config/sketchybar/sketchybarrc
@@ -0,0 +1,79 @@
+# This is a demo config to showcase some of the most important commands.
+# It is meant to be changed and configured, as it is intentionally kept sparse.
+# For a (much) more advanced configuration example see my dotfiles:
+# https://github.com/FelixKratz/dotfiles
+
+PLUGIN_DIR="$CONFIG_DIR/plugins"
+
+##### Bar Appearance #####
+# Configuring the general appearance of the bar.
+# These are only some of the options available. For all options see:
+# https://felixkratz.github.io/SketchyBar/config/bar
+# If you are looking for other colors, see the color picker:
+# https://felixkratz.github.io/SketchyBar/config/tricks#color-picker
+
+sketchybar --bar position=top height=40 blur_radius=30 color=0x40000000
+
+##### Changing Defaults #####
+# We now change some default values, which are applied to all further items.
+# For a full list of all available item properties see:
+# https://felixkratz.github.io/SketchyBar/config/items
+
+default=(
+ padding_left=5
+ padding_right=5
+ icon.font="SauceCodePro Nerd Font:Regular:16.0"
+ label.font="SauceCodePro Nerd Font:Regular:14.0"
+ icon.color=0xffffffff
+ label.color=0xffffffff
+ icon.padding_left=4
+ icon.padding_right=4
+ label.padding_left=4
+ label.padding_right=4
+)
+sketchybar --default "${default[@]}"
+
+### Aerospace
+
+sketchybar --add event aerospace_workspace_change
+sketchybar --add item focused_workspace left \
+ --subscribe focused_workspace aerospace_workspace_change \
+ --set focused_workspace \
+ background.color=0x44ffffff \
+ background.corner_radius=5 \
+ background.height=20 \
+ background.drawing=off \
+ icon.drawing=off \
+ label="$(aerospace list-workspaces --focused)" \
+ script="$CONFIG_DIR/plugins/aerospace.sh"
+
+##### Adding Left Items #####
+# We add some regular items to the left side of the bar, where
+# only the properties deviating from the current defaults need to be set
+
+sketchybar --add item front_app left \
+ --set front_app icon.drawing=off script="$PLUGIN_DIR/front_app.sh" \
+ --subscribe front_app front_app_switched
+
+##### Adding Right Items #####
+# In the same way as the left items we can add items to the right side.
+# Additional position (e.g. center) are available, see:
+# https://felixkratz.github.io/SketchyBar/config/items#adding-items-to-sketchybar
+
+# Some items refresh on a fixed cycle, e.g. the clock runs its script once
+# every 10s. Other items respond to events they subscribe to, e.g. the
+# volume.sh script is only executed once an actual change in system audio
+# volume is registered. More info about the event system can be found here:
+# https://felixkratz.github.io/SketchyBar/config/events
+
+sketchybar --add item clock right \
+ --set clock update_freq=10 icon= script="$PLUGIN_DIR/clock.sh" \
+ --add item volume right \
+ --set volume script="$PLUGIN_DIR/volume.sh" \
+ --subscribe volume volume_change \
+ --add item battery right \
+ --set battery update_freq=120 script="$PLUGIN_DIR/battery.sh" \
+ --subscribe battery system_woke power_source_change
+
+##### Force all scripts to run the first time (never do this in a script) #####
+sketchybar --update