diff --git a/.config/eww/scripts/launch.py b/.config/eww/scripts/launch.py deleted file mode 100755 index 2afaa87..0000000 --- a/.config/eww/scripts/launch.py +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/env python3 - -import subprocess -import json -from string import Template -import os - - -def panic(err): - import traceback - print(traceback.format_exc()) - print(f"error {err}") - os._exit(1) - - -class Monitor: - id: int - name: str - width: int - height: int - def __init__(self, id: int, name: str, width: int, height: int): - self.id = id - self.name = name - self.width = width - self.height = height - - -def get_monitors() -> list[Monitor]: - ws = subprocess.run( - ["hyprctl", "monitors", "-j"], - capture_output=True - ) - _monitors = json.loads(ws.stdout) - - ret = [] - for m in _monitors: - ret.append(Monitor( - id=m["id"], - name=m["name"], - width=m["width"], - height=m["height"], - )) - return ret - - -def temlate(source: str, monitor: Monitor, bar_name: str, home: str, base_dir: str) -> str: - height = int(monitor.height * .02) - return Template(source) \ - .safe_substitute({ - "monitor": monitor.id, - "monitor_name": monitor.name, - "bar_name": bar_name, - "home": home, - "base_dir": base_dir, - "height": height, - }) - - -def generate_bar_config(monitor: Monitor, bar_name: str, home: str, base_dir: str, source_dir: str, dest_dir: str): - items = os.listdir(source_dir) - for item in items: - if os.path.isdir(f"{source_dir}/{item}"): - os.makedirs(f"{dest_dir}/{item}") - generate_bar_config(monitor, bar_name, home, base_dir, f"{source_dir}/{item}", f"{dest_dir}/{item}") - elif os.path.isfile(f"{source_dir}/{item}"): - data = "" - try: - with open(f"{source_dir}/{item}", "r") as fp: - data = fp.read() - except Exception as e: - panic(e) - - data = temlate( - data, - monitor, - bar_name, - home, - base_dir - ) - - try: - with open(f"{dest_dir}/{item}", "w") as fp: - fp.write(data) - except Exception as e: - panic(e) - - -def launch_bar(monitor: Monitor, wayland_display: str): - bar_name = f"bar-{wayland_display}-{monitor.id}" - dir = f"/tmp/vbar/{wayland_display}/{monitor.id}" - - home = os.getenv("HOME", default=None) - if home == None: - panic("HOME environment variable is unset") - - try: - os.makedirs(dir) - except FileExistsError: - try: - subprocess.run(["rm", "-rf", dir]) - os.makedirs(dir) - except Exception as e: - panic(e) - - config = generate_bar_config(monitor, bar_name, home, dir, f"{home}/.config/eww/templates/bar", dir) - - try: - subprocess.run(["eww", "-c", dir, "reload"]) - subprocess.run(["eww", "-c", dir, "open", bar_name]) - except Exception as e: - panic(e) - - -def main(): - wayland_display = os.getenv("WAYLAND_DISPLAY", default=None) - if wayland_display is None: - os.exit(1) - monitors = get_monitors() - for monitor in monitors: - launch_bar( - monitor=monitor, - wayland_display=wayland_display, - ) - - -if __name__ == '__main__': - main() - diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf index 8312fdd..78826f1 100644 --- a/.config/hypr/hyprland.conf +++ b/.config/hypr/hyprland.conf @@ -21,7 +21,7 @@ monitor=eDP-1,1366x768@60,3840x1392,1 # See https://wiki.hyprland.org/Configuring/Keywords/ for more # Execute your favorite apps at launch -exec-once = ~/.config/eww/scripts/launch.py +exec-once = ~/.config/eww/scripts/launch.rs exec-once = wl-paste --watch cliphist store exec-once = hyprpaper