Commit Graph

19 Commits (main)

Author SHA1 Message Date
Amir Alexander Abdelbaki 057a5a44d8 fix(station-bar): make SNI watcher D-Bus calls async (self-deadlock)
The bar hosts the StatusNotifierWatcher in-process (sni_watcher.py), so the
*_sync proxy creation and RegisterStatusNotifierHost call blocked the main
loop waiting on a reply only that same loop could produce — a self-deadlock
freezing the whole bar (clock, holo intro) until the 25s D-Bus timeout. Switch
to new_for_bus + call (async, fire-and-forget).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 20:52:32 +02:00
Amir Alexander Abdelbaki 4da704cb5d feat(hyprdrive): default wallpaper -> ESA/Hubble "Rings of Relativity"
Swap the module's default background.jpg for ESA/Hubble Picture of the Week
potw2050a, "Rings of Relativity" (GAL-CLUS-022058s, one of the most complete
Einstein rings observed). Update CREDITS.md and the hyprdrive.sh install-module
comments to match. Credit: ESA/Hubble & NASA, S. Jha; Ack. L. Shatz — CC BY 4.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 20:49:04 +02:00
Amir Alexander Abdelbaki f040cac729 feat(hypr): float dialog-like windows at cursor, minimum size
Add a `dialog-float` window rule to both hyprdrive and hyprlua: float any
window whose title looks like a dialog (Rename/Save/Open/Opening/Confirm/
Delete/Move/Copy/Replace/Properties/Preferences — covers file-manager rename
dialogs and Firefox "Opening <file>" download prompts), centred on the cursor
at its natural (minimum) size. Catches dialogs that carry no xdg/X11 dialog
hint and would otherwise tile; Hyprland still auto-floats the ones that do.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 20:49:04 +02:00
Amir Alexander Abdelbaki 6ef9f31dee feat(hyprdrive): tune beacon notification open/close animation
- beacon: snappier in-app dissolve (OUTRO_DURATION 0.4 -> 0.2).
- hyprland.lua: split the global `layers` animation into layersIn/layersOut
  so open and close differ. layersIn keeps the springy myBezier slide-in;
  layersOut slides the surface back off-screen with a new easeInQuint-ish
  `slideOutLate` curve — it creeps slowly then whips away in the final
  quarter, instead of a uniform fade.
- windowrules.lua: drop `no_anim` from the beacon layerrule (keep blur) so
  notification cards ride those layer animations again (they slid in/out via
  the global anim before, since no per-namespace no_anim was deployed).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 20:37:22 +02:00
Amir Alexander Abdelbaki b7eba3f967 feat(hyprdrive): switch notifications from dunst to beacon
beacon (the Cosmonaut Shell notif daemon) already renders its holo
fade-in-from-noise intro (materialise out of static), but dunst held the
org.freedesktop.Notifications bus so beacon never started. Make beacon the
deployed and active notification daemon:

- updater.conf: manage `config beacon`; drop `config dunst` (now `ignore`d,
  superseded). Also carries the pre-existing `config ghostty` line that was
  already sitting uncommitted in this file.
- beacon: add a SIGUSR1 close-all handler (window.close_all) so the old
  `dunstctl close-all` keybind has an equivalent.
- binds.lua: Super+Ctrl+C now runs `pkill -USR1 -f '[b]eacon/main.py'`
  (bracket idiom avoids pkill self-matching its own wrapper).
- screenrec.sh: `dunstctl close` -> freedesktop CloseNotification via gdbus.
- timer-run: resolve the session bus via the beacon process, not dunst.

hyprlua keeps its own independent updater.conf + dunst and is untouched.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 20:04:13 +02:00
Amir Alexander Abdelbaki f94a825c82 feat(hyprdrive): dark holo scanlines for kitty + caffeine widget in station-bar
kitty: regenerate scanlines.png — the old tile was a washed-out near-white
overlay that milked out the terminal. Replace it with a dark holographic tile
(gentle violet #5018DD tint + crisp violet scanlines every 4px + sparse
magenta/crimson grain) on a transparent base, so the window's own opacity/blur
still show the wallpaper through it. Seamlessly tileable; matches the suite's
HologramOverlay palette.

