<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on stallmer</title>
    <link>https://blog.stallmer.com/posts/</link>
    <description>Recent content in Posts on stallmer</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>© stallmer</copyright>
    <lastBuildDate>Fri, 27 Sep 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.stallmer.com/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Getting Flatpak Firefox to open videos in mpv</title>
      <link>https://blog.stallmer.com/posts/flatpak-firefox-open-videos-in-mpv/</link>
      <pubDate>Fri, 27 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>https://blog.stallmer.com/posts/flatpak-firefox-open-videos-in-mpv/</guid>
      <description>&lt;p&gt;I have been playing around with &lt;a href=&#34;https://universal-blue.org&#34;&gt;uBlue&amp;rsquo;s&lt;/a&gt; &lt;a href=&#34;https://projectbluefin.io&#34;&gt;Bluefin-dx&lt;/a&gt; recently, and it&amp;rsquo;s been a pretty cool change of pace. Rebasing between Gnome and Plasma was pretty amazing (though there was some clean up required.)&lt;/p&gt;
&lt;p&gt;However, one thing that I had been missing was sending video links to mpv using the &lt;a href=&#34;https://github.com/tridactyl/tridactyl&#34;&gt;tridactyl&lt;/a&gt; extention. Tridactyl adds vim-style keybindings to Firefox making moving around using the keyboard possible. Opening sites, adding bookmarks, and all of the regular things one does when on the internet can be done just from the keyboard.&lt;/p&gt;
&lt;p&gt;It also has a native messenger that can interact with the host system and call other programs, send information to other programs, and many other things I never dabbled with. My main reason for fooling around with the native messenger was to grab a URL from youtube and open it up with mpv. Besides getting around youtube&amp;rsquo;s ads, it&amp;rsquo;s a better viewing experience in my opinion. I can move the window around, resume later, etc.&lt;/p&gt;
&lt;p&gt;Since I was using uBlue, though, I was using the Firefox Flatpak. This meant Firefox didn&amp;rsquo;t have access to the host system by default and neither did the native messenger.&lt;/p&gt;
&lt;p&gt;The work around involves making some changes to the Firefox flatpak and changing the &lt;code&gt;mpvsafe&lt;/code&gt; alias that comes already set up in tridactyl.&lt;/p&gt;
&lt;h2 id=&#34;give-the-firefox-flatpak-additional-permissions&#34;&gt;Give the Firefox flatpak additional permissions&lt;/h2&gt;
&lt;p&gt;First, Firefox needs access to the DBus session and some directories in the $HOME directory to use the native messenger and interact with the host system.&lt;/p&gt;
&lt;p&gt;This can be done easily with Flatseal. In the &lt;code&gt;Socket&lt;/code&gt; section, turn on &lt;code&gt;D-Bus session bus&lt;/code&gt; access.&lt;/p&gt;

  &lt;figure class=&#34;left&#34; &gt;
    &lt;img src=&#34;https://blog.stallmer.com/images/firefox-flatseal-dbus.png&#34;   /&gt;
    
  &lt;/figure&gt;


&lt;p&gt;and then in the &lt;code&gt;Filesystem &amp;gt; Other files&lt;/code&gt; section, add access to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.local/share/tridactyl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.local/bin/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

  &lt;figure class=&#34;left&#34; &gt;
    &lt;img src=&#34;https://blog.stallmer.com/images/firefox-flatseal-dirs.png&#34;   /&gt;
    
  &lt;/figure&gt;


&lt;p&gt;Once Firefox can communicate with the local DBus session, the &lt;code&gt;mpvsafe&lt;/code&gt; alias or bindings in tridactyl needs to be updated to send the url to mpv.&lt;/p&gt;
&lt;p&gt;The default &lt;code&gt;mpvsafe&lt;/code&gt; command that comes with tridactyl is&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias mpvsafe js -p tri.excmds.shellescape&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;JS_ARG&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.then&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;gt; tri.excmds.exclaim_quiet&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mpv &amp;#39;&lt;/span&gt; + url&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I tested this out in two different ways because I was flipping back and forth between using mpv installed via flatpak and and archlinux distrobox version of mpv. In both cases I ended up adding a version specific alias to make it easy to flip back and forth between the two.&lt;/p&gt;
&lt;h2 id=&#34;mpv-flatpak-method&#34;&gt;MPV Flatpak Method&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re using homebrew with uBlue it&amp;rsquo;s possible you can just use that and then you&amp;rsquo;re done. I had some issues with mpv in homebrew though, so I tried both the flatpak install and mpv installed in an archlinux distrobox container. The distrobox version is what I ended up sticking with, but that was mostly just to play around the distrobox.&lt;/p&gt;
&lt;p&gt;Instead of editing this alias, I added one called &lt;code&gt;mpvflatsafe&lt;/code&gt; for the using flatpak mpv and one call &lt;code&gt;mpvboxsafe&lt;/code&gt; for using a distrobox install of mpv.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias mpvflatsafe js -p tri.excmds.shellescape&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;JS_ARG&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.then&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;gt; tri.excmds.exclaim_quiet&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;flatpak-spawn --host ~/.local/bin/mpvflat &amp;#39;&lt;/span&gt; + url&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and this calls the bash script, &lt;code&gt;mpvflat&lt;/code&gt;, below which is very simple&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/usr/bin/env bsh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;flatpak run io.mpv.Mpv &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$@&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; 2&amp;gt;&amp;amp;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &amp;gt; /dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;the-distrobox-method&#34;&gt;The Distrobox Method&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve also started playing around with distrobox. Fedora, and to a lesser extent uBlue, recommend distrobox/toolbox as a way to install software that isn&amp;rsquo;t available as a flatpak. uBlue comes with distrobox already setup, so that&amp;rsquo;s what I went with. It seems that this is most commonly used for commandline programs, but I&amp;rsquo;ve been using the arch MPV install as well.&lt;/p&gt;
&lt;p&gt;There is, of course, a way to get this method working using a distrobox version of mpv as well&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias mpvboxsafe js -p tri.excmds.shellescape&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;JS_ARG&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.then&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;gt; tri.excmds.exclaim_quiet&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;flatpak-spawn --host distrobox-enter --name arch -- mpv &amp;#39;&lt;/span&gt; + url&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;update-the-key-binding&#34;&gt;Update the key binding&lt;/h2&gt;
&lt;p&gt;Once these were setup I changed the default key binding to open videos, &lt;code&gt;;v&lt;/code&gt;, from&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-nil&#34; data-lang=&#34;nil&#34;&gt;hint -W mpvflatsafe # Use this for flatpak
hint -W mpvboxsafe # Use this for distrobox
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Once that is done you&amp;rsquo;re off the to races. Some may find it a little annoying to open a new window to watch videos. I like it though because I can close my browser and just have that running in the background while I work. This works for more than just videos as well. You could play podcasts, music, or anything else you can grab a URL for.&lt;/p&gt;
</description>
      <content>&lt;p&gt;I have been playing around with &lt;a href=&#34;https://universal-blue.org&#34;&gt;uBlue&amp;rsquo;s&lt;/a&gt; &lt;a href=&#34;https://projectbluefin.io&#34;&gt;Bluefin-dx&lt;/a&gt; recently, and it&amp;rsquo;s been a pretty cool change of pace. Rebasing between Gnome and Plasma was pretty amazing (though there was some clean up required.)&lt;/p&gt;
&lt;p&gt;However, one thing that I had been missing was sending video links to mpv using the &lt;a href=&#34;https://github.com/tridactyl/tridactyl&#34;&gt;tridactyl&lt;/a&gt; extention. Tridactyl adds vim-style keybindings to Firefox making moving around using the keyboard possible. Opening sites, adding bookmarks, and all of the regular things one does when on the internet can be done just from the keyboard.&lt;/p&gt;
&lt;p&gt;It also has a native messenger that can interact with the host system and call other programs, send information to other programs, and many other things I never dabbled with. My main reason for fooling around with the native messenger was to grab a URL from youtube and open it up with mpv. Besides getting around youtube&amp;rsquo;s ads, it&amp;rsquo;s a better viewing experience in my opinion. I can move the window around, resume later, etc.&lt;/p&gt;
&lt;p&gt;Since I was using uBlue, though, I was using the Firefox Flatpak. This meant Firefox didn&amp;rsquo;t have access to the host system by default and neither did the native messenger.&lt;/p&gt;
&lt;p&gt;The work around involves making some changes to the Firefox flatpak and changing the &lt;code&gt;mpvsafe&lt;/code&gt; alias that comes already set up in tridactyl.&lt;/p&gt;
&lt;h2 id=&#34;give-the-firefox-flatpak-additional-permissions&#34;&gt;Give the Firefox flatpak additional permissions&lt;/h2&gt;
&lt;p&gt;First, Firefox needs access to the DBus session and some directories in the $HOME directory to use the native messenger and interact with the host system.&lt;/p&gt;
&lt;p&gt;This can be done easily with Flatseal. In the &lt;code&gt;Socket&lt;/code&gt; section, turn on &lt;code&gt;D-Bus session bus&lt;/code&gt; access.&lt;/p&gt;

  &lt;figure class=&#34;left&#34; &gt;
    &lt;img src=&#34;https://blog.stallmer.com/images/firefox-flatseal-dbus.png&#34;   /&gt;
    
  &lt;/figure&gt;


