cronyakatsuki.xyz/public/blog/virgin-mutt-user-meet-mblaze/index.html

278 lines
23 KiB
HTML
Raw Normal View History

2023-10-24 19:16:22 +02:00
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link href="/css/style.css" rel="stylesheet" />
2024-03-09 14:59:52 +01:00
<script defer data-domain="cronyakatsuki.xyz" src="https://plausible.cronyakatsuki.xyz/js/script.js"></script>
2023-10-24 19:16:22 +02:00
2024-01-28 18:16:34 +01:00
<title>
Virgin (Neo)Mutt User Meet Mblaze - Crony Akatsuki
</title>
2023-10-24 19:16:22 +02:00
<meta property="og:title" content="Virgin (Neo)Mutt User Meet Mblaze" />
<meta property="og:description" content="We have all heard of (Neo)Mutt when it comes to managing e-mail in the terminal right? What would you do if I told you there is an even better and more UNIX way to manage mail on the terminal? Well there is and it&rsquo;s called mblaze." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://cronyakatsuki.xyz/blog/virgin-mutt-user-meet-mblaze/" /><meta property="article:section" content="blog" />
<meta property="article:published_time" content="2023-10-24T18:13:18+02:00" />
<meta property="article:modified_time" content="2023-10-24T18:13:18+02:00" /><meta property="og:site_name" content="Crony Akatsuki&#39;s Website" />
2023-12-09 19:59:23 +01:00
2023-10-24 19:16:22 +02:00
</head>
<body>
<header>
<h1>Crony Akatsuki</h1>
<nav>
<span><a href="/">Home</a></span>
<span>|</span>
<span><a href="/about">About</a></span>
<span>|</span>
<span><a href="/blog">Blog</a></span>
<span>|</span>
<span><a href="/services">Services</a></span>
</nav>
</header>
<main>
<div id="content">
<h1>Virgin (Neo)Mutt User Meet Mblaze</h1>
<div id="blog-meta">
<p id="date">24-10-2023</p>
2024-01-07 14:46:55 +01:00
<p>
<span>|</span>
<a href="https://cronyakatsuki.xyz/tags/linux/">linux</a> <span>|</span>
<a href="https://cronyakatsuki.xyz/tags/mail/">mail</a> <span>|</span>
<a href="https://cronyakatsuki.xyz/tags/mblaze/">mblaze</a></p>
2023-10-24 19:16:22 +02:00
<hr>
</div>
<p>We have all heard of (Neo)Mutt when it comes to managing e-mail in the terminal right? What would you do if I told you there is an even better and more UNIX way to manage mail on the terminal? Well there is and it&rsquo;s called <a href="https://github.com/leahneukirchen/mblaze">mblaze</a>.</p>
<p>In this post I will explain to you how to setup mblaze for managing your email, but for that we will 2 more additional software to manage our mail with mblaze. <a href="https://www.opensmtpd.org/">OpenSMTPD</a> the openbsd fast mail server for getting local mail from services like crontab and sending mail with, and <a href="https://isync.sourceforge.io/">isync</a> for downloading our mail from our remote server&rsquo;s either selfhosted or gmail.</p>
<h1 id="1-opensmtpd">1. OpenSMTPD</h1>
<p>First we will setup OpenSMTP for local mail, and we will also relay&rsquo;s that allow us to send e-mail from our selfhosted or gmail mail server&rsquo;s for example. Make sure to install opensmtpd from your package maanager.</p>
<blockquote>
<p>Edit <code>/etc/smtpd/smtpd.conf</code></p>
</blockquote>
<pre tabindex="0"><code class="language-conf" data-lang="conf">table aliases file:/etc/mail/aliases
table credentials file:/etc/mail/credentials
listen on 127.0.0.1
action &#34;local_mail&#34; maildir &#34;/home/%{user.username}/.local/share/Maildir/local&#34; alias &lt;aliases&gt;
action outbound_selfhost relay host smtp+tls://selfhost@subdomain.domain.com:587 auth &lt;credentials&gt;
action outbound_gmail relay host smtp+tls://gmail@smtp.gmail.com:587 auth &lt;credentials&gt;
match for local action &#34;local_mail&#34;
match mail-from &#34;selfhost@domain.com&#34; for any action outbound_selfhost
match mail-from &#34;username@gmail.com&#34; for any action outbound_gmail
</code></pre><p>Next you will need to update aliases in file /etc/mail/aliases under the comment <code># Well-known aliases -- these should be filled in!</code> to your main user account on your system.</p>
<p>Now we will also setup the passwords in the <code>/etc/mail/credentials</code>, Note for gmail you will need to setup app password for it to be usable with this method and enable smtp in gmail.</p>
<pre tabindex="0"><code class="language-conf" data-lang="conf">selfhost selfhost:selfhost_password
gmail gmail:gmail_password
</code></pre><p>Also make sure to run <code>sudo chmod 600 /etc/mail/credentials</code> to make sure the password&rsquo;s aren&rsquo;t readable if you aren&rsquo;t running as sudo.</p>
<h1 id="2-isync">2. isync</h1>
<p>Now we will setup isync to get our e-mail from our server&rsquo;s. In this example there is both settings for a selfhosted server and a gmail one.</p>
<blockquote>
<p>Edit <code>$HOME/.mbsyncrc</code></p>
</blockquote>
<pre tabindex="0"><code class="language-rc" data-lang="rc">IMAPStore selfhost-remote
Host subdomain.domain.com
Port 993
User selfhost@domain.com
PassCmd &#34;Command for password&#34; or Pass password
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt
MaildirStore selfhost-local
Path ~/.local/share/Maildir/selfhost/
Inbox ~/.local/share/Maildir/selfhost/INBOX
SubFolders Verbatim
Channel selfhost
Far :selfhost-remote:
Near :selfhost-local:
Create Both
Expunge Both
Patterns * !&#34;[Gmail]/All Mail&#34; !&#34;*fts-flatcurve*&#34; !&#34;*virtual*&#34;
SyncState *
Create Both
IMAPStore gmail-remote
Host imap.gmail.com
Port 993
User gmail@gmail.com
PassCmd &#34;Command for password&#34; or Pass password
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt
MaildirStore gmail-local
Path ~/.local/share/Maildir/gmail/
Inbox ~/.local/share/Maildir/gmail/INBOX
SubFolders Verbatim
Channel gmail
Far :gmail-remote:
Near :gmail-local:
Create Both
Expunge Both
Patterns * !&#34;[Gmail]/All Mail&#34; !&#34;*fts-flatcurve*&#34; !&#34;*virtual*&#34;
SyncState *
Create Both
</code></pre><p>Then you can run <code>mbsync -V gmail/selfhost</code> to sync a specific account or you can run <code>mbsync -a</code> to sync all your account&rsquo;s.</p>
<h1 id="3-mblaze">3. mblaze</h1>
<p>Now we will start working on the most juicy part, setting up mblaze for basic usage. First we will setup a basic mblaze profile for our local account.</p>
<blockquote>
<p>Edit <code>$HOME/.mblaze/profile</code></p>
</blockquote>
<pre tabindex="0"><code class="language-conf" data-lang="conf">Local-Mailbox: user
FQDN: &#34;Generate using command mgenmid&#34;
2023-10-24 19:26:18 +02:00
Maildir: /home/USER/.local/share/Maildir/local
Outbox: /home/USER/.local/share/Maildir/local/Sent/
Drafts: /home/USER/.local/share/Maildir/local/Drafts/
2023-10-24 19:16:22 +02:00
Reply-From: user
# You don&#39;t need this, it just makes it easier to see date
Scan-Format: %c%u%r %-3n %10d %17f %t %2i%s
</code></pre><p>And now we are ready for using mblaze for managing our local mail with mblaze. Now for the rest of this blog I will show how I manage multiple account&rsquo;s using a scipt and a couple function&rsquo;s. I will also link a video that will show you in more detail things for using mblaze for managing your mail which was my inspiration for making this post.</p>
<h1 id="4-multiple-profiles-management">4. Multiple profiles management</h1>
<p>You can do this in a lot of ways with mblaze since it is very easily scriptable, but I do it with a script that copies over a preconfigure profile from <code>$HOME/.config/mblaze</code></p>
<blockquote>
<p>example selfhost mblaze config <code>$HOME/.config/mblaze/selfhost</code></p>
</blockquote>
<pre tabindex="0"><code class="language-conf" data-lang="conf">Local-Mailbox: User Name &lt;user@domain.com&gt;
FQDN: &#34;Generate using command mgenmid&#34;
2023-10-24 19:23:55 +02:00
Maildir: /home/USER/.local/share/Maildir/selfhost
Outbox: /home/USER/.local/share/Maildir/selfhost/Sent/
Drafts: /home/USER/.local/share/Maildir/selfhost/Drafts/
2023-10-24 19:16:22 +02:00
Reply-From: User Name &lt;user@domain.com&gt;
Scan-Format: %c%u%r %-3n %10d %17f %t %2i%s
</code></pre><blockquote>
<p>example gmail mblaze config <code>$HOME/.config/mblaze/gmail</code></p>
</blockquote>
<pre tabindex="0"><code class="language-conf" data-lang="conf">Local-Mailbox: user &lt;user@gmail.com&gt;
FQDN: &#34;Generate using command mgenmid&#34;
2023-10-24 19:23:55 +02:00
Maildir: /home/USER/.local/share/Maildir/gmail
Outbox: /home/USER/.local/share/Maildir/gmail/[Gmail]/Sent Mail
Drafts: /home/USER/.local/share/Maildir/gmail/[Gmail]/Drafts
2023-10-24 19:16:22 +02:00
Reply-From: user &lt;user@gmail.com&gt;
Scan-Format: %c%u%r %-3n %10d %17f %t %2i%s
</code></pre><p>For the local profile, just copy the config saved to <code>$HOME/.mblaze/profile</code> to <code>$HOME/.config/mblaze/local</code>.</p>
<p>Now onto the script and functions I use with my zsh.</p>
<blockquote>
<p>mprofile</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#c6d0f5;background-color:#303446;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#737994;font-style:italic">#!/bin/sh
</span></span></span><span style="display:flex;"><span><span style="color:#737994;font-style:italic"></span>
</span></span><span style="display:flex;"><span><span style="color:#f2d5cf">profiles</span><span style="color:#99d1db;font-weight:bold">=</span><span style="color:#ca9ee6">$(</span>find <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$HOME</span><span style="color:#a6d189">&#34;</span>/.config/mblaze -type f -exec basename <span style="color:#a6d189">&#34;{}&#34;</span> <span style="color:#8caaee">\;</span><span style="color:#ca9ee6">)</span>
</span></span><span style="display:flex;"><span><span style="color:#f2d5cf">currentMaildir</span><span style="color:#99d1db;font-weight:bold">=</span><span style="color:#ca9ee6">$(</span>grep <span style="color:#a6d189">&#34;^Maildir:&#34;</span> <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$HOME</span><span style="color:#a6d189">&#34;</span>/.mblaze/profile | cut -d: -f <span style="color:#ef9f76">2</span> | sed <span style="color:#a6d189">&#39;s/ //g&#39;</span><span style="color:#ca9ee6">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#99d1db;font-weight:bold">[</span> -z <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$1</span><span style="color:#a6d189">&#34;</span> <span style="color:#99d1db;font-weight:bold">]</span> <span style="color:#99d1db;font-weight:bold">&amp;&amp;</span> basename <span style="color:#a6d189">&#34;</span><span style="color:#ca9ee6">$(</span>grep -w <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$currentMaildir</span><span style="color:#a6d189">&#34;</span> -l -R <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$HOME</span><span style="color:#a6d189">&#34;</span>/.config/mblaze<span style="color:#ca9ee6">)</span><span style="color:#a6d189">&#34;</span> <span style="color:#99d1db;font-weight:bold">&amp;&amp;</span> <span style="color:#99d1db">exit</span> <span style="color:#ef9f76">0</span>
</span></span><span style="display:flex;"><span><span style="color:#99d1db;font-weight:bold">[</span> <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$1</span><span style="color:#a6d189">&#34;</span> <span style="color:#99d1db;font-weight:bold">=</span> <span style="color:#a6d189">&#34;-l&#34;</span> <span style="color:#99d1db;font-weight:bold">]</span> <span style="color:#99d1db;font-weight:bold">&amp;&amp;</span> <span style="color:#99d1db">printf</span> <span style="color:#a6d189">&#39;%s\n&#39;</span> <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$profiles</span><span style="color:#a6d189">&#34;</span> <span style="color:#99d1db;font-weight:bold">&amp;&amp;</span> <span style="color:#99d1db">exit</span> <span style="color:#ef9f76">0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f2d5cf">profile</span><span style="color:#99d1db;font-weight:bold">=</span><span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$1</span><span style="color:#a6d189">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ca9ee6">if</span> <span style="color:#99d1db">printf</span> <span style="color:#a6d189">&#39;%s\n&#39;</span> <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$profiles</span><span style="color:#a6d189">&#34;</span> | grep -qw <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$profile</span><span style="color:#a6d189">&#34;</span>; <span style="color:#ca9ee6">then</span>
</span></span><span style="display:flex;"><span> cp <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$HOME</span><span style="color:#a6d189">&#34;</span>/.config/mblaze/<span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$profile</span><span style="color:#a6d189">&#34;</span> <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$HOME</span><span style="color:#a6d189">&#34;</span>/.mblaze/profile
</span></span><span style="display:flex;"><span><span style="color:#ca9ee6">else</span>
</span></span><span style="display:flex;"><span> <span style="color:#99d1db">printf</span> <span style="color:#a6d189">&#39;%s\n&#39;</span> <span style="color:#a6d189">&#34;This profile doesn&#39;t exist&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#ca9ee6">fi</span>
</span></span></code></pre></div><p>The script is able to print the current profile when run without argument, listing all available profiles using -l and setting the profile by providing it&rsquo;s name.</p>
<blockquote>
<p>functions</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#c6d0f5;background-color:#303446;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#737994;font-style:italic"># mblaze functions</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#737994;font-style:italic"># Get new mail for current profile</span>
2024-01-07 14:46:55 +01:00
</span></span><span style="display:flex;"><span><span style="color:#ca9ee6">function</span> mnew <span style="color:#99d1db;font-weight:bold">()</span> <span style="color:#99d1db;font-weight:bold">{</span>
2023-10-24 19:16:22 +02:00
</span></span><span style="display:flex;"><span> <span style="color:#f2d5cf">maildir</span><span style="color:#99d1db;font-weight:bold">=</span><span style="color:#ca9ee6">$(</span>grep <span style="color:#a6d189">&#34;^Maildir:&#34;</span> <span style="color:#f2d5cf">$HOME</span>/.mblaze/profile | cut -d: -f <span style="color:#ef9f76">2</span> | sed <span style="color:#a6d189">&#39;s/ //g&#39;</span><span style="color:#ca9ee6">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#f2d5cf">profile</span><span style="color:#99d1db;font-weight:bold">=</span><span style="color:#ca9ee6">$(</span>basename <span style="color:#f2d5cf">$maildir</span><span style="color:#ca9ee6">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#ca9ee6">if</span> <span style="color:#99d1db;font-weight:bold">[</span> <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$profile</span><span style="color:#a6d189">&#34;</span> <span style="color:#99d1db;font-weight:bold">=</span> <span style="color:#a6d189">&#34;local&#34;</span> <span style="color:#99d1db;font-weight:bold">]</span>; <span style="color:#ca9ee6">then</span>
</span></span><span style="display:flex;"><span> mlist -s <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$maildir</span><span style="color:#a6d189">&#34;</span>| msort -dr | mseq -S
</span></span><span style="display:flex;"><span> <span style="color:#ca9ee6">else</span>
</span></span><span style="display:flex;"><span> mbsync -V <span style="color:#f2d5cf">$profile</span>
</span></span><span style="display:flex;"><span> mlist -s <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$maildir</span><span style="color:#a6d189">&#34;</span>/INBOX | msort -dr | mseq -S
2024-01-07 14:46:55 +01:00
</span></span><span style="display:flex;"><span> minc <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$maildir</span><span style="color:#a6d189">/INBOX&#34;</span> &gt; /dev/null
2023-10-24 19:16:22 +02:00
</span></span><span style="display:flex;"><span> <span style="color:#ca9ee6">fi</span>
</span></span><span style="display:flex;"><span><span style="color:#99d1db;font-weight:bold">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#737994;font-style:italic"># Get full mail for current profile including threads</span>
2024-01-07 14:46:55 +01:00
</span></span><span style="display:flex;"><span><span style="color:#ca9ee6">function</span> mall <span style="color:#99d1db;font-weight:bold">()</span> <span style="color:#99d1db;font-weight:bold">{</span>
2023-10-24 19:16:22 +02:00
</span></span><span style="display:flex;"><span> <span style="color:#f2d5cf">maildir</span><span style="color:#99d1db;font-weight:bold">=</span><span style="color:#ca9ee6">$(</span>grep <span style="color:#a6d189">&#34;^Maildir:&#34;</span> <span style="color:#f2d5cf">$HOME</span>/.mblaze/profile | cut -d: -f <span style="color:#ef9f76">2</span> | sed <span style="color:#a6d189">&#39;s/ //g&#39;</span><span style="color:#ca9ee6">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#f2d5cf">sent</span><span style="color:#99d1db;font-weight:bold">=</span><span style="color:#ca9ee6">$(</span>grep <span style="color:#a6d189">&#34;^Outbox:&#34;</span> <span style="color:#f2d5cf">$HOME</span>/.mblaze/profile | cut -d: -f <span style="color:#ef9f76">2</span> | sed <span style="color:#a6d189">&#39;s/ //g&#39;</span><span style="color:#ca9ee6">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#f2d5cf">profile</span><span style="color:#99d1db;font-weight:bold">=</span><span style="color:#ca9ee6">$(</span>basename <span style="color:#f2d5cf">$maildir</span><span style="color:#ca9ee6">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#ca9ee6">if</span> <span style="color:#99d1db;font-weight:bold">[</span> <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$profile</span><span style="color:#a6d189">&#34;</span> <span style="color:#99d1db;font-weight:bold">=</span> <span style="color:#a6d189">&#34;local&#34;</span> <span style="color:#99d1db;font-weight:bold">]</span>; <span style="color:#ca9ee6">then</span>
</span></span><span style="display:flex;"><span> mlist <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$maildir</span><span style="color:#a6d189">&#34;</span> | mthread -r -S <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$maildir</span><span style="color:#a6d189">&#34;</span> | mseq -S
</span></span><span style="display:flex;"><span> <span style="color:#ca9ee6">else</span>
</span></span><span style="display:flex;"><span> mbsync -V <span style="color:#f2d5cf">$profile</span>
</span></span><span style="display:flex;"><span> mlist <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$maildir</span><span style="color:#a6d189">&#34;</span>/INBOX | mthread -r -S <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$sent</span><span style="color:#a6d189">&#34;</span> | mseq -S
2024-01-07 14:46:55 +01:00
</span></span><span style="display:flex;"><span> minc <span style="color:#a6d189">&#34;</span><span style="color:#f2d5cf">$maildir</span><span style="color:#a6d189">/INBOX&#34;</span> &gt; /dev/null
2023-10-24 19:16:22 +02:00
</span></span><span style="display:flex;"><span> <span style="color:#ca9ee6">fi</span>
</span></span><span style="display:flex;"><span><span style="color:#99d1db;font-weight:bold">}</span>
</span></span></code></pre></div><p>For the rest of usage of mblaze, I really recommend to use <code>man mblaze</code> since the software is really well documented, or you can also watch this <a href="https://piped.cronyakatsuki.xyz/watch?v=5YS8RPC4zwc">video</a> I took the inspiration from for this setup.</p>
<h1 id="conclusion">Conclusion</h1>
<p>Hope you have had a good read, and I hope you will maybe try out this mail setup, or create your own even better setup for your self.</p> </div>
</main>
<footer>
<div id="links">
<span><a href="https://code.cronyakatsuki.xyz">Code</a></span>
<span>|</span>
<span><a href="https://steamcommunity.com/id/CronyAkatsuki/">Steam</a></span>
<span>|</span>
<span><a href="https://osu.ppy.sh/users/18953565">Osu!</a></span>
<span>|</span>
<span><a href="https://anilist.co/user/CronyAkatsuki/">Anilist</a></span>
<span>|</span>
2024-03-19 20:48:16 +01:00
<span><a href="https://trakt.tv/users/cronyakatsuki">Trakt.tv</a></span>
<span>|</span>
<span><a href="https://www.last.fm/user/Crony-Akatsuki">Last.fm</a></span>
<span>|</span>
2023-10-24 19:16:22 +02:00
<span><a href="https://youtube.com/channel/UClFdlNlUipHG5Kit8GbFz5Q">Gaming Channel</a></span>
2023-11-07 19:47:47 +01:00
<span>|</span>
<span><a href="https://uptime.cronyakatsuki.xyz/status/public">Services Status</a></span>
2023-12-17 11:17:57 +01:00
<span>|</span>
<span><a href="https://lemmy.cronyakatsuki.xyz/u/crony">Lemmy</a></span>
2024-03-09 17:46:18 +01:00
<span>|</span>
2024-03-19 20:48:16 +01:00
<span><a href="https://sharkey.cronyakatsuki.xyz/u/crony">Sharkey</a></span>
<span>|</span>
2024-03-09 17:46:18 +01:00
<span><a href="https://plausible.cronyakatsuki.xyz/cronyakatsuki.xyz">Selfhosted Plausible Analytics</a></span>
2023-10-24 19:16:22 +02:00
</div>
<div id="banners">
<a rel="noreferrer" href="/" target="_blank"><img src="/88x31.png"
alt="Me" title="Me" /></a>
<a rel="noreferrer" href="https://kernel.org" target="_blank"><img src="https://cyber.dabamos.de/88x31/linux_powered.gif"
alt="linux kernel" title="Best kernel in the world" /></a>
<a rel="noreferrer" href="https://debian.org" target="_blank"><img src="https://cyber.dabamos.de/88x31/debian.gif"
alt="debian" title="This website run's on debian" /></a>
<a rel="noreferrer" href="https://bitwarden.com" target="_blank"><img src="https://cyber.dabamos.de/88x31/bitwarden.gif"
alt="Bitwarden" title="Bitwarden/Vaultwarden for the win" /></a>
<a rel="noreferrer" target="_blank"><img src="https://cyber.dabamos.de/88x31/free.gif"
alt="foss" title="Foss is the way" /></a>
<a rel="noreferrer" href="https://neovim.io" target="_blank"><img src="/assets/badges/neovim.gif"
alt="Neovim" title="Written in neovim" /></a>
<a rel="noreferrer" href="https://landchad.net" target="_blank"><img src="https://landchad.net/pix/landchad.gif"
alt="LandChad" title="Get A Website!" /></a>
<a rel="noreferrer" href="https://poggerer.xyz" target="_blank"><img src="https://poggerer.xyz/88x31.png"
alt="Tulg" title="Tulg" /></a>
<a rel="noreferrer" href="https://arthurmelton.com" target="_blank"><img src="https://arthurmelton.com/88x31.png"
alt="AMTitan" title="AMTitan" /></a>
<a rel="noreferrer" href="https://aadi.net.in" target="_blank"><img src="https://aadi.net.in/88x31.png"
alt="Aadi" title="Aadi" /></a>
<a rel="noreferrer" href="https://bear.oops.wtf/" target="_blank"><img src="https://bear.oops.wtf/download/88x31.png"
alt="Bear" title="Bear" /></a>
</div>
</footer>
</body>
</html>