rix101/modules/nix-darwin/yabai/sketchybar/default.nix
reo101 26cafb1599
feat(yabai): update
Add 10th workspace
Add `get_menu_bar_height` objc program
2023-09-06 22:04:41 +03:00

173 lines
9.1 KiB
Nix
Executable file

# TODO: AppleSelectedInputSourcesChangedNotification
{ lib, darwin, ... }:
let
plugin_dir = ./plugins;
util_dir = ./utils;
get_menu_bar_height = darwin.apple_sdk.stdenv.mkDerivation {
name = "get_menu_bar_height";
version = "0.0.1";
src = lib.cleanSource ./get_menu_bar_height;
buildInputs = with darwin.apple_sdk.frameworks; [
Cocoa
];
buildPhase = ''
clang -framework cocoa get_menu_bar_height.m -o get_menu_bar_height
'';
installPhase = ''
mkdir -p $out/bin
mv get_menu_bar_height $out/bin/get_menu_bar_height
'';
};
in
''
export PLUGIN_DIR="${plugin_dir}"
export UTIL_DIR="${util_dir}"
##### Bar Appearance #####
BACKGROUND_COLOR="0x502a2d3d"
appearance=''$''\(defaults read -g AppleInterfaceStyle''\)
if [[ ''$''\{appearance''\} != 'Dark' ]]; then
BACKGROUND_COLOR="0x50f5f0f5"
fi
height=''$''\(${get_menu_bar_height}/bin/get_menu_bar_height''\)
sketchybar --bar height="32" \
blur_radius="25" \
position="top" \
sticky="on" \
margin="10" \
color="0x002a2d3d" \
notch_offset="5" \
corner_radius="12" \
border_color="0x80c4a7e7" \
border_width="0"
##### Changing Defaults #####
# We now change some default values that are applied to all further items
# For a full list of all available item properties see:
# https://felixkratz.github.io/SketchyBar/config/items
sketchybar --default updates="when_shown" \
icon.font="SF Pro Rounded:Bold:14.0" \
icon.color="0xffc6ceef" \
label.font="SF Pro Rounded:Bold:14.0" \
label.color="0xffc6ceef" \
padding_left="3" \
padding_right="3" \
label.padding_left="4" \
label.padding_right="4" \
icon.padding_left="4" \
icon.padding_right="4"
##### Adding Mission Control Space Indicators #####
# Now we add some mission control spaces:
# https://felixkratz.github.io/SketchyBar/config/components#space----associate-mission-control-spaces-with-an-item
# to indicate active and available mission control spaces
SPACE_ICONS=("1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16")
for i in "''$''\{!SPACE_ICONS[@]''\}"; do
sid=$(($i+1))
sketchybar --add space space.''$''\{sid''\} left \
--set space.''$''\{sid''\} associated_space="''$''\{sid''\}" \
icon="''$''\{SPACE_ICONS[i]''\}" \
background.color="0x44ffffff" \
background.corner_radius="7" \
background.height="20" \
background.drawing="on" \
background.border_color="0x952a2d3d" \
background.border_width="1" \
label.drawing="off" \
script="''$''\{PLUGIN_DIR''\}/space.sh" \
click_script="yabai -m space --focus ''$''\{sid''\}"
done
##### Adding Left Items #####
# We add some regular items to the left side of the bar
# only the properties deviating from the current defaults need to be set
sketchybar --add item space_separator left \
--set space_separator icon="λ" \
icon.color="0xffff946f" \
padding_left="10" \
padding_right="10" \
label.drawing="off" \
\
--add item front_app left \
--set front_app script="''$''\{PLUGIN_DIR''\}/front_app.sh" \
icon.drawing="off" \
background.color="''$''\{BACKGROUND_COLOR''\}" \
background.corner_radius="7" \
blur_radius="30" \
background.border_color="0x80c4a7e7" \
background.border_width="1" \
--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 i \
--set clock update_freq="10" \
icon="􀐬" \
background.color="''$''\{BACKGROUND_COLOR''\}" \
background.corner_radius="7" \
icon.padding_left="10" \
label.padding_right="10" \
blur_radius="30" \
background.border_color="0x80c4a7e7" \
background.border_width="1" \
script="''$''\{PLUGIN_DIR''\}/clock.sh" \
\
--add item wifi right \
--set wifi script="''$''\{PLUGIN_DIR''\}/wifi.sh" \
icon="􀙇" \
background.color="''$''\{BACKGROUND_COLOR''\}" \
background.corner_radius="7" \
icon.padding_left="10" \
label.padding_right="10" \
blur_radius="30" \
background.border_color="0x80c4a7e7" \
background.border_width="1" \
--subscribe wifi wifi_change \
\
--add item volume right \
--set volume script="''$''\{PLUGIN_DIR''\}/volume.sh" \
background.color="''$''\{BACKGROUND_COLOR''\}" \
background.corner_radius="7" \
icon.padding_left="10" \
label.padding_right="10" \
blur_radius="30" \
background.border_color="0x80c4a7e7" \
background.border_width="1" \
--subscribe volume volume_change \
\
--add item battery right \
--set battery script="''$''\{PLUGIN_DIR''\}/battery.sh" \
update_freq="120" \
background.color="''$''\{BACKGROUND_COLOR''\}" \
background.corner_radius="7" \
icon.padding_left="10" \
label.padding_right="10" \
blur_radius="30" \
background.border_color="0x80c4a7e7" \
background.border_width="1" \
--subscribe battery system_woke power_source_change \
##### Finalizing Setup #####
# The below command is only needed at the end of the initial configuration to
# force all scripts to run the first time, it should never be run in an item script.
sketchybar --update
''