&lt;p&gt;and then in the &lt;code&gt;Filesystem &amp;gt; Other files&lt;/code&gt; section, add access to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.local/share/tridactyl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.local/bin/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

  &lt;figure class=&#34;left&#34; &gt;
    &lt;img src=&#34;https://blog.stallmer.com/images/firefox-flatseal-dirs.png&#34;   /&gt;
    
  &lt;/figure&gt;


&lt;p&gt;Once Firefox can communicate with the local DBus session, the &lt;code&gt;mpvsafe&lt;/code&gt; alias or bindings in tridactyl needs to be updated to send the url to mpv.&lt;/p&gt;
&lt;p&gt;The default &lt;code&gt;mpvsafe&lt;/code&gt; command that comes with tridactyl is&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias mpvsafe js -p tri.excmds.shellescape&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;JS_ARG&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.then&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;gt; tri.excmds.exclaim_quiet&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mpv &amp;#39;&lt;/span&gt; + url&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I tested this out in two different ways because I was flipping back and forth between using mpv installed via flatpak and and archlinux distrobox version of mpv. In both cases I ended up adding a version specific alias to make it easy to flip back and forth between the two.&lt;/p&gt;
&lt;h2 id=&#34;mpv-flatpak-method&#34;&gt;MPV Flatpak Method&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re using homebrew with uBlue it&amp;rsquo;s possible you can just use that and then you&amp;rsquo;re done. I had some issues with mpv in homebrew though, so I tried both the flatpak install and mpv installed in an archlinux distrobox container. The distrobox version is what I ended up sticking with, but that was mostly just to play around the distrobox.&lt;/p&gt;
&lt;p&gt;Instead of editing this alias, I added one called &lt;code&gt;mpvflatsafe&lt;/code&gt; for the using flatpak mpv and one call &lt;code&gt;mpvboxsafe&lt;/code&gt; for using a distrobox install of mpv.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias mpvflatsafe js -p tri.excmds.shellescape&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;JS_ARG&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.then&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;gt; tri.excmds.exclaim_quiet&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;flatpak-spawn --host ~/.local/bin/mpvflat &amp;#39;&lt;/span&gt; + url&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and this calls the bash script, &lt;code&gt;mpvflat&lt;/code&gt;, below which is very simple&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/usr/bin/env bsh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;flatpak run io.mpv.Mpv &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$@&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; 2&amp;gt;&amp;amp;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &amp;gt; /dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;the-distrobox-method&#34;&gt;The Distrobox Method&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve also started playing around with distrobox. Fedora, and to a lesser extent uBlue, recommend distrobox/toolbox as a way to install software that isn&amp;rsquo;t available as a flatpak. uBlue comes with distrobox already setup, so that&amp;rsquo;s what I went with. It seems that this is most commonly used for commandline programs, but I&amp;rsquo;ve been using the arch MPV install as well.&lt;/p&gt;
&lt;p&gt;There is, of course, a way to get this method working using a distrobox version of mpv as well&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias mpvboxsafe js -p tri.excmds.shellescape&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;JS_ARG&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.then&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;gt; tri.excmds.exclaim_quiet&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;flatpak-spawn --host distrobox-enter --name arch -- mpv &amp;#39;&lt;/span&gt; + url&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;update-the-key-binding&#34;&gt;Update the key binding&lt;/h2&gt;
&lt;p&gt;Once these were setup I changed the default key binding to open videos, &lt;code&gt;;v&lt;/code&gt;, from&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-nil&#34; data-lang=&#34;nil&#34;&gt;hint -W mpvflatsafe # Use this for flatpak
hint -W mpvboxsafe # Use this for distrobox
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Once that is done you&amp;rsquo;re off the to races. Some may find it a little annoying to open a new window to watch videos. I like it though because I can close my browser and just have that running in the background while I work. This works for more than just videos as well. You could play podcasts, music, or anything else you can grab a URL for.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Cloudflare Dynamic DNS Using ddclient</title>
      <link>https://blog.stallmer.com/posts/cloudflare-dns-with-ddclient/</link>
      <pubDate>Tue, 23 May 2023 00:00:00 +0000</pubDate>
      
      <guid>https://blog.stallmer.com/posts/cloudflare-dns-with-ddclient/</guid>
      <description>&lt;p&gt;I moved my DNS setup for my domain names over the Cloudflare a while back. People much more knowledgable than I mentioned they liked it…in particular the proxying of your IP addresses. I like this additional layer of privacy since I’m self-hosting some services I’ve made available online. My personal IP address is not visible to the internet at large.&lt;/p&gt;
&lt;p&gt;However, self-hosting these services means that I need to set up dynamic DNS. My IP address will occasionally change, and I need dynamic DNS to ensure my services remain available after an IP address change.&lt;/p&gt;
&lt;p&gt;Ultimately, I settled on the &lt;a href=&#34;https://docs.linuxserver.io/images/docker-ddclient&#34;&gt;Linuxserver ddclient docker container&lt;/a&gt;. I used several of their over docker containers, and I haven’t had any issues with them.&lt;/p&gt;
&lt;p&gt;After a bit of trial and error Cloudflare dynamic DNS is up and running. The main thing that I found was that I needed to remove all of the comments from the default &lt;code&gt;ddclient.conf&lt;/code&gt; file that is included in the docker container. Having the additional characters after the needed information caused errors for whatever reason.&lt;/p&gt;
&lt;p&gt;Here is what the file looks like when starting the container. Note: I removed the sections not relating to Cloudflare. There are a lot of example sections if you’re using other dynamic DNS services.&lt;/p&gt;
&lt;h2 id=&#34;linuxserver-ddclient-dot-conf-default-settings&#34;&gt;Linuxserver ddclient.conf Default Settings&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## CloudFlare (www.cloudflare.com)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#protocol=cloudflare,        \&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#zone=domain.tld,            \&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#ttl=1,                      \&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#login=your-login-email,     \ # Only needed if you are using your global API key. If you are using an API token, set it to &amp;#34;token&amp;#34; (wihtout double quotes).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#password=APIKey             \ # This is either your global API key, or an API token. If you are using an API token, it must have the permissions &amp;#34;Zone - DNS - Edit&amp;#34; and &amp;#34;Zone - Zone - Read&amp;#34;. The Zone resources must be &amp;#34;Include - All zones&amp;#34;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#domain.tld,my.domain.tld&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;my-changes-for-cloudflare-dynamic-dns&#34;&gt;My Changes for Cloudflare Dynamic DNS&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## CloudFlare (www.cloudflare.com)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;protocol&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;cloudflare,        &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;zone&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;mydomain.tld,            &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;password&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;lt;api-key&amp;gt;&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mydomain.tld
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I didn’t make any changes to the very beginning telling ddclient to use ssl or how often to check my personal IP address. My changes were later in the file because I was having issues with dyndns.org timing out, and with the inline comments and mentioned earlier.&lt;/p&gt;
&lt;p&gt;The comments are useful, so do what they say and make an API token with the correct DNS Read/Write permissions, and ensure the zone resources are set the “Include - All Zones” but ensure you remove the comments after doing so.&lt;/p&gt;
</description>
      <content>&lt;p&gt;I moved my DNS setup for my domain names over the Cloudflare a while back. People much more knowledgable than I mentioned they liked it…in particular the proxying of your IP addresses. I like this additional layer of privacy since I’m self-hosting some services I’ve made available online. My personal IP address is not visible to the internet at large.&lt;/p&gt;
