declarative-talk/presentation.md
2023-09-29 09:23:51 -04:00

176 lines
2.7 KiB
Markdown

---
marp: true
title: Declarative Distrbutions
description: Declarative Distrbutions
theme: uncover
class:
- invert
transition: fade
paginate: true
---
# Declarative Distros
![bg right 80%](nix.png)
![bg right 80%](guix.png)
---
# Quick Disclamer
We are both GNU Guix Users
While we will try to talk about generalities of declarative operating system paradigms, Guix and Nix specific things, etc, we may get some Nix (and even Guix) things wrong.
---
# What is a Declarative Distro?
### What does it mean?
---
- A operating system defined by configuration
- Without state
- System is reproducible
---
# Reproducible
- Systems have a given configuration
- Configuration can duplicate systems
- Everything is isolated
---
# Reproducible
![w:25em](diagram.png)
---
# Isolation
- Packages are built in isolated packages
- No random spare files in file system
- All state is containted
- Preserves state-less root
---
# Stability
- Reproducibility and Isolation ensure the ability to rollback
- Always have some working system state
---
# NixOS
- Released Jun 2003
- Eelco Dolstra
- Nix package manager (nix)
- Nix language
- Systemd
![bg left 40%](nix.png)
---
# Guix
- Released 2012
- Forked from Nix
- Guix package manager (guix)
- GNU Guile (scheme/lisp)
- GNU Shepherd
- Not GNU/Herd
![bg left 40%](guix.png)
---
# Declarative Package Management
## `nix` and `guix` commands
---
### Declarative Package Management
- Update system repositories
- Build and/or install packages
- Manage `the store`
---
### Distro Store
- Guix `/gnu/store`
- Nix `/nix/store`
- Stores all package and system files
- Partially based off of configuration
---
### Distro Profile
- Guix `~/.guix-profile`
- Nix `~/.nix-profile`
- Symlink Read only system
- Links store to current profile
- Based off configuration
---
- Store hold system and package files
- Profile links to those files
---
### Multidirection
```bash
$ which gcc
/home/tylerm/.guix-home/profile/bin/gcc # profile
$ readlink /home/tylerm/.guix-home/profile/bin/gcc
/gnu/store/spxcaq8gnmckhzz9a1wm3qc9dmz5bvsd-gcc-toolchain-12.3.0/bin/gcc # store
```
---
## Multiple Profiles
- System Profile (All users)
- Good to contain system needed pacakges
- Graphics drivers
- Zsh
- User Profile (Specific user)
- Good to contain all user data
- Browser
- Applications
- DE/WM
---
## To Build The System
- Package manager takes in user and system configuration
- Downloads needed data into store
- Build any needed packages
- Symlinks the user and system profiles
---
## Temporary Packages
- Nix and Guix allow installing packages temporarily
- Uses contained environment
- `guix shell <package>`
- `nix shell -p <package>`
---
### lori
ipsum