<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" >

  <title>Erik L. Arneson — Writer and Software Developer</title>
  <subtitle>Erik L. Arneson is a freelance writer and software developer with WordPress experience. He is located in Portland, Oregon.</subtitle>
  <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator>
  <link href="https://arnesonium.com/feeds/howto.xml" rel="self" type="application/atom+xml" />
  <link href="https://arnesonium.com/" rel="alternate" type="text/html" />
  <updated>2026-06-18T15:03:10+00:00</updated>
  <id>https://arnesonium.com/feeds/howto.xml</id>
  <author>
    <name>Erik L. Arneson</name>
  </author>
      <entry>
        
        <title>Configuring Orgzly Interaction with Directory Local Variables</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2025/01/configuring-orgzly-with-directory-local-variables" rel="alternate" type="text/html" title="Configuring Orgzly Interaction with Directory Local Variables" />
        <updated>2025-01-28T00:00:00+00:00</updated>
        <id>https://arnesonium.com/2025/01/directory-local-with-orgzly</id>
          <category term="emacs" />
        
          <category term="org-mode" />
        
          <category term="howto" />
        <content type="html" xml:base="https://arnesonium.com/2025/01/configuring-orgzly-with-directory-local-variables">&lt;p&gt;I use &lt;a href=&quot;https://github.com/orgzly-revived/orgzly-android-revived&quot;&gt;Orgzly Revived&lt;/a&gt; on my phone to capture to-do items, tasks, writing ideas, and projects. Its files are then synced with an ownCloud server. Those same files are also constantly open in Emacs on my computer, which means there can be some gnarly issues with things getting out of sync. It took me a while to figure out a good way to manage this, and in this brief blog post, I would like to share my solution.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Setting up a remote storage system is outside the scope of this server. Orgzly Revived works well with Dropbox, ownCloud, and nextCloud, though support for the other two is nicer as it can support automatic syncing in more situations. The &lt;a href=&quot;https://github.com/orgzly-revived/documentation&quot;&gt;Orgzly Revived documentation&lt;/a&gt; has an excellent description of how that configuration works.&lt;/p&gt;

&lt;p&gt;Note that to keep things simple, I keep my Orgzly Revived files and &lt;em&gt;only&lt;/em&gt; those files in a directory on my remote server. On my computer, the location for these files is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/org/orgzly/&lt;/code&gt;, which is how I shall refer to it later on.&lt;/p&gt;

&lt;h2 id=&quot;configuring-orgzly-revived-auto-sync&quot;&gt;Configuring Orgzly Revived Auto-sync&lt;/h2&gt;

&lt;p&gt;To configure the auto-sync capabilities in Orgzly Revived, go to the settings screen in the app and then navigate to &lt;strong&gt;Sync &amp;gt; Auto-sync&lt;/strong&gt;. Ensure that the following options are toggled on:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Auto-sync&lt;/li&gt;
  &lt;li&gt;Note created&lt;/li&gt;
  &lt;li&gt;Note updated or deleted&lt;/li&gt;
  &lt;li&gt;App started or resumed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures that Orgzly Revived is constantly checking your remote storage and both fetching and uploading changes.&lt;/p&gt;

&lt;h2 id=&quot;configuring-emacs-and-org-mode&quot;&gt;Configuring Emacs and Org-mode&lt;/h2&gt;

&lt;p&gt;On my computer, I want any changes that Orgzly Revived has updated to be automatically loaded into Emacs. Since I always leave Emacs running, that means it needs to detect changes on the disk for those particular files. I use two different methods to do this. First, in my init file, I have the following piece of code:&lt;/p&gt;

