Skip to content
minus edited this page Jan 10, 2021 · 27 revisions

Get workspace dimensions

swaymsg -t get_outputs | jq -r '.[] | select(.focused) | (.current_mode.width | tostring) + "x" + (.current_mode.height | tostring)'

Start a program on a specific workspace

swaymsg 'workspace test; exec gnome-calculator; workspace back_and_forth'

This works as long as sway can match the PID of a new window to the PID of the exec'd command (or one of its children).

Upload screenshot and copy url to clipboard

bindsym $mod+Shift+Print exec slurp | grim -g - - | curl --form 'file=@-' http://0x0.st | wl-copy && swaynag -m "screenshot uploaded & url copied to clipboard"

HTML color picker

Bind this to a key, select a point on the screen and get a HTML color code for that point copied to the clipboard. Requires ImageMagick, grim and slurp to be installed.

grim -g "$(slurp -p)" -t ppm - | convert - -format '%[pixel:p{0,0}]' txt:- | tail -n 1 | cut -d ' ' -f 4 | wl-copy

If you don't use a color picker frequently enough to reminder the keybinding, you can create a simple .desktop file for it in ~/.local/share/applications/ and then launch it searching for the name with a desktop file launcher like Rofi. Here's an example .desktop file:

Name=HTML Color Picker for Sway
Comment=Copies to Clipboard
Keywords=
Exec=/home/yourusername/.local/bin/html-color-picker-for-sway
Terminal=false
Type=Application
StartupNotify=true

Put the command above in ~/.local/bin/html-color-picker-for-sway and add a shebang line as the first line: #!/usr/bin/env bash

Tamefox - suspend Firefox when loses focus

#!/bin/sh
firefox=
swaymsg -m -t subscribe '["window"]' | \
        jq -r --unbuffered '.change +" "+  .container.app_id + " " + (.container.pid | tostring)' | \
        grep --line-buffered '^focus ' | \
        while read -r x app pid; do
                #echo "# x=$x app=$app pid=$pid" >&2
                if [ "$app" = 'firefox' ]; then
                        echo "CONT $pid" >&2
                        firefox=$pid
                        kill -CONT $pid
                        pkill -CONT -P $pid
                elif [ -n "$firefox" ]; then
                        echo "STOP $firefox" >&2
                        pkill -STOP -P $firefox
                        kill -STOP $firefox
                fi
        done

save it as $HOME/bin/tamefox and add this to your .config/sway/config:

exec [ -x $HOME/bin/tamefox ] && $HOME/bin/tamefox