&lt;p&gt;However, self-hosting these services means that I need to set up dynamic DNS. My IP address will occasionally change, and I need dynamic DNS to ensure my services remain available after an IP address change.&lt;/p&gt;
&lt;p&gt;Ultimately, I settled on the &lt;a href=&#34;https://docs.linuxserver.io/images/docker-ddclient&#34;&gt;Linuxserver ddclient docker container&lt;/a&gt;. I used several of their over docker containers, and I haven’t had any issues with them.&lt;/p&gt;
&lt;p&gt;After a bit of trial and error Cloudflare dynamic DNS is up and running. The main thing that I found was that I needed to remove all of the comments from the default &lt;code&gt;ddclient.conf&lt;/code&gt; file that is included in the docker container. Having the additional characters after the needed information caused errors for whatever reason.&lt;/p&gt;
&lt;p&gt;Here is what the file looks like when starting the container. Note: I removed the sections not relating to Cloudflare. There are a lot of example sections if you’re using other dynamic DNS services.&lt;/p&gt;
&lt;h2 id=&#34;linuxserver-ddclient-dot-conf-default-settings&#34;&gt;Linuxserver ddclient.conf Default Settings&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## CloudFlare (www.cloudflare.com)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#protocol=cloudflare,        \&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#zone=domain.tld,            \&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#ttl=1,                      \&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#login=your-login-email,     \ # Only needed if you are using your global API key. If you are using an API token, set it to &amp;#34;token&amp;#34; (wihtout double quotes).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#password=APIKey             \ # This is either your global API key, or an API token. If you are using an API token, it must have the permissions &amp;#34;Zone - DNS - Edit&amp;#34; and &amp;#34;Zone - Zone - Read&amp;#34;. The Zone resources must be &amp;#34;Include - All zones&amp;#34;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#domain.tld,my.domain.tld&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;my-changes-for-cloudflare-dynamic-dns&#34;&gt;My Changes for Cloudflare Dynamic DNS&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## CloudFlare (www.cloudflare.com)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;##&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;protocol&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;cloudflare,        &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;zone&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;mydomain.tld,            &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;password&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;lt;api-key&amp;gt;&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mydomain.tld
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I didn’t make any changes to the very beginning telling ddclient to use ssl or how often to check my personal IP address. My changes were later in the file because I was having issues with dyndns.org timing out, and with the inline comments and mentioned earlier.&lt;/p&gt;
&lt;p&gt;The comments are useful, so do what they say and make an API token with the correct DNS Read/Write permissions, and ensure the zone resources are set the “Include - All Zones” but ensure you remove the comments after doing so.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Setting up PiVPN Alongside Pi-hole</title>
      <link>https://blog.stallmer.com/posts/setting-up-pivpn-with-pihole/</link>
      <pubDate>Tue, 23 Jun 2020 00:00:00 +0000</pubDate>
      
      <guid>https://blog.stallmer.com/posts/setting-up-pivpn-with-pihole/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve had a Raspberry Pi running Pi-hole for a couple years now, and I&amp;rsquo;ll always have one from now on. I&amp;rsquo;ve heard there may be some issues with encryted DNS, but no doubt the open source community will figure out a solution.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve also been setting up more self-hosted services on my home network, and some of them I don&amp;rsquo;t actually want to open up to the internet. They all have internet access (for the most part), but I cannot access the services outside of my home network. This has been okay, but then I installed Nextcloud. I really wanted a way to access that data on the go, but I still wasn&amp;rsquo;t sure if I wanted to put my Nextcloud outside of the home firewall yet.&lt;/p&gt;
&lt;p&gt;So instead, I set up a VPN on the same Raspberry Pi running Pi-hole. It&amp;rsquo;s been running perfectly so far! Once I turn on the VPN, I can upload and download files to Nextcloud. It also gives me access to some other services like Home Assistant.&lt;/p&gt;
&lt;p&gt;To get the VPN set up, I used the incredibly easy-to-use package called &lt;a href=&#34;http://www.pivpn.io/&#34;&gt;PiVPN&lt;/a&gt;. Running the command below on your Pi will pull the necessary packages, install them, and start the install process.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -L https://install.pivpn.io | bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The install process walks you through the process in a pretty simple way. If you have some basic networking and Linux knowledge, you will be fine. If you like a little more help, I&amp;rsquo;d suggest &lt;a href=&#34;https://pimylifeup.com/raspberry-pi-vpn-server/&#34;&gt;this walkthrough from PiMyLifeUp&lt;/a&gt; with step-by-step screenshots to help get through the installer. The screenshots are a little old, but they include the important parts.&lt;/p&gt;
&lt;p&gt;There must have been an update to the installer since the screenshots were taken. The installer will now detect if you have Pi-hole running and offer to setup ad-blocking on your VPN connections. Of course I said yes, and after a reboot, everything was ready to go.&lt;/p&gt;
&lt;p&gt;There are some additional changes to make if you have some issues with the Pi-hole section of the setup. Several people online pointed to &lt;a href=&#34;https://marcstan.net/blog/2017/06/25/PiVPN-and-Pi-hole/&#34;&gt;this tutorial from Marc Stan&lt;/a&gt;. Again, the data is a little older, but it may be helpful if you have issues.&lt;/p&gt;
&lt;p&gt;In particular, he mentions editing &lt;code&gt;/etc/openvpn/server.conf&lt;/code&gt; to include&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;push &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dhcp-option DNS 10.8.0.1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;so that OpenVPN will forward DNS requests to your Pi-hole.&lt;/p&gt;
&lt;p&gt;In addition, edit &lt;code&gt;/etc/pihole/setupVars.conf&lt;/code&gt; to add &lt;code&gt;&amp;quot;PIHOLE_INTERFACE=tun0&amp;quot;&lt;/code&gt; below the entry already there. It will end up looking like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PIHOLE_INTERFACE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;eth0 &lt;span style=&#34;color:#75715e&#34;&gt;# change to wlan0 if using a wifi connection&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PIHOLE_INTERFACE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;tun0 &lt;span style=&#34;color:#75715e&#34;&gt;# this is the new addition&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lastly, create and edit the file &lt;code&gt;/etc/dnsmasq.d/02-ovpn.conf&lt;/code&gt; and add the single line:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;interface&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;tun0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now the PiVPN and Pi-hole are both working and talking to each other. The next step is to create a new OvenVPN profile.&lt;/p&gt;
&lt;p&gt;Enter&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pivpn add
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and you will be walked through the process of creating a new user. You&amp;rsquo;ll need to give the user a name and a password. PiVPN will spit out a .ovpn profile that you can then download and open in the OpenVPN application to connect to the VPN.&lt;/p&gt;
&lt;p&gt;There are several ways to go about transfering the profile to another computer, but getting it onto an iPhone can be a particular pain. Luckily, python is running on our Raspberry Pi, so we can use the ability to create a simple HTTP server.&lt;/p&gt;
&lt;p&gt;Run the command below in the folder holding the OpenVPN profile:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python -m SimpleHTTPServer &lt;span style=&#34;color:#ae81ff&#34;&gt;8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, go to &lt;code&gt;http://IP.OF.YOUR.PI:8080&lt;/code&gt; and should see a link to the profile. Click it to download the profile and open it up in the OpenVPN app on your phone. It will ask for the password you set earlier, and once you enter it in you should be all set. Turn off wifi, and test that you can connect to your home nextwork.&lt;/p&gt;
</description>
      <content>&lt;p&gt;I&amp;rsquo;ve had a Raspberry Pi running Pi-hole for a couple years now, and I&amp;rsquo;ll always have one from now on. I&amp;rsquo;ve heard there may be some issues with encryted DNS, but no doubt the open source community will figure out a solution.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve also been setting up more self-hosted services on my home network, and some of them I don&amp;rsquo;t actually want to open up to the internet. They all have internet access (for the most part), but I cannot access the services outside of my home network. This has been okay, but then I installed Nextcloud. I really wanted a way to access that data on the go, but I still wasn&amp;rsquo;t sure if I wanted to put my Nextcloud outside of the home firewall yet.&lt;/p&gt;
