<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Jack K</title>
    <subtitle>This website will detail a bit about me and tech.

While the site is being populated please visit the links below for VCS accounts
and details on the programs I package for nixpkgs.
</subtitle>
    <link rel="self" type="application/atom+xml" href="https://j-k.io/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://j-k.io"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2025-10-02T00:00:00+00:00</updated>
    <id>https://j-k.io/atom.xml</id>
    <entry xml:lang="en">
        <title>To Manage: verb</title>
        <published>2025-10-02T00:00:00+00:00</published>
        <updated>2025-10-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://j-k.io/blog/to-manage/"/>
        <id>https://j-k.io/blog/to-manage/</id>
        
        <content type="html" xml:base="https://j-k.io/blog/to-manage/">&lt;p&gt;I used to have a manager&lt;br &#x2F;&gt;
I&#x27;ve been thinking since he went.&lt;br &#x2F;&gt;
Of how he made an impact,&lt;br &#x2F;&gt;
and what &lt;em&gt;&quot;to manage&quot;&lt;&#x2F;em&gt; meant.&lt;&#x2F;p&gt;
&lt;p&gt;Most all start with aversion,&lt;br &#x2F;&gt;
in the field of tech and cloud.&lt;br &#x2F;&gt;
Hear of colleagues micro-managed;&lt;br &#x2F;&gt;
at work they are not proud.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m thankful to have faced&lt;br &#x2F;&gt;
cultures true and good.&lt;br &#x2F;&gt;
Encouraged, helped, and guided,&lt;br &#x2F;&gt;
they&#x27;ve managed as they should.&lt;&#x2F;p&gt;
&lt;p&gt;From this I&#x27;ve grown perspective,&lt;br &#x2F;&gt;
on what &lt;em&gt;&quot;to manage&quot;&lt;&#x2F;em&gt; means.&lt;br &#x2F;&gt;
And though we are still techie,&lt;br &#x2F;&gt;
we are not just mere machines.&lt;&#x2F;p&gt;
&lt;p&gt;As my career develops,&lt;br &#x2F;&gt;
and my duty further grows.&lt;br &#x2F;&gt;
From those whom I&#x27;ve been managed,&lt;br &#x2F;&gt;
my approach I have now chose.&lt;&#x2F;p&gt;
&lt;p&gt;I will now look back fondly,&lt;br &#x2F;&gt;
of time together spent.&lt;br &#x2F;&gt;
I believe I have a better grasp&lt;br &#x2F;&gt;
of what &lt;em&gt;&quot;to manage&quot;&lt;&#x2F;em&gt; meant.&lt;&#x2F;p&gt;
&lt;p&gt;- Jack K&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;Thank you Carl, David, Izzy, Jon, Steve, Rhyddian, and Alan.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Nix in the Shell</title>
        <published>2025-08-20T00:00:00+00:00</published>
        <updated>2025-08-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://j-k.io/blog/nix-in-the-shell/"/>
        <id>https://j-k.io/blog/nix-in-the-shell/</id>
        
        <content type="html" xml:base="https://j-k.io/blog/nix-in-the-shell/">&lt;p&gt;So, maybe you read the &lt;a href=&quot;&#x2F;blog&#x2F;so-youve-heard-of-nix&#x2F;&quot;&gt;previous installment&lt;&#x2F;a&gt; on what Nix is; or you just want to get stuck in with Nix.
