Quick Reference
Formatting
Indentation
Bunch Lines start at the left column unless they’re in an indented logic block. Indentation within a logic block must be consistent with other lines at the same level of the block.
Messages
if social
Slack
Discord
end
Line Breaks
Bunch Lines should be a single line, but can be split by ending the line with a backslash and continuing immediately on the next line. A backslash followed by a blank line will not be joined.
(display bunch-internal/first-bunch.html \
500x600 level:floating)
Comments
Comments can be block (/*...*/
), lines (# Comment
), or inline at the end of a line (Preview // inline comment
). Comment markers must be followed by a space.
Bunch Syntax
Bunch Line | Action |
---|---|
Apps | |
App Name | Launch app |
%App Name | Launch when opening the Bunch, but ignore when closing |
App Name ~5 | Launch app after 5 second delay |
- XX | close all windows of preceding app |
- File | open a file in preceding app (can be repeated) |
- 'spotlight search' | Run a spotlight search and open the results in preceding app |
- #tag1 #tag2 | Search for macOS tags |
- {@~w} | send a key command to the preceding app |
- [string] | type a string in the preceding app |
!AppName | Quit app |
!!AppName | Launch app when closing bunch (double negative) |
!!!AppName | Quit app when closing bunch (triple negative) |
@AppName | Focus app (run at end of bunch to hide all other apps) |
AppName_ | Hide an app |
AppName^ | Force app to activate |
| AppName/Command | Force launching in parallel even when execution sequence is sequential |
Snippets | |
< my.snippet | An external file to be included in the bunch |
- KEY=value | A variable to define for use in the snippet as ${KEY} |
< my.snippet#id | Reference a section of a snippet file |
< my.snippet#id ?"Run this Snippet?" | Allow interactive confirmation of a snippet |
URLS | |
http://url | Open URL in browser |
urlhandler:// | Open a system url handler |
Bunch Commands | |
(command) | Run a Bunch command |
(dark mode [on|off]) | dark mode on/off |
(do not disturb [on|off]) | do not disturb on/off |
([hide|show] dock) | hide/show dock |
(dock [left|right|bottom]) | dock left/right/bottom |
([hide|show] desktop) | hide/show desktop |
(wallpaper [path(s)]) | change wallpaper |
(audio [input|output] device_name) | audio input/output |
(audio [input|output] volume [0-100]) | audio volume |
(audio [input|output] [mute|unmute]) | mute/unmute audio |
AppleScripts | |
* AppleScript command | Execute AppleScript |
Automator Workflows | |
& Automator Workflow | Run an Automator Workflow |
- key=value | variable to pass to preceding workflow (can be repeated) |
Shell Scripts/Commands | |
$ script_or_cmd [args] | Shell script to execute |
- KEY=value | Environment variable to export for preceding shell script (can be repeated) |
Frontmatter
You can control some aspects of your Bunch using Frontmatter, including the title and icons it uses in the menu. See the Frontmatter docs for details.
Key | Effect |
---|---|
close after | Automatically close after an interval (e.g. 1h ) |
close at | Set a time to close daily (e.g. 5pm ) |
close on
| Set a day and time to close weekly (e.g. Mon 5pm )
Multiple day/times can be combined with commas |
from file | A file path to load additional key/value pairs |
from script | A shell script path that returns YAML |
ignore | Boolean determines menu display of a Bunch |
ignore if | Logic to determine if Bunch displays in menu |
ignore unless | Negative version of ignore if
|
ignores state |
true allows open/close when already open/closed |
menu divider | Add a menu divider before or after
|
menu order | Menu order, 0 –99 at beginning, >100 at end |
only opens |
true has the same effect as toggles: false
|
open at | Set a time to open this bunch daily (e.g. 6:30am ) |
open every | Repeat open at intervals (e.g. 30m ) |
open on
| Set a day and time to open weekly (e.g. Tue 8am )
Multiple day/times can be combined with commas |
quits apps |
always close apps open in other Bunches |
quit browsers |
true quit browsers from browser:url on close |
run after | Comma-separated paths to scripts to run after opening |
run after close | Comma-separated paths to scripts to run after closing |
run before | Comma-separated paths to scripts to run before opening |
run before close | Comma-separated paths to scripts to run before closing |
schedule if | Only schedule on specific Mac(s) (UUID1) |
schedule unless | Negative version of schedule if
|
sequence |
parallel or sequential , determines execution order |
shortcut | Keyboard shortcut for opening the Bunch (e.g. @a ) |
single bunch mode |
ignore prevents closing |
startup
|
true , false , or ask to open on launch
Can also be a UUID1 run only on a specific Mac |
tags | Add tags to the Bunch for organization and batching |
title | Set the menu display title. Emojis OK. |
title prefix
| Set a prefix that goes before the menu title.
Prefixes set by folder/tag frontmatter are combined |
toggles |
false prevents toggling this Bunch open/closed |
URL Handler
See documentation for details.
URL | Method |
---|---|
x-bunch://open?bunch=[BUNCH NAME] | Open a Bunch |
x-bunch://[BUNCH NAME] | Open shorthand |
x-bunch://close?bunch=[BUNCH NAME] | Close a Bunch |
x-bunch://close/[BUNCH NAME] | Close shorthand |
x-bunch://toggle?bunch=[BUNCH NAME] | Toggle a Bunch |
x-bunch://toggle/[BUNCH NAME] | Toggle shorthand |
x-bunch://raw?txt=[BUNCH TEXT] | Run raw text as a Bunch |
x-bunch://snippet?file=[SNIPPET PATH]&fragment=[FRAGMENT]&foo=bar | Run a snippet with fragment and variables |