mirror of
https://github.com/SqrtMinusOne/sqrtminusone.github.io.git
synced 2025-12-10 15:53:03 +03:00
895 lines
103 KiB
HTML
895 lines
103 KiB
HTML
<!DOCTYPE html>
|
|
<html lang=""><head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
|
|
<title>Guix</title>
|
|
<meta name="description" content="Freedom is a state of mind">
|
|
<meta name="author" content='SqrtMinusOne'>
|
|
|
|
<link href="https://fonts.googleapis.com/css2?family=Inconsolata:wght@400;700&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w==" crossorigin="anonymous">
|
|
|
|
|
|
<link rel="stylesheet" href="/sass/researcher.min.css">
|
|
|
|
|
|
<link rel="icon" type="image/ico" href="https://sqrtminusone.xyz/favicon.ico">
|
|
|
|
|
|
<script defer data-domain="sqrtminusone.xyz" src="https://plausible.sqrtminusone.xyz/js/plausible.js"></script>
|
|
|
|
</head>
|
|
|
|
<body><div class="container mt-5">
|
|
<nav class="navbar navbar-expand-sm flex-column flex-sm-row text-nowrap p-0">
|
|
<a class="navbar-brand mx-0 mr-sm-auto" href="https://sqrtminusone.xyz/" title="SqrtMinusOne">
|
|
|
|
SqrtMinusOne
|
|
</a>
|
|
<div class="navbar-nav flex-row flex-wrap justify-content-center">
|
|
|
|
|
|
|
|
<a class="nav-item nav-link" href="/" title="Index">
|
|
Index
|
|
</a>
|
|
|
|
<span class="nav-item navbar-text mx-1">/</span>
|
|
|
|
|
|
<a class="nav-item nav-link" href="/posts/" title="Posts">
|
|
Posts
|
|
</a>
|
|
|
|
<span class="nav-item navbar-text mx-1">/</span>
|
|
|
|
|
|
<a class="nav-item nav-link" href="/configs/readme" title="Configs">
|
|
Configs
|
|
</a>
|
|
|
|
<span class="nav-item navbar-text mx-1">/</span>
|
|
|
|
|
|
<a class="nav-item nav-link" href="/emacs-packages/" title="Emacs packages">
|
|
Emacs packages
|
|
</a>
|
|
|
|
|
|
|
|
</div>
|
|
</nav>
|
|
</div>
|
|
<hr>
|
|
<div id="content">
|
|
<script defer language="javascript" type="text/javascript" src="/js/dynamic-toc.js"></script>
|
|
<div class="root">
|
|
<h1 id="title-small-screen">
|
|
Guix
|
|
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=dotfiles&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
|
</h1>
|
|
<div class="container" id="actual-content">
|
|
<h1 id="title-large-screen" class="dotfiles-title">
|
|
Guix
|
|
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=dotfiles&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
|
</h1>
|
|
<p><a href="https://guix.gnu.org/">GNU Guix</a> is (1) a transactional package manager and (2) a GNU/Linux distribution.</p>
|
|
<p>My personal selling points are declarative package configuration and transactional upgrades.</p>
|
|
<p>References:</p>
|
|
<ul>
|
|
<li><a href="https://guix.gnu.org/en/help/">Official help</a></li>
|
|
<li><a href="https://wiki.systemcrafters.cc/guix">System Crafters wiki</a></li>
|
|
<li><a href="https://gitlab.com/pjotrp/guix-notes">Pjotr Prins’ Guix notes</a></li>
|
|
<li><a href="https://www.youtube.com/watch?v=iBaqOK75cho&list=PLEoMzSkcN8oNxnj7jm5V2ZcGc52002pQU">Davil Wilson’s YouTube series</a></li>
|
|
</ul>
|
|
<h2 id="profiles">Profiles</h2>
|
|
<p>A profile is a way to group Guix packages. Amongst its advantages, profiles can be defined by manifests, which in turn can be stored in VCS.</p>
|
|
<p>References:</p>
|
|
<ul>
|
|
<li><a href="https://guix.gnu.org/en/cookbook/en/html_node/Guix-Profiles-in-Practice.html">Guix Profiles in Practice</a></li>
|
|
</ul>
|
|
<h3 id="activate-profiles">Activate profiles</h3>
|
|
<p>A script to activate guix profiles. Usage:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>activate-profiles [profile1] [profile2] ...
|
|
</span></span></code></pre></div><p>Source: <a href="https://github.com/daviwil/dotfiles/blob/master/Systems.org#activating-profiles">David Wilson’s config</a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">GREEN</span><span style="color:#666">=</span><span style="color:#ba2121">'\033[1;32m'</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">RED</span><span style="color:#666">=</span><span style="color:#ba2121">'\033[1;30m'</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">NC</span><span style="color:#666">=</span><span style="color:#ba2121">'\033[0m'</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">GUIX_EXTRA_PROFILES</span><span style="color:#666">=</span><span style="color:#19177c">$HOME</span>/.guix-extra-profiles
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">profiles</span><span style="color:#666">=</span><span style="color:#19177c">$*</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> <span style="color:#19177c">$#</span> -eq <span style="color:#666">0</span> <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">profiles</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$HOME</span><span style="color:#ba2121">/.config/guix/manifests/*.scm"</span>;
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> profile in <span style="color:#19177c">$profiles</span>; <span style="color:#008000;font-weight:bold">do</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># Remove the path and file extension, if any</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">profileName</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>basename <span style="color:#19177c">$profile</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">profileName</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">profileName</span>%.*<span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">profilePath</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$GUIX_EXTRA_PROFILES</span><span style="color:#ba2121">/</span><span style="color:#19177c">$profileName</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">manifestPath</span><span style="color:#666">=</span><span style="color:#19177c">$HOME</span>/.config/guix/manifests/<span style="color:#19177c">$profileName</span>.scm
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -f <span style="color:#19177c">$manifestPath</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> -e <span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">GREEN</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">Activating profile:"</span> <span style="color:#19177c">$manifestPath</span> <span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">NC</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> mkdir -p <span style="color:#19177c">$profilePath</span>
|
|
</span></span><span style="display:flex;"><span> guix package --manifest<span style="color:#666">=</span><span style="color:#19177c">$manifestPath</span> --profile<span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$profilePath</span><span style="color:#ba2121">/</span><span style="color:#19177c">$profileName</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># Source the new profile</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">GUIX_PROFILE</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$profilePath</span><span style="color:#ba2121">/</span><span style="color:#19177c">$profileName</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -f <span style="color:#19177c">$GUIX_PROFILE</span>/etc/profile <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> . <span style="color:#ba2121">"</span><span style="color:#19177c">$GUIX_PROFILE</span><span style="color:#ba2121">"</span>/etc/profile
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> -e <span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">RED</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">Couldn't find profile:"</span> <span style="color:#19177c">$GUIX_PROFILE</span>/etc/profile <span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">NC</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"No profile found at path"</span> <span style="color:#19177c">$profilePath</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">done</span>
|
|
</span></span></code></pre></div><h3 id="update-profiles">Update profiles</h3>
|
|
<p>A script to update Guix profiles. Usage:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>update-profiles [profile1] [profile2] ...
|
|
</span></span></code></pre></div><p>Source: once again, <a href="https://github.com/daviwil/dotfiles/blob/master/Systems.org#updating-profiles">David Wilson’s config</a>.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">GREEN</span><span style="color:#666">=</span><span style="color:#ba2121">'\033[1;32m'</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">NC</span><span style="color:#666">=</span><span style="color:#ba2121">'\033[0m'</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">GUIX_EXTRA_PROFILES</span><span style="color:#666">=</span><span style="color:#19177c">$HOME</span>/.guix-extra-profiles
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">profiles</span><span style="color:#666">=</span><span style="color:#19177c">$*</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> <span style="color:#19177c">$#</span> -eq <span style="color:#666">0</span> <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">profiles</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$GUIX_EXTRA_PROFILES</span><span style="color:#ba2121">/*"</span>;
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> profile in <span style="color:#19177c">$profiles</span>; <span style="color:#008000;font-weight:bold">do</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">profileName</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>basename <span style="color:#19177c">$profile</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">profilePath</span><span style="color:#666">=</span><span style="color:#19177c">$GUIX_EXTRA_PROFILES</span>/<span style="color:#19177c">$profileName</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> -e <span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">GREEN</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">Updating profile:"</span> <span style="color:#19177c">$profilePath</span> <span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">NC</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> guix package --profile<span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$profilePath</span><span style="color:#ba2121">/</span><span style="color:#19177c">$profileName</span><span style="color:#ba2121">"</span> --manifest<span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$HOME</span><span style="color:#ba2121">/.config/guix/manifests/</span><span style="color:#19177c">$profileName</span><span style="color:#ba2121">.scm"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">done</span>
|
|
</span></span></code></pre></div><h3 id="run-guix-package-in-profile">Run <code>guix package</code> in profile</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">GUIX_EXTRA_PROFILES</span><span style="color:#666">=</span><span style="color:#19177c">$HOME</span>/.guix-extra-profiles
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">profileName</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>basename <span style="color:#19177c">$1</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">profileName</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">profileName</span>%.*<span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">profilePath</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$GUIX_EXTRA_PROFILES</span><span style="color:#ba2121">/</span><span style="color:#19177c">$profileName</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -d <span style="color:#19177c">$profilePath</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> guix package --profile<span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$profilePath</span><span style="color:#ba2121">/</span><span style="color:#19177c">$profileName</span><span style="color:#ba2121">"</span> <span style="color:#b68;font-weight:bold">${</span>@:<span style="color:#19177c">2</span><span style="color:#b68;font-weight:bold">}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> -e <span style="color:#ba2121">"No profile found at path: "</span> <span style="color:#19177c">$profilePath</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span></code></pre></div><h3 id="turn-off-guix-profiles">Turn off Guix profiles</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000">export</span> <span style="color:#19177c">PATH</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span><span style="color:#008000">echo</span> <span style="color:#19177c">$PATH</span> | tr <span style="color:#ba2121">":"</span> <span style="color:#ba2121">"\n"</span> | grep -vE <span style="color:#ba2121">"guix|nix|gnu"</span> | tr <span style="color:#ba2121">"\n"</span> <span style="color:#ba2121">":"</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span></code></pre></div><h2 id="channels">Channels</h2>
|
|
<p>Specifying additional channels.</p>
|
|
<p><a href="https://github.com/SqrtMinusOne/channel-q">channel-q</a> is my Guix channel. Don’t use it at home.</p>
|
|
<p>References:</p>
|
|
<ul>
|
|
<li><a href="https://gitlab.com/nonguix/nonguix">nonguix channel repo</a></li>
|
|
<li><a href="https://guix.gnu.org/manual/en/html_node/Channels.html">Guix channels reference</a></li>
|
|
</ul>
|
|
<!--listend-->
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">cons*</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">channel</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">name</span> <span style="color:#19177c">'channel-q</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">url</span> <span style="color:#ba2121">"file:///home/pavel/_channel-q"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">channel</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">name</span> <span style="color:#19177c">'flat</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">url</span> <span style="color:#ba2121">"https://github.com/flatwhatson/guix-channel.git"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">introduction</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make-channel-introduction</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"33f86a4b48205c0dc19d7c036c85393f0766f806"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">openpgp-fingerprint</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"736A C00E 1254 378B A982 7AF6 9DBE 8265 81B6 4490"</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">channel</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">name</span> <span style="color:#19177c">'nonguix</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">url</span> <span style="color:#ba2121">"https://gitlab.com/nonguix/nonguix"</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; (commit "d54973e47b89fe5772a5b6e2d0c0b86acb089e27")</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">introduction</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make-channel-introduction</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"897c1a470da759236cc11798f4e0a5f7d4d59fbc"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">openpgp-fingerprint</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5"</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">channel</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; What can possibly go wrong, huh</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">name</span> <span style="color:#19177c">'guix-gaming-games</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">url</span> <span style="color:#ba2121">"https://gitlab.com/guix-gaming-channels/games.git"</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Enable signature verification:</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">introduction</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make-channel-introduction</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"c23d64f1b8cc086659f8781b27ab6c7314c5cca5"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">openpgp-fingerprint</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"50F3 3E2E 5B0C 3D90 0424 ABE8 9BDC F497 A4BB CC7F"</span>))))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">%default-channels</span>)
|
|
</span></span></code></pre></div><h2 id="systems">Systems</h2>
|
|
<p>Configuring systems with Guix.</p>
|
|
<p>Yes, all my machines are named after colors I like.</p>
|
|
<h3 id="base-configuration">Base configuration</h3>
|
|
<p>The base configuration is shared between all the machines.</p>
|
|
<p>While it’s possible to make a single <code>.scm</code> file with base configuration and load it, I noticed that it produces more cryptic error messages whenever there is an error in the base file, so I opt-in for noweb.</p>
|
|
<p><code>guix system</code> invocation is as follows:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>sudo -E guix system reconfigure ~/.config/guix/systems/[system].scm
|
|
</span></span></code></pre></div><p>Common modules:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">gnu</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">gnu</span> <span style="color:#19177c">system</span> <span style="color:#19177c">nss</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">gnu</span> <span style="color:#19177c">packages</span> <span style="color:#19177c">bash</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> ((<span style="color:#00f">gnu</span> <span style="color:#19177c">packages</span> <span style="color:#19177c">base</span>) <span style="color:#666">#</span><span style="color:#19177c">:select</span> (<span style="color:#00f">coreutils</span> <span style="color:#19177c">glibc</span>)))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">gnu</span> <span style="color:#19177c">packages</span> <span style="color:#19177c">certs</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">gnu</span> <span style="color:#19177c">packages</span> <span style="color:#19177c">version-control</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">gnu</span> <span style="color:#19177c">packages</span> <span style="color:#19177c">vim</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">gnu</span> <span style="color:#19177c">packages</span> <span style="color:#19177c">gnome</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">gnu</span> <span style="color:#19177c">packages</span> <span style="color:#19177c">xorg</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">gnu</span> <span style="color:#19177c">packages</span> <span style="color:#19177c">wm</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">gnu</span> <span style="color:#19177c">packages</span> <span style="color:#19177c">openbox</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">gnu</span> <span style="color:#19177c">services</span> <span style="color:#19177c">docker</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">gnu</span> <span style="color:#19177c">services</span> <span style="color:#19177c">cups</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">gnu</span> <span style="color:#19177c">services</span> <span style="color:#19177c">virtualization</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">srfi</span> <span style="color:#19177c">srfi-1</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">guix</span> <span style="color:#19177c">channels</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">guix</span> <span style="color:#19177c">inferior</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">nongnu</span> <span style="color:#19177c">packages</span> <span style="color:#19177c">linux</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-modules</span> (<span style="color:#00f">nongnu</span> <span style="color:#19177c">system</span> <span style="color:#19177c">linux-initrd</span>))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-service-modules</span> <span style="color:#19177c">desktop</span> <span style="color:#19177c">networking</span> <span style="color:#19177c">ssh</span> <span style="color:#19177c">xorg</span> <span style="color:#19177c">nix</span>)
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">use-package-modules</span> <span style="color:#19177c">ssh</span>)
|
|
</span></span></code></pre></div><p>In principle, we could define a variable called <code>base-operating-system</code> and extend it in ancestors. However, then we would have to define mandatory fields like <code>host-name</code>, <code>bootloader</code> with dummy values. Since I’m already using noweb, there is little point.</p>
|
|
<p>The following code will be inserted at the top of the <code>operating-system</code> definition.</p>
|
|
<p>Use the full Linux kernel. I hope I’ll be able to use Libre kernel somewhere later.</p>
|
|
<p>Inferior in the kernel is used to avoid recompilation. It looks like I can pin these to different commits than in my <code>channels.scm</code></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">kernel</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">let*</span>
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">channels</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">list </span>(<span style="color:#00f">channel</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">name</span> <span style="color:#19177c">'nonguix</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">url</span> <span style="color:#ba2121">"https://gitlab.com/nonguix/nonguix"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">commit</span> <span style="color:#ba2121">"213be7ee6676fc4a3db0e3ac9ce5cd79e2ed209e"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">channel</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">name</span> <span style="color:#19177c">'guix</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">url</span> <span style="color:#ba2121">"https://git.savannah.gnu.org/git/guix.git"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">commit</span> <span style="color:#ba2121">"6311493d7a6271bfbc51f4693857f9a12fe9965d"</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">inferior</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">inferior-for-channels</span> <span style="color:#19177c">channels</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">first</span> (<span style="color:#00f">lookup-inferior-packages</span> <span style="color:#19177c">inferior</span> <span style="color:#ba2121">"linux"</span> <span style="color:#ba2121">"6.2.9"</span>))))
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">;; (kernel linux)</span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">initrd</span> <span style="color:#19177c">microcode-initrd</span>)
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">firmware</span> (<span style="color:#008000">list </span><span style="color:#19177c">linux-firmware</span>))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">locale</span> <span style="color:#ba2121">"en_US.utf8"</span>)
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">timezone</span> <span style="color:#ba2121">"Europe/Moscow"</span>)
|
|
</span></span></code></pre></div><p>US/RU keyboard layout, switch with Alt+Shift.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">keyboard-layout</span> (<span style="color:#00f">keyboard-layout</span> <span style="color:#ba2121">"us,ru"</span> <span style="color:#666">#</span><span style="color:#19177c">:options</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"grp:alt_shift_toggle"</span>)))
|
|
</span></span></code></pre></div><p>User accounts.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">users</span> (<span style="color:#00f">cons*</span> (<span style="color:#00f">user-account</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">name</span> <span style="color:#ba2121">"pavel"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">comment</span> <span style="color:#ba2121">"Pavel"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">group</span> <span style="color:#ba2121">"users"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">home-directory</span> <span style="color:#ba2121">"/home/pavel"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">supplementary-groups</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(<span style="color:#ba2121">"wheel"</span> <span style="color:#408080;font-style:italic">;; sudo</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"netdev"</span> <span style="color:#408080;font-style:italic">;; network devices</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"audio"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"video"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"input"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"tty"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"docker"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"scanner"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"libvirt"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"lp"</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">%base-user-accounts</span>))
|
|
</span></span></code></pre></div><p>Base packages, necessary right after the installation.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">packages</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">append</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">list </span><span style="color:#19177c">nss-certs</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">git</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">i3-gaps</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">i3lock</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">openbox</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">xterm</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">vim</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">%base-packages</span>))
|
|
</span></span></code></pre></div><p>Default services for each machine:</p>
|
|
<ul>
|
|
<li>override the default <code>%desktop-services</code> to add OpenVPN support</li>
|
|
<li>add nix service</li>
|
|
<li>add docker service</li>
|
|
<li>add CUPS service</li>
|
|
<li>add libvirt service</li>
|
|
<li>add a symlink to ELF interpreter to where most Linux binaries expect it</li>
|
|
</ul>
|
|
<!--listend-->
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">%my-base-services</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">cons*</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">service</span> <span style="color:#19177c">openssh-service-type</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">screen-locker-service</span> <span style="color:#19177c">i3lock</span> <span style="color:#ba2121">"i3lock"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">extra-special-file</span> <span style="color:#ba2121">"/lib64/ld-linux-x86-64.so.2"</span> (<span style="color:#00f">file-append</span> <span style="color:#19177c">glibc</span> <span style="color:#ba2121">"/lib/ld-linux-x86-64.so.2"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">service</span> <span style="color:#19177c">nix-service-type</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">service</span> <span style="color:#19177c">cups-service-type</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">cups-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">web-interface?</span> <span style="color:#800">#t</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">service</span> <span style="color:#19177c">docker-service-type</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">service</span> <span style="color:#19177c">libvirt-service-type</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">libvirt-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">unix-sock-group</span> <span style="color:#ba2121">"libvirt"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">tls-port</span> <span style="color:#ba2121">"16555"</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">service</span> <span style="color:#19177c">virtlog-service-type</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">bluetooth-service</span> <span style="color:#666">#</span><span style="color:#19177c">:auto-enable?</span> <span style="color:#800">#f</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">modify-services</span> <span style="color:#19177c">%desktop-services</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">network-manager-service-type</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">config</span> <span style="color:#19177c">=></span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">network-manager-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">inherit</span> <span style="color:#19177c">config</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">vpn-plugins</span> (<span style="color:#008000">list </span><span style="color:#19177c">network-manager-openvpn</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">guix-service-type</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">config</span> <span style="color:#19177c">=></span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">guix-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">inherit</span> <span style="color:#19177c">config</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">substitute-urls</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">append </span>(<span style="color:#008000">list </span><span style="color:#ba2121">"https://substitutes.nonguix.org"</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">%default-substitute-urls</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">authorized-keys</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">append </span>(<span style="color:#008000">list </span>(<span style="color:#00f">local-file</span> <span style="color:#ba2121">"./signing-key.pub"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">%default-authorized-guix-keys</span>)))))))
|
|
</span></span></code></pre></div><h3 id="indigo">indigo</h3>
|
|
<p><code>indigo</code> is my desktop PC.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span><span style="color:#19177c"><<system-common>></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">operating-system</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<system-base>></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">host-name</span> <span style="color:#ba2121">"indigo"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">services</span> (<span style="color:#00f">cons*</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">set-xorg-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">xorg-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">keyboard-layout</span> <span style="color:#19177c">keyboard-layout</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">%my-base-services</span>))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">bootloader</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">bootloader-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">bootloader</span> <span style="color:#19177c">grub-efi-bootloader</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">target</span> <span style="color:#ba2121">"/boot/efi"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">keyboard-layout</span> <span style="color:#19177c">keyboard-layout</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">swap-devices</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">list </span>(<span style="color:#00f">uuid</span> <span style="color:#ba2121">"3a77c542-7d24-46ff-8123-f7398d1c2677"</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">file-systems</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">cons*</span> (<span style="color:#00f">file-system</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mount-point</span> <span style="color:#ba2121">"/"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">device</span> (<span style="color:#00f">file-system-label</span> <span style="color:#ba2121">"my-root"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">type</span> <span style="color:#ba2121">"ext4"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">file-system</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mount-point</span> <span style="color:#ba2121">"/boot/efi"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">device</span> <span style="color:#ba2121">"/dev/sda1"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">type</span> <span style="color:#ba2121">"vfat"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">%base-file-systems</span>)))
|
|
</span></span></code></pre></div><h3 id="eminence">eminence</h3>
|
|
<p><code>eminence</code> is a HP 15s laptop.</p>
|
|
<p><code>%backlight-udev-rule</code> should enable members of <code>video</code> group change the display backlight. See the relevant page at <a href="https://wiki.archlinux.org/title/Backlight">Arch Wiki</a>.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span><span style="color:#19177c"><<system-common>></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">%backlight-udev-rule</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">udev-rule</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"90-backlight.rules"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">string-append </span><span style="color:#ba2121">"ACTION==\"add\", SUBSYSTEM==\"backlight\", "</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"RUN+=\"/run/current-system/profile/bin/chgrp video /sys/class/backlight/%k/brightness\""</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"\n"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"ACTION==\"add\", SUBSYSTEM==\"backlight\", "</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"RUN+=\"/run/current-system/profile/bin/chmod g+w /sys/class/backlight/%k/brightness\""</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">operating-system</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<system-base>></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">host-name</span> <span style="color:#ba2121">"eminence"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">services</span> (<span style="color:#00f">cons*</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">set-xorg-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">xorg-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">keyboard-layout</span> <span style="color:#19177c">keyboard-layout</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">modify-services</span> <span style="color:#19177c">%my-base-services</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">elogind-service-type</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">config</span> <span style="color:#19177c">=></span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">elogind-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">inherit</span> <span style="color:#19177c">config</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">handle-lid-switch-external-power</span> <span style="color:#19177c">'suspend</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">udev-service-type</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">config</span> <span style="color:#19177c">=></span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">udev-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">inherit</span> <span style="color:#19177c">config</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">rules</span> (<span style="color:#008000">cons </span><span style="color:#19177c">%backlight-udev-rule</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">udev-configuration-rules</span> <span style="color:#19177c">config</span>))))))))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">bootloader</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">bootloader-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">bootloader</span> <span style="color:#19177c">grub-efi-bootloader</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">target</span> <span style="color:#ba2121">"/boot/efi"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">keyboard-layout</span> <span style="color:#19177c">keyboard-layout</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">swap-devices</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">list </span>(<span style="color:#00f">uuid</span> <span style="color:#ba2121">"f93cf3f6-7ee7-42ec-8ee2-f3d896fdf9b5"</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">file-systems</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">cons*</span> (<span style="color:#00f">file-system</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mount-point</span> <span style="color:#ba2121">"/"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">device</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">uuid</span> <span style="color:#ba2121">"1d937704-bbeb-43b5-bc63-453886c426af"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">'ext4</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">type</span> <span style="color:#ba2121">"ext4"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">file-system</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mount-point</span> <span style="color:#ba2121">"/boot/efi"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">device</span> (<span style="color:#00f">uuid</span> <span style="color:#ba2121">"0031-3784"</span> <span style="color:#19177c">'fat32</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">type</span> <span style="color:#ba2121">"vfat"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">%base-file-systems</span>)))
|
|
</span></span></code></pre></div><h3 id="azure">azure</h3>
|
|
<p><code>azure</code> is a Lenovo Ideapad 330 laptop.</p>
|
|
<p><code>%backlight-udev-rule</code> should enable members of <code>video</code> group change the display backlight. See the relevant page at <a href="https://wiki.archlinux.org/title/Backlight">Arch Wiki</a>.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span><span style="color:#19177c"><<system-common>></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">%backlight-udev-rule</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">udev-rule</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"90-backlight.rules"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">string-append </span><span style="color:#ba2121">"ACTION==\"add\", SUBSYSTEM==\"backlight\", "</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"RUN+=\"/run/current-system/profile/bin/chgrp video /sys/class/backlight/%k/brightness\""</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"\n"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"ACTION==\"add\", SUBSYSTEM==\"backlight\", "</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"RUN+=\"/run/current-system/profile/bin/chmod g+w /sys/class/backlight/%k/brightness\""</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">operating-system</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<system-base>></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">host-name</span> <span style="color:#ba2121">"azure"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">services</span> (<span style="color:#00f">cons*</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">set-xorg-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">xorg-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">keyboard-layout</span> <span style="color:#19177c">keyboard-layout</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">modify-services</span> <span style="color:#19177c">%my-base-services</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">elogind-service-type</span> <span style="color:#19177c">config</span> <span style="color:#19177c">=></span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">elogind-configuration</span> (<span style="color:#00f">inherit</span> <span style="color:#19177c">config</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">handle-lid-switch-external-power</span> <span style="color:#19177c">'suspend</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">udev-service-type</span> <span style="color:#19177c">config</span> <span style="color:#19177c">=></span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">udev-configuration</span> (<span style="color:#00f">inherit</span> <span style="color:#19177c">config</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">rules</span> (<span style="color:#008000">cons </span><span style="color:#19177c">%backlight-udev-rule</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">udev-configuration-rules</span> <span style="color:#19177c">config</span>))))))))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">bootloader</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">bootloader-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">bootloader</span> <span style="color:#19177c">grub-efi-bootloader</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">target</span> <span style="color:#ba2121">"/boot/efi"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">keyboard-layout</span> <span style="color:#19177c">keyboard-layout</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">swap-devices</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">list </span>(<span style="color:#00f">uuid</span> <span style="color:#ba2121">"4b2dedb3-b111-4e69-8c05-6daa2b072c76"</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">file-systems</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">cons*</span> (<span style="color:#00f">file-system</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mount-point</span> <span style="color:#ba2121">"/"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">device</span> (<span style="color:#00f">file-system-label</span> <span style="color:#ba2121">"my-root"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">type</span> <span style="color:#ba2121">"ext4"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">file-system</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mount-point</span> <span style="color:#ba2121">"/boot/efi"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">device</span> <span style="color:#ba2121">"/dev/sda1"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">type</span> <span style="color:#ba2121">"vfat"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">%base-file-systems</span>)))
|
|
</span></span></code></pre></div><h3 id="iris">iris</h3>
|
|
<p><code>iris</code> is my work machine.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span><span style="color:#19177c"><<system-common>></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#00f">operating-system</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<system-base>></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">host-name</span> <span style="color:#ba2121">"iris"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">services</span> (<span style="color:#00f">cons*</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">set-xorg-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">xorg-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">keyboard-layout</span> <span style="color:#19177c">keyboard-layout</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">%my-base-services</span>))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">bootloader</span> (<span style="color:#00f">bootloader-configuration</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">bootloader</span> <span style="color:#19177c">grub-bootloader</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">targets</span> (<span style="color:#008000">list </span><span style="color:#ba2121">"/dev/sdb"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">keyboard-layout</span> <span style="color:#19177c">keyboard-layout</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">swap-devices</span> (<span style="color:#008000">list </span>(<span style="color:#00f">swap-space</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">target</span> (<span style="color:#00f">uuid</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"bc284384-ff00-4fbc-abda-1c46f69c0505"</span>)))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mapped-devices</span> (<span style="color:#008000">list </span>(<span style="color:#00f">mapped-device</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">source</span> (<span style="color:#00f">uuid</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"21876acb-e05a-4731-8df0-ba5761910ca8"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">target</span> <span style="color:#ba2121">"cryptroot"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">type</span> <span style="color:#19177c">luks-device-mapping</span>))))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">file-systems</span> (<span style="color:#00f">cons*</span> (<span style="color:#00f">file-system</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mount-point</span> <span style="color:#ba2121">"/"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">device</span> <span style="color:#ba2121">"/dev/mapper/cryptroot"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">type</span> <span style="color:#ba2121">"ext4"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">dependencies</span> <span style="color:#19177c">mapped-devices</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">file-system</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mount-point</span> <span style="color:#ba2121">"/boot/efi"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">device</span> (<span style="color:#00f">uuid</span> <span style="color:#ba2121">"782E-F6D3"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">'fat32</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">type</span> <span style="color:#ba2121">"vfat"</span>)) <span style="color:#19177c">%base-file-systems</span>)))
|
|
</span></span></code></pre></div><h2 id="system-installation">System installation</h2>
|
|
<h3 id="preparation">Preparation</h3>
|
|
<p>In my case, the provided ISO doesn’t work because of the Libre kernel.</p>
|
|
<p>Fortunately, David Wilson has made <a href="https://github.com/SystemCrafters/guix-installer">a repository</a> with a toolchain to make an ISO with the full kernel. In case it won’t be an option, the <a href="https://gitlab.com/nonguix/nonguix">nonguix repo</a> also has instructions on how to do that.</p>
|
|
<p>When an ISO is there, we have to write it on a USB stick. Run <code>sudo fdisk -l</code> to get a list of disks.</p>
|
|
<p>The approach given in the official instruction is to create a bootable USB with <code>dd</code>:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>sudo dd of=/dev/sdxX if=<path-to-iso> status=progress && sync
|
|
</span></span></code></pre></div><p>However, I couldn’t make it work for some strange reason. Fortunately, <code>gnome-disk-utility</code> was able to produce a bootable USB.</p>
|
|
<h3 id="installation">Installation</h3>
|
|
<p>Going further, the official instructions for installation & SystemCrafters wiki entry are pretty good, so it’s not necessary to repeat them here.</p>
|
|
<h3 id="after-installation">After installation</h3>
|
|
<p>After the installation, the strategy is as follows.</p>
|
|
<p>Set a password for the main user (pavel). Login with openbox to get a tolerable interface because i3’s default config is horrible.</p>
|
|
<p><a href="https://guix.gnu.org/en/manual/en/html_node/Keyboard-Layout-and-Networking-and-Partitioning.html#Keyboard-Layout-and-Networking-and-Partitioning">Connect to the internet</a>.</p>
|
|
<p>Clone the dotfiles repo:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>mkdir Code
|
|
</span></span><span style="display:flex;"><span>cd Code
|
|
</span></span><span style="display:flex;"><span>git clone https://github.com/SqrtMinusOne/dotfiles.git
|
|
</span></span></code></pre></div><p>Copy the channels file and run guix pull:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>cp ~/Code/dotfiles/.config/guix/channels.scm ~/.config/guix
|
|
</span></span><span style="display:flex;"><span>guix pull
|
|
</span></span></code></pre></div><p>The first pull usually takes a while. After that install yadm and pull dotfiles:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>guix install yadm
|
|
</span></span><span style="display:flex;"><span>guix clone https://github.com/SqrtMinusOne/dotfiles.git
|
|
</span></span></code></pre></div><p>And activate the required profiles. Again, downloading & building Emacs, Starship and stuff will take a while.</p>
|
|
<p>Don’t forget to install <code>JetBrainsMono Nerd Font</code>.</p>
|
|
<h2 id="misc-software-and-notes">Misc software & notes</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>system</td>
|
|
<td>patchelf</td>
|
|
<td>A program to modify existsing ELF executables</td>
|
|
</tr>
|
|
<tr>
|
|
<td>system</td>
|
|
<td>glibc</td>
|
|
<td>A lot of stuff, including ELF interpeter and <code>ldd</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>system</td>
|
|
<td>tor-client</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>system</td>
|
|
<td>torsocks</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>system</td>
|
|
<td>vnstat</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>system</td>
|
|
<td>nss-certs</td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="openvpn">OpenVPN</h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>system</td>
|
|
<td>openvpn</td>
|
|
</tr>
|
|
<tr>
|
|
<td>system</td>
|
|
<td>openvpn-update-resolve-conf</td>
|
|
</tr>
|
|
<tr>
|
|
<td>system</td>
|
|
<td>openresolv</td>
|
|
</tr>
|
|
<tr>
|
|
<td>system</td>
|
|
<td>vpnc</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Update <span class="timestamp-wrapper"><span class="timestamp">[2023-06-29 Thu]</span></span>: My censors seem to be putting sticks in the wheels of OpenVPN… Switched to Wireguard for now. It can be configured with Network Manager.</p>
|
|
<p>I’m not sure how to properly spin up VPN on Guix, so here is what ended I’m doing after some trial and error.</p>
|
|
<p>I’m using Mullvad VPN. The <code>~/.vpn</code> folder stores its OpenVPN config (<code>openvpn.ovpn</code>), modified as follows:</p>
|
|
<ul>
|
|
<li>
|
|
<p>paths to <code>ca</code>, <code>cert</code> and <code>key</code> are made absolute</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>ca <span style="color:#b68">/home/</span>pavel<span style="color:#b68">/.vpn/</span>ca.crt
|
|
</span></span><span style="display:flex;"><span>cert <span style="color:#b68">/home/</span>pavel<span style="color:#b68">/.vpn/</span>client.crt
|
|
</span></span><span style="display:flex;"><span>key <span style="color:#b68">/home/</span>pavel<span style="color:#b68">/.vpn/</span>client.key
|
|
</span></span></code></pre></div></li>
|
|
<li>
|
|
<p>added <code>auth-user-pass</code> with a link to login info</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>auth-user-pass <span style="color:#b68">/home/</span>pavel<span style="color:#b68">/.vpn/</span>auth.conf
|
|
</span></span></code></pre></div><p><code>auth.conf</code> looks like this:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>login
|
|
</span></span><span style="display:flex;"><span>password
|
|
</span></span></code></pre></div></li>
|
|
<li>
|
|
<p>Run <a href="https://github.com/alfredopalhares/openvpn-update-resolv-conf">openvpn-update-resolv-conf</a> script to prevent DNS leaks. <code>openvpn-update-resolve-conf</code> originates in my <a href="https://github.com/SqrtMinusOne/channel-q">channel-q</a>.</p>
|
|
<p>Edit <span class="timestamp-wrapper"><span class="timestamp"><2022-04-07 Thu></span></span>: Looks like this doesn’t work on some connections. See the next option in that case</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>setenv PATH <span style="color:#b68">/home/</span>pavel<span style="color:#b68">/.guix-extra-profiles/</span>system<span style="color:#b68">/system/</span>bin:<span style="color:#b68">/home/</span>pavel<span style="color:#b68">/.guix-extra-profiles/</span>system<span style="color:#b68">/system/</span>sbin:<span style="color:#b68">/home/</span>pavel<span style="color:#b68">/.guix-extra-profiles/</span>console<span style="color:#b68">/console/</span>bin:<span style="color:#b68">/run/</span>current-system<span style="color:#b68">/profile/</span>bin:<span style="color:#b68">/run/</span>current-system<span style="color:#b68">/profile/</span>sbin
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>up <span style="color:#b68">/home/</span>pavel<span style="color:#b68">/.guix-extra-profiles/</span>system<span style="color:#b68">/system/</span>bin/update-resolv-conf.sh
|
|
</span></span><span style="display:flex;"><span>down <span style="color:#b68">/home/</span>pavel<span style="color:#b68">/.guix-extra-profiles/</span>system<span style="color:#b68">/system/</span>bin/update-resolv-conf.sh
|
|
</span></span></code></pre></div><p><code>setenv PATH</code> is necessary because both <code>resolvconf</code> (openresolve) and <code>update-resolv-conf.sh</code> are shell scripts which need GNU coreutils and stuff, and OpenVPN clears PATH by default.</p>
|
|
</li>
|
|
<li>
|
|
<p>Manually fix <code>etc/resolv.conf</code> to prevent DNS leaks</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>/home/pavel/.guix-extra-profiles/console/console/bin/cp /etc/resolv.conf /etc/resolv.conf-bak
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">echo</span> <span style="color:#ba2121">"nameserver 8.8.8.8"</span> > /etc/resolv.conf
|
|
</span></span></code></pre></div><p>Restore <code>resolv.conf</code></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>resolveconf -u
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>up <span style="color:#b68">/home/</span>pavel<span style="color:#b68">/bin/</span>scripts/fix-resolve-conf
|
|
</span></span><span style="display:flex;"><span>down <span style="color:#b68">/home/</span>pavel<span style="color:#b68">/bin/</span>scripts/restore-resolve-conf
|
|
</span></span></code></pre></div></li>
|
|
<li>
|
|
<p>run a script to fix Docker routes</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>route-up <span style="color:#b68">/home/</span>pavel<span style="color:#b68">/bin/</span>scripts/vpn-fix-routes
|
|
</span></span></code></pre></div><p>References:</p>
|
|
<ul>
|
|
<li><a href="https://github.com/moby/libnetwork/issues/779">Github issue</a></li>
|
|
</ul>
|
|
<p>The script itself:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#008000">echo</span> <span style="color:#ba2121">"Adding default route to </span><span style="color:#19177c">$route_vpn_gateway</span><span style="color:#ba2121"> with /0 mask..."</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -f <span style="color:#ba2121">"/run/current-system/profile/sbin/ip"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">IP</span><span style="color:#666">=</span>/run/current-system/profile/sbin/ip
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">IP</span><span style="color:#666">=</span>/usr/bin/ip
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">$IP</span> route add default via <span style="color:#19177c">$route_vpn_gateway</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">echo</span> <span style="color:#ba2121">"Removing /1 routes..."</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">$IP</span> route del 0.0.0.0/1 via <span style="color:#19177c">$route_vpn_gateway</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">$IP</span> route del 128.0.0.0/1 via <span style="color:#19177c">$route_vpn_gateway</span>
|
|
</span></span></code></pre></div></li>
|
|
</ul>
|
|
<h4 id="vpn-start">vpn-start</h4>
|
|
<p><del>As of now, CyberGhost doesn’t provide ipv6, so we have to disable it.</del></p>
|
|
<p>Mullvad seems to provide it, so the script just launches <code>openvpn</code> with <code>pkexec</code>.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000">export</span> <span style="color:#19177c">DISPLAY</span><span style="color:#666">=</span>:0
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">CONN</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>nmcli -f NAME con show --active | grep -Ev <span style="color:#ba2121">"(.*docker.*|NAME|br-.*|veth.*|tun.*|vnet.*|virbr.*)"</span> | sed <span style="color:#ba2121">'s/ *$//g'</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -z <span style="color:#ba2121">"</span><span style="color:#19177c">$CONN</span><span style="color:#ba2121">"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"No connection!"</span>
|
|
</span></span><span style="display:flex;"><span> notify-send <span style="color:#ba2121">"VPN"</span> <span style="color:#ba2121">"No connection for VPN to run"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">exit</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># if [[ "$CONN" != *"Wired"* ]]; then</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># echo "Connection: $CONN"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># notify-send "VPN" "Initializing for connection: $CONN"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># pkexec nmcli con modify "$CONN" ipv6.method ignore</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># nmcli connection up "$CONN"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># fi</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">VPN_FILE</span><span style="color:#666">=</span>~/.vpn/sqrtminusone-<span style="color:#008000;font-weight:bold">$(</span>hostname<span style="color:#008000;font-weight:bold">)</span>.ovpn
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> <span style="color:#008000;font-weight:bold">$(</span>hostname<span style="color:#008000;font-weight:bold">)</span> <span style="color:#666">==</span> <span style="color:#ba2121">'iris'</span> <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">VPN_FILE</span><span style="color:#666">=</span>~/.vpn/mullvad_openvpn_linux_se_all/mullvad_se_all.conf
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">echo</span> <span style="color:#19177c">$VPN_FILE</span>
|
|
</span></span><span style="display:flex;"><span>pkexec openvpn --config <span style="color:#19177c">$VPN_FILE</span>
|
|
</span></span></code></pre></div><h4 id="377cab"><del>vpn-stop</del></h4>
|
|
<p><del>Also a script to reverse the changes</del>
|
|
Also not necessary now. Just <code>herd stop vpn</code> and <code>sudo pkill vpn</code>.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">CONN</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>nmcli -f NAME con show --active | grep -Ev <span style="color:#ba2121">"(.*docker.*|NAME|br-.*|veth.*|tun.*)"</span> | sed <span style="color:#ba2121">'s/ *$//g'</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">echo</span> <span style="color:#ba2121">"Connection: </span><span style="color:#19177c">$CONN</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>pkexec nmcli con modify <span style="color:#ba2121">"</span><span style="color:#19177c">$CONN</span><span style="color:#ba2121">"</span> ipv6.method auto
|
|
</span></span><span style="display:flex;"><span>nmcli connection up <span style="color:#ba2121">"</span><span style="color:#19177c">$CONN</span><span style="color:#ba2121">"</span>
|
|
</span></span></code></pre></div><h3 id="wireguard">Wireguard</h3>
|
|
<p>So, yeah, wireguard can be configured with <code>NetworkManager</code> just fine.</p>
|
|
<p>The issue with DNS leaks remains, but fortunately <code>NetworkManager</code> runs all scripts in <code>/etc/NetworkManager/dispatcher.d/</code> when a connection changes, provided that scripts are:</p>
|
|
<ul>
|
|
<li>owned by root</li>
|
|
<li>exectuable</li>
|
|
<li>not readable by other users</li>
|
|
<li>not setuid.</li>
|
|
</ul>
|
|
<p>See <a href="https://askubuntu.com/questions/13963/call-script-after-connecting-to-a-wireless-network">this answer</a> on StackExchange, and <a href="https://networkmanager.dev/docs/api/latest/NetworkManager-dispatcher.html">NetworkManager-dispatcher man page</a>.</p>
|
|
<p><a id="code-snippet--get-nmcli"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000">echo</span> <span style="color:#008000;font-weight:bold">$(</span>guix build network-manager | grep -ve <span style="color:#ba2121">'-doc$'</span><span style="color:#008000;font-weight:bold">)</span>/bin/nmcli
|
|
</span></span></code></pre></div><p>So, here’s the script:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#bc7a00">#!/bin/sh
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#bc7a00"></span><span style="color:#19177c">GREP</span><span style="color:#666">=</span>/run/current-system/profile/bin/grep
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">NMCLI</span><span style="color:#666">=</span><span style="color:#ba2121"><<get-nmcli()>>
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"># Run only if wireg</span>uard is active
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#19177c">$NMCLI</span> connection show --active | <span style="color:#19177c">$GREP</span> -q wireguard; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"nameserver 8.8.8.8"</span> > /etc/resolv.conf
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span></code></pre></div><p>Expand the noweb with <code>C-c C-v v</code>, put it in <code>dispatcher.d</code> and run <code>chmod 700</code>.</p>
|
|
<h3 id="flatpak">flatpak</h3>
|
|
<p>As for now, the easiest way to install most of proprietary software is via flatpak. See the relevant section in <a href="/configs/desktop/">Desktop.org</a>.</p>
|
|
<h3 id="micromamba">micromamba</h3>
|
|
<p><del><a href="https://docs.conda.io/en/latest/">conda</a></del> <a href="https://github.com/mamba-org/mamba">mamba</a> is a package manager that I use for managing various versions of Python & Node.js.</p>
|
|
<p><code>mamba</code> is a reimplementation of <code>conda</code> in C++. <code>mamba</code> is notably much faster and mostly compatible with <code>conda</code>, and <code>micromamba</code> is a tiny version of <code>mamba</code> that is contained in one statically linked exectuable. I’ve migrated to <code>micromamba</code> mostly because of speed.</p>
|
|
<p><code>conda</code> is packaged for Guix with its fair share of quirks, mostly concerning the impossibility of changing the base environment in <code>/gnu/store/</code>. <code>micromamba</code> has none of that because it doesn’t ship with a base environment. It’s not packaged for Guix yet, so I’ve made a definition with <code>binary-build-system</code> in my channel.</p>
|
|
<p>You may need to unset <code>$PYTHONPATH</code> if you have any global packages installed, otherwise Python from the environemnt will try to import them instead of the conda versions.</p>
|
|
<p>I also want to have an ability to use global npm. Some settings for that are located in <a href="Console">Console.org</a>. Here we want to unset <code>NPM_CONFIG_USERCONFIG</code> if there is npm available in the environment.</p>
|
|
<p>So here is a script to set up conda hooks:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Get writable conda envs with npm & without it</span>
|
|
</span></span><span style="display:flex;"><span>readarray -t CONDA_ENVS_ALL <span style="color:#666"><<<</span> <span style="color:#008000;font-weight:bold">$(</span>micromamba env list --json | jq <span style="color:#ba2121">'.envs[]'</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">CONDA_ENVS_NPM</span><span style="color:#666">=()</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">CONDA_ENVS_NO_NPM</span><span style="color:#666">=()</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> env in <span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">CONDA_ENVS_ALL</span>[@]<span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>; <span style="color:#008000;font-weight:bold">do</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">env</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">env</span>:<span style="color:#19177c">1</span>:<span style="color:#b68;font-weight:bold">${#</span><span style="color:#19177c">env</span><span style="color:#b68;font-weight:bold">}</span>-2<span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -w <span style="color:#ba2121">"</span><span style="color:#19177c">$env</span><span style="color:#ba2121">"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -f <span style="color:#ba2121">"</span><span style="color:#19177c">$env</span><span style="color:#ba2121">/bin/npm"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">CONDA_ENVS_NPM</span><span style="color:#666">+=(</span><span style="color:#19177c">$env</span><span style="color:#666">)</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">CONDA_ENVS_NO_NPM</span><span style="color:#666">+=(</span><span style="color:#19177c">$env</span><span style="color:#666">)</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">done</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> env in <span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">CONDA_ENVS_NPM</span>[@]<span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>; <span style="color:#008000;font-weight:bold">do</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"Found npm in </span><span style="color:#19177c">$env</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span> mkdir -p <span style="color:#ba2121">"</span><span style="color:#19177c">$env</span><span style="color:#ba2121">/etc/conda/activate.d"</span>
|
|
</span></span><span style="display:flex;"><span> mkdir -p <span style="color:#ba2121">"</span><span style="color:#19177c">$env</span><span style="color:#ba2121">/etc/conda/deactivate.d"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"unset NPM_CONFIG_USERCONFIG"</span> > <span style="color:#ba2121">"</span><span style="color:#19177c">$env</span><span style="color:#ba2121">/etc/conda/activate.d/conda.sh"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"set -e NPM_CONFIG_USERCONFIG"</span> > <span style="color:#ba2121">"</span><span style="color:#19177c">$env</span><span style="color:#ba2121">/etc/conda/activate.d/conda.fish"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"export NPM_CONFIG_USERCONFIG=</span><span style="color:#19177c">$HOME</span><span style="color:#ba2121">/._npmrc"</span> > <span style="color:#ba2121">"</span><span style="color:#19177c">$env</span><span style="color:#ba2121">/etc/conda/deactivate.d/conda.sh"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"export NPM_CONFIG_USERCONFIG=</span><span style="color:#19177c">$HOME</span><span style="color:#ba2121">/._npmrc"</span> > <span style="color:#ba2121">"</span><span style="color:#19177c">$env</span><span style="color:#ba2121">/etc/conda/deactivate.d/conda.fish"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">done</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> env in <span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">CONDA_ENVS_NO_NPM</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>; <span style="color:#008000;font-weight:bold">do</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"Did not found npm in </span><span style="color:#19177c">$env</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span> rm -rf <span style="color:#ba2121">"</span><span style="color:#19177c">$env</span><span style="color:#ba2121">/etc/conda/activate.d/conda.sh"</span> <span style="color:#666">||</span> <span style="color:#008000">true</span>
|
|
</span></span><span style="display:flex;"><span> rm -rf <span style="color:#ba2121">"</span><span style="color:#19177c">$env</span><span style="color:#ba2121">/etc/conda/activate.d/conda.fish"</span> <span style="color:#666">||</span> <span style="color:#008000">true</span>
|
|
</span></span><span style="display:flex;"><span> rm -rf <span style="color:#ba2121">"</span><span style="color:#19177c">$env</span><span style="color:#ba2121">/etc/conda/deactivate.d/conda.sh"</span> <span style="color:#666">||</span> <span style="color:#008000">true</span>
|
|
</span></span><span style="display:flex;"><span> rm -rf <span style="color:#ba2121">"</span><span style="color:#19177c">$env</span><span style="color:#ba2121">/etc/conda/deactivate.d/conda.fish"</span> <span style="color:#666">||</span> <span style="color:#008000">true</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">done</span>
|
|
</span></span></code></pre></div><h3 id="slack">Slack</h3>
|
|
<p>What a nonsense of a program.</p>
|
|
<p>I was able to launch the nix version with the following wrapper script:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000">export</span> <span style="color:#19177c">PATH</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$HOME</span><span style="color:#ba2121">/bin/dummies:</span><span style="color:#19177c">$PATH</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span>mkdir -p ~/.cache/slack
|
|
</span></span><span style="display:flex;"><span>slack -r ~/.cache/slack
|
|
</span></span></code></pre></div><p>Also, it requires a <code>lsb_release</code> in the PATH, so here is one:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000">echo</span> <span style="color:#ba2121">"LSB Version: Hey. I spent an hour figuring out why Slack doesn't launch."</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">echo</span> <span style="color:#ba2121">"Distributor ID: It seems like it requires an lsb_release."</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">echo</span> <span style="color:#ba2121">"Description: But GNU Guix doesn't have one."</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">echo</span> <span style="color:#ba2121">"Release: 42.2"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">echo</span> <span style="color:#ba2121">"Codename: n/a"</span>
|
|
</span></span></code></pre></div><h3 id="virt-manager">virt-manager</h3>
|
|
<p>Run the following to fix the network:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>sudo virsh net-define /run/current-system/profile/etc/libvirt/qemu/networks/default.xml
|
|
</span></span><span style="display:flex;"><span>sudo virsh net-start default
|
|
</span></span><span style="display:flex;"><span>sudo herd restart libvirtd
|
|
</span></span></code></pre></div><h3 id="wakatime-cli">wakatime-cli</h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Note</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>TODO</td>
|
|
<td>Package this for Guix</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Before I figure out how to package this for Guix:</p>
|
|
<ul>
|
|
<li>Clone <a href="https://github.com/wakatime/wakatime-cli">the repo</a></li>
|
|
<li>Run <code>go build</code></li>
|
|
<li>Copy the binary to the <code>~/bin</code> folder</li>
|
|
</ul>
|
|
<h3 id="docker">Docker</h3>
|
|
<p>Docker Compose plugin v2 isn’t yet available on Guix, but can be installed as follows:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o <span style="color:#19177c">$HOME</span>/.docker/cli-plugins/docker-compose
|
|
</span></span><span style="display:flex;"><span>sudo chmod +x <span style="color:#19177c">$HOME</span>/.docker/cli-plugins/docker-compose
|
|
</span></span></code></pre></div><h3 id="manifest">Manifest</h3>
|
|
<p><a id="code-snippet--packages"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#19177c">my/format-guix-dependencies</span> <span style="color:#19177c">category</span>)
|
|
</span></span></code></pre></div><p>System</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">specifications->manifest</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<packages</span>(<span style="color:#ba2121">"system"</span>)<span style="color:#19177c">>></span>))
|
|
</span></span></code></pre></div>
|
|
</div>
|
|
<div class="table-of-contents">
|
|
<div class="table-of-contents-text">
|
|
<b><a href="#">Table of Contents</a></b>
|
|
<nav id="TableOfContents">
|
|
<ul>
|
|
<li><a href="#profiles">Profiles</a>
|
|
<ul>
|
|
<li><a href="#activate-profiles">Activate profiles</a></li>
|
|
<li><a href="#update-profiles">Update profiles</a></li>
|
|
<li><a href="#run-guix-package-in-profile">Run <code>guix package</code> in profile</a></li>
|
|
<li><a href="#turn-off-guix-profiles">Turn off Guix profiles</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#channels">Channels</a></li>
|
|
<li><a href="#systems">Systems</a>
|
|
<ul>
|
|
<li><a href="#base-configuration">Base configuration</a></li>
|
|
<li><a href="#indigo">indigo</a></li>
|
|
<li><a href="#eminence">eminence</a></li>
|
|
<li><a href="#azure">azure</a></li>
|
|
<li><a href="#iris">iris</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#system-installation">System installation</a>
|
|
<ul>
|
|
<li><a href="#preparation">Preparation</a></li>
|
|
<li><a href="#installation">Installation</a></li>
|
|
<li><a href="#after-installation">After installation</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#misc-software-and-notes">Misc software & notes</a>
|
|
<ul>
|
|
<li><a href="#openvpn">OpenVPN</a>
|
|
<ul>
|
|
<li><a href="#vpn-start">vpn-start</a></li>
|
|
<li><a href="#377cab"><del>vpn-stop</del></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#wireguard">Wireguard</a></li>
|
|
<li><a href="#flatpak">flatpak</a></li>
|
|
<li><a href="#micromamba">micromamba</a></li>
|
|
<li><a href="#slack">Slack</a></li>
|
|
<li><a href="#virt-manager">virt-manager</a></li>
|
|
<li><a href="#wakatime-cli">wakatime-cli</a></li>
|
|
<li><a href="#docker">Docker</a></li>
|
|
<li><a href="#manifest">Manifest</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
<a id="unhide-all-button" class="hidden"><Expand></a>
|
|
<a id="hide-all-button" class="hidden"><Collapse></a>
|
|
</div>
|
|
</div>
|
|
|
|
</div><div id="footer" class="mb-5">
|
|
<hr>
|
|
<div class="container text-center">
|
|
|
|
</div>
|
|
|
|
<div class="container text-center">
|
|
|
|
|
|
<a href="https://creativecommons.org/licenses/by/4.0/legalcode" title="Licensed under CC-BY 4.0"><small>Licensed under CC-BY 4.0</small></a>
|
|
|
|
|
|
|
|
|
|
|
<a href="https://plausible.io/" title="Uses Plausible Analytics"><small>Uses Plausible Analytics</small></a>
|
|
|
|
|
|
<br>
|
|
|
|
<a href="https://sqrtminusone.xyz/" title="Pavel Korytov, 2024"><small>Pavel Korytov, 2024</small></a>
|
|
</div>
|
|
|
|
</div>
|
|
</body>
|
|
</html>
|