General introduction to theming

There are many questions asked on the board that are addressed across various threads. This post is aimed to allow an efficient resource that users can use to answer their questions and be linked to by others.

Theming is one of the most important aspects of any Operating System. This is known, as you see reviews and commentary about users even going so far as to choose a distro based on its look and feel.
Look And Appearance = Brand image and marketing. In other words; Money. In this it becomes quite clear that a great many developers would much prefer to pull control over theming out of the users hands and place it in developers hands. A specific Look creates Product recognition, which is essentially, advertising for that product. Users being able to recognize a distro or a Desktop Environment or even an application at a glance = Free Advertising.
One Linux Desktop Environment fullheartedly took the lead in this using Client Side Decoration or CSD.

CSD's vs. SSD's

Client Side Decoration is the practice of applications being responsible for governing the look and feel of an application, instead of it being managed by the desktop environment. This is very non-standard, as it removes key and necessary components that the desktop needs to be responsible for and delegates it onto app developers to fill that all in for the desktop. Some Application Developers desire this in order to create Product Recognition. This is common in Internet Browser applications. Many others, however, do not feel it is appropriate for the desktop developers to dump their responsibilities onto app developers that either must hire more people well versed in handling that code, or take on that additional work and learning themselves. Clearly, in Linux, we can see where certain developers lobby for this and where certain other developers lobby against it.
CSD means that the titlebars or headerbars, borders and other Windowing Elements are managed by one .css file, rather than by a Window Manager. This creates inconsistency and Containers placed within a widget will auto-adjust the size of the widget, not something that is desirable in a static headerbar. This also creates inconsistency where some applications only follow certain classes within the .css file rather than classes followed by others. You can see elements taking different corners, different shapes and different sizes all within One Desktop Environment. This effect is observed only on CSD desktop Environments.
It is noteworthy: Even Microsoft Windows does not engage in this behavior. Though, it could be argued that they have less need to do so because they charge for the product and can pay more attention to user feedback instead of dismissing it. However, as much in Linux relies on Donations, this means that an interested developer can make ever increasing "donations" to a Desktop Developer as the developments they wish to see get implemented over time. Clearly, a reason why user feedback may be getting ignored, due to other Corporate Interests.

There are some Pros to using .css for everything, but the cons vastly outweigh them. Many Pros you can find on the internet are a form of Misdirection, used to trick the user into wanting what the developer wants to meet the developers self-interest instead of what the user wants on the machine that they own.

Being informed as a user can help alleviate this struggle for control.

Server Side Decorations (SSD'S) are Window Managed Window titles and borders. The advantages here are clear: The ability to manage window snapping, sizing, auto-sizing, tiling and borders, without relying on a Shell. These tend to be consistent, uniform and regular, no matter what containers or widgets are placed within them. These can be themed separately from the containerized widgets, allowing the user still greater control.

Flatpak and snap

Flatpak and Snap are sandboxed applications that carry their dependencies with them.
Snap will not honor any system theme.
Flatpak can utilize flatpak'd themes or be instructed to honor the systetm theme using flatseal or with sudo flatpak override --env=GTK_THEME=Insert-theme-name-here command.
If you have an application that is not using your preferred system theme, you may use snap list or flatpak list to see if the application you are using is a Snap or Flatpak.

Installing a theme

Generally, a theme can be installed in /usr/share/themes for system-wide use (Elevating to root privileges, first.)
If you downloaded a .tar.gz or .zip, you must extract the theme directory, first.
You also can place it in /home, instead. Right click an open area if your home directory, create new folder and name it .themes
This is also true for icons: /usr/share/icons or ~./icons

If you performed the above but still do not see the theme listed in your theme manager, then the file may have been nested by its creator. For the theme to be visible to the theme manager, it must follow the correct path leading to the theme.index.
For example, if you downloaded "Pink-Theme" and it came as a .zip named "Pink-theme-master", that that extracted directory may be nested as a Master Directory, which then contains the individual variants of that theme as separate themes.
The solution is to Move the theme directory that contains the theme.index file to /usr/share/themes or to ~.themes


For the ignorant amongs us, it would be good if you stated what SSD's are.

Very good article @Aravisian/ About .css I learning that Cascading Style Sheets also on some servers administration they using ruby or another very interesting tools mysql,python, and many another cool stuff for administration. About themes they are changing to be more good for "eyes" but with lower funcionality for users what I agree in 100% with you @Aravisian and all this article.

I edited it in next to "Server Side Decoration" - I typed that in a bit of a hurry... I anticipated that I will need to add more; other commonly asked theming questions or points will likely come up, too.