&lt;p&gt;So instead, I set up a VPN on the same Raspberry Pi running Pi-hole. It&amp;rsquo;s been running perfectly so far! Once I turn on the VPN, I can upload and download files to Nextcloud. It also gives me access to some other services like Home Assistant.&lt;/p&gt;
&lt;p&gt;To get the VPN set up, I used the incredibly easy-to-use package called &lt;a href=&#34;http://www.pivpn.io/&#34;&gt;PiVPN&lt;/a&gt;. Running the command below on your Pi will pull the necessary packages, install them, and start the install process.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -L https://install.pivpn.io | bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The install process walks you through the process in a pretty simple way. If you have some basic networking and Linux knowledge, you will be fine. If you like a little more help, I&amp;rsquo;d suggest &lt;a href=&#34;https://pimylifeup.com/raspberry-pi-vpn-server/&#34;&gt;this walkthrough from PiMyLifeUp&lt;/a&gt; with step-by-step screenshots to help get through the installer. The screenshots are a little old, but they include the important parts.&lt;/p&gt;
&lt;p&gt;There must have been an update to the installer since the screenshots were taken. The installer will now detect if you have Pi-hole running and offer to setup ad-blocking on your VPN connections. Of course I said yes, and after a reboot, everything was ready to go.&lt;/p&gt;
&lt;p&gt;There are some additional changes to make if you have some issues with the Pi-hole section of the setup. Several people online pointed to &lt;a href=&#34;https://marcstan.net/blog/2017/06/25/PiVPN-and-Pi-hole/&#34;&gt;this tutorial from Marc Stan&lt;/a&gt;. Again, the data is a little older, but it may be helpful if you have issues.&lt;/p&gt;
&lt;p&gt;In particular, he mentions editing &lt;code&gt;/etc/openvpn/server.conf&lt;/code&gt; to include&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;push &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dhcp-option DNS 10.8.0.1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;so that OpenVPN will forward DNS requests to your Pi-hole.&lt;/p&gt;
&lt;p&gt;In addition, edit &lt;code&gt;/etc/pihole/setupVars.conf&lt;/code&gt; to add &lt;code&gt;&amp;quot;PIHOLE_INTERFACE=tun0&amp;quot;&lt;/code&gt; below the entry already there. It will end up looking like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PIHOLE_INTERFACE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;eth0 &lt;span style=&#34;color:#75715e&#34;&gt;# change to wlan0 if using a wifi connection&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PIHOLE_INTERFACE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;tun0 &lt;span style=&#34;color:#75715e&#34;&gt;# this is the new addition&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lastly, create and edit the file &lt;code&gt;/etc/dnsmasq.d/02-ovpn.conf&lt;/code&gt; and add the single line:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;interface&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;tun0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now the PiVPN and Pi-hole are both working and talking to each other. The next step is to create a new OvenVPN profile.&lt;/p&gt;
&lt;p&gt;Enter&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pivpn add
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and you will be walked through the process of creating a new user. You&amp;rsquo;ll need to give the user a name and a password. PiVPN will spit out a .ovpn profile that you can then download and open in the OpenVPN application to connect to the VPN.&lt;/p&gt;
&lt;p&gt;There are several ways to go about transfering the profile to another computer, but getting it onto an iPhone can be a particular pain. Luckily, python is running on our Raspberry Pi, so we can use the ability to create a simple HTTP server.&lt;/p&gt;
&lt;p&gt;Run the command below in the folder holding the OpenVPN profile:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python -m SimpleHTTPServer &lt;span style=&#34;color:#ae81ff&#34;&gt;8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, go to &lt;code&gt;http://IP.OF.YOUR.PI:8080&lt;/code&gt; and should see a link to the profile. Click it to download the profile and open it up in the OpenVPN app on your phone. It will ask for the password you set earlier, and once you enter it in you should be all set. Turn off wifi, and test that you can connect to your home nextwork.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Posteo IMAP Imail in Mutt</title>
      <link>https://blog.stallmer.com/posts/posteo-imap-in-mutt/</link>
      <pubDate>Thu, 18 Jun 2020 00:00:00 +0000</pubDate>
      
      <guid>https://blog.stallmer.com/posts/posteo-imap-in-mutt/</guid>
      <description>&lt;p&gt;De-Googling your life has become popular these days, and the more I read about it the more it made sense to move at least some of my information away from one of the globe&amp;rsquo;s largest companies. The biggest step for me (and most people) is to stop using gmail as your main email address. I&amp;rsquo;ve had my gmail address for close to a decade. People know it, many accounts are connected to it, and it has a huge backlog of email.&lt;/p&gt;
&lt;p&gt;Despite that, I looked around, and decided to give &lt;a href=&#34;https://posteo.de&#34;&gt;Posteo&lt;/a&gt; a try. I&amp;rsquo;ve had the email account for about 6 months, and I like Posteo&amp;rsquo;s service. It&amp;rsquo;s about 1 euro per month for my account, and I could pay more for storage if I wanted. However, another part of the switch to Posteo was using neomutt (an updated version of the mutt email program).&lt;/p&gt;
&lt;h2 id=&#34;the-setup&#34;&gt;The setup&lt;/h2&gt;
&lt;p&gt;My neomutt setup is similar to most of the ones you&amp;rsquo;ll find online.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Email goes to my Posteo account&lt;/li&gt;
&lt;li&gt;I sync a local version of my email folders to my desktop computer&lt;/li&gt;
&lt;li&gt;I can read, reply, archive, and delete emails on my computer&lt;/li&gt;
&lt;li&gt;The changes are sync&amp;rsquo;d back to Posteo using&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It relies on a few pieces of software. Another important piece of information is that my contacts are also stored on Posteo.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://isync.sourceforge.net/&#34;&gt;isync&lt;/a&gt; for grabbing new emails, and keeping my offline copy sync&amp;rsquo;d to the server&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://neomutt.org&#34;&gt;neomutt&lt;/a&gt; for reading and writing emails&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://vdirsyncer.pimutils.org/en/stable/&#34;&gt;vdirsyncer&lt;/a&gt; for keeping a local, sync&amp;rsquo;d copy of my contacts&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/scheibler/khard/&#34;&gt;khard&lt;/a&gt; for cardDAV contact management&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The has a a couple benefits. The main one being that I always have an offline backup of my entire email account. Assuming I have a recent sync of my email inbox, I also can read, reply, archive, and delete emails as mentioned before even if I don&amp;rsquo;t have internet access. Once I &lt;strong&gt;do&lt;/strong&gt; have an internet connection again, the changes will be sync&amp;rsquo;d.&lt;/p&gt;
&lt;h2 id=&#34;email-sync&#34;&gt;Email sync&lt;/h2&gt;
&lt;p&gt;As mentioned above, I use isync to sync the Posteo IMAP folders to my local machine. Once the emails are sync&amp;rsquo;d I can interact with them as needed, and they are local files once on my machine so it doesn&amp;rsquo;t matter what the status of my connection is.&lt;/p&gt;
&lt;h3 id=&#34;mbsyncrc-file--dot-config-isync-dot-mbsyncrc&#34;&gt;mbsyncrc file (~/.config/isync/.mbsyncrc)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IMAPStore posteo-remote
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Host posteo.de
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Port &lt;span style=&#34;color:#ae81ff&#34;&gt;993&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;User emailaddress@posteo.net
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Uncomment one of the lines below depending on how the password is stored&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#PassCmd &amp;#34;pass email/posteo&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#Pass secretpassword&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SSLType IMAPS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CertificateFile /etc/ssl/certs/ca-certificates.crt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MaildirStore posteo-local
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Path ~/.local/mail/posteo/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inbox ~/.local/mail/posteo/INBOX
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Subfolders Verbatim
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Channel posteo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Master :posteo-remote:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Slave :posteo-local:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Create Both
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Expunge Both
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Patterns *
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SyncState *
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;contacts-syncing&#34;&gt;Contacts Syncing&lt;/h2&gt;
&lt;p&gt;Currently, my contacts are also stored in my Posteo account. This allows them to be sync&amp;rsquo;d to my iPhone/iPad pretty easily in addition to my computers. I use vdirsyncer to keep the contact information sync&amp;rsquo;d across devices, and I use khard to interact with and edit contact information on my computers. On my iPhone/iPad, I can edit the contacts using the built-in contact manager.&lt;/p&gt;
&lt;h3 id=&#34;vdirsyncer-config--dot-config-vdirsyncer-config&#34;&gt;vdirsyncer config (~/.config/vdirsyncer/config)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;general&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Folder where vdirsyncer can store some metadata about each pair.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;status_path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~/.cache/vdirsyncer/status/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# CardDAV&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;pair my_contacts&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;a &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;my_contacts_local&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;b &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;my_contacts_remote&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;collections &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;from a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;from b&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# metadata = [&amp;#34;displayname&amp;#34;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;storage my_contacts_local&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Storage references actual data on a remote server or on the local disk.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;filesystem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~/.local/contacts/emailaddress@posteo.net&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fileext &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.vcf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;storage my_contacts_remote&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;carddav&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://posteo.de:8443&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;username &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;emailaddress@posteo.net&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;password &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;secretpassword&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;read_only &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;khard-config--dot-config-khard-khard-dot-conf&#34;&gt;khard config (~/.config/khard/khard.conf)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;addressbooks&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[[&lt;/span&gt;posteo&lt;span style=&#34;color:#f92672&#34;&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ~/.local/contacts/emailaddress@posteo.net/default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;general&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;debug &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; no
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;default_action &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;editor &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; nvim, -i, NONE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;merge_editor &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; vimdiff
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;contact table&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#display names by first of last name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;display &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; first_name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# show uid table column: yes/no&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;show_uids &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#sort by first or last name: first_name / last_name / formatted_name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sort &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; last_name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# localize dates: yes / no&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;localize_dates &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# set a comma seperated list of preferred phone number types in descending priority&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;preferred_phone_number_type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pref, cell, home
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# set a csv list of preferred email address types in descending priority&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;preferred_email_address_type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pref, work, home
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;reading-and-writing-emails&#34;&gt;Reading and writing emails&lt;/h2&gt;
&lt;p&gt;Lastly, neomutt is the program I use to read, write, reply to, and delete emails. It&amp;rsquo;s quick and works well even over ssh/mosh.&lt;/p&gt;
&lt;h3 id=&#34;neomuttrc--dot-config-neomutt-neomuttrc&#34;&gt;neomuttrc (~/.config/neomutt/neomuttrc)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## Neomutt configuration file located at ~/.config/neomutt/neomuttrc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set from&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;emailaddress@posteo.net&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set realname&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;First Last&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sendmail &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/bin/msmtp -a posteo&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sendmail_wait &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;unset record
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set header_cache&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;~/.cache/neomutt/headers&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set message_cachedir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;~/.cache/neomutt/bodies&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set certificate_file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;~/.cache/neomutt/certificates&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# My mailboxes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set folder &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;~/.local/mail/posteo&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set spoolfile&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;+INBOX&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set postponed&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;+Drafts&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set record&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;+Sent&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set trash&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;+Trash&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mailboxes &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;INBOX &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Archive &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Sent &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Trash &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Drafts &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Junk &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Mailing List&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Notes &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Queue
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Personal preferences&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set date_format&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%y/%m/%d %I:%M%p&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set editor&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;nvim&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sort&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;threads
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sort&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;reverse-date&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set forward_format &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fwd: %s&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set include
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Setup khard for address book&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set query_command&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;khard email --parsable %s&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind editor &amp;lt;Tab&amp;gt; complete-query
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind editor ^T complete
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Set key bindings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind compose p postpone-message
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index p recall-message
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;macro index G &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;!mbsync -a -c ~/.config/isync//.mbsyncrc^M&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Update through mbsync&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Sidebar settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sidebar_visible&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sidebar_width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sidebar_short_path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sidebar_next_new_wrap &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set mail_check_stats
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#set sidebar_format = &amp;#39;%B%?F? [%F]?%* %?N?%N/?%S&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index,pager &lt;span style=&#34;color:#ae81ff&#34;&gt;\C&lt;/span&gt;k sidebar-prev
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index,pager &lt;span style=&#34;color:#ae81ff&#34;&gt;\C&lt;/span&gt;j sidebar-next
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index,pager &lt;span style=&#34;color:#ae81ff&#34;&gt;\C&lt;/span&gt;o sidebar-open
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index,pager &lt;span style=&#34;color:#ae81ff&#34;&gt;\C&lt;/span&gt;p sidebar-prev-new
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index,pager &lt;span style=&#34;color:#ae81ff&#34;&gt;\C&lt;/span&gt;n sidebar-next-new
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index,pager B sidebar-toggle-visible
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# HTML settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set mailcap_path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ~/.config/neomutt/mailcap
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alternative_order text/plain text/enriched text/html
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;macro attach &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;V&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;pipe-entry&amp;gt;iconv -c --to-code=UTF-8 &amp;gt; ~/.cache/neomutt/neomail.html&amp;lt;enter&amp;gt;&amp;lt;shell-escape&amp;gt;&lt;/span&gt;$BROWSER&lt;span style=&#34;color:#e6db74&#34;&gt; ~/.cache/neomutt/neomail.html&amp;lt;enter&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;source colors.neomuttrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;colors-dot-neomuttrc--dot-config-neomutt-colors-dot-neomuttrc&#34;&gt;colors.neomuttrc (~/.config/neomutt/colors.neomuttrc)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# vim: filetype=neomuttrc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Default index colors:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index yellow default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index_author red default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index_number blue default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index_subject cyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# For new mail:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index brightyellow black &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~N&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index_author brightred black &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~N&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index_subject brightcyan black &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~N&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Header colors:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color header blue default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color header brightmagenta default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^(From)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color header brightcyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^(Subject)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color header brightwhite default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^(CC|BCC)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mono bold bold
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mono underline underline
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mono indicator reverse
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mono error bold
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color normal default default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color indicator brightblack white
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color sidebar_highlight red default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color sidebar_divider brightblack black
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color sidebar_flagged red black
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color sidebar_new green black
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color normal brightyellow default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color error red default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color tilde black default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color message cyan default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color markers red white
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color attachment white default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color search brightmagenta default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color status brightyellow black
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color hdrdefault brightgreen default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color quoted green default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color quoted1 blue default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color quoted2 cyan default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color quoted3 yellow default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color quoted4 red default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color quoted5 brightred default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color signature brightgreen default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color bold black default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color underline black default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color normal default default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightred default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Email addresses&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightblue default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(https?|ftp)://[\-\.,/%~_:?&amp;amp;=\#a-zA-Z0-9]+&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# URL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body green default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\`[^\`]*\`&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Green text between ` and `&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightblue default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^# \.*&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Headings as bold blue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightcyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^## \.*&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Subheadings as bold cyan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightgreen default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^### \.*&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Subsubheadings as bold green&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body yellow default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^(\t| )*(-|\\*) \.*&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# List items as yellow&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightcyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[;:][-o][)/(|]&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# emoticons&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightcyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[;:][)(|]&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# emoticons&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightcyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[ ][*][^*]*[*][ ]?&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# more emoticon?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightcyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[ ]?[*][^*]*[*][ ]&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# more emoticon?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body red default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(BAD signature)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body cyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(Good signature)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightblack default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^gpg: Good signature .*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightyellow default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^gpg: &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightyellow red &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^gpg: BAD signature from.*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mono body bold &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^gpg: Good signature&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mono body bold &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^gpg: BAD signature from.*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body red default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*&amp;#39;();:&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*&amp;#39;()&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,;:@&amp;amp;=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*&amp;#39;();/?:@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*&amp;#39;();/?:@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*&amp;#39;();/?:@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*&amp;#39;();/?:@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n&amp;lt;&amp;gt;\&amp;#34;]&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;future-changes&#34;&gt;Future changes&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m pretty happy with this, and I don&amp;rsquo;t intend to changes things soon. However, I&amp;rsquo;d ultimately like to try keep my email archive on my personal computer and self-host my contacts.&lt;/p&gt;
&lt;h3 id=&#34;move-my-email-archive-offline&#34;&gt;Move my email archive offline&lt;/h3&gt;
&lt;p&gt;What I eventually plan to do is have my &amp;ldquo;archive&amp;rdquo; offline on my main computer, delete emails from the server, and only keep new emails on the server. This is similar to what people used to do with their email accounts, but with Google, Microsoft, and others giving away so much storage for free, there&amp;rsquo;s little incentive to keep your emails to yourself.&lt;/p&gt;
&lt;h3 id=&#34;move-contact-syncing-to-nextcloud&#34;&gt;Move contact syncing to Nextcloud&lt;/h3&gt;
&lt;p&gt;I had mentioned in a previous post that I have a Quad Sata Pi setup with a software raid. I intend to run Nextcloud on that, and move my contact storage off Posteo.&lt;/p&gt;
</description>
      <content>&lt;p&gt;De-Googling your life has become popular these days, and the more I read about it the more it made sense to move at least some of my information away from one of the globe&amp;rsquo;s largest companies. The biggest step for me (and most people) is to stop using gmail as your main email address. I&amp;rsquo;ve had my gmail address for close to a decade. People know it, many accounts are connected to it, and it has a huge backlog of email.&lt;/p&gt;
