diff --git a/image.png b/image.png new file mode 100644 index 0000000..809fce4 Binary files /dev/null and b/image.png differ diff --git a/presentation.md b/presentation.md index 2c09fcd..3341e59 100644 --- a/presentation.md +++ b/presentation.md @@ -39,6 +39,7 @@ While we will try to talk about generalities of declarative operating system par - Systems have a given configuration - Configuration can duplicate systems +- Everything is isolated --- @@ -46,4 +47,116 @@ While we will try to talk about generalities of declarative operating system par ![w:25em](diagram.png) ---- \ No newline at end of file +--- + +# 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 \ No newline at end of file