swaysome 2.1.0

swaysome provides an awesome way to manage your multiple outputs with the sway windows manager
# Swaysome

An awesome way to manage your workspaces on [sway](https://swaywm.org/).

Join us on [#swaysome:matrix.hya.sk](https://matrix.to/#/%23swaysome:matrix.hya.sk)!


## Description

This binary helps you configure sway to work a bit more like [AwesomeWM](https://awesomewm.org/). This means that
**workspaces** are namespaced in what are called **workspace groups**, and **workspace groups** can be moved around the
differents outputs easily.

For example, with workspace `11` on the first output, and workspace `21` on the second output, triggering the `swaysome focus 1`
shortcut to get workspace `1` would lead you to workspace `11` if your focus is on the first output, and workspace `21`
is the focus is on the second one.

By default, `swaysome init` will create a **workspace group** per active output, but you may create other groups while
working, by either triggering `swaysome focus-group <new-number>` and opening a new window, or sending an existing
window to it first with `swaysome move-to-group <new-number>`.

Here is a common use-case for this:

* `output-1`:
  * **workspace group** 1:
    * workspace `11`: chats
    * workspace `12`: emails
* `output-2`:
  * **workspace group** 2:
    * workspace `21`: IDE for first project
    * workspace `22`: browser for first project
    * workspace `23`: terminals for first project
  * **workspace group** 3:
    * workspace `31`: IDE for second project
    * workspace `32`: browser for second project
    * workspace `33`: terminals for second project

That way, when `output-2` is focused on **workspace group** 2, be it workspace `21` or `22`, the quick `$mod+<number>`
(bound to `swaysome focus <number>`) shortcut won't leave **workspace group** 2, allowing you to open multiple projects
in parallel without the hassle of manually remembering how to namespace them.

In that situation, suppose you plug in a new output, `output-3`, you may then want to focus **workspace group 3**
to send it to `output-3`: this is simply done by typing the shortcuts `$mod+Alt+3` (`swaysome focus-group 3`) then
`$mod+Alt+o` (`swaysome workspace-group-next-output`).


`swaysome` may also work with i3, but this is untested.

`swaysome` should be compatible with [sworkstyle](https://lib.rs/crates/sworkstyle). If this is broken, please report a bug.


## Installation


Arch Linux: Found on the AUR as [swaysome-git](https://aur.archlinux.org/packages/swaysome-git).

If you have Rust installed, then you can just `cargo install swaysome` and you're good to go.

Otherwise, you may grab a [pre-built
binary](https://gitlab.com/hyask/swaysome/-/jobs/artifacts/master/raw/target/release/swaysome?job=build:cargo) from the
CI and put it in your `$PATH`.

**WARNING**: please double-check that your `swaysome` binary is in `sway`'s `$PATH`. Depending on your setup, the
`$PATH` you have in your shell may not be the same as `sway`'s, and if `swaysome` can't be called by `sway`, the
symptoms will only look like non-functional shortcuts.  
If you're in this situation, a quick workaround is to call `swaysome` with its full absolute path from `sway`'s config
to check that everything works before fixing your `$PATH` issue.


## Usage

Then create the file (and the directory if needed) `~/.config/sway/config.d/swaysome.conf` and paste this inside:
> Use (un)bindcode or (un)bindsym, depending on what you used in your main sway config file.  
> The `--no-warn` setting is only added to shortcuts that exist in the default config. You may want to add or remove
> that flag on some bindings depending on your config.
```
# Change focus between workspaces
bindsym --no-warn $mod+1 exec "swaysome focus 1"
bindsym --no-warn $mod+2 exec "swaysome focus 2"
bindsym --no-warn $mod+3 exec "swaysome focus 3"
bindsym --no-warn $mod+4 exec "swaysome focus 4"
bindsym --no-warn $mod+5 exec "swaysome focus 5"
bindsym --no-warn $mod+6 exec "swaysome focus 6"
bindsym --no-warn $mod+7 exec "swaysome focus 7"
bindsym --no-warn $mod+8 exec "swaysome focus 8"
bindsym --no-warn $mod+9 exec "swaysome focus 9"
bindsym --no-warn $mod+0 exec "swaysome focus 0"

# Move containers between workspaces
bindsym --no-warn $mod+Shift+1 exec "swaysome move 1"
bindsym --no-warn $mod+Shift+2 exec "swaysome move 2"
bindsym --no-warn $mod+Shift+3 exec "swaysome move 3"
bindsym --no-warn $mod+Shift+4 exec "swaysome move 4"
bindsym --no-warn $mod+Shift+5 exec "swaysome move 5"
bindsym --no-warn $mod+Shift+6 exec "swaysome move 6"
bindsym --no-warn $mod+Shift+7 exec "swaysome move 7"
bindsym --no-warn $mod+Shift+8 exec "swaysome move 8"
bindsym --no-warn $mod+Shift+9 exec "swaysome move 9"
bindsym --no-warn $mod+Shift+0 exec "swaysome move 0"

# Focus workspace groups
bindsym $mod+Alt+1 exec "swaysome focus-group 1"
bindsym $mod+Alt+2 exec "swaysome focus-group 2"
bindsym $mod+Alt+3 exec "swaysome focus-group 3"
bindsym $mod+Alt+4 exec "swaysome focus-group 4"
bindsym $mod+Alt+5 exec "swaysome focus-group 5"
bindsym $mod+Alt+6 exec "swaysome focus-group 6"
bindsym $mod+Alt+7 exec "swaysome focus-group 7"
bindsym $mod+Alt+8 exec "swaysome focus-group 8"
bindsym $mod+Alt+9 exec "swaysome focus-group 9"
bindsym $mod+Alt+0 exec "swaysome focus-group 0"

# Move containers to other workspace groups
bindsym $mod+Alt+Shift+1 exec "swaysome move-to-group 1"
bindsym $mod+Alt+Shift+2 exec "swaysome move-to-group 2"
bindsym $mod+Alt+Shift+3 exec "swaysome move-to-group 3"
bindsym $mod+Alt+Shift+4 exec "swaysome move-to-group 4"
bindsym $mod+Alt+Shift+5 exec "swaysome move-to-group 5"
bindsym $mod+Alt+Shift+6 exec "swaysome move-to-group 6"
bindsym $mod+Alt+Shift+7 exec "swaysome move-to-group 7"
bindsym $mod+Alt+Shift+8 exec "swaysome move-to-group 8"
bindsym $mod+Alt+Shift+9 exec "swaysome move-to-group 9"
bindsym $mod+Alt+Shift+0 exec "swaysome move-to-group 0"

# Move focused container to next output
bindsym $mod+o exec "swaysome next-output"
# Move focused container to previous output
bindsym $mod+Shift+o exec "swaysome prev-output"

# Move focused workspace group to next output
bindsym $mod+Alt+o exec "swaysome workspace-group-next-output"
# Move focused workspace group to previous output
bindsym $mod+Alt+Shift+o exec "swaysome workspace-group-prev-output"

# Init workspaces for every screen
exec "swaysome init 1"
```

Finally append your `sway` configuration with this:
```
include ~/.config/sway/config.d/*.conf
```

You should end-up with workspaces from `1` to `0`, prefixed with a screen index,
giving you workspace `11` on the first screen, and workspace `21` on the second
one, both accessible with shortcut `$mod+1` when focused on the right output.

The `init` command simply walks through every screen to initialize a prefixed
workspace. It does it backwards so that you end-up focused on the first screen,
as usual.


## Exhaustive swaysome commands list

Just run `swaysome --help` for the most up to date list of command and documentation.


## Breaking changes

* Starting with 2.0, `next_output` and `prev_output` have been changed to `next-output` and `prev-output`.