The icons and themes are generally looked up in a set of directories. Applications, by default look for them in the $HOME/.icons, then inside $XDG_DATA_DIRS/icons, and lastly inside the /usr/share/pixmaps (exactly in that particular order). The applications are allowed to make further additions to the icon directories in this list, and the users are allowed to change or extend the list in the desktop-specific or application-specific way. All these directories have themes stored inside of them as subdirectories. Please also note that a theme can be spread over different base directories by having the subdirectories of same name. Using this method, the users can extend as well as override the system themes.

To provide for a place for the third-party applications’ icon installations, there should always be a theme with the name ‘hicolor’. Implementations must look into the ‘hicolor’ theme in case an icon can’t be located in the present theme.

As mentioned above, every theme gets stored in the form of a subdirectory inside the base directories. The theme’s internal name is same as that of the subdirectory, despite the fact that the name visible to the user may be different. Theme names are all case-sensitive and can only consist of ASCII characters. They cannot have a space or comma too.

One of the theme directories must have a file named index.theme which provides the general attributes and description of the theme. The first file of this name located during the search is used.

Theme directory also has subdirectories consisting of image files. Every directory consists of icons designed for specific icon size as indicated in the index.theme file. The subdirectories can go several levels deep. These image files can be SVG, XPM or the PNG type, and hence their file extensions must accordingly be .svg, .xpm or .png respectively.