A tiny lib for Sketchybar configuring with Python
Project description
sketchybar-py
A Python library for configuring SketchyBar - a highly customizable macOS status bar replacement. This library allows you to configure your SketchyBar using Python instead of traditional bash scripting, making the configuration process more intuitive and maintainable.
Features
- Configure SketchyBar using Python syntax instead of bash
- Define bar items as functions, combining creation and behavior in one place
- More structured and maintainable configuration approach
- Native Python integration with SketchyBar's functionality
- No external dependencies
Prerequisites
- macOS
- SketchyBar installed
- Python 3.10+ or uv
Installation
Option 1: Using with uv shebang (Recommended)
Add the following shebang declaration to the top of your script:
#!/usr/bin/env -S uv run -q
# /// script
# requires-python = ">=3.10"
# dependencies = [
# "sketchybar-py"
# ]
# ///
Option 2: Manual Import
pip install sketchybar-py
Usage
Add the following line to your sketchybarrc:
$CONFIG_DIR/sketchybar.py
Make the Python configuration file executable:
chmod +x sketchybar.py
Example
Here's a complete example of sketchybar.py showing how to configure SketchyBar using sketchybar-py (with uv):
#!/usr/bin/env -S uv run -q
# /// script
# requires-python = ">=3.10"
# dependencies = [
# "sketchybar-py"
# ]
# ///
from sketchybar_py import Sketchybar
global_bar_properties = {
"position": "top",
"height": "24",
"blur_radius": "0",
"color": "0x44444444",
}
default_settings_for_new_items = {
"padding_left": 5,
"padding_right": 5,
"icon.font": "FiraCode Nerd Font:Bold:12.0",
"label.font": "FiraCode Nerd Font:Bold:12.0",
"icon.color": "0xffffffff",
"label.color": "0xffffffff",
"icon.padding_left": 4,
"icon.padding_right": 4,
"label.padding_left": 4,
"label.padding_right": 4,
}
class MyAwesomeSketchyBar(Sketchybar):
def post_init(self):
print("Init...")
self.do("--bar", global_bar_properties)
self.do("--default", default_settings_for_new_items)
self.do("--hotload", "true")
self.autoload()
@Sketchybar.item(
enabled=True,
position="left",
icon="",
properties={"label.drawing": "off"}
)
def l0_chevron(self):
pass
@Sketchybar.item(
position="left",
icon="++",
subscribe=["front_app_switched"],
properties={"icon.drawing": "off"},
)
def l1_front_app(self):
if self.sender == "front_app_switched":
self.label = self.info
@Sketchybar.item(
position="right",
update_freq=60,
subscribe=["system_woke", "power_source_change"],
)
def r2_battery(self):
percentage = (
self.run("pmset -g batt | grep -Eo '\\d+%'").stdout.strip().rstrip("%")
)
charging = "AC Power" in self.run("pmset -g batt").stdout
self.icon = "" if charging else ""
self.label = percentage + "%"
@Sketchybar.item(
position="right",
update_freq=10,
properties={"icon.drawing": "off"}
)
def r1_clock(self):
now = self.run("date '+%d/%m %H:%M'").stdout
self.label = now
@Sketchybar.item(
position="center",
properties={"icon.drawing": "off"},
label="notch_placeholder_0",
)
def c0_notch(self):
pass
if __name__ == "__main__":
sb = MyAwesomeSketchyBar()
API Reference
Sketchybar Class
Main class for configuring SketchyBar.
Methods
post_init(): Contains initial configuration settings and setup. Also item initialization occurs here.do(): Executes sketchybar with provided arguments.run(): Executes any shell command with arguments.autoload(): Finds all decorated methods in the class and runs them in alphabetical order. Alternatively, you can call them manually inpost_init()in your preferred order.
Decorators
@Sketchybar.item: Define a new bar item with properties
Item Properties
Common properties that can be used in item definitions:
enabled: True or False - used forautoload()controlposition: "left", "right", or "center".update_freq: Update frequency in seconds.subscribe: List of events to subscribe to.properties: Dictionary of additional properties.- You can use any sketchybar item properties.
License
This project is licensed under the MIT License
Author
Dmitry Kuznetsov
- GitHub: @dimentium
Related
- SketchyBar - The original SketchyBar project
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sketchybar_py-0.2.1.tar.gz.
File metadata
- Download URL: sketchybar_py-0.2.1.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eceab4866aba22ae793d462c9b305d91497cf720863d6baa117968e6ea6cca53
|
|
| MD5 |
9f6a47780d2800f0dd94aa1976d41889
|
|
| BLAKE2b-256 |
48aff74383f630786b40cdec0f44af0695972fd8c80d6d4cf99310c3c990aaaf
|
File details
Details for the file sketchybar_py-0.2.1-py3-none-any.whl.
File metadata
- Download URL: sketchybar_py-0.2.1-py3-none-any.whl
- Upload date:
- Size: 5.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22ce156da999a3b38605c67b88874e2f6456a5861c9e667f363bcdb444f82185
|
|
| MD5 |
e97bea5be7da8e06d4d7e63cd094d522
|
|
| BLAKE2b-256 |
85e3fdc08c7408390523e9113928c4a6dde4602ff227db8b77ad167b4a5ad6e6
|