<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nix on nobe4</title><link>https://nobe4.fr/tags/nix/</link><description>Recent content in Nix on nobe4</description><generator>Hugo</generator><language>en</language><copyright>&lt;a href="https://creativecommons.org/licenses/by-sa/4.0/"&gt;CC BY-SA&lt;/a&gt;</copyright><lastBuildDate>Thu, 02 Jul 2026 21:23:42 +0200</lastBuildDate><atom:link href="https://nobe4.fr/tags/nix/index.xml" rel="self" type="application/rss+xml"/><item><title>Devenv as a Config Syncer</title><link>https://nobe4.fr/posts/devenv-as-a-config-syncer/</link><pubDate>Thu, 02 Jul 2026 20:34:25 +0200</pubDate><guid>https://nobe4.fr/posts/devenv-as-a-config-syncer/</guid><description>&lt;p&gt;I keep a &lt;a href="https://golangci-lint.run/"&gt;golangci-lint&lt;/a&gt; config that I share across
my Go projects. Sync&amp;rsquo;ing it around gets old fast: I have to remember which repos
use it and update them all.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devenv.sh/"&gt;Devenv&lt;/a&gt; already manages my dev shells. Turns out it can
also fetch and install config files automatically.&lt;/p&gt;
&lt;h2 id="the-idea"&gt;The idea&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;pkgs.fetchurl&lt;/code&gt; downloads a file at build time and pins it by hash.
Devenv &lt;a href="https://devenv.sh/tasks/"&gt;tasks&lt;/a&gt; can run before the shell starts.&lt;/p&gt;
&lt;p&gt;Combine the two: fetch a remote config, symlink it into the project.&lt;/p&gt;</description></item><item><title>Nix RPi Bootstrapping</title><link>https://nobe4.fr/posts/nix-rpi-bootstrapping/</link><pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate><guid>https://nobe4.fr/posts/nix-rpi-bootstrapping/</guid><description>&lt;p&gt;I can never remember how to set up a Raspberry Pi. Every time I flash an SD
card, I end up searching for the same wifi configuration, the same SSH setup,
the same boot options.&lt;/p&gt;
&lt;p&gt;During my recent exploration of Nix, this felt like an immediate candidate for
improvement: the whole configuration lives in code, and rebuilding is one
command.&lt;/p&gt;
&lt;p&gt;This post covers getting NixOS onto an RPi from scratch, and the problems I hit
while deploying updates to it. It is simplified for clarity and covers three
areas: building a minimal bootstrap image, handling secrets with agenix, and
deploying updates over SSH.&lt;/p&gt;</description></item><item><title>Nix bin alias</title><link>https://nobe4.fr/posts/nix-bin-alias/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><guid>https://nobe4.fr/posts/nix-bin-alias/</guid><description>&lt;p&gt;In one of my &lt;a href="https://nobe4.fr/posts/nix-ln-the-wrong-ways/"&gt;previous post&lt;/a&gt;, I explored how to use &lt;code&gt;ln&lt;/code&gt; to link files across a
NixOS system. The two initial needs were to link configuration files, and create
a binary alias.&lt;/p&gt;
&lt;p&gt;I tend to install &lt;a href="https://github.com/itchyny/gojq?tab=readme-ov-file#difference-to-jq"&gt;&lt;code&gt;gojq&lt;/code&gt;&lt;/a&gt; and use it as &lt;a href="https://github.com/jqlang/jq"&gt;&lt;code&gt;jq&lt;/code&gt;&lt;/a&gt;, it makes more sense to me to
have a consistent experience between the CLI and library. I have not &lt;em&gt;yet&lt;/em&gt;
suffered from this choice, despite my intense &lt;a href="https://github.com/jqlang/jq"&gt;&lt;code&gt;jq&lt;/code&gt;&lt;/a&gt; usage.&lt;/p&gt;
&lt;p&gt;In this post, we&amp;rsquo;ll use it to explore how to create a direct link to the &lt;code&gt;gojq&lt;/code&gt;
binary. The logic can be applied to any other binary of your choice.&lt;/p&gt;</description></item><item><title>Nix-Darwin shell override</title><link>https://nobe4.fr/posts/nix-darwin-shell-override/</link><pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate><guid>https://nobe4.fr/posts/nix-darwin-shell-override/</guid><description>&lt;p&gt;&lt;em&gt;All code snippets are simplified for clarity.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="moving-aliases-to-nix"&gt;Moving aliases to Nix&lt;/h2&gt;
&lt;p&gt;I recently decided to move my shell aliases, and ZSH options to Nix.&lt;/p&gt;
&lt;p&gt;There are predefined Nix options for this, all under &lt;a href="https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/programs/zsh/zsh.nix"&gt;&lt;code&gt;programs.zsh&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/programs/bash/bash.n"&gt;&lt;code&gt;programs.bash&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And since I use the same aliases for &lt;code&gt;zsh&lt;/code&gt; and &lt;code&gt;bash&lt;/code&gt;, here&amp;rsquo;s the configuration
I came to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://github.com/nobe4/dotfiles/blob/0281789d26fa16b68a98c7e1a5f9b1ef915bbc11/nixos/packages/shell/aliases.nix"&gt;&lt;code&gt;packages/shell/aliases.nix&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;




	&lt;div class=" highlight-wrapper" data-lang="nix"&gt;
		&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nix" data-lang="nix"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;ls&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ls --color=auto&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;ll&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ls -la&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;optionalAttrs&lt;/span&gt; &lt;span class="n"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdenv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isDarwin&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;kitty&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;$HOME/Applications/kitty.app/Contents/MacOS/kitty&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
	&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://github.com/nobe4/dotfiles/blob/0281789d26fa16b68a98c7e1a5f9b1ef915bbc11/nixos/packages/shell/shell.nix"&gt;&lt;code&gt;packages/shell/shell.nix&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;




	&lt;div class=" highlight-wrapper" data-lang="nix"&gt;
		&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nix" data-lang="nix"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;let&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;shellAliases&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="sr"&gt;./aliases.nix&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;lib&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;pkgs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pkgs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;in&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;programs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;zsh&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;enable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;setOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ALWAYS_TO_END&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;shellAliases&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;shellAliases&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;programs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;enable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;shellAliases&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;shellAliases&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
	&lt;/div&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And I can import &lt;code&gt;shell.nix&lt;/code&gt; wherever needed, so far so good.&lt;/p&gt;</description></item><item><title>Nix ln, the wrong ways</title><link>https://nobe4.fr/posts/nix-ln-the-wrong-ways/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate><guid>https://nobe4.fr/posts/nix-ln-the-wrong-ways/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: don&amp;rsquo;t do this, everyone suggests using &lt;code&gt;home-manager&lt;/code&gt;, or a non-Nix
