diff --git a/README.md b/README.md index 76de2c2..ede205d 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,6 @@ My NixOS and home-manager flake ## Structure - [`flake.nix`](./flake.nix): Starting point of the configuration, declaring entrypoints. -- [`guides`](./guides/): Some simple documentation to help me (and maybe others) understand NixOS. - [`system`](./system/): Basic core configurations for the system itself. - [`options`](./options/): Declaration of the configurable options, that should be set by the individual machines. - [`hosts`](./hosts): Configuration of the individual hosts/computers diff --git a/guides/installation.md b/guides/installation.md deleted file mode 100644 index ac232ba..0000000 --- a/guides/installation.md +++ /dev/null @@ -1,193 +0,0 @@ -# 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 - -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. - -```sh -sudo 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 -nix.package = pkgs.nixUnstable; -nix.settings.experimental-features = [ "nix-command" "flakes" ]; -``` - -Now you can save the changes and rebuild the system: - -```sh -sudo nixos-rebuild switch -``` - -## Set up flakes - -An interesting things about nix flakes, is that they need to live in a git -repository, you won't be able to rebuild otherwise, so let's set up some git -settings, so that we can make commits: - -```sh -git config --global user.email "itsdrike@protonmail.com" -git config --global user.name "ItsDrike" -``` - -We could create and manage this repository directly in `/etc/nixos`, however -that's not practical, since we probably want to use our git config and -generally just work in a non-root environment when editing the flake. I like -using the `~/dots` directory. - -```sh -cp -r /etc/nixos ~/dots -cd ~/dots -``` - -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. - -## Create your own custom flake - -Initialize an empty git repository: - -```sh -git init -``` - -Create a very basic `./flake.nix`: - -```sh -{ - description = "ItsDrike's NixOS configuration"; - - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11"; - }; - - outputs = { self, nixpkgs, ...} @ inputs: { - nixosConfigurations = { - nixos = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - modules = [ ./configuration.nix ]; - }; - }; - }; -} -``` - -Let's add things to git! - -```sh -git add flake.nix -git add configuration.nix -git add hardware-configuration.nix -``` - -Now you can rebuild the system to use our flake: - -```sh -sudo nixos-rebuild switch --flake . -``` - -Yay, you're now using NixOS in flakes mode! - -> [!NOTE] -> If you run the `sudo nixos-rebuild switch` command, without the `--flake .` -> it would look for the `flake.nix` file in `/etc/nixos`. - -> [!TIP] -> Notice the `nixosConfigurations` (plural) key in our flake, suggesting that -> it can hold multiple configurations. Indeed, it can! You can use a single -> flake to manage multiple systems. -> -> The name for the configuration just needs to match the hostname of your -> machine, which by default will be `nixos`. -> -> Alternatively, you can also pick which configuration to use manually in the -> rebuild command, like so: `nixos-rebuild --flake .#my-configuration`, which -> would pick a config named `my-configuration`. - -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: - -```sh -git commit -m "Initial commit" -``` - -## Updating - -Over time, you'll want to update the software that's installed on your machine, -to do that, we'll first want to update the `flake.lock` file, which contains -the commit sha of the nixpkgs repo that's being used. To do so, you can use -this command (while in `~/dots` directory): - -```sh -nix flake update -``` - -After which, you'll probably also want to rebuild your system and switch: - -```sh -nixos-rebuild switch --flake . -``` - -> [!TIP] -> This replaces the legacy (non-flake) regime's command: `nixos-rebuild switch --upgrade` - -## Home-Manager - -Home-Manager is a way to bring nix features to your home directory. It allows -you to version and manage your configuration files that usually live in your -home directories, like `~/.config` with the usual nix tooling. This can help -you achieve full reproducibility for the user side, not just the system side. - -First, let's add home-manager as an input to our flake: - -```nix -home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; -}; -``` - -```nix -{ - description = "ItsDrike's NixOS configuration"; - - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11"; - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - }; - - outputs = { self, nixpkgs, ...} @ inputs: { - nixosConfigurations = { - nixos = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - modules = [ ./configuration.nix ]; - }; - }; - }; -} -```