aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/island
AgeCommit message (Collapse)AuthorFilesLines
11 daysdocs(island): calendar edits touch only what changedDanilo M.1-2/+4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 daysfix(calendar): review findings in calctl and the editorDanilo M.7-59/+170
An edit now rewrites only the fields that changed. A save with nothing changed used to rebuild the alarm, turning ACTION:AUDIO into DISPLAY and dropping ACKNOWLEDGED, re-anchor the start to the local zone, and strip SUMMARY's parameters; the test edits a foreign event unchanged and checks every one survives. get, edit and delete name the calendar the event is in. The same invite synced into two calendars has one UID, and the panel acted on whichever file came first, so editing one copy could overwrite or delete the other. A custom rule's date cannot be moved from the panel: BYDAY=MO stayed on Monday while the start moved, and the series lost the day shown. UNTIL is read back in local time, so a 22:30 series keeps its last occurrence. Files are written 0644 like vdirsyncer's. Enter in the title no longer bypasses the busy guard, which could create an event twice, and a throwing callback no longer leaks its Process. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 daysdocs: the calendar panel and calctlDanilo M.1-1/+18
The island README gains the panel. AGENTS.md records why calctl reads the vdir itself, the local-time recurrence rule, the system Python it needs, and two traps the build hit: a QML method named escape fails to load, and a pill expanding for any panel grew beside the calendar. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 daysfeat(calendar): a bell on agenda rows whose event has an alarmDanilo M.1-1/+12
Checking a day's reminders meant opening each event. The bell shows when the event carries its own VALARM, preset or custom. cal-notif's per-calendar defaults are not reflected: they are its configuration, not a property of the event. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 daysfix(island): the status pill stays at rest while the calendar is openDanilo M.1-1/+1
It expanded for any panel, which was right while it hosted every panel there was. The calendar panel lives in the clock pill, so the status pill grew into an empty box beside it. It now expands for its own two. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 daysfeat(island): the clock pill opens the calendar panelDanilo M.3-7/+45
A click on the pill opens the panel in its capsule, 620px wide, growing left from the gap so the status pill does not move. Focus goes into the panel so its text fields and Escape work; Escape closes the editor before the panel. The Escape hook is back(), not escape(): QML rejects a method named escape with "Illegal method name", since it shadows the global JS function, and the reload failed until it was renamed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 daysfeat(calendar): month grid beside the day's agendaDanilo M.1-0/+323
Six weeks from Monday, a dot per calendar with something that day, today and the selection marked. The agenda lists the selected day, all-day first; a click opens the event in the editor, and while the editor is open the grid picks its dates instead of the selection. Escape closes the editor before the panel. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
11 daysfeat(calendar): the event formDanilo M.1-0/+356
Dates come from the month grid beside it; times are typed or scrolled in 15-minute steps. Repeat and alarm offer the presets and show custom, unselectable, for an event carrying something richer, which the save then leaves alone. A failed save keeps the form open with calctl's line. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
11 daysfeat(calendar): the calendar serviceDanilo M.1-0/+102
Runs calctl, one Process per call so a reload and a save never collide, and drops a list that a newer one overtook. Watches the calendar directories the way the mail count watches xapian, so an edit from khal or a cron sync repaints the panel too. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
11 daysfeat(calendar): pure date logic for the panelDanilo M.2-0/+279
Month cells from Monday, which days an event covers, the day's agenda order, the grid's dots, time stepping, and the editor's draft in both directions. Days are strings and arithmetic is in UTC, so the DST change at the end of October never moves a day; the test steps across it. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
11 daysfeat(calendar): calctl creates, edits and deletes eventsDanilo M.2-1/+237
Edits change only what the form owns: a custom rule, extra alarms and properties this tool does not know survive, which the test checks on an event with BYDAY, two alarms and an X- property. Writes go through a temporary file and a rename so khal, cal-notif and vdirsyncer never read half a file, and a vdirsyncer sync is started detached afterwards. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
11 daysfeat(calendar): calctl reads the vdir as JSONDanilo M.2-0/+444
The calendar list comes from khal's config, so there is no second list. Recurrence is expanded with dateutil in naive local time, which keeps a weekly 09:00 at 09:00 across the DST change; the test pins that on 26 October. A rule richer than a plain FREQ, or alarms other than one preset, read as custom, which is what lets an edit leave them alone. A file that fails to parse is skipped rather than blanking the month. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
11 daysfix(island): review findings in the controls panelDanilo M.3-2/+14
Edit mode let a right-click and the wheel through to the tile, so a right-click opened the drawer and scroll changed volume, against the spec. The drag area now takes both buttons and the wheel. A scroll up on a level already above the cap, such as a mic set to 120% elsewhere, snapped it down to the cap. The cap now only stops a step up. Prefs logs a failed write, which printErrors off had silenced: the new order would otherwise vanish at the next restart with no trace. Its parsed object is renamed from data to doc, so it cannot shadow a base property of that name. The spec now says what was built: JSON.parse rather than a JsonAdapter, and the helper list as it is. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 daysdocs: the controls panel, its preferences file and bindDanilo M.1-1/+24
The island README gains the panel. AGENTS.md records that a bare SUPER release bind is cancelled by drag and scroll on Hyprland 0.56.2, which was the open risk in the spec, and that FileView creates parent directories while Quickshell.stateDir is per-shell. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 daysfeat(island): controls panel in the status pill, island IPCDanilo M.2-7/+48
A settings icon in the status pill opens the controls panel in the same capsule the sound panel uses. Right-click on a tile closes the panel and opens its drawer page. The island IPC target reveals the island and toggles the panel, for the SUPER release bind. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 daysfeat(island): controls grid with an edit modeDanilo M.1-0/+175
Four columns, the visible list from Prefs. Edit mode puts a MouseArea over each tile that drags it and drops it into the slot under its centre, a × that hides it, and a strip of hidden tiles with a + each. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
11 daysfeat(island): a control tile bound to its live stateDanilo M.1-0/+143
Wifi and bluetooth through the Quickshell services, DND, presentation and auto-lock through the Status registry, output and mic through the sound module's tracked nodes. A tile whose backing object has not arrived yet is dimmed and ignores input, which covers the two seconds before Networking and Bluetooth populate. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
11 daysfeat(island): pure tile table and order helpers for controlsDanilo M.2-0/+197
The controls panel's tiles, their icons and drawer pages, and every operation on the visible list: normalize, hide, show, move, the drop slot under a dragged tile, the audio fill and the scroll step. All pure, so the edit mode's logic is tested under node rather than by dragging. normalize keeps an empty list: hiding every tile is a choice, and only a value that is not a list falls back to the default. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07fix(island): the handle fades out while the pills are shownDanilo M.1-0/+3
It is a handle for revealing the pills, so it gives way to them. While something captures it stays, being the only privacy indicator. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07docs: the island, and waybar goneDanilo M.1-0/+93
AGENTS.md describes the hybrid model (desktop/ hosts drawer and island) and gains the gotchas found while building the island: UseQApplication for tray menus, WheelHandler vs MouseArea, accent colliding with green, xkb layout switching, and the tray popup un-hovering the island. The Blur waybar measurement becomes history. READMEs drop their present-tense waybar references. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07feat(island): the flick's desktop icon sits in a badgeDanilo M.1-12/+33
Two icons side by side read as two apps. The desktop one is boxed, the number fallback with it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07fix(island): neutral idle sliver, flag scroll via MouseAreaDanilo M.2-9/+16
The sliver was the accent at rest, and udt had snapped the accent to the same colour as the mic indicator (#36d190), so an idle sliver read as a live microphone. It is Theme.overlay at rest now; captures keep their colours whatever the wallpaper does. The flag's WheelHandler never fired. MouseArea.onWheel, which SoundPage already uses, does; scroll now switches layout, one step per notch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07feat(island): the island window on DP-1Danilo M.2-0/+208
A fixed overlay strip that never resizes: the pills animate inside it and the input mask follows their rectangles, so resizing a layer surface during a morph never happens. Hidden behind a sliver that also carries the privacy colours; the clock pill drops alone for a workspace or app-open flick. shell.qml gains the UseQApplication pragma, which tray menus need, and the island holds itself shown while a tray menu is open, since the menu is a separate popup that would otherwise un-hover the pills and let the hide timer fire. The hold ends at the next hover. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07fix(island): review findings in the pill componentsDanilo M.5-14/+26
- The flag switches once per wheel notch; a touchpad's stream of small deltas switched an erratic number of times. - The flick decides on resolved icon paths, so a name the icon theme lacks falls back to the workspace number instead of a blank slot. - Layout switching uses Hyprland's 'current' keyboard rather than looking up the main device in a subshell. - The capsule radius reaches half the rest height, a real capsule. - privacy.sh exits non-zero when pw-dump fails, so Privacy keeps its last reading instead of reporting nothing captured. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07feat(island): status pill with volume, tray and layout flagDanilo M.1-0/+108
The tray makes the island the session's StatusNotifier host, which waybar was until now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07feat(island): sound panel with output and input levelsDanilo M.1-0/+113
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07feat(island): clock pill with VM dots and flick contentDanilo M.1-0/+103
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07feat(island): the animated capsule both pills are made ofDanilo M.1-0/+51
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07feat(island): keyboard layout of the main keyboardDanilo M.3-0/+78
The flag follows whichever keyboard Hyprland marks main, looked up on every activelayout event and every switch. wb-lang read a fixed device name and went blank when the keyboard moved from its dongle to USB. Flags copied from waybar-theme-udt, which goes away with waybar. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07feat(island): privacy detection for mic, camera, location, screenDanilo M.2-0/+96
Ported from waybar-theme-udt's privacy_dots.sh, because the island's sliver takes over that indicator when waybar goes. pw-dump stays for mic and screen: PwNode has no running state to tell capture from an idle source. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07fix(island): an unpopulated volume reads as muted, not highDanilo M.2-1/+6
NaN and undefined fail every comparison, so they fell through to the high icon. A node can report before its volume is populated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07feat(island): pure logic for icons, dot colours and eventsDanilo M.2-0/+114
The island's decisions that do not need a running shell: which volume icon, which colour a VM dot takes, which flag a keymap shows, the order of the privacy segments, and how an openwindow event splits. Kept out of QML so node can check them. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>