cover

31 May 2025

Custom Icons for My Filesystem

2m32s
rust
windows
icons
filesystem

Have you ever looked at your Windows folders and thought these icons need some personality?

I did.

So I built windows-fs-icons — a fully custom icon set for my Windows filesystem. I designed or modified each icon using Affinity Designer, then wrote a Rust application to automate converting them into .ico format for use on Windows.

Along the way, I ran into a few challenges, like ensuring all icons were perfectly square and writing a custom pipeline for converting SVGs into .ico files.

Let me walk you through the process.

Designing the Icons

The first step was visual - drawing the icons themselves.

I created or remixed SVG versions of popular app icons, folder types, and tools I frequently use using Affinity Designer.

However, Windows icon files (.ico) are very particular:

- They require square dimensions, like 256x256.

- They often embed multiple sizes, but for my use-case, a single high-res size sufficed.

Converting SVG to ICO

I initially tried writing the converter in Go, but found that good SVG rendering and ICO encoding support were lacking — especially when it came to scaling and padding. So, I turned to Rust. Here's the script I built:

- Reads all SVG files from a directory

- Converts each to a centered, padded 256x256 PNG

- Color all icons in the default yellow of a windows folder

- Converts the PNGs to proper ICO files using the ico crate

Tip: Windows expects icons to be square, typically 256x256, and you can bundle multiple resolutions, but I focused on single-size icons for simplicity.

Applying Icons in Windows

Once you have your ICO files ready:

1. Right-click a folder and choose Properties

2. Go to the Customize tab → Click "Change Icon"

3. Browse to your custom ICO file and apply

You can also use a third-party tool like IconPackager or tweak shortcut icons to point to your new files.

Pro tip: Keep your ICOs in a centralized folder so you can reapply them after reinstalls or across machines.

Conclusion

This project was a fun dive into Rust, vector graphics, and OS customization. It solved a real itch: making my system look the way I wanted.

If you're new to Rust, building a CLI like this is a fantastic beginner project that covers:

- File I/O

- Error handling

- Working with external libraries

- SVG rendering and image manipulation

Even if you're not looking to build an icon converter, I highly recommend tinkering with similar projects to deepen your systems knowledge while making something visual and satisfying.

If you'd like to create your own setup, fork the repo, modify the SVGs, and start customizing your own digital space. ✨