<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hilary</title>
    <description>The latest articles on DEV Community by Hilary (@kxhxn).</description>
    <link>https://dev.to/kxhxn</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4004654%2F645e1fc0-8eff-4f5b-b333-47093702c62b.png</url>
      <title>DEV Community: Hilary</title>
      <link>https://dev.to/kxhxn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kxhxn"/>
    <language>en</language>
    <item>
      <title>Installing Idris on Guix System</title>
      <dc:creator>Hilary</dc:creator>
      <pubDate>Fri, 03 Jul 2026 15:00:00 +0000</pubDate>
      <link>https://dev.to/kxhxn/installing-idris-on-guix-system-2hb4</link>
      <guid>https://dev.to/kxhxn/installing-idris-on-guix-system-2hb4</guid>
      <description>&lt;p&gt;This is an account of how I installed Idris on Guix System and a note to my future self should I ever forget the process. I was worried it would not gel well with the Guix philosophy&lt;sup&gt;TM&lt;/sup&gt; but it worked out well enough without me having to create package definitions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Idris is a purely functional programming language with first class types[&lt;a href="https://github.com/idris-lang/Idris2" rel="noopener noreferrer"&gt;1&lt;/a&gt;] (&lt;a href="https://github.com/idris-lang/Idris2" rel="noopener noreferrer"&gt;Github&lt;/a&gt;, &lt;a href="https://idris-lang.org/" rel="noopener noreferrer"&gt;Website&lt;/a&gt;). Idris as used here refers to Idris2.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pack is a package manager for Idris that comes with an installation of Idris (&lt;a href="https://github.com/stefan-hoeck/idris2-pack" rel="noopener noreferrer"&gt;Github&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Guix is a functional package manager[&lt;a href="https://guix.gnu.org/manual/devel/en/html_node/" rel="noopener noreferrer"&gt;2&lt;/a&gt;] (&lt;a href="https://guix.gnu.org/" rel="noopener noreferrer"&gt;Website&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Guix System Distribution is a distribution of the GNU system which incorporates the Guix package manager and where the system configuration is declarative[&lt;a href="https://guix.gnu.org/manual/devel/en/html_node/GNU-Distribution.html" rel="noopener noreferrer"&gt;3&lt;/a&gt;] (&lt;a href="https://guix.gnu.org/" rel="noopener noreferrer"&gt;Website&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Process
&lt;/h2&gt;

&lt;p&gt;The high-level view of the installation process was to include &lt;code&gt;$HOME/.local/bin&lt;/code&gt; in my system &lt;code&gt;$PATH&lt;/code&gt;, open a guix shell with a manifest file containing all the build and runtime dependencies, run the installation command for Idris, and then include Chez Scheme in my guix config file since it is the default runtime dependency. Now the individual steps.&lt;/p&gt;

&lt;p&gt;The first thing is to ensure that &lt;code&gt;$HOME/.local/bin&lt;/code&gt; is in the system &lt;code&gt;$PATH&lt;/code&gt;. I did this by modifying my guix home configuration file. Below is what my guix home configuration looked like afterwards(specifically under &lt;code&gt;environment-variables&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scheme"&gt;&lt;code&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;
             &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="p"&gt;)&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;services&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&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;
             &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;


&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;home-environment&lt;/span&gt;
 &lt;span class="c1"&gt;;; Below is the list of packages that will show up in your&lt;/span&gt;
 &lt;span class="c1"&gt;;; Home profile, under ~/.guix-home/profile.&lt;/span&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="nf"&gt;specifications-&amp;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="p"&gt;)))&lt;/span&gt;

 &lt;span class="c1"&gt;;; Below is the list of Home services.  To search for available&lt;/span&gt;
 &lt;span class="c1"&gt;;; services, run 'guix home search KEYWORD' in a terminal.&lt;/span&gt;
 &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;services&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;append&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;service&lt;/span&gt; &lt;span class="nv"&gt;home-bash-service-type&lt;/span&gt;
                         &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;home-bash-configuration&lt;/span&gt;
                          &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;aliases&lt;/span&gt; &lt;span class="o"&gt;'&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s"&gt;"em"&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;"emacs -nw"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                     &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ls"&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;"ls --color=auto"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
              &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;environment-variables&lt;/span&gt;
               &lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s"&gt;"XDG_DATA_DIRS"&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;"$XDG_DATA_DIRS:/var/lib/flatpak/exports/share:$HOME/.local/share/flatpak/exports/share"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                 &lt;span class="c1"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;/span&gt;
                 &lt;span class="c1"&gt;;; THIS IS WHAT YOU NEED TO ADD ;;&lt;/span&gt;
                 &lt;span class="c1"&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;/span&gt;
                 &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"PATH"&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;"$PATH:$HOME/.local/bin"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
              &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;bashrc&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;local-file&lt;/span&gt;
                     &lt;span class="s"&gt;"$HOME/src/guix-config/.bashrc"&lt;/span&gt;
                     &lt;span class="s"&gt;"bashrc"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&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;local-file&lt;/span&gt;
                           &lt;span class="s"&gt;"$HOME/src/guix-config/.bash_profile"&lt;/span&gt;
                           &lt;span class="s"&gt;"bash_profile"&lt;/span&gt;&lt;span class="p"&gt;))))))&lt;/span&gt;
      &lt;span class="nv"&gt;%base-home-services&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this, run &lt;code&gt;guix home reconfigure path/to/config/file&lt;/code&gt; to effect the changes made. Confirm that this has worked by reopening your terminal and looking for &lt;code&gt;/$HOME/local/bin&lt;/code&gt; in the output of &lt;code&gt;echo $PATH&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The next thing you'll need is a manifest file containing all that is required to build Idris. The following is a manifest file containing the build and runtime requirements:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scheme"&gt;&lt;code&gt;&lt;span class="c1"&gt;;; idris2-manifest.scm&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;specifications-&amp;gt;manifest&lt;/span&gt;
 &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;
  &lt;span class="c1"&gt;;; pack requirements&lt;/span&gt;
  &lt;span class="s"&gt;"git"&lt;/span&gt;
  &lt;span class="s"&gt;"chez-scheme"&lt;/span&gt;
  &lt;span class="s"&gt;"bash"&lt;/span&gt;
  &lt;span class="s"&gt;"make"&lt;/span&gt;
  &lt;span class="s"&gt;"gcc-toolchain"&lt;/span&gt;
  &lt;span class="s"&gt;"coreutils"&lt;/span&gt;
  &lt;span class="s"&gt;"gmp"&lt;/span&gt;
  &lt;span class="s"&gt;"curl"&lt;/span&gt;
  &lt;span class="s"&gt;"nss-certs"&lt;/span&gt;
  &lt;span class="s"&gt;"sed"&lt;/span&gt;
  &lt;span class="s"&gt;"findutils"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On to creating a guix shell, where you'll run the build commands. Create a guix shell using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"gcc"&lt;/span&gt; guix shell &lt;span class="nt"&gt;--check&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; idris2-manifest.scm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point, all requirements have been met and you can follow the installation guide here(&lt;a href="https://github.com/stefan-hoeck/idris2-pack/blob/main/INSTALL.md" rel="noopener noreferrer"&gt;https://github.com/stefan-hoeck/idris2-pack/blob/main/INSTALL.md&lt;/a&gt;). &lt;br&gt;
