114 lines
14 KiB
HTML
114 lines
14 KiB
HTML
<!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>
|
|
</header>
|
|
|
|
<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</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><p>The prompt is powered by <a href="https://starship.rs">starship</a>, 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.</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. 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 <a href="https://librewolf.net/">Librewolf</a> and <a href="https://floorp.app">Floorp</a>, but I have yet to give them a thorough try.</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&D campaigns.</p><p><a href="https://poe.com/">Poe</a> allows access to all kinds of generative intelligence tools, like LLMs ("ChatGPT") and image generators. I mostly use <s>Mistral</s> <a href="https://claude.ai">Claude 3.5 Sonnet</a>, 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></div>
|
|
|
|
</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>
|