presentation-nix-flakes/sigma.md

274 lines
4.9 KiB
Markdown

---
marp: true
class: invert
paginate: true
footer: "Albert Vala, Filip Kohout, Nix flakes & Nix command"
---
<style>
@import url('https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap');
:root {
background-color: rgb(10,10,10);
font-family: Ubuntu, Arial;
}
h1 {
color: rgb(87, 175, 246);
}
code {
background-color: rgb(10,10,10);
}
header, footer {
color: rgb(100,100,100);
}
</style>
# 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 <nixpkgs> {}}:
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!**