The Purely Functional Linux Distribution For Musicians

Tina Turner, Thunderdome (1985)

♫ We don't need another distro! ♪♫

To paraphrase Tina Turner

Why so fragile?

Personal experience:

Mandrake, Gentoo, Ubuntu, Arch, Debian (for me: demudi, 64studio, AVlinux, Debian )

Kept running into the same problems

Updates breaking, spending lots of time fixing stuff (fun! ... kinda)

Blaming myself for messing things up, not the system

Computer audio users and developers need a reliable system, yet

they also need to be able to explore new tools without compromising stability.

Reliable or Fresh?

Something goes wrong = can't do anything until that's fixed

Virtualization doesn't help for audio

No more re-installs, no matter how wild you hack!! Don't worry about upgrading or changing your system; if anything goes wrong you can easily roll back, or, if need be, even boot

Awesome Sauce

Let's looks at some of the features

Declarative Configuration

... your system configuration file

This is also great for fault finding, for example on IRC. musnix, expressive DSL

  • Setting up/configuring a system: At some point, most of us want a more personalised OS than just a tweaked distro. Normally, you'd install something like a bare-bones debian or arch, and start installing your favorite programs, and doing your (audio) tweaks. The problems are that - you often cannot easily undo any mistakes. - if you want (or need) to repeat the process, you need to manually keep track of what you did.

NixOS is a declarative system. This means you define your entire system in a single text file. When you deploy such a configuration, it doesn't matter what the previous state was; you get exactly what you defined.

Backup, version and share the configuration of your entire system. This is also great for fault finding, for example on IRC.

Bobby McFerrin (mlfilms.com)

Be happy!

Compose

Actually, you can use more than one file

borrow other peoples files

override and extend

Sample config

powerManagement.cpuFreqGovernor = "performance";
kernel.sysctl = { "vm.swappiness" = 10; };

jackaudioFirewire = jack2.override { firewireSupport = true; };
audioProduction = with pkgs; [
  ams-lv2 calf ingen jackaudioFirewire
];
environment.systemPackages = with pkgs; [
  audioProduction inkscape vlc
];

Some random and not entirely complete examples

Cynthia Webster 1978

Cynthia Webster 1978

Audio on Linux, we're a special breed

We like to hack / tweak / optimize

Modular systems are good!

Let's have fun

Purely Functional

In computing, data structures or programming languages are called purely functional if they guarantee the (weak) equivalence of call-by-name, call-by-value and call-by-need evaluation strategies, often by excluding destructive modifications (updates) of entities in the program's running environment.

According to this restriction, variables are used in a mathematical sense, with identifiers referring to immutable, persistent values.

Nix is a purely functional language; it treats packages like immutable values.

Package isolation: Each package is only aware of its own dependency tree, so there is no danger of dependency hell. You can have multiple versions of libraries installed at once.

Snapshots: Export just the parts of the system (i.e. a set of binaries plus their configuration) that you need to work on a music project so you can return to that project again in years to come without having to recreate the whole system. You know you get the same output from a given input

nixpkgs git

expression

like faust

Isolation

Nix Expressions

# nixpkgs/pkgs/top-level/all-packages.nix
samplv1 = callPackage ../applications/audio/samplv1 { };

# nixpkgs/pkgs/applications/audio/samplv1/default.nix
{ stdenv, fetchurl, jack2, libsndfile, lv2, qt4 }:

 stdenv.mkDerivation rec {
   name = "samplv1-${version}";
   version = "0.6.0";

   src = fetchurl {
     url = "mirror://sourceforge/samplv1/${name}.tar.gz";
     sha256 = "0fbkdb2dqw7v6n8j1h6pjz2019ylli9rmz8awywv2ycm8blr5pf0";
   };

   buildInputs = [ jack2 libsndfile lv2 qt4 ];
 }

Install samplv1

$ nix-env --install samplv1
installing ‘samplv1-0.6.0’
building path(s) ‘/nix/store/jcl8...a6cy-user-environment’
created 1120 symlinks in user environment

$ which samplv1_jack
/home/goibhniu/.nix-profile/bin/samplv1_jack

Collaboration

Collaboration: Share exactly the same tools with a collaborator so that you can work together without the risk of running into incompatibilities or corrupted files.

Nix, the package manager, can even do this across distros.

One-click Install

Reproduce locally

Packages are isolated, you don't need to worry about what else a user has installed

Is NixOS for Me?

There is no GUI for config

Find out more

SpaceForward
Right, Down, Page DownNext slide
Left, Up, Page UpPrevious slide
POpen presenter console
HToggle this help