Dark Icon Theme (WIP)

why not porting existing better look icon theme compatible with dark mode, i vote for numix

hey, when i want replace icons in haiku i must download source code replace svg files, compile haiku make image and so… right?

Haiku dont use svg icons

For me, the current icons works very well in dark mode as well, no complaints there. Maybe the selected background colour doesn’t work well with the general icon colours.

Yeah this one at least, but some apps probably use older/other ways like fetching from resources and converting them to bitmap manually.

Good day,

The point of this Icon theme is to get more and better knowledge of some desing stuff. I didn’t know plenty of these when I first made the LibreOffice icon, if so, it would be better.

While it seems that the right way to add an icon as attribute to a file with the addattr command, I did a test:
FoldersBefore

I created two folders, and listed their attributes to compare. Then added the personalized icon by both methods, addattr and resattr:
FoldersAfter

Resulting in the same output. Then again, the .rdef file used as source for the icon attribute only has the “resource vector_icon” line. This has to be modified manually as Icon-O-Matic adds other stuff there in the line that makes the conversion to .rsrc not to work (rc iconfile.rdef throws an error that the rdef file is not “clean”).

So, if keeping only the icon inside the .rdef file, the result seems to be the same (correct me if I’m wrong on this) wether I use addattr or resattr. I know I still need more knowledge on the .rdef file format for preparing executables prior to packaging, I’m on it.

Now, why this? Because modifying the .hvif does not seem to be so straightforward as the file looses all ids from paths, shapes and styles, thus making it hard to change anything inside the .hvif. I found a way to circumvent this for the Gamejectder program, in order to set project folder’s color randomly each time a new project is created by doing this:
ColoredIcon

On the left, I have the .rdef file with just the icon info. On the right, the Python script that changes the color of the folder. In order to achieve this behaviour, instead of using gradients for the folder icon, I used a solid color as a base, and added a layer on top with a black to transparent gradient. The solid color used had nothing to do with the other colors involved in the icon, therefore I can fetch its hex code “easily” from the .rdef file and substitute it with another color, its hex code randomly picked from a range that does not use white nor black nor some colors close to those two from the hex range.
With the modified color .rdef file, I created a new .rsrc that I use to change the icon of each folder that I create within the project folder.

As I don’t know yet so much about Haiku, I just thought that this could be a way to easily modify the outline of an icon, from black to whatever color. It can be automated as I did with the Python script.

On the other hand, this seems to work with files and folders, all but those that are readonly in the Haiku OS. I can’t change the icons of the /boot/home/config, /boot/home/Desktop, /boot/home, nor any disk… :crazy_face:
Then again, I did the same test on Godot software for Haiku. I used version 3.2.2 which has a default Haiku application icon, the 3 cubes. I unpackaged the .hpkg got the executable file and added the icon with resattr, though I didn’t check the attributes before and after to certify that the original attributes stay the same but the icon one. Homework to do. Then I repackaged the software and installed it, and voila, the icon appeared on the Deskbar (check here).

So it’s doable (changing icons), though it’s hard, and only where the OS is not readonly. I don’t see users unpackaging each .hpkg and modifying its icon one by one… :rofl:

I’m sure there will be a better way soon. If you know any now, let me know too :wink:

Regards,
RR

Yes this won’t work on packaged apps.

I suppose the application Filetypes settings don’t work for packaged apps, such as changing the icon?

I feel like we have a few problems related to the package system, such as this and the issue where Tracker cannot save the settings for read-only folders. They almost seem kind of related so maybe there could be some kind of general solution, likely involving files stored somewhere writeable such as somewhere under ~/config. I have somewhat of a plan I want to try for Tracker at least.

1 Like

Hvif is an export format. You should save your icons in the native icon-o-matic format if you want to preserve the object names, and convert to hvif only when you are done and want to set the icon.

On resources and attributes: Tracker normally gets its data (including icons) from attributes. For this, addattr is enough. However, attributes are stored in a special way in the filesystem and tend to get lost easily (when downloading a file using http or ftp, when putting it in a tar archive, when storing it in a fat32 partition, or even when using tools like cp to copy a file)