&lt;p&gt;Despite that, I looked around, and decided to give &lt;a href=&#34;https://posteo.de&#34;&gt;Posteo&lt;/a&gt; a try. I&amp;rsquo;ve had the email account for about 6 months, and I like Posteo&amp;rsquo;s service. It&amp;rsquo;s about 1 euro per month for my account, and I could pay more for storage if I wanted. However, another part of the switch to Posteo was using neomutt (an updated version of the mutt email program).&lt;/p&gt;
&lt;h2 id=&#34;the-setup&#34;&gt;The setup&lt;/h2&gt;
&lt;p&gt;My neomutt setup is similar to most of the ones you&amp;rsquo;ll find online.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Email goes to my Posteo account&lt;/li&gt;
&lt;li&gt;I sync a local version of my email folders to my desktop computer&lt;/li&gt;
&lt;li&gt;I can read, reply, archive, and delete emails on my computer&lt;/li&gt;
&lt;li&gt;The changes are sync&amp;rsquo;d back to Posteo using&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It relies on a few pieces of software. Another important piece of information is that my contacts are also stored on Posteo.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://isync.sourceforge.net/&#34;&gt;isync&lt;/a&gt; for grabbing new emails, and keeping my offline copy sync&amp;rsquo;d to the server&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://neomutt.org&#34;&gt;neomutt&lt;/a&gt; for reading and writing emails&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://vdirsyncer.pimutils.org/en/stable/&#34;&gt;vdirsyncer&lt;/a&gt; for keeping a local, sync&amp;rsquo;d copy of my contacts&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/scheibler/khard/&#34;&gt;khard&lt;/a&gt; for cardDAV contact management&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The has a a couple benefits. The main one being that I always have an offline backup of my entire email account. Assuming I have a recent sync of my email inbox, I also can read, reply, archive, and delete emails as mentioned before even if I don&amp;rsquo;t have internet access. Once I &lt;strong&gt;do&lt;/strong&gt; have an internet connection again, the changes will be sync&amp;rsquo;d.&lt;/p&gt;
&lt;h2 id=&#34;email-sync&#34;&gt;Email sync&lt;/h2&gt;
&lt;p&gt;As mentioned above, I use isync to sync the Posteo IMAP folders to my local machine. Once the emails are sync&amp;rsquo;d I can interact with them as needed, and they are local files once on my machine so it doesn&amp;rsquo;t matter what the status of my connection is.&lt;/p&gt;
&lt;h3 id=&#34;mbsyncrc-file--dot-config-isync-dot-mbsyncrc&#34;&gt;mbsyncrc file (~/.config/isync/.mbsyncrc)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IMAPStore posteo-remote
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Host posteo.de
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Port &lt;span style=&#34;color:#ae81ff&#34;&gt;993&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;User emailaddress@posteo.net
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Uncomment one of the lines below depending on how the password is stored&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#PassCmd &amp;#34;pass email/posteo&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#Pass secretpassword&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SSLType IMAPS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CertificateFile /etc/ssl/certs/ca-certificates.crt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MaildirStore posteo-local
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Path ~/.local/mail/posteo/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inbox ~/.local/mail/posteo/INBOX
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Subfolders Verbatim
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Channel posteo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Master :posteo-remote:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Slave :posteo-local:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Create Both
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Expunge Both
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Patterns *
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SyncState *
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;contacts-syncing&#34;&gt;Contacts Syncing&lt;/h2&gt;
&lt;p&gt;Currently, my contacts are also stored in my Posteo account. This allows them to be sync&amp;rsquo;d to my iPhone/iPad pretty easily in addition to my computers. I use vdirsyncer to keep the contact information sync&amp;rsquo;d across devices, and I use khard to interact with and edit contact information on my computers. On my iPhone/iPad, I can edit the contacts using the built-in contact manager.&lt;/p&gt;
&lt;h3 id=&#34;vdirsyncer-config--dot-config-vdirsyncer-config&#34;&gt;vdirsyncer config (~/.config/vdirsyncer/config)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;general&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Folder where vdirsyncer can store some metadata about each pair.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;status_path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~/.cache/vdirsyncer/status/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# CardDAV&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;pair my_contacts&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;a &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;my_contacts_local&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;b &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;my_contacts_remote&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;collections &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;from a&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;from b&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# metadata = [&amp;#34;displayname&amp;#34;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;storage my_contacts_local&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Storage references actual data on a remote server or on the local disk.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;filesystem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~/.local/contacts/emailaddress@posteo.net&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fileext &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.vcf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;storage my_contacts_remote&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;carddav&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://posteo.de:8443&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;username &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;emailaddress@posteo.net&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;password &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;secretpassword&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;read_only &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;khard-config--dot-config-khard-khard-dot-conf&#34;&gt;khard config (~/.config/khard/khard.conf)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;addressbooks&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[[&lt;/span&gt;posteo&lt;span style=&#34;color:#f92672&#34;&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ~/.local/contacts/emailaddress@posteo.net/default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;general&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;debug &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; no
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;default_action &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;editor &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; nvim, -i, NONE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;merge_editor &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; vimdiff
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;contact table&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#display names by first of last name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;display &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; first_name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# show uid table column: yes/no&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;show_uids &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#sort by first or last name: first_name / last_name / formatted_name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sort &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; last_name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# localize dates: yes / no&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;localize_dates &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# set a comma seperated list of preferred phone number types in descending priority&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;preferred_phone_number_type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pref, cell, home
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# set a csv list of preferred email address types in descending priority&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;preferred_email_address_type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pref, work, home
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;reading-and-writing-emails&#34;&gt;Reading and writing emails&lt;/h2&gt;
&lt;p&gt;Lastly, neomutt is the program I use to read, write, reply to, and delete emails. It&amp;rsquo;s quick and works well even over ssh/mosh.&lt;/p&gt;
&lt;h3 id=&#34;neomuttrc--dot-config-neomutt-neomuttrc&#34;&gt;neomuttrc (~/.config/neomutt/neomuttrc)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## Neomutt configuration file located at ~/.config/neomutt/neomuttrc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set from&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;emailaddress@posteo.net&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set realname&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;First Last&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sendmail &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/bin/msmtp -a posteo&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sendmail_wait &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;unset record
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set header_cache&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;~/.cache/neomutt/headers&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set message_cachedir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;~/.cache/neomutt/bodies&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set certificate_file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;~/.cache/neomutt/certificates&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# My mailboxes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set folder &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;~/.local/mail/posteo&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set spoolfile&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;+INBOX&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set postponed&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;+Drafts&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set record&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;+Sent&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set trash&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;+Trash&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mailboxes &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;INBOX &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Archive &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Sent &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Trash &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Drafts &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Junk &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Mailing List&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Notes &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Queue
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Personal preferences&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set date_format&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%y/%m/%d %I:%M%p&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set editor&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;nvim&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sort&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;threads
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sort&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;reverse-date&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set forward_format &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fwd: %s&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set include
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Setup khard for address book&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set query_command&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;khard email --parsable %s&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind editor &amp;lt;Tab&amp;gt; complete-query
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind editor ^T complete
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Set key bindings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind compose p postpone-message
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index p recall-message
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;macro index G &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;!mbsync -a -c ~/.config/isync//.mbsyncrc^M&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Update through mbsync&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Sidebar settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sidebar_visible&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sidebar_width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sidebar_short_path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set sidebar_next_new_wrap &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set mail_check_stats
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#set sidebar_format = &amp;#39;%B%?F? [%F]?%* %?N?%N/?%S&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index,pager &lt;span style=&#34;color:#ae81ff&#34;&gt;\C&lt;/span&gt;k sidebar-prev
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index,pager &lt;span style=&#34;color:#ae81ff&#34;&gt;\C&lt;/span&gt;j sidebar-next
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index,pager &lt;span style=&#34;color:#ae81ff&#34;&gt;\C&lt;/span&gt;o sidebar-open
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index,pager &lt;span style=&#34;color:#ae81ff&#34;&gt;\C&lt;/span&gt;p sidebar-prev-new
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index,pager &lt;span style=&#34;color:#ae81ff&#34;&gt;\C&lt;/span&gt;n sidebar-next-new
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bind index,pager B sidebar-toggle-visible
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# HTML settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set mailcap_path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ~/.config/neomutt/mailcap
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alternative_order text/plain text/enriched text/html
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;macro attach &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;V&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;pipe-entry&amp;gt;iconv -c --to-code=UTF-8 &amp;gt; ~/.cache/neomutt/neomail.html&amp;lt;enter&amp;gt;&amp;lt;shell-escape&amp;gt;&lt;/span&gt;$BROWSER&lt;span style=&#34;color:#e6db74&#34;&gt; ~/.cache/neomutt/neomail.html&amp;lt;enter&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;source colors.neomuttrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;colors-dot-neomuttrc--dot-config-neomutt-colors-dot-neomuttrc&#34;&gt;colors.neomuttrc (~/.config/neomutt/colors.neomuttrc)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# vim: filetype=neomuttrc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Default index colors:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index yellow default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index_author red default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index_number blue default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index_subject cyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# For new mail:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index brightyellow black &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~N&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index_author brightred black &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~N&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color index_subject brightcyan black &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~N&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Header colors:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color header blue default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color header brightmagenta default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^(From)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color header brightcyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^(Subject)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color header brightwhite default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^(CC|BCC)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mono bold bold
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mono underline underline
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mono indicator reverse
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mono error bold
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color normal default default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color indicator brightblack white
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color sidebar_highlight red default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color sidebar_divider brightblack black
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color sidebar_flagged red black
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color sidebar_new green black
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color normal brightyellow default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color error red default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color tilde black default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color message cyan default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color markers red white
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color attachment white default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color search brightmagenta default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color status brightyellow black
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color hdrdefault brightgreen default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color quoted green default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color quoted1 blue default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color quoted2 cyan default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color quoted3 yellow default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color quoted4 red default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color quoted5 brightred default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color signature brightgreen default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color bold black default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color underline black default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color normal default default
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightred default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Email addresses&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightblue default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(https?|ftp)://[\-\.,/%~_:?&amp;amp;=\#a-zA-Z0-9]+&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# URL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body green default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\`[^\`]*\`&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Green text between ` and `&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightblue default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^# \.*&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Headings as bold blue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightcyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^## \.*&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Subheadings as bold cyan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightgreen default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^### \.*&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Subsubheadings as bold green&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body yellow default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^(\t| )*(-|\\*) \.*&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# List items as yellow&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightcyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[;:][-o][)/(|]&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# emoticons&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightcyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[;:][)(|]&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# emoticons&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightcyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[ ][*][^*]*[*][ ]?&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# more emoticon?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightcyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[ ]?[*][^*]*[*][ ]&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# more emoticon?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body red default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(BAD signature)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body cyan default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(Good signature)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightblack default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^gpg: Good signature .*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightyellow default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^gpg: &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body brightyellow red &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^gpg: BAD signature from.*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mono body bold &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^gpg: Good signature&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mono body bold &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^gpg: BAD signature from.*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color body red default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*&amp;#39;();:&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*&amp;#39;()&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,;:@&amp;amp;=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*&amp;#39;();/?:@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*&amp;#39;();/?:@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*&amp;#39;():@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*&amp;#39;();/?:@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*&amp;#39;();/?:@&amp;amp;=+&lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n&amp;lt;&amp;gt;\&amp;#34;]&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;future-changes&#34;&gt;Future changes&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m pretty happy with this, and I don&amp;rsquo;t intend to changes things soon. However, I&amp;rsquo;d ultimately like to try keep my email archive on my personal computer and self-host my contacts.&lt;/p&gt;
&lt;h3 id=&#34;move-my-email-archive-offline&#34;&gt;Move my email archive offline&lt;/h3&gt;
&lt;p&gt;What I eventually plan to do is have my &amp;ldquo;archive&amp;rdquo; offline on my main computer, delete emails from the server, and only keep new emails on the server. This is similar to what people used to do with their email accounts, but with Google, Microsoft, and others giving away so much storage for free, there&amp;rsquo;s little incentive to keep your emails to yourself.&lt;/p&gt;
&lt;h3 id=&#34;move-contact-syncing-to-nextcloud&#34;&gt;Move contact syncing to Nextcloud&lt;/h3&gt;
&lt;p&gt;I had mentioned in a previous post that I have a Quad Sata Pi setup with a software raid. I intend to run Nextcloud on that, and move my contact storage off Posteo.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Setting Up a Static Site on a VPS</title>
      <link>https://blog.stallmer.com/posts/setting-up-a-vps/</link>
      <pubDate>Tue, 09 Jun 2020 00:00:00 +0000</pubDate>
      
      <guid>https://blog.stallmer.com/posts/setting-up-a-vps/</guid>
      <description>&lt;p&gt;Having never set up a VPS before, it took a while before I was able to get everything working correctly. Eventually, I got this to a state where I can write posts, and things seem secure (though we&amp;rsquo;ll see about that).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m writing this post mainly to keep a good set of notes in case I need to do this again at some point down the road.&lt;/p&gt;
