diff --git a/bar/main.py b/bar/main.py index 5849389..79df1cf 100644 --- a/bar/main.py +++ b/bar/main.py @@ -1,5 +1,3 @@ -# fabric bar.py example -# https://github.com/Fabric-Development/fabric/blob/rewrite/examples/bar/bar.py from loguru import logger from fabric import Application @@ -12,39 +10,44 @@ from fabric.utils import ( get_relative_path, ) from .modules.bar import StatusBar +from .modules.window_fuzzy import FuzzyWindowFinder + + +tray = SystemTray(name="system-tray", spacing=4) +river = get_river_connection() + +dummy = Window(visible=False) +finder = FuzzyWindowFinder() + +bar_windows = [] + +app = Application("bar", dummy, finder) +app.set_stylesheet_from_file(get_relative_path("styles/main.css")) + + +def spawn_bars(): + logger.info("[Bar] Spawning bars after river ready") + outputs = river.outputs + + if not outputs: + logger.warning("[Bar] No outputs found — skipping bar spawn") + return + + output_ids = sorted(outputs.keys()) + + for i, output_id in enumerate(output_ids): + bar = StatusBar(display=output_id, tray=tray if i == 0 else None, monitor=i) + bar_windows.append(bar) + + return False def main(): - tray = SystemTray(name="system-tray", spacing=4) - river = get_river_connection() - - dummy = Window(visible=False) - - bar_windows = [] - - def spawn_bars(): - logger.info("[Bar] Spawning bars after river ready") - outputs = river.outputs - - if not outputs: - logger.warning("[Bar] No outputs found — skipping bar spawn") - return - - output_ids = sorted(outputs.keys()) - - for i, output_id in enumerate(output_ids): - bar = StatusBar(display=output_id, tray=tray if i == 0 else None, monitor=i) - bar_windows.append(bar) - - return False - if river.ready: spawn_bars() else: river.connect("notify::ready", lambda sender, pspec: spawn_bars()) - app = Application("bar", dummy) - app.set_stylesheet_from_file(get_relative_path("styles/main.css")) app.run() diff --git a/bar/modules/window_fuzzy.py b/bar/modules/window_fuzzy.py new file mode 100644 index 0000000..254d0ce --- /dev/null +++ b/bar/modules/window_fuzzy.py @@ -0,0 +1,24 @@ +from fabric.widgets.wayland import WaylandWindow as Window +from fabric.widgets.box import Box +from fabric.widgets.label import Label + + +class FuzzyWindowFinder(Window): + def __init__( + self, + monitor: int = 1, + ): + super().__init__( + name="finder", + layer="overlay", + anchor="center", + margin="0px 0px -2px 0px", + exclusivity="auto", + visible=False, + all_visible=False, + monitor=monitor, + ) + + self.children = Box( + name="list-windows", children=[Label(name="one-window", markup="Hallo lol")] + ) diff --git a/nix/derivation.nix b/nix/derivation.nix index dc3359a..f369c8b 100644 --- a/nix/derivation.nix +++ b/nix/derivation.nix @@ -49,6 +49,20 @@ python3Packages.buildPythonApplication { doCheck = false; dontWrapGApps = true; + installPhase = '' + runHook preInstall + + mkdir -p $out/${python3Packages.python.sitePackages} + cp -r bar $out/${python3Packages.python.sitePackages}/ + + # If you have any scripts to install + mkdir -p $out/bin + cp scripts/launcher.py $out/bin/bar + chmod +x $out/bin/bar + + runHook postInstall + ''; + preFixup = '' makeWrapperArgs+=("''${gappsWrapperArgs[@]}") ''; diff --git a/pyproject.toml b/pyproject.toml index bd69cff..c681a0c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,14 +14,11 @@ description = "Fabric using Nix example." readme = "README.md" license = {file = "LICENSE"} -[project.scripts] -bar = "bar.main:main" - [tool.setuptools] include-package-data = true -[tool.setuptools.packages.find] -where = ["."] +[tool.setuptools.packages] +find = { namespaces = true } [tool.setuptools.package-data] "*" = ["*.css", "styles"] diff --git a/scripts/launcher.py b/scripts/launcher.py new file mode 100644 index 0000000..2cd05e7 --- /dev/null +++ b/scripts/launcher.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +import sys +import os + +script_dir = os.path.dirname(os.path.abspath(__file__)) +site_packages_dir = os.path.join( + script_dir, + os.pardir, + "lib", + f"python{sys.version_info.major}.{sys.version_info.minor}", + "site-packages", +) + +if site_packages_dir not in sys.path: + sys.path.insert(0, site_packages_dir) + + +from bar.main import * + +sys.argv[0] = os.path.join(script_dir, os.path.basename(__file__)) +sys.exit(main())