nix begat oizys
Find a file
Cole Mickens 47cd27000e
gitignore
2020-10-25 04:00:43 -07:00
.gitignore gitignore 2020-10-25 04:00:43 -07:00
check.sh use a tiny helper module to unify output 2020-10-25 03:59:16 -07:00
configuration.nix use a tiny helper module to unify output 2020-10-25 03:59:16 -07:00
flake.lock initial commit 2020-10-24 21:08:09 -07:00
flake.nix use a tiny helper module to unify output 2020-10-25 03:59:16 -07:00
hardware-configuration.nix initial commit 2020-10-24 21:08:09 -07:00
README.md use a tiny helper module to unify output 2020-10-25 03:59:16 -07:00

nixos-flake-example

This shows how to build the same config, with and without flakes.

It also shows that flake.nix is basically just some syntax.

You can run ./check.sh to show that this builds the same system config with/without flakes.

flake fundamentals

Nix is in flakes mode when:

  1. nixos-rebuild <cmd> --flake '.#' is used
  2. nix build '.#something' the hash-tag syntax is used

This automatically loads from a flake.nix in the specified dir. See these examples:

These three examples, for me, are all the same source, but accessed in different ways:

  • nix build '.#nixosConfigurations.mysystem'

    (loads flake.nix from . (current dir))

  • nix build '/home/cole/code/nixos-flake-example#nixosConfigurations.mysystem'

    (loads flake.nix from /home/cole/code/nixos-flake-example)

  • nix build 'github.com:colemickens/nixos-flake-example#nixosConfigurations.mysystem'

    (nix will clone my github repo, then load flake.nix from flake.nix in the root of that repo checkout)

more tips

  1. nixos-rebuild build --flake '.#' will automatically try to find and build the attribute: .#nixosConfigurations.your_hostname (assuming your machines hostname is your_hostname)

overview

The ./check.sh script proves they give the same exact system toplevel outputs:

cole@slynux ~/code/nixos-flake-example master* 7s
 ./check.sh     

:: Updating the 'nixpkgs' input in flake.nix
+ nix flake update --update-input nixpkgs
+ set +x

:: Using 'nixos-rebuild' to build the 'mysystem' toplevel
+ nixos-rebuild build --flake .#mysystem
warning: Git tree '/home/cole/code/nixos-flake-example' is dirty
building the system configuration...
warning: Git tree '/home/cole/code/nixos-flake-example' is dirty
+ set +x

:: Using rev=007126eef72271480cb7670e19e501a1ad2c1ff2 for <nixpkgs> (extracted from flake.nix)

:: Setting NIX_PATH to the same values flakes is using
+ NIX_PATH=nixpkgs=https://github.com/nixos/nixpkgs/archive/007126eef72271480cb7670e19e501a1ad2c1ff2.tar.gz:nixos-config=/home/cole/code/nixos-flake-example/configuration.nix
+ nix-build '<nixpkgs/nixos>' -A config.system.build.toplevel
/nix/store/gg1jhmzqndqa0rfnwfdbnzrn8f74ckr6-nixos-system-mysystem-21.03pre-git
+ set +x

flake: /nix/store/gg1jhmzqndqa0rfnwfdbnzrn8f74ckr6-nixos-system-mysystem-21.03pre-git
clssc: /nix/store/gg1jhmzqndqa0rfnwfdbnzrn8f74ckr6-nixos-system-mysystem-21.03pre-git