&lt;p&gt;I grabbed a plan from one of the cheapest VPS plans I could find from a provider that received decent reviews. I then read several tutorials about setting up a static site on a VPS, and I settled on the following which has been working for me so far.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.linuxserver.io/images/docker-letsencrypt&#34;&gt;LetsEncrpyt container from Linuxserver.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SSH login with ssh key required&lt;/li&gt;
&lt;li&gt;Updated `ufw` rules to enabled SSH on the new port&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;letsencrpyt-docker-container&#34;&gt;LetsEncrpyt Docker container&lt;/h2&gt;
&lt;p&gt;This lets me use an SSL certificate on the site. While not necessary for a personal blog that I may not actually update all that often, it was a good learning experience.&lt;/p&gt;
&lt;p&gt;I use this docker container for a reverse proxy at home, and I found it to be pretty simple to set up. As someone new to Docker, I appreciate that it comes with both LetsEncrpyt and nginx in one package.&lt;/p&gt;
&lt;p&gt;I also use docker-compose as I find it a little easier to maintain with a set file in place that I can edit if needed.&lt;/p&gt;
&lt;p&gt;This is what my docker-compose.yml file looks like&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;version: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;services:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  letsencrypt:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    image: linuxserver/letsencrypt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    container_name: letsencrypt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    cap_add:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - NET_ADMIN
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    environment:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - PUID&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - PGID&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - EMAIL&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;emailaddress@domain.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - TZ&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;America/Los_Angeles
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - URL&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;yourdomain.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - SUBDOMAINS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;blog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - VALIDATION&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;dns
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - DNSPLUGIN&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;digitalocean
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - ONLY_SUBDOMAINS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;true
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    volumes:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - /home/ubuntu/docker/letsencrypt:/config
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ports:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - 80:80
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - 443:443
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    restart: unless-stopped
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I use the &lt;strong&gt;ONLY_SUBDOMAINS=true&lt;/strong&gt; variable because I use this same URL for other things that reside behind the firewall at home. They have their own certificates there.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the bulk of the changes needed, but there are a couple other files that need to up updated.&lt;/p&gt;
&lt;p&gt;Update the pertinent &lt;strong&gt;&lt;strong&gt;&lt;em&gt;config/dns-conf&lt;/em&gt;&lt;/strong&gt;&lt;/strong&gt; file with your API key for whichever service you are using. In the config file above you can see I am using Digital Ocean for DNS, so mine looks like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Instructions: https://github.com/certbot/certbot/blob/master/certbot-dns-digitalocean/certbot_dns_digitalocean/__init__.py#L21&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Replace with your value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dns_digitalocean_token &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ssh-requiring-key-for-login&#34;&gt;SSH requiring key for login&lt;/h2&gt;
&lt;p&gt;There are plenty of tutorials online about setting this up, but I used a combination of the &lt;a href=&#34;https://docs.ovh.com/gb/en/dedicated/creating-ssh-keys-dedicated/&#34;&gt;OVH tutorial&lt;/a&gt;, and the &lt;a href=&#34;https://youtu.be/gxpX_mubz2A&#34;&gt;text-based tutorial&lt;/a&gt; from Wolfgang&amp;rsquo;s Youtube video for setting up a personal VPN.&lt;/p&gt;
&lt;p&gt;Creating your key is simple with this command. I decided to add a password to the ssh key&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-keygen -t rsa -b &lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The next step is to actually copy the SSH key to the VPS so it can be used to verify your machine.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-copy-id username@ip_address
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I also took the advice of both tutorials and changed the SSH port, disabled password authentication, and disabled root login. All seemed like logical changes to make.&lt;/p&gt;
&lt;p&gt;Do this by editing the following entries in &lt;strong&gt;&lt;strong&gt;/etc/ssh/sshd_config&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Port ##&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PasswordAuthentication no&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PermitRootLogin no&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Then, restart ssh with &lt;code&gt;systemctl restart sshd&lt;/code&gt; it&amp;rsquo;s all set.&lt;/p&gt;
&lt;p&gt;The SSH key makes logging into the VPS much easier to log into, but an addition setup that I did not know about until watching Wolfgang&amp;rsquo;s video was making a server alias for the VPS.&lt;/p&gt;
&lt;p&gt;Create (or edit) a file at &lt;strong&gt;&lt;strong&gt;~/.ssh/config&lt;/strong&gt;&lt;/strong&gt;, and add the following configuration for the VPS.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Host domain
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    User username
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Port &lt;span style=&#34;color:#75715e&#34;&gt;##&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    IdentityFile ~/.ssh/id_rsa
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    HostName ip_address
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;From now on, you can just log into your VPS using your key with the command `ssh domain`. This is much more convenient, and I don&amp;rsquo;t need to try and remember the IP address for the VPS.&lt;/p&gt;
&lt;h2 id=&#34;updated-ufw-rules-to-enabled-ssh-on-the-new-port&#34;&gt;Updated ufw rules to enabled SSH on the new port&lt;/h2&gt;
&lt;p&gt;I also had to update the rules for the ufw firewall.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo ufw allow 69&lt;/code&gt; allows traffic on the new SSH port.&lt;/p&gt;
</description>
      <content>&lt;p&gt;Having never set up a VPS before, it took a while before I was able to get everything working correctly. Eventually, I got this to a state where I can write posts, and things seem secure (though we&amp;rsquo;ll see about that).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m writing this post mainly to keep a good set of notes in case I need to do this again at some point down the road.&lt;/p&gt;
