252 lines
21 KiB
HTML
252 lines
21 KiB
HTML
|
<!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" />
|
||
|
|
||
|
<title>Virgin (Neo)Mutt User Meet Mblaze</title>
|
||
|
<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’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's Website" />
|
||
|
|
||
|
</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>
|
||
|
|
||
|
|
||
|
<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’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’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’s that allow us to send e-mail from our selfhosted or gmail mail server’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 "local_mail" maildir "/home/%{user.username}/.local/share/Maildir/local" alias <aliases>
|
||
|
action outbound_selfhost relay host smtp+tls://selfhost@subdomain.domain.com:587 auth <credentials>
|
||
|
action outbound_gmail relay host smtp+tls://gmail@smtp.gmail.com:587 auth <credentials>
|
||
|
|
||
|
match for local action "local_mail"
|
||
|
match mail-from "selfhost@domain.com" for any action outbound_selfhost
|
||
|
match mail-from "username@gmail.com" 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’s aren’t readable if you aren’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’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 "Command for password" 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 * !"[Gmail]/All Mail" !"*fts-flatcurve*" !"*virtual*"
|
||
|
SyncState *
|
||
|
Create Both
|
||
|
|
||
|
IMAPStore gmail-remote
|
||
|
Host imap.gmail.com
|
||
|
Port 993
|
||
|
User gmail@gmail.com
|
||
|
PassCmd "Command for password" 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 * !"[Gmail]/All Mail" !"*fts-flatcurve*" !"*virtual*"
|
||
|
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’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: "Generate using command mgenmid"
|
||
|
Maildir: /home/crony/.local/share/Maildir/local
|
||
|
Outbox: /home/crony/.local/share/Maildir/local/Sent/
|
||
|
Drafts: /home/crony/.local/share/Maildir/local/Drafts/
|
||
|
Reply-From: user
|
||
|
# You don'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’s using a scipt and a couple function’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 <user@domain.com>
|
||
|
FQDN: "Generate using command mgenmid"
|
||
|
Maildir: /home/crony/.local/share/Maildir/selfhost
|
||
|
Outbox: /home/crony/.local/share/Maildir/selfhost/Sent/
|
||
|
Drafts: /home/crony/.local/share/Maildir/selfhost/Drafts/
|
||
|
Reply-From: User Name <user@domain.com>
|
||
|
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 <user@gmail.com>
|
||
|
FQDN: "Generate using command mgenmid"
|
||
|
Maildir: /home/crony/.local/share/Maildir/gmail
|
||
|
Outbox: /home/crony/.local/share/Maildir/gmail/[Gmail]/Sent Mail
|
||
|
Drafts: /home/crony/.local/share/Maildir/gmail/[Gmail]/Drafts
|
||
|
Reply-From: user <user@gmail.com>
|
||
|
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">"</span><span style="color:#f2d5cf">$HOME</span><span style="color:#a6d189">"</span>/.config/mblaze -type f -exec basename <span style="color:#a6d189">"{}"</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">"^Maildir:"</span> <span style="color:#a6d189">"</span><span style="color:#f2d5cf">$HOME</span><span style="color:#a6d189">"</span>/.mblaze/profile | cut -d: -f <span style="color:#ef9f76">2</span> | sed <span style="color:#a6d189">'s/ //g'</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">"</span><span style="color:#f2d5cf">$1</span><span style="color:#a6d189">"</span> <span style="color:#99d1db;font-weight:bold">]</span> <span style="color:#99d1db;font-weight:bold">&&</span> basename <span style="color:#a6d189">"</span><span style="color:#ca9ee6">$(</span>grep -w <span style="color:#a6d189">"</span><span style="color:#f2d5cf">$currentMaildir</span><span style="color:#a6d189">"</span> -l -R <span style="color:#a6d189">"</span><span style="color:#f2d5cf">$HOME</span><span style="color:#a6d189">"</span>/.config/mblaze<span style="color:#ca9ee6">)</span><span style="color:#a6d189">"</span> <span style="color:#99d1db;font-weight:bold">&&</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">"</span><span style="color:#f2d5cf">$1</span><span style="color:#a6d189">"</span> <span style="color:#99d1db;font-weight:bold">=</span> <span style="color:#a6d189">"-l"</span> <span style="color:#99d1db;font-weight:bold">]</span> <span style="color:#99d1db;font-weight:bold">&&</span> <span style="color:#99d1db">printf</span> <span style="color:#a6d189">'%s\n'</span> <span style="color:#a6d189">"</span><span style="color:#f2d5cf">$profiles</span><span style="color:#a6d189">"</span> <span style="color:#99d1db;font-weight:bold">&&</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">"</span><span style="color:#f2d5cf">$1</span><span style="color:#a6d189">"</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">'%s\n'</span> <span style="color:#a6d189">"</span><span style="color:#f2d5cf">$profiles</span><span style="color:#a6d189">"</span> | grep -qw <span style="color:#a6d189">"</span><span style="color:#f2d5cf">$profile</span><span style="color:#a6d189">"</span>; <span style="color:#ca9ee6">then</span>
|
||
|
</span></span><span style="display:flex;"><span> cp <span style="color:#a6d189">"</span><span style="color:#f2d5cf">$HOME</span><span style="color:#a6d189">"</span>/.config/mblaze/<span style="color:#a6d189">"</span><span style="color:#f2d5cf">$profile</span><span style="color:#a6d189">"</span> <span style="color:#a6d189">"</span><span style="color:#f2d5cf">$HOME</span><span style="color:#a6d189">"</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">'%s\n'</span> <span style="color:#a6d189">"This profile doesn't exist"</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’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>
|
||
|
</span></span><span style="display:flex;"><span>mnew <span style="color:#99d1db;font-weight:bold">()</span> <span style="color:#99d1db;font-weight:bold">{</span>
|
||
|
</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">"^Maildir:"</span> <span style="color:#f2d5cf">$HOME</span>/.mblaze/profile | cut -d: -f <span style="color:#ef9f76">2</span> | sed <span style="color:#a6d189">'s/ //g'</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">"</span><span style="color:#f2d5cf">$profile</span><span style="color:#a6d189">"</span> <span style="color:#99d1db;font-weight:bold">=</span> <span style="color:#a6d189">"local"</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">"</span><span style="color:#f2d5cf">$maildir</span><span style="color:#a6d189">"</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">"</span><span style="color:#f2d5cf">$maildir</span><span style="color:#a6d189">"</span>/INBOX | msort -dr | mseq -S
|
||
|
</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>
|
||
|
</span></span><span style="display:flex;"><span>mall <span style="color:#99d1db;font-weight:bold">()</span> <span style="color:#99d1db;font-weight:bold">{</span>
|
||
|
</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">"^Maildir:"</span> <span style="color:#f2d5cf">$HOME</span>/.mblaze/profile | cut -d: -f <span style="color:#ef9f76">2</span> | sed <span style="color:#a6d189">'s/ //g'</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">"^Outbox:"</span> <span style="color:#f2d5cf">$HOME</span>/.mblaze/profile | cut -d: -f <span style="color:#ef9f76">2</span> | sed <span style="color:#a6d189">'s/ //g'</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">"</span><span style="color:#f2d5cf">$profile</span><span style="color:#a6d189">"</span> <span style="color:#99d1db;font-weight:bold">=</span> <span style="color:#a6d189">"local"</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">"</span><span style="color:#f2d5cf">$maildir</span><span style="color:#a6d189">"</span> | mthread -r -S <span style="color:#a6d189">"</span><span style="color:#f2d5cf">$maildir</span><span style="color:#a6d189">"</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">"</span><span style="color:#f2d5cf">$maildir</span><span style="color:#a6d189">"</span>/INBOX | mthread -r -S <span style="color:#a6d189">"</span><span style="color:#f2d5cf">$sent</span><span style="color:#a6d189">"</span> | mseq -S
|
||
|
</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>
|
||
|
<span><a href="https://youtube.com/channel/UClFdlNlUipHG5Kit8GbFz5Q">Gaming Channel</a></span>
|
||
|
</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>
|