1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# 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=0xff000000

##### 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.color=0xffffffff
  icon.font="SauceCodePro Nerd Font:Regular:16.0"
  icon.padding_left=3
  icon.padding_right=3

  label.color=0xffffffff
  label.font="SauceCodePro Nerd Font:Regular:14.0"
  label.padding_left=3
  label.padding_right=3
)
sketchybar --default "${default[@]}"

### Aerospace

sketchybar --add event aerospace_workspace_change

if command -v aerospace >/dev/null 2>&1; then
    aerospace list-monitors 2>/dev/null | while IFS= read -r monitor; do
        monitor_id=$(echo "$monitor" | awk '{print $1}')
        item_name="aerospace_$monitor_id"

        initial_workspace=$(aerospace list-workspaces --monitor $monitor_id --focused 2>/dev/null)

        sketchybar --add item $item_name left \
            --subscribe $item_name aerospace_workspace_change \
            --set $item_name \
            label="$initial_workspace" \
            icon.drawing=off \
            background.color=0xffcccccc \
            background.border_color=0xffcccccc \
            background.corner_radius=6 \
            background.height=26 \
            label.padding_left=8 \
            label.padding_right=8 \
            padding_left=3 \
            padding_right=3 \
            script="$CONFIG_DIR/plugins/aerospace.sh"
    done
fi

##### 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 datetime right \
           --subscribe datetime system_woke \
           --set datetime update_freq=30 script="$PLUGIN_DIR/datetime.sh" \
           --add item wifi right \
           --subscribe wifi wifi_change \
           --set wifi \
                 label.drawing=off \
                 update_freq=30 \
                 click_script="open x-apple.systempreferences:com.apple.wifi-settings-extension" \
                 script="$PLUGIN_DIR/wifi.sh" \
           --add item vpn right \
           --set vpn \
                 label.drawing=off \
                 update_freq=30 \
                 script="$PLUGIN_DIR/vpn.sh" \
           --add item volume right \
           --set volume \
                 label.drawing=off \
                 click_script="osascript -e 'set volume output muted not (output muted of (get volume settings))'" \
                 script="$PLUGIN_DIR/volume.sh" \
           --subscribe volume volume_change \
           --add item battery right \
           --set battery \
                 label.drawing=off \
                 update_freq=120 \
                 click_script="sketchybar -m --set \$NAME label.drawing=toggle" \
                 script="$PLUGIN_DIR/battery.sh" \
           --subscribe battery system_woke power_source_change \
           --add event agent_state_change \
           --add item agents right \
           --subscribe agents agent_state_change \
           --set agents \
                 icon=󰚩 \
                 icon.padding_right=8 \
                 popup.background.color=0xff222222 \
                 popup.background.corner_radius=6 \
                 popup.background.border_color=0xff444444 \
                 popup.background.border_width=1 \
                 script="$PLUGIN_DIR/agents.sh" \
                 click_script="$PLUGIN_DIR/agents.sh click"
           # --add item meetingbar right \
           # --set meetingbar \
           #       icon=􀉉 \
           #       icon.padding_right=8 \
           #       update_freq=120 \
           #       popup.background.color=0xff222222 \
           #       popup.background.corner_radius=6 \
           #       popup.background.border_color=0xff444444 \
           #       popup.background.border_width=1 \
           #       script="$PLUGIN_DIR/meetingbar.sh" \
           #       click_script="$PLUGIN_DIR/meetingbar_click.sh"

##### Force all scripts to run the first time (never do this in a script) #####
sketchybar --update