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.2.1.tar.gz (6.3 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.2.1-py3-none-any.whl (5.6 kB view details)

Uploaded Python 3

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

Hashes for sketchybar_py-0.2.1.tar.gz
Algorithm Hash digest
SHA256 eceab4866aba22ae793d462c9b305d91497cf720863d6baa117968e6ea6cca53
MD5 9f6a47780d2800f0dd94aa1976d41889
BLAKE2b-256 48aff74383f630786b40cdec0f44af0695972fd8c80d6d4cf99310c3c990aaaf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sketchybar_py-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 22ce156da999a3b38605c67b88874e2f6456a5861c9e667f363bcdb444f82185
MD5 e97bea5be7da8e06d4d7e63cd094d522
BLAKE2b-256 85e3fdc08c7408390523e9113928c4a6dde4602ff227db8b77ad167b4a5ad6e6

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