NixOS system configuration: Difference between revisions
m edit "more through" -> more thorough |
m Right, that also needs buildPackages |
||
| (5 intermediate revisions by 5 users not shown) | |||
| Line 59: | Line 59: | ||
== Defining NixOS as a flake == | == Defining NixOS as a flake == | ||
[[Flakes]] offer an alternative | [[Flakes]] offer an alternative way to configure NixOS systems using a standardized and reproducible structure. With flakes, the system configuration — along with any additional inputs such as Nixpkgs or external modules — is managed declaratively within a <code>flake.nix</code> file. | ||
Unlike the traditional configuration model, which relies on <code>/etc/nixos/configuration.nix</code> and channels, flakes explicitly define their dependencies and configurations, making it easier to share, version, and reproduce complete NixOS system setups. | Unlike the traditional configuration model, which relies on <code>/etc/nixos/configuration.nix</code> and channels, flakes explicitly define their dependencies and configurations, making it easier to share, version, and reproduce complete NixOS system setups. | ||
| Line 70: | Line 70: | ||
<nowiki> | <nowiki> | ||
{ | { | ||
inputs.nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable; | inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; | ||
outputs = { self, nixpkgs }: { | outputs = { self, nixpkgs }: { | ||
# replace 'joes-desktop' with your hostname here. | # replace 'joes-desktop' with your hostname here. | ||
| Line 87: | Line 87: | ||
{{file|flake.nix|nix|<nowiki> | {{file|flake.nix|nix|<nowiki> | ||
{ | { | ||
inputs.nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable; | inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; | ||
inputs.home-manager.url = github:nix-community/home-manager; | inputs.home-manager.url = "github:nix-community/home-manager"; | ||
outputs = { self, nixpkgs, ... }@inputs: { | outputs = { self, nixpkgs, ... }@inputs: { | ||
| Line 180: | Line 180: | ||
==== Importing packages from multiple nixpkgs branches ==== | ==== Importing packages from multiple nixpkgs branches ==== | ||
A NixOS config flake could be as follows (replace | A NixOS config flake could be as follows (replace hostname with your hostname): | ||
{{file|3=<nowiki> | {{file|3=<nowiki> | ||
| Line 194: | Line 194: | ||
{ nixpkgs, nixpkgs-unstable, ... }: | { nixpkgs, nixpkgs-unstable, ... }: | ||
{ | { | ||
nixosConfigurations." | nixosConfigurations."hostname" = nixpkgs.lib.nixosSystem { | ||
modules = [ | modules = [ | ||
{ | { | ||
| Line 257: | Line 257: | ||
path = pkgs.path; | path = pkgs.path; | ||
narHash = builtins.readFile | narHash = builtins.readFile | ||
(pkgs.runCommandLocal "get-nixpkgs-hash" | (pkgs.buildPackages.runCommandLocal "get-nixpkgs-hash" | ||
{ nativeBuildInputs = [ pkgs.nix ]; } | { nativeBuildInputs = [ pkgs.buildPackages.nix ]; } | ||
"nix-hash --type sha256 --sri ${pkgs.path} > $out"); | "nix-hash --type sha256 --sri ${pkgs.path} > $out"); | ||
}; | }; | ||
}; | }; | ||
</nowiki> | </nowiki> | ||
}} | |name=|lang=}} | ||
This has the unfortunate side-effect of requiring import-from-derivation and slowing down build times, however it may greatly speed up almost every eval. Full-time flakes users may be able to just use <code>narHash = pkgs.narHash</code>. | This has the unfortunate side-effect of requiring import-from-derivation and slowing down build times, however it may greatly speed up almost every eval. Full-time flakes users may be able to just use <code>narHash = pkgs.narHash</code>. | ||
| Line 271: | Line 271: | ||
How to get a nix repl out of your system flake: | How to get a nix repl out of your system flake: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="nix"> | ||
$ nix repl | $ nix repl | ||