&lt;div class=&quot;language-lisp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;setq&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;orgzly-directory&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;expand-file-name&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;~/org/orgzly/&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;add-to-list&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;&apos;revert-without-query&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;rx&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;bol&lt;/span&gt; 
                                       &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;eval&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;orgzly-directory&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; 
                                       &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;.org&quot;&lt;/span&gt; 
                                       &lt;span class=&quot;nv&quot;&gt;eol&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This uses the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rx&lt;/code&gt; macro to easily create a regular expression that matches any filename ending in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;.org&quot;&lt;/code&gt; in the directory containing Orgzly Revived files. You may need to play around with the regular expression to get the right match. By adding those files to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;revert-without-query&lt;/code&gt;, Emacs will not bug you with extra questions and confirmations when changes are detected. However, this only works when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-revert-mode&lt;/code&gt; is enabled!&lt;/p&gt;

&lt;p&gt;At first, I thought there may be a way to enable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-revert-mode&lt;/code&gt; on a file-by-file basis, but quickly realized that this could cause too many problems with creating new files in the Orgzly Revived app. Eventually, I realized that the solution would be to make a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.dir-locals.el&lt;/code&gt; file in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/org/orgzly/&lt;/code&gt;. Open that file in Emacs, and stick the following in it.&lt;/p&gt;

&lt;div class=&quot;language-lisp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;eval&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;auto-revert-mode&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That ensures that any file in that directory will have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;auto-revert-mode&lt;/code&gt; enabled.&lt;/p&gt;

&lt;p&gt;Once you have done this, you can add task files or inbox files in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/org/orgzly&lt;/code&gt; to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;org-agenda-files&lt;/code&gt; variable, and they will show up in your agenda views as usual.&lt;/p&gt;

&lt;p&gt;Hopefully these instructions work for you. Please let me know if you can see any improvements or problems with the way I have implemented this. Happy task tracking!&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Using WireGuard over xfinitywifi</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2024/11/using-wireguard-over-xfinitywifi" rel="alternate" type="text/html" title="Using WireGuard over xfinitywifi" />
        <updated>2024-11-08T00:00:00+00:00</updated>
        <id>https://arnesonium.com/2024/11/wireguard-over-xfinitywifi</id>
          <category term="security" />
        
          <category term="networking" />
        
          <category term="howto" />
        <content type="html" xml:base="https://arnesonium.com/2024/11/using-wireguard-over-xfinitywifi">&lt;p&gt;If you are a Comcast Xfinity customer, you hopefully know that you can log into WiFi hotspots wherever other Xfinity customers have them enabled, all using the SSID &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfinitywifi&lt;/code&gt;. You may have also figured out by now that &lt;a href=&quot;https://www.wireguard.com/&quot;&gt;WireGuard&lt;/a&gt; doesn’t seem to work over this WiFi service without additional tweaking.&lt;/p&gt;

&lt;p&gt;Well, I have tweaked a WireGuard configuration until it seems to work.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;I searched the Web for quite a while to find a good solution, and there seemed to be a general &lt;em&gt;feeling&lt;/em&gt; that the MTU needed to be adjusted. Lots of people offered various solutions.&lt;/p&gt;

&lt;p&gt;Through some experimentation, I discovered that on the client-side WireGuard configuration, the maximum transmission unit (MTU) needed to be set to 1280. Apparently this is a significant number because it’s the &lt;a href=&quot;https://en.wikipedia.org/wiki/Maximum_transmission_unit#MTUs_for_common_media&quot;&gt;lowest possible MTU for an IPv6 network&lt;/a&gt;. Setting the MTU so low will impact performance, but if you are going through a WireGuard VPN, performance probably isn’t your biggest concern.&lt;/p&gt;

&lt;p&gt;In the end, your client-side WireGuard configuration, which is located in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/wireguard/wg0.conf&lt;/code&gt; if you are on Linux, should look like the example below. Note in particular the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MTU&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AllowedIPs&lt;/code&gt; line.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[Interface]
PrivateKey = &amp;lt;your private key&amp;gt;
Address = &amp;lt;your ip address and netmask&amp;gt;
DNS = &amp;lt;your DNS server&amp;gt;
# This MTU line is the important one!
MTU = 1280

