wl-distore

Crates.iowl-distore
lib.rswl-distore
version0.1.0
sourcesrc
created_at2024-11-16 08:09:14.581243
updated_at2024-11-16 08:09:14.581243
descriptionA program that manages your display configuration on wl-roots compositors automatically in the background.
homepage
repositoryhttps://github.com/andriyDev/wl-distore
max_upload_size
id1450231
size87,685
(andriyDev)

documentation

README

wl-distore

A program that manages your display configuration on wl-roots compositors automatically in the background.

Overview

On wl-roots compositors, you are able to configure your displays (e.g., setting the resolution of displays, moving displays around). Some tools like wdisplays help with configuring your displays, but wl-roots compositors don't save this configuration by default. The changes to your displays may only persist until the compositor restarts.

That's where wl-distore comes in. wl-distore listens to changes to your display configuration and saves the configuration. When a monitor is plugged in or out, the saved configuration is applied. This allows you to modify your configuration using whatever tool you want (like wdisplays), and have that configuration automatically persist!

Getting Started

The first step is installation. This requires Rust, which can either be installed through your package manager, or through https://rustup.rs. You can then run:

cargo install wl-distore

After that, you can run it with:

wl-distore

Then configure your displays however you like! The next time wl-distore detects those sets of monitors, that configuration will be applied (assuming wl-distore is running).

Launching wl-distore automatically

wl-distore needs to be running to save and apply configurations. Each compositor will have a different way of achieving this. For example, using Sway, one way to achieve this is by adding the following to your config:

exec $HOME/.cargo/bin/wl-distore

Alternatively, you can use a systemd user service. Sway documents this workflow here. An example of a service file is:

[Unit]
Description = "wl-distore"
PartOf=graphical-session.target

[Service]
Type=simple
Environment=RUST_LOG=info
ExecStart=%h/.cargo/bin/wl-distore

[Install]
WantedBy=sway-session.target

Configuration

The default configuration file lives at ~/.config/wl-distore/config.toml. Use the --config flag to change this. The config file options include:

  • layouts: The file path to where layouts are saved. Defaults to ~/.local/state/wl-distore/layouts.json.
  • apply_command: The shell command to run after a layout is applied.

Alternatives

kanshi

kanshi is a similar tool, where you define your desired display configurations in a config file and these configurations are applied whenever a match is found. This means that you have a "canonical" source for your display configurations.

The disadvantage to this workflow is it's all manual! If you configure your displays through a tool like wdisplays, your configurations won't automatically persist and you must figure out how to match that configuration in the config file.

In contrast, wl-distore automatically persists everything. The cost is less control - any change to the display configuration is persisted. In addition, the lack of a config file for layouts makes it difficult to specify explicit layouts.

Why is it called wl-distore?

Mostly because I'm bad at naming things. It's meant to be (W)ay(l)and (di)splay (store).

License

License under either of

at your option.

Contribution

Any contribution submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Commit count: 52

cargo fmt