Crates.io | wl-distore |
lib.rs | wl-distore |
version | 0.1.0 |
source | src |
created_at | 2024-11-16 08:09:14.581243 |
updated_at | 2024-11-16 08:09:14.581243 |
description | A program that manages your display configuration on wl-roots compositors automatically in the background. |
homepage | |
repository | https://github.com/andriyDev/wl-distore |
max_upload_size | |
id | 1450231 |
size | 87,685 |
A program that manages your display configuration on wl-roots compositors automatically in the background.
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!
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).
wl-distore
automaticallywl-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
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.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.
Mostly because I'm bad at naming things. It's meant to be (W)ay(l)and (di)splay (store).
License under either of
at your option.
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.