Sway and distrobox scripts

This commit is contained in:
John Mertz 2023-01-17 11:18:30 -05:00
parent 4c5cad9458
commit ff4f9b43dc
6 changed files with 132 additions and 3 deletions

24
distrobox/debian12/wallpaper.pl Executable file
View File

@ -0,0 +1,24 @@
#!/bin/sh
# distrobox_binary
# name: debian12
if [ ! -f /run/.containerenv ] && [ ! -f /.dockerenv ]; then
command="/usr/bin/distrobox-enter -n debian12 -- /var/home/jpm/scripts/sway/wallpaper.pl --path=/var/home/jpm/wallpapers -d HDMI-A-1 "
for arg in "$@"; do
if echo "${arg}" | grep -Eq "'|\""; then
command="${command} \
$(echo "${arg}" | sed 's|\\|\\\\|g' |
sed 's| |\\ |g' |
sed 's|\$|\\\$|g' |
sed "s|'|\\\'|g" |
sed 's|"|\\\"|g')"
elif echo "${arg}" | grep -q "'"; then
command="${command} \"${arg}\""
else
command="${command} '${arg}'"
fi
done
eval ${command}
else
/var/home/jpm/scripts/sway/wallpaper.pl /var/home/jpm/scripts/sway/wallpaper.pl --path=/var/home/jpm/wallpapers -d HDMI-A-1 "$@"
fi

82
sway/arrange.pl Executable file
View File

@ -0,0 +1,82 @@
#!/usr/bin/env perl
use strict;
use warnings;
use AnyEvent::Sway;
our $s = AnyEvent::Sway->new();
sub switch
{
my $workspace = shift;
return defined($s->message(0,"workspace $workspace")->recv->[0]->{'success'});
}
sub move
{
my $output = shift;
return defined($s->message(0,"move workspace to output $output")->recv->[0]->{'success'});
}
sub assign
{
my $workspace = shift;
my $output = shift || die('No output argument given');
return 0 unless (switch($workspace));
return 0 unless (move($output));
return 1;
}
my $workspaces = {
'0' => [ 'DP-1', 'eDP-1' ], # HUD
'1' => [ 'DP-1', 'eDP-1' ], # Chat (mattermost, rocket.chat)
'2' => [ 'DP-1', 'eDP-1' ], # Mail (thunderbird)
'3' => [ 'DP-1', 'eDP-1' ], # Secondary browser (ungoogled chromium)
'4' => [ 'DP-1', 'eDP-1' ], # Git (gittyup)
'5' => [ 'HDMI-A-1', 'eDP-1' ], # TBD
'6' => [ 'HDMI-A-1', 'eDP-1' ], # Terminals (gnome-terminal) - not auto-assigned since they are used everywhere
'7' => [ 'HDMI-A-1', 'eDP-1' ], # Browser (firefox)
'8' => [ 'HDMI-A-1', 'eDP-1' ], # IDE (neovide, vscode)
'9' => [ 'HDMI-A-1', 'eDP-1' ], # Music (WIP)
# Miscellaneous Extras
'c0' => [ 'DP-1', 'eDP-1' ],
'c1' => [ 'DP-1', 'eDP-1' ],
'c2' => [ 'DP-1', 'eDP-1' ],
'c3' => [ 'DP-1', 'eDP-1' ],
'c4' => [ 'DP-1', 'eDP-1' ],
'c5' => [ 'HDMI-A-1', 'eDP-1' ],
'c6' => [ 'HDMI-A-1', 'eDP-1' ],
'c7' => [ 'HDMI-A-1', 'eDP-1' ],
'c8' => [ 'HDMI-A-1', 'eDP-1' ],
'c9' => [ 'HDMI-A-1', 'eDP-1' ],
};
my $outputs = ($s->get_outputs->recv())[0];
my $focused;
my %attached;
foreach my $o (@{$outputs}) {
$focused = $o->{'current_workspace'} if ($o->{'focused'});
if ($o->{'active'}) {
$attached{$o->{'name'}} = $o->{'current_workspace'};
}
}
foreach my $w (keys(%{$workspaces})) {
foreach my $o (@{$workspaces->{$w}}) {
if (defined($attached{$o})) {
last() if assign($w, $o);
print STDERR ("Failed to assign $w to $o\n")
}
}
}
# Favour for which workspace should be focused at the end should follow this logic:
# - Focused window should return to being focused, regardless of the display.
# - Any workspaces which were currently visible at the start should be made current again (multiple could be on the same output, pick random)
# - Any output which is has neither of the above should just be left with the last switch
# Laziest just to switch to those in reverse order, even if it means a few extra switches
foreach (keys(%attached)) {
switch($attached{$_});
}
switch($focused);

View File

@ -76,7 +76,7 @@ my %configs = (
'rotate' => 90,
'scale' => 2,
'waybar' => 'top',
'fallback' => '#fefefe',
'fallback' => '#010101',
},
'TV' => {
'on' => 1,

8
sway/sway-alt-tab.sh Normal file
View File

@ -0,0 +1,8 @@
#!/bin/bash
swaymsg -t get_tree |
jq -r '.nodes[].nodes[] | if .nodes then [recurse(.nodes[])] else [] end + .floating_nodes | .[] | select(.nodes==[]) | ((.id | tostring) + " " + .name)' |
wofi --show dmenu -c .dotfiles/wofi/sidebar | {
read -r id name
swaymsg "[con_id=$id]" focus
}

View File

@ -0,0 +1,15 @@
[Unit]
Description=Sway window transparency daemon
PartOf=graphical-session.target
After=sway.service
[Service]
Type=simple
ExecStart=/var/home/jpm/scripts/distrobox/debian12/sway-transparency.sh
Restart=unless-stopped
Requires=dbus.service
After=dbus.service
TimeoutSec=5
[Install]
WantedBy=default.target

View File

@ -5,9 +5,9 @@ Description=Rotate through cropped wallpapers for %u
Type=forking
#PIDFile=/var/home/%u/.spool/wallpaper.pid
WorkingDirectory=/var/home/%u/.spool
ExecStart=/usr/bin/distrobox enter debian12 -- "$HOME/scripts/sway/wallpaper.pl -d --path=/home/jpm/wallpapers `cat $HOME/.spool/wallpaper_outputs`"
#ExecStart=/var/home/%u/scripts/sway/wallpaper.pl -d --path=/home/jpm/wallpapers
ExecStart=/var/home/%u/scripts/distrobox/debian12/wallpaper.pl
Restart=always
TimeoutSec=5
[Install]
WantedBy=graphical.target