Skip to content

Conversation

@feltfomo
Copy link

@feltfomo feltfomo commented Dec 24, 2025

[POC] Icon Resolver with Persistent Caching

Status

Proof-of-concept submission. This demonstrates an alternative approach to icon resolution. Submitting for consideration - not planning active maintenance.

What It Does

A Rust-based icon resolver that:

  • Follows theme inheritance chains for better icon matching
  • Persistently caches results
  • Automatically handles theme changes
  • Uses parallel directory scanning

Performance

  • Cold start (Papirus-Dark, 18k icons): ~300ms
  • Warm start (cached): ~8ms

Changes

New Files

  • Services/Icons/IconResolver.qml - Manages Rust binary
  • Services/Icons/AppSearch.qml - Icon resolution + fallback
  • Services/Icons/icon-resolver/ - Rust binary

Modified Files

  • ActiveWindow.qml, Dock.qml, Launcher.qml, shell.qml

Screenshots

Before (current Noctalia)

List View:
pic of base noctalia list

Grid View:
pic of base noctalia grid

After (with resolver)

Adwaita - List View:
pic of noctalia with icon resolver adwaita

Adwaita - Grid View:
pic of noctalia with icon resolver adwaita grid

Papirus Dark - List View:
pic of noctalia with icon resolver papirus dark

Papirus Dark - Grid View:
pic of noctalia with icon resolver papirus dark grid

Building

cd Services/Icons/icon-resolver
cargo build --release

Testing

Tested on Arch Linux with Hyprland using Papirus-Dark, Adwaita, and hicolor themes.

Known Issues

  • Dock icons may show as fallbacks on shell startup if apps are already running. Icons update correctly when Dock refreshes (like opening a new program).
  • Custom command icons (>emoji, >clip, >calc, etc.) currently show fallback icons for two of the icons instead of proper.

Submitting as POC - feel free to use, modify, or close. No expectation of merge or maintenance.

@feltfomo feltfomo marked this pull request as ready for review December 27, 2025 11:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant