shift-shell/icons/org.shift.icons
2026-05-19 09:18:32 +02:00
..
actions/symbolic Add Shift icon theme and coverage guard 2026-05-17 08:56:33 +02:00
apps/scalable Add Shift icon theme and coverage guard 2026-05-17 08:56:33 +02:00
places/symbolic Add Shift icon theme and coverage guard 2026-05-17 08:56:33 +02:00
preferences/scalable Add Shift icon theme and coverage guard 2026-05-17 08:56:33 +02:00
index.theme Unify Shift theme identity 2026-05-19 09:18:32 +02:00
README.md Add Shift icon theme and coverage guard 2026-05-17 08:56:33 +02:00

Shift Icon Theme

org.shift.icons is the icon theme selected by lookandfeel/contents/defaults. It inherits only hicolor, so shell-owned glyphs used by the Shift UI need to exist in this theme or in the local hicolor source icon set. The SVG glyphs are adapted from Phosphor Icons and licensed through the scoped REUSE metadata in .reuse/dep5.

Theme paths used here:

  • actions/symbolic/: symbolic shell glyphs used by QML controls, status indicators, quick settings, window controls, and category icons.
  • places/symbolic/: symbolic place glyphs used by the dock and shell surfaces.
  • apps/scalable/: colored launcher icons for desktop-file app icon names that are part of the default Shift UI.
  • preferences/scalable/: colored System Settings category and module icons for names that should not fall back to monochrome action glyphs.

Keep preferences/scalable before actions/symbolic in index.theme. System Settings looks up category and KCM module icons by name, and the icon theme specification searches theme directories in order. If symbolic action aliases come first, names such as preferences-desktop-sound, preferences-system-time, or network-wireless-symbolic resolve to dark monochrome SVGs instead of colored preference icons.

When a QML icon is owned by the shell, render it as a masked icon with an explicit theme color:

Kirigami.Icon {
    source: "icon-name"
    isMask: true
    color: Kirigami.Theme.textColor
}

Use the same pattern for shell button properties such as iconName and iconSource. Do not force isMask for dynamic application icons from task, notification, applet, or launcher models; those can be colored app icons.

If a required icon name is only an alias for an existing glyph, keep it as a same-directory symbolic link, for example rotation-allowed-symbolic.svg -> rotation-allowed.svg.

Run the coverage guard after adding or renaming shell icon sources:

bash tests/check-shift-icon-theme.sh

The same check is registered with CTest as shift-icon-theme-coverage. When Plasma packages are installed, the guard also scans their desktop metadata and QML icon fields so desktop shell, KCM, and applet icon names do not silently fall back to Breeze-only glyphs.