Nucleus
OS integration

Icônes FreeDesktop

Constantes Kotlin typées pour la FreeDesktop Icon Naming Specification — utilisées par notification-linux, launcher-linux et toute UI Linux qui résout les icônes par thème.

Les thèmes d'icônes Linux fonctionnent par nom : au lieu de livrer info.png, on réfère dialog-information et le thème de l'utilisateur rend sa propre version. La spec FreeDesktop liste les noms canoniques. freedesktop-icons les expose en constantes Kotlin typées.

En bref

  • Hiérarchie scellée FreedesktopIcon qui reflète les catégories de la spec.
  • Noms custom, chemins de fichier, URIs file://, drapeaux ISO supportés.
  • Partagée par notification-linux et launcher-linux — généralement tirée transitivement.

Installation

dependencies {
    implementation("dev.nucleusframework:nucleus.freedesktop-icons:<version>")
}

Transitif

Si on dépend déjà de notification-linux ou launcher-linux, freedesktop-icons est inclus via api() — pas de déclaration séparée.

Démarrage rapide

import dev.nucleusframework.freedesktop.icons.FreedesktopIcon

val info = FreedesktopIcon.Status.DIALOG_INFORMATION
val open = FreedesktopIcon.Action.DOCUMENT_OPEN
val printer = FreedesktopIcon.Device.PRINTER

val custom = FreedesktopIcon.Custom("my-app-icon")
val path = FreedesktopIcon.Custom("/home/moi/icon.png")
val uri = FreedesktopIcon.Custom("file:///home/moi/icon.png")

val flag = FreedesktopIcon.flag("fr")

Fonctionnement

Chaque constante compile en son nom spec (par exemple dialog-information). Quand on la passes à un module Linux — notifications, quicklists, tray — la valeur est sérialisée sur D-Bus ou écrite dans un fichier .desktop en clair. Le thème actif de l'OS la résout en image concrète au rendu, le app suit donc le thème de l'utilisateur automatiquement.

Référence

Catégories

FreedesktopIcon est une interface scellée avec ces sous-types (chacun reflétant une section de la spec) :

CatégorieExemples
FreedesktopIcon.ActionDOCUMENT_OPEN, EDIT_COPY, MEDIA_PLAYBACK_START
FreedesktopIcon.StatusDIALOG_INFORMATION, DIALOG_WARNING, BATTERY_LOW
FreedesktopIcon.DevicePRINTER, CAMERA_PHOTO, INPUT_KEYBOARD
FreedesktopIcon.ApplicationINTERNET_WEB_BROWSER, MULTIMEDIA_VOLUME_CONTROL
FreedesktopIcon.MimeTypeTEXT_PLAIN, APPLICATION_PDF, IMAGE_PNG
FreedesktopIcon.PlaceFOLDER, USER_HOME, NETWORK_SERVER
FreedesktopIcon.EmblemEMBLEM_IMPORTANT, EMBLEM_FAVORITE
FreedesktopIcon.Custom(value)value class inline pour chaînes / chemins / URIs

Drapeaux

FreedesktopIcon.flag("us")   // "flag-us"
FreedesktopIcon.flag("jp")   // "flag-jp"

Cas d'usage

  • Icônes de tray qui suivent le thème utilisateur sous Linux — combine avec composenativetray via FreedesktopIcon.Custom("my-app") pour une icône symbolique par thème.
  • Icônes de notification — passe directement à notification-linux.
  • Quicklists du launcher — réutilise les mêmes constantes dans les actions .desktop.

Notes

  • Tous les thèmes n'implémentent pas tous les noms. Reste sur le set canonique FreeDesktop pour le meilleur taux de réussite.
  • Sur les plateformes non-Linux, les constantes compilent (ce ne sont que des chaînes) mais n'ont aucun effet visible.