Commit Graph

24 Commits

Author SHA1 Message Date
server2 54ca75b855 glass-base: a glass opacity setting and one place for the surface look
- shell.conf glass (0.05 to 1, default 1 = solid, as before): the
  surfaces' opacity; read live with the theme
- surface.rs: shell() draws the island, the idle pill and the workspace
  pill (fill, rim, shadow), so a design is one file; the default is the
  look so far
- see-through surfaces can't hide content under a veil, so with glass
  below 1 the open/close fades use .opacity() while they run
- README: the Hyprland layer rule that frosts what's behind the shell
  (namespace match is a full match: ^magic-.*$; ignore_alpha keeps the
  transparent margin around the island sharp)
- docs/design: the solid look and glass 0.5 with the rule, for review
2026-10-09 05:20:44 +02:00
server2 036b326b04 theme: react to file changes instead of polling
the Theme service waits on amane::watch_file (inotify on the folder, so
matugen's rename-over saves count) for both ~/.config/amane/theme and
shell.conf, settles 50 ms for multi-write saves, and skips writes that
change nothing. measured on the desktop: rename-over, in-place and sed -i
writes picked up in 55-68 ms (was up to 500 ms), identical rewrites
ignored, no activity while idle (was 4 reads a second). deleting the
theme file takes effect at the next start
2026-10-09 04:44:02 +02:00
server2 d04cbac8d4 AGENTS.md: theme.rs and the colour flow 2026-10-09 04:29:41 +02:00
server2 eabda748f5 colours from the wallpaper through matugen
- matugen/amane.colors: a matugen template (primary, on_primary,
  primary_container, primary_fixed, on_surface, on_surface_variant,
  outline_variant, surface_container high/normal/lowest) that skwd-wall
  renders into ~/.config/amane/theme on every new wallpaper
- theme.rs: a Theme service reads that file and shell.conf twice a
  second (matugen replaces its output, which a file watch can lose) and
  fades all ten colours together on one Animation; without a theme file
  the shell keeps its pink on purple
- the island, the idle pill and the workspace pill draw with the theme;
  white overlays (chips, tracks, hover tints) stay as they are
- shell.conf: cover_colors (true: the open media card and equalizer take
  the cover's gradient as background, accents stay the wallpaper's) and
  transition_ms (0 switches instantly), both applied without a restart
- parse: settings() and rgb(), with a test (6 pass)
- checked on the desktop with a hand-written theme file: pill, workspace
  pill and card recolour, cover_colors switches the card background live
2026-10-09 04:28:39 +02:00
server2 2870ebbd13 island: an idle pill while no player is open
the island is always there now: with no player it shows a pill with a
drawn music note and 'Nothing playing', in the cover gradient with the
pink glow. click-through, static (draws once). checked on all 4 monitors
2026-10-08 11:45:26 +02:00
server2 ecd9a8d3b0 AGENTS.md: workspace clicks use the lua dispatch, never visible(false) 2026-10-08 11:40:22 +02:00
server2 66bf25f7dd fix workspace clicks and the island stuck after a hidden start
- workspace pill: clicks did nothing. amane's Workspaces::focus sends
  'dispatch workspace N', which hyprland 0.56 with a lua config turns into
  hl.dispatch(workspace N) and rejects. dispatch the lua form the user's
  keybinds use, hl.dsp.focus({ workspace = N }), through hyprctl on its own
  thread (named workspaces with negative ids are left out)
- island: 'magic-island has no child to draw' at startup without a player,
  and the island then never appeared. hyprland 0.56 configures a layer
  surface before its first commit (seen with WAYLAND_DEBUG), so a window
  that starts visible(false) gets a size, amane runs the empty view, logs,
  and waits for frame callbacks an undrawn surface never gets. with no
  player the island is now an empty click-through window instead
- verified on the desktop: 0 'no child' lines, island draws at startup and
  shows on all 4 monitors when a player starts
2026-10-08 11:38:16 +02:00
server2 c749ca9d9d AGENTS.md: workspaces.rs, cover loader at 250 ms 2026-10-08 02:30:27 +02:00
server2 9329d250f6 workspaces: a pill top left on every monitor with its workspaces
- one window per monitor (namespace magic-workspaces, Overlay like the
  island), showing that monitor's hyprland workspaces in the island's
  look: cover gradient, pink glow
- focused workspace pink, shown-elsewhere soft pink, empty ones dim;
  hover eases in (one at a time), a click switches workspace
- special workspaces are skipped; name-only ones show their first letter
- event-driven through Workspaces: redraws only on hyprland events and
  hover
2026-10-08 02:09:25 +02:00
server2 ddaef1f805 tools: start leaves a shell it didn't start alone
the user may run amane from a terminal; start used to crash into it with
'amane is already running'. now it says which pid runs and stops
2026-10-08 01:37:10 +02:00
server2 9d6a13f876 island: transport buttons answer at once
- play/pause flips its icon (card and pill) the moment it's clicked; the
  clicked state is shown until the player has answered
- after play/pause, next or previous, Media is read again at 150 and
  600 ms instead of waiting for its once-a-second poll, so title, time
  and play state follow within a fraction of a second
- the cover loader checks 4 times a second instead of once
- ipc: island play-pause, the same path as a click (keybinds, tests)
2026-10-08 01:37:10 +02:00
server2 e847cbde73 tools: pick the live hyprland instance
$XDG_RUNTIME_DIR/hypr keeps folders of dead instances, and the newest one
isn't always alive; take the newest with a .socket.sock
2026-10-08 01:25:33 +02:00
server2 7844a98828 island: card on one monitor, live bars only on the focused one
- the card opens on the monitor that was clicked (keybinds: the focused
  monitor); the others keep their pill. moving the card to another monitor
  restarts its open animation there
- only the focused monitor's window (and the one with the card) reads
  Spectrum, so the other pills show still bars and rest
- hover lights only the pill under the pointer
- measured with music on 3 monitors: pill 10.7% of a core (was 27.5%),
  open card 20.7% (was 58%), ~62 frames a second in total, 0-1 slow
  frames per open/close (was 7-14), back to one island's cost
2026-10-08 01:25:33 +02:00
server2 967ff37b78 spectrum: kill a cava left by an earlier shell on start
stopping the shell leaves its cava running (parent 1), reading on from a
closed pipe and ignoring SIGTERM; every restart while music played leaked
one. on start, pkill -KILL -f our cava.conf before starting our own
2026-10-08 01:25:33 +02:00
server2 85416b501e island: on every monitor (experiment)
window_per_monitor with the same view: every monitor shows the island,
all sharing one state (open, hover, player). measured with music on 3
monitors: 180 frames a second in total, pill 27% of a core (was 9%),
open card 58% (was 21%), gpu 1.4 / 3.0 ms per frame each; open/close
drops 7-14 of ~175 frames (was 0-1)
2026-10-06 19:09:18 +02:00
server2 0f6fb88e58 tools: start waits for the old shell to exit
an old shell can take a few seconds to let go of amane's socket, and the
new one then panics with 'amane is already running'; wait up to 5 s
2026-10-06 19:09:11 +02:00
server2 dfc9a19860 island: the pill gets the card's faint pink glow
one pink glow for the pill and the open card (opacity 0.3, blur 22),
0.7 while the pill is hovered; the dark drop shadow is gone. same single
shadow as before, so no extra cost (pill 1.3 ms gpu)
2026-10-06 16:59:59 +02:00
server2 b74e727305 island: glowing card, hover on eq bands and time bar, bold transport
- the open card keeps a faint pink glow: the pill's shadow blends from a
  dark drop shadow to a centred pink glow (opacity 0.3, blur 22, inside
  the window margin); measured 2.95 ms gpu with the card open, as before
- eq bands: hovered, the track widens 4 px and brightens, the knob grows
  25% with a full pink ring, the frequency label turns pink
- time bar: hovered, the track thickens 4 px and brightens, the knob grows
- previous/play-pause/next: no halo, circle or growth any more; they go
  bold instead (an outline of the glyph's own colour, 0 to 2 px; pause bars
  widen), and glowing() is gone
2026-10-06 16:58:05 +02:00
server2 fc90260d5d island: animated hover on the island and every button
- each hovered spot eases a highlight in and out over 220 ms
- pill: widens 10 px and its drop shadow turns into a centred pink glow
  (the same shadow the pill already had, so no extra cost)
- previous/next: swell 12%, icon turns pink, pink halo; play/pause swells
  10%, halo, its pink warms toward white
- chips and presets brighten and grow 4-6%, dropdown rows slide right
- halos only exist while hovered (a shadow is two gpu layers per frame)
- one button lit at a time, and highlights reset when the card or the
  dropdown changes: amane matches hover targets by position in the frame,
  so a target that disappears never hears the pointer leave
2026-10-06 16:38:18 +02:00
server2 c228f40154 remove src.before-test, the pre-island hello-world backup 2026-10-06 15:45:00 +02:00
server2 a8cd23546d docs: README, AGENTS.md, test tools in tools/
- README: features, layout, requirements, install, IPC, runtime files, limits
- AGENTS.md: the user's ground rules (branch + approval, never touch real
  players' sound), architecture, measured performance rules, type-check
  and test loop, desktop test driver and its pitfalls, open threads
- tools/: amane-remote.sh and fake_mpris.py, so the test loop doesn't
  depend on the Hermes skill
- .gitignore: the Cargo files amane generates
2026-10-06 15:41:48 +02:00
server2 c55e4cfbed island: cover gradient background, unmirrored pill levels
- the pill, the card and the fade veils share one 150-degree gradient from
  the cover's palette (most common, second, background), each darkened to
  a fixed brightness so white text stays readable; veils span the whole
  shape so their gradient lines up with the backdrop's
- measured on the desktop: card open 3.1 ms gpu (solid fill was ~3), pill
  1.7 ms (was 1.0), open/close animation unchanged (1 and 0 slow frames)
- pill levels: lows left, highs right, no mirroring; every bar still grows
  up and down from the middle line
2026-10-06 15:25:13 +02:00
server2 e7ff054fb1 island: open in two phases, live levels in the pill
- one linear timeline: the pill fades out, the empty shape grows, then the
  card fades in on the settled shape (and backwards on close)
- fades use a surface-coloured veil instead of .opacity(), and the shape
  has no clip, so neither costs a gpu layer
- measured on the desktop: open went from 11 frames over 20 ms to 1,
  close from 4 to 0
- the spectrum capture runs whenever the shown player plays, and the pill
  shows it as 7 mirrored, glowing bars (about 9% of one core while playing)
2026-10-06 03:44:00 +02:00
server2 93c57b93c4 Initial 2026-10-06 03:28:55 +02:00