nixdots/guides/installation.md

4.2 KiB

Installation

This is a full NixOS installation guide, from live cd to a working OS. Once done, you will be left with a complete system, that uses my configuration.

This installation will push to use flakes out of the box, configuration.nix will only be needed to add support for flakes and rebuild.

Live ISO

This assumes you've chosen one of the ISO images with a graphical installer, and followed though with the installation, getting you to a basic NixOS installation.

During this installation, make sure you allow non-free programs, and in the desktop environment selection, pick the option without any DE, we'll get to install that ourselves.

Set up configuration.nix

First thing you'll need to do is to make your useer account own the /etc/nixos directory. You'll want to do this to allow you to easily manage your config with git (which is a requirement when using flakes). You can use system wide git, however it is much more convenient to just leave it to the user, as you'll have your git configuration there.

cd /etc/nixos
sudo chmod -R itsdrike:users .

Out of the box, NixOS only comes with nano editor, so we'll have to use that to edit the configuration.nix for the first time.

nano configuration.nix

In there, change the environment.systemPackages = with pkgs; []; like, and include git and vim.

After that, let's enable flakes, by adding the following anywhere in your configuration.nix:

nix.package = pkgs.nixUnstable;
nix.settings.experimental-features = [ "nix-command" "flakes" ];

Now you can save the changes and rebuild the system:

sudo nixos-rebuild switch

Set up flakes

Now, since a git repository is required for flakes, let's set up git:

git config --global user.email "itsdrike@protonmail.com"
git config --global user.name "ItsDrike"

Now we have 2 options, the first one I'll show will set up my configuration from this repository. Once done, you will have your system set up in the same way that I do. In the second option, I will go over a basic setup to create your own flake.

Set up with my configuration

Finally, we're ready to migrate to flakes. At this point, you can simply pull this repository to the /etc/nixos directory, to get my setup, like so:

git init
git remote add origin https://github.com/ItsDrike/nixdots
git branch -M main
git pull origin main

Create your own custom flake

Initialize an empty git repository:

git init

Create a very basic /etc/nixos/flake.nix:

{
    description = "ItsDrike's NixOS configuration";

    inputs = {
      # the version here should match your system.stateVersion in configuration.nix
      nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
    };

    outputs = { self, nixpkgs, ...} @ inputs: {
        nixosConfigurations = {
            nixos = nixpkgs.lib.nixosSystem {
                system = "x86_64-linux";
                modules = [ ./configuration.nix ];
            };
        };
    };
}

This flake will still rely on your configuration.nix, we will eventually get to a config which does not need this file, but to make starting out with flakes simple, we'll do it in this way for now.

Let's add things to git!

git add flake.nix
git add configuration.nix
git add hardware-configuration.nix

Now you can run sudo nixos-rebuild switch. Yay, you're now using NixOS in flakes mode!

Note

If you run the sudo nixos-rebuild switch command before adding all of these files to git, you will get an error, so it really is a requirement to have your configuration in a git repository when you're using flakes.

You can notice that this also created a flake.lock file, containing the exact versions of all of the packages you're using. Let's add this file to git too: git add flake.lock.

And now we're ready to make our first commit:

git commit -m "Initial commit"

Updating

Over time, to update the software that's installed on your machine, you can use nix flake update, to update your flake.lock file, and then nixos-rebuild switch, to get switch your system to the new dependencies.

Tip

This replaces the legacy (non-flake) regime's command: nixos-rebuild switch --upgrade