This flake currently has 2 hosts
- desktop
- UEFI boot w/ systemd-boot
- laptop
- UEFI boot w/ systemd-boot
Flakes can be build with:
$ sudo nixos-rebuild switch --flake <path>#<hostname>
- example
$ sudo nixos-rebuild switch --flake .#desktop
This will depend on the host chosen.
In these commands
- Partition Labels:
- Boot = “boot”
- Home = “nixos”
- Partition Size:
- Boot = 512MiB
- Swap = 32GiB
- Home = Rest
- No Swap: Ignore line 3 & 7
# parted /dev/sda -- mklabel gpt # parted /dev/sda -- mkpart primary 512MiB -8GiB # parted /dev/sda -- mkpart primary linux-swap -32GiB 100% # parted /dev/sda -- mkpart ESP fat32 1MiB 512MiB # parted /dev/sda -- set 3 esp # mkfs.ext4 -L nixos /dev/sda1 # mkswap -L /dev/sda2 # mkfs.fat -F 32 -n boot /dev/sda3
In these commands
- Partition with label … to …
- “nixos” ->
/mnt
- “boot” ->
/mnt/boot
- “nixos” ->
# mount /dev/disk/by-label/nixos /mnt # mkdir -p /mnt/boot # mount /dev/disk/by-label/boot /mnt/boot
In these commands
/mnt/ssd
- Label of storage:
- ssd2
- If storage has no label:
mount /dev/disk/by-uuid/ssd2 /mnt/ssd
# mkdir -p /mnt/ssd # mount /dev/disk/by-label/ssd2 /mnt/ssd
In these commands
- Swap is enable:
- Ignore if no swap or enough RAM
- Configuration files are generated @
/mnt/etc/nixos
- If you are me, you don’t need to do this. Hardware-configuration.nix already in flake.
- Clone repository
# swapon /dev/sda2 # nixos-generate-config --root /mnt # nix-env -iA nixos.git # git clone https://github.com/MarioGK/nixos-config /mnt/etc/nixos/<name> Optional if you are not me # cp /mnt/etc/nixos/hardware-configuration.nix /mnt/etc/nixos/nixos-config/hosts/<host>/.
- Switch specific host hardware-configuration.nix with generated
/mnt/etc/nixos/hardware-configuration.nix
- Change existing network card name with the one in your system
- Look in generated hardware-configuration.nixos
- Or enter
$ ip a
- Change username in flake.nix
- Set a
users.users.${user}.initialPassword = ...
- Not really recommended. It’s maybe better to follow last steps
- If you are planning on using default2.nix doom emacs, don’t forget to rebuild after the initial installation when you link to this nix file.
- Don’t forget to change the flake location in flake.nix
- This is because userActivationScript is used for the setup and some locations are partially hardcoded
- It will automatically install if ~~/.emacs.d~ does not exist
In these commands
- Move into cloned repository
- in this example
/mnt/etc/nixos/<name>
- in this example
- Available hosts:
- desktop
- laptop
# cd /mnt/etc/nixos/<name> # nixos-install --flake .#<host>
- Set a root password after installation is done
- Reboot without livecd
- Login
- If initialPassword is not set use TTY:
Ctrl - Alt - F1
- login as root
# passwd <user>
Ctrl - Alt - F7
- login as user
- If initialPassword is not set use TTY:
- Optional:
$ sudo mv <location of cloned directory> <prefered location>
$ sudo chown -R <user>:users <new directory>
$ sudo rm /etc/nixos/configuration.nix
- or just clone flake again do apply same changes.
- Dual boot:
- OSProber probably did not find your Windows partion after the first install
- There is a high likelyhood it will find it after:
$ cd <repo directory>
$ sudo nixos-rebuild switch --flake .#<host>
- Rebuilds:
<flakelocation>$ sudo nixos-rebuild switch --flake .#<host>
This flake currently has 1 host
- pacman
The Linux distribution must have the nix package manager installed.
$ sh <(curl -L https://nixos.org/nix/install) --daemon
To be able to have a easy reproducible setup when using the nix package manager on a non-NixOS system, home-manager is a wonderful tool to achieve this.
So this is how it is set up in this flake.
In these commands
- Get git
- Clone repository
- First build of the flake
- This is done so we can use the nix flake commands
$ nix-env -iA nixpkgs.git $ git clone https://github.com/MarioGK/nixos-config ~/.setup $ cd ~/.setup $ nix build --extra-experimental-features 'nix-command flakes' .#homeConfigurations.<host>.activationPackage $ ./result/activate
Since home-manager is now a valid command we can rebuild the system using this command. In this example it is build from inside the flake directory:
$ home-manager switch --flake .#<host>
This will rebuild the configuration and automatically activate it.
Mostly optional or already correct by default
- NixGL gets set up by default, so if you are planning on using GUI applications that use OpenGL or Vulkan:
$ nixGLIntel <package>
- or add it to your aliasses file
- Every rebuild, and activation-script will run to add applications to the system menu.
- it’s pretty much the same as adding the path to XDG_DATA_DIRS
- if you do not want to or if the locations are different, change this.
- What is NixOS?
- NixOS is a Linux distribution built on top of the Nix package manager.
- It uses declarative configurations and allow reliable system upgrades.
- What is a Flake?
- Flakes are an upcoming feature of the Nix package manager.
- Flakes allow you to specify your major code dependencies in a declarative way.
- It does this by creating a flake.lock file. Some major code dependencies are:
- nixpkgs
- home-manager
- Credits
- Should I switch to NixOS?
- Is water wet?
- Where can I learn about everything Nix?
- Nix and NixOS
- Home-manager
- Flakes
- Nix-Darwin
- Videos