<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>typovrak</title><description>Notes on Arch Linux, NixOS, CLI tooling and web development, written up from problems I had to solve myself.</description><link>https://typovrak.tv</link><language>en</language><lastBuildDate>Wed, 26 Aug 2026 01:24:38 GMT</lastBuildDate><atom:link href="https://typovrak.tv/rss.xml" rel="self" type="application/rss+xml"/><item><title>My Arch Linux setup (2024, before I switched to NixOS)</title><link>https://typovrak.tv/posts/arch-linux-2024-setup</link><guid isPermaLink="true">https://typovrak.tv/posts/arch-linux-2024-setup</guid><description>The exact setup I built on a fresh 2024 Arch install: GNOME, yay, my package list, zsh with zinit and Powerlevel10k, Docker, SSH and Git. Since rebuilt as a declarative NixOS config.</description><pubDate>Sat, 15 Aug 2026 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This is the exact setup I built on a fresh Arch install in 2024: GNOME, yay, my package list, a zsh config with zinit and Powerlevel10k, then Docker, SSH and Git. I have since rebuilt the whole thing as a declarative &lt;a href=&quot;https://typovrak.tv/nixos&quot;&gt;NixOS config&lt;/a&gt;, so read this as a time capsule, proof of how far the setup has come. Every command below is one I actually ran.&lt;/p&gt;
&lt;p&gt;I ran it on two machines: a ROG Strix G731GU, and a 500-euro 15-inch Asus that shipped with 8 GB of RAM. Windows barely codes on the Asus. Arch runs it like a much pricier laptop, within the limits of what 8 GB allows. That gap is most of why I left Windows behind.&lt;/p&gt;
&lt;p&gt;What I run today grew straight out of this. It has since moved to NixOS, picked up far more tools, swapped several for more modern and more secure ones, and gained an end-to-end Catppuccin Mocha green theme. This is where it started.&lt;/p&gt;
&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;&lt;details&gt;&lt;summary&gt;Open Table of contents&lt;/summary&gt;&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#which-desktop-did-i-run&quot;&gt;Which desktop did I run?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#why-yay-instead-of-plain-pacman&quot;&gt;Why yay instead of plain pacman?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#which-packages-do-i-install-first&quot;&gt;Which packages do I install first?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#how-do-i-run-docker-without-sudo&quot;&gt;How do I run Docker without sudo?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#how-do-i-make-zsh-the-default-shell&quot;&gt;How do I make zsh the default shell?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#adding-a-nerd-font&quot;&gt;Adding a Nerd Font&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#what-is-in-my-zsh-config&quot;&gt;What is in my zsh config?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#how-do-i-enable-ssh&quot;&gt;How do I enable SSH?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#how-do-i-configure-git&quot;&gt;How do I configure Git?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#which-apps-do-i-install-from-flathub&quot;&gt;Which apps do I install from Flathub?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#which-gnome-tweaks-do-i-always-make&quot;&gt;Which GNOME tweaks do I always make?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#what-would-i-do-differently&quot;&gt;What would I do differently?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#what-changed-since&quot;&gt;What changed since?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;button type=&quot;button&quot; class=&quot;details-close&quot; aria-label=&quot;Close this section&quot;&gt;Close&lt;/button&gt;&lt;/p&gt;&lt;/details&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2 id=&quot;which-desktop-did-i-run&quot;&gt;Which desktop did I run?&lt;/h2&gt;
&lt;p&gt;GNOME, because it is simple, fast, and needs almost no tweaking to do what I want. I would rather spend the effort on my terminal than on the window manager.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/arch-linux-gnome-desktop.avif&quot; alt=&quot;Arch Linux running the GNOME desktop&quot;&gt;&lt;figcaption&gt;Arch Linux running the GNOME desktop&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id=&quot;why-yay-instead-of-plain-pacman&quot;&gt;Why yay instead of plain pacman?&lt;/h2&gt;
&lt;p&gt;yay installs packages straight from the AUR, the community-maintained collection that makes the official repos look small. It also updates your whole system in one command, so you stop babysitting mirror lists every two weeks.&lt;/p&gt;
&lt;p&gt;Start with git and the build tools:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; pacman&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; -S&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; --needed&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; base-devel&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; git&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Clone yay, build it, done:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; https://aur.archlinux.org/yay.git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; yay&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;makepkg&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; -si&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Check it landed:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;yay&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; --version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then bring the whole system up to date:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;yay&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; -u&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One habit worth keeping: update weekly, not once a quarter. A three-month backlog is how you end up with five apps breaking at the same time.&lt;/p&gt;
&lt;div class=&quot;callout&quot; data-callout=&quot;bug&quot; data-collapsible=&quot;false&quot;&gt;&lt;div class=&quot;callout-title&quot;&gt;&lt;div class=&quot;callout-title-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;rect width=&quot;8&quot; height=&quot;14&quot; x=&quot;8&quot; y=&quot;6&quot; rx=&quot;4&quot;&gt;&lt;/rect&gt;&lt;path d=&quot;m19 7-3 2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;m5 7 3 2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;m19 19-3-2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;m5 19 3-2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M20 13h-4&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M4 13h4&quot;&gt;&lt;/path&gt;&lt;path d=&quot;m10 4 1 2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;m14 4-1 2&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div class=&quot;callout-title-text&quot;&gt;Docker sulks after a system update&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;callout-content&quot;&gt;&lt;p&gt;The fix is gloriously dumb: reboot and it behaves again.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/docker-daemon-error-before-reboot.webp&quot; alt=&quot;Docker daemon error after a system update, before a reboot&quot;&gt;&lt;figcaption&gt;Docker daemon error after a system update, before a reboot&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id=&quot;which-packages-do-i-install-first&quot;&gt;Which packages do I install first?&lt;/h2&gt;
&lt;p&gt;These 19 packages go on every Linux machine I use, in one command:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; pacman&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; -S&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; chromium&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; firefox&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; flatpak&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; docker&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; docker-compose&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; zsh&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; fzf&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; zoxide&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; neovim&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; npm&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; nodejs&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; gdu&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; lazygit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; earlyoom&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; rpi-imager&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; tmux&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; filezilla&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; gedit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here is why each one earns its place:&lt;/p&gt;

















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Package&lt;/th&gt;&lt;th&gt;Why&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;chromium&lt;/td&gt;&lt;td&gt;My main browser, for the performance.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;firefox&lt;/td&gt;&lt;td&gt;Only to test my sites and tweak network requests.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;flatpak&lt;/td&gt;&lt;td&gt;Access &lt;a href=&quot;https://flathub.org&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Flathub&lt;/a&gt; apps from GNOME Software.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;docker&lt;/td&gt;&lt;td&gt;My dev and deploy tool of choice.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;docker-compose&lt;/td&gt;&lt;td&gt;Multi-container services on top of Docker.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;zsh&lt;/td&gt;&lt;td&gt;Highlighting, autocompletion and more in the terminal.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;fzf&lt;/td&gt;&lt;td&gt;Fuzzy finding for files and commands.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;zoxide&lt;/td&gt;&lt;td&gt;Jump to directories by history and frequency.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;neovim&lt;/td&gt;&lt;td&gt;My future editor, the day I finally find the courage to switch.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;npm&lt;/td&gt;&lt;td&gt;Installing Node packages and building locally.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;nodejs&lt;/td&gt;&lt;td&gt;The language I build sites and APIs with.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;gdu&lt;/td&gt;&lt;td&gt;See which folders eat the most disk.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;lazygit&lt;/td&gt;&lt;td&gt;Reading commit history, since I never touch git outside the terminal.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;earlyoom&lt;/td&gt;&lt;td&gt;Watch RAM in real time and kill a runaway before the system freezes.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rpi-imager&lt;/td&gt;&lt;td&gt;Flash bootable cards for my Raspberry Pi.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;tmux&lt;/td&gt;&lt;td&gt;Terminal sessions, essential alongside neovim.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;filezilla&lt;/td&gt;&lt;td&gt;SFTP client, for docs aimed at non-technical people.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;gedit&lt;/td&gt;&lt;td&gt;Because vim refuses to cooperate with FileZilla’s edit feature. vim &gt; everything else.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Most of the list explains itself. A few picks deserve a word, folded away so the walkthrough keeps moving.&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;The reasoning behind a few of them&lt;/summary&gt;
&lt;p&gt;&lt;strong&gt;docker&lt;/strong&gt; is my single tool for install, development and production. One file pins a project to a specific Node version and puts its services on a private network, exposing only a separate external proxy network to the reverse proxy. The database sits on the private network alone, so nothing outside the VPS can reach it. That enforces good architecture for free: nothing stops a beginner from calling a database straight from React until the network does.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/docker-compose-from-real-project-in-production.avif&quot; alt=&quot;A production docker-compose file with an external proxy network and a private app network, keeping the database unreachable from outside the VPS&quot;&gt;&lt;figcaption&gt;A production docker-compose file with an external proxy network and a private app network, keeping the database unreachable from outside the VPS&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;chromium over firefox&lt;/strong&gt; for daily driving. Chromium is smoother and faster, and Firefox &lt;a href=&quot;https://github.com/mozilla/bedrock/commit/d459addab846d8144b61939b7f4310eb80c5470e&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;deleted its old promise never to sell your personal data&lt;/a&gt;. I keep Firefox for one niche move: replaying an XHR request to walk past a front-end form validation.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/firefox-xhr-edit-and-resend-feature.avif&quot; alt=&quot;Firefox devtools editing and resending an XHR request to walk past a front-end form validation&quot;&gt;&lt;figcaption&gt;Firefox devtools editing and resending an XHR request to walk past a front-end form validation&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;fzf&lt;/strong&gt; is a must-have, inside Neovim and on the command line both. It is the fastest way I know to find anything on a Linux system.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/fzf-system-search.avif&quot; alt=&quot;fzf narrowing a file search on the system&quot;&gt;&lt;figcaption&gt;fzf narrowing a file search on the system&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;lazygit&lt;/strong&gt; puts a UI on git without leaving the terminal. git is simple enough day to day that I only reach for it to read complex commit graphs and branches.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/lazygit-in-typovrak-tv-repository.avif&quot; alt=&quot;lazygit showing the branch graph of the typovrak.tv repository&quot;&gt;&lt;figcaption&gt;lazygit showing the branch graph of the typovrak.tv repository&lt;/figcaption&gt;&lt;/figure&gt;
&lt;button type=&quot;button&quot; class=&quot;details-close&quot; aria-label=&quot;Close this section&quot;&gt;Close&lt;/button&gt;&lt;/details&gt;
&lt;p&gt;One package needs the AUR, so it goes through yay instead of pacman:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;yay&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; -S&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; nvm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To finish this step, reboot so Flatpak wires itself into GNOME Software:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;reboot&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Rebooting from the terminal instead of the menu changes nothing, it just looks cooler.&lt;/p&gt;
&lt;p&gt;Once the machine is back, GNOME Software can install anything on &lt;a href=&quot;https://flathub.org&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Flathub&lt;/a&gt; directly.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/flathub-in-gnome-software.avif&quot; alt=&quot;Flathub linked into GNOME Software&quot;&gt;&lt;figcaption&gt;Flathub linked into GNOME Software&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div class=&quot;callout&quot; data-callout=&quot;note&quot; data-collapsible=&quot;false&quot;&gt;&lt;div class=&quot;callout-title&quot;&gt;&lt;div class=&quot;callout-title-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;line x1=&quot;18&quot; y1=&quot;2&quot; x2=&quot;22&quot; y2=&quot;6&quot;&gt;&lt;/line&gt;&lt;path d=&quot;M7.5 20.5 19 9l-4-4L3.5 16.5 2 22z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div class=&quot;callout-title-text&quot;&gt;On NixOS today&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;callout-content&quot;&gt;&lt;p&gt;In 2024 I barely opened Neovim. It is now my daily editor, and my whole &lt;a href=&quot;https://github.com/typovrak/nixos-nvim&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Neovim config&lt;/a&gt;, every custom plugin pinned, gets cloned on every &lt;code&gt;nixos-rebuild&lt;/code&gt;. 100% reproducible, zero interaction during install and build.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/declarative-nvim-configuration.avif&quot; alt=&quot;My declarative Neovim configuration running on NixOS&quot;&gt;&lt;figcaption&gt;My declarative Neovim configuration running on NixOS&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div class=&quot;callout&quot; data-callout=&quot;note&quot; data-collapsible=&quot;false&quot;&gt;&lt;div class=&quot;callout-title&quot;&gt;&lt;div class=&quot;callout-title-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;line x1=&quot;18&quot; y1=&quot;2&quot; x2=&quot;22&quot; y2=&quot;6&quot;&gt;&lt;/line&gt;&lt;path d=&quot;M7.5 20.5 19 9l-4-4L3.5 16.5 2 22z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div class=&quot;callout-title-text&quot;&gt;On NixOS today&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;callout-content&quot;&gt;&lt;p&gt;Installing an app like Insomnia &lt;a href=&quot;https://github.com/typovrak/nixos/blob/main/configuration.nix#L274&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;means adding its name&lt;/a&gt; to my NixOS config and nothing else. No pacman, no yay, no clicking through GNOME Software.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/installing-insomnia-with-nixos-in-one-line.avif&quot; alt=&quot;Installing Insomnia by adding one line to the NixOS configuration&quot;&gt;&lt;figcaption&gt;Installing Insomnia by adding one line to the NixOS configuration&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id=&quot;how-do-i-run-docker-without-sudo&quot;&gt;How do I run Docker without sudo?&lt;/h2&gt;
&lt;p&gt;Add your user to the &lt;code&gt;docker&lt;/code&gt; group, and the daemon stops asking for root on every command. First start the service and make it survive reboots:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; start&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; docker.service&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; enable&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; docker.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then add yourself to the group and refresh it in the current shell:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; usermod&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; -aG&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; docker&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt; $USER&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;newgrp&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;callout&quot; data-callout=&quot;note&quot; data-collapsible=&quot;false&quot;&gt;&lt;div class=&quot;callout-title&quot;&gt;&lt;div class=&quot;callout-title-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;line x1=&quot;18&quot; y1=&quot;2&quot; x2=&quot;22&quot; y2=&quot;6&quot;&gt;&lt;/line&gt;&lt;path d=&quot;M7.5 20.5 19 9l-4-4L3.5 16.5 2 22z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div class=&quot;callout-title-text&quot;&gt;On NixOS today&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;callout-content&quot;&gt;&lt;p&gt;This whole dance is &lt;a href=&quot;https://github.com/typovrak/nixos/blob/main/configuration.nix#L228&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;one line in my config&lt;/a&gt;: &lt;code&gt;extraGroups = [ &quot;docker&quot; ];&lt;/code&gt;, written once and applied on every rebuild. No &lt;code&gt;usermod&lt;/code&gt;, no &lt;code&gt;newgrp&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/setup-docker-group-in-one-line-on-nixos.avif&quot; alt=&quot;Adding the docker group in one line of the NixOS configuration&quot;&gt;&lt;figcaption&gt;Adding the docker group in one line of the NixOS configuration&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Test it with the throwaway &lt;code&gt;hello-world&lt;/code&gt; image:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; hello-world&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/docker-run-hello-world-output.webp&quot; alt=&quot;docker run hello-world output&quot;&gt;&lt;figcaption&gt;docker run hello-world output&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;If the first line reads &lt;strong&gt;Hello from Docker!&lt;/strong&gt;, you are done.&lt;/p&gt;
&lt;h2 id=&quot;how-do-i-make-zsh-the-default-shell&quot;&gt;How do I make zsh the default shell?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;chsh&lt;/code&gt; changes the login shell. Point it at zsh, which is already installed. bash is fine, zsh is better, so:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;chsh&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt; $USER&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When it asks for the new shell, give it the zsh path:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;/usr/bin/zsh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Confirm it took:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt; $SHELL&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That should print &lt;code&gt;/usr/bin/zsh&lt;/code&gt;. The shell is switched, but it is bare until you give it a config.&lt;/p&gt;
&lt;h2 id=&quot;adding-a-nerd-font&quot;&gt;Adding a Nerd Font&lt;/h2&gt;
&lt;p&gt;A Nerd Font ships the extra glyphs and icons a good terminal theme needs, and Powerlevel10k will ask for one. Download one from &lt;a href=&quot;https://www.nerdfonts.com/font-downloads&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;nerdfonts.com&lt;/a&gt;. I use JetBrains Mono for how it reads while coding, with Fira Code as my occasional favourite for a change of scenery.&lt;/p&gt;
&lt;p&gt;Unzip it, delete the &lt;code&gt;LICENSE.txt&lt;/code&gt; and &lt;code&gt;README.md&lt;/code&gt; inside, then drop every font file into &lt;code&gt;~/.local/share/fonts&lt;/code&gt; (create it if missing, and keep it flat, no subfolders). Set that font in your terminal preferences, and if there is both a Mono and a non-Mono variant, pick the non-Mono one for a better terminal render.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/gnome-terminal-jetbrainsmono-nerd-font.webp&quot; alt=&quot;Choosing the JetBrainsMono Nerd Font in GNOME Terminal preferences&quot;&gt;&lt;figcaption&gt;Choosing the JetBrainsMono Nerd Font in GNOME Terminal preferences&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;This is also where I set the size. With JetBrains Mono I use 12, to spare my eyes over a long day.&lt;/p&gt;
&lt;h2 id=&quot;what-is-in-my-zsh-config&quot;&gt;What is in my zsh config?&lt;/h2&gt;
&lt;p&gt;The config wires up zinit as the plugin manager, Powerlevel10k as the prompt, and a handful of plugins for highlighting, completion and fuzzy tab. Create &lt;code&gt;~/.zshrc&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;vim&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; ~/.zshrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And here is mine, the one I actually ran:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# init ssh agent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;ssh-agent&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;/dev/null&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# load custom ssh keys&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;#ssh-add ~/.ssh/github &amp;#x26;&gt;/dev/null&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;#ssh-add ~/.ssh/gitlab &amp;#x26;&gt;/dev/null&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; /usr/share/nvm/init-nvm.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# Initialization code that may require console input (password prompts, [y/n]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# confirmations, etc.) must go above this block; everything else may go below.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt; [[&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt; -r&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;${XDG_CACHE_HOME&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;:-&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;$HOME&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;cache}&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;/p10k-instant-prompt-&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;:-%&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;n}&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;.zsh&quot;&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt; ]];&lt;/span&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt;  source&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;${XDG_CACHE_HOME&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;:-&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;$HOME&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;cache}&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;/p10k-instant-prompt-&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;:-%&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;n}&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;.zsh&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt; [[&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &quot;/opt/homebrew/bin/brew&quot;&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt; ]]&lt;/span&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;  # If you&apos;re using macOS, you&apos;ll want this enabled&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt;  eval&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;/opt/homebrew/bin/brew&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; shellenv&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# Set the directory we want to store zinit and plugins&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;ZINIT_HOME&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;${XDG_DATA_HOME&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;:-&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;${HOME}&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;share}&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;/zinit/zinit.git&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# Download Zinit, if it&apos;s not there yet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt; -d&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;$ZINIT_HOME&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt; ];&lt;/span&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;   mkdir&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;dirname&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt; $ZINIT_HOME&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;   git&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; https://github.com/zdharma-continuum/zinit.git&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;$ZINIT_HOME&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# Source/Load zinit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;${ZINIT_HOME}&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;/zinit.zsh&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# Add in Powerlevel10k&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; ice&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; depth=&lt;/span&gt;&lt;span style=&quot;color:#FAB387&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt; zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; light&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; romkatv/powerlevel10k&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# Add in zsh plugins&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; light&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; zsh-users/zsh-syntax-highlighting&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; light&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; zsh-users/zsh-completions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; light&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; zsh-users/zsh-autosuggestions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; light&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; Aloxaf/fzf-tab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# Add in snippets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; snippet&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; OMZP::git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; snippet&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; OMZP::sudo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; snippet&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; OMZP::archlinux&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; snippet&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; OMZP::aws&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; snippet&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; OMZP::kubectl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; snippet&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; OMZP::kubectx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; snippet&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; OMZP::command-not-found&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# Load completions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt;autoload&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; -Uz&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; compinit&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt; &amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt; compinit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zinit&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; cdreplay&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; -q&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt; ~&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;/.p10k.zsh &lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt;]]&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt; source&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; ~/.p10k.zsh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# Keybindings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt;bindkey&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; -v&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# History&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;HISTSIZE&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;5000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;HISTFILE&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;~/.zsh_history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;SAVEHIST&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;$HISTSIZE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;HISTDUP&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;erase&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;setopt&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; appendhistory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;setopt&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; sharehistory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;setopt&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; hist_ignore_space&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;setopt&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; hist_ignore_all_dups&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;setopt&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; hist_save_no_dups&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;setopt&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; hist_ignore_dups&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;setopt&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; hist_find_no_dups&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# Completion styling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zstyle&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &apos;:completion:*&apos;&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; matcher-list&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &apos;m:{a-z}={A-Za-z}&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zstyle&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &apos;:completion:*&apos;&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; list-colors&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;.)&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt;LS_COLORS}&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zstyle&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &apos;:completion:*&apos;&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; menu&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; no&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zstyle&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &apos;:fzf-tab:complete:cd:*&apos;&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; fzf-preview&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &apos;ls --color $realpath&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zstyle&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &apos;:fzf-tab:complete:__zoxide_z:*&apos;&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; fzf-preview&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &apos;ls --color $realpath&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# Aliases&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt; ls&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&apos;ls --color&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt; c&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;clear&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt; e&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;exit&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt; vim&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;nvim&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt; v&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;nvim&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt; vi&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;nvim&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt; view&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;nvim -R&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#CBA6F7&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#CDD6F4&quot;&gt; vimdiff&lt;/span&gt;&lt;span style=&quot;color:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;nvim -d&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9399B2;font-style:italic&quot;&gt;# Shell integrations&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;fzf&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; --zsh&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;zoxide&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; init --cmd cd zsh&lt;/span&gt;&lt;span style=&quot;color:#9399B2&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reload to apply it:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; ~/.zshrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The GitHub and GitLab SSH lines are commented out. Uncomment them if your keys share those names, or point them at yours. The aliases are the part I miss most on any machine that is not mine: &lt;code&gt;e&lt;/code&gt; to exit a terminal in one keystroke, &lt;code&gt;c&lt;/code&gt; to clear, and &lt;code&gt;v&lt;/code&gt;/&lt;code&gt;vim&lt;/code&gt;/&lt;code&gt;vi&lt;/code&gt; all pointing at Neovim.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/zsh-ls-colored-output.webp&quot; alt=&quot;Coloured ls output from the zsh config&quot;&gt;&lt;figcaption&gt;Coloured ls output from the zsh config&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The first time you open a terminal after this, Powerlevel10k walks you through building a prompt. Answer the questions to taste. The full options live in the &lt;a href=&quot;https://github.com/romkatv/powerlevel10k&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Powerlevel10k docs&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/zsh-powerlevel10k-prompt.webp&quot; alt=&quot;The finished zsh prompt with Powerlevel10k&quot;&gt;&lt;figcaption&gt;The finished zsh prompt with Powerlevel10k&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id=&quot;how-do-i-enable-ssh&quot;&gt;How do I enable SSH?&lt;/h2&gt;
&lt;p&gt;The SSH service is off by default, which blocks cloning over SSH and connecting to a VPS. Same pattern as Docker, start it and enable it:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; start&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; sshd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; enable&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; sshd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create a directory for your keys and lock down its permissions:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; ~/.ssh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;chmod&lt;/span&gt;&lt;span style=&quot;color:#FAB387&quot;&gt; 700&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; ~/.ssh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F38BA8;font-style:italic&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; ~/.ssh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you drop keys in, fix their permissions or SSH will treat them as public and refuse them. Private keys need &lt;code&gt;600&lt;/code&gt;, public keys &lt;code&gt;644&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;chmod&lt;/span&gt;&lt;span style=&quot;color:#FAB387&quot;&gt; 600&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; github&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; gitlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;chmod&lt;/span&gt;&lt;span style=&quot;color:#FAB387&quot;&gt; 644&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; github.pub&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; gitlab.pub&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;how-do-i-configure-git&quot;&gt;How do I configure Git?&lt;/h2&gt;
&lt;p&gt;Set your name, email and default branch, so new repos start on &lt;code&gt;main&lt;/code&gt; rather than &lt;code&gt;master&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; --global&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; user.name&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &quot;First LAST&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; --global&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; user.email&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; you@example.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; --global&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; init.defaultBranch&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; main&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Those three commands are the same as writing a &lt;code&gt;~/.gitconfig&lt;/code&gt; by hand. It is an &lt;a href=&quot;https://en.wikipedia.org/wiki/INI_file&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;INI file&lt;/a&gt;, one of the dozens of config formats you will meet, and you can read yours back with:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; ~/.gitconfig&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;which-apps-do-i-install-from-flathub&quot;&gt;Which apps do I install from Flathub?&lt;/h2&gt;
&lt;p&gt;The GUI apps that pacman and yay cannot give me come from &lt;a href=&quot;https://flathub.org&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Flathub&lt;/a&gt;, through GNOME Software now that Flatpak is wired in. My usual list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://flathub.org/apps/com.slack.Slack&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Slack&lt;/a&gt;, for work chat.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://flathub.org/apps/md.obsidian.Obsidian&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Obsidian&lt;/a&gt;, for personal notes.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://flathub.org/apps/com.obsproject.Studio&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;OBS&lt;/a&gt;, for recording with a webcam.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://flathub.org/apps/org.videolan.VLC&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;VLC&lt;/a&gt;, because GNOME Videos still trips over half my files.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://flathub.org/apps/com.mattjakeman.ExtensionManager&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Extension Manager&lt;/a&gt;, to tweak GNOME.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;which-gnome-tweaks-do-i-always-make&quot;&gt;Which GNOME tweaks do I always make?&lt;/h2&gt;
&lt;p&gt;Three small ones, and I set all three on every machine.&lt;/p&gt;
&lt;p&gt;First, volume above 100%. GNOME caps output at 100% by default, and this one setting unlocks a 150% boost that a quiet laptop needs:&lt;/p&gt;
&lt;pre class=&quot;astro-code catppuccin-mocha&quot; style=&quot;background-color:#1e1e2e;color:#cdd6f4; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#89B4FA;font-style:italic&quot;&gt;gsettings&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; org.gnome.desktop.sound&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; allow-volume-above-100-percent&lt;/span&gt;&lt;span style=&quot;color:#A6E3A1&quot;&gt; &apos;true&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/gnome-volume-over-100-percent.webp&quot; alt=&quot;GNOME volume boosted to 150 percent&quot;&gt;&lt;figcaption&gt;GNOME volume boosted to 150 percent&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Second, the minimize button. GNOME ships without one, so I turn it back on in GNOME Tweaks. Small thing, non-negotiable for me.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/gnome-tweaks-minimize-maximize-buttons.webp&quot; alt=&quot;Minimize and maximize buttons enabled in GNOME Tweaks&quot;&gt;&lt;figcaption&gt;Minimize and maximize buttons enabled in GNOME Tweaks&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Third, three extensions from Extension Manager:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Just Perfection&lt;/strong&gt;, to reshape the GNOME interface. I mostly toggle the battery percentage and the keyboard-layout indicator, since I switch layouts all day.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quick Settings Audio Panel&lt;/strong&gt;, to set the volume per app from the top-right menu.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tray Icons: Reloaded&lt;/strong&gt;, to show background apps like Discord or Slack in the tray.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/gnome-shell-extensions-list.webp&quot; alt=&quot;My GNOME Shell extensions&quot;&gt;&lt;figcaption&gt;My GNOME Shell extensions&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id=&quot;what-would-i-do-differently&quot;&gt;What would I do differently?&lt;/h2&gt;
&lt;p&gt;Three calls I would change with two years of hindsight.&lt;/p&gt;
&lt;p&gt;GNOME was the right way to start, but I would go straight to i3 now. Everything runs from the keyboard: every app, window, workspace and command. One screen with i3 in the hands does the work of two, three, sometimes four screens under GNOME, and the whole application layout bends to how you actually work.&lt;/p&gt;
&lt;p&gt;zoxide is a small quality-of-life win. &lt;code&gt;cd typovrak.tv&lt;/code&gt; jumps to &lt;code&gt;~/projects/typovrak.tv&lt;/code&gt; from anywhere in the tree, and it is the kind of thing you should live with for a week to feel it. I dropped it anyway. It made me forget my own paths, which is backwards, and as a touch typist I lose almost no time typing a path in full.&lt;/p&gt;
&lt;figure style=&quot;max-width:400px&quot;&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/zoxide-in-action.avif&quot; alt=&quot;zoxide jumping straight to a project directory from anywhere in the tree&quot;&gt;&lt;figcaption&gt;zoxide jumping straight to a project directory from anywhere in the tree&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;FileZilla and gedit only survive for production work and the odd one-off. Given the choice, it is SSH and Vim every time.&lt;/p&gt;
&lt;p&gt;tmux is here for testing. I prefer zellij, the Rust terminal multiplexer, but it carries more than my daily work needs, so I never made the switch. My &lt;a href=&quot;https://github.com/typovrak/nixos-zellij&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;zellij config and theme&lt;/a&gt; are on GitHub if you want them. The setup adapts with or without NixOS.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://typovrak.tv/img/posts/arch-2024-setup/zellij-with-3-pane-and-catppuccin-mocha-green-theme.avif&quot; alt=&quot;zellij split into three panes with the Catppuccin Mocha green theme&quot;&gt;&lt;figcaption&gt;zellij split into three panes with the Catppuccin Mocha green theme&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id=&quot;what-changed-since&quot;&gt;What changed since?&lt;/h2&gt;
&lt;p&gt;Everything above is imperative: run commands, click through GNOME, hope the next machine ends up the same. It worked, but it lived in my head and in screenshots like these, not in a file.&lt;/p&gt;
&lt;p&gt;Setting Arch up by hand took me about two hours of installing and clicking, and it never ran unattended. The same result on NixOS takes five minutes: I write the config once, start the build, and go make a coffee while the machine installs and configures everything with zero interaction. I never pulled that off on Arch, and it is the single biggest reason I moved.&lt;/p&gt;
&lt;p&gt;The setup is now a &lt;a href=&quot;https://typovrak.tv/nixos&quot;&gt;declarative NixOS config&lt;/a&gt;, one module per tool, so a fresh machine rebuilds to the same state from source. It has also grown well past this list, traded several tools for more modern and more secure ones, and picked up an end-to-end Catppuccin Mocha green theme. The 2024 list you just read is the foundation the rest was built on.&lt;/p&gt;
&lt;p&gt;If you are on Arch today, this still gets you a clean, developer-ready system. When you get tired of doing it by hand, you know where to look next.&lt;/p&gt;</content:encoded><category>Arch Linux</category><category>GNOME</category><category>zsh</category><category>Docker</category><category>CLI</category><author>typovrak@gmail.com (typovrak)</author></item></channel></rss>