[Peer]
PublicKey = &amp;lt;your public key&amp;gt;
PresharedKey = &amp;lt;your pre-shared key&amp;gt;
Endpoint = &amp;lt;your endpoint&amp;gt;:51820
# This is important for client-side routing!
AllowedIPs = 0.0.0.0/0, ::0/0
PersistentKeepalive = 25
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://amzn.to/4hI6hMI&quot;&gt;&lt;img src=&quot;/assets/img/sft1200_1.webp#right&quot; alt=&quot;GL.iNet GL-SFT1200 Opal&quot; /&gt;&lt;/a&gt;
This became important to me because I’ve been shifting over to using a secure travel router when I am out and about. The router I chose to go with is the &lt;a href=&quot;https://amzn.to/4hI6hMI&quot;&gt;GL.iNet GL-SFT1200 Opal&lt;/a&gt;, and it has built-in WireGuard support that you can enable with a switch on the side. It is very cute and effective. This allows me to use WireGuard to create a VPN tunnel back to &lt;a href=&quot;/2016/07/a-poor-mans-dynamic-dns-with-ansible-and-amazon-route53/&quot;&gt;my home network&lt;/a&gt;, which gives me the ability to use my dual &lt;a href=&quot;https://pi-hole.net/&quot;&gt;pi-hole&lt;/a&gt; setup from anywhere in the world!&lt;/p&gt;

&lt;p&gt;If you have been struggling with that pesky &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xfinitywifi&lt;/code&gt; network and its weird settings, I hope this helps. It took me too long to find the right solution!&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Installing Emacs 29.1 on Ubuntu 22.04 LTS</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2023/07/emacs-29-1-on-ubuntu-22-04-lts" rel="alternate" type="text/html" title="Installing Emacs 29.1 on Ubuntu 22.04 LTS" />
        <updated>2023-07-31T00:00:00+00:00</updated>
        <id>https://arnesonium.com/2023/07/emacs-291-ubuntu-2204LTS</id>
          <category term="emacs" />
        
          <category term="linux" />
        
          <category term="ubuntu" />
        
          <category term="howto" />
        <content type="html" xml:base="https://arnesonium.com/2023/07/emacs-29-1-on-ubuntu-22-04-lts">&lt;p&gt;You have probably heard by now, but &lt;a href=&quot;https://emacsredux.com/blog/2023/07/30/emacs-29-1-released/&quot;&gt;Emacs 29.1 has been released&lt;/a&gt;! Here are some reasons to upgrade and how to do so right away if you are running Ubuntu 22.04 LTS.
&lt;!--more--&gt;&lt;/p&gt;

&lt;h2 id=&quot;whats-new-with-emacs&quot;&gt;What’s New with Emacs?&lt;/h2&gt;

&lt;p&gt;One of the most exciting new features for me is &lt;a href=&quot;https://tree-sitter.github.io/tree-sitter/&quot;&gt;TreeSitter support&lt;/a&gt;, which provides incremental parsing capabilities for programming languages and other formatted files. This means that programming support will be getting faster, more comprehensive, and even better in future Emacs packages.&lt;/p&gt;

&lt;p&gt;Other new features include native WebP image support, pure GTK support, and the ability to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;emacs -x&lt;/code&gt; in the first line of a script, which could lead to some fun applications of Emacs Lisp. &lt;a href=&quot;https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/NEWS?h=emacs-29&quot;&gt;Read all of the release notes here!&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;installing-on-ubuntu-2204-lts&quot;&gt;Installing on Ubuntu 22.04 LTS&lt;/h2&gt;

&lt;p&gt;I am too impatient to wait for somebody to release a packaged version, so I installed Emacs 29.1 from source. It is fairly straightforward, though you will need to do a couple of special things to get all of the features you want.&lt;/p&gt;

&lt;h3 id=&quot;installing-the-requirements&quot;&gt;Installing the Requirements&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Note: All of the commands in this post assume you are using bash.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most of the extra libraries and packages you will need to build Emacs 29.1 are covered in the build dependencies for the stock Emacs package. However, to take advantage of some of the cool extra features now included in Emacs, you’ll need to install a few more things.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt build-dep emacs
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;libgccjit0 libgccjit-10-dev libjansson4 libjansson-dev &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    gnutls-bin libtree-sitter-dev gcc-10 imagemagick libmagick++-dev &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    libwebp-dev webp libxft-dev libxft2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;preparing-to-build&quot;&gt;Preparing to Build&lt;/h3&gt;