The current install command is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/stefan-hoeck/idris2-pack/main/install.bash&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the installation is complete, exit the shell by typing &lt;code&gt;exit&lt;/code&gt; or &lt;code&gt;Ctrl+D&lt;/code&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Eventually it would be nice to have a package definition that you can just &lt;code&gt;guix install&lt;/code&gt; but for now, that's it! Idris is now installed and you can confirm it by running &lt;code&gt;pack repl&lt;/code&gt; or &lt;code&gt;idris2&lt;/code&gt; in the terminal; any of these should drop you into an Idris repl.&lt;/p&gt;

&lt;p&gt;1: &lt;a href="https://github.com/idris-lang/Idris2" rel="noopener noreferrer"&gt;https://github.com/idris-lang/Idris2&lt;/a&gt;&lt;br&gt;
2: &lt;a href="https://guix.gnu.org/manual/devel/en/html_node/" rel="noopener noreferrer"&gt;https://guix.gnu.org/manual/devel/en/html_node/&lt;/a&gt;&lt;br&gt;
3: &lt;a href="https://guix.gnu.org/manual/devel/en/html_node/GNU-Distribution.html" rel="noopener noreferrer"&gt;https://guix.gnu.org/manual/devel/en/html_node/GNU-Distribution.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>programming</category>
      <category>tooling</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
