You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
13 KiB
HTML

<!DOCTYPE html>
<html lang=en>
<head>
<meta charset="utf-8">
<base href="https://koehr.ing/">
<title>My Stack // the codeartist — programmer and engineer based in Berlin</title>
<meta name="description" content="Homepage, Portfolio and CV of Norman Köhring" />
<meta content="The personal page and weblog of Norman Köhring" name=description>
<meta content="Norman Köhring" name=author>
<meta content="the codeartist — programmer and engineer based in Berlin" name=DC.title>
<meta content="52.4595, 13.5335" name=ICBM>
<meta content="52.4595; 13.5335" name=geo.position>
<meta content=DE-BE name=geo.region>
<meta content=Berlin name=geo.placename>
<meta content="width=device-width,initial-scale=1.0" name=viewport>
<link href=https://koehr.in rel=author>
<link href=https://koehr.in rel=canonical>
<link href=https://k0r.in rel=alternate>
<link href=https://koehr.ing rel=me>
<link href=@Koehr@mstdn.io rel=me>
<link href=https://sr.ht/~koehr/ rel=me>
<link href=https://git.k0r.in rel=me>
<link href=https://threads.net/@coffee_n_code rel=me>
<link href=https://instagram.com/@coffee_n_code rel=me>
<link href=https://ko-fi.com/koehr rel=me>
<link href=https://reddit.com/user/koehr rel=me>
<link href=https://koehr.in/rss.xml rel=alternate title=RSS type=application/rss+xml>
<link href=/favicon.png rel=icon type=image/x-icon>
<link href=/style.css rel=stylesheet>
</head>
<body>
<main id="til" class="posts">
<header>
<h1>My Software Stack</h1>
</header>
<p><em>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 <a href="/setup">/setup</a>.</em></p>
<p>Last updated: 2024-05-13</p>
<p>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.</p>
<h2><span title="Operating System">OS</span>: Fedora Linux</h2>
<p>It all started with Real Red Linux 2000, a special millenium version of <a href="https://en.wikipedia.org/wiki/Red_Hat_Linux">RedHat Linux</a>. I don't know for sure, but I think it was based on RedHat 6.1 or 6.2.</p>
<p>Over the years, I first used different RPM based distributions, then switched to <a href="https://www.gentoo.org/">Gentoo</a> for a while, before getting annoyed by the compiling frenzy and discovering <a href="https://archlinux.org/">Arch</a>. 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 <a href="https://fedoraproject.org/">Fedora</a> and it struck a nice middle ground between customizability and &quot;it just works&quot;. 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 <a href="https://fedoraproject.org/spins/sway/">Sway Spin</a> on my private laptop.</p>
<h2><span title="Desktop Environment">DE</span>: GNOME vs Sway</h2>
<p>Over the years I got used to tiling window managers. Honestly, I tried almost all of them and went from <a href="https://xmonad.org/">hyper-configurable</a> to <a href="https://dwm.suckless.org/">super minimalist</a>. I ended up - as usual - somewhere in the middle, with <a href="https://i3wm.org/">i3</a> and <a href="https://swaywm.org/">Sway</a>.</p>
<p>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 <a href="https://dwm.suckless.org/">dwm</a> and similar tiling window managers to GNOME, because it uses MacOS-like gestures to work with desktops. Extensions like <a href="https://extensions.gnome.org/extension/6127/only-window-maximize/">Maximize Lonely Window</a> help as well. There used to be another extension, <a href="https://extensions.gnome.org/extension/3100/maximize-to-empty-workspace/">Maximize To Empty Workspace</a>, which was even closer to my usual way of working. But it is not supported in newer GNOME versions.</p>
<h2>Editor: Helix</h2>
<p>Most of my life, I used <a href="https://www.vim.org/">ViM</a>. It made me more productive and helped me to focus on the things that matter most for my productivity. One day, I found <a href="https://kakoune.org">Kakoune</a>, 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: <code>d2w</code> 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. <code>d2w</code> changes to <code>2Wd</code>, which translates to select next two words, then delete them. I finally settled with <a href="https://helix-editor.com/">Helix</a>, an editor that uses Kakounes command language, but implements many useful things by default, while still being very configurable.</p>
<h2>Terminal: foot + zellij + zsh</h2>
<p>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.</p>
<p>I use <a href="https://codeberg.org/dnkl/foot">foot</a> as terminal emulator. It is lightweight, supports 24bit colours and works with Wayland.</p>
<p>Inside foot runs <a href="https://zellij.dev/">zellij</a>, which is a terminal multiplexer similar to <a href="https://www.gnu.org/software/screen/">screen</a> and <a href="https://github.com/tmux/tmux/wiki">tmux</a>. 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.</p>
<p>My shell of choice is <a href="https://www.zsh.org/">zsh</a> with <a href="https://ohmyz.sh/">oh-my-zsh</a>. 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.</p>
<h2>Browser: Firefox</h2>
<p>My browser of choice is <a href="https://www.mozilla.org/de/firefox/">Firefox</a>, 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.</p>
<h2>Other Tools: LogSeq, Poe, Bitwarden, Git...</h2>
<p>Of course, I use a lot more tools in my day-to-day work.</p>
<p>I use <a href="https://logseq.com/">LogSeq</a> 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&amp;D campaigns.</p>
<p><a href="https://poe.com/">Poe</a> allows access to all kinds of generative intelligence tools, like LLMs (&quot;ChatGPT&quot;) 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.</p>
<p><a href="https://bitwarden.com/">Bitwarden</a> 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 <a href="https://github.com/dani-garcia/vaultwarden">Vaultwarden</a>.</p>
<p><a href="https://git-scm.org">GIT</a> 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 <a href="https://forgejo.org/">Forgejo</a> git server at <a href="https://git.k0r.in">git.k0r.in</a>.</p>
<p>There is a lot more and I might extend this list from time to time.</p>
</main>
<div id="spacer"></div>
<header id="header" class="small">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 832.4 143.1">
<path id="header-underscore"
d="M832.4 131.1q0 5.5-3.1 8.6-3 3.4-8.2 3.3h-75.5q-5.2 0-8.2-3.3-1.7-1.6-2.4-3.8-.7-2.3-.7-4.8 0-5.5 3.1-8.7 1.6-1.7 3.7-2.4 2.2-.8 4.5-.8h75.5q5.2 0 8.2 3.2 3 3.1 3 8.7z" />
<path id="header-bracket"
d="M731.9 81.4q0 6.7-6.5 10.7l-1 .6-74.3 39.2q-2.5 1.3-5.2 1.2-4.8 0-8.1-3.8-3.2-3.6-3.2-8.4 0-3.3 1.7-6 1.8-2.9 4.6-4.4l55.3-29.1-55.3-29q-2.8-1.6-4.6-4.3-1.7-2.7-1.7-6.2 0-4.7 3.2-8.4 3.3-4 8-3.7 2.7 0 5.3 1.2l74.4 39.2q3.3 1.7 5.3 4.7 2 2.8 2 6.5z" />
<path id="header-r"
d="M588.7 66.5q0 5-3.5 8.5-3.5 3.4-8.1 3.5-4.4 0-8.3-4.3-10-10.7-20.9-10.6-2.2 0-4.3.3-2.1.3-4 1-1.8.6-3.7 1.6-1.7 1-3.4 2.3-1.7 1.3-3.3 2.9-7.8 8.2-7.6 19.7V131q0 5.5-3.1 8.6-3 3.4-8.3 3.3l-2.2-.2q-1-.1-2.2-.5-1-.3-2-1-1-.6-1.8-1.6-1.7-1.6-2.4-3.8-.7-2.3-.7-4.8V51.6q0-5.4 3-8.6 3-3.4 8.3-3.3 2 0 3.7.6 1.8.6 3.3 1.8 1.4 1 2.2 2.7 1 1.5 1.6 3.3 11.8-8.4 27-8.4 10.6 0 21 5 11.3 5.4 17.2 14.5 2.5 3.7 2.5 7.3z" />
<path id="header-h"
d="M483.9 131.1q0 5.5-3.1 8.6-3 3.4-8.3 3.3-5.2 0-8.2-3.3-3.2-3.1-3.1-8.6V84.8q0-4.6-1.5-8.2-1.4-3.5-4.4-6.9-2.1-2-4.3-3.4-2.2-1.4-4.7-2-2.4-.7-5.3-.7-4.3 0-7.8 1.5-3.3 1.5-6.4 4.6-5.9 6.3-5.8 15v46.4q0 5.5-3 8.6-3.1 3.4-8.4 3.3l-2.2-.2q-1-.1-2.2-.5-1-.3-2-1-1-.6-1.8-1.6-1.7-1.6-2.4-3.8-.7-2.3-.7-4.8V11.9q0-5.5 3-8.6 3-3.4 8.3-3.3 5.2 0 8.2 3.3 3.2 3.1 3.2 8.6v33q1.5-1 3-1.6l3.2-1.2 3.4-1q1.6-.5 3.3-.8l3.5-.4 3.6-.2q4.4 0 8.5 1 4.1.7 7.9 2.4 3.8 1.6 7.3 4.1 3.5 2.5 6.6 5.8Q484 66 484 84.8z" />
<path id="header-e"
d="M387.5 111.1q0 1.2-.3 2.3-.1 1-.5 2l-.9 2q-6.6 12-19.4 19-12 6.6-25.4 6.6-20.8 0-35.8-14.6-15.9-15-15.9-37 0-22.1 15.9-37.1 15-14.6 35.8-14.6 3.9 0 7.8.7 4 .7 8 2.2 9.2 3.1 18.2 10 6 4.6 9.1 9.3 3.3 4.7 3.3 10 0 1.3-.3 2.5-.2 1.3-.7 2.4-1.5 3.4-5 5.3l-56.9 32.2q7.2 4.9 16.5 4.9 7.2 0 12.6-2.5 5.5-2.5 9.7-7.4l.7-1 .8-1 .9-1.3 1-1.5q3.3-4.2 7.4-5.1l1.8-.2q4.4 0 8 3.4 3.6 3.5 3.6 8.5zm-29.9-42.7q-7.2-4.8-16.6-4.8-6 0-11 2-4.9 1.8-9.3 6-4.5 4-6.7 9-2 4.8-2 10.8l.1 2.9z" />
<path id="header-o"
d="M286.8 91.4q0 4.2-.6 8.3-.6 4-1.8 7.7-1.1 3.8-2.9 7.4-1.7 3.5-4 6.9-2.4 3.3-5.2 6.1Q258 143 237.7 143T203 128q-14.3-15.2-14.3-36.6 0-21.5 14.3-36.6 14.4-15 34.7-15 4 0 7.8.5 3.9.7 7.5 1.9t7 3q3.3 1.9 6.4 4.3 3.2 2.4 5.9 5.4 14.4 15 14.5 36.5zm-22.6 0q0-2.4-.4-4.5-.2-2.2-.9-4.2-.6-2-1.5-3.9-1-2-2.2-3.7-1.2-1.7-2.8-3.4-4-4.2-8.6-6.1-4.5-2-10-2-11 0-18.7 8.2-7.8 8-7.8 19.6 0 11.4 7.8 19.7 7.8 8 18.6 8 5.6 0 10.1-1.9 4.6-2 8.6-6.1 4-4.3 5.8-9 2-4.9 2-10.7z" />
<path id="header-k"
d="M186.3 131q0 4.7-3.3 8.3-1.5 1.8-3.7 2.7-2 1.1-4.3 1.1-3.5 0-6.6-2L119.2 105v26q0 5.5-3 8.6-3.1 3.4-8.4 3.3l-2.2-.2q-1-.1-2.2-.5-1-.3-2-1-1-.6-1.8-1.6-1.7-1.6-2.4-3.8-.7-2.3-.7-4.8V11.9q0-5.5 3-8.6 3-3.4 8.3-3.3 5.2 0 8.2 3.3 3.2 3.1 3.2 8.6v65.9l49.2-36.1q3.2-2 6.6-2 4.7 0 8 3.7t3.3 8.4q-.2 6-5 9.6l-41 30 41 29.9q2.3 1.7 3.6 4.2 1.4 2.5 1.4 5.4z" />
<path id="header-tilde"
d="M73.1 91q0 2-.6 3.9T71 98.6q-3.2 5.7-8.9 8.5-5.6 2.8-12.9 2.8-8.8 0-18-7.8-2.4-2.3-4.5-3.7-2.1-1.5-3-1.7-1.5 0-2.1.3l-.8 1.3q-.3.7-.8 1.2l-1 1-.9.8q-2.7 2-6.4 2-1.7 0-3.2-.3-1.4-.3-3-1.1-1.5-.8-2.6-2.1-2.8-3.1-2.8-8v-1.3q0-.7.2-1.2l.2-1 .4-1 .4-1q.1-.6.5-1.1l.5-1q3.2-5.7 8.8-8.5 5.7-2.9 13-2.9 3.2 0 6.2 1 3 .9 6 2.7 2.9 1.6 5.7 4.2 5.2 4.6 7.6 5.4 1 0 1.6-.2l.7-.4q.3-.1.5-.4 3.6-5.6 9.2-5.6 5.7 0 8.8 3.5 2.8 3 2.8 8z" />
</svg>
Homepage of
<div class=p-name>
<span class=first-name>Norman</span>
<span class=last-name>Köhring</span>
</div>
Code Artist
</header>
<div id="main-menu">
<menu>
<li><a href="/">home</a></li>
<li><a title="What I do these days" href="/now">/now</a></li>
<li><a title="Today I Learned" href="/til">/til</a></li>
<li><a title="My projects" href="/projects">/projects</a></li>
<li><a title="Weblog" href="/blog">/blog</a></li>
<li><a title="CV / Resume" href="/cv">/cv</a></li>
<li class="active"><a title="Tools I use" href="/stack">/stack</a></li>
<li><a title="Hardware I use" href="/setup">/setup</a></li>
</menu>
</div>
<link href=/extended.css rel=stylesheet>
<link href=/posts.css rel=stylesheet>
<script async data-goatcounter=https://koehr.goatcounter.com/count src=//gc.zgo.at/count.js></script>
</body>