&lt;p&gt;In order to get native compilation (a feature added in Emacs 28) working correctly, you will need to make sure your shell instructs the build system to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gcc-10&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CC&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/bin/gcc-10
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;CXX&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/bin/gcc-10
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;get-the-source-code-and-lets-compile&quot;&gt;Get the Source Code and Let’s Compile!&lt;/h3&gt;

&lt;p&gt;Download the Emacs 29.1 source code from &lt;a href=&quot;http://ftpmirror.gnu.org/emacs/&quot;&gt;a nearby GNU mirror&lt;/a&gt; and then extract it! Then follow the instructions below. Note that you might want to take a closer look at the options to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;./configure&lt;/code&gt;. If you want native compilation, but don’t want to use the “ahead of time” option because it’s slow, you can remove the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;=aot&lt;/code&gt;. You might also want to stick Emacs in a different location using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--prefix&lt;/code&gt; option. For example, I used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--prefix=/opt/emacs29&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;emacs-29.1
./autogen.sh
./configure &lt;span class=&quot;nt&quot;&gt;--with-native-compilation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;aot &lt;span class=&quot;nt&quot;&gt;--with-imagemagick&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--with-json&lt;/span&gt; &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;--with-tree-sitter&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--with-xft&lt;/span&gt;
make &lt;span class=&quot;nt&quot;&gt;-j&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;nproc&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The build might take a while. With the “ahead of time” compilation, I think my build took ten or fifteen minutes. But once it is complete, try running your new Emacs binary to make sure it works.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./src/emacs &lt;span class=&quot;nt&quot;&gt;-Q&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If it works, install it!&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;make &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;whats-next&quot;&gt;What’s Next&lt;/h2&gt;

&lt;p&gt;You’ve got Emacs 29.1 installed and running! This is exciting. Which new features do you want to try first?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.masteringemacs.org/article/how-to-get-started-tree-sitter&quot;&gt;Get started with tree-sitter!&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;M-x eglot&lt;/code&gt; and see how cool language servers can be!&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.masteringemacs.org/article/whats-new-in-emacs-29-1&quot;&gt;Read about other new features in Emacs 29.1!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope this article was helpful, and that you are enjoying the latest version of Emacs! I used it to write this blog post, so you know I am.&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Some Great Fish Shell Plugins</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2022/09/some-great-fish-shell-plugins/" rel="alternate" type="text/html" title="Some Great Fish Shell Plugins" />
        <updated>2022-09-23T17:44:00+00:00</updated>
        <id>https://arnesonium.com/2022/09/some-great-fish-shell-plugins</id>
          <category term="automation" />
        
          <category term="command-line" />
        
          <category term="emacs" />
        
          <category term="fish-shell" />
        
          <category term="howto" />
        
          <category term="ide" />
        
          <category term="shell" />
        <content type="html" xml:base="https://arnesonium.com/2022/09/some-great-fish-shell-plugins/">&lt;p&gt; As a long-time Linux user, I am pretty comfortable with command line interfaces. However, as I started learning more about automation and how important it is to get your computer to do more work for you, I leaned toward wanting my command line shell to do more. Eventually I switched to &lt;a href=&quot;https://fishshell.com/&quot;&gt;fish shell&lt;/a&gt;, a very user-friendly shell with excellent scripting capabilities that is far more readable and less obscure than bash. &lt;/p&gt;