As long as you&#x27;ve installed Nix or can run it in a container we can get started.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents&lt;a class=&quot;zola-anchor&quot; href=&quot;#table-of-contents&quot; aria-label=&quot;Anchor link for: table-of-contents&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;nix-in-the-shell&#x2F;#a-basic-shell&quot;&gt;A Basic Shell&lt;&#x2F;a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;nix-in-the-shell&#x2F;#shell-nix-annotated&quot;&gt;&lt;code&gt;shell.nix&lt;&#x2F;code&gt; Annotated&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;nix-in-the-shell&#x2F;#pinning-our-copy-of-nixpkgs&quot;&gt;Pinning our copy of &lt;code&gt;nixpkgs&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;nix-in-the-shell&#x2F;#adding-proprietary-tooling&quot;&gt;Adding Proprietary Tooling&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;nix-in-the-shell&#x2F;#graphical-tools&quot;&gt;Graphical Tools&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;nix-in-the-shell&#x2F;#conclusion&quot;&gt;Conclusion&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;a-basic-shell&quot;&gt;A Basic Shell&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-basic-shell&quot; aria-label=&quot;Anchor link for: a-basic-shell&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;For this example I&#x27;ll be using flakes and the new cli. (If you&#x27;d like to learn more about flakes vs before flakes, there will be a future blog post.)
For now you can try follow the steps below, and if you get a warning you need &quot;Experimental features&quot; and aren&#x27;t interested in enabling them in your configuration, just add &lt;code&gt;--extra-experimental-features &quot;nix-command flakes&quot;&lt;&#x2F;code&gt; after &lt;code&gt;nix&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Our basic minimal &lt;code&gt;shell.nix&lt;&#x2F;code&gt; file can appear like so:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;nix&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-nix &quot;&gt;&lt;code class=&quot;language-nix&quot; data-lang=&quot;nix&quot;&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;{ &lt;&#x2F;span&gt;&lt;span&gt;pkgs ? &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;&amp;lt;nixpkgs&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{} &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;mkShell &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;packages &lt;&#x2F;span&gt;&lt;span&gt;= [
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;protobuf
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;hadolint
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;nodejs
&lt;&#x2F;span&gt;&lt;span&gt;  ];
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;At this point if you had this file and ran &lt;code&gt;nix-shell&lt;&#x2F;code&gt; if you didn&#x27;t have any of these tools, they&#x27;ll now be available to you.
And in the case of &lt;code&gt;openssl&lt;&#x2F;code&gt; you&#x27;d have the libraries and headers.
And if you did have them available you should find your current &lt;code&gt;PATH&lt;&#x2F;code&gt; will pull the ones from the nix store.
You can see this by running &lt;code&gt;readlink -f $(which BINARY)&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sh&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-sh &quot;&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; readlink&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -f &lt;&#x2F;span&gt;&lt;span&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;which&lt;&#x2F;span&gt;&lt;span&gt; protoc)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;&#x2F;nix&#x2F;store&#x2F;82dkd41796gz81i8nqx70xjcajy32p3q-protobuf-31.1&#x2F;bin&#x2F;protoc-31.1.0
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; sha256sum $(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;which&lt;&#x2F;span&gt;&lt;span&gt; protoc)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;92d2bf5ca23e8cdf3a39feb5433970e11b871874e3c44a0c636face2a3801843&lt;&#x2F;span&gt;&lt;span&gt;  &#x2F;nix&#x2F;store&#x2F;82dkd41796gz81i8nqx70xjcajy32p3q-protobuf-31.1&#x2F;bin&#x2F;protoc
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;shell-nix-annotated&quot;&gt;&lt;code&gt;shell.nix&lt;&#x2F;code&gt; Annotated&lt;a class=&quot;zola-anchor&quot; href=&quot;#shell-nix-annotated&quot; aria-label=&quot;Anchor link for: shell-nix-annotated&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;For this guide we&#x27;ll just make some simple tweaks, but if you&#x27;re interested in what&#x27;s going on here&#x27;s an annotated version of the same file:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;nix&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-nix &quot;&gt;&lt;code class=&quot;language-nix&quot; data-lang=&quot;nix&quot;&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# Overall this is a function.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;#
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# The output produced by &amp;quot;evaluating&amp;quot; and building the
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# output (AKA derivation) will match what `nix-shell` expects.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;#
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# It takes a `pkgs` argument with a default provided of
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# `import &amp;lt;nixpkgs&amp;gt; {}`.
&lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  pkgs ?
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# `import` is a way of calling other nix files.
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;import
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# `&amp;lt;nixpkgs&amp;gt;` is a special syntax for refering to &amp;quot;channels&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# you can define, think of them like aliases.
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;#
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# And because the `default.nix` within the `nixpkgs` repository
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# is itself a function we provide an empty `{}` object.
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# In nix objects are called an &amp;quot;attribute set&amp;quot;.
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;&amp;lt;nixpkgs&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;{}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# From `pkgs` we run the function `mkShell`.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;mkShell
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# `mkShell` expects an attribute set where most
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# attributes&#x2F;parameters are optional.
&lt;&#x2F;span&gt;&lt;span&gt;  {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# Here we use the `packages` attribute to define what
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# to provide in the shell.
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;packages &lt;&#x2F;span&gt;&lt;span&gt;= [
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# and from `pkgs` we have access to
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# `protobuf`, `hadolint`, and `nodejs`
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;protobuf
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;hadolint
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;nodejs
&lt;&#x2F;span&gt;&lt;span&gt;    ];
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;pinning-our-copy-of-nixpkgs&quot;&gt;Pinning our copy of &lt;code&gt;nixpkgs&lt;&#x2F;code&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#pinning-our-copy-of-nixpkgs&quot; aria-label=&quot;Anchor link for: pinning-our-copy-of-nixpkgs&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;With the simple &lt;code&gt;shell.nix&lt;&#x2F;code&gt; if you run &lt;code&gt;nix-shell&lt;&#x2F;code&gt; on an x86_64 Linux machine, and your friend runs the same &lt;code&gt;nix-shell&lt;&#x2F;code&gt; command with the same &lt;code&gt;shell.nix&lt;&#x2F;code&gt; you can still end up with different versions or copies of binaries.
This can be demonstrated by the fact you probably have a different copy to me in my example above.&lt;&#x2F;p&gt;
&lt;p&gt;To ensure you get not only the same version of &lt;code&gt;protoc&lt;&#x2F;code&gt; e.g. &lt;code&gt;31.1.0&lt;&#x2F;code&gt; , but also the exact same file e.g. it lives in &lt;code&gt;&#x2F;nix&#x2F;store&#x2F;82dkd41796gz81i8nqx70xjcajy32p3q-protobuf-31.1&#x2F;&lt;&#x2F;code&gt; and the same &lt;code&gt;sha256sum&lt;&#x2F;code&gt; we&#x27;ll want to do some &quot;pinning&quot; or &quot;locking.
This is basically standard practice now across ecosystems for package management. You may recognise files like &lt;code&gt;package-lock.json&lt;&#x2F;code&gt;, &lt;code&gt;go.sum&lt;&#x2F;code&gt;, &lt;code&gt;Cargo.lock&lt;&#x2F;code&gt; etc.
Lock files (to varying degrees of success) are intended to identify the exact same dependency every single time.&lt;&#x2F;p&gt;
&lt;p&gt;We can do the same with our small &lt;code&gt;shell.nix&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;nix&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-nix &quot;&gt;&lt;code class=&quot;language-nix&quot; data-lang=&quot;nix&quot;&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;{ &lt;&#x2F;span&gt;&lt;span&gt;pkgs ?
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;builtins&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;fetchTarball &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# Descriptive name to make the store path easier to identify
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;name &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;nixos-unstable-2025-08-19&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# Commit hash for nixos-unstable as of 2025-08-19
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;url &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;nixos&#x2F;nixpkgs&#x2F;archive&#x2F;20075955deac2583bb12f07151c2df830ef346b4.tar.gz&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# Hash obtained using `nix-prefetch-url --unpack &amp;lt;url&amp;gt;`
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;sha256 &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;1s3lxb33cwazlx72pygcbcc76bbgbhdil6q9bhqbzbjxj001zk0w&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;;
&lt;&#x2F;span&gt;&lt;span&gt;  }) {}
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;mkShell &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;packages &lt;&#x2F;span&gt;&lt;span&gt;= [
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;protobuf
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;hadolint
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;nodejs
&lt;&#x2F;span&gt;&lt;span&gt;  ];
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now we will always fetch the &lt;code&gt;20075955deac2583bb12f07151c2df830ef346b4&lt;&#x2F;code&gt; commit of &lt;code&gt;NixOS&#x2F;nixpkgs&lt;&#x2F;code&gt; (which was the current latest commit as of writing this post.)
By forcing this exact commit we&#x27;re ensuring that everything is the same for everyone who runs this.&lt;&#x2F;p&gt;
&lt;p&gt;This inline and more manual method of handling our dependency on &lt;code&gt;nixpkgs&lt;&#x2F;code&gt; can be difficult, especially if we want other remote nix code for overlays etc.
This is one aspect where flakes can help, or you can look at projects like &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;andir&#x2F;npins&quot;&gt;&lt;code&gt;npins&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; which work with pre-flakes tooling like &lt;code&gt;nix-shell&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;You may also be wondering, should I use &lt;code&gt;nixpkgs-unstable&lt;&#x2F;code&gt;, &lt;code&gt;nixos-unstable&lt;&#x2F;code&gt;, &lt;code&gt;nixos-25.05&lt;&#x2F;code&gt;, &lt;code&gt;nixos-25.05-small&lt;&#x2F;code&gt;, etc.
I plan to cover this in more detail in the future but for getting started any release should work.
Just make sure when you&#x27;re doing a search on &lt;a href=&quot;https:&#x2F;&#x2F;search.nixos.org&quot;&gt;https:&#x2F;&#x2F;search.nixos.org&lt;&#x2F;a&gt; you pick a matching release!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;adding-proprietary-tooling&quot;&gt;Adding Proprietary tooling&lt;a class=&quot;zola-anchor&quot; href=&quot;#adding-proprietary-tooling&quot; aria-label=&quot;Anchor link for: adding-proprietary-tooling&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Some times you might need some proprietary tooling, which will also be called &quot;unfree&quot;. For this example we&#x27;ll use &lt;code&gt;unrar&lt;&#x2F;code&gt;.
The UnRAR license explicitly says it&#x27;s &quot;freeware&quot; so better matches &quot;source-avalable&quot; licenses. It wouldn&#x27;t be considered Free or Open Source because of it&#x27;s section 2 relating to the proprietary RAR compression algorithm, and it&#x27;s section 6 relating to deleting all &quot;UnRAR files from your storage devices and cease to use the utility.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;(If you&#x27;re interested in licenses and SPDX, it&#x27;s actually &lt;a href=&quot;https:&#x2F;&#x2F;tools.spdx.org&#x2F;app&#x2F;license_requests&#x2F;455&#x2F;&quot;&gt;yet to be reviewed&lt;&#x2F;a&gt;.)&lt;&#x2F;p&gt;
&lt;p&gt;By default nixpkgs won&#x27;t give access to &quot;unfree&quot; software as a saftey mechanism and to make &quot;unfree&quot; software opt-in.
There are several ways to do this but if we&#x27;d like our choices to be preserved in &lt;code&gt;shell.nix&lt;&#x2F;code&gt; we can do this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;nix&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-nix &quot;&gt;&lt;code class=&quot;language-nix&quot; data-lang=&quot;nix&quot;&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;{ &lt;&#x2F;span&gt;&lt;span&gt;pkgs ?
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;builtins&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;fetchTarball &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# Descriptive name to make the store path easier to identify
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;name &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;nixos-unstable-2025-08-19&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# Commit hash for nixos-unstable as of 2025-08-19
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;url &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;nixos&#x2F;nixpkgs&#x2F;archive&#x2F;20075955deac2583bb12f07151c2df830ef346b4.tar.gz&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# Hash obtained using `nix-prefetch-url --unpack &amp;lt;url&amp;gt;`
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;sha256 &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;1s3lxb33cwazlx72pygcbcc76bbgbhdil6q9bhqbzbjxj001zk0w&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;;
&lt;&#x2F;span&gt;&lt;span&gt;  }) {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;allowUnfree &lt;&#x2F;span&gt;&lt;span&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# this addition
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;mkShell &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;packages &lt;&#x2F;span&gt;&lt;span&gt;= [
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;protobuf
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;hadolint
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;nodejs
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;unrar
&lt;&#x2F;span&gt;&lt;span&gt;  ];
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Providing &lt;code&gt;config.allowUnfree = true;&lt;&#x2F;code&gt; when we &lt;code&gt;import&lt;&#x2F;code&gt; &lt;code&gt;nixpkgs&lt;&#x2F;code&gt; allows access to all packages marked &quot;unfree&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;The same thing could have also been written like below:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;nix&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-nix &quot;&gt;&lt;code class=&quot;language-nix&quot; data-lang=&quot;nix&quot;&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;config &lt;&#x2F;span&gt;&lt;span&gt;= {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;allowUnfree &lt;&#x2F;span&gt;&lt;span&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span style=&quot;background-color:#bf616a;color:#2b303b;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you&#x27;d like to be more granular you can instead provide a function to &lt;code&gt;allowUnfreePredicate&lt;&#x2F;code&gt;.
In this case our function can receive a &lt;code&gt;pkg&lt;&#x2F;code&gt; and we can either allow it or deny it.
In this case we&#x27;re using the helper &lt;code&gt;lib.getName&lt;&#x2F;code&gt; to pull the package&#x27;s name, and we&#x27;re using &lt;code&gt;builtins.elem&lt;&#x2F;code&gt; to do that check against every string
in our list. Currently with only &lt;code&gt;&quot;unrar&quot;&lt;&#x2F;code&gt; but we could add other tooling as necessary.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;nix&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-nix &quot;&gt;&lt;code class=&quot;language-nix&quot; data-lang=&quot;nix&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;allowUnfreePredicate &lt;&#x2F;span&gt;&lt;span style=&quot;background-color:#bf616a;color:#2b303b;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; pkg: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;builtins&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;elem &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;lib&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;getName pkg&lt;&#x2F;span&gt;&lt;span&gt;) [
&lt;&#x2F;span&gt;&lt;span&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;unrar&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;background-color:#bf616a;color:#2b303b;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;graphical-tools&quot;&gt;Graphical tools&lt;a class=&quot;zola-anchor&quot; href=&quot;#graphical-tools&quot; aria-label=&quot;Anchor link for: graphical-tools&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Graphical tooling can be a bit more difficult due to how graphics libraries and drivers work.
On a NixOS machine there shouldn&#x27;t be any problems, but on other systems you may get errors from OpenGL or Vulkan.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s where the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nix-community&#x2F;nixGL&quot;&gt;nix-community&#x2F;nixGL&lt;&#x2F;a&gt; project can help.
But for graphical tooling outside of NixOS you may find it easier to stick with Flatpak on Linux, or Brew on Darwin&#x2F;MacOS.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;With these snippets we have enough to get a bunch of useful tooling, including the &quot;unfree&quot; stuff where necessary.
Feel free to dot these files around and spread the &lt;code&gt;shell.nix&lt;&#x2F;code&gt; file! (if your team is happy with it)&lt;&#x2F;p&gt;
&lt;p&gt;And if cluttering up the root dir is a worry you can put it in a sub directory and run &lt;code&gt;nix-shell .&#x2F;some&#x2F;subdir&lt;&#x2F;code&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;In a future post I&#x27;ll cover doing some of this in a &lt;code&gt;flake.nix&lt;&#x2F;code&gt;, and having the new stuff also be compatible with &lt;code&gt;nix-shell&lt;&#x2F;code&gt;.
I&#x27;ll also touch on packaging tools from scratch!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>So You&#x27;ve Heard of Nix</title>
        <published>2025-08-01T00:00:00+00:00</published>
        <updated>2025-08-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://j-k.io/blog/so-youve-heard-of-nix/"/>
        <id>https://j-k.io/blog/so-youve-heard-of-nix/</id>
        
        <content type="html" xml:base="https://j-k.io/blog/so-youve-heard-of-nix/">&lt;p&gt;Nix is a tool that&#x27;s rapidly gaining popularity; it&#x27;s something you may have
heard of in passing conversation, or seen in threads and blogs online.&lt;&#x2F;p&gt;
&lt;p&gt;But what actually is Nix? Like what does it actually do? How might it benefit
your workflow; your day-to-day needs?&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;d like to address some of the immediate benefits it can offer you as a new
user, and also some aspirational cool things it can do which you may go on to
use.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of Contents:&lt;a class=&quot;zola-anchor&quot; href=&quot;#table-of-contents&quot; aria-label=&quot;Anchor link for: table-of-contents&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;so-youve-heard-of-nix&#x2F;#quick-wins&quot;&gt;Quick Wins&lt;&#x2F;a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;so-youve-heard-of-nix&#x2F;#package-availability&quot;&gt;Package Availability&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;so-youve-heard-of-nix&#x2F;#platform-coverage&quot;&gt;Platform Coverage&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;so-youve-heard-of-nix&#x2F;#teams-use-the-same-tools&quot;&gt;Teams Use the Same Tools&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;so-youve-heard-of-nix&#x2F;#trying-nix&quot;&gt;Trying Nix&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;so-youve-heard-of-nix&#x2F;#installing-nix&quot;&gt;Installing Nix&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;quick-wins&quot;&gt;Quick Wins&lt;a class=&quot;zola-anchor&quot; href=&quot;#quick-wins&quot; aria-label=&quot;Anchor link for: quick-wins&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;package-availability&quot;&gt;Package Availability&lt;a class=&quot;zola-anchor&quot; href=&quot;#package-availability&quot; aria-label=&quot;Anchor link for: package-availability&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Fundamentally nix is a package manager so the first aspect I&#x27;ll focus on is the
package availability.&lt;&#x2F;p&gt;
&lt;p&gt;Using nix (and its package repository nixpkgs) you gain access to an enormous
selection of packages. As tracked by &lt;a href=&quot;https:&#x2F;&#x2F;repology.org&quot;&gt;https:&#x2F;&#x2F;repology.org&lt;&#x2F;a&gt; as of writing there
are over 107k &quot;packaged projects&quot; available.&lt;&#x2F;p&gt;
&lt;p&gt;That number alone isn&#x27;t much use, so to put it in perspective: Arch with the AUR
has 90k, Debian 39k, Fedora 24k, and Arch without the AUR has
11k.&lt;&#x2F;p&gt;
&lt;p&gt;Now these raw numbers are interesting but it&#x27;s also useful to look at the number
of &quot;non-unique packaged projects&quot; too. By filtering out packages that are only
seen in one repository we can track projects which multiple distributions have
considered useful. This can be particularly important to avoid cases where
additional packages are just a side-effect of correctly packaging a program.&lt;&#x2F;p&gt;
&lt;p&gt;Nix is still in the lead with 85k (-20%), Arch with the AUR on 51k (-43%), Debian 29K
(-27%) Fedora 22k (-10%), and Arch without the AUR still on 11K (-4%)&lt;&#x2F;p&gt;
&lt;p&gt;Below is a graph of total packages on the X-Axis and &quot;fresh&quot; packages on the Y-Axis showing
not only the amount of packages but also how up-to-date they are.
Ideally you want a package repository that&#x27;s not only far on the X-Axis for coverage, but as
close to the Y-Axis (close to the darker grey area) as possible denoting how up-to-date it is.
The nixpkgs repository quite literally sits in its own section of the graph.
&lt;img src=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;so-youve-heard-of-nix&#x2F;.&#x2F;images&#x2F;map_repo_size_fresh.svg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;d also like to emphasise pure package availability and freshness isn&#x27;t everything.
Distributions like Debian with a lower package count benefit from being a
curated list, wide user testing, and stability. But I&#x27;d also like to add as
a nixpkgs maintainer I think it also has good measures in place to test
packages such as running their unit-tests when building and even featuring
&lt;a href=&quot;https:&#x2F;&#x2F;edolstra.github.io&#x2F;pubs&#x2F;decvms-issre2010-final.pdf&quot;&gt;End-to-End style tests with NixOS VMs&lt;&#x2F;a&gt; for important packages.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;platform-coverage&quot;&gt;Platform Coverage&lt;a class=&quot;zola-anchor&quot; href=&quot;#platform-coverage&quot; aria-label=&quot;Anchor link for: platform-coverage&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Nix can be used on almost any Linux environment and even on MacOS (Darwin), some
usage on BSD and even minor usage on Windows.&lt;&#x2F;p&gt;
&lt;p&gt;This wide coverage also extends to architectures. &quot;x86_64-linux&quot; is the best
supported architecture but unlike many repositories &quot;i686-linux&quot;
(aka 32bit machines) also receives support and cached builds. Then for SBC or
Raspberry Pi fans there&#x27;s also support for various ARM linux platforms like
&quot;aarch64-linux&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;For MacOS the new Apple silicon &quot;aarch64-darwin&quot; is supported for many packages
but so is the older intel based &quot;x86_64-darwin&quot; allowing you to extend the life
of your devices.&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s also community work on more exotic platforms like &quot;riscv64-linux&quot;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;teams-use-the-same-tools&quot;&gt;Teams Use the same tools&lt;a class=&quot;zola-anchor&quot; href=&quot;#teams-use-the-same-tools&quot; aria-label=&quot;Anchor link for: teams-use-the-same-tools&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Building upon the large package availability and the strong platform coverage
when working with others you can all leverage the same tooling.&lt;&#x2F;p&gt;
&lt;p&gt;For teams across Linux and MacOS there&#x27;s the benefit of most tools being
available to both platforms.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s say we have a team of 4 using: Arch, Debian, MacOS, and NixOS and they&#x27;re
interested in using &lt;code&gt;buf&lt;&#x2F;code&gt; for managing protobuf files.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;buf&lt;&#x2F;code&gt; is available for Arch in the official repos, MacOS in homebrew, and NixOS
in nixpkgs. However it&#x27;s not available in the Debian repos.
Now in the case of &lt;code&gt;buf&lt;&#x2F;code&gt; it&#x27;s not too big a problem since &lt;code&gt;go install&lt;&#x2F;code&gt; is quite
easy to use so that can be the method for Debian.&lt;&#x2F;p&gt;
&lt;p&gt;Your next concern might be that you&#x27;re all on separate versions, updating at
different rates.&lt;&#x2F;p&gt;
&lt;p&gt;The plan might be to move everyone to using &lt;code&gt;go install&lt;&#x2F;code&gt; to fetch the exact same
version of &lt;code&gt;buf&lt;&#x2F;code&gt;. This works quite well and you can even fix a version within
your &lt;code&gt;Makefile&lt;&#x2F;code&gt; or scripts to ensure it&#x27;s all matching.&lt;&#x2F;p&gt;
&lt;p&gt;This is easy enough but there are still some drawbacks. You have a minor wait
for some quick go builds, there are sometimes additional steps beyond
&lt;code&gt;go install&lt;&#x2F;code&gt; for version information when you run &lt;code&gt;--version&lt;&#x2F;code&gt;, additional libraries,
etc.
And this is purely looking at &lt;code&gt;go&lt;&#x2F;code&gt; based projects. The moment you also need a &lt;code&gt;python&lt;&#x2F;code&gt;
project like &lt;code&gt;pre-commit&lt;&#x2F;code&gt;, a &lt;code&gt;node&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;npm&lt;&#x2F;code&gt; based project like &lt;code&gt;prettier&lt;&#x2F;code&gt;, or a
&lt;code&gt;haskell&lt;&#x2F;code&gt; based project like &lt;code&gt;hadolint&lt;&#x2F;code&gt; you have to make all these decisions again.&lt;&#x2F;p&gt;
&lt;p&gt;Another thought may be to use containers but you&#x27;ll still be making the same decisions
for which base distro, where to fetch the package from, whether to fetch the binary yourself
(and of course check the sha256sum!).&lt;&#x2F;p&gt;
&lt;p&gt;By just leveraging &lt;code&gt;nix&lt;&#x2F;code&gt; the package maintainers will see to updates and following
the correct build instructions. And for Libre and Open Source projects you get
to leverage the cache for pre-built packages.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;trying-nix&quot;&gt;Trying Nix&lt;a class=&quot;zola-anchor&quot; href=&quot;#trying-nix&quot; aria-label=&quot;Anchor link for: trying-nix&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;If you&#x27;re thinking &lt;code&gt;nix&lt;&#x2F;code&gt; could help you simplify your work the next question is probably
how to get access to &lt;code&gt;nix&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;d firstly recommend just playing with &lt;code&gt;nix&lt;&#x2F;code&gt; inside of a container. It&#x27;s published to the
Docker Hub @ &lt;a href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;r&#x2F;nixos&#x2F;nix&quot;&gt;&lt;code&gt;nixos&#x2F;nix&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; and by mounting a directory
or just trying things inside the container you can get an initial feel before installing it
to your system.&lt;&#x2F;p&gt;
&lt;p&gt;For what to try I&#x27;d recommend using the &lt;a href=&quot;https:&#x2F;&#x2F;search.nixos.org&#x2F;packages?channel=unstable&quot;&gt;Search on NixOS.org&lt;&#x2F;a&gt;
to find packages you&#x27;re interested in.&lt;&#x2F;p&gt;
&lt;p&gt;From there you can:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Immediately run it
&lt;ul&gt;
&lt;li&gt;Original &lt;code&gt;nix-shell&lt;&#x2F;code&gt; syntax: &lt;code&gt;nix-shell --run &amp;lt;PACKAGE&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Newer syntax with flakes: &lt;code&gt;nix run nixpkgs#&amp;lt;PACKAGE&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Make it available in a temporary shell
&lt;ul&gt;
&lt;li&gt;Original &lt;code&gt;nix-shell&lt;&#x2F;code&gt; syntax: &lt;code&gt;nix-shell -p &amp;lt;PACKAGE&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Newer syntax with flakes: &lt;code&gt;nix shell nixpkgs#&amp;lt;PACKAGE&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Make its dependencies available if you have its source you want to build
&lt;ul&gt;
&lt;li&gt;Original &lt;code&gt;nix-shell&lt;&#x2F;code&gt; syntax: &lt;code&gt;nix-shell -A &amp;lt;PACKAGE&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Newer syntax with flakes: &lt;code&gt;nix develop nixpkgs#&amp;lt;PACKAGE&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Add it to a list of packages you&#x27;d like as a &quot;dev shell&quot; for your project
&lt;ul&gt;
&lt;li&gt;Original &lt;code&gt;nix-shell&lt;&#x2F;code&gt;: &lt;a href=&quot;https:&#x2F;&#x2F;nix.dev&#x2F;tutorials&#x2F;first-steps&#x2F;declarative-shell.html#a-basic-shell-nix-file&quot;&gt;create a &lt;code&gt;shell.nix&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; and run &lt;code&gt;nix-shell&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Newer syntax with flakes: &lt;a href=&quot;https:&#x2F;&#x2F;nixos.wiki&#x2F;wiki&#x2F;Flakes#Super_fast_nix-shell&quot;&gt;create a &lt;code&gt;flake.nix&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; and run &lt;code&gt;nix develop&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;(If you&#x27;re wondering whether you should use the original or newer syntax it&#x27;s totally up to you!
There are some out-of-the-box benefits to the flakes method but these can be replicated with
additional tooling.)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installing-nix&quot;&gt;Installing Nix&lt;a class=&quot;zola-anchor&quot; href=&quot;#installing-nix&quot; aria-label=&quot;Anchor link for: installing-nix&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Once you&#x27;re happy there are 3 main install methods:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The scripts on the &lt;a href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;download&#x2F;&quot;&gt;NixOS.org website&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;The installer created by &lt;a href=&quot;https:&#x2F;&#x2F;zero-to-nix.com&#x2F;start&#x2F;install&#x2F;&quot;&gt;Determinate Systems&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Your distribution package manager&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The first two options are both good and have their pros and cons. The third option I
personally don&#x27;t use but it&#x27;s up to you.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, welcome to the fold and thanks for reading! I plan to do a series on creating your own packages
either for personal use, for your team, or to submit upstream to nixpkgs!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>KubeCon 2025 EU Review</title>
        <published>2025-05-24T00:00:00+00:00</published>
        <updated>2025-05-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://j-k.io/blog/kubecon-2025-eu-review/"/>
        <id>https://j-k.io/blog/kubecon-2025-eu-review/</id>
        
        <content type="html" xml:base="https://j-k.io/blog/kubecon-2025-eu-review/">&lt;p&gt;This year KubeCon was back in London, England, United Kingdom. The last KubeCon in London was in 2016 and in that 9 year gap the &quot;Cloud-Native&quot; ecosystem has grown signficantly. In 2016 London saw around 300 KubeCon attendees whereas 2025 had 12,500 which is over 4000% growth.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;kubecon-2025-eu-review&#x2F;.&#x2F;images&#x2F;kubecon_eu_2025_stats.jpg&quot; alt=&quot;A range of statistics for KubeCon London 2025&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-talks&quot;&gt;The talks&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-talks&quot; aria-label=&quot;Anchor link for: the-talks&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;My goal for the conference was to avoid any talk with AI in the title. Upon talking with my colleagues I belive that was the right decision.
Instead my focus was to deep dive on Controllers, refresh my knowledge, and ensure I&#x27;m tracking up-to-date methods and practices. My secondary goal was to attend monitoring and observability talks where wasn&#x27;t talks on controllers, or where there were presentations covering both.&lt;&#x2F;p&gt;
&lt;p&gt;I hope to write more detailed thoughts and summaries of the talks I attended in the future.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-ctf&quot;&gt;The CTF&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-ctf&quot; aria-label=&quot;Anchor link for: the-ctf&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;m biased working for &lt;a href=&quot;https:&#x2F;&#x2F;control-plane.io&#x2F;&quot;&gt;ControlPlane&lt;&#x2F;a&gt; (the consultancy which designed and developed the scenarios) but I really enjoyed the CTF this year. Usually I play-test them before the events so I don&#x27;t participate but this year I kept my eyes off spoilers. I was quite happy with my progress, getting through the first two and attempting the third while attending the talks I wanted to see.
On the leaderboard I landed 11th overall or joint 9th just by points which isn&#x27;t too shabby. Especially with many regular players showing on the leaderboard.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;kubecon-2025-eu-review&#x2F;.&#x2F;images&#x2F;ctf_leaderboard.png&quot; alt=&quot;CTF Leaderboard&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re interested in a full writeup on the KubeCon EU 2025 CTF I&#x27;d strongly recommend reading the writeup by the winner Skybound&#x2F;Mohit &lt;a href=&quot;https:&#x2F;&#x2F;www.skybound.link&#x2F;2025&#x2F;04&#x2F;kubecon-eu-2025-ctf-writeup&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-venue&quot;&gt;The Venue&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-venue&quot; aria-label=&quot;Anchor link for: the-venue&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Overall the Excel London convention centre is well equipped to support large conferences like KubeCon and frequently hosts similar events such as the AWS Summit.
Being essentially a mega-warehouse overall it wasn&#x27;t too complex to navigate with essentially all the rooms branching off the main coridoor.
Having the&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-food&quot;&gt;The Food&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-food&quot; aria-label=&quot;Anchor link for: the-food&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;As usual with these larger KubeCon events catering is hard so the food was cold as per usual.
This isn&#x27;t a problem but I recommend thinking about what food you&#x27;d like cold when deciding. I generally went with sandwiches where available and they were nice.
The bags have icons for what type of diet it&#x27;d suit e.g. Pork, Lamb, Vegetarian&#x2F;Vegan, but be sure to view the signage which outlines what&#x27;s actually inside the bags. This will ensure you get something you like but also save you from peeking inside each type of bag before you eventually pick one.&lt;&#x2F;p&gt;
&lt;p&gt;As covered prior, the Excel centre has many food options along the main coridoor; if nothing is to your liking there are many other options close by.
If you have eaten elsewhere and you see at the end of lunch there&#x27;s still bags I&#x27;d still advise taking one. The cost of lunch is included in the ticket and these lunches may go to waste pick something that you or someone you know would be happy to eat later.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;transport&quot;&gt;Transport&lt;a class=&quot;zola-anchor&quot; href=&quot;#transport&quot; aria-label=&quot;Anchor link for: transport&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;The Excel centre is quite well serviced by the DLR and the (relatively) new Elizabeth Line (also known as CrossRail).&lt;&#x2F;p&gt;
&lt;p&gt;There are many hotels within a short walking distance.
If you have only one or two DLR stops I&#x27;d advise walking as even same zone travel is very expensive. Additionally it&#x27;s very easy as a visitor to forget to pay on the DLR as the touch points are out of the way.
If you are going to take the DLR the east entrance is usually the closest to Tech events and was in the case of KubeCon.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;kubecon-2025-eu-review&#x2F;.&#x2F;images&#x2F;excel_london_map.png&quot; alt=&quot;Map of the Excel Centre with the transport links annotated&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Driving in is also a good option from the east side of London. The traffic can be rough but this is mitigated by arriving early, or aiming to arrive after the keynotes end and before the general talks begin.
On-site parking was a bit steep at £25 a day but there are other options in walking distance. Although, on rainy days or where you need to make a swift exit, having your car parked in the same building could be a plus.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;kubecon-2025-eu-review&#x2F;.&#x2F;images&#x2F;excel_london_parking.png&quot; alt=&quot;Parking directions&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Overall it was a great event and it was lovely to have it in London again, especially with the shockingly good weather we had!
If your employer is covering your costs attending a KubeCon can be a great experience both for learning and making contacts in the industry.
The price cuts for self funding and students do also help. Overall I strongly recommend getting in on Early Bird pricing as you&#x27;ll save a large amount of money and it&#x27;ll make your trip feel even more worth it.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The Kubestronaut Jacket - A Review</title>
        <published>2025-02-18T00:00:00+00:00</published>
        <updated>2025-02-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://j-k.io/blog/kubestronaut-jacket-review/"/>
        <id>https://j-k.io/blog/kubestronaut-jacket-review/</id>
        
        <content type="html" xml:base="https://j-k.io/blog/kubestronaut-jacket-review/">&lt;p&gt;On the 22nd of March last year the &lt;a href=&quot;https:&#x2F;&#x2F;www.cncf.io&#x2F;blog&#x2F;2024&#x2F;03&#x2F;22&#x2F;announcing-the-kubestronaut-program&#x2F;&quot;&gt;CNCF announced&lt;&#x2F;a&gt;
the &lt;a href=&quot;https:&#x2F;&#x2F;www.cncf.io&#x2F;training&#x2F;kubestronaut&#x2F;&quot;&gt;Kubestronaut Program&lt;&#x2F;a&gt;, but it&#x27;s more likely you heard about
it after KubeCon EU 2024 where early Kubestronauts were showcasing their
jackets!&lt;&#x2F;p&gt;
&lt;p&gt;In this post I&#x27;d like to showcase and review the sought after jacket and
help you evaluate if the juice is worth the squeeze!&lt;&#x2F;p&gt;
&lt;h1 id=&quot;what-is-a-kubestronaut&quot;&gt;What is a Kubestronaut&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-is-a-kubestronaut&quot; aria-label=&quot;Anchor link for: what-is-a-kubestronaut&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;The FAQ summarises things well:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;To become a Kubestronaut, you need to pass all Kubernetes-related
certifications: CKA, CKAD, CKS, KCNA, and KCSA. All certifications must be
current&#x2F;active (i.e., in good standing, not expired).&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.cncf.io&#x2F;training&#x2F;kubestronaut&#x2F;kubestronaut-faq&#x2F;&quot;&gt;CNCF - Kubestronaut FAQ&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;what-does-the-jacket-look-like&quot;&gt;What does the jacket look like?&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-does-the-jacket-look-like&quot; aria-label=&quot;Anchor link for: what-does-the-jacket-look-like&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;🎉 Tada 🎉&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;kubestronaut-jacket-review&#x2F;.&#x2F;images&#x2F;folded.png&quot; alt=&quot;Jacket folded&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Here it is. It&#x27;s a &quot;royal blue&quot; jacket with a CloudNative Computing Foundation logo on
the front and a Kubestronaut logo on the back.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;kubestronaut-jacket-review&#x2F;.&#x2F;images&#x2F;on_table.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It features a full-body zipper, long sleaves, and two decently large pockets.
The grey accent along the zipper and the back are reflective.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;kubestronaut-jacket-review&#x2F;.&#x2F;images&#x2F;inside.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The inside is a grey colour and made of a breathable material, more on that in
the &lt;a href=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;kubestronaut-jacket-review&#x2F;#statistics&quot;&gt;statistics&lt;&#x2F;a&gt; section! The rear of the zipper is covered which
should reduce discomfort when moving around or wearing less layers underneath.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;kubestronaut-jacket-review&#x2F;.&#x2F;images&#x2F;left_pocket_outside.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And this hole isn&#x27;t a bug, this is a feature! It&#x27;s a hole for your earphones to
reach through to the top of your left-hand pocket.&lt;&#x2F;p&gt;
&lt;p&gt;In a world of phones loosing their 3.5mm headphone jack this may not benefit
too many of you, but the wired diehards are sure to appreciate it.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;j-k.io&#x2F;blog&#x2F;kubestronaut-jacket-review&#x2F;.&#x2F;images&#x2F;headphone_loop.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There is also a loop on the neck to help hold the cable in place which is
useful when running or hiking a long distance.&lt;&#x2F;p&gt;
&lt;p&gt;Overall the jacket feels well made, useful, and has a variety of nice features!
I&#x27;m very happy with mine and I think it&#x27;s quite stylish. It&#x27;s also a refreshing
alternative to a certain shiny jacket you may also be aware of.&lt;&#x2F;p&gt;
&lt;p&gt;Personally I find this much more comfortable to wear out in public and I&#x27;ll be
brining it with me to any CNCF conferences and probably most cloud related
events.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;statistics&quot;&gt;Statistics&lt;a class=&quot;zola-anchor&quot; href=&quot;#statistics&quot; aria-label=&quot;Anchor link for: statistics&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;It&#x27;s actually pretty waterproof with a 8,000 mm waterproof rating.&lt;&#x2F;p&gt;
&lt;p&gt;It can be machine washed, on a cold gentle cycle.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s an 8oz&#x2F;yd2 &#x2F; 200 gsm, 3-Layer 100% polyester interlock bonded to polyester
birdsey if that means anything to you.
In laymans terms, it has a soft but sporty texture to it and the inside has a
breathable mesh.&lt;&#x2F;p&gt;
&lt;p&gt;This jacket should be suitable for most climates. In colder regions layering up
underneath should be sufficient. However in high heat or extreme cold you
might only wear it indoors or leave it forever on a hanger!&lt;&#x2F;p&gt;
&lt;h1 id=&quot;should-you-get-one&quot;&gt;Should you get one?&lt;a class=&quot;zola-anchor&quot; href=&quot;#should-you-get-one&quot; aria-label=&quot;Anchor link for: should-you-get-one&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;Well if you&#x27;re thinking of buying all the certs at $1645 USD, spending the time
swotting up on the material, and spending several hours on proctored exams just
for the jacket, I&#x27;d suggest visiting a sporting or camping shop or searching
online.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re already going to be doing the study to broaden your understanding of
k8s, or already have several of the pre-requisite certs, maybe consider going
for Kubestronaut!&lt;&#x2F;p&gt;
&lt;h1 id=&quot;going-for-kubestronaut&quot;&gt;Going for Kubestronaut&lt;a class=&quot;zola-anchor&quot; href=&quot;#going-for-kubestronaut&quot; aria-label=&quot;Anchor link for: going-for-kubestronaut&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;p&gt;If you do decide you just have to have this jacket (&lt;em&gt;or the other benefits&lt;&#x2F;em&gt;),
here are some tips:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Consider the &lt;a href=&quot;https:&#x2F;&#x2F;training.linuxfoundation.org&#x2F;certification&#x2F;kubestronaut-bundle&#x2F;&quot;&gt;Kubestronaut Bundle&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;You can often save some money over buying the certs individually.&lt;&#x2F;li&gt;
&lt;li&gt;It can be more convenient than buying certs one-by-one since the LF Training
website doesn&#x27;t really have a &quot;cart&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;If you already have one or more of the certs run the numbers as to whether
the bundle is best for you.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Keep an eye out for deals&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;There are frequently discounts and deals for various events or occasions.
With these discounts you can save a good chunk of cash which you could put
towards training materials or anything else.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Use your training budget or check in with your employeer&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;If you have a training budget don&#x27;t forget to expense the certs.&lt;&#x2F;li&gt;
&lt;li&gt;Even if you&#x27;re not going to sit the exams immediately you may want to buy
access before your budget rolls-over&#x2F;expires.&lt;&#x2F;li&gt;
&lt;li&gt;If you don&#x27;t have a standard training budget maybe check in with your
employeer as they may want a Kubestronaut on their team and might fund
things anyway!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;I plan to provide some more comprenehsive guidance in future posts on the road
to Kubestronaut and sitting the exams so be sure to check back in, or subscribe
to the RSS feed!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Home media and what on earth is a &quot;Jellyfin&quot;</title>
        <published>2025-02-12T00:00:00+00:00</published>
        <updated>2025-02-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://j-k.io/blog/home-media-what-is-jellyfin/"/>
        <id>https://j-k.io/blog/home-media-what-is-jellyfin/</id>
        
        <content type="html" xml:base="https://j-k.io/blog/home-media-what-is-jellyfin/">&lt;p&gt;When in our down time sometimes it&#x27;s nice to kick up your legs and watch
something on the TV, or wrap up in bed and watch something on the Laptop.&lt;&#x2F;p&gt;
&lt;p&gt;For many, this means a streaming service. In the past it was pretty much just
Netflix; now we&#x27;re inundated with numerous different subscription services.
These &quot;services&quot; fragmenting the libraries of content we&#x27;re interested in and
getting evermore restrictive at the same or higher costs.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;home-media-servers&quot;&gt;Home media servers&lt;a class=&quot;zola-anchor&quot; href=&quot;#home-media-servers&quot; aria-label=&quot;Anchor link for: home-media-servers&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h2 id=&quot;why-jellyfin-is-the-better-option-for-your-home-media-server&quot;&gt;Why Jellyfin is the Better Option for Your Home Media Server&lt;a class=&quot;zola-anchor&quot; href=&quot;#why-jellyfin-is-the-better-option-for-your-home-media-server&quot; aria-label=&quot;Anchor link for: why-jellyfin-is-the-better-option-for-your-home-media-server&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Even less-technical people are growing an interest in self-hosted home media
servers. An easy answer for most people is &lt;a href=&quot;https:&#x2F;&#x2F;www.plex.tv&#x2F;&quot;&gt;Plex&lt;&#x2F;a&gt; due to
it&#x27;s polished interface and relative ease of setup.
In this blog post I&#x27;ll attempt to lay out a few reasons why I&#x27;d suggest you try
&lt;a href=&quot;https:&#x2F;&#x2F;jellyfin.org&#x2F;&quot;&gt;Jellyfin&lt;&#x2F;a&gt; first.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1-free-as-in-freedom&quot;&gt;1. &lt;strong&gt;Free as in Freedom&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#1-free-as-in-freedom&quot; aria-label=&quot;Anchor link for: 1-free-as-in-freedom&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Jellyfin is Free&#x2F;Libre and Open Source Software (FLOSS). Its source code is
publicly available, and contributions come from a passionate community of
developers and users who value transparency. This means no hidden surprises in
the codebase, no corporate meddling, and no forced updates that could
compromise your setup. Plex, while offering a free tier, is still proprietary
software. You’re subject to the whims of their development roadmap, and
features can be locked behind paywalls or removed altogether without notice.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-privacy-and-control&quot;&gt;2. &lt;strong&gt;Privacy and Control&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2-privacy-and-control&quot; aria-label=&quot;Anchor link for: 2-privacy-and-control&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;With Jellyfin, you control your data. It doesn’t &quot;phone home&quot; to third-party
servers or require online accounts to operate. Everything stays on your server,
giving you complete control over your media and metadata. Plex, on the other
hand, often requires interaction with their cloud services—even if you’re
only streaming locally. If you care about keeping your data out of corporate
hands, Jellyfin is the obvious choice.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-no-paywalls-ever&quot;&gt;3. &lt;strong&gt;No Paywalls, Ever&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#3-no-paywalls-ever&quot; aria-label=&quot;Anchor link for: 3-no-paywalls-ever&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;One of the biggest frustrations with Plex is its monetization model. While its
free tier is functional, key features like hardware transcoding, offline
downloads, and mobile sync are locked behind the Plex Pass subscription.
Jellyfin doesn’t do this. All features are free for everyone, whether
you’re setting up remote access, using hardware acceleration, or creating
user profiles for your family.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4-customization-for-power-users&quot;&gt;4. &lt;strong&gt;Customization for Power Users&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#4-customization-for-power-users&quot; aria-label=&quot;Anchor link for: 4-customization-for-power-users&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;As someone who thrives in Linux environments and embraces tools like Nix for
declarative systems management, Jellyfin aligns perfectly with the ethos of
customization and flexibility. It’s highly configurable, with support for
different metadata providers, fine-tuned transcoding settings, and integration
with other FLOSS projects like Kodi. If you enjoy tweaking your setup to suit
your specific needs, Jellyfin feels like a breath of fresh air compared to the
walled-garden approach of Plex.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;5-community-driven-development&quot;&gt;5. &lt;strong&gt;Community-Driven Development&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#5-community-driven-development&quot; aria-label=&quot;Anchor link for: 5-community-driven-development&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Jellyfin’s community-driven model fosters innovation and inclusivity. Because
it’s open source, features are added and bugs are fixed by users like you and
me. This results in a product that evolves based on real-world needs, not
corporate priorities. For example, recent updates have focused on better
transcoding support, UI improvements, and expanded plugin options—all driven
by user feedback.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;6-the-joy-of-owning-your-media-experience&quot;&gt;6. &lt;strong&gt;The Joy of Owning Your Media Experience&lt;&#x2F;strong&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#6-the-joy-of-owning-your-media-experience&quot; aria-label=&quot;Anchor link for: 6-the-joy-of-owning-your-media-experience&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;At its core, choosing Jellyfin is about embracing the philosophy of ownership.
Whether you&#x27;re a developer who enjoys the satisfaction of running a self-hosted
system or simply someone who values the freedom to use software on your terms,
Jellyfin represents the ideal media server solution. It’s about aligning your
tools with your values: transparency, privacy, and community.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;a class=&quot;zola-anchor&quot; href=&quot;#summary&quot; aria-label=&quot;Anchor link for: summary&quot;&gt;
    &lt;svg class=&quot;zola-anchor-link&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
        &lt;path fill-rule=&quot;evenodd&quot;
            d=&quot;M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z&quot;&gt;
        &lt;&#x2F;path&gt;
    &lt;&#x2F;svg&gt;
&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;For anyone considering setting up a home media server, Jellyfin is a
no-compromise option. It respects your privacy, doesn’t penny pinch you at
every opportunity, and gives you the freedom to own your experience. Sure, Plex
has a smoother onboarding process and a shinier app—but for those of us who
believe in FLOSS and the principles it stands for, Jellyfin isn’t just
better; it’s the only choice.&lt;&#x2F;p&gt;
&lt;p&gt;So take the leap, install Jellyfin, and rediscover the joy of owning your media
on your terms.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The Beginning and the Tech Stack</title>
        <published>2025-01-16T00:00:00+00:00</published>
        <updated>2025-01-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://j-k.io/blog/the-beginning-and-the-tech-stack/"/>
        <id>https://j-k.io/blog/the-beginning-and-the-tech-stack/</id>
        
        <summary type="html">&lt;p&gt;An overview of how this blog is built and what will be posted here.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
</feed>