station-bar: add a caffeine badge to the right zone, a faithful port of
hyprlua's 4-state eww caffeine widget. Click toggles the shared idle-inhibit
lock via the same scripts/caffeine.sh; the glyph tracks manual inhibit (coffee)
/ webcam presence (eye) / idle (sleep) and glows magenta while presence holds
the lock, reading the same lock/flag files the status scripts do. Nerd Font
codepoints verified against Agave's cmap.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 19:38:51 +02:00
Amir Alexander Abdelbaki dce26b2dcf feat(terminals): deploy CyberQueer palette across kitty/alacritty everywhere
hyprland's kitty theme was still the stock template (only 5 colors set,
ANSI colors commented out); brought it in line with hyprdrive/hyprlua's
full neon 16-color palette and dropped the now-redundant inline cursor
overrides in kitty.conf. Alacritty had no color scheme at all in any DE,
so added matching [colors] blocks to hyprdrive/hyprlua/hyprland so it
renders identically to kitty/ghostty. Registered alacritty.toml and
ghostty/config in apply-theme.sh so future colors.conf edits propagate.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 10:01:35 +02:00
Amir Alexander Abdelbaki ace372780d feat(hyprdrive): holographic glow for kitty + new Ghostty CyberQueer config
kitty: add a seamlessly-tiled scanlines+noise+ambient-bloom PNG as
background_image, giving kitty a static approximation of the suite's
HologramOverlay treatment since it has no per-frame draw hook or shader
support to do real bloom.

ghostty: port the CyberQueer theme (palette, cursor/selection colors)
to a new Ghostty config, with a real per-pixel custom-shader instead of
a static image — color-preserving bloom, procedural scanlines/grain, an
occasional analog glitch/roll burst (tear + vertical roll + chromatic
aberration), and a one-time hologram boot intro that resolves out of
colored static via a downward sweep. Window decorations and the tab bar
are disabled to match kitty's borderless look under Hyprland.

Not wired up anywhere yet — no keybind or $TERMINAL changes point at
Ghostty. This is just the config, ready to test.
2026-07-20 09:46:14 +02:00
Amir Alexander Abdelbaki 6c07c10370 feat(hyprdrive/kitty): finish the CyberQueer kitty theme
The 16 ANSI colors were still stock template defaults (plain green/
blue/cyan) clashing with the violet/crimson palette used everywhere
else in the suite. Fill them in from colors.conf plus a few new neon
tints in the same hue family, set background to the real #1A1A1A
instead of pure black, and add matching border/bell/mark colors. Also
drop a stale cursor-color pair in kitty.conf that the theme include
was silently overriding anyway.
2026-07-20 08:52:31 +02:00
Amir Alexander Abdelbaki 74fc9aefaf feat(hyprdrive/beacon): draw the divider as a Cairo magenta sine path
Replaces the ∿-glyph label divider with a Gtk.DrawingArea that strokes a sampled
sine wave (soft-glow + bright-core passes), colour per urgency (magenta / accent),
phase-advanced each tick so it travels like a live signal. Background stays
transparent — a class-specific rule overrides the CyberQueer theme's universal
`background-color`, so no dark pill shows behind it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 17:36:04 +02:00
Amir Alexander Abdelbaki 838f954cad feat(hyprdrive/beacon): holographic notification daemon replacing dunst
beacon is a GTK4 layer-shell notification daemon in the Cosmonaut Shell idiom.
It owns org.freedesktop.Notifications and renders each notification as a
holographic card: scanline/sweep/noise overlay (shared lib/hologram.py) clipped
to a rounded violet holo-glass card, emitted-magenta text, glow-violet frame
(accent + squiggle for critical), materialise-out-of-static intro / dissolve
outro, top-centre stack.

Implements the interactive spec subset: body markup, urgency, replaces_id,
per-urgency timeouts, action pills, icons (name/path/raw), click-to-dismiss, and
the NotificationClosed / ActionInvoked signals.

- scripts/beacon-start.sh: LD_PRELOAD launcher
- autostart.lua: dunst -> beacon
- windowrules.lua: blur layer-rule for the `beacon` namespace (no_anim; it has
  its own hologram intro)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:22:01 +02:00
