diff --git a/sigma.md b/sigma.md index e69de29..8368ac4 100644 --- a/sigma.md +++ b/sigma.md @@ -0,0 +1,273 @@ +--- +marp: true +class: invert +paginate: true +footer: "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ů: + +```shell +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í `lockfiles` pro 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: +```shell +nix shell nixpkgs#alejandra +nix shell github:kamadorueda/alejandra +``` + +## Zobrazení atributů flaky: +```shell +nix flake show github:kamadorueda/alejandra +``` + +--- + +# 5. Použití Flakes pro systémovou konfiguraci + +- Flakes spravují pouze `inputs` a `outputs` +- Konfigurace systému je definována v `flake.nix` + +## Příklad `flake.nix`: +```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`: +```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`: +```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: +```shell +nix flake init --template templates#full +``` + +### Zobrazení vstupů: +```shell +nix flake metadata --json | jq +``` + +### Aktualizace vstupů: +```shell +nix flake update # všechny vstupy +nix flake update home-manager # konkrétní vstup +``` + +--- + +# 7. Nixos-rebuild a vzdálené buildy + +## Lokální rebuild: +```shell +nixos-rebuild --flake . +nh os switch +``` + +## Manuální přepnutí konfigurace: +```shell +nix build /etc/nixos#nixosConfigurations.nixos.config.system.build.toplevel +./result/bin/switch-to-configuration switch +``` + +## Vzdálený build: +```shell +nixos-rebuild --target-host nixFreak@192.168.8.32 switch --flake .#default +``` + +--- + +# 8. Nix Shell a DevShells + +## Příklad `shell.nix`: +```nix +{pkgs ? import {}}: +pkgs.mkShell { + packages = [ pkgs.cowsay ]; +} +``` + +## Příklad flaky pro vývojové prostředí: +```nix +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + }; + outputs = { self, nixpkgs }: { + devShells.default = nixpkgs.mkShell { + packages = [ nixpkgs.cowsay ]; + }; + }; +} +``` + +--- + +# 9. Nix Language + +## Deklarace setu: +```nix +foo = { + bar = "test"; +}; +foo.bar # "test" +``` + +## Funkce v Nix: +```nix +let + addOne = eggs: eggs + 1; +in + addOne 3 # -> 4 +``` + +--- + +# 10. Nix Writers + +- Jednoduché přidávání skriptů do systému + +## Příklad: +```nix +pkgs.writers.writeBash "hello-world" {} '' +echo "Hello, world!" +''; +``` + +## Příklad s Python knihovnami: +```nix +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ů +- `nix` CLI přináší nové možnosti +- Flakes umožňují snadnou replikaci prostředí + +**Děkujeme za pozornost!** +