Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/okraits/j4-make-config

Universal theme switcher and config generator for the i3 wm
https://github.com/okraits/j4-make-config

Last synced: about 2 months ago
JSON representation

Universal theme switcher and config generator for the i3 wm

Awesome Lists containing this project

README

        

## j4-make-config (a.k.a. i3-theme)

**NOTICE: this repository is archived because i3 now has the ability to read configuration split into several files (see the include directive). Thus I don't use and maintain this project anymore.**

#### Universal theme switcher and config generator for the i3 wm

### Overview

The purpose of this script for the i3 windowmanager is to easily switch
between several sets of configuration options ("themes"), but also to
easily put together a complete config from several different configuration
parts, depending on the environment you are currently working in.

Themes can be used to set:

- borderstyle
- window and i3bar colors
- window and i3bar font
- layout mode
- i3bar position
- desktop (root window) background
- keybinding to call dmenu with matching colors
- and much more - any i3 configuration option can be used!

A collection of theme files is distributed together with
j4-make-config to give the user a variety of themes to choose from.

By utilizing rofi, j4-make-config provides a graphical menu to select a theme ("interactive mode"):

rofi.png

j4-make-config can also put together a complete config from several different
configuration parts, depending on the environment you are currently working in.
So you can do things like:

- have different layouts and font sizes for different screen sizes
- have one i3bar section for your laptop and two i3bar sections for your dual monitor setup at home
- have different keybindings depending on the keyboard you are using
- and much more - any i3 configuration option can be used!

j4-make-config stores the most recently used arguments in */home/yourUserName/.j4-make-config.rc*,
so you can easily refresh your i3 config by running *j4-make-config* without arguments
or by running *source /home/yourUserName/.j4-make-config.rc*. If you pulled in
changes of parts of your config or themes, your i3 config will get updated
automatically.

### Screenshots

Everybody loves screenshots, so here they are. Click the image to view it in fullsize.

screenshots.png

### Requirements

j4-make-config has the following requirements:

- Python 2 or 3
- rofi (optional - to choose a theme in interactive mode)
- xsetroot (optional for setting the root window background)

### Usage

To create an i3 configuration which includes a specific theme, run:

j4-make-config

To create an i3 configuration without including a theme, run:

j4-make-config none

To let j4-make-config reload i3 after creating an i3 configuration, run:

j4-make-config -r |none

To use the interactive mode to choose a theme (reloads i3, requires rofi), run:

j4-make-config -i

To append additional configuration from files in the i3 config directory, run:

j4-make-config -a -a |none

To append additional configuration and reload i3 after creating the config file, run:

j4-make-config -r -a |none

To run j4-make-config with the most recently used arguments:

j4-make-config

### Installation

Place *j4-make-config* anywhere in your $PATH, for example in
*/home/yourUserName/bin*, and ensure that it is executable. Move the
directory named *themes* to the directory where your i3 config file is.

After that, you should prepare your i3 config file for *j4-make-config*.
If you already have window color settings in your i3 config file, you
should completely replace them with a marker which gets replaced with the
window configuration included in the chosen theme file. We demonstrate
this with the default color settings (normally they are not explicitly set
in the i3 configuration file):

Replace the default colors

# class border backgr. text indicator
client.focused #4c7899 #285577 #ffffff #2e9ef4
client.focused_inactive #333333 #5f676a #ffffff #484e50
client.unfocused #333333 #222222 #888888 #292d2e
client.urgent #2f343a #900000 #ffffff #900000

with the following marker:

# $i3-theme-window

If you didn't configure custom window colors yet, you can simply add the
marker *# $i3-theme-window* at the end of your i3 config file.
Please note that the marker begins with the character '#' because it is
a comment in the i3 configuration.

You can apply the same procedure to prepare your bar section for
*j4-make-config*. If we take the default bar colors for example (normally
they are not explicitly set in the i3 config file), your bar section
should look like this:

bar {
status_command i3status
colors {
background #000000
statusline #ffffff
separator #666666

focused_workspace #4c7899 #285577 #ffffff
active_workspace #333333 #5f676a #ffffff
inactive_workspace #333333 #222222 #888888
urgent_workspace #2f343a #900000 #ffffff
}
}

Replace the whole colors section with the following marker:

# $i3-theme-bar

If you didn't configure custom bar colors yet, you can simply add the
marker *# $i3-theme-bar* at the bottom of your bar section.

As a last step, you should rename your *config* file to *config.base*.
Now you are prepared for running *j4-make-config* for the first time.

**Hint:**

You can also add those markers to the additional configuration
files you want to append. They will also get replaced with the
configuration options in the theme file.

For example, you can have different i3bar sections in different additional
configuration files and still have them themed by adding those markers.

**Generating the config file:**

To understand what will happen, we take a look at the structure of a
theme file:

# $i3-theme-window
...
some configuration options
...

# $i3-theme-bar
...
some configuration options
...

Here's what j4-make-config will do:

- read the contents of *config.base*, the additional configuration file(s)
and the theme file you provided as commandline arguments
- concatenate the contents of *config.base* and the additional configuration
file(s)
- replace the marker *# $i3-theme-window* with the configuration options
after this marker in the theme file
- replace the marker *# $i3-theme-bar* with the configuration options
after this marker in the theme file
- leave *config.base* untouched, instead it will write the resulting
configuration to a new i3 *config* file

### License

This software is released under the terms of the
GNU General Public License v2:

[http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt](http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt)

The theme files are either ports of themes from other window managers,
assembled from i3 configurations found on the net or original themes
done by various people. I do not have any copyright for them except when
stated differently.

### Authorship, feedback, questions and contributions

Please feel free to open issues on github for bugreports, feature requests
and new themes. You can also contact me in *#j4tools* and *#i3* on the
freenode IRC network.

### Todo list

These are things which are planned to be done, at some point
in the future.

- use argparse
- have more than 2 markers, that means: exchange each marker
in the config.base file with the corresponding marker in
the theme file (or in a host-specific config file)
- optional: j4-make-config starts i3 after it generated a
temporary config file
- put every theme in a separate directory - this would help to
- provide variations of themes
- enable users to make modifications of themes
- provide additional files like licences or README files
- add mechanism to color dmenu output in themes and use a specific font
- add themeing and additional config parts to i3status config