

Mentioning ‘no root’ keeps it simple and welcoming for beginners while still addressing the concern. And no, this is not for Mac.


Mentioning ‘no root’ keeps it simple and welcoming for beginners while still addressing the concern. And no, this is not for Mac.


It works partially with Flatpaks on XFCE (or any desktop)
It can change the icon for the Flatpak launcher that appears in your menu. It edits the user .desktop file that Flatpak generates (usually in ~/.local/share/applications/).
However, Flatpaks are sandboxed, so changing the icon inside the Flatpak itself (what you see when the app is running) is not possible with this tool — that would require modifying the Flatpak bundle.
So: menu/panel icon = yes. In-app icon = no.


It should work with most window managers, but with some limitations. kAppIcon edits user-level .desktop files and installs icons into your personal ~/.local/share/icons/hicolor theme. This is the standard freedesktop way, so it works on any desktop/WM that respects the spec (most do).
However: The GUI is built with PyQt6, so you need a working Qt6 environment (works fine on Wayland too). Some features like automatic icon cache refresh or menu updates depend on the desktop environment (Plasma does it best, but it also runs gtk-update-icon-cache for GTK-based setups).
On pure minimal WMs (i3, Hyprland, etc.) it will still apply the icons, but you may need to restart your menu/panel or run update-desktop-database manually sometimes. If you test it, let me know how it goes.


The shell + inline Python bits are mostly because I forked from the original macosicons-linux project, which already used that pattern. The shell script is convenient for installation tasks (XDG paths, optional deps, desktop entry, cache updates, etc.) ; things that feel natural in bash for small Linux tools. For the CLI: the small Python calls are quick one off things, not performance heavy. The main GUI is pure Python/PyQt6 of course. You’re right though: spawning Python multiple times isn’t the most efficient, and inline code can be messy with escaping. It’s more pragmatic than beautiful. I kept it this way to get things working fast, which is not ideal long-term. If there’s a small user base and the program is actively being used, I’ll probably rewrite the whole thing.


This design is inherited from the original macosicons-linux project by system-rw. The shell script + inline Python approach was already there for handling installation, XDG paths, desktop entry creation, icon cache refresh, and other system-level tasks. I kept the same structure when I forked and expanded it because it works well for a small utility ; shell for the “plumbing”, Python/PyQt6 for the actual GUI and logic. It’s pragmatic rather than pure. I might move more of it to a fully Python app in the future as the project grows, but for now it keeps things simple and close to the original setup.


Being on leave does give me the time and mental space to really focus and iterate quickly, I suppose. :)


The only “AI” involved was occasional use of GitHub Copilot for trivial autocomplete/suggestions, the same way many developers use it for boilerplate. All architecture, features, UI design, and logic are 100% human-made.


It is a continuation of the work started by system-rw, who was the initiator for creating macosicons-linux. His use was to apply (mac) icon sets in batch, downloaded from some website. His software was on version 2.0, so when I forked it and modified the program to do many other things, it became version 3.0. I liked the idea of easily changing icons in a way that is user friendly, but I found that system-rw’s solution was too narrow and focused for only one specific goal. I broadened it to be a comprehensive icon editor / replacer. I did upload it a few hours ago, indeed, and that is why I am trying to get people to be aware of the app… It’s because I feel it could be a useful tool for opendesktop users.


But this does more than that. Not only do you not have to deal with paths, it instantly shows you any icon from any theme installed, You can also opt for creating your own icon on a canvas, or import an image ‘jpg, webm, png’ and have it made into an icon. You can choose the shape of your icon (round, rounded corners, square). Heck, you can even import a picture with multiple icons and zoom/center the one you want. Sure, all of it is possible manually, but this tool makes it very easy, and creates backups where you can easily revert.
Unfortunately that’s not possible with this tool (and not really recommended). Flatpaks are sandboxed and their bundles are read-only by design. Modifying them directly would break the sandbox and cause update problems. What kAppIcon can do is change the launcher icon that appears in your menu and panel for the Flatpak, that works fine. If you want to change the icon inside the running Flatpak app, you’d need a different approach (like runtime overrides or repackaging the Flatpak), which is outside the scope of this tool.