*As a software engineer, the tools I use define how I work and I find it inspiring to see which tools other people use. This page focusses on Software. For Hardware, check [/setup](/setup).* Last updated: 2024-05-13 My software stack is pretty old-school. I prefer CLI applications for almost everything. The only GUI programs I usually run are browsers, image manipulators and LogSeq. ## OS: Fedora Linux It all started with Real Red Linux 2000, a special millenium version of [RedHat Linux](https://en.wikipedia.org/wiki/Red_Hat_Linux). I don't know for sure, but I think it was based on RedHat 6.1 or 6.2. Over the years, I first used different RPM based distributions, then switched to [Gentoo](https://www.gentoo.org/) for a while, before getting annoyed by the compiling frenzy and discovering [Arch](https://archlinux.org/). When Arch made the switch to systemd, I found Void Linux and stayed with it for years. At some point, not many years ago, I went with [Fedora](https://fedoraproject.org/) and it struck a nice middle ground between customizability and "it just works". Thanks to Fedora Spins, it is now easy to have a more standard system on my work laptop and a rather customized one on my private laptop, without too many differences in the foundation. I use official the [Sway Spin](https://fedoraproject.org/spins/sway/) on my private laptop. ## DE: GNOME vs Sway Over the years I got used to tiling window managers. Honestly, I tried almost all of them and went from [hyper-configurable](https://xmonad.org/) to [super minimalist](https://dwm.suckless.org/). I ended up - as usual - somewhere in the middle, with [i3](https://i3wm.org/) and [Sway](https://swaywm.org/). My work laptop has a GNOME desktop with some extensions, that make it work well for me. My typical work flow involves full screen applications and many desktops. I rarely have more than one window on one screen. That is why I didn't have too much of a hard time to switch from [dwm](https://dwm.suckless.org/) and similar tiling window managers to GNOME, because it uses MacOS-like gestures to work with desktops. Extensions like [Maximize Lonely Window](https://extensions.gnome.org/extension/6127/only-window-maximize/) help as well. There used to be another extension, [Maximize To Empty Workspace](https://extensions.gnome.org/extension/3100/maximize-to-empty-workspace/), which was even closer to my usual way of working. But it is not supported in newer GNOME versions. ## Editor: Helix Most of my life, I used [ViM](https://www.vim.org/). It made me more productive and helped me to focus on the things that matter most for my productivity. One day, I found [Kakoune](https://kakoune.org), which blew me away by being so similar and yet different to ViM, in a (in my opinion) good way. What Kakoune does is to to switch around the command order. While ViM's command language is VERB-MODIFIER-OBJECT. For example: `d2w` means delete two words. Kakoune switches that to MODIFIER-VERB-OBJECT and introduces selecting and non-selecting movement, which allows you to see your selection before applying an action. `d2w` changes to `2Wd`, which translates to select next two words, then delete them. I finally settled with [Helix](https://helix-editor.com/), an editor that uses Kakounes command language, but implements many useful things by default, while still being very configurable. ## Terminal: foot + zellij + zsh Almost all of my day-to-day applications are in the terminal. I am so used to it, that I started trusting GUI applications less. This is obviously my issue, but luckily I'm not alone, so many great CLI applications exist. I use [foot](https://codeberg.org/dnkl/foot) as terminal emulator. It is lightweight, supports 24bit colours and works with Wayland. Inside foot runs [zellij](https://zellij.dev/), which is a terminal multiplexer similar to [screen](https://www.gnu.org/software/screen/) and [tmux](https://github.com/tmux/tmux/wiki). It allows me to run multiple applications in one terminal, keeps sessions alive after closing the terminal emulator and so on. I actually configured zellij to feel a lot more like tmux, because I'm so used to the latter and honestly I might just switch back to tmux, who knows. My shell of choice is [zsh](https://www.zsh.org/) with [oh-my-zsh](https://ohmyz.sh/). It is by far the most versatile shell and the only one (to my knowledge) that supports RPROMPT, a prompts at the end of the line. ## Browser: Firefox My browser of choice is [Firefox](https://www.mozilla.org/de/firefox/), because I want an open and diverse internet. Firefox is a great choice and offers lots of features, like direct PDF support, privacy features out of the box and great synchronisation. Chrome and Chromium-based browsers are great as well, but if everyone uses the same browser, we'll end up with whatever the company behind this browser wants the internet to be. ## Other Tools: LogSeq, Poe, Bitwarden, Git... Of course, I use a lot more tools in my day-to-day work. I use [LogSeq](https://logseq.com/) for knowledge management. It is similar to Evernote, Obsidian or Notion. For me it hits the mark between flexibility and structure. I use it for everthing from todo lists to planning long D&D campaigns. [Poe](https://poe.com/) allows access to all kinds of generative intelligence tools, like LLMs ("ChatGPT") and image generators. I mostly use Mistral, but also switch between models from time to time. They help me with brainstorming and sometimes I misuse them to write JSDoc comments for me. [Bitwarden](https://bitwarden.com/) is a fantastic password manager with lots of utilities. It works so that you don't need to trust the server provider, because everything runs on the client (for example in a browser plugin) and is encrypted locally before being sent to the server. The best thing is, that I can host a bitwarden server myself, using [Vaultwarden](https://github.com/dani-garcia/vaultwarden). [GIT](https://git-scm.org) is the most widely used source code management as of today. Although I see some strengths in other systems, Git is by far good enough for all my needs. I host my own [Forgejo](https://forgejo.org/) git server at [git.k0r.in](https://git.k0r.in). There is a lot more and I might extend this list from time to time.