I worked for long time to build GISes (e.g. JGrass, uUdig and so on), an adventure that was supported and eventually taken in charge by Hydrologis. After accepting the reality the QGIS won the battle, I am not still satisfied with it and always looking to alternatives. One that I practice a little is to use as vehicle for mapping Jupyter and Jupyterlab. Therefore, copying around, I was able to produce decent maps. You can find one of the result of my search in the figure below.
Nothing really original from me: I copied from the bests I found and adapted to my desiderata. Clicking on the Figure above you access the Jupyter notebook where all the procedure is explained. Aa I wrote, it is very much a work in progress. Therefore any suggestion is welcomed.