&lt;!--more--&gt;
&lt;div id=&quot;outline-container-orgbd4e930&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgbd4e930&quot;&gt;Plugins for fish&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgbd4e930&quot;&gt;
&lt;p&gt; There have been a few plugin managers over the years, but the one that seems to be the best maintained and most usable is &lt;a href=&quot;https://github.com/jorgebucaran/fisher&quot;&gt;fisher&lt;/a&gt;, created by &lt;a href=&quot;https://twitter.com/jorgebucaran&quot;&gt;Jorge Bucaran&lt;/a&gt;. It allows you to easily install plugins straight from GitHub repositories, while updates can be executed with a simple &lt;code&gt;fisher update&lt;/code&gt; on the command line. &lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org0108c85&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org0108c85&quot;&gt;z&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org0108c85&quot;&gt;
&lt;p&gt; &lt;b&gt;One of the greatest command-line time savers ever&lt;/b&gt; is the &lt;code&gt;z&lt;/code&gt; command. Originally a bash script, it has been ported to fish and, frankly, I love it. &lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;What does it do?&lt;/b&gt; &lt;code&gt;z&lt;/code&gt; provides shorthand for visiting directories based on a combination of frequency and recency&amp;#x2014;or &quot;frecency&quot;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; If you frequently visit the &lt;code&gt;/opt/calibre&lt;/code&gt; directory, a &lt;code&gt;z calib&lt;/code&gt; command will allow you to jump straight there. &lt;/p&gt;

&lt;p&gt; If you already have fisher installed, just use &lt;code&gt;fisher install jethrokuan/z&lt;/code&gt; and start playing around with &lt;code&gt;z&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt; &lt;a href=&quot;https://github.com/jethrokuan/z&quot;&gt;You can read more about &lt;code&gt;z&lt;/code&gt; here.&lt;/a&gt; &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orga78b5fb&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orga78b5fb&quot;&gt;pisces&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orga78b5fb&quot;&gt;
&lt;p&gt; &lt;b&gt;Your IDE has been handling your parenthesis for ages.&lt;/b&gt; Now your shell can do the same! The &lt;a href=&quot;https://github.com/laughedelic/pisces&quot;&gt;pisces&lt;/a&gt; plugin has automatic matching symbol management for parenthesis, braces, quotes, and others. &lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;Install it with fisher&lt;/b&gt; using the command &lt;code&gt;fisher install laughedelic/pisces&lt;/code&gt; and be matching parens in seconds!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;a href=&quot;https://github.com/laughedelic/pisces&quot;&gt;You can read more about the pisces plugin here.&lt;/a&gt; &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgc02da30&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgc02da30&quot;&gt;plugin-emacs&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgc02da30&quot;&gt;
&lt;p&gt; &lt;b&gt;Automation can help you interact with your editor&lt;/b&gt; from your shell. The &lt;a href=&quot;https://github.com/pymander/plugin-emacs&quot;&gt;Emacs plugin for fish&lt;/a&gt; was originally written for an unmaintained plugin manager called &lt;a href=&quot;https://github.com/oh-my-fish/oh-my-fish&quot;&gt;Oh My Fish&lt;/a&gt;. However, I wanted the plugin to work with fisher, so I made &lt;a href=&quot;https://github.com/pymander/plugin-emacs&quot;&gt;my own fork&lt;/a&gt;. &lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;How does it work?&lt;/b&gt; This plugin adds easy commands like &lt;code&gt;ef&lt;/code&gt; and &lt;code&gt;ed&lt;/code&gt; that allow you to open files and directories in Emacs quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; Install it quickly using the command &lt;code&gt;fisher install pymander/plugin-emacs&lt;/code&gt; and &lt;a href=&quot;https://github.com/pymander/plugin-emacs&quot;&gt;read more about it here&lt;/a&gt;. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orga8ddcd0&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orga8ddcd0&quot;&gt;vfish&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orga8ddcd0&quot;&gt;
&lt;p&gt; &lt;b&gt;Emacs users have probably heard of vterm,&lt;/b&gt; which is the &lt;a href=&quot;https://github.com/akermu/emacs-libvterm&quot;&gt;Emacs package that interacts with libvterm&lt;/a&gt;. It is a powerful terminal emulator that runs in an Emacs buffer. I wrote &lt;a href=&quot;https://github.com/pymander/vfish&quot;&gt;a fish plugin called vfish&lt;/a&gt; that simplifies using fish in vterm. &lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;How does it work?&lt;/b&gt; Inside a vterm session, this plugin adds fish commands like &lt;code&gt;vf&lt;/code&gt; and &lt;code&gt;vd&lt;/code&gt; to open files and directories quickly. It mirrors the Emacs plugin.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; Install it using the command &lt;code&gt;fisher install pymander/vfish&lt;/code&gt; and &lt;a href=&quot;https://github.com/pymander/vfish&quot;&gt;read more about it here&lt;/a&gt;. Note that &lt;b&gt;it will require some code&lt;/b&gt; to be added to your Emacs startup file.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgf6c1785&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgf6c1785&quot;&gt;apt&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgf6c1785&quot;&gt;
&lt;p&gt; For Debian and Ubuntu users, the &lt;a href=&quot;https://github.com/oh-my-fish/plugin-apt&quot;&gt;Oh My Fish apt plugin&lt;/a&gt; works seamlessly with fisher. &lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;b&gt;What does it do?&lt;/b&gt; The apt plugin adds a wrapper around the &lt;code&gt;apt&lt;/code&gt; and &lt;code&gt;apt-get&lt;/code&gt; commands that simplify package management from the command line.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; Install this plugin quickly with &lt;code&gt;fisher install oh-my-fish/plugin-apt&lt;/code&gt; and then &lt;a href=&quot;https://github.com/oh-my-fish/plugin-apt&quot;&gt;read more about it&lt;/a&gt;. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgef254fe&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgef254fe&quot;&gt;What&apos;s your favorite fisher plugin?&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgef254fe&quot;&gt;
&lt;p&gt; I love finding plugins that can help me automate more of my everyday tasks and workflows. What&apos;s your favorite fisher plugin? &lt;/p&gt;

