shikane
A dynamic output configuration tool that automatically detects and configures connected outputs based on a set of profiles.
Each profile specifies a set of outputs with additional parameters (e.g., mode). A profile will be applied automatically if all specified outputs and modes can be perfectly matched to the currently connected outputs and their capabilities.
This is a Wayland equivalent for tools like autorandr. It aims to fully replace kanshi and add new features. shikane works with Wayland compositors supporting version 3 of the wlr-output-management protocol (e.g., compositors using wlroots v0.16).
Features
feature | kanshi | shikane |
---|---|---|
configure output properties: resolution, refresh rate, position, scaling, transformation | yes | yes |
configure adaptive sync | no | yes |
execute commands | yes | yes |
output names are supplied to executed commands | no | yes |
full cardinality matching algorithm | no | yes |
regex based output matching | no | yes |
state machine defined execution | no | yes |
one-shot mode | no | yes |
Installation
Via your $AURhelper
from the AUR:
Via cargo from crates.io (without man pages):
Documentation
Documentation is provided as man pages:
Usage
- Create your configuration file.
See configuration for a short overview
or have a look at the man page
man 5 shikane
for more detailed information. - Start shikane.
Building
Dependencies:
- a rust toolchain >=1.60
- pandoc (for building the man pages)
Building shikane:
Building the man pages:
Configuration
shikane uses the TOML file format for its configuration file
and contains an array of profiles. Each profile is a table containing an
array of output tables. The configuration file should be placed at
$XDG_CONFIG_HOME/shikane/config.toml
.
[[]]
= "dual_foo"
= ["notify-send shikane \"Profile $SHIKANE_PROFILE_NAME has been applied\""]
[[]]
= "Company Foo"
= true
= { = 1920, = 1080, = 50 }
= { = 0, = 0 }
= 1.3
[[]]
= "/HDMI-[ABC]-[1-9]/"
= true
= ["echo This is output $SHIKANE_OUTPUT_NAME"]
= { = 2560, = 1440, = 75 }
= { = 1920, = 0 }
= "270"
Acknowledgements
- kanshi being the inspiration and motivation
- wayland-rs providing the wayland bindings
License
MIT