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.

115 lines
14 KiB
HTML

3 months ago
<!doctype html>
<html lang=en>
<head id="head">
<meta charset=utf-8>
<title id=title >the codeartist — programmer and engineer based in BerlinStack</title>
<meta name=description content="The personal page and weblog of Norman Köhring">
<meta name=author content="Norman Köhring">
<meta name=DC.title content="the codeartist — programmer and engineer based in Berlin">
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@koehr_in">
<meta name="twitter:author" content="@koehr_in">
<meta name=twitter:description content="The personal page and weblog of the codeartist Norman Köhring">
<meta name="twitter:title" content="Stack // the codeartist">
<meta name="og:title" content="Stack // the codeartist">
<meta property="og:type" content="website">
<meta http-equiv="x-ua-compatible" content="ie=edge"/>
<meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"/>
<meta name=ICBM content="52.4595, 13.5335">
<meta name=geo.position content="52.4595; 13.5335">
<meta name=geo.region content=DE-BE>
<meta name=geo.placename content=Berlin>
<link rel=me href=https://koehr.in>
<link rel=me href=https://k0r.in>
<link rel=me href=https://koehr.ing>
<link rel=me href=@Koehr@mstdn.io>
<link rel=me href=https://sr.ht/~koehr/>
<link rel=me href=https://git.k0r.in>
<link rel=me href=https://threads.net/@coffee_n_code>
<link rel=me href=https://instagram.com/@coffee_n_code>
<link rel=me href=https://ko-fi.com/koehr>
<link rel=me href=https://reddit.com/user/koehr>
<link rel=icon href=/favicon.png type=image/x-icon>
<link rel=stylesheet href=/style.css>
</head>
<body>
<main id="main">
<header>
<h1 >Stack</h1>
<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.</em>
<br/>
Last updated: <time datetime="Sun, 14 Jul 2024 00:00:00 +0000" >July 14, 2024</time>
3 months ago
</header>
2 months ago
<div ><hr><p>This page focusses on Software. For Hardware, check <a href="/setup">/setup</a>.</p><hr><p>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.</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 "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 <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 + starship</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</
3 months ago
</main>
<div id="spacer"></div>
<header id="header">
<a href="/">
<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
</a>
</header>
<div id="main-menu">
<menu>
<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><a title="Tools I use" href="/stack">/stack</a></li>
<li><a title="Hardware I use" href="/setup">/setup</a></li>
</menu>
</div>
<footer id="footer">
</footer>
<script defer>
const el = document.getElementById('header')
const threshhold = 24
let headerIsSmall = false
window.addEventListener("scroll", () => {
if (window.scrollY > threshhold && !headerIsSmall) {
el.classList.add('small')
headerIsSmall = true
} else if (window.scrollY <= threshhold && headerIsSmall) {
el.classList.remove('small')
headerIsSmall = false
}
})
</script>
<script async data-goatcounter=https://koehr.goatcounter.com/count src=//gc.zgo.at/count.js></script>
</body>
</html>