<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Noveris</title>
        <link>https://noveris.se</link>
        <description>Personal blog and portfolio of Lars Jönsson</description>
        <language></language>
        <copyright>Copyright Noveris</copyright>
        <managingEditor>info@noveris.se</managingEditor>
        <webMaster>info@noveris.se (Lars Jönsson)</webMaster>
        <generator>Statamic</generator>
        <docs>https://www.rssboard.org/rss-specification</docs>
        <ttl>60</ttl>
        <atom:link href="https://noveris.se/en/rss.xml" rel="self" type="application/rss+xml" />
        <image>
            <url>https://noveris.se/favicon-32x32.png</url>
            <title>Noveris</title>
            <link>https://noveris.se</link>
            <width>32</width>
            <height>32</height>
            <description>Noveris favicon</description>
        </image>

        
        <item>
            <title>What the WordPress hack tells us about plugin security</title>
            <link>https://noveris.se/en/articles/wordpress-hacked-statamic-safe</link>
            <guid isPermaLink="true">https://noveris.se/en/articles/wordpress-hacked-statamic-safe</guid>
            <pubDate>Thu, 16 Apr 2026</pubDate>
            <description>
                <![CDATA[<figure>
  <img src="/assets/wordpress-plugins.jpg" alt="WordPress, plugins, screen">
  <figcaption>None of the plugins shown in the image are related to this article</figcaption>
</figure>
<h2>What actually happened?</h2>
<p>A person calling himself <em>&quot;Kris&quot;</em> (with a background in SEO, crypto, and online gambling) bought a company called <strong>Essential Plugin</strong> on <a rel="noopener noreferrer" target="_blank" href="https://flippa.com/">Flippa</a> on August 8, 2025. The company had developed 31 plugins. After the purchase, he planted a so-called <em>&quot;backdoor&quot;</em> in all of them. But he didn't do anything noticeable for about 8 months before the backdoor was activated in April 2026.</p>
<h2>What did the hack do?</h2>
<p>It gave the attacker total control over the website and everything on the server — what's called full remote code execution (RCE).</p>
<p>What actually happened was that the hack made it possible to inject hidden SEO spam into the website, all without the site owner noticing a thing. The attack was optimized to only show the spam to Googlebot, not to the person who owns the site. So nobody saw the &quot;ads&quot; the attack was serving.</p>
<h2>What did it mean for site owners?</h2>
<p>What <em>&quot;Kris&quot;</em> gained from this was exploiting the authenticity of other people's websites for his own benefit. He got Googlebot to boost his own affiliate links and similar content, which pushed him higher up in Google's search results without having to do anything more than let the hack work for him. Had this gone on for longer, the hacked websites would have risked losing their own ranking as Google flagged them as spam — without the owners having any idea why. <a rel="noopener noreferrer" target="_blank" href="https://wordpress.org/">WordPress</a> permanently took down all 31 plugins once it was discovered, but the injected code in <code>wp-config.php</code> is still there and has to be cleaned out manually by a developer.</p>
<h2>What is a supply chain attack?</h2>
<p>This is a textbook <a rel="noopener noreferrer" target="_blank" href="https://en.wikipedia.org/wiki/Supply_chain_attack">supply chain attack</a>, which in this case exploits WordPress's reliance on third-party plugins from many different developers.</p>
<p>This means that the hacker does not attack you, the user, directly, but rather something you rely on for your website to function – in this case, a plugin. The hacker takes control of the plugin and embeds malicious code within it, which is then smuggled in via a completely normal update. And because the update comes from a trusted source, it doesn’t raise any suspicion.</p>
<h2>Is WordPress insecure?</h2>
<p>This does not mean that WordPress is bad or that all WordPress sites get hacked. The core of WordPress itself is secure and receives regular security updates. With a knowledgeable developer, few plugins installed and good maintenance routines, it is perfectly possible to keep it secure. WordPress is simply more exposed to risks because it is such an extremely popular CMS; <a rel="noopener noreferrer" target="_blank" href="https://wordpress.com/blog/2025/04/17/wordpress-market-share/">43%</a> of all websites are built using WordPress. So people often assume that WordPress is insecure when they hear it has been hacked. But in reality, it is the plugin market that is less secure.</p>
<h2>How Statamic reduces the risk</h2>
<p>I'd say no one can fully avoid being hit by a <a rel="noopener noreferrer" target="_blank" href="https://en.wikipedia.org/wiki/Supply_chain_attack">supply chain attack</a>, but with <a rel="noopener noreferrer" target="_blank" href="https://statamic.com/">Statamic</a> you avoid that risk almost entirely:</p>
<ul>
<li>No need for multiple plugins. Most of the features you need are already built into Statamic.</li>
<li>Statamic is developed by a single team that's <a rel="noopener noreferrer" target="_blank" href="https://github.com/statamic/cms">very active</a>.</li>
<li>Flat-file architecture (no database) — that alone eliminates common attacks like <a rel="noopener noreferrer" target="_blank" href="https://www.kaspersky.com/resource-center/definitions/sql-injection">SQL injection</a>.</li>
<li>Built on the modern and secure PHP framework Laravel.</li>
<li>Much smaller attack surface and significantly lower risk of mass infections.</li>
</ul>
<h3>One marketplace, one package manager</h3>
<p>Another important aspect is that customers can buy plugins from any number of different websites — like <a rel="noopener noreferrer" target="_blank" href="https://codecanyon.net/">CodeCanyon</a>, <a rel="noopener noreferrer" target="_blank" href="https://wordpress.org/plugins/">WordPress.org</a>, and <a rel="noopener noreferrer" target="_blank" href="https://pluginsforwp.com/">PluginsForWordPress</a> — which makes the WordPress market extremely fragmented.</p>
<p>When you buy or download a WordPress plugin, you receive a .zip file. There is no version history or insight into what has changed over time. If, as a developer, I want to review the code, I must either unzip it and go through it manually or use AI to scan for vulnerabilities.</p>
<p>Unlike Statamic, which uses a platform where you purchase <a rel="noopener noreferrer" target="_blank" href="https://statamic.com/addons">add-ons</a>. When I install them – which, as the developer, only I can do – I do so via <a rel="noopener noreferrer" target="_blank" href="https://getcomposer.org/">Composer</a>, which is PHP’s own package manager. And as a bonus, I can also view the history of these plugins via the version history in <a rel="noopener noreferrer" target="_blank" href="https://en.wikipedia.org/wiki/Git">Git</a>. I can see exactly what has changed, when, and by whom.</p>
<p>That’s one of the reasons why I build with Statamic. WordPress still has its place for certain types of projects, but I want to be able to guarantee the security of what I deliver.</p>
<h2>Want to read more about the hack?</h2>
<p>Austin Ginder was the person who alerted <a rel="noopener noreferrer" target="_blank" href="https://wordpress.org">WordPress.org</a> that something was wrong. He has written a very detailed <a rel="noopener noreferrer" target="_blank" href="https://anchor.host/someone-bought-30-wordpress-plugins-and-planted-a-backdoor-in-all-of-them">article</a> about this incident, including which plugins were affected.</p>
]]>
            </description>
            <content:encoded>
                <![CDATA[<figure>
  <img src="/assets/wordpress-plugins.jpg" alt="WordPress, plugins, screen">
  <figcaption>None of the plugins shown in the image are related to this article</figcaption>
</figure>
<h2>What actually happened?</h2>
<p>A person calling himself <em>&quot;Kris&quot;</em> (with a background in SEO, crypto, and online gambling) bought a company called <strong>Essential Plugin</strong> on <a rel="noopener noreferrer" target="_blank" href="https://flippa.com/">Flippa</a> on August 8, 2025. The company had developed 31 plugins. After the purchase, he planted a so-called <em>&quot;backdoor&quot;</em> in all of them. But he didn't do anything noticeable for about 8 months before the backdoor was activated in April 2026.</p>
<h2>What did the hack do?</h2>
<p>It gave the attacker total control over the website and everything on the server — what's called full remote code execution (RCE).</p>
<p>What actually happened was that the hack made it possible to inject hidden SEO spam into the website, all without the site owner noticing a thing. The attack was optimized to only show the spam to Googlebot, not to the person who owns the site. So nobody saw the &quot;ads&quot; the attack was serving.</p>
<h2>What did it mean for site owners?</h2>
<p>What <em>&quot;Kris&quot;</em> gained from this was exploiting the authenticity of other people's websites for his own benefit. He got Googlebot to boost his own affiliate links and similar content, which pushed him higher up in Google's search results without having to do anything more than let the hack work for him. Had this gone on for longer, the hacked websites would have risked losing their own ranking as Google flagged them as spam — without the owners having any idea why. <a rel="noopener noreferrer" target="_blank" href="https://wordpress.org/">WordPress</a> permanently took down all 31 plugins once it was discovered, but the injected code in <code>wp-config.php</code> is still there and has to be cleaned out manually by a developer.</p>
<h2>What is a supply chain attack?</h2>
<p>This is a textbook <a rel="noopener noreferrer" target="_blank" href="https://en.wikipedia.org/wiki/Supply_chain_attack">supply chain attack</a>, which in this case exploits WordPress's reliance on third-party plugins from many different developers.</p>
<p>This means that the hacker does not attack you, the user, directly, but rather something you rely on for your website to function – in this case, a plugin. The hacker takes control of the plugin and embeds malicious code within it, which is then smuggled in via a completely normal update. And because the update comes from a trusted source, it doesn’t raise any suspicion.</p>
<h2>Is WordPress insecure?</h2>
<p>This does not mean that WordPress is bad or that all WordPress sites get hacked. The core of WordPress itself is secure and receives regular security updates. With a knowledgeable developer, few plugins installed and good maintenance routines, it is perfectly possible to keep it secure. WordPress is simply more exposed to risks because it is such an extremely popular CMS; <a rel="noopener noreferrer" target="_blank" href="https://wordpress.com/blog/2025/04/17/wordpress-market-share/">43%</a> of all websites are built using WordPress. So people often assume that WordPress is insecure when they hear it has been hacked. But in reality, it is the plugin market that is less secure.</p>
<h2>How Statamic reduces the risk</h2>
<p>I'd say no one can fully avoid being hit by a <a rel="noopener noreferrer" target="_blank" href="https://en.wikipedia.org/wiki/Supply_chain_attack">supply chain attack</a>, but with <a rel="noopener noreferrer" target="_blank" href="https://statamic.com/">Statamic</a> you avoid that risk almost entirely:</p>
<ul>
<li>No need for multiple plugins. Most of the features you need are already built into Statamic.</li>
<li>Statamic is developed by a single team that's <a rel="noopener noreferrer" target="_blank" href="https://github.com/statamic/cms">very active</a>.</li>
<li>Flat-file architecture (no database) — that alone eliminates common attacks like <a rel="noopener noreferrer" target="_blank" href="https://www.kaspersky.com/resource-center/definitions/sql-injection">SQL injection</a>.</li>
<li>Built on the modern and secure PHP framework Laravel.</li>
<li>Much smaller attack surface and significantly lower risk of mass infections.</li>
</ul>
<h3>One marketplace, one package manager</h3>
<p>Another important aspect is that customers can buy plugins from any number of different websites — like <a rel="noopener noreferrer" target="_blank" href="https://codecanyon.net/">CodeCanyon</a>, <a rel="noopener noreferrer" target="_blank" href="https://wordpress.org/plugins/">WordPress.org</a>, and <a rel="noopener noreferrer" target="_blank" href="https://pluginsforwp.com/">PluginsForWordPress</a> — which makes the WordPress market extremely fragmented.</p>
<p>When you buy or download a WordPress plugin, you receive a .zip file. There is no version history or insight into what has changed over time. If, as a developer, I want to review the code, I must either unzip it and go through it manually or use AI to scan for vulnerabilities.</p>
<p>Unlike Statamic, which uses a platform where you purchase <a rel="noopener noreferrer" target="_blank" href="https://statamic.com/addons">add-ons</a>. When I install them – which, as the developer, only I can do – I do so via <a rel="noopener noreferrer" target="_blank" href="https://getcomposer.org/">Composer</a>, which is PHP’s own package manager. And as a bonus, I can also view the history of these plugins via the version history in <a rel="noopener noreferrer" target="_blank" href="https://en.wikipedia.org/wiki/Git">Git</a>. I can see exactly what has changed, when, and by whom.</p>
<p>That’s one of the reasons why I build with Statamic. WordPress still has its place for certain types of projects, but I want to be able to guarantee the security of what I deliver.</p>
<h2>Want to read more about the hack?</h2>
<p>Austin Ginder was the person who alerted <a rel="noopener noreferrer" target="_blank" href="https://wordpress.org">WordPress.org</a> that something was wrong. He has written a very detailed <a rel="noopener noreferrer" target="_blank" href="https://anchor.host/someone-bought-30-wordpress-plugins-and-planted-a-backdoor-in-all-of-them">article</a> about this incident, including which plugins were affected.</p>
]]>
            </content:encoded>
            
            
            
            
        </item>
        
        <item>
            <title>Switch between GitHub accounts using the gh CLI and Bash</title>
            <link>https://noveris.se/en/articles/github-cli-and-bash</link>
            <guid isPermaLink="true">https://noveris.se/en/articles/github-cli-and-bash</guid>
            <pubDate>Thu, 19 Mar 2026</pubDate>
            <description>
                <![CDATA[<p>It’s really handy to be able to push code with the right Git user without having to log in and out all the time. <a rel="noopener noreferrer" target="_blank" href="https://cli.github.com/">GitHub CLI</a> has a command called <code>gh auth switch</code> which seems to sort everything out, but I noticed that my commits weren’t being made using the account I’d already switched to. I had to restart my Kitty terminal for that change to take effect. But it shouldn’t have to be like that. When I’m working in the terminal, I’d rather not have to leave it and the task I’m working on just because something needs to reload.</p>
<h2>What does the gh auth switch actually do?</h2>
<p><code>gh auth switch</code> changes which GitHub user is active in the GitHub CLI tool. This affects:</p>
<ul>
<li>Which account gh commands use (e.g. <code>gh pr create</code>, <code>gh issue list</code>, <code>gh repo clone</code>)</li>
<li>Which authentication method Git uses when you run <code>git push</code> or <code>git pull</code> over HTTPS – if you have run <code>gh auth setup</code> once</li>
</ul>
<p>This does not affect:</p>
<ul>
<li>The Git configuration for my commits, i.e. <code>user.name</code> and <code>user.email</code> in this case.</li>
</ul>
<p>There is a very simple solution to this, which is to specify which GitHub user should be associated with which project – in my case, which folder. I have two separate folders that divide my projects into personal and work projects. Here’s how to do it:</p>
<pre><code data-theme='rose-pine-moon' data-lang='bash' class='phiki language-bash rose-pine-moon torchlight' style='background-color: #232136;color: #e0def4;'><!-- Syntax highlighted by Phiki and torchlight.dev --><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">1</span><span class="token" style="color: #908caa;">#</span><span class="token" style="color: #6e6a86;"> Go to your private project
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">2</span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--local</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.name</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Lars Jönsson&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">3</span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--local</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.email</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;crymeat@gmail.com&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">4</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">5</span><span class="token" style="color: #908caa;">#</span><span class="token" style="color: #6e6a86;"> and the same applies to your work project
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">6</span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--local</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.name</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Lars Jönsson&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">7</span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--local</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.email</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;info@noveris.se&quot;</span><span class="token">
</span></div></code></pre>
<p>It wasn’t that difficult.</p>
<p>But there’s another solution I’ve decided to go with. Mainly because I like tinkering with Bash and the CLI in general. I’ve created a Bash script that changes everything at once.</p>
<pre><code data-theme='rose-pine-moon' data-lang='bash' class='phiki language-bash rose-pine-moon torchlight' style='background-color: #232136;color: #e0def4;'><!-- Syntax highlighted by Phiki and torchlight.dev --><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 1</span><span class="token" style="color: #908caa;">#!</span><span class="token" style="color: #6e6a86;">/bin/bash
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 2</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 3</span><span class="token" style="color: #3e8fb0;">case</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;</span><span class="token" style="color: #c4a7e7;">$1</span><span class="token" style="color: #f6c177;">&quot;</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">in</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 4</span><span class="token">  </span><span class="token" style="color: #f6c177;">&quot;personal&quot;</span><span class="token" style="color: #3e8fb0;">)</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 5</span><span class="token">    </span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--global</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.name</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Lars Jönsson&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 6</span><span class="token">    </span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--global</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.email</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;crymeat@gmail.com&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 7</span><span class="token">    </span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Switching to devpaps git account...&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 8</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 9</span><span class="token">    </span><span class="token" style="color: #908caa;">#</span><span class="token" style="color: #6e6a86;"> Make devpaps active GitHub CLI account
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">10</span><span class="token">    </span><span class="token" style="color: #ea9a97;">gh</span><span class="token"> </span><span class="token" style="color: #f6c177;">auth</span><span class="token"> </span><span class="token" style="color: #f6c177;">status</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">|</span><span class="token"> </span><span class="token" style="color: #ea9a97;">grep</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;devpaps&quot;</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">&gt;</span><span class="token"> </span><span class="token" style="color: #f6c177;">/dev/null</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">11</span><span class="token">    </span><span class="token" style="color: #3e8fb0;">if</span><span class="token"> </span><span class="token" style="color: #908caa;">[</span><span class="token"> </span><span class="token" style="color: #e0def4;">$?</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-eq</span><span class="token"> 0 </span><span class="token" style="color: #908caa;">];</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">then</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">12</span><span class="token">      </span><span class="token" style="color: #ea9a97;">gh</span><span class="token"> </span><span class="token" style="color: #f6c177;">auth</span><span class="token"> </span><span class="token" style="color: #f6c177;">switch</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-h</span><span class="token"> </span><span class="token" style="color: #f6c177;">github.com</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-u</span><span class="token"> </span><span class="token" style="color: #f6c177;">devpaps</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">13</span><span class="token">    </span><span class="token" style="color: #3e8fb0;">else</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">14</span><span class="token">      </span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;devpaps not logged in via gh. Logging in...&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">15</span><span class="token">      </span><span class="token" style="color: #ea9a97;">gh</span><span class="token"> </span><span class="token" style="color: #f6c177;">auth</span><span class="token"> </span><span class="token" style="color: #f6c177;">login</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--hostname</span><span class="token"> </span><span class="token" style="color: #f6c177;">github.com</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">16</span><span class="token">    </span><span class="token" style="color: #3e8fb0;">fi</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">17</span><span class="token">    </span><span class="token" style="color: #908caa;">;;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">18</span><span class="token">  </span><span class="token" style="color: #f6c177;">&quot;work&quot;</span><span class="token" style="color: #3e8fb0;">)</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">19</span><span class="token">    </span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--global</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.name</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Lars Jönsson&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">20</span><span class="token">    </span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--global</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.email</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;info@noveris.se&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">21</span><span class="token">    </span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Switching to Noveris git account...&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">22</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">23</span><span class="token">    </span><span class="token" style="color: #908caa;">#</span><span class="token" style="color: #6e6a86;"> Make noveris-hq active GitHub CLI account
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">24</span><span class="token">    </span><span class="token" style="color: #ea9a97;">gh</span><span class="token"> </span><span class="token" style="color: #f6c177;">auth</span><span class="token"> </span><span class="token" style="color: #f6c177;">status</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">|</span><span class="token"> </span><span class="token" style="color: #ea9a97;">grep</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;noveris-hq&quot;</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">&gt;</span><span class="token"> </span><span class="token" style="color: #f6c177;">/dev/null</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">25</span><span class="token">    </span><span class="token" style="color: #3e8fb0;">if</span><span class="token"> </span><span class="token" style="color: #908caa;">[</span><span class="token"> </span><span class="token" style="color: #e0def4;">$?</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-eq</span><span class="token"> 0 </span><span class="token" style="color: #908caa;">];</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">then</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">26</span><span class="token">      </span><span class="token" style="color: #ea9a97;">gh</span><span class="token"> </span><span class="token" style="color: #f6c177;">auth</span><span class="token"> </span><span class="token" style="color: #f6c177;">switch</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-h</span><span class="token"> </span><span class="token" style="color: #f6c177;">github.com</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-u</span><span class="token"> </span><span class="token" style="color: #f6c177;">noveris-hq</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">27</span><span class="token">    </span><span class="token" style="color: #3e8fb0;">else</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">28</span><span class="token">      </span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;noveris-hq not logged in via gh. Logging in...&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">29</span><span class="token">      </span><span class="token" style="color: #ea9a97;">gh</span><span class="token"> </span><span class="token" style="color: #f6c177;">auth</span><span class="token"> </span><span class="token" style="color: #f6c177;">login</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--hostname</span><span class="token"> </span><span class="token" style="color: #f6c177;">github.com</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">30</span><span class="token">    </span><span class="token" style="color: #3e8fb0;">fi</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">31</span><span class="token">    </span><span class="token" style="color: #908caa;">;;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">32</span><span class="token">  </span><span class="token" style="color: #3e8fb0;">*)</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">33</span><span class="token">    </span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Usage: </span><span class="token" style="color: #c4a7e7;">$</span><span class="token" style="color: #f6c177;">0 {personal|work}&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">34</span><span class="token">    </span><span class="token" style="color: #eb6f92;">exit</span><span class="token"> </span><span class="token" style="color: #ea9a97;">1</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">35</span><span class="token">    </span><span class="token" style="color: #908caa;">;;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">36</span><span class="token" style="color: #3e8fb0;">esac</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">37</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">38</span><span class="token" style="color: #908caa;">#</span><span class="token" style="color: #6e6a86;"> Show current Git user configuration
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">39</span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-e</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;\nCurrent Git configuration:&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">40</span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Name:  </span><span class="token" style="color: #908caa;">$(</span><span class="token" style="color: #ea9a97;">git</span><span class="token" style="color: #f6c177;"> config </span><span class="token" style="color: #3e8fb0;">--global</span><span class="token" style="color: #f6c177;"> user.name</span><span class="token" style="color: #908caa;">)</span><span class="token" style="color: #f6c177;">&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">41</span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Email: </span><span class="token" style="color: #908caa;">$(</span><span class="token" style="color: #ea9a97;">git</span><span class="token" style="color: #f6c177;"> config </span><span class="token" style="color: #3e8fb0;">--global</span><span class="token" style="color: #f6c177;"> user.email</span><span class="token" style="color: #908caa;">)</span><span class="token" style="color: #f6c177;">&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">42</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">43</span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Reloading shell to apply GitHub credentials...&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">44</span><span class="token" style="color: #eb6f92;">exec</span><span class="token"> </span><span class="token" style="color: #e0def4;">$SHELL</span><span class="token">
</span></div></code></pre>
<p>What the script does is first set my name and email as my Git username, then it checks whether noveris-hq is authenticated with <code>gh-cli</code>; if so, my username in <code>gh-cli</code> is also changed to noveris-hq; if not, I have to log in via <code>gh-cli</code>.</p>
<p>To use this Bash script, all I need to do is type:</p>
<pre><code data-theme='rose-pine-moon' data-lang='shell' class='phiki language-shell rose-pine-moon torchlight' style='background-color: #232136;color: #e0def4;'><!-- Syntax highlighted by Phiki and torchlight.dev --><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">1</span><span class="token" style="color: #ea9a97;">noveris</span><span class="token"> </span><span class="token" style="color: #f6c177;">on</span><span class="token">  </span><span class="token" style="color: #f6c177;">main</span><span class="token"> </span><span class="token" style="color: #f6c177;">+95</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-93</span><span class="token"> [$!?] via  v22.20.0 via 🐘 v8.5.4 ❯ switchgh work
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">2</span><span class="token" style="color: #ea9a97;">Switching</span><span class="token"> </span><span class="token" style="color: #f6c177;">to</span><span class="token"> </span><span class="token" style="color: #f6c177;">Noveris</span><span class="token"> </span><span class="token" style="color: #f6c177;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">account...</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">3</span><span class="token" style="color: #ea9a97;">✓</span><span class="token"> </span><span class="token" style="color: #f6c177;">Switched active account for github.com to noveris-hq
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">4</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">5</span><span class="token" style="color: #ea9a97;">Current</span><span class="token"> </span><span class="token" style="color: #f6c177;">Git</span><span class="token"> </span><span class="token" style="color: #f6c177;">configuration:</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">6</span><span class="token" style="color: #ea9a97;">Name:</span><span class="token">  </span><span class="token" style="color: #f6c177;">Lars</span><span class="token"> </span><span class="token" style="color: #f6c177;">Jönsson
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">7</span><span class="token" style="color: #ea9a97;">Email:</span><span class="token"> </span><span class="token" style="color: #f6c177;">info@noveris.se</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">8</span><span class="token" style="color: #ea9a97;">Reloading</span><span class="token"> </span><span class="token" style="color: #f6c177;">shell</span><span class="token"> </span><span class="token" style="color: #f6c177;">to</span><span class="token"> </span><span class="token" style="color: #f6c177;">apply</span><span class="token"> </span><span class="token" style="color: #f6c177;">GitHub</span><span class="token"> </span><span class="token" style="color: #f6c177;">credentials...</span><span class="token">
</span></div></code></pre>
<p>Everything is handled automatically for me. I think this is really good. Plus, you feel a bit like a hacker when you get to type commands into the terminal, which is a bonus.</p>
<p>It might be a bit of overkill with my Bash script, but what does it matter in a hundred years time?</p>
]]>
            </description>
            <content:encoded>
                <![CDATA[<p>It’s really handy to be able to push code with the right Git user without having to log in and out all the time. <a rel="noopener noreferrer" target="_blank" href="https://cli.github.com/">GitHub CLI</a> has a command called <code>gh auth switch</code> which seems to sort everything out, but I noticed that my commits weren’t being made using the account I’d already switched to. I had to restart my Kitty terminal for that change to take effect. But it shouldn’t have to be like that. When I’m working in the terminal, I’d rather not have to leave it and the task I’m working on just because something needs to reload.</p>
<h2>What does the gh auth switch actually do?</h2>
<p><code>gh auth switch</code> changes which GitHub user is active in the GitHub CLI tool. This affects:</p>
<ul>
<li>Which account gh commands use (e.g. <code>gh pr create</code>, <code>gh issue list</code>, <code>gh repo clone</code>)</li>
<li>Which authentication method Git uses when you run <code>git push</code> or <code>git pull</code> over HTTPS – if you have run <code>gh auth setup</code> once</li>
</ul>
<p>This does not affect:</p>
<ul>
<li>The Git configuration for my commits, i.e. <code>user.name</code> and <code>user.email</code> in this case.</li>
</ul>
<p>There is a very simple solution to this, which is to specify which GitHub user should be associated with which project – in my case, which folder. I have two separate folders that divide my projects into personal and work projects. Here’s how to do it:</p>
<pre><code data-theme='rose-pine-moon' data-lang='bash' class='phiki language-bash rose-pine-moon torchlight' style='background-color: #232136;color: #e0def4;'><!-- Syntax highlighted by Phiki and torchlight.dev --><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">1</span><span class="token" style="color: #908caa;">#</span><span class="token" style="color: #6e6a86;"> Go to your private project
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">2</span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--local</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.name</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Lars Jönsson&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">3</span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--local</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.email</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;crymeat@gmail.com&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">4</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">5</span><span class="token" style="color: #908caa;">#</span><span class="token" style="color: #6e6a86;"> and the same applies to your work project
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">6</span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--local</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.name</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Lars Jönsson&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">7</span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--local</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.email</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;info@noveris.se&quot;</span><span class="token">
</span></div></code></pre>
<p>It wasn’t that difficult.</p>
<p>But there’s another solution I’ve decided to go with. Mainly because I like tinkering with Bash and the CLI in general. I’ve created a Bash script that changes everything at once.</p>
<pre><code data-theme='rose-pine-moon' data-lang='bash' class='phiki language-bash rose-pine-moon torchlight' style='background-color: #232136;color: #e0def4;'><!-- Syntax highlighted by Phiki and torchlight.dev --><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 1</span><span class="token" style="color: #908caa;">#!</span><span class="token" style="color: #6e6a86;">/bin/bash
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 2</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 3</span><span class="token" style="color: #3e8fb0;">case</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;</span><span class="token" style="color: #c4a7e7;">$1</span><span class="token" style="color: #f6c177;">&quot;</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">in</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 4</span><span class="token">  </span><span class="token" style="color: #f6c177;">&quot;personal&quot;</span><span class="token" style="color: #3e8fb0;">)</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 5</span><span class="token">    </span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--global</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.name</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Lars Jönsson&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 6</span><span class="token">    </span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--global</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.email</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;crymeat@gmail.com&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 7</span><span class="token">    </span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Switching to devpaps git account...&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 8</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number"> 9</span><span class="token">    </span><span class="token" style="color: #908caa;">#</span><span class="token" style="color: #6e6a86;"> Make devpaps active GitHub CLI account
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">10</span><span class="token">    </span><span class="token" style="color: #ea9a97;">gh</span><span class="token"> </span><span class="token" style="color: #f6c177;">auth</span><span class="token"> </span><span class="token" style="color: #f6c177;">status</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">|</span><span class="token"> </span><span class="token" style="color: #ea9a97;">grep</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;devpaps&quot;</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">&gt;</span><span class="token"> </span><span class="token" style="color: #f6c177;">/dev/null</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">11</span><span class="token">    </span><span class="token" style="color: #3e8fb0;">if</span><span class="token"> </span><span class="token" style="color: #908caa;">[</span><span class="token"> </span><span class="token" style="color: #e0def4;">$?</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-eq</span><span class="token"> 0 </span><span class="token" style="color: #908caa;">];</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">then</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">12</span><span class="token">      </span><span class="token" style="color: #ea9a97;">gh</span><span class="token"> </span><span class="token" style="color: #f6c177;">auth</span><span class="token"> </span><span class="token" style="color: #f6c177;">switch</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-h</span><span class="token"> </span><span class="token" style="color: #f6c177;">github.com</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-u</span><span class="token"> </span><span class="token" style="color: #f6c177;">devpaps</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">13</span><span class="token">    </span><span class="token" style="color: #3e8fb0;">else</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">14</span><span class="token">      </span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;devpaps not logged in via gh. Logging in...&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">15</span><span class="token">      </span><span class="token" style="color: #ea9a97;">gh</span><span class="token"> </span><span class="token" style="color: #f6c177;">auth</span><span class="token"> </span><span class="token" style="color: #f6c177;">login</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--hostname</span><span class="token"> </span><span class="token" style="color: #f6c177;">github.com</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">16</span><span class="token">    </span><span class="token" style="color: #3e8fb0;">fi</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">17</span><span class="token">    </span><span class="token" style="color: #908caa;">;;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">18</span><span class="token">  </span><span class="token" style="color: #f6c177;">&quot;work&quot;</span><span class="token" style="color: #3e8fb0;">)</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">19</span><span class="token">    </span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--global</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.name</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Lars Jönsson&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">20</span><span class="token">    </span><span class="token" style="color: #ea9a97;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">config</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--global</span><span class="token"> </span><span class="token" style="color: #f6c177;">user.email</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;info@noveris.se&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">21</span><span class="token">    </span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Switching to Noveris git account...&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">22</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">23</span><span class="token">    </span><span class="token" style="color: #908caa;">#</span><span class="token" style="color: #6e6a86;"> Make noveris-hq active GitHub CLI account
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">24</span><span class="token">    </span><span class="token" style="color: #ea9a97;">gh</span><span class="token"> </span><span class="token" style="color: #f6c177;">auth</span><span class="token"> </span><span class="token" style="color: #f6c177;">status</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">|</span><span class="token"> </span><span class="token" style="color: #ea9a97;">grep</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;noveris-hq&quot;</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">&gt;</span><span class="token"> </span><span class="token" style="color: #f6c177;">/dev/null</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">25</span><span class="token">    </span><span class="token" style="color: #3e8fb0;">if</span><span class="token"> </span><span class="token" style="color: #908caa;">[</span><span class="token"> </span><span class="token" style="color: #e0def4;">$?</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-eq</span><span class="token"> 0 </span><span class="token" style="color: #908caa;">];</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">then</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">26</span><span class="token">      </span><span class="token" style="color: #ea9a97;">gh</span><span class="token"> </span><span class="token" style="color: #f6c177;">auth</span><span class="token"> </span><span class="token" style="color: #f6c177;">switch</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-h</span><span class="token"> </span><span class="token" style="color: #f6c177;">github.com</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-u</span><span class="token"> </span><span class="token" style="color: #f6c177;">noveris-hq</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">27</span><span class="token">    </span><span class="token" style="color: #3e8fb0;">else</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">28</span><span class="token">      </span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;noveris-hq not logged in via gh. Logging in...&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">29</span><span class="token">      </span><span class="token" style="color: #ea9a97;">gh</span><span class="token"> </span><span class="token" style="color: #f6c177;">auth</span><span class="token"> </span><span class="token" style="color: #f6c177;">login</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">--hostname</span><span class="token"> </span><span class="token" style="color: #f6c177;">github.com</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">30</span><span class="token">    </span><span class="token" style="color: #3e8fb0;">fi</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">31</span><span class="token">    </span><span class="token" style="color: #908caa;">;;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">32</span><span class="token">  </span><span class="token" style="color: #3e8fb0;">*)</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">33</span><span class="token">    </span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Usage: </span><span class="token" style="color: #c4a7e7;">$</span><span class="token" style="color: #f6c177;">0 {personal|work}&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">34</span><span class="token">    </span><span class="token" style="color: #eb6f92;">exit</span><span class="token"> </span><span class="token" style="color: #ea9a97;">1</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">35</span><span class="token">    </span><span class="token" style="color: #908caa;">;;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">36</span><span class="token" style="color: #3e8fb0;">esac</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">37</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">38</span><span class="token" style="color: #908caa;">#</span><span class="token" style="color: #6e6a86;"> Show current Git user configuration
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">39</span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-e</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;\nCurrent Git configuration:&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">40</span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Name:  </span><span class="token" style="color: #908caa;">$(</span><span class="token" style="color: #ea9a97;">git</span><span class="token" style="color: #f6c177;"> config </span><span class="token" style="color: #3e8fb0;">--global</span><span class="token" style="color: #f6c177;"> user.name</span><span class="token" style="color: #908caa;">)</span><span class="token" style="color: #f6c177;">&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">41</span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Email: </span><span class="token" style="color: #908caa;">$(</span><span class="token" style="color: #ea9a97;">git</span><span class="token" style="color: #f6c177;"> config </span><span class="token" style="color: #3e8fb0;">--global</span><span class="token" style="color: #f6c177;"> user.email</span><span class="token" style="color: #908caa;">)</span><span class="token" style="color: #f6c177;">&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">42</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">43</span><span class="token" style="color: #eb6f92;">echo</span><span class="token"> </span><span class="token" style="color: #f6c177;">&quot;Reloading shell to apply GitHub credentials...&quot;</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">44</span><span class="token" style="color: #eb6f92;">exec</span><span class="token"> </span><span class="token" style="color: #e0def4;">$SHELL</span><span class="token">
</span></div></code></pre>
<p>What the script does is first set my name and email as my Git username, then it checks whether noveris-hq is authenticated with <code>gh-cli</code>; if so, my username in <code>gh-cli</code> is also changed to noveris-hq; if not, I have to log in via <code>gh-cli</code>.</p>
<p>To use this Bash script, all I need to do is type:</p>
<pre><code data-theme='rose-pine-moon' data-lang='shell' class='phiki language-shell rose-pine-moon torchlight' style='background-color: #232136;color: #e0def4;'><!-- Syntax highlighted by Phiki and torchlight.dev --><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">1</span><span class="token" style="color: #ea9a97;">noveris</span><span class="token"> </span><span class="token" style="color: #f6c177;">on</span><span class="token">  </span><span class="token" style="color: #f6c177;">main</span><span class="token"> </span><span class="token" style="color: #f6c177;">+95</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-93</span><span class="token"> [$!?] via  v22.20.0 via 🐘 v8.5.4 ❯ switchgh work
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">2</span><span class="token" style="color: #ea9a97;">Switching</span><span class="token"> </span><span class="token" style="color: #f6c177;">to</span><span class="token"> </span><span class="token" style="color: #f6c177;">Noveris</span><span class="token"> </span><span class="token" style="color: #f6c177;">git</span><span class="token"> </span><span class="token" style="color: #f6c177;">account...</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">3</span><span class="token" style="color: #ea9a97;">✓</span><span class="token"> </span><span class="token" style="color: #f6c177;">Switched active account for github.com to noveris-hq
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">4</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">5</span><span class="token" style="color: #ea9a97;">Current</span><span class="token"> </span><span class="token" style="color: #f6c177;">Git</span><span class="token"> </span><span class="token" style="color: #f6c177;">configuration:</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">6</span><span class="token" style="color: #ea9a97;">Name:</span><span class="token">  </span><span class="token" style="color: #f6c177;">Lars</span><span class="token"> </span><span class="token" style="color: #f6c177;">Jönsson
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">7</span><span class="token" style="color: #ea9a97;">Email:</span><span class="token"> </span><span class="token" style="color: #f6c177;">info@noveris.se</span><span class="token">
</span></div><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">8</span><span class="token" style="color: #ea9a97;">Reloading</span><span class="token"> </span><span class="token" style="color: #f6c177;">shell</span><span class="token"> </span><span class="token" style="color: #f6c177;">to</span><span class="token"> </span><span class="token" style="color: #f6c177;">apply</span><span class="token"> </span><span class="token" style="color: #f6c177;">GitHub</span><span class="token"> </span><span class="token" style="color: #f6c177;">credentials...</span><span class="token">
</span></div></code></pre>
<p>Everything is handled automatically for me. I think this is really good. Plus, you feel a bit like a hacker when you get to type commands into the terminal, which is a bonus.</p>
<p>It might be a bit of overkill with my Bash script, but what does it matter in a hundred years time?</p>
]]>
            </content:encoded>
            
            
            
            
        </item>
        
        <item>
            <title>Why Statamic instead of WordPress</title>
            <link>https://noveris.se/en/articles/why-statamic</link>
            <guid isPermaLink="true">https://noveris.se/en/articles/why-statamic</guid>
            <pubDate>Sun, 01 Mar 2026</pubDate>
            <description>
                <![CDATA[<p><strong>WordPress</strong> is a reliable platform that is everywhere on the web, and there are plenty of resources and documentation available. But after starting to work more with Laravel and <a rel="noopener noreferrer" target="_blank" href="https://statamic.com/">Statamic</a>, I want to share why I like it so much.</p>
<h2>No database means fewer worries</h2>
<p>The first thing that comes to mind is that with <strong>Statamic</strong>, you don't need a database. Everything is stored in files instead. That means fewer things that can go wrong, no database connections to worry about, and most importantly, no one can perform SQL injections. For my clients, that means easier hosting and better security.</p>
<h2>Fewer plugins from the start</h2>
<p>With WordPress, you get a lot for free, but you often need to install plugins just to get basic features working the way you want. It's worth noting that the range of plugins available for WordPress far exceeds that of Statamic. There are over <a rel="noopener noreferrer" target="_blank" href="https://wordpress.org/plugins/">61,000</a> plugins for WordPress, whilst Statamic has around <a rel="noopener noreferrer" target="_blank" href="https://statamic.com/addons">430</a>. Statamic comes with more built-in features, such as form management, search functionality, caching and image editing, to name just a few.</p>
<p>I build all websites with exactly the fields and features you need. No unnecessary settings to get confused by, and no steep learning curve here either.</p>
<h2>Faster websites</h2>
<p><strong>Statamic</strong> websites are simply fast. The file-based architecture, together with built-in caching, means that pages load quickly. I don't need to install and configure cache plugins (WP Super Cache) as with <strong>WordPress</strong>, it comes baked in with Statamic.</p>
<div class="text-center 2xl:justify-self-center 2xl:w-[45vw] 2xl:max-w-[45vw]">
<figure>
 <img loading="lazy" src="/assets/statamic-vs-wordpress.png" alt="Statamic content creation and WordPress editor" class="rounded-lg border border-accent/30 dark:border-accent/50 w-full max-w-[1080px]">
<figcaption class="">Statamic mot WordPress redigering av text</figcaption>
</figure>
</div>
<h2>Developer experience</h2>
<p>As a developer, I am obviously biased here, but the fact is that Statamic is based on <a rel="noopener noreferrer" target="_blank" href="https://laravel.com/">Laravel</a> – one of the most respected PHP frameworks. This means that I can use everything I already know about Laravel to build customized solutions, such as adding an admin panel to manage a member database, for example. No plugins that need to be installed and that I have to figure out how they work, plus the code is written exactly as I write it in <strong>Statamic</strong>. It's simply less friction for me to work with as a developer.</p>
<p>Version control with Git is included, all content is stored as text files, so I can track changes and easily restore if something goes wrong.</p>
<p>Want to know more? We can <a rel="noopener noreferrer" target="_blank" href="https://cal.com/noveris/ovrigt">book a short meeting</a>, and I'll tell you more about how <strong>Statamic</strong> and Laravel can suit your business.</p>
]]>
            </description>
            <content:encoded>
                <![CDATA[<p><strong>WordPress</strong> is a reliable platform that is everywhere on the web, and there are plenty of resources and documentation available. But after starting to work more with Laravel and <a rel="noopener noreferrer" target="_blank" href="https://statamic.com/">Statamic</a>, I want to share why I like it so much.</p>
<h2>No database means fewer worries</h2>
<p>The first thing that comes to mind is that with <strong>Statamic</strong>, you don't need a database. Everything is stored in files instead. That means fewer things that can go wrong, no database connections to worry about, and most importantly, no one can perform SQL injections. For my clients, that means easier hosting and better security.</p>
<h2>Fewer plugins from the start</h2>
<p>With WordPress, you get a lot for free, but you often need to install plugins just to get basic features working the way you want. It's worth noting that the range of plugins available for WordPress far exceeds that of Statamic. There are over <a rel="noopener noreferrer" target="_blank" href="https://wordpress.org/plugins/">61,000</a> plugins for WordPress, whilst Statamic has around <a rel="noopener noreferrer" target="_blank" href="https://statamic.com/addons">430</a>. Statamic comes with more built-in features, such as form management, search functionality, caching and image editing, to name just a few.</p>
<p>I build all websites with exactly the fields and features you need. No unnecessary settings to get confused by, and no steep learning curve here either.</p>
<h2>Faster websites</h2>
<p><strong>Statamic</strong> websites are simply fast. The file-based architecture, together with built-in caching, means that pages load quickly. I don't need to install and configure cache plugins (WP Super Cache) as with <strong>WordPress</strong>, it comes baked in with Statamic.</p>
<div class="text-center 2xl:justify-self-center 2xl:w-[45vw] 2xl:max-w-[45vw]">
<figure>
 <img loading="lazy" src="/assets/statamic-vs-wordpress.png" alt="Statamic content creation and WordPress editor" class="rounded-lg border border-accent/30 dark:border-accent/50 w-full max-w-[1080px]">
<figcaption class="">Statamic mot WordPress redigering av text</figcaption>
</figure>
</div>
<h2>Developer experience</h2>
<p>As a developer, I am obviously biased here, but the fact is that Statamic is based on <a rel="noopener noreferrer" target="_blank" href="https://laravel.com/">Laravel</a> – one of the most respected PHP frameworks. This means that I can use everything I already know about Laravel to build customized solutions, such as adding an admin panel to manage a member database, for example. No plugins that need to be installed and that I have to figure out how they work, plus the code is written exactly as I write it in <strong>Statamic</strong>. It's simply less friction for me to work with as a developer.</p>
<p>Version control with Git is included, all content is stored as text files, so I can track changes and easily restore if something goes wrong.</p>
<p>Want to know more? We can <a rel="noopener noreferrer" target="_blank" href="https://cal.com/noveris/ovrigt">book a short meeting</a>, and I'll tell you more about how <strong>Statamic</strong> and Laravel can suit your business.</p>
]]>
            </content:encoded>
            
            
            
            
        </item>
        
        <item>
            <title>Continue using Fedora without rebooting - Lars Jönsson | Noveris</title>
            <link>https://noveris.se/en/articles/continue-using-fedora-without-rebooting</link>
            <guid isPermaLink="true">https://noveris.se/en/articles/continue-using-fedora-without-rebooting</guid>
            <pubDate>Tue, 10 Jun 2025</pubDate>
            <description>
                <![CDATA[<p>As a former Windows user, I almost always had to restart my computer as soon as an update was installed - often in the middle of something important. It's not exactly the dream when you're working, recording a video, or have a bunch of terminal windows full of running processes.</p>
<p>This is something I really appreciate about Linux, the vast majority of package updates require no reboot at all. You can keep working, shut down when it's convenient, and forget the update even happened. However, that doesn't mean reboots are completely passé - sometimes components close to the kernel are changed (e.g. a new kernel or an upgraded systemd library) and a reboot might be wise to keep everything running as stable as possible.</p>
<h3>How do you know when a reboot is needed?</h3>
<p>If you are running Fedora as distro, this is what you type in your terminal after running an update, <code>sudo dnf update</code>:</p>
<pre><code data-theme='rose-pine-moon' data-lang='shell' class='phiki language-shell rose-pine-moon torchlight' style='background-color: #232136;color: #e0def4;'><!-- Syntax highlighted by Phiki and torchlight.dev --><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">1</span><span class="token" style="color: #ea9a97;">sudo</span><span class="token"> </span><span class="token" style="color: #f6c177;">dnf</span><span class="token"> </span><span class="token" style="color: #f6c177;">needs-restarting</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-r</span><span class="token">
</span></div></code></pre>
<p><code>-r</code> flag stands for reboothint. The program checks which processes are still running old versions of libraries or kernel modules and tells you whether a reboot is recommended. If you don't get any output, it means the system is happy - you can continue working. If instead you get a line like:</p>
<pre><code data-theme='rose-pine-moon' data-lang='txt' class='phiki language-txt rose-pine-moon torchlight' style='background-color: #232136;color: #e0def4;'><!-- Syntax highlighted by Phiki and torchlight.dev --><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">1</span><span class="token">Core libraries or services have been updated since boot. Reboot is required for the update to take effect.
</span></div></code></pre>
<p>...well, then it's at least worth considering restarting the computer, when you have the time and inclination. Rebooting with Linux is usually super fast.</p>
]]>
            </description>
            <content:encoded>
                <![CDATA[<p>As a former Windows user, I almost always had to restart my computer as soon as an update was installed - often in the middle of something important. It's not exactly the dream when you're working, recording a video, or have a bunch of terminal windows full of running processes.</p>
<p>This is something I really appreciate about Linux, the vast majority of package updates require no reboot at all. You can keep working, shut down when it's convenient, and forget the update even happened. However, that doesn't mean reboots are completely passé - sometimes components close to the kernel are changed (e.g. a new kernel or an upgraded systemd library) and a reboot might be wise to keep everything running as stable as possible.</p>
<h3>How do you know when a reboot is needed?</h3>
<p>If you are running Fedora as distro, this is what you type in your terminal after running an update, <code>sudo dnf update</code>:</p>
<pre><code data-theme='rose-pine-moon' data-lang='shell' class='phiki language-shell rose-pine-moon torchlight' style='background-color: #232136;color: #e0def4;'><!-- Syntax highlighted by Phiki and torchlight.dev --><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">1</span><span class="token" style="color: #ea9a97;">sudo</span><span class="token"> </span><span class="token" style="color: #f6c177;">dnf</span><span class="token"> </span><span class="token" style="color: #f6c177;">needs-restarting</span><span class="token"> </span><span class="token" style="color: #3e8fb0;">-r</span><span class="token">
</span></div></code></pre>
<p><code>-r</code> flag stands for reboothint. The program checks which processes are still running old versions of libraries or kernel modules and tells you whether a reboot is recommended. If you don't get any output, it means the system is happy - you can continue working. If instead you get a line like:</p>
<pre><code data-theme='rose-pine-moon' data-lang='txt' class='phiki language-txt rose-pine-moon torchlight' style='background-color: #232136;color: #e0def4;'><!-- Syntax highlighted by Phiki and torchlight.dev --><div class='line'><span style="color: #908caa; text-align: right; -webkit-user-select: none; user-select: none;" class="line-number">1</span><span class="token">Core libraries or services have been updated since boot. Reboot is required for the update to take effect.
</span></div></code></pre>
<p>...well, then it's at least worth considering restarting the computer, when you have the time and inclination. Rebooting with Linux is usually super fast.</p>
]]>
            </content:encoded>
            
            
            
            
        </item>
        
    </channel>
</rss>
