Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NixOS - Purely Functional Package Management

yawnt
June 01, 2016

NixOS - Purely Functional Package Management

yawnt

June 01, 2016
Tweet

More Decks by yawnt

Other Decks in Programming

Transcript

  1. Nix(OS)
    purely functional
    package management
    Fueled by

    View Slide

  2. f(x)

    View Slide

  3. Why is state evil?

    View Slide

  4. Expensive to keep
    track of mutation

    View Slide

  5. Which in turns
    means no rollback

    View Slide

  6. Which in turns
    means no portability

    View Slide

  7. The Nix language

    View Slide

  8. Why?

    View Slide

  9. $ nix-repl
    > true
    true
    > 1 + 1
    2
    > (a: a + 1) 1
    2

    View Slide

  10. We use Nix to describe
    how to build packages

    View Slide

  11. { stdenv, fetchurl, perl }:
    stdenv.mkDerivation {
    name = "hello-2.1.1";
    builder = ./builder.sh;
    src = fetchurl {
    url = “${packageURL};
    md5 = “${md5hash};
    };
    inherit perl;
    }

    View Slide

  12. Packages are immutable
    once built

    View Slide

  13. Everything lives inside a
    single directory, the store

    View Slide

  14. “Live” packages are
    symlinked

    View Slide

  15. Old packages are still in the
    store, just not accessible

    View Slide

  16. Rollback for free

    View Slide

  17. Multiple versions for free

    View Slide

  18. Multiple envs for free

    View Slide

  19. Puppies for free

    View Slide

  20. Ok, maybe not puppies

    View Slide

  21. $ nix-repl
    command not found: nix-repl
    $ nix-shell -p nix-repl
    [nix-shell:~]$ nix-repl -v
    nix-repl v1.1.2
    [nix-shell:~]$ exit
    $ nix-repl
    command not found: nix-repl

    View Slide

  22. NixOS is a distribution
    built around Nix

    View Slide

  23. In Nix, to build a package
    you write a function

    View Slide

  24. In NixOS, to build a system
    you write a function

    View Slide

  25. configuration.nix

    View Slide

  26. $ fdisk /dev/sda
    $ mkfs.ext4 -L nixos /dev/sda1
    $ mkswap -L swap /dev/sda2
    $ swapon /dev/sda2
    $ mount /dev/disk/by-label/nixos /mnt
    $ nixos-generate-config --root /mnt
    $ nano /mnt/etc/nixos/configuration.nix
    $ nixos-install
    $ reboot

    View Slide

  27. { config, pkgs, ... }:
    {
    imports =
    [
    ./hardware-configuration.nix
    ];
    boot.loader.grub.device = "/dev/sda";
    }

    View Slide

  28. Building your system is
    purely functional

    View Slide

  29. Upgrading is the same as
    rebuilding from scratch

    View Slide

  30. No /usr, /sbin/, /share

    View Slide

  31. Just /nix/store

    View Slide

  32. Nix(OS)
    cryoptographically
    hashes all build inputs

    View Slide

  33. That means
    built-in versioning

    View Slide

  34. dotfiles, just store
    ‘em in /nix/store
    .emacs.d, *wink* *wink* ;) ;)

    View Slide

  35. More than just a
    distribution

    View Slide

  36. nixops

    View Slide

  37. (hail) hydra

    View Slide

  38. Questions?

    View Slide