diff --git a/linux_home/.config/sway/config b/linux_home/.config/sway/config index 8019fd2..e4f1861 100644 --- a/linux_home/.config/sway/config +++ b/linux_home/.config/sway/config @@ -17,6 +17,9 @@ exec swayidle -w \ timeout 300 'swaylock -f -c 000000' \ timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \ before-sleep 'swaylock -f -c 000000' + # /home/larssonmartin1998-asahi/.config/sway/swayidle_inhibit.sh + +exec_always --no-startup-id ~/.config/sway/dim_inactive.windows.py ### Key bindings # Start a terminal diff --git a/linux_home/.config/sway/dim_inactive.windows.py b/linux_home/.config/sway/dim_inactive.windows.py new file mode 100755 index 0000000..c1a92c9 --- /dev/null +++ b/linux_home/.config/sway/dim_inactive.windows.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +# From +# https://www.reddit.com/r/swaywm/comments/c4zb8l/dim_unfocused_windows/es0dg11/. +# This script is a modified version of the one from the link above with +# interrupt handler. + +# This script requires i3ipc-python package (install it from a system package +# manager or pip). +# It makes inactive windows transparent. Use `TRANSPARENCY_VALUE` variable to +# control the transparency strength in range of 0…1; 0 is fully transparent. +# The most-recently active window on each monitor stays opaque, not just the +# active window. + +import signal +import sys +from typing import Optional + +import i3ipc + +TRANSPARENCY_VALUE: str = '0.85' +ipc = i3ipc.Connection() +g_prev_focused: Optional[i3ipc.con.Con] = None +g_prev_workspace: int = ipc.get_tree().find_focused().workspace().num + +for window in ipc.get_tree(): + if window.focused: + g_prev_focused = window + else: + window.command('opacity ' + TRANSPARENCY_VALUE) + + +def signal_handler(sig, frame): + for window in ipc.get_tree(): + window.command('opacity 1.0') + sys.exit(0) + + +def on_window_focus(ipc: i3ipc.connection.Connection, + event: i3ipc.events.WindowEvent): + global g_prev_focused + global g_prev_workspace + + focused = event.container + workspace = ipc.get_tree().find_focused().workspace().num + + # https://github.com/swaywm/sway/issues/2859 + if focused.id != g_prev_focused.id: + focused.command('opacity 1.0') + if workspace == g_prev_workspace: + g_prev_focused.command('opacity ' + TRANSPARENCY_VALUE) + g_prev_focused = focused + g_prev_workspace = workspace + + +signal.signal(signal.SIGINT, signal_handler) +signal.signal(signal.SIGTERM, signal_handler) + +ipc.on('window::focus', on_window_focus) +# Blocking call. +ipc.main() +