summaryrefslogtreecommitdiff
path: root/sway
diff options
context:
space:
mode:
Diffstat (limited to 'sway')
-rw-r--r--sway/config1
-rwxr-xr-xsway/inactive-windows-transparency.py69
2 files changed, 70 insertions, 0 deletions
diff --git a/sway/config b/sway/config
index b1e68bb..4a6496b 100644
--- a/sway/config
+++ b/sway/config
@@ -201,6 +201,7 @@ bindsym $mod+Shift+r mode "resize"
include /etc/sway/config.d/*
+exec inactive-windows-transparency.py --opacity 0.8
exec wlsunset -l 39 -L -76
exec fnott
exec pipewire
diff --git a/sway/inactive-windows-transparency.py b/sway/inactive-windows-transparency.py
new file mode 100755
index 0000000..b81134d
--- /dev/null
+++ b/sway/inactive-windows-transparency.py
@@ -0,0 +1,69 @@
+#!/usr/bin/python
+
+# This script requires i3ipc-python package (install it from a system package manager
+# or pip).
+# It makes inactive windows transparent. Use `transparency_val` variable to control
+# transparency strength in range of 0…1 or use the command line argument -o.
+
+import argparse
+import i3ipc
+import signal
+import sys
+from functools import partial
+
+def on_window_focus(inactive_opacity, ipc, event):
+ global prev_focused
+ global prev_workspace
+
+ focused_workspace = ipc.get_tree().find_focused()
+
+ if focused_workspace == None:
+ return
+
+ focused = event.container
+ workspace = focused_workspace.workspace().num
+
+ if focused.id != prev_focused.id: # https://github.com/swaywm/sway/issues/2859
+ focused.command("opacity 1")
+ if workspace == prev_workspace:
+ prev_focused.command("opacity " + inactive_opacity)
+ prev_focused = focused
+ prev_workspace = workspace
+
+
+def remove_opacity(ipc):
+ for workspace in ipc.get_tree().workspaces():
+ for w in workspace:
+ w.command("opacity 1")
+ ipc.main_quit()
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ transparency_val = "0.80"
+
+ parser = argparse.ArgumentParser(
+ description="This script allows you to set the transparency of unfocused windows in sway."
+ )
+ parser.add_argument(
+ "--opacity",
+ "-o",
+ type=str,
+ default=transparency_val,
+ help="set opacity value in range 0...1",
+ )
+ args = parser.parse_args()
+
+ ipc = i3ipc.Connection()
+ prev_focused = None
+ prev_workspace = ipc.get_tree().find_focused().workspace().num
+
+ for window in ipc.get_tree():
+ if window.focused:
+ prev_focused = window
+ else:
+ window.command("opacity " + args.opacity)
+ for sig in [signal.SIGINT, signal.SIGTERM]:
+ signal.signal(sig, lambda signal, frame: remove_opacity(ipc))
+ ipc.on("window::focus", partial(on_window_focus, args.opacity))
+ ipc.main() \ No newline at end of file