For this reason, executables (but not other types of files) also have their icon stored in a resource. Resources are stored inside the file and survive most cases where attributes are removed. Resattr sets both the resource and the attribute, while addattr only sets the attribute.

I hope this clears up things a bit.

2 Likes

Good day @PulkoMandy,

Thanks for the explanation here. It’s clear now. I wrote that down so I won’t forget! :laughing:

You have already told me on IRC that I should use addattr for the folders so since then I do that, the test was just a test to see if there was any difference there using both methods, and because my experience with Icon-O-Matic and icons on Haiku has been somewhat… mmmm… different?:
1- I first used Icon-O-Matic and save the file as NameOfIcon
2- Then I thought that Icon-O-Matic’s default filetype was HVIF, so I started saving icons as NameOfIcon.hvif
3- Then I decided to create an icon for LibreOffice, so I did, and I saved it as LibreOffice.hvif, directly from Icon-O-Matic, no export
4- When uploading to Haikuports, I think was @humdinger who told me that Icon-O-Matic files are IOM, to save them as HVIF I should export them
5- Then I started to name Icon-O-Matic files as NameOfIcon.iom. HVIF exports as NameOfIcon.hvif. RDEF exports as NameOfIcon.rdef.
6- And rename all icons done before, from NameOfIcon.hvif to NameOfIcon.iom
:rofl: :rofl: :rofl: :rofl:

I certainly won’t forget about all these, though I think Haiku needs better documentation, or at least easier and inviting for newbies like myself :dizzy_face:

Thanks and regards,
RR

2 Likes

To be fair, the IOM page of the Userguide does explain the different Save/Export options.

2 Likes

Good day @humdinger,

That’s why the switch. If not, I would get to Haiku now and then and forget about that stuff again and again… and again… and again… aaaaand agaaaaaaain… :rofl: :rofl: :rofl:

Regards,
RR

Good day,

Finally, little by little… The already made icons are available as IOM (Icon-O-Matic) files for anyone to play around with (more will be added as soon as I make them and if I don’t break anything with Git):

Also doing some cleaning and arranging everything… hopefully something good will come out of this.

Regards,
RR

4 Likes

@leavengood - I realize that this is an old thread and comment, and I don’t want to start another war on the package management, but I do wish there was some work around to change a packaged app’s icon.

This is the only thing I could think of:
What I was able to do was to copy the executable out to a non-packaged folder and change the icon of the non-packaged executable using file-types and save it, and then launch from there, (also have to “identify” the copied (non-packaged) executable if I want it to work nicely when launching from my HiQDock).

1 Like

Sorry I missed this back in February. I have actually been thinking about Haiku app icons lately and I agree it would be nice to be able to change icons for applications without major hacks. Even without package management it is painful to have to change the icon by changing the resources in the app or changing the app icon within the icon attribute in BFS, because it would have to be re-done whenever an app is updated (I’ve also experienced this pain when changing the icon on applications in macOS.)

The easiest solution I can think of is just some sort of indirection. Deskbar asks the roster for icons (and probably similar for other apps like HiQDock), which I assume just loads the application files to get the icon. But if roster is (generally) the “source of truth” for app icons there could be some way to override the icon. In the end this would likely mean some files or settings somewhere under ~/config/settings but it could be exposed more nicely in the GUI somewhere, like Tracker or the FileTypes preferences.

Would it be possible for apps to have two icons in the resources, one for clear schemes and another for dark schemes? In this case in appearances app you could have a checkbox “Use dark icons” that would tell app server to use the second icon and so change them all at once. It would help to keep consistency and would avoid to have numerous incomplete set of icons.

2 Likes

It is possible for apps to include light and dark variants of their icons in their resources. The Tracker GetIcon methods and and AppFileInfo etc. would have to be reworked to support a dark variant.

1 Like

It seems to me you could draw a white outline around the icons in dark mode and it would solve most of the issue.

2 Likes

Oh, those darkened icons are ugly.

1 Like

Personally I think my icon theme back in ZETA was pretty slick :smiley:

5 Likes