aboutsummaryrefslogtreecommitdiff
path: root/content
diff options
context:
space:
mode:
Diffstat (limited to 'content')
-rw-r--r--content/blog/nix/getting-started.md133
1 files changed, 133 insertions, 0 deletions
diff --git a/content/blog/nix/getting-started.md b/content/blog/nix/getting-started.md
new file mode 100644
index 0000000..b068d0d
--- /dev/null
+++ b/content/blog/nix/getting-started.md
@@ -0,0 +1,133 @@
+---
+title: Getting started with nix
+description: Using nix on any linux distribution
+date: 2023-09-09
+tags:
+- nix
+---
+
+## Introduction
+
+I have been using nix for a few months now. It is a modern package manager that focuses on reproducible builds and was a first step before using nixos, a linux distribution based around nix and its capabilities that I find intriguing. Being able to have a fully reproducible system from a declarative configuration is something I find enticing.
+
+## Getting started
+
+You can get started using nix on any linux distribution, even on macos or windows! You do not need to reinstall anything or boot another operating system: you can install nix and start taking advantage of it anytime anywhere.
+
+[The official documentation](https://nixos.org/download) (which you should refer to) mentions two alternatives: one which runs a daemon to allow for multiple users to use nix on the same system, and a simpler one without a running daemon which I chose to follow.
+
+I recommend you audit the installation script, it is always a good idea to do so (and in this case it is quite simple to read what it does), but here are the three installation steps:
+```sh
+doas mkdir /nix
+doas chown adyxax /nix
+sh <(curl -L https://nixos.org/nix/install) --no-daemon
+```
+
+If this completes without error, you now have nix installed and just need to activate it in your shell with:
+```sh
+source ~/.nix-profile/etc/profile.d/nix.sh
+```
+
+To make this persistent add it where relevant for your shell and distribution, it could be in `~/.bashrc`, `~/.profile`, `~/.zshrc`, etc:
+```sh
+if [ -e "${HOME}/.nix-profile/etc/profile.d/nix.sh" ]; then
+ source "${HOME}/.nix-profile/etc/profile.d/nix.sh"
+fi
+```
+
+## Using nix
+
+### Nix channels
+
+By default, your nix installation should use the unstable profile. That just means bleeding edge packages, but I like to be explicit when using bleeding edge stuff therefore I did:
+```sh
+nix-channel --remove nixpkgs
+nix-channel --add https://nixos.org/channels/nixos-23.05 nixpkgs
+nix-channel --add https://nixos.org/channels/nixos-unstable nixpkgs-unstable
+nix-channel --update
+```
+
+23.05 is the current stable release channel at the time of this writing. Please check the current one at the time of your reading and use that.
+
+Be careful not to change this version number mindlessly as it can affect anything stateful you install with nix. The most common problem you will encounter is about file locations that change with major database versions (for example postgresql14 and 15). Changing this 23.05 version would not migrate your data, so be careful that you can migrate or have migrated all the state from your nix packages which is affected by this kind of version changes. I will write a blog article about this when it happens to me.
+
+### Searching packages
+
+The easiest and fastest way is through nixos's website: https://search.nixos.org/packages?channel=23.05
+
+If you want to do it from the cli beware that it is a bit slow, particularly on the first run (maybe it is building some cache):
+```sh
+$ nix-env -qaP firefox # short for: nix-env --query --available --attr-path firefox
+nixpkgs.firefox-esr-102 firefox-102.15.0esr
+nixpkgs-unstable.firefox-esr-102 firefox-102.15.0esr
+nixpkgs.firefox-esr firefox-115.2.0esr
+nixpkgs.firefox-esr-wayland firefox-115.2.0esr
+nixpkgs-unstable.firefox-esr firefox-115.2.0esr
+nixpkgs-unstable.firefox-esr-wayland firefox-115.2.0esr
+nixpkgs.firefox firefox-117.0
+nixpkgs.firefox-wayland firefox-117.0
+nixpkgs-unstable.firefox firefox-117.0
+nixpkgs-unstable.firefox-mobile firefox-117.0
+nixpkgs-unstable.firefox-wayland firefox-117.0
+nixpkgs.firefox-beta firefox-117.0b9
+nixpkgs.firefox-devedition firefox-117.0b9
+nixpkgs-unstable.firefox-beta firefox-117.0b9
+nixpkgs-unstable.firefox-devedition firefox-117.0b9
+```
+
+As you can see, the nixpkgs stable channels does not lag behind unstable for most day to day things you would need updated, but it will for more system things or experimental software.
+```sh
+$ nix-env -qaP gotosocial
+nixpkgs-unstable.gotosocial gotosocial-0.11.0
+```
+
+### Installing packages
+
+```sh
+nix-env -iA nixpkgs.emacs29 # short for: nix-env --install --attr nixpkgs.emacs29
+```
+
+### Listing installed packages
+
+```sh
+$ nix-env -qs # short for: nix-env --query --status
+IPS emacs-29.1
+```
+
+Note that the installed package name changed completely and no longer reference nixpkgs or nixpkgs-unstable! That comes from the notion of nix derivations which we will not get into in this article.
+
+### Upgrading packages
+
+```sh
+nix-channel --update
+nix-env --upgrade
+```
+
+### Uninstalling packages
+
+```sh
+nix-env --uninstall emacs-29.1
+```
+
+## Maintaining nix itself
+
+### Updating nix
+
+```sh
+nix-channel --update
+nix-env --install --attr nixpkgs.nix nixpkgs.cacert
+```
+
+### Uninstalling nix
+
+If at some point you want to stop using nix and uninstall it, simply run:
+```sh
+rm -rf "${HOME}/.nix-profile"
+doas rm -rf /nix
+```
+
+## Conclusion
+
+This article is a first overview of nix that can get you started, we did not get into the best parts yet: profile management, rolling back to a previous packages state, packaging software, building container images and of course nixos itself. So much material for future articles!
+
+I have been a happy Gentoo user for close to twenty years now and do not plan to switch anytime soon for many reasons, but it is nice to have another packages repository to play with.