| pkgbuild | ||
| src | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Swaysome
An awesome way to manage your workspaces on sway.
Description
This binary helps you configure sway to work a bit more like AwesomeWM. 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
- workspace
- workspace group 1:
output-2:- workspace group 2:
- workspace
21: IDE for first project - workspace
22: browser for first project - workspace
23: terminals for first project
- workspace
- workspace group 3:
- workspace
31: IDE for second project - workspace
32: browser for second project - workspace
33: terminals for second project
- workspace
- workspace group 2:
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. If this is broken, please report a bug.
Installation
Arch Linux: Found on the AUR as 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 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-warnsetting 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_outputandprev_outputhave been changed tonext-outputandprev-output.