i3 config generation tool
Project description
# i3configger Generates an i3 config from a set of .conf files in ~/.i3/config.d. Does some nifty conditional integration of files on demand and variable resolution (also for i3status configs).
Why?
To be able to split my long and messy config file in many short, aptly named, messy config files
To be able to assign variables to variables (set $var $otherVar)
To be able to also use variables in i3status configurations
To be able to change the config dynamically without having to manually make changes to the config file
Getting started
Simple
Cut your config file into chewable chunks with the extension .conf and put them in the directory ~/.i3/config.d.
Run i3configger.
i3configger.json and .state.json are created in config.d
A new config file is generated instead of your old config.
A backup of the last config is kept with suffix .bak
i3configger.json can be used to do configuration of the status bars.
.state.json remembers the state of your current settings
Watch files in the background
If you are experimenting with the config and want it automatically updated on change:
run it in the foreground:
$ i3configger --watch
run it as a daemon:
$ i3configger --daemon
stop the daemon:
$ i3configger --kill
Diving a bit deeper
I use this to generate my own i3 config. Here are the config partials and settings: .i3/config.d, from which config and all i3status.*conf files are built.
With my config, the call:
$ i3configger select scheme solarized-dark
will integrate scheme.solarized-dark.conf in the build and exclude all other scheme.*.conf files.
$ i3configger select-next scheme will switch to the next theme
This is persisted in .state.json
If I want to get my dock out of the way:
$ i3configger set mode hide
So in short: select helps switching between partial files and set is assigning new values to arbitrary variables that I have set in the configuration.
Config partials that follow the naming scheme <key>.<value>.conf are only rendered into the config if explicitly set via configuration or a message from the command line (which then will be persisted).
Features
build main config and one or several i3status configs from the same sources
variables are handled slightly more intelligently than i3 does it (variables assigned to other variables are resolved)
end of line comments are possible (removed at build time)
variables in i3status configs are also resolved (set anywhere in the sources)
reload or restart i3 when a change has been done (using i3-msg)
notify when new config has been created and activated (using notify-send)
simple way to render partials based on selectors (see example above)
simple way to communicate settings to renderer ($i3configger_key value)
build config as one shot script or watch for changes (foreground and daemon)
If i3 -C fails with the newly rendered config, the old config will be kept, no harm done
Installation
Note the code is Python 3.6 only. I want to play with the new toys :)
i3configger is released on the Python Package Index. The standard installation method is:
$ pip install i3configger
Resources
I3 official
Other Tools
… from the i3wm ecosystem
I did not try them all, but stumbled over them while checking if somebody else solved my problem already.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.