4.9 KiB
4.9 KiB
| marp | class | paginate | footer |
|---|---|---|---|
| true | invert | true | Albert Vala, Filip Kohout, Nix flakes & Nix command |
Nix Flakes & Nix Command
1. Úvod do Nix Command
- Nové rozhraní pro příkazovou řádku Nix
- Podpora pro Flakes
Porovnání starých a nových příkazů:
nix-shell -p cowsay # Starý způsob
nix shell nixpkgs#cowsay # Nový způsob
nix run nixpkgs#cowsay # Nový způsob
2. Základní příkazy Nix CLI
| Příkaz | Popis |
|---|---|
flake new |
Vytvoření flake z šablony |
develop |
Build environment shell |
shell |
Dočasný shell s vybraným programem |
config check |
Kontrola konfigurace na chyby |
run |
Spuštění výstupu z flaky |
3. Úvod do Nix Flakes
Proč Flakes?
- Použití
lockfilespro deterministické buildy - Jednoduchá správa vstupů (flake inputs)
Na co lze Flakes použít?
- Správa systémové konfigurace
- Vývojové prostředí
- Balíčkování
- Nástroje pro deployment
4. Použití Nix Command + Flakes
Dočasný shell s balíčkem:
nix shell nixpkgs#alejandra
nix shell github:kamadorueda/alejandra
Zobrazení atributů flaky:
nix flake show github:kamadorueda/alejandra
5. Použití Flakes pro systémovou konfiguraci
- Flakes spravují pouze
inputsaoutputs - Konfigurace systému je definována v
flake.nix
Příklad flake.nix:
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { nixpkgs, home-manager, ... }: {
nixosConfigurations = {
nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = false;
home-manager.useUserPackages = true;
home-manager.users.nixFreak = import ./home.nix;
}
];
};
};
};
}
Příklad home.nix:
{
config,
pkgs,
...
}: {
home.username = "nixFreak";
home.homeDirectory = "/home/nixFreak";
home.stateVersion = "24.05";
home.packages = with pkgs; [ cowsay ];
programs.home-manager.enable = true;
}
Příklad configuration.nix:
{
config,
lib,
pkgs,
...
}: {
imports = [ ./hardware-configuration.nix ];
boot.loader.systemd-boot.enable = true;
users.users.nixFreak = {
isNormalUser = true;
extraGroups = ["wheel"];
};
system.stateVersion = "25.05";
}
6. Správa Flakes
Vytvoření nové flaky:
nix flake init --template templates#full
Zobrazení vstupů:
nix flake metadata --json | jq
Aktualizace vstupů:
nix flake update # všechny vstupy
nix flake update home-manager # konkrétní vstup
7. Nixos-rebuild a vzdálené buildy
Lokální rebuild:
nixos-rebuild --flake .
nh os switch
Manuální přepnutí konfigurace:
nix build /etc/nixos#nixosConfigurations.nixos.config.system.build.toplevel
./result/bin/switch-to-configuration switch
Vzdálený build:
nixos-rebuild --target-host nixFreak@192.168.8.32 switch --flake .#default
8. Nix Shell a DevShells
Příklad shell.nix:
{pkgs ? import <nixpkgs> {}}:
pkgs.mkShell {
packages = [ pkgs.cowsay ];
}
Příklad flaky pro vývojové prostředí:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs = { self, nixpkgs }: {
devShells.default = nixpkgs.mkShell {
packages = [ nixpkgs.cowsay ];
};
};
}
9. Nix Language
Deklarace setu:
foo = {
bar = "test";
};
foo.bar # "test"
Funkce v Nix:
let
addOne = eggs: eggs + 1;
in
addOne 3 # -> 4
10. Nix Writers
- Jednoduché přidávání skriptů do systému
Příklad:
pkgs.writers.writeBash "hello-world" {} ''
echo "Hello, world!"
'';
Příklad s Python knihovnami:
pkgs.writers.writePython3 "hello-world" {
libraries = [ pkgs.python3Packages.requests ];
} ''
import requests
print("Hello, world!")
'';
Závěr
- Nix Flakes usnadňují správu závislostí a buildů
nixCLI přináší nové možnosti- Flakes umožňují snadnou replikaci prostředí
Děkujeme za pozornost!