&lt;p&gt;I grabbed a plan from one of the cheapest VPS plans I could find from a provider that received decent reviews. I then read several tutorials about setting up a static site on a VPS, and I settled on the following which has been working for me so far.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.linuxserver.io/images/docker-letsencrypt&#34;&gt;LetsEncrpyt container from Linuxserver.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SSH login with ssh key required&lt;/li&gt;
&lt;li&gt;Updated `ufw` rules to enabled SSH on the new port&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;letsencrpyt-docker-container&#34;&gt;LetsEncrpyt Docker container&lt;/h2&gt;
&lt;p&gt;This lets me use an SSL certificate on the site. While not necessary for a personal blog that I may not actually update all that often, it was a good learning experience.&lt;/p&gt;
&lt;p&gt;I use this docker container for a reverse proxy at home, and I found it to be pretty simple to set up. As someone new to Docker, I appreciate that it comes with both LetsEncrpyt and nginx in one package.&lt;/p&gt;
&lt;p&gt;I also use docker-compose as I find it a little easier to maintain with a set file in place that I can edit if needed.&lt;/p&gt;
&lt;p&gt;This is what my docker-compose.yml file looks like&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;version: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;services:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  letsencrypt:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    image: linuxserver/letsencrypt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    container_name: letsencrypt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    cap_add:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - NET_ADMIN
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    environment:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - PUID&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - PGID&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - EMAIL&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;emailaddress@domain.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - TZ&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;America/Los_Angeles
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - URL&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;yourdomain.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - SUBDOMAINS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;blog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - VALIDATION&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;dns
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - DNSPLUGIN&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;digitalocean
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - ONLY_SUBDOMAINS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;true
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    volumes:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - /home/ubuntu/docker/letsencrypt:/config
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ports:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - 80:80
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - 443:443
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    restart: unless-stopped
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I use the &lt;strong&gt;ONLY_SUBDOMAINS=true&lt;/strong&gt; variable because I use this same URL for other things that reside behind the firewall at home. They have their own certificates there.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the bulk of the changes needed, but there are a couple other files that need to up updated.&lt;/p&gt;
&lt;p&gt;Update the pertinent &lt;strong&gt;&lt;strong&gt;&lt;em&gt;config/dns-conf&lt;/em&gt;&lt;/strong&gt;&lt;/strong&gt; file with your API key for whichever service you are using. In the config file above you can see I am using Digital Ocean for DNS, so mine looks like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Instructions: https://github.com/certbot/certbot/blob/master/certbot-dns-digitalocean/certbot_dns_digitalocean/__init__.py#L21&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Replace with your value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dns_digitalocean_token &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ssh-requiring-key-for-login&#34;&gt;SSH requiring key for login&lt;/h2&gt;
&lt;p&gt;There are plenty of tutorials online about setting this up, but I used a combination of the &lt;a href=&#34;https://docs.ovh.com/gb/en/dedicated/creating-ssh-keys-dedicated/&#34;&gt;OVH tutorial&lt;/a&gt;, and the &lt;a href=&#34;https://youtu.be/gxpX_mubz2A&#34;&gt;text-based tutorial&lt;/a&gt; from Wolfgang&amp;rsquo;s Youtube video for setting up a personal VPN.&lt;/p&gt;
&lt;p&gt;Creating your key is simple with this command. I decided to add a password to the ssh key&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-keygen -t rsa -b &lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The next step is to actually copy the SSH key to the VPS so it can be used to verify your machine.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-copy-id username@ip_address
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I also took the advice of both tutorials and changed the SSH port, disabled password authentication, and disabled root login. All seemed like logical changes to make.&lt;/p&gt;
&lt;p&gt;Do this by editing the following entries in &lt;strong&gt;&lt;strong&gt;/etc/ssh/sshd_config&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Port ##&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PasswordAuthentication no&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PermitRootLogin no&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Then, restart ssh with &lt;code&gt;systemctl restart sshd&lt;/code&gt; it&amp;rsquo;s all set.&lt;/p&gt;
&lt;p&gt;The SSH key makes logging into the VPS much easier to log into, but an addition setup that I did not know about until watching Wolfgang&amp;rsquo;s video was making a server alias for the VPS.&lt;/p&gt;
&lt;p&gt;Create (or edit) a file at &lt;strong&gt;&lt;strong&gt;~/.ssh/config&lt;/strong&gt;&lt;/strong&gt;, and add the following configuration for the VPS.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Host domain
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    User username
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Port &lt;span style=&#34;color:#75715e&#34;&gt;##&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    IdentityFile ~/.ssh/id_rsa
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    HostName ip_address
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;From now on, you can just log into your VPS using your key with the command `ssh domain`. This is much more convenient, and I don&amp;rsquo;t need to try and remember the IP address for the VPS.&lt;/p&gt;
&lt;h2 id=&#34;updated-ufw-rules-to-enabled-ssh-on-the-new-port&#34;&gt;Updated ufw rules to enabled SSH on the new port&lt;/h2&gt;
&lt;p&gt;I also had to update the rules for the ufw firewall.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo ufw allow 69&lt;/code&gt; allows traffic on the new SSH port.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Raspberry Pi Raid 5 Array Using ROCK Pi Quad SATA Hat</title>
      <link>https://blog.stallmer.com/posts/raspberry-pi-raid-with-rock-pi-hat/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0000</pubDate>
      
      <guid>https://blog.stallmer.com/posts/raspberry-pi-raid-with-rock-pi-hat/</guid>
      <description>&lt;p&gt;I bought the Quad SATA Hat after watching a review of it from &lt;a href=&#34;https://youtu.be/Eix0PCB0byQ&#34;&gt;NovaSpirit Tech on Youtube&lt;/a&gt;. It took me a while to get the raid5 array set up, but it appears to be working after going through the process a couple times. Looking back, additional research before getting started would have been useful.&lt;/p&gt;
