I want to merge the standard Ubuntu Mono icon set and the Faenza icon set. I would like to keep the standard Ubuntu icons in the panel (including icons for the likes of Dropbox, file transfers etc.) and replace all the other application icons with the Faenza versions.
How would I go about this?
I think the best way to merge icon sets is to create what I call a lightweight icon set. This icon set lives in your home directory so it won't be clobbered by system updates, but it links to the system icon sets, so it will be updated along with them. These themes won't be available to other users on your system.
Lightweight Icon Sets
Ubuntu's theme manager will look in
~/.icons
and/usr/share/icons
for icons sets. Anything in~/.icons
overrides/usr/share/icons.
So you can copy an icon set from the system dir to your home dir to customize the icon and you only include the parts you want to change!Generally, I think it's best to make your own icon sets that use the system ones. You can do this by creating an icon set, a index.theme file, and adding some icons. However, when you are combining different icon sets, you'll need to override their
Inherits
attribute so you can set your own order of precedence.Creating an Icon Set to Merge Themes
Let's create a super-mono icon set:
Now we have a new icon set in Appearance that is exactly like Faenza-Darkest.
To merge our two themes, we change super-mono theme to inherit from ubuntu-mono-dark and then Faenza.
That should be enough for richzilla, just select super-mono in Appearance.
Adding Custom Icons
We can also add individual icons to this icon set:
And now our super-mono theme combines ubuntu-mono-dark and Faenza, except it uses one icon from Faenza-Darkest. See later sections to use more than just a few icons.
It's important to see that I copied the index.theme from Faenza-Darkest and then used icons from Faenza-Darkest. The index.theme file says where the icons might be. If you want to pull individual icons from different icon sets, you'll need to merge their index.theme files. You can look at the files and you'll see a field called Directories that lists all folders containing icons. Then you'll see other fields that describe these folders. If you add an icon that isn't described by these fields, then that icon will be ignored. You can find more information in the index.theme spec.
Advanced: Selectively Combining Three Icon Sets
I also love ubuntu-mono icons. I love Faenza's app icons, but I don't like Faenza's mono icons (the indicators and buttons). I also like elementary's icons. So I want to combine these three icon sets. As far as I know, the best way to do this is by isolating the icons you like.
To do this, we need to tell ubuntu-mono-dark to not inherit from anything (so we can also use Faenza and elementary).
You'll notice that the ubuntu-mono-dark icon set is now broken. It will be missing icons that are provided by Humanity-Dark and other icon sets it inherits from. This change will only affect your user.
Now we can make a new icon set that uses the app icons from Faenza.
This Faenza-apps icon set is also broken. It only has icons for apps. All other icons are missing because we removed the Inherits.
Now we create the icon set we'll use. Our icon set will contain no icons, it just connects our other icon sets.
Now we should be able to select merge-mono-dark in Appearance and we'll have a beautiful new icon set! (Note: We shouldn't need to merge index.theme files because we're not adding icons from different icon sets to merge-mono-dark. Instead, we're using Inherits to automatically merge the icon sets.)
Explanation of some commands
I use a lot of Terminal commands to simplify this answer, but here's a description of what they do.
This creates a pointer in your icon set to the system icon set's gtk-paste icon. That way no additional hard disk space is used and your icon set is updated along with the system's icon set. If you don't want that, then replace
ln -s
withcp -r
.Means to replace all
dark
withlight
in ~/file.The
.*$
means to match any text (.*) to the end of the line ($).Here we're inserting ubuntu-mono-dark in front of the Inherits list because we're looking for
Inherits=
and replacing it withInherits=ubuntu-mono-dark,
Anywhere I use
sed
, you could edit the file and apply edits manually instead.Edit this file below with your favourite text editor
/usr/share/icons/ubuntu-mono-(which mono set you want)/index.theme
and put Faenza at the start of the inherits line.