# 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`.
The theme sets `FollowsColorScheme=true`; symbolic SVGs use `.ColorScheme-Text` and `currentColor` so KDE applications recolor them for both dark and light color schemes.

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:

```qml
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:

```sh
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.