No description
Find a file
2023-11-16 15:20:54 +01:00
pkgbuild pkgbuild: set an obviously dummy version number 2022-11-29 10:16:51 +01:00
src Add WorkspaceGroup{Next,Prev}Output command 2023-11-16 15:20:54 +01:00
.gitignore First 2020-12-23 18:29:31 +01:00
.gitlab-ci.yml Add .gitlab-ci.yml 2021-10-16 13:35:14 +02:00
Cargo.lock Release 2.0.0 2023-03-03 17:13:46 +01:00
Cargo.toml Release 2.0.0 2023-03-03 17:13:46 +01:00
LICENSE Add license: MIT 2021-09-06 10:48:00 +02:00
README.md Add WorkspaceGroup{Next,Prev}Output command 2023-11-16 15:20:54 +01:00

Swaysome

Description

This binary helps you configure sway to work a bit more like AwesomeWM. This currently means workspaces that are name-spaced on a per-screen basis.
example: with workspace 11 on the first screen, and workspace 21 on the second screen, typing the swaysome shortcut to get workspace 1 would lead you to workspace 11 if your focus is on the first screen, and workspace 21 is the focus is on the second one.

swaysome also supports what we call "workspace groups". These are groups of workspaces sharing the same tens number and tied to an output.
By default, swaysome init will create a workspace group per active output, but you may create other groups while working.

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> 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.

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

swaysome should be compatible with sworkstyle.

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.

# Change focus between workspaces
unbindcode $mod+1
unbindcode $mod+2
unbindcode $mod+3
unbindcode $mod+4
unbindcode $mod+5
unbindcode $mod+6
unbindcode $mod+7
unbindcode $mod+8
unbindcode $mod+9
unbindcode $mod+0
bindcode $mod+1 exec "swaysome focus 1"
bindcode $mod+2 exec "swaysome focus 2"
bindcode $mod+3 exec "swaysome focus 3"
bindcode $mod+4 exec "swaysome focus 4"
bindcode $mod+5 exec "swaysome focus 5"
bindcode $mod+6 exec "swaysome focus 6"
bindcode $mod+7 exec "swaysome focus 7"
bindcode $mod+8 exec "swaysome focus 8"
bindcode $mod+9 exec "swaysome focus 9"
bindcode $mod+0 exec "swaysome focus 0"

# Move containers between workspaces
unbindcode $mod+Shift+1
unbindcode $mod+Shift+2
unbindcode $mod+Shift+3
unbindcode $mod+Shift+4
unbindcode $mod+Shift+5
unbindcode $mod+Shift+6
unbindcode $mod+Shift+7
unbindcode $mod+Shift+8
unbindcode $mod+Shift+9
unbindcode $mod+Shift+0
bindcode $mod+Shift+1 exec "swaysome move 1"
bindcode $mod+Shift+2 exec "swaysome move 2"
bindcode $mod+Shift+3 exec "swaysome move 3"
bindcode $mod+Shift+4 exec "swaysome move 4"
bindcode $mod+Shift+5 exec "swaysome move 5"
bindcode $mod+Shift+6 exec "swaysome move 6"
bindcode $mod+Shift+7 exec "swaysome move 7"
bindcode $mod+Shift+8 exec "swaysome move 8"
bindcode $mod+Shift+9 exec "swaysome move 9"
bindcode $mod+Shift+0 exec "swaysome move 0"

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

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

# Move focused container to next output
bindcode $mod+o exec "swaysome next-output"

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

# Move focused workspace group to next output
bindcode $mod+Alt+o exec "swaysome workspace-group-next-output"
# Move focused workspace group to previous output
bindcode $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

  • move [name]: move the focused container to [name] on the same group
  • move-to-group [id]: move the focused container to the same relative workspace on the [id] workspace group
  • next-output: move the focused container to the next output
  • prev-output: move the focused container to the previous output
  • focus [name]: change focus to [name] on the same group
  • focus-all-outputs [name]: change all outputs focus to [name]
  • focus-group [id]: change focus to group [id]
  • next-group: change focus to the next workspace group
  • previous-group: change focus to the previous workspace group
  • init [name]: cycle all outputs to create a default workspace with name [name]
  • rearrange-workspaces Rearrange already opened workspaces to the correct outputs, useful when plugging or unplugging screens

Breaking changes

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