* fix(arch-updater): tighten package list spacing and icon size
* fix(arch-updater): make Dismiss actually clear the pending list
* fix(arch-updater): make hitting update close the panel
* feat(arch-updater): add per-source icons to the package list header
* feat(arch-updater): add an activity graph to the panel
Tracks the pending-update count across recent checks and when the last
update ran, persisted to disk so it survives restarts. Off also stops
recording history, not just hiding it.
* feat(arch-updater): show per-point detail on activity graph hover
ui.graph has no pointer props of its own, so a row of ghost buttons
sits under the line as per-point hit targets, each with a native
tooltip. History entries now carry a timestamp and whether the check
followed an update run, so hovering a point says when it happened and
either its pending count or "Updated".
* fix(arch-updater): load activity history at startup, not on first check
loadHistoryState() only ran lazily inside recordCheck/recordUpdateRun,
so a freshly started service published an empty history until a check
completed, hiding the graph even when prior sessions had data on disk.
* fix(arch-updater): render activity graph with sharp points, not curves
* feat!: init plugin
* fix: fix widget not found on bar setting
* feat!: add creation folder for plugin
* feat!: add first version of Config Swap (simple modification test)
* feat!: update toml with new feature
* docs: prepare docs
* feat!: add more place for view preview
* feat!: add new page for store and allerady download
* docs: improve lisibility
* feat!: add description emplacement
* feat!: add wallpaper support for install and set
* docs: add more info to readme
* feat: add cp depedencie
* docs: add more info
* feat!: add trad support
* fix: change order for set wallpaper after change config
* feat!: add settingsPath for data.json
* feat!: add data.json creation if not exist
* docs: add more docs info
* feat!: rm useless preview image
* docs: improve docs
* feat!: change false description
* feat!: add shellQuote for protect bad command
* feat!: add path var in infoConfig.Change config type for infoConfig Type
* feat!: add secure delete config and confirmation for delete config
* feat!: add save function for save current config
* feat!: add welcome warning and confirmation switch
* feat!: add info for store section
* docs: add new info in setting section
* feat!: add resolve state dir for check all state dir possibility
* feat!: add english translation compatibility
* feat!: change thumbnail
* docs: add more information on the readme
* fix: rm useless button
* docs: add comment
* fix: add depedencie missing
* fix: rm death code
* fix: rm update interval not use
* feat!: add delete, save and apply protection, reject invalid name
* docs: add more info in info section
* feat!: add more charactere in match string in isDetect function
* fix: change wrong name function
* feat!: add protection for invalid name in dowload Config
* fix(plugin): Feed text encoding fix and panel UI improvements V1.0.2
* fix(plugin): Feed text encoding fix and panel UI improvements V1.0.2
* Add xdg-open dependency to plugin.toml
Added 'xdg-open' as a dependency for the plugin.
* Add spotify-lyrics plugin
* fix(spotify-lyrics): resolve race conditions and add plugin_api
* fix(spotify-lyrics): update plugin_api to 3
* fix(spotify-lyrics): resolve github actions validation errors
* fix(spotify-lyrics): resize thumbnail to 960x540 to fix validation error
* fix(spotify-lyrics): bump version to 1.2.1
* fix(spotify-lyrics): update namespace and replace misleading thumbnail
* fix(spotify-lyrics): declare runtime dependencies in plugin.toml and update README requirements
* feat(lyrics): implement dynamic panel width sizing
* Revert "feat(lyrics): implement dynamic panel width sizing"
This reverts commit ef91e6f9f688df7deeb41ba9e5c7606a4904b47a.
* feat(spotify-lyrics): implement dynamic panel width sizing
* fix(spotify-lyrics): correct target width pre-calculation for upcoming lines
* fix(spotify-lyrics): prevent vertical spill by enforcing maxLines=1
* fix(spotify-lyrics): implement dynamic height resizing to encapsulate wrapped text
* fix(spotify-lyrics): remove horizontal cap to prevent vertical spill
* fix(spotify-lyrics): restore minHeight and implement perfectly safe wrapping height prediction
* fix(spotify-lyrics): lock panel width and use vertical dynamic resizing exclusively
* fix(spotify-lyrics): implement dynamic font scaling and remove panel dimension animations
* fix(spotify-lyrics): restore robust dynamic height logic and discard font scaling
* refactor(spotify-lyrics): rewrite height estimation and clean up codebase
Root cause: the charUnits per-character width estimation consistently
underestimated real rendered widths because the 0.80 multipliers in
getLineWidth and getLinesCount cancelled each other out, making the
effective calculation ignore the safety margin entirely.
Fix: replaced the complex charUnits/toChars/getLineWidth machinery with
a simple #text / chars-per-line heuristic using a conservative 0.60x
character width factor. This reliably overestimates line count, ensuring
the panel always allocates enough height for wrapped text.
Quality of life improvements:
- Split monolithic render() into renderEmpty/renderPaused/renderPlaying
- Reduced update interval from 33ms (30 FPS) to 100ms (10 FPS)
- Removed file-read timer (reads every frame at lower FPS instead)
- Added clear section headers and inline documentation
- Removed all dead code (charUnits, toChars, getLineWidth, etc.)
* fix(spotify-lyrics): set panel height=280 in plugin.toml — the actual fix
The root cause of the lyrics spilling was never in the Lua code.
Noctalia panels are sized exclusively by plugin.toml, not by minHeight
on the column layout. Since we had removed width/height from plugin.toml
to make sizing 'dynamic', noctalia used a tiny default that couldn't
contain wrapped lyrics. minHeight on ui.column had zero effect on the
actual panel window size.
Set height=280 to comfortably fit 3 lyrics lines even when they wrap.
* feat(spotify-lyrics): add dynamic font scaling for long lyrics
Long lyrics (>40 chars) now get progressively smaller fonts:
- Every 15 chars beyond 40 reduces font by 2px
- Minimum font: 10px (panel) / 11px (widget)
This prevents vertical overflow regardless of container size by
ensuring long lines take up less vertical space when they wrap.
* fix(spotify-lyrics): fix plugin IDs and tilde path expansion
- Updated bar.luau to toggle correct panel ID
- Replaced ~ in noctalia.readFile with absolute path since Lua doesn't auto-expand it
- Updated plugin.toml height to 280 and id to noctalia/spotify-lyrics
* Fix UI bugs, implement reactive updates, and add album art
* Fix plugin manifest validation errors
* fix(spotify-lyrics): address PR review comments
- Change plugin id from noctalia/ to goatnath/ namespace
- Declare runtime dependencies: playerctl, python3, syncedlyrics
- Replace hardcoded /home/goatnath path with noctalia.expandPath()
- Add [[desktop_widget]] manifest entry for widget.luau
- Rewrite README to follow README_TEMPLATE.md structure
- Update all references to use corrected plugin id
---------
Co-authored-by: goatnath <aadinathkeshav1978@gmail.com>
* feat(udiskie): add Udiskie service for real-time device monitoring, notifications, and IPC
* feat(udiskie): add main manager panel for drives and partitions
* feat(udiskie): add plugin manifest, status widget, and english translation
* feat(udiskie): add Makefile for testing and linting translations
* feat(udiskie): add error handling for missing udiskie package
* feat(udiskie): add right-click functionality to refresh Udiskie service
* feat(udiskie): add option to hide widget when no devices are connected
* feat(udiskie): add settings button to the panel for quick access to configuration
* feat(udiskie): add button to copy mount path to clipboard in partition row
* fix(udiskie): duplicated notifications when removing or unmounting devices
* feat(udiskie): add disk usage information for mounted partitions in device state
* feat(udiskie): update partition row status colors and enhance UI for status display
* fix(udiskie): adjust timeout to give time for sudo tasks such as LUKS unlock
* feat(udiskie): update partition row status color for LUKS devices and adjust panel width
* fix(udiskie): scroll not working properly and items overflow container
* feat(udiskie): add missing translations and remove hardcoded strings messages
* feat(udiskie): add README and thumbnail
* docs(udiskie): add performance section to README with resource usage comparison
* fix(udiskie): update output parsing to use safe tab delimiters for device information
* fix(udiskie): improve device hierarchy parsing to correctly identify partitions
* feat(udiskie): centralize open with file manager code, and close panel on auto-open on mount (like manually open)
* fix(udiskie): exclude LUKS containers from "Drive Connected" notifications
* fix(udiskie): quote paths and device names in shell commands
* fix(udiskie): improve error message cleaning regex
* feat(udiskie): enhance README with device attributes and update service to suppress errors
* fix(udiskie): use shell quoting for device paths in panel async commands
* feat(udiskie): add spanish translations and update tests to check every translation
A bar widget and attached panel showing AI provider usage limits reported
by the local CodexBar CLI. The bar keeps a configurable number of provider
meters; the panel lists every provider, quota window, credit balance, and
pace summary, and scrolls when the response is taller than the panel.
Claude-Session: https://claude.ai/code/session_01BCNAY79YEoNxyubdt8Co9A
Co-authored-by: Salem Sayed Abdel Gawad <283208+salemsayed@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix+refactor: translation strings refactored & fixed a ui bug affecting scrolling
- Fixed a bug where hovering over an item in populated lists would
trigger auto-scrolling.
- Fixed scrollbar rendering incorrectly.
- Refactored translation strings (converted to nested keys when
applicable)
* docs: formatting fixes + 1.3.1 changelogs
* chore: bump the version