All Projects → swiftbar → Swiftbar

swiftbar / Swiftbar

Licence: mit
Powerful macOS menu bar customization tool

Programming Languages

swift
15916 projects
scripting
82 projects

Projects that are alternatives of or similar to Swiftbar

Pomolectron
🍅 A pomodoro app for your menubar/tray.
Stars: ✭ 504 (-21%)
Mutual labels:  productivity
Wd
🚀 Jump to custom directories in zsh
Stars: ✭ 555 (-13.01%)
Mutual labels:  productivity
Dotfiles
Zsh, Karabiner, VS Code, Sublime, Neovim, Nix
Stars: ✭ 634 (-0.63%)
Mutual labels:  productivity
Octolinker
OctoLinker — Links together, what belongs together
Stars: ✭ 4,853 (+660.66%)
Mutual labels:  productivity
Zettlr
A Markdown Editor for the 21st century.
Stars: ✭ 6,099 (+855.96%)
Mutual labels:  productivity
Jsonui
jsonui is an interactive JSON explorer on your command line
Stars: ✭ 583 (-8.62%)
Mutual labels:  productivity
Things.sh
Simple read-only comand-line interface to your Things 3 database
Stars: ✭ 492 (-22.88%)
Mutual labels:  productivity
Zsh You Should Use
📎 ZSH plugin that reminds you to use existing aliases for commands you just typed
Stars: ✭ 659 (+3.29%)
Mutual labels:  productivity
Maya
Maye 一个简洁小巧的快速启动工具
Stars: ✭ 553 (-13.32%)
Mutual labels:  productivity
Nyxt
Nyxt - the hacker's power-browser.
Stars: ✭ 7,038 (+1003.13%)
Mutual labels:  productivity
Activitywatch
The goal of ActivityWatch is simple: Enable the collection of as much valuable lifedata as possible without compromising user privacy.
Stars: ✭ 5,927 (+829%)
Mutual labels:  productivity
Pyprind
PyPrind - Python Progress Indicator Utility
Stars: ✭ 527 (-17.4%)
Mutual labels:  productivity
Ponzu
Headless CMS with automatic JSON API. Featuring auto-HTTPS from Let's Encrypt, HTTP/2 Server Push, and flexible server framework written in Go.
Stars: ✭ 5,373 (+742.16%)
Mutual labels:  productivity
Sandman
An Application Built With Late Night Developers In Mind
Stars: ✭ 505 (-20.85%)
Mutual labels:  productivity
Zsh Iterm Touchbar
Display feedback of terminal in the 🍏 Touchbar
Stars: ✭ 632 (-0.94%)
Mutual labels:  productivity
Pomodoro
simple command line pomodoro app with visualization of statistics
Stars: ✭ 502 (-21.32%)
Mutual labels:  productivity
Tmux Fingers
copy pasting in terminal with vimium/vimperator like hints.
Stars: ✭ 556 (-12.85%)
Mutual labels:  productivity
Pboy
a small .pdf management tool with a command-line UI
Stars: ✭ 662 (+3.76%)
Mutual labels:  productivity
Pomatez
Stay Focused. Take a Break.
Stars: ✭ 631 (-1.1%)
Mutual labels:  productivity
Screenity
The most powerful screen recorder & annotation tool for Chrome 🎥
Stars: ✭ 6,229 (+876.33%)
Mutual labels:  productivity

SwiftBar Logo

SwiftBar

Add custom menu bar programs on macOS in three easy steps:

  • Write a shell script
  • Add it to SwiftBar
  • ... there is no 3rd step!

You can get plugins from awesome BitBar repository, or in SwiftBar itself using the Get Plugins... menu item.

How to get SwiftBar

Download from GitHub Releases

or Install with Homebrew

brew install swiftbar

Runs on macOS Catalina (10.15) and up.

...or build it from source

  • Clone or download a copy of this repository
  • Open SwiftBar/SwiftBar.xcodeproj
  • Press play

Plugin Repository

SwiftBar is bundled with a Plugin Repository. You can access it at Swiftbar → Get Plugins...

A screenshot of SwiftBar’s Plugin Repository

If you want to add\remove plugin or have other questions about repository content please refer to this issue.

Creating Plugins

To add a new plugin to SwiftBar, you need to create an executable script following the required format (see below) and put it into Plugin Folder.

Plugin Folder

With the first launch, Swiftbar will ask you to set the Plugin Folder. SwiftBar will try to import every file in this folder as a plugin.

Important:

  • hidden folders are ignored
  • nested folders are traversed by SwiftBar

Plugin Naming

Plugin files must adopt the following format:

