glimmer 0.0.6

A tool for decorating i3/Sway focused windows
# glimmer

## What

A tool for decorating i3 windows when they get focused, written in Rust.

https://user-images.githubusercontent.com/4857535/124782646-61e90a80-df12-11eb-8930-a321ecffbee1.mp4

## Why

When using i3-gaps I ran into the following problems.

- Glitches when using regular borders and titlebars that showed up in the background (as described [here]https://github.com/Airblader/i3/issues/190), which as far as I know haven't been solved yet.
- The above meant usually relying on transparency or dimming to have a 'highlighted' state, which for me at least beats the purpose of having all your windows in a tiled fashion. To get the highlighted effect you have to lower the opacity or dim it to the point it's too hard to read.
- Even if borders and titlebars _did_ work properly. They just don't gel very well with the `a e s t h e t i c` anyway.

Eventually I gave up and continued using vanilla i3 instead, but had this idea floating around. It focuses on those shortcomings. Does it solve them? Not too sure myself, but it was a fun experiment.

## Requirements

- i3 (Note that Sway is not currently supported)
- A compositor, since it literally draws windows on top of your windows.
- GTK needs to be on your system to build this application, follow the instructions [here]https://crates.io/crates/gtk

For building:

- Rust v1.5x, currently only tested with **v1.53.0**

```
cargo build && cargo run
```

## Installation

#### Pre built binaries

You can download a pre built-binary from the [releases page](https://github.com/moustacheful/glimmer/releases)

#### Cargo

Remember to read the requirements above!

```
cargo install glimmer
```

## Running and customizing

```
glimmer --styles=./path/to/your/theme.css
```

The css file dictates how the window decorations look like, and they have 2 elements to customize, `#box` which represents the boundaries of the window and `#label`, which has the window title. Additionally, there's an `.animate` class applied to the parent which can help triggering animations for both the box and label.

There are some examples of this in the `themes` directory. Feel free to contribute more!

#### Note that the CSS is not full spec, and you can see the supported properties by GTK [here]https://developer.gnome.org/gtk3/stable/chap-css-properties.html

A simple example for this, animated using transitions:

```css
#box {
  background: rgba(255, 200, 0, 0.2);
  transition: background 2s ease, margin 0.2s ease;
  margin: 10px;
}

.animate #box {
  background: transparent;
  margin: 0px;
}

#label {
  opacity: 0; /* Hide the label */
}
```

This will produce the following

https://user-images.githubusercontent.com/4857535/124782792-8349f680-df12-11eb-8231-4a356d33f066.mp4