<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Guix on Ozbem</title><link>https://www.ozbem.com/tags/tech/guix/</link><description>Recent content in Guix on Ozbem</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>info@ozbem.com (ebeem)</managingEditor><webMaster>info@ozbem.com (ebeem)</webMaster><copyright>© 2026 ebeem</copyright><lastBuildDate>Fri, 19 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.ozbem.com/tags/tech/guix/rss.xml" rel="self" type="application/rss+xml"/><item><title>Introduction to Guix</title><link>https://www.ozbem.com/posts/tech/guix/intro/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><author>info@ozbem.com (ebeem)</author><guid>https://www.ozbem.com/posts/tech/guix/intro/</guid><description>&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;&lt;span class="todo status-todo"&gt;TODO&lt;/span&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Channels&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;Channels in &lt;code class="verbatim"&gt;Guix&lt;/code&gt; are a way to customize and extend the &lt;code class="verbatim"&gt;Guix&lt;/code&gt; package collection. They allow users to pull packages and updates from multiple repositories. They are declared as a list of &lt;code class="verbatim"&gt;channel&lt;/code&gt; records in the file &lt;code class="verbatim"&gt;channels.scm&lt;/code&gt;. These channels are git repositories that store definitions that instruct &lt;code class="verbatim"&gt;Guix&lt;/code&gt; how to build and install packages. Since these are git repositories, then similar to any git cloned project, it needs to be pulled to kept up to date. &lt;code class="verbatim"&gt;Guix&lt;/code&gt; can help you update/pull all your configured channels with the command &lt;code class="verbatim"&gt;guix pull&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;Note: pulling &lt;code class="verbatim"&gt;Guix&lt;/code&gt; might take a long time depending on how outdated your system is. Expect up to an hour on your first installation.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Adding a channel&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Create or edit your &lt;code class="verbatim"&gt;~/.config/guix/channels.scm&lt;/code&gt; file to include your desired channels. Here&amp;#39;s an example: &lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="src src-scheme"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scheme" data-lang="scheme"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cons*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;channel&lt;/span&gt;&#10;&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 class="nf"&gt;name&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;my-channel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;url&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;https://example.com/my-channel.git&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;%default-channels&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Note: we create a channel record with the name &lt;code class="verbatim"&gt;my-channel&lt;/code&gt; and the git url, then we use &lt;code class="verbatim"&gt;cons&lt;/code&gt; to append it to the &lt;code class="verbatim"&gt;%default-channels&lt;/code&gt; which includes the default &lt;code class="verbatim"&gt;Guix&lt;/code&gt; channel. It&amp;#39;s possible to remove the default &lt;code class="verbatim"&gt;Guix&lt;/code&gt; channel by returning a new list without appending the default channels.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Save the file and pull &lt;code class="verbatim"&gt;Guix&lt;/code&gt; channels:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;guix pull&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Removing a channel&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;edit your &lt;code class="verbatim"&gt;~/.config/guix/channels.scm&lt;/code&gt; file to exclude the target channel.&lt;/li&gt;&#10;&lt;li&gt;Save the file and pull &lt;code class="verbatim"&gt;Guix&lt;/code&gt; channels:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;guix pull&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Useful Resources&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://guix.gnu.org/manual/en/html_node/Channels.html"&gt;GNU Guix Manual - Channels&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://toys.whereis.xn--q9jyb4c/"&gt;Toys Whereis - A collection of guix Channels&lt;/a&gt; &lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-2"&gt;&#10;&lt;h2 id="headline-6"&gt;&#10;NonGuix Channel&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;&lt;code class="verbatim"&gt;Nonguix&lt;/code&gt; is a &lt;code class="verbatim"&gt;Guix&lt;/code&gt; channel that packages some software which cannot be included in the official distribution for ethical or policy-related reasons. &lt;code class="verbatim"&gt;Guix&lt;/code&gt; official repository offers only &lt;a href="https://www.gnu.org/philosophy/free-sw.en.html"&gt;Gnu Compatible Free Software&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;It will be great if we can use only free software, but sometimes it&amp;#39;s necessary to add some nonfree software to get our machine functioning properly. For example, Guix&amp;#39;s default kernel is called &lt;code class="verbatim"&gt;Linux Libre&lt;/code&gt;, it&amp;#39;s a custom Linux kernel that doesn&amp;#39;t ship with some nonfree drivers embedded into the &lt;code class="verbatim"&gt;Linux&lt;/code&gt; kernel. These drivers are necessary to get some wifi and bluetooth cards to work.&lt;/p&gt;&#10;&lt;p&gt;&#10;Rule of thumb: If everything works properly in your case, no missing drivers, all hardware is working as expected, then you probably don&amp;#39;t want to add or use the nonguix channel.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-3"&gt;&#10;&lt;h3 id="headline-7"&gt;&#10;Adding the NonGuix channel&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-3"&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Create or edit your &lt;code class="verbatim"&gt;~/.config/guix/channels.scm&lt;/code&gt; file to include the &lt;code class="verbatim"&gt;NonGuix&lt;/code&gt; channel &lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="src src-scheme"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scheme" data-lang="scheme"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cons*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;channel&lt;/span&gt;&#10;&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 class="nf"&gt;name&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;nonguix&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;url&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;https://gitlab.com/nonguix/nonguix&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;;; Enable signature verification:&lt;/span&gt;&#10;&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 class="nf"&gt;introduction&lt;/span&gt;&#10;&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 class="nf"&gt;make-channel-introduction&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;897c1a470da759236cc11798f4e0a5f7d4d59fbc&amp;#34;&lt;/span&gt;&#10;&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 class="nf"&gt;openpgp-fingerprint&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;%default-channels&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Pull &lt;code class="verbatim"&gt;Guix&lt;/code&gt; channels&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;guix pull&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Note: in case you notice the message below after pulling &lt;code class="verbatim"&gt;NonGuix&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hint: Consider setting the necessary environment variables by running:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;GUIX_PROFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/home/ebeem/.config/guix/current&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; . &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$GUIX_PROFILE&lt;/span&gt;&lt;span class="s2"&gt;/etc/profile&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Alternately, see &lt;span class="sb"&gt;`&lt;/span&gt;guix package --search-paths -p &lt;span class="s2"&gt;&amp;#34;/home/ebeem/.config/guix/current&amp;#34;&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;hint: After setting `PATH&amp;#39;&lt;/span&gt;, run &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;hash&lt;/span&gt; guix&lt;span class="s1"&gt;&amp;#39; to make sure your shell refers to `/home/ebeem/.config/guix/current/bin/guix&amp;#39;&lt;/span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Then execute the below to ensure the updated profile path is active&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;GUIX_PROFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/home/ebeem/.config/guix/current&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; . &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$GUIX_PROFILE&lt;/span&gt;&lt;span class="s2"&gt;/etc/profile&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;hash&lt;/span&gt; guix&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Note: with this step, you only make the nonguix packages available to your system. You are still not using the &lt;code class="verbatim"&gt;Full Linux kernel&lt;/code&gt; or any other nonfree software. Continue to the other sections to learn more.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-3"&gt;&#10;&lt;h3 id="headline-8"&gt;&#10;Useful Resources&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.gnu.org/philosophy/free-sw.en.html"&gt;What is Free Software?&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://gitlab.com/nonguix/nonguix"&gt;NonGuix Gitlab Repository&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Linux-libre"&gt;Linux Libre&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-2"&gt;&#10;&lt;h2 id="headline-9"&gt;&#10;System Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;System configuration in &lt;code class="verbatim"&gt;Guix&lt;/code&gt; is declarative, meaning you define the desired state of your system in a configuration file, and &lt;code class="verbatim"&gt;Guix&lt;/code&gt; ensures your system matches that state. Upon installing &lt;code class="verbatim"&gt;Guix&lt;/code&gt;, you provided system configuration parameters that &lt;code class="verbatim"&gt;Guix&lt;/code&gt; installer used to create a system configuration file for you in the path &lt;code class="verbatim"&gt;/etc/config.scm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;You can take a peak at this file and see all the parameters that have been configured like: &lt;code class="verbatim"&gt;locale&lt;/code&gt;, &lt;code class="verbatim"&gt;timezone&lt;/code&gt;, &lt;code class="verbatim"&gt;keyboard-layout&lt;/code&gt;, &lt;code class="verbatim"&gt;host-name&lt;/code&gt;, &lt;code class="verbatim"&gt;users&lt;/code&gt;, &lt;code class="verbatim"&gt;packages&lt;/code&gt;, &lt;code class="verbatim"&gt;services&lt;/code&gt;, &lt;code class="verbatim"&gt;bootloader&lt;/code&gt;, &lt;code class="verbatim"&gt;swap-devices&lt;/code&gt;, &lt;code class="verbatim"&gt;file-systems&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;These configurations are system level, this means that they impact all the users on your system. For example, we can add &lt;code class="verbatim"&gt;emacs&lt;/code&gt; to the declared &lt;code class="verbatim"&gt;packages&lt;/code&gt; list, this will install &lt;code class="verbatim"&gt;emacs&lt;/code&gt; globally on your system and make it available to all users. It&amp;#39;s important to understand here that unlike other Linux distributions and operating systems. &lt;code class="verbatim"&gt;Guix&lt;/code&gt; suggests adding packages to user configurations (called &lt;code class="verbatim"&gt;home&lt;/code&gt; configuration) rather than &lt;code class="verbatim"&gt;system&lt;/code&gt; configuration. However, some packages must be installed globally, like the &lt;code class="verbatim"&gt;Linux&lt;/code&gt; kernel, &lt;code class="verbatim"&gt;vi&lt;/code&gt; to have a text editor and your display manager like &lt;code class="verbatim"&gt;GDM&lt;/code&gt;. Knowing when to add a package to system or user level might take sometime, but the rule of thumb here, if you can add it to user level, then do so.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-10" class="outline-3"&gt;&#10;&lt;h3 id="headline-10"&gt;&#10;Creating System Configuration&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-10" class="outline-text-3"&gt;&#10;&lt;p&gt;&#10;It&amp;#39;s better to start with the generated &lt;code class="verbatim"&gt;Guix&lt;/code&gt; configuration located in the path &lt;code class="verbatim"&gt;/etc/config.scm&lt;/code&gt;. My preference is to have this system configuration added to my &lt;code class="verbatim"&gt;dotfiles&lt;/code&gt; so I can easily manage and track changes using &lt;code class="verbatim"&gt;git&lt;/code&gt;.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Copy the generated &lt;code class="verbatim"&gt;Guix&lt;/code&gt; configuration file to your &lt;code class="verbatim"&gt;Guix&lt;/code&gt; configuration directory&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp /etc/config.scm ~/.config/guix/system.scm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-11" class="outline-3"&gt;&#10;&lt;h3 id="headline-11"&gt;&#10;Applying System Configuration&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-11" class="outline-text-3"&gt;&#10;&lt;p&gt;Upon modifying the system configuration, you will have to tell &lt;code class="verbatim"&gt;Guix&lt;/code&gt; to apply your changes by providing it with the path of your system configuration.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo guix system reconfigure ~/.config/guix/system.scm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Note: Remember that the &lt;code class="verbatim"&gt;Guix&lt;/code&gt; system configuration contains data that only superusers can access or modify. For example, only superusers can partition disks, manage users, manage system level packages, manage system level services. That&amp;#39;s the reason why a &lt;code class="verbatim"&gt;sudo&lt;/code&gt; is required when you would like to reconfigure your system.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-12" class="outline-3"&gt;&#10;&lt;h3 id="headline-12"&gt;&#10;Using Nonfree Linux Kernel&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-12" class="outline-text-3"&gt;&#10;&lt;p&gt;To be able to use the nonfree &lt;code class="verbatim"&gt;Linux&lt;/code&gt; kernel, you must add the &lt;code class="verbatim"&gt;NonGuix&lt;/code&gt; channel and pull it so the nonfree software become available to your system.&lt;/p&gt;&#10;&lt;p&gt;&#10;Edit your &lt;code class="verbatim"&gt;~/.config/guix/system.scm&lt;/code&gt; as below&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Add needed imports in your system configuration&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Just below the line where the &lt;code class="verbatim"&gt;gnu&lt;/code&gt; module is imported &lt;code class="verbatim"&gt;(use-modules (gnu))&lt;/code&gt;&#10;Add the below lines&lt;/p&gt;&#10;&lt;div class="src src-scheme"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scheme" data-lang="scheme"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;;; Import nonfree linux module.&lt;/span&gt;&#10;&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 class="nf"&gt;use-modules&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;nongnu&lt;/span&gt; &lt;span class="nv"&gt;packages&lt;/span&gt; &lt;span class="nv"&gt;linux&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;nongnu&lt;/span&gt; &lt;span class="nv"&gt;system&lt;/span&gt; &lt;span class="nv"&gt;linux-initrd&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Modify the parameters of your operating system record&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Now you will have to add the new nonfree &lt;code class="verbatim"&gt;Linux&lt;/code&gt; kernel as the kernel of your system.&#10;You can do so be adding the below lines just below the line where the operating system is defined &lt;code class="verbatim"&gt;(operting-system&lt;/code&gt; and before the line where &lt;code class="verbatim"&gt;locale&lt;/code&gt; is defined.&lt;/p&gt;&#10;&lt;div class="src src-scheme"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scheme" data-lang="scheme"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;kernel&lt;/span&gt; &lt;span class="nv"&gt;linux&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;initrd&lt;/span&gt; &lt;span class="nv"&gt;microcode-initrd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;firmware&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list &lt;/span&gt;&lt;span class="nv"&gt;linux-firmware&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Apply the system configuration&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Now that you modified the used kernel, you must apply the configuration for it to take affect.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo guix system reconfigure ~/.config/guix/system.scm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Note: This might take a long time if this is the first time you reconfigure the system. That&amp;#39;s because when you pull the channels, you updated the list of package definitions available with their versions. This means that the latest version of Emacs available becomes &lt;code class="verbatim"&gt;Emacs&lt;/code&gt; 30, while you&amp;#39;re still running &lt;code class="verbatim"&gt;Emacs&lt;/code&gt; 28. Pulling will NOT upgrade packages, it will just make the new versions available. On the other hand, system reconfigure will update packages if the pulled channels indicate that an update is available.&lt;/p&gt;&#10;&lt;p&gt;&#10;Note: Avoid running any guix configuration commands under the &lt;code class="verbatim"&gt;root&lt;/code&gt; user. Using &lt;code class="verbatim"&gt;sudo&lt;/code&gt; will ensure that your user configured channels are used, if you would like to reconfigure your system as &lt;code class="verbatim"&gt;root&lt;/code&gt; then you will have to also maintain another list of channels and keep them up to date which is not convenient. Rule of thumb: you probably never want to run any of the &lt;code class="verbatim"&gt;Guix&lt;/code&gt; commands as a &lt;code class="verbatim"&gt;root&lt;/code&gt; user, you should use &lt;code class="verbatim"&gt;sudo&lt;/code&gt; when superuser privileges are required.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-13" class="outline-3"&gt;&#10;&lt;h3 id="headline-13"&gt;&#10;Useful Resources&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-13" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.gnu.org/philosophy/free-sw.en.html"&gt;What is Free Software?&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://gitlab.com/nonguix/nonguix"&gt;NonGuix Gitlab Repository&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Linux-libre"&gt;Linux Libre&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://guix.gnu.org/manual/devel/en/html_node/System-Configuration.html"&gt;System Configuration - Guix Manual&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-14" class="outline-2"&gt;&#10;&lt;h2 id="headline-14"&gt;&#10;Home Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-14" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;Now that you have a good idea how to modify and apply system level configuration, let&amp;#39;s dive into modify your user level configuration (referred to as home configuration). &lt;code class="verbatim"&gt;Guix&lt;/code&gt; Home configuration allows you to set packages and services per user. Packages are software to be installed, while services can be actual sheperd services, configuration manager.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-15" class="outline-3"&gt;&#10;&lt;h3 id="headline-15"&gt;&#10;Creating Home Configuration&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-15" class="outline-text-3"&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Create or edit your &lt;code class="verbatim"&gt;~/.config/guix/home.scm&lt;/code&gt; file to include your desired configuration. Here&amp;#39;s an example: &lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="src src-scheme"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scheme" data-lang="scheme"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;use-modules&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;gnu&lt;/span&gt; &lt;span class="nv"&gt;home&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;gnu&lt;/span&gt; &lt;span class="nv"&gt;home&lt;/span&gt; &lt;span class="nv"&gt;services&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;gnu&lt;/span&gt; &lt;span class="nv"&gt;home&lt;/span&gt; &lt;span class="nv"&gt;services&lt;/span&gt; &lt;span class="nv"&gt;shells&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;gnu&lt;/span&gt; &lt;span class="nv"&gt;services&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;gnu&lt;/span&gt; &lt;span class="nv"&gt;packages&lt;/span&gt; &lt;span class="nv"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;guix&lt;/span&gt; &lt;span class="nv"&gt;gexp&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&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 class="nf"&gt;home-environment&lt;/span&gt;&#10;&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 class="nf"&gt;packages&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list &lt;/span&gt;&lt;span class="nv"&gt;htop&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&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 class="nf"&gt;services&lt;/span&gt;&#10;&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 class="nf"&gt;list&lt;/span&gt;&#10;&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 class="nf"&gt;service&lt;/span&gt; &lt;span class="nv"&gt;home-bash-service-type&lt;/span&gt;&#10;&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 class="nf"&gt;home-bash-configuration&lt;/span&gt;&#10;&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 class="nf"&gt;guix-defaults?&lt;/span&gt; &lt;span class="no"&gt;#t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;bash-profile&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;plain-file&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;bash-profile&amp;#34;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;export HISTFILE=$XDG_CACHE_HOME/.bash_history&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))))))))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Note: we define packages and services for our home configuration. our list of packages in this example is &lt;code class="verbatim"&gt;htop&lt;/code&gt; only. The services is only &lt;code class="verbatim"&gt;home-bash-configuration&lt;/code&gt; which create the file &lt;code class="verbatim"&gt;bash-profile&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;Note: notice that we import some modules that expose the package &lt;code class="verbatim"&gt;htop&lt;/code&gt; &lt;code class="verbatim"&gt;(gnu packages admin)&lt;/code&gt; and the &lt;code class="verbatim"&gt;home-bash-service-type&lt;/code&gt; &lt;code class="verbatim"&gt;(gnu home services shells)&lt;/code&gt;. Read more about how to find out the modules in Installing Packages. &lt;code class="verbatim"&gt;Guix&lt;/code&gt; also has a utility that will search for package from a string only (not recommended but works). &lt;/p&gt;&#10;&lt;div class="src src-scheme"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scheme" data-lang="scheme"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;packages&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;map &lt;/span&gt;&lt;span class="nv"&gt;specification-&amp;gt;package&lt;/span&gt; &lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;btop&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;alacritty&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;gimp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Save the file and apply your home configuration:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;guix home reconfigure ~/.config/guix/home.scm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Applying the home configuration above will install &lt;code class="verbatim"&gt;htop&lt;/code&gt; to your home configuration (user level) and create modify the &lt;code class="verbatim"&gt;.bash-profile&lt;/code&gt; to define the environment variable &lt;code class="verbatim"&gt;HISTFILE&lt;/code&gt; to the path defined.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-16" class="outline-3"&gt;&#10;&lt;h3 id="headline-16"&gt;&#10;Useful Resources&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-16" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Home-Services.html"&gt;Home Services - Guix Manual&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Shells-Home-Services.html"&gt;Shells Home Services - Guix Manual&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://guix.gnu.org/manual/devel/en/html_node/Invoking-guix-home.html"&gt;Invoking Guix Home - Guix Manual&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-17" class="outline-2"&gt;&#10;&lt;h2 id="headline-17"&gt;&#10;Installing Packages&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-17" class="outline-text-2"&gt;&#10;&lt;p&gt;&#10;At this point, it should be clear that you can declare your packages either in &lt;code class="verbatim"&gt;system.scm&lt;/code&gt; to become system level packages that can be accessed by all users on the system, or in &lt;code class="verbatim"&gt;home.scm&lt;/code&gt; to become user level packages that can be only access by the user who applies the &lt;code class="verbatim"&gt;home.scm&lt;/code&gt; to their home. We also agreed that it&amp;#39;s recommended to install packages on user level if possible to avoid any version conflicts, give more flexibility to users regarding when to upgrade, and have a minimal system configuration that doesn&amp;#39;t require frequent updates as opposed to user configuration that might be updated very regularly.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-18" class="outline-3"&gt;&#10;&lt;h3 id="headline-18"&gt;&#10;Finding Packages&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-18" class="outline-text-3"&gt;&#10;&lt;p&gt;&#10;Similar to any other Linux distribution, &lt;code class="verbatim"&gt;Guix&lt;/code&gt; comes with its own utility to search and install packages. performing a simple &lt;code class="verbatim"&gt;Guix&lt;/code&gt; search &lt;code class="verbatim"&gt;[PACKAGE_NAME]&lt;/code&gt; will list available packages that contain the query in their package name or description. Below is an example to try to search for &lt;code class="verbatim"&gt;firefox&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;guix search firefox&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;output:&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;name: firefox&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;version: 128.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;outputs:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ out: everything&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systems: x86_64-linux&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dependencies: alsa-lib@1.2.4 autoconf@2.13 bzip2@1.0.8 cairo@1.18.0 clang@18.1.8 cups@2.4.2 dbus-glib@0.112 eudev@3.2.14 ffmpeg@6.1.1 freetype@2.13.0 gdk-pixbuf@2.42.10 glib@2.78.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ gtk+@2.24.33 gtk+@3.24.41 hunspell@1.7.0 icu4c@73.1 jemalloc@5.3.0 libcanberra@0.30 libevent@2.1.12 libffi@3.4.4 libgnome@2.32.1 libjpeg-turbo@2.1.4 libnotify@0.8.3 libva@2.19.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ libvpx@1.12.0 libxcomposite@0.4.5 libxft@2.3.4 libxinerama@1.1.4 libxscrnsaver@1.2.4 libxt@1.2.1 llvm@13.0.1 m4@1.4.19 mesa@24.0.4 mit-krb5@1.20 nasm@2.15.05 node@18.19.0 nspr@4.32&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ pango@1.50.14 perl@5.36.0 pipewire@1.0.3 pixman@0.42.2 pkg-config@0.29.2 pulseaudio@16.1 python@3.10.7 rust-cbindgen@0.26.0 rust@1.77.0 speech-dispatcher@0.11.5 sqlite@3.39.3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ startup-notification@0.12 unzip@6.0 wasm32-wasi-clang-toolchain@15.0.7 which@2.21 yasm@1.3.0 zip@3.0 zlib@1.2.13&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;location: nongnu/packages/mozilla.scm:544:2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;homepage: https://mozilla.org/firefox/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;license: MPL 2.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;synopsis: Trademarkless version of Firefox&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: Full-featured browser client built from Firefox &lt;span class="nb"&gt;source&lt;/span&gt; tree, without the official icon and the name &lt;span class="s2"&gt;&amp;#34;firefox&amp;#34;&lt;/span&gt;.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;relevance: &lt;span class="m"&gt;37&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;name: icecat&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;version: 115.13.0-guix1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;outputs:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ out: everything&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systems: x86_64-linux&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dependencies: alsa-lib@1.2.4 bzip2@1.0.8 cairo@1.18.0 clang@15.0.7 cups@2.4.2 dbus-glib@0.112 eudev@3.2.14 ffmpeg@5.1.4 font-dejavu@2.37 freetype@2.13.0 gdk-pixbuf@2.42.10 glib@2.78.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ gtk+@3.24.41 hunspell@1.7.0 icu4c@73.1 libcanberra@0.30 libevent@2.1.12 libffi@3.4.4 libgnome@2.32.1 libjpeg-turbo@2.1.4 libnotify@0.8.3 libpng-apng@1.6.39 libvpx@1.12.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ libxcomposite@0.4.5 libxft@2.3.4 libxinerama@1.1.4 libxscrnsaver@1.2.4 libxt@1.2.1 llvm@15.0.7 m4@1.4.19 mesa@24.0.4 mit-krb5@1.20 nasm@2.15.05 node@18.19.0 nspr@4.35 pango@1.50.14&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ pciutils@3.8.0 perl@5.36.0 pixman@0.42.2 pkg-config@0.29.2 pulseaudio@16.1 python-wrapper@3.10.7 rust-cbindgen@0.26.0 rust@1.75.0 shared-mime-info@2.3 sqlite@3.39.3 unzip@6.0 which@2.21&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ yasm@1.3.0 zip@3.0 zlib@1.2.13&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;location: gnu/packages/gnuzilla.scm:2001:4&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;homepage: https://www.gnu.org/software/gnuzilla/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;license: MPL 2.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;synopsis: Entirely free browser derived from Mozilla Firefox&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: IceCat is the GNU version of the Firefox browser. It is entirely free software, which does not recommend non-free plugins and addons. It also features built-in&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ privacy-protecting features. This package also includes the &lt;span class="sb"&gt;`&lt;/span&gt;geckodriver&lt;span class="err"&gt;&amp;#39;&lt;/span&gt; command, which can be useful &lt;span class="k"&gt;for&lt;/span&gt; automated web testing.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;relevance: &lt;span class="m"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Let&amp;#39;s try to analyze the output, you will most likely see so many packages. The exciting part here is that if you don&amp;#39;t configure the &lt;code class="verbatim"&gt;Nonguix&lt;/code&gt; channel, you will not see &lt;code class="verbatim"&gt;firefox&lt;/code&gt; listed as it has some trademark on its arts. However, we will see &lt;code class="verbatim"&gt;ictcat&lt;/code&gt; which is described as the GNU version of &lt;code class="verbatim"&gt;firefox&lt;/code&gt;. We can also see the &lt;code class="verbatim"&gt;location&lt;/code&gt; of the package which we can use to import the package module into our configuration.&lt;/p&gt;&#10;&lt;p&gt;&#10;We can also minimize the output to get only the information we are interested in&#10;Note: there is an easier way to perform this task using &lt;code class="verbatim"&gt;recsel&lt;/code&gt; but it&amp;#39;s not installed by default.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;guix search firefox &lt;span class="p"&gt;|&lt;/span&gt; grep -E &lt;span class="s2"&gt;&amp;#34;^(name|version|location)&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sed &lt;span class="s1"&gt;&amp;#39;/location:/a \\n&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;output:&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;name: firefox&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;version: 128.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;location: nongnu/packages/mozilla.scm:544:2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;name: icecat&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;version: 115.13.0-guix1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;location: gnu/packages/gnuzilla.scm:2001:4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Now we can quickly identify the name of the package, available version, and the location of the package definition and even the line in which it&amp;#39;s defined in the module.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-19" class="outline-3"&gt;&#10;&lt;h3 id="headline-19"&gt;&#10;Installing a package&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-19" class="outline-text-3"&gt;&#10;&lt;p&gt;&#10;To install &lt;code class="verbatim"&gt;firefox&lt;/code&gt;, we will declare it in our home configuration since a browser is typically a user level program (doesn&amp;#39;t have to be available to all users, they can install it if they desire).&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Identify your target package name and location&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;In our case, target is &lt;code class="verbatim"&gt;firefox&lt;/code&gt;, location is &lt;code class="verbatim"&gt;nongnu/packages/mozilla.scm&lt;/code&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Declare the module in your &lt;code class="verbatim"&gt;home&lt;/code&gt; configuration (&lt;code class="verbatim"&gt;system&lt;/code&gt; configuration if you want system level) by adding a new import to &lt;code class="verbatim"&gt;use-modules&lt;/code&gt;. This import should match the location with slashes replaced by spaces and without the extension &lt;code class="verbatim"&gt;.scm&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;nongnu/packages/mozilla.scm&lt;/code&gt; &lt;code class="verbatim"&gt;&amp;gt; =nongnu packages mozilla&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-scheme"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scheme" data-lang="scheme"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;use-modules&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;gnu&lt;/span&gt; &lt;span class="nv"&gt;home&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;gnu&lt;/span&gt; &lt;span class="nv"&gt;home&lt;/span&gt; &lt;span class="nv"&gt;services&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;gnu&lt;/span&gt; &lt;span class="nv"&gt;home&lt;/span&gt; &lt;span class="nv"&gt;services&lt;/span&gt; &lt;span class="nv"&gt;shells&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;gnu&lt;/span&gt; &lt;span class="nv"&gt;services&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;gnu&lt;/span&gt; &lt;span class="nv"&gt;packages&lt;/span&gt; &lt;span class="nv"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&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 class="nf"&gt;guix&lt;/span&gt; &lt;span class="nv"&gt;gexp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&#9; &lt;span class="c1"&gt;;; ensure that the paranthesis are closed and your definition is inside&lt;/span&gt;&#10;&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 class="nf"&gt;nongnu&lt;/span&gt; &lt;span class="nv"&gt;packages&lt;/span&gt; &lt;span class="nv"&gt;mozilla&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Add the package name to the list of packages&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="src src-scheme"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scheme" data-lang="scheme"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;packages&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list &lt;/span&gt;&lt;span class="nv"&gt;htop&lt;/span&gt; &lt;span class="nv"&gt;firefox&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Save the file and apply your home configuration:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;guix home reconfigure ~/.config/guix/home.scm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Note: Bare in mind that installing packages from the &lt;code class="verbatim"&gt;Guix&lt;/code&gt; utility is as simple as &lt;code class="verbatim"&gt;guix install htop&lt;/code&gt;, but this is not very declarative, and even though there are ways to extract installed packages, in my opinion, it&amp;#39;s best to declare them in your configuration and then apply them. However, one might want to try packages first with &lt;code class="verbatim"&gt;guix install [PACKAGE_NAME]&lt;/code&gt; and then see if they would like to keep it. Without this package name specified in your system or home configuration file, next system or home &lt;code class="verbatim"&gt;reconfigure&lt;/code&gt; will uninstall these packages.&lt;/p&gt;&#10;&lt;p&gt;&#10;Note: sometimes you will need to logout from your account/shell and login again for environment variables to be updated, before you assume that the package wasn&amp;#39;t installed, try to reboot or logout.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-20" class="outline-3"&gt;&#10;&lt;h3 id="headline-20"&gt;&#10;Useful Resources&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-20" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://packages.guix.gnu.org/"&gt;Packages - Guix Website&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://guix.gnu.org/manual/en/html_node/Package-Management.html"&gt;Package Management - Guix Manual&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;</description></item></channel></rss>