Skip to main content

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

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 in post_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 for autoload() control
  • position: "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

Related

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

sketchybar_py-0.1.1.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sketchybar_py-0.1.1-py3-none-any.whl (5.4 kB view details)

Uploaded Python 3

File details

Details for the file sketchybar_py-0.1.1.tar.gz.

File metadata

  • Download URL: sketchybar_py-0.1.1.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.25

File hashes

Hashes for sketchybar_py-0.1.1.tar.gz
Algorithm Hash digest
SHA256 2b796347fa32632cf771974c6855e89c3b385e44ff76fa0bbe9891d4aa795e33
MD5 71001eee972aeffafc2f747d2ba2a504
BLAKE2b-256 839ddb7ce59aa7cad0b40bfd206a2b4a166a44f57a6f529d0f2c0b1a88871e33

See more details on using hashes here.

File details

Details for the file sketchybar_py-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for sketchybar_py-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b400708e5130446706355d00ef01fe48716ac7b2d2fe393b48621a047794bba1
MD5 99a347b119c859586618c6afa1d93d20
BLAKE2b-256 87e0e6568eca3519cac6fd529ced8f32954e3ad87f26bbf3be16b5efdd81f04d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page