Per logical device type (slug), the ordered list of icon basenames lives in
config/icons.json under the types object. Each name is resolved as::
assets/icons/netneighbor/{N}x{N}/<basename>.png
(first existing size wins; see ui/icons.bundled_freedesktop_png_side_sizes).
- Edit
config/icons.jsonin the repository to change defaults shipped with the app. - Optional user override:
~/.config/netneighbor/icons.jsonwith the sametypesstructure (per-slug lists replace or extend shipped entries for that slug). Documented inCOMMUNITY_OVERRIDES.md.
There is no Freedesktop theme, no Windows Shell stock, and no QStyle fallback for types. If no basename matches, assets/icons/unknown.png is used when present.
Square folders (16x16 … 1024x1024, etc.) under netneighbor/ are auto-discovered.
The icon field may still name a file under assets/icons/ (e.g. router.png). If that file exists, it is shown before the type pack (device row logic in the UI).
~/.config/netneighbor/custom_icons/*.png — picked in GTK/Qt device icon dialogs (ids custom:filename.png).
- Add the slug and basename list under
typesinconfig/icons.json. - Add matching PNGs under
netneighbor/{N}x{N}/. - Wire the type in discovery /
device_types.jsonas today.
Ensure fallback.icon remains set to unknown.png where applicable in device_types.json.