Amir Alexander Abdelbaki 178c5e3e91 feat(hyprdrive/dunst): holographic notification theme + radio-squiggle divider
Themes dunst in the astro-menu idiom: emitted-magenta text, violet holo-glass
backgrounds (transparent for the compositor blur), glow-violet/accent frames,
Agave Nerd Font Mono, and a "radio squiggle" sine-wave divider between title and
body. (Superseded by the beacon daemon in a following commit, but kept as themed
fallback config.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:21:28 +02:00
Amir Alexander Abdelbaki 837bc2823a fix(hyprdrive/station-bar): wall-clock safety net so the holo intro can't stall
The materialise intro was driven only by the frame-clock tick, which stops
advancing when the compositor withholds frame callbacks (e.g. the bar restarted
into an idle compositor) — freezing it at t=0 with content stuck at opacity 0,
i.e. permanent static. Arm a GLib.timeout alongside start_intro() that
force-resolves the intro regardless, so content always appears.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:21:28 +02:00
Amir Alexander Abdelbaki e1126e9613 feat(hyprdrive/station-bar): render tray context menus from dbusmenu
Right-click now fetches the item's com.canonical.dbusmenu layout and renders it
in a GTK popover anchored to the icon, instead of calling the SNI ContextMenu
method. Fixes menus opening at screen (0,0) for apps that implement it (Discord)
and gives a menu at all for dbusmenu-only apps (nm-applet, blueman). Supports
sections, submenus, checkmarks, icons and Event-on-activate; themed to match the
suite (.station-tray-menu).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:21:28 +02:00
Amir Alexander Abdelbaki 50b80cd5ce fix(hyprdrive/orbit-menu): launch Tools/Scripts via hl.dsp.exec_cmd
`hyprctl dispatch` evaluates its argument as Lua here (hyprlua), so the old
native `dispatch exec <cmd>` form parsed as a Lua syntax error and was silently
dropped — every Tools/Scripts/Management entry failed to launch. Route through
hl.dsp.exec_cmd(...) instead (matching binds.lua), keeping the [tag ...] rule
prefix support.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:21:28 +02:00
Amir Alexander Abdelbaki a534952c1c fix(hyprdrive/station-bar): host a StatusNotifierWatcher so the tray fills
hyprdrive has no DE component owning org.kde.StatusNotifierWatcher (waybar/eww
used to), so tray apps had nowhere to register and every SNI host — including the
bar's own tray.py — saw an empty tray.

- sni_watcher.py: a minimal StatusNotifierWatcher — owns the name, tracks
  registered items/hosts, drops items on NameOwnerChanged, and emits the
  registration signals + PropertiesChanged so hosts stay live.
- main.py: start it in do_startup, before the bars.
- tray.py: watch the watcher name (bus_watch_name) instead of connecting once, so
  the host attaches when our watcher appears and recovers if any watcher restarts.

Verified: the watcher owns the bus name, IsStatusNotifierHostRegistered is true,
and running tray apps (udiskie, nm-applet, blueman, Steam) register + render in
the bar the moment it comes up.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 17:44:17 +02:00
Amir Alexander Abdelbaki 8dfd505ce4 feat(hyprdrive): materialize animations, dmenu mode, ship-systems astro rework
Second daily-driving pass over the Cosmonaut Shell suite.

Animations (all four surfaces):
- Removed every slide-in reveal; each surface now only "materialises out of
  static" (compositor no_anim layerrule + in-app hologram intro). Longer, noisier,
  gradual fade-in: the content opacity ramps 0->1 (fade_widget) instead of a solid
  haze block popping on. Added a quick reverse "dissolve into static" outro on
  close. horizon-dock/orbit-menu use a slower 2.4s intro. Fixed a warm-reopen bug
  where a stale frame-clock baseline skipped the intro entirely.

horizon-dock:
- Center planet: bigger, sinks ~1/4 below the screen edge, translucent holographic
  body with a wide bloom halo, specular sheen, rim glow and a breathing pulse.
- Ornamental satellite glyphs: two rings framing the windows orbit, each with a
  random 3-7 satellites whose motion source is randomised (toward-cursor / mouseX
  / mouseY), so the quiet edges feel alive.
- Super+D now opens horizon-dock (astro-menu moved to Super+Shift+D).

orbit-menu:
- Classic dmenu mode: `--dmenu` reads newline items from stdin, shows them as ring
  nodes, prints the choice to stdout (exit 1 on cancel). Standalone NON_UNIQUE app
  so it never routes to the resident daemon; scripts/orbit-dmenu.sh wraps it with
  the gtk4-layer-shell preload.

astro-menu (sci-fi rework):
- Replaced the map module with "Ship Systems": a Gtk.Grid system monitor backed by
  backend/sysmon.sh. CPU->Thrusters, GPU->Hyperdrive, RAM->Life Support Systems,
  Storage->Cargo Hold (one aligned row per mounted drive with capacity), each a
  bracketed -<████░░░░>- usage meter + -( 54°C )- temperature readout.
- Renamed Bluetooth -> System Radio, Network -> Laser Antenna Uplink.
- Weather gains a "Planetary Environment Report" headline.

station-bar:
- The battery readout uses a fuel-tank glyph (the ship runs on fuel).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 17:17:48 +02:00
Amir Alexander Abdelbaki f48c70273a fix(hyprdrive): holographic Cosmonaut Shell fixes + per-monitor station bar
Daily-driving pass over the Cosmonaut Shell suite: transparency, holographic
effects, and layout/geometry fixes across every component built for the DE.

Global holographic layer (astro-menu/horizon-dock/station-bar lib/hologram.py):
- edge-fade mask (A8 DEST_OUT) so scanlines fade out at panel borders
- magenta particle field; "materialize from static" noise-mask intro animation
- optional clip_func so the mask follows non-rectangular / animated content
- universal `* { background-color: transparent }` at USER+1 to defeat the
  CyberQueer theme painting opaque bg on plain containers; blur layer_rules

astro-menu: magenta text (alt red) for readability; thinner, glowier borders;
rounded map-texture corners; fixed transparency stacking + square corners.

orbit-menu: scanline mask now follows the zoom transition into a submenu.

horizon-dock: reworked into an orbit-menu node ~1/3 on-screen (<=2/3 width) with
horizon perspective (arched orbit rows), a non-functional center clock-sphere,
orbit glyph decorations, graceful edge fade-out, and centered/filled orbits;
tray removed; giant-surface clip fixed.

station-bar: redesigned as an extra Horizon Dock orbit — bare glowing color-coded
glyphs (no pills), width-adaptive, one bar per monitor, Super+Z toggles the
focused monitor's bar. Clickable HUD trapezoid around the title opens Astro Menu.
Workspaces are now per-monitor: each bar shows only its own monitor's workspaces
and highlights that monitor's active workspace. Populated workspaces show the
station glyph, empty ones the bare spaceship + number; the focused one is framed
by a `-< >-` reticle with the rocket prepended when there's a station to dock at.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 10:34:40 +02:00
Amir Alexander Abdelbaki 90375a5733 feat(hyprdrive): add hyprdrive DE with full Cosmonaut Shell suite
New leaner Hyprland DE (setup/modules/Desktop-Environments/hyprdrive.sh),
a sibling of hyprlua that drops the older EWW/nwg-shell/wofi/walker/
ulauncher stack in favor of a purpose-built, GTK4 layer-shell component
suite sharing one CyberQueer hologram visual language:

- orbit-menu    radial power/utility menu (focal-point zoom nav, holographic
                overlay, cosmetic satellites)
- horizon-dock  hover-scrollable orbital app dock (open windows/favorites/
                all apps orbits, SNI tray satellite)
- astro-menu    astal-menu re-themed as a hologram info display (Location/
                Weather/Bluetooth/Network quads, taskbar, app drawer)
- station-bar   the EWW top bar's replacement ("Voidstation Status Bar"):
                a thin curved layer-shell bar tracking Hyprland workspaces/
                active window natively over .socket2.sock, no polling

Every component now shares one consistent hologram treatment: translucent
violet panel/node fills (replacing solid gray), a config-toggleable
scanline+sweep+noise overlay (lib/hologram.py, ported to horizon-dock and
station-bar to match orbit-menu/astro-menu), and glow-on-hover throughout.

Also adds horizon-dock to hyprlua (built there first, before hyprdrive
existed) and wires dependency checks, config-updater entries, and
apply-theme.sh color sync for every new component across both DEs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nu8JkQ95hPAT8vADeGDAmL
2026-07-17 15:28:07 +02:00