/systranything

Create a system tray menu from a YAML file with shell commands

Primary LanguageHaskellMIT LicenseMIT

Systranything

nix haskell-ci

systranything lets you put anything in your system tray. It is supported by all destop environment that implements the StatusNotifierHost specification from freedesktop.org (KDE, XFCE, ...).

It uses a YAML file which describes the icon to put in the system tray along a context menu and callbacks to be executed in a shell.

The menu can contain labels, separators, submenus, checkboxes and radiobuttons. Scroll events can be triggered on the main icon.

Among other things, I use it to change my VPN settings. The icon shows its current status:

demo

What you can do with it:

  • a custom launcher menu
  • a volume icon
  • a menu to turn on or off your VPN
  • a menu to toggle dual monitor setups
  • anything that requires a status icon and scriptable actions

See the example file to get started.

Run it with:

$ systranything -f ./example.yaml

It has a verbose mode which can be turned on with -v. It writes on stdout the commands executed along their outputs.

Hacking

The project can be built with nix.

Install with:

$ nix profile install

Build with:

$ nix build

The binary is then created in ./result/bin/systranything

Hack with:

$ nix develop

You will be dropped in a shell with all the needed tools in scope: cabal to build the project and haskell-language-server for a better developer experience.