2.4 KiB
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:
nixos-rebuild <cmd> --flake '.#'
is usednix 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
fromflake.nix
in the root of that repo checkout)
more tips
nixos-rebuild build --flake '.#'
will automatically try to find and build the attribute:.#nixosConfigurations.your_hostname
(assuming your machines hostname isyour_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