&lt;p&gt; Leave a comment below and let me know! Be sure to include a link. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</content>
      </entry>
    
      <entry>
        
        <title>How to Increase Your Privacy on the Web</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2015/06/privacy-on-the-web/" rel="alternate" type="text/html" title="How to Increase Your Privacy on the Web" />
        <updated>2015-06-12T15:01:30+00:00</updated>
        <id>https://arnesonium.com/2015/06/privacy-on-the-web</id>
          <category term="cryptography" />
        
          <category term="firefox" />
        
          <category term="howto" />
        
          <category term="privacy" />
        
          <category term="security" />
        <content type="html" xml:base="https://arnesonium.com/2015/06/privacy-on-the-web/">&lt;p&gt;This week, I’m going to share a few links about how to lock down your PC to increase your privacy on the Web. There are a number of things that can be done, even if it’s something as small as &lt;a href=&quot;https://support.mozilla.org/en-US/kb/tracking-protection-firefox&quot; target=&quot;_blank&quot;&gt;turning on tracking protection&lt;/a&gt; in Firefox. As I’ve &lt;a href=&quot;https://arnesonium.com/?s=privacy&quot;&gt;written about many times&lt;/a&gt;, our privacy has been under attack since before the Internet existed. You are not powerless, &lt;a href=&quot;http://techcrunch.com/2015/06/06/the-online-privacy-lie-is-unraveling/&quot; target=&quot;_blank&quot;&gt;regardless of what you may think&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;https://twitter.com/runasand/status/606958744396828673
&lt;!--more--&gt;&lt;/p&gt;

&lt;h2&gt;Why Firefox?&lt;/h2&gt;

&lt;p&gt;If you want to increase your privacy, Firefox is your best bet. The author of Security Spread wrote a &lt;a href=&quot;http://securityspread.com/2013/08/12/private-secure-browser/&quot; target=&quot;_blank&quot;&gt;thorough analysis&lt;/a&gt;, in which he said, “I’m looking at this review from just the security and privacy perspective and I must say that Mozilla’s Firefox is the best. Both when it comes to ‘out of the box’ features and available add-ons.” He’s not the only one. Many security experts, analysts, and amateurs seem to agree that Firefox provides the strongest privacy protection.&lt;/p&gt;

&lt;p&gt;Firefox is also available for most mobile devices, as are the extensions I mention below.&lt;/p&gt;

