A Declarative environment with Nix
Package managers
OS-level: brew, dnf, apt, yum, chocolatey, etc
Versioning one per runtime: nvm, asdf, rvm, etc
Per language: go deps, bundler, mix/hex, npm, composer, pip, etc
Virtual environments: venv
What do we use them for ?
Make an environment for our programs to work !
What do we need ?
Dependency graph
Environment
Services
Reproducible + Repeatable + Easy to change (rollback)
Define all input
Clean environment (chroot)
Explicit input
Full dependency definition
Symlink results
How does Nix work
Download the packages in /nix/store, versionned
Define your environment with code
Generate a list of packages in your environment
symlink them
Keep track of generations, to allow to change the environment easily
Mac
Linux
NixOS
NixPkgs
all you need
Nix-shell
Nix for development environments
Create a shell.nix file
define your environment packages and variables
nix-shell
Done
https://nixos.org/nix/
https://nixos.org/nixos/nix-pills/
Learning
Future Ideas
Adopt for dev environment ?
Reproducible test and build environement
Docker with better caching = faster builds
Deployment and full control of the deployed boxes
Your idea !
Thank you !
Questions ?