Satisfy Your Inner OCD: Introducing `inifmt` for Pretty INI Files

avatar
(Edited)

Hey everyone,

Today's post is about a little command-line tool I built for a very specific, and perhaps slightly obsessive, reason. I'm a bit OCD when it comes to formatting, and I've always found .ini style configuration files with misaligned equals signs to be visually jarring. They work fine, but they just don't look nice. I looked at the inifmt that was available in the VSCode marketplace and underneath was an awk script, but didn't have many options.

So, because this is what we developers do, I built a tool for my own convenience to fix it. I call it inifmt.

What Does It Do?

inifmt is a simple utility written in Go that reads an .ini file and reformats it to perfectly align the equals signs, along with other normalizations like trimming excess whitespace.

For example, it can take a messy file like this test.ini:

; Test INI file for inifmt
; This file contains various INI formatting cases

[section1]
key1=value1
key2 =  value2
key3   =value3

[section2]
# Another comment style
longer_key_name=should_align
short=value

[section3] ; Inline comment
# Mixed comment styles
spaces   =   should   be   normalized
no_spaces=should_work_too

And with a simple command, turn it into this beautifully aligned test2.ini:

; Test INI file for inifmt
; This file contains various INI formatting cases

[section1]
key1            = value1
key2            = value2
key3            = value3

[section2]
# Another comment style
longer_key_name = should_align
short           = value

[section3] ; Inline comment
# Mixed comment styles
spaces          = should be normalized
no_spaces       = should_work_too

It just looks so much better!

Ah, much better! It's a small thing, but it makes config files so much easier to scan visually.

How It Works & Key Features

The tool is designed to be simple and flexible. It can read from a file directly or from standard input, so you can pipe content to it. It also has a few flags to control its behavior:

  • Global vs. Per-Section Alignment: By default, it aligns everything based on the longest key in the entire file. If you prefer to align keys only within their own [section], you can use the --per-section (or -s) flag.
  • In-Place Writing: If you want to modify the file directly, you can use the --write (or -w) flag.
  • Simple Formatting: If you don't want the alignment and just want to normalize the file to have single spaces around the equals sign, you can use the --single-space (or -u) flag.

Where to Find It

While I built this to scratch my own itch, I figured others might find it useful too. The code is open source and available on GitHub. The README has instructions for installation and usage.

It’s a simple tool, but it's a great example of building something just because you want your digital workspace to be a little bit tidier. Let me know what you think!

As always,
Michael Garcia a.k.a. TheCrazyGM



0
0
0.000
3 comments
avatar

I bet that your OCD about formatting is one of the traits that makes you such a good coder. 😁 🙏 💚 ✨ 🤙

0
0
0.000
avatar

You are probably not wrong, there are a lot of times that something works, but I just can't leave well enough alone, when it's just "not right"

0
0
0.000
avatar

I very much understand that, as I'm that way in a few endeavors as well. Good enough is good, and often gets the job done, but tasks done well is better, especially over the long term. 😁🙏💚✨🤙

0
0
0.000