&lt;h2&gt;Configuring For Privacy&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://arnesonium.com/wp-content/uploads/2015/06/Screenshot-from-2015-06-10-211011-300x113.png&quot; alt=&quot;Firefox privacy settings&quot; width=&quot;300&quot; height=&quot;113&quot; class=&quot;alignright size-medium wp-image-508&quot; /&gt;Now that you’ve listened to me and a bunch of other strangers on the Internet, you’ve got Firefox installed. Let’s get started! The first and easiest step is the “Do not track” setting. Go into the &lt;strong&gt;Privacy&lt;/strong&gt; panel of your &lt;strong&gt;Preferences&lt;/strong&gt; and check &lt;strong&gt;Tell sites that I do not want to be tracked.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This setting sounds good, but it might not do much. Mozilla says on their &lt;a href=&quot;https://www.mozilla.org/en-US/firefox/dnt/&quot; target=&quot;_blank&quot;&gt;website&lt;/a&gt;, “Companies are starting to support Do Not Track, but you may not notice any changes initially.” This means that it’s only the nice, polite companies who didn’t realize they were doing something unsavory who are going to stop tracking you.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://arnesonium.com/wp-content/uploads/2015/06/Screenshot-from-2015-06-11-085459.png&quot;&gt;&lt;img src=&quot;https://arnesonium.com/wp-content/uploads/2015/06/Screenshot-from-2015-06-11-085459-300x110.png&quot; alt=&quot;Disable third-party cookies&quot; width=&quot;300&quot; height=&quot;110&quot; class=&quot;alignright size-medium wp-image-519&quot; /&gt;&lt;/a&gt;You should also disable &lt;strong&gt;third-party cookies&lt;/strong&gt;. These are cookies set by a website that can be read by another. For example, Facebook “Like” buttons do this. Sometimes they’re necessary, but you should experiment and see what works for you. You should still be on the &lt;strong&gt;Privacy&lt;/strong&gt; panel, so select “Use custom settings for history” from the &lt;strong&gt;History &amp;gt; Firefox will:&lt;/strong&gt; drop down. Then change &lt;strong&gt;Accept third-party&lt;/strong&gt; cookies to “Never”.&lt;/p&gt;

&lt;p&gt;These settings are a good start, but there’s more we can do. To go further, you’ll need some add-ons and plugins.&lt;/p&gt;

&lt;h2&gt;Privacy-Enhancing Plugins&lt;/h2&gt;

&lt;p&gt;Remember that you need to try to protect your privacy not only from parties trying to track you via cookies, ads, and websites, but also network providers, corporations, and governments who have access to your raw Internet traffic. The add-ons below attempt to address both of these situations.&lt;/p&gt;

&lt;h3&gt;HTTPS Everywhere&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://arnesonium.com/wp-content/uploads/2015/06/https-everywhere-logo.png&quot; alt=&quot;https-everywhere-logo&quot; width=&quot;128&quot; height=&quot;128&quot; class=&quot;alignright size-full wp-image-514&quot; /&gt;The Electronic Freedom Foundation provides &lt;a href=&quot;https://www.eff.org/https-everywhere&quot; target=&quot;_blank&quot;&gt;HTTPS Everywhere&lt;/a&gt;. This is an extension that works for Firefox, Chrome, and Opera, so even if you ignored my advice to install Firefox, you should still be able to use this. It does everything it can to try to make an encrypted connection to a website. In Firefox, it provides you with a drop down menu that lets you know how many encrypted and unencrypted connections you’ve made to the current page.&lt;/p&gt;