solution.&lt;/p&gt;
&lt;p&gt;In the exploration of porting my configuration to Nix, the next step was to
manage all the links. This article shows a couple of wrong ways to do it, they
are still good learning paths, hence this writing.&lt;/p&gt;
&lt;p&gt;Unless otherwise specified, all code examples are simplified for clarity.&lt;/p&gt;
&lt;h2 id="current-configuration"&gt;Current configuration&lt;/h2&gt;
&lt;p&gt;Whenever I need to link a new file, I add a line in:&lt;/p&gt;</description></item><item><title>Nix packaging</title><link>https://nobe4.fr/posts/nix-packaging/</link><pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate><guid>https://nobe4.fr/posts/nix-packaging/</guid><description>&lt;p&gt;I have been using Nix for a couple of month, from a purely &lt;em&gt;consumer&lt;/em&gt;
perspective. In all tools that I wanted to master, &lt;em&gt;producing&lt;/em&gt; is a great
teaching tool, sometimes more than &lt;em&gt;consuming&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;In that effect, I wanted to see how I could install &lt;code&gt;bat&lt;/code&gt;, without using the
predefined package.&lt;/p&gt;
&lt;h2 id="the-plan"&gt;The plan&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the source code&lt;/p&gt;
&lt;p&gt;This is achieved with &lt;code&gt;fetchFromGitHub&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compile the rust binary&lt;/p&gt;
&lt;p&gt;This is achieved with &lt;code&gt;buildRustPackage&lt;/code&gt;.&lt;/p&gt;</description></item></channel></rss>