SILO

A launcher menu with explosive potential (for Wayland or X11)

Silo is a highly customizable and scriptable launcher menu for Wayland or X11. Silo's functionality revolves around it's concept of prefixes. Prefixes are simply a user defined set of characters or strings that, when present at the start of the text in the bar, change Silo's behavior. Each prefix can provide it's own completion options and can result in different behavior when an entry is confirmed.

Example scripts for a variety of prefixes are provided in the examples directory. These include prefixes for opening web pages with tab-completion suggestions from a list of preferred pages or "quickmarks", for running commands in a terminal with completion suggestions of available binaries in your $PATH, for executing .desktop files, for doing quick calculations, and even a simple quick spell-checker you can use if you're stuck on a word.



Building

Silo can be built with the included makefile. You can specify nowayland as a build target to create an X11 only binary that will not require any wayland-specific dependencies to be installed. I periodically test silo on X11, but currently use it primarily under wayland. If you run X11, please be liberal with bug reports (let me know what you see).

Silo can also be installed with the makefiles install directive, but most users may prefer to use install-extra to get an extra dose of useful scripts installed as described below.



Example scripts

There are three collections of example scripts in the Silo source code repository. When installed these are placed under $(PREFIX)/share/doc and must be copied to $XDG_CONFIG_DIR/silo/.

Base collection

The base collection contains scripts most likely to be useful to all users and are the only scripts installed by default.

prefix completer runner description
dmenu-comp N/A mimics the functionality of dmenu (reading from stdin)
! bin-comp bin-run find / launch executable programs / scripts (much like dmenu_run)
> web-comp web-run web shortcuts
@ term-comp term-run find / launch executable programs / scripts in a terminal

Extra collection

The extra collection contains useful scripts that many users may want to add to their installtion but are not essential for basic functionality and are not installed by default, but can be added with the install-extra directive in the Makefile.

prefix completer runner description
? man-comp man-run find /show man pages
= bc-comp N/A calculates result of mathematical expressions as you type
< desktop-comp desktop-run find / launch applications from .desktop files
% aspell-comp N/A provides suggested spelling corrections as you type

Crazy collection

The crazy collection is just that: these are examples that show some of the more creative things that can be done with silo, but either would appeal only to a small subset of users and / or are likely to require modification / customization. These are not installed by any Makefile directive but may be copied manually as desired.

prefix completer runner description
+ web-new-comp web-new-run web shortcuts opened in a new browser window (weaver)
weaver: weaver-cmd-comp weaver-cmd-run send weaver commands
exit sway? sway-exit-comp sway-exit-run replacement for swaynag
--- wttr-comp N/A provides brief weather info from wttr.in
[ status-comp N/A show a temporary status line


Script meta-data

Each script can include several meta-data values that impact how Silo interacts with the script. All such values are provided in comment lines matching the following regex pattern:

#\s+@([A-Za-z]+)\s+(\S.*)

The first parenthesized capture is the key and the second is the value. Each script must define at least two keys prefix and type. Although prefix is a single character in most example scripts, it can be any string or sequence of characters (see the crazy collection for examples of this). The value of type must start with either comp or run to defined the script as a completion suggestion provider or a launcher / runner.

The following meta-data values are available:

key default description
@prefix defines the string prefix the script applies to
@type a string starting with either "comp" or "run"
@about description only, no impact on functionality
@depends description only, no impact on functionality
@stdin false does script require stdin to remain open
@stdout false does script require stdin to remain open
@stderr false does script require stdin to remain open
@trim true remove whitespace from the start of text

Silo can be launched with inital text specified on the command line. While this can be any text at all, the primary purpose is to allow for key bindings to run Silo with a prefix already active. For example, with the example scripts, a key binding that runs silo > will allow the user to type an entry to be opened in a web browser.



Comand line arguments

Silo's font, colors, position, etc are specified via the following command line options.

Option Description
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
-v, --version Displays version information.
--font Font family
--size Font size
--weight Font weight
--italic Font italics
--stretch Font width / stretch in percent of original
--center Center the bar; overrides any -x setting
-x Horizontal bar position; negative values offset from the right side of the screen
-y Vertical bar position; negative values offset from the bottom of the screen
-w Bar width (0 fills to screen width)
--bpx Window border width in pixels
--xpad Left / right padding in pixels
--ypad Top / bottom padding in pixels
--background Background color (all colors are RRGGBB, AARRGGBB, #RRGGBB, or #AARRGGBB)
--foreground Foreground color
--prefix Prefix highlight color
--border Window border color
--completion Completion suggestion color

A single argument can also be provided to specify an initial text to be entered in the input bar.

Arguments Description
intial-text Initial text to pre-fill input; can be used to specify a prefix


Bugs

Please report bugs, feature requests, or other inquiries to the ticket system on the project webpage.