&lt;h3&gt;Ghostery&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://arnesonium.com/wp-content/uploads/2015/06/Screenshot-from-2015-06-10-220237.png&quot; alt=&quot;Ghostery logo&quot; width=&quot;218&quot; height=&quot;85&quot; class=&quot;alignright size-full wp-image-515&quot; /&gt;&lt;a href=&quot;https://www.ghostery.com/&quot; target=&quot;_blank&quot;&gt;Ghostery&lt;/a&gt; is an extension that blocks third-party tracking. It works with Firefox, Safari, Chrome, and Opera. Currently, it claims to block 2,019 different trackers, which seems like a lot. It has a nice interface that lets you pick and choose which trackers you will block on each site. For instance, you could allow WordPress analytics to work on this website, or you could universally allow &lt;a href=&quot;https://arnesonium.com/cedexis-radar-tracking-for-wordpress/&quot;&gt;Cedexis Radar&lt;/a&gt; for performance reasons.&lt;/p&gt;

&lt;h3&gt;Adblock Plus&lt;/h3&gt;

&lt;p&gt;On top of Ghostery, you’ll want to install &lt;a href=&quot;https://adblockplus.org/&quot; target=&quot;_blank&quot;&gt;Adblock Plus&lt;/a&gt;. This extension is available for Firefox, Safari, Chrome, Opera, and a number of other lesser-known browsers. Addblock Plus can be used to block additional content and trackers that Ghostery might not be catching. However, it takes more configuration. You will want to visit the &lt;a href=&quot;https://adblockplus.org/en/subscriptions&quot; target=&quot;_blank&quot;&gt;Addblock filter list&lt;/a&gt; to decide what to block.&lt;/p&gt;

&lt;h3&gt;And Others&lt;/h3&gt;

&lt;p&gt;There are other add-ons and extensions out there. &lt;a href=&quot;http://www.makeuseof.com/tag/best-firefox-addons-for-enhancing-security-and-privacy/&quot; target=&quot;_blank&quot;&gt;Here’s a pretty good list.&lt;/a&gt; Note that I didn’t cover some of the other staples, like &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/noscript/&quot; target=&quot;_blank&quot;&gt;NoScript&lt;/a&gt;. This is because I don’t want you to get frustrated by usability issues on the Web and give up on protecting your privacy all together.&lt;/p&gt;

&lt;h2&gt;Heavy-Duty Privacy: Tor&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://arnesonium.com/wp-content/uploads/2015/06/tor-logo.jpg&quot; alt=&quot;tor-logo&quot; width=&quot;150&quot; height=&quot;101&quot; class=&quot;alignleft size-full wp-image-516&quot; /&gt;If you really want privacy, and you’re really serious about it, you’ll want to use &lt;a href=&quot;https://www.torproject.org/&quot; target=&quot;_blank&quot;&gt;Tor&lt;/a&gt;. Using it correctly takes some learning, though. I would advise you to read as much as you can, and then &lt;a href=&quot;https://arnesonium.com/contact/&quot;&gt;ask me questions about it&lt;/a&gt;. To get started as fast as possible, you should check out the &lt;a href=&quot;https://www.torproject.org/projects/torbrowser.html.en&quot; target=&quot;_blank&quot;&gt;Tor Browser&lt;/a&gt;, which is of course based on Firefox.&lt;/p&gt;

&lt;h2&gt;That&apos;s Just a Start&lt;/h2&gt;

&lt;p&gt;Unfortunately, you have to remember that most eCommerce websites, advertisers, and governments don’t want you to remain private. You will need to pay attention to what you’re doing online. Be &lt;a href=&quot;https://arnesonium.com/?s=mindful&quot;&gt;mindful&lt;/a&gt; of your activities and remember that anything you release into the wilds of the Internet might be traceable back to you—forever.&lt;/p&gt;

&lt;blockquote&gt;&quot;Privacy is not something that I&apos;m merely entitled to, it&apos;s an absolute prerequisite.&quot;
― Marlon Brando&lt;/blockquote&gt;

&lt;p&gt;&lt;small&gt;&lt;em&gt;The featured image is a screenshot of the SSL certificate for &lt;a href=&quot;https://rya.nc/&quot; target=&quot;_blank&quot;&gt;rya.nc&lt;/a&gt;. RyanC writes about how he created the &lt;a href=&quot;https://rya.nc/cert-tricks.html&quot; target=&quot;_blank&quot;&gt;certificate here&lt;/a&gt;.&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;</content>
      </entry>
    
</feed>
