1.0.0, with readme
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -103,7 +103,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "swayout"
|
name = "swayout"
|
||||||
version = "0.1.0"
|
version = "1.0.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "swayout"
|
name = "swayout"
|
||||||
version = "0.1.0"
|
version = "1.0.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
description = "A tool to configure sway outputs"
|
||||||
|
authors = ["Stephen Byrne"]
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
|||||||
83
README.md
Normal file
83
README.md
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# swayout
|
||||||
|
|
||||||
|
`swayout` is a utility to configure [sway](https://swaywm.org/) outputs.
|
||||||
|
|
||||||
|
[kanshi](https://sr.ht/~emersion/kanshi/) and [way-displays](https://github.com/alex-courtis/way-displays) certainly
|
||||||
|
do a better job of this. I wrote this because I wanted a project to learn Rust.
|
||||||
|
|
||||||
|
Monitors and layouts are configured in a toml file
|
||||||
|
(`~/.config/swayout/config.toml`).
|
||||||
|
|
||||||
|
Example `config.toml`:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
# This is my laptop's built-in screen.
|
||||||
|
[monitors.laptop]
|
||||||
|
make = "Unknown"
|
||||||
|
model = "0x403D"
|
||||||
|
serial = "0x00000000"
|
||||||
|
|
||||||
|
# I usually have it hooked up to this monitor, which is the top one on my desk.
|
||||||
|
[monitors.top]
|
||||||
|
make = "Dell Inc."
|
||||||
|
model = "DELL U2415"
|
||||||
|
serial = "CFV9N99T0Y0U"
|
||||||
|
|
||||||
|
# Sometimes I hook it up to these monitors, which are left and right.
|
||||||
|
# The left is rotated 270 degrees.
|
||||||
|
[monitors.left]
|
||||||
|
make = "Goldstar Company Ltd"
|
||||||
|
model = "LG HDR 4K"
|
||||||
|
serial = "0x0000B9C0"
|
||||||
|
[monitors.right]
|
||||||
|
make = "Goldstar Company Ltd"
|
||||||
|
model = "LG HDR 4K"
|
||||||
|
serial = "0x0000B9BF"
|
||||||
|
|
||||||
|
# When I have "left" and "right" hooked up, I want this layout.
|
||||||
|
[layouts.two4k.left]
|
||||||
|
mode = "3840x2160"
|
||||||
|
scale = "1.5"
|
||||||
|
x = 0
|
||||||
|
y = 0
|
||||||
|
transform = "270"
|
||||||
|
[layouts.two4k.right]
|
||||||
|
mode = "3840x2160"
|
||||||
|
scale = "1.5"
|
||||||
|
x = 1440
|
||||||
|
y = 1120
|
||||||
|
transform = "normal"
|
||||||
|
```
|
||||||
|
|
||||||
|
When you run `swayout`, it prints all available layout names to standard output, one per line.
|
||||||
|
Printed layouts include:
|
||||||
|
|
||||||
|
* All layouts defined in `config.toml` for which the monitors are currently available. E.g.: `two4k`.
|
||||||
|
* All monitors defined in `config.toml` that are currently available. E.g.: `laptop`, `left`, `right`.
|
||||||
|
* All available outputs that are not matched by a configured monitor. E.g.: `HDMI-2`.
|
||||||
|
|
||||||
|
If you pass a layout name (or monitor name, or output name) as a command line argument to `swayout`,
|
||||||
|
it calls `swaymsg` to configure that layout.
|
||||||
|
If a monitor name or output name is passed, only that monitor or output is enabled, and the output's defaults are used.
|
||||||
|
|
||||||
|
This behavior is useful in conjunction with [tofi](https://github.com/philj56/tofi).
|
||||||
|
My sway configuration has:
|
||||||
|
|
||||||
|
```
|
||||||
|
set $select_layout swayout | tofi | xargs swayout
|
||||||
|
bindsym $mod+Shift+m exec $select_layout
|
||||||
|
```
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
Things I might do someday:
|
||||||
|
|
||||||
|
### Automatic
|
||||||
|
|
||||||
|
Add a `automatic` option to layouts and an `--automatic` flag to `swayout`, and have it automatically enable the
|
||||||
|
first layout with `automatic=true` for which all outputs are available.
|
||||||
|
|
||||||
|
This could be run by `bindswitch lid:toggle exec swayout --automatic`.
|
||||||
|
|
||||||
|
How to call when an output is connected or disconnected?
|
||||||
|
Wayland events via [wayland_client](https://docs.rs/wayland-client/latest/wayland_client/index.html)?
|
||||||
Reference in New Issue
Block a user