I made my first functional and more or less complete program, and I chose Nim for the task:
GitHub repository: https://github.com/maxwelljens/gibman/
gibman is a simple CLI utility designed to do one thing: to run presets for your favourite DOOM engine. Although chiefly designed with GZDoom in mind, other engines should be supported. The program operates on a simple YAML file, with which you can set up all of your engines, IWADs, and WADs. Both Windows and Linux are supported.
Given the following configuration in $XDG_CONFIG_HOME/gibman/gibman.yaml, or ~/.config/gibman/gibman.yaml if $XDG_CONFIG_HOME is not set:
engine:
- name: gzdoom
path: /path/to/gzdoom
iwad:
- name: doom2
path: /path/to/DOOM2.WAD
wad:
- name: eviternity
path: /path/to/Eviternity.wad
preset:
- name: example
description: A description to help you remember what the preset is for
engine: gzdoom
iwad: doom2
wad:
- eviternity
args: []
Run the following to run your example preset:
gibman -p example
This will run GZDoom with the DOOM 2 IWAD and Eviternity WAD. More information can be found in default_config.yaml, which is also placed in $XDG_CONFIG_HOME/gibman/gibman.yaml when running the program for the first time.
More information about the program can be found on GitHub. On here, I'll say a few things about the project instead. Basically, I am not that much of a software developer, I just like technical things, programming being one of them. I was always fascinated by the elegance of Nim, and how it can create powerful machine code from Python-like syntax. However, as said, I am not really a software developer, so it took me a while to actually get around to making anything concrete and complete with it.
As far as I am concerned, Nim was the perfect choice for the task. It's easy to read, write elegant code in, and cross-compiles small binaries effortlessly for dependency-free distribution of software. While I did make gibman chiefly for personal use, I thought it might have been worthwhile to make it available to the public as free software, since it solves a non-trivial problem and fills in a niche.
That being said, I hope there's anyone here who likes DOOM and the many mods available for it. Feedback about the program is most welcome, particularly with regards to the engineering of the source code, since it is my first ever real software project. Plenty of stuff I was unsure about, like reliably finding the configuration file in the filesystem, since it shouldn't make a different whether your file is named gibman.yml or gibman.yaml, and so on. It was an interesting exercise, to say the least.
Indeed, this was in my sights when I started developing it. However, maybe my google-fu is bad, but I was unable to find any library that cuts out most of the work in doing that. I am aware of the splitFile function and iterators, so I can do it myself, but I first wanted to get an MVP out of the way. I noticed that it is easy for everything to blow up due to ambition and spaghetti code, so I kept the 1.0.0 release as basic as possible.
If I do get around to adding more features to the program, though, that is definitely next on the agenda.