&lt;p&gt;I used four &lt;a href=&#34;https://amzn.to/3dMwCrB&#34;&gt;1 TB 2.5&amp;quot; WD Red NAS drives&lt;/a&gt; connected to the hat, and it makes a nice little package when all assembled. I decided to go with a raid5 array to provide some redundancy in case of drive failure.&lt;/p&gt;
&lt;p&gt;The first step was to create the actual raid array. All four drives were recognized when the device booted up, so I reformatted all of the drives using the default fdisk settings.&lt;/p&gt;
&lt;p&gt;One of the drives I received had apparently been a part of a previous raid array, so I had to issue the following command to before I could add it to my soon-to-be-create array&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo mdadm --stop /dev/md127&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Then I issued the command to create the raid array.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo mdadm --create /dev/md0 --level=5 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This was pretty quick process, and resulted in a 3TB raid array. I then had to create a mounting point for the array.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo mkdir -p /mnt/raid0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;and create a filesystem on the raid.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo mkfs.ext4 /dev/md0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I was then ready to mount the raid device to my Pi.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo mount /dev/md0 /mnt/raid0/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;### Issues I Encountered&lt;/p&gt;
&lt;p&gt;One of the pages I went to suggested running this command to enter the new array into /etc/fstab.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;echo &amp;quot;UUID=b9b10b2d-f2f8-4af5-b5e8-7bd516f4e194 /mnt/raid0/ ext4 defaults,noatime 0 2&amp;quot; | sudo tee -a /etc/fstab&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I did this, but kept having boot issues. Eventually, I discovered that the fstab entry was being added automatically, so I didn&amp;rsquo;t need to create one on my own. When I ran that command, I was adding a second entry into /etc/fstab for the same raid array. Obviously, that won&amp;rsquo;t work, so I removed the &amp;ldquo;manual&amp;rdquo; entry.&lt;/p&gt;
&lt;p&gt;This same site recommended running the following command to add the array to the /etc/mdadm/mdadm.conf file.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Because I had to create the array a couple times, I ended up with multiple entries in the conf file, and the array wouldn&amp;rsquo;t mount. This was clearly my fault for not checking the mdadm.conf file before running the command. To fix the issue, I ended up having to run the command below to find which UUID the drives were associated with, and only keep that one entry in the mdadm.conf file.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mdadm --examine /dev/sd*&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Once that was cleared up, the raid array worked just fine. The Pi boots and the raid array mounts as expected.&lt;/p&gt;
</description>
      <content>&lt;p&gt;I bought the Quad SATA Hat after watching a review of it from &lt;a href=&#34;https://youtu.be/Eix0PCB0byQ&#34;&gt;NovaSpirit Tech on Youtube&lt;/a&gt;. It took me a while to get the raid5 array set up, but it appears to be working after going through the process a couple times. Looking back, additional research before getting started would have been useful.&lt;/p&gt;
&lt;p&gt;I used four &lt;a href=&#34;https://amzn.to/3dMwCrB&#34;&gt;1 TB 2.5&amp;quot; WD Red NAS drives&lt;/a&gt; connected to the hat, and it makes a nice little package when all assembled. I decided to go with a raid5 array to provide some redundancy in case of drive failure.&lt;/p&gt;
&lt;p&gt;The first step was to create the actual raid array. All four drives were recognized when the device booted up, so I reformatted all of the drives using the default fdisk settings.&lt;/p&gt;
&lt;p&gt;One of the drives I received had apparently been a part of a previous raid array, so I had to issue the following command to before I could add it to my soon-to-be-create array&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo mdadm --stop /dev/md127&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Then I issued the command to create the raid array.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo mdadm --create /dev/md0 --level=5 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This was pretty quick process, and resulted in a 3TB raid array. I then had to create a mounting point for the array.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo mkdir -p /mnt/raid0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;and create a filesystem on the raid.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo mkfs.ext4 /dev/md0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I was then ready to mount the raid device to my Pi.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo mount /dev/md0 /mnt/raid0/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;### Issues I Encountered&lt;/p&gt;
&lt;p&gt;One of the pages I went to suggested running this command to enter the new array into /etc/fstab.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;echo &amp;quot;UUID=b9b10b2d-f2f8-4af5-b5e8-7bd516f4e194 /mnt/raid0/ ext4 defaults,noatime 0 2&amp;quot; | sudo tee -a /etc/fstab&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I did this, but kept having boot issues. Eventually, I discovered that the fstab entry was being added automatically, so I didn&amp;rsquo;t need to create one on my own. When I ran that command, I was adding a second entry into /etc/fstab for the same raid array. Obviously, that won&amp;rsquo;t work, so I removed the &amp;ldquo;manual&amp;rdquo; entry.&lt;/p&gt;
&lt;p&gt;This same site recommended running the following command to add the array to the /etc/mdadm/mdadm.conf file.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Because I had to create the array a couple times, I ended up with multiple entries in the conf file, and the array wouldn&amp;rsquo;t mount. This was clearly my fault for not checking the mdadm.conf file before running the command. To fix the issue, I ended up having to run the command below to find which UUID the drives were associated with, and only keep that one entry in the mdadm.conf file.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mdadm --examine /dev/sd*&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Once that was cleared up, the raid array worked just fine. The Pi boots and the raid array mounts as expected.&lt;/p&gt;
</content>
    </item>
    
  </channel>
</rss>
