The Purely Functional Linux Distribution For Musicians
♫ 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.
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
Let's looks at some of the features
... 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.
Be happy!
Actually, you can use more than one file
borrow other peoples files
override and extend
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
Audio on Linux, we're a special breed
We like to hack / tweak / optimize
Modular systems are good!
Let's have fun
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
# 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 ]; }
$ 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: 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.
Reproduce locally
Packages are isolated, you don't need to worry about what else a user has installed
There is no GUI for config
Space | Forward |
---|---|
Right, Down, Page Down | Next slide |
Left, Up, Page Up | Previous slide |
P | Open presenter console |
H | Toggle this help |