{name}.{time}.{ext}
  • name - Anything you want.
  • time - Refresh interval (optional). Should be a number + duration modifier (see below)
  • ext - File extension.

Duration modifiers:

  • s - seconds, e.g. 1s - refresh every second
  • m - minute, e.g. 10m - refresh every ten minutes
  • h - hour, e.g. 3h - refresh every three hours
  • d - day, e.g. 1d - refresh every day

Example filename: date.1m.sh

Plugin API

Plugin is an executable script in the language of your choice. When SwiftBar detects a new file in Plugin Folder it makes this file executable if needed and runs it.

Script should produce output (STDOUT) in the required format (see next chapter). Script errors should be redirected to STDERR.

Plugin API is adopted from the BitBar, which means that SwiftBar can run any existing BitBar plugin.

Script Output

When parsing plugin output SwiftBar recognizes the following blocks:

  • Header: responsible for what you see in the menu bar
  • Body: responsible for dropdown menu contents

Header is everything before first ---. Each --- after the first one will be interpreted as a menu separator. You have one or more lines in the header.

The simplest plugin looks like this:

echo "This is Menu Title"

If you provide multiple titles, the provided titles will be cycled in the menu bar and shown in the dropdown menu:

echo "This is a primary Menu Title"
echo "This is a secondary Menu Title"
echo "This is a n-th Menu Title"
---
echo "This is not a Menu Title, this will be showed in the drop-down menu only"

Script output for both header and body is split by line (\n). Each line must follow this format:

<Item Title> | [param = ...] 

Where:

  • "Item Title" can be any string, this will be used as a menu item title.
  • [param = ...] is an optional set of parameters\modificators. Each parameter is a key-value separated by =. Use | to separate parameters from the title.

Two-lines Title

Title line in Header section supports multiline, use \\n to sepparate lines, i.e.:

echo "Line 1 \\n Line2 | size=8"

Parameters

Text Formatting: | Parameter | Value | Description | | ------------- | ------------- |------------- | | color | CSS color or HEX, light_color,dark_color | Sets item text color. If only one color is provided, it is used for both light and dark appearance. | | sfcolor | CSS color or HEX, light_color,dark_color | Sets SF Symbol color. If only one color is provided, it is used for both light and dark appearance. | | font | macOS font name | Sets font name to use in item text | | size | Number | Sets item text size | | length| Number | Trims item text to a provided number of characters. The full title will be displayed in a tooltip. | | trim | True | Trims whitespace characters | | ansi | True | Enables support of ANSI color codes. Conflicts with: symbolize | | emojize | False | Disables parsing of GitHub style Emojis (e.g., 🍄 into 🍄). Requires: symbolize=false. | | symbolize | False | Disables parsing of SF Symbols (e.g., "SF Symbols Test :sun.max: :cloud.fill: :gamecontroller.fill: 🔖 :sun.dust:"Screenshot of SF Symbols). Always False on Catalina. |

Visuals: | Parameter | Value | Description | | ------------- | ------------- |------------- | | dropdown | False | Only applicable to items in Header. When set to False, item will not be displayed in dropdown menu, but will be cycled in the menu bar. | | alternate | True | Marks a line as an alternative to the previous one for when the Option key () is pressed in the dropdown.| | image | Image encoded in Base64| Sets an image for item.| | templateImage | Image encoded in Base64| Same as image, but the image is a template image. Template images consist of black and clear colors (and an alpha channel). Template images are not intended to be used as standalone images and are usually mixed with other content to create the desired final appearance.| | sfimage | SFSymbol name| Sets an image for item from SF Symbol. Only available on Big Sur and above.| | checked | True | Sets a checkmark in front of the item.| | tooltip | Text | Sets a tooltip for the item. |

Actions: | Parameter | Value | Description | | ------------- | ------------- |------------- | | refresh | True | Plugin Script will be executed on item click | | href | Absolute URL | Sets an URL to open when item clicked | | bash | Absolute file path | Executable script to run in Shell | | terminal | False | bash script will be run in the background, instead of launching the Terminal | | params | param0=,param1=,param10=... | Parameters for bash script | | shortcut | ++T | Hotkey assigned to item. If item is in header, hotkey will show the menu; otherwise, hotkey will launch associated action. |

Environment Variables

When running a plugin, SwiftBar sets the following environment variables: | Variable | Value | | -------- | ----- | | SWIFTBAR | 1 | | SWIFTBAR_VERSION | The running SwiftBar version number (in x.y.z format) | | SWIFTBAR_BUILD | The running SwiftBar build number (CFBundleVersion) | | SWIFTBAR_PLUGINS_PATH | The path to the Plugin Folder | | SWIFTBAR_PLUGIN_PATH | The path to the running plugin | | OS_APPEARANCE | Current macOS appearance (Light or Dark) | | OS_VERSION_MAJOR | The first part of the macOS version (e.g., 11 for macOS 11.0.1). | | OS_VERSION_MINOR | The second part of the macOS version (e.g., 0 for macOS 11.0.1). | | OS_VERSION_PATCH | The third part of the macOS version (e.g., 1 for macOS 11.0.1). |

Script Metadata

It is recommended to include metadata in plugin script. Metadata is used in the About Plugin screen in SwiftBar. SwiftBar adopts metadata format suggested by BitBar:

# <bitbar.title>Title goes here</bitbar.title>
# <bitbar.version>v1.0</bitbar.version>
# <bitbar.author>Your Name</bitbar.author>
# <bitbar.author.github>your-github-username</bitbar.author.github>
# <bitbar.desc>Short description of what your plugin does.</bitbar.desc>
# <bitbar.image>http://www.hosted-somewhere/pluginimage</bitbar.image>
# <bitbar.dependencies>python,ruby,node</bitbar.dependencies>
# <bitbar.abouturl>http://url-to-about.com/</bitbar.abouturl>
# <bitbar.droptypes>Supported UTI's for dropping things on menu bar</droptypes.abouturl>

Hiding default items

SwiftBar supports these optional metadata flags to hide default menu items:

# <swiftbar.hideAbout>true</swiftbar.hideAbout>
# <swiftbar.hideRunInTerminal>true</swiftbar.hideRunInTerminal>
# <swiftbar.hideLastUpdated>true</swiftbar.hideLastUpdated>
# <swiftbar.hideDisablePlugin>true</swiftbar.hideDisablePlugin>
# <swiftbar.hideSwiftBar>true</swiftbar.hideSwiftBar>

Option+Click will show all items: SwiftBar

Refresh schedule

A special tag can be used as an alternative to refresh interval defined in plugin's name, value adopts Cron syntax:

<swiftbar.schedule>01,16,31,46 * * * *</swiftbar.schedule>

Other Parameters

  • <swiftbar.runInBash>false</swiftbar.runInBash> - doesn't wrap plugins in Bash when running
  • <swiftbar.type>streamable</swiftbar.type> - mark plugin as Streamable
  • <swiftbar.environment>['var1':'default value', 'var2':'default value', ... ]</swiftbar.environment> - this variables will be passed in plugin's environment, in later release SwiftBar will provide a UI to change values for these variables.

Metadata for Binary Plugins

For binary plugins metadata can be added as an extended file attribute:

xattr -w "com.ameba.SwiftBar" "$(cat metadata.txt | base64)" <plugin_file>

URL Scheme

Endpoint Parameter Description Example
refreshallplugins none Force refresh all loaded plugins swiftbar://refreshallplugins
refreshplugin name plugin name Force refresh plugin by name swiftbar://refreshplugin?name=myplugin
refreshplugin index plugin index in menubar, starting from 0 Force refresh plugin by its position in menubar swiftbar://refreshplugin?index=1
addplugin src source URL to plugin file Add plugin to Swiftbar from URL swiftbar://addplugin?src=https://coolplugin
notify plugin plugin name, notification fields title, subtitle, body and disable sound silent=true Show notification swiftbar://notify?plugin=MyPlugin&title=title&subtitle=subtitle&body=body&silent=true

Preferences aka 'defaults'

List of preferences that are not exposed in SwiftBar UI:

  • defaults write com.ameba.SwiftBar DisableBashWrapper -bool YES - doesn't wrap plugins in Bash when running
  • defaults write com.ameba.SwiftBar MakePluginExecutable -bool NO - disables auto chmod +x all files in Plugin Directory
  • defaults write com.ameba.SwiftBar PluginDeveloperMode -bool YES - enables editing in Preferences -> Plugins
  • defaults write com.ameba.SwiftBar StreamablePluginDebugOutput -bool YES - enables debug output for Stramable plugins, Swiftbar will expose the stream data in Console.App

Logs and Error

If plugin fails to run SwiftBar will show ⚠️ in the menu bar, you can see details by clicking on Error in dropdown menu. Use macOS Console.app to view SwiftBar logs.

Acknowledgements

SwiftBar uses these open source libraries:

To freeze and secure dependencies these libraries are forked to SwiftBar organization.

More Apps

If you enjoy SwiftBar you may like these as well:

  • TRex - Easy to use text extraction tool for macOS
  • Esse - Swiss army knife of text transformation for iOS and macOS
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].