Ausführbare Flakes
Flakes dienen nicht nur dazu, NixOS-Systemkonfigurationen zu beschreiben. Mit ihnen lassen sich Anwendungen im Detail definieren und so ein bestimmtes Setup verteilen. Die integrierten Anwendungen lassen sich über nix run
ausführen. Dazu müssen die Anwendungen im Flake-Output dafür vorbereitet werden.
Als Beispiel wird hier eine Minimal-Konfiguration für Neovim besprochen.
Die Inputs: Welche Neovim-Version soll verwendet werden?
Bei der Verwendung von Flakes werden Build-Inputs explizit deklariert. Dazu werden Repos und Branches angegeben, um die zu verwendende Version zu spezifizieren. Wenn das Flake neben Neovim noch andere Software-Komponenten verwendet, sollte auch Nixpkgs eingebunden werden.
Bei Neovim kann zwischen einem stabilen und einem unstabilen Branch gewählt werden. Bei Nixpkgs wählt man zwischen einem unstabilen Branch oder einem bestimmten Release (oder sogar ein bestimmer Commit über seinen Hash).
{
description = "A minimal flake to use Neovim";
inputs = {
nixpkgs = {
url = "github:NixOS/nixpkgs"; # unstable branch
url = "github:NixOS/nixpkgs/release-23.05"; # take software that is/was current at a certain point in time
};
neovim = {
url = "github:neovim/neovim/stable?dir=contrib"; # stable branch
# url = "github:neovim/neovim?dir=contrib"; # unstable branch
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, neovim }: { ... };
}
Durch inputs.nixpkgs.follows
wird festgelegt, dass der neovim
-Input dem nixpkgs
-Input “folgen” (darauf begründet sein) soll. Beim Build von Neovim kann dadurch Gebrauch von Paketdefinitionen und Anweisungen gemacht werden, die Nixpkgs bereitstellt. Das gilt vor allem für Dependencies wie Lua.
Um die Input-Definitionen verwenden zu können, geben wir sie als Argumente an den Output.
App-Definitionen im Output
Im Outputs-Abschnitt muss festgelegt werden, wie auf die Flake-Anwendung über nix run
zugegriffen werden kann.