koehr.ing/content/stack.smd
2024-09-16 22:02:39 +02:00

81 lines
8.5 KiB
Text

---
{
.title = "Stack",
.date = @date("2024-08-30T00:00:00"),
.author = "koehr",
.draft = false,
.layout = "page.shtml",
.description = "As a software engineer, the tools I use define how I work and I find it inspiring to see which tools other people use.",
.tags = [],
}
---
---
This page focusses on Software. For Hardware, check [/setup](/setup).
---
My software stack is pretty old-school but still modern. I prefer CLI applications for almost everything, the only GUI programs I usually run are browsers, image manipulators and LogSeq.
## <span title="Operating System">OS</span>: 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.
## <span title="Desktop Environment">DE</span>: 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 + <s>zellij</s> tmux + zsh + starship
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 [tmux](https://github.com/tmux/tmux/wiki), which is a terminal multiplexer similar to [screen](https://www.gnu.org/software/screen/) and [zellij](https://zellij.dev). It allows me to run multiple applications in one terminal, keeps sessions alive after closing the terminal emulator and so on. I tried the newer zellij for a bit, but ended up configuring it to feel a lot more like tmux, because I'm so used to it and eventually I switched back to tmux.
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.
The prompt is powered by [starship](https://starship.rs), with a custom theme. Starship is extremely fast, despite offering a lot of information in your prompt, that would otherwise slow down your terminal significantly. This comes with the downside of a bit less flexibility, compared to a custom ZSH theme.
## Browser: Firefox..based?
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. Unfortunately, Mozilla is known for questionable decisions from time to time, especially regarding the privacy of their users, so I'm looking for alternatives all the time. Good candidates seem to be [Librewolf](https://librewolf.net/), [Floorp](https://floorp.app) and [Zen Browser](https://www.zen-browser.app/), but I have yet to give them a thorough try.
### Librewolf
I dismissed LibreWolf, because it seems like a downgrade. Pretty sure, it has great security, though.
### Floorp
I used Floorp for a few weeks and I liked it a lot. The out-of-the-box support for vertical tabs and tab groups had the biggest impact on me. The interface seems a bit cluttered if you activate all the bars, but they can be deactivated. I had some issues with focussing and hover effects from time to time though. No dealbreaker, but feels unpolished.
### Zen Browser
After trying Floorp, I switched to Zen Browser. Very positive is that it supports vertical tabs and tab groups out-of-the-box as well. Additionally it allows "zen mode" (hence the name, I guess), which hides bars and only shows them when hovering the respective corner of the window. This is really neat, although it needs a bit of familiarization to not see anything happen when opening a link in a new tab, for example. For now, Zen Browser is still alpha, but seems very usable. I had no issues yet.
## Other Tools: LogSeq, Poe, Bitwarden, Git, gh-cli...
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 <s>Mistral</s> [Claude 3.5 Sonnet](https://claude.ai), 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).
[gh-cli](https://cli.github.com/) is a tool I just recently tried. I knew about it for a while but never thought it would have a practical use. For people who use Github on a daily basis, gh-cli allows for a lot of things to be done in the command-line, that otherwise would have to be done in the browser. Creating a Pull Request in the command line? Marvelous!
There is a lot more and I might extend this list from time to time.