Raven is a rust-based theme manager for linux desktops. It works by defining multiple different 'options', like a polybar configuration, or a wallpaper, and then loads them into sequence when asked to. Even if you're not using a full-on DE, and instead opting for the more minimal WM like i3 or bspwm, you can still get a coherent theme that affects pretty much everything you do. There's a complete list of options available in the README of raven.


Raven has a few different moving parts.

  • Ravenserver is an online server that people can upload themes to using the command-line tool and later download them. The main instance is hosted here, so go check it out! More themes are always appreciated.

  • Raven is the command-line tool that you use to manage and load the themes, but it is just an interface to

  • Ravenlib, which handles all of the heavy-lifting with themes

  • Graven is an alpha-stage GUI version of raven, which I am very open to feedback on.

#Installation and Usage
#Installation and Dependencies

All you technically require is cargo to be installed. You can install from crates.io by running cargo install raventhemer, or by building manually:


git clone https://git.sr.ht/~nicohman/raven && cd raven

cargo install --path . --force

You can also download a binary built from the latest git commit at my website.

The following packages are required for their relevant options:

  • New option suggestions are very welcome!

raven help for a list of available commands:

nicohman <nicohman@demenses.net>
A theme manager and switcher for desktop linux

    raven <SUBCOMMAND>

    -h, --help       Prints help information
    -V, --version    Prints version information

    add        Add option to current theme
    cycle      Control cycle daemon
    delete     Delete a theme
    edit       Edit theme
    help       Prints this message or the help of the given subcommand(s)
    info       Print info about the theme being currently edited
    install    Install a theme from ThemeHub repo
    load       Load a complete theme
    manage     Manage online themes
    menu       Show theme menu
    modify     Open the currently edited themes's option in $EDITOR
    new        Create a new theme
    refresh    Load last loaded theme
    rm         Remove an option from edited theme

A main config file is placed in ~/.config/raven/config.json, which has the following options:

polybar: Array of strings, which decideds what bars are run with polybar. The size of the array should be the same as your monitor number
monitors : The number of monitors currently in use
menu_command: A command that, when raven menu is run, will be piped a list of theme names through STDIN and expects a theme name from STDOUT
last: The last theme raven loaded
editing: The theme you are currently editing
host: The URL of the ravenserver host to use. By default, [https://demenses.net](https://demenses.net)

To configure a theme, start off by creating it with raven new [theme]. You'll automatically start editing that theme. Run raven add [option] [file] to add a specific option. This will copy the indicated file to raven's registry, and run/reload/copy it when the edited theme is loaded or refreshed. Run raven rm [option] to remove an option from a theme. Available options are:

  • poly (Polybar)
  • i3 [base_i3] (i3 config)
  • xres (Xresources)
  • xres_m ( Xresources, to be merged)
  • pywal (an image file that will be used as the pywal base)
  • wall (Feh wallpaper)
  • ncmpcpp (ncmpcpp config file)
  • termite (Termite config)
  • script (An arbitrary executable file that will be run when this theme is loaded)
  • bspwm [base_bspwm] (bspwm config)
  • rofi (A rofi theme that will be copied to ~/.config/rofi/theme.rasi)
  • ranger (rc.conf)
  • lemonbar (A shell script that should spawn your lemonbar)
  • openbox [base_rc.xml] (rc.xml)
  • dunst [base_dunst] (dunstrc)
  • st_tmtheme
  • st_scs
  • st_subltheme
  • vscode (Plain text containing the name of an already installed VSCode theme.)

base_ files allow splitting the config from the cosmetics on the options with [base_] For example if you place an i3 config named base_i3 in ~/.config/raven, the contents of i3 for a theme will be appended to it instead of being run on their own. This allows you to have a central config for keyboard shortcuts, and have cosmetics only be stored in the theme.

The lemonbar option should be a shell script that runs lemonbar(s). They will automatically be killed just like polybars when the theme is changed or reloaded.

#Polybar bar names

As many polybars as you have monitors will be started. The names of the bars themselves should be configured in config.json. The default is ["main", "other"]. If you're sharing your themes with others, it is recommended that you leave the polybar monitor name blank, so that it automatically adapts to other monitor names.

#Cycle themes

With the cycle command you can control a daemon that will automatically cycle through all of your configured themes. You need to edit ~/.config/raven/time and place the number of seconds there should be between each cycle into that file in order to use it.

#Sublime Text 3

Plain text containing sublt/<filename>.<extension> (which you must create on your theme folder) or the name of an already installed theme (e.g DA.sublime-theme)

Extensions: st_tmtheme (.tmTheme), st_scs (.sublime-color-scheme) and st_subltheme (.sublime-theme)

#Specific Documentation
  • Ravenserver has specific API docs available here, if you want to develop your own client for it or something similar.

  • Docs.rs has documentation for ravenlib, which is useful for either your own projects or contributing.


I'm very happen to take issues and pull requests. Please submit patches to the mailing list, and bug reports to the issue tracker. I will still accept either one on github, however.

About this wiki

commit e48bb3a456eb674f958fa602a00aa2e2aba7c3db
Author: nicohman <None>
Date:   2019-06-30T00:15:53+00:00

Update ravenserver docs for ravenserver-rs
Clone this wiki
https://git.sr.ht/~nicohman/raven (read-only)
git@git.sr.ht:~nicohman/raven (read/write)