274 lines
4.9 KiB
Markdown
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!**
|
|
|