mirror of
https://github.imc.re/void-land/hyprland-void-dots
synced 2025-04-26 17:03:43 +02:00
123 lines
3.1 KiB
Python
Executable file
123 lines
3.1 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
from iconfetch import fetch
|
|
import subprocess
|
|
import json
|
|
import os
|
|
import i3ipc
|
|
|
|
eww_bin= [subprocess.getoutput("which eww"), "-c", f"{os.getcwd()}"]
|
|
|
|
def recurse(apps, workspace, output):
|
|
for l in workspace.descendants():
|
|
if not l.pid or not l.app_id:
|
|
continue
|
|
app_id = l.app_id.lower()
|
|
|
|
if app_id == "com.github.xournalpp.xournalpp":
|
|
app_id = "xournalpp"
|
|
|
|
rect = {
|
|
"x": 0,
|
|
"y": 0,
|
|
"width": 0,
|
|
"height": 0
|
|
}
|
|
|
|
rect["x"] = l.rect.x - output.rect.x
|
|
rect["y"] = l.rect.y - output.rect.y
|
|
|
|
rect["width"] = l.rect.width * 1920/output.rect.width
|
|
rect["height"] = l.rect.height * 1080/output.rect.height
|
|
rect["x"] *= 1920/output.rect.width
|
|
rect["y"] *= 1080/output.rect.height
|
|
|
|
apps.append({
|
|
"app_id": app_id,
|
|
"name": l.name,
|
|
"pid": l.pid,
|
|
"focused": l.focused,
|
|
"rect": rect,
|
|
"path": fetch(app_id) or fetch("unknown")
|
|
})
|
|
|
|
def update(i3, e):
|
|
|
|
root = i3.get_tree()
|
|
|
|
apps = []
|
|
windows = [[] for _ in range(10)]
|
|
|
|
for output in root.nodes:
|
|
if output.name == "__i3":
|
|
continue
|
|
|
|
for workspace in output.nodes:
|
|
found = []
|
|
recurse(found, workspace, output)
|
|
|
|
apps.extend(found)
|
|
# if output["name"] == "eDP-1":
|
|
# windows[int(workspace["name"])-1] = found
|
|
windows[int(workspace.name)-1] = found
|
|
|
|
# change this yourself lol
|
|
appsdict = {
|
|
"firefox": [],
|
|
"thunar": [],
|
|
"xournalpp": [],
|
|
"discord": [],
|
|
"foot": []
|
|
}
|
|
# translate to launch cmd
|
|
appsexec = {
|
|
"discord": "discord-wayland",
|
|
"xournalpp": "com.github.xournalpp.xournalpp",
|
|
"foot": "org.codeberg.dnkl.foot",
|
|
}
|
|
|
|
appsjson = []
|
|
|
|
for app in apps:
|
|
a = app.copy()
|
|
name = a["app_id"]
|
|
|
|
if name not in appsdict:
|
|
appsdict[name] = []
|
|
appsdict[name].append(a)
|
|
|
|
for key, value in appsdict.items():
|
|
if len(value) == 0:
|
|
appsjson.append(dict(
|
|
path = fetch(key),
|
|
name = key,
|
|
app_id = key if key not in appsexec else appsexec[key],
|
|
pid = None,
|
|
focused = []
|
|
))
|
|
|
|
else:
|
|
f = []
|
|
for v in value:
|
|
f.append(v["focused"])
|
|
|
|
appsjson.append(dict(
|
|
path = value[0]["path"],
|
|
name = value[0]["name"],
|
|
app_id = value[0]["app_id"].lower(),
|
|
pid = value[0]["pid"],
|
|
focused = f
|
|
))
|
|
|
|
|
|
subprocess.run(eww_bin + ["update", f"windows={json.dumps(windows)}"])
|
|
subprocess.run(eww_bin + ["update", f"tasksjson={json.dumps(appsjson)}"])
|
|
|
|
def main():
|
|
i3 = i3ipc.Connection(auto_reconnect=True)
|
|
update(i3, None)
|
|
i3.on(i3ipc.Event.WINDOW, update)
|
|
i3.main()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|