Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Nix the package manager is for getting deep control and hard guarantees about your dependencies. NixOS uses Nix, but also gives you ways to 1) specify your system's configuration declaratively from the beginning* and 2) reliably get that configuration running on another machine without having to worry about, say, conflicts with existing dependencies.

Or at least that's the theory. In practice I'm mostly still trying to get my mouse to work. :-P

*As opposed to layering a declarative system over an imperative one, which I think is more or less what Chef, Docker, Ansible, et cetera are doing.



That means I'll have to rewrite all my (Arch) packages for Nix in order for that to work, right? How does it deal with install scripts (inside upstream packages that you have no control over) that install stuff imperatively?


packages are namespaced in a directory for each package/version, like this:

    /nix/store/b6gvzjyb2pg0kjfwrjmg1vfhh54ad73z-firefox-33.1/
if a package is "installed" in an environment (it could be global, user local or temporary), its files are sym-linked in the "original" position (e.g. /usr/bin/firefox etc etc)


Small nitpick, they aren't symlinked to their original position, but instead to a "profile" (global for instance is in /run/current-system/sw, your local profile is $HOME/.nix-profile).

This has several consequences. It means binaries distributed with the expectation of libraries being in their original position (e.g. /usr/lib/libc.so) don't work as is. It also means scripts depending on the presence of /usr/bin/bash are broken (which happen far too often).

I love NixOS, but that is one of the biggest annoyance I have with the system.


Yeah but we're very good at patching shebangs, rpaths, etc.


With packaged softwares, yeah it rocks and it's seamless.

The problem comes from anything that's not packaged. Things that exist outside the nixos ecosystem.

For instance, the Android SDK is a bit of pain in the neck to install via the nixpkgs : it's a mutable piece of software with pieces that auto-update themselves, made of lots of smaller packages that aren't bundled in the main package, etc...

However, the binaries google provide doesn't run properly on nixos by default because of the non-standard install (has to set LD_PRELOAD so it can find the libc).


Well the Android SDK is like the worst-packaged thing ever :). I thought that its nixpkgs package was one of the greatest efforts to salvage the situation---the XSLT to automatically convert it's xml metadata to nix expressions is super impressive.


Yes, you are right.


So basically, one could make this compatible with current Arch packages by making packages install into /nix/store/<id> instead?


I don't know if a mechical/automatic process is possible, but it works for haskell and python packages from Hackage and PyPI.

nix packages are not exactly packages, as in rpm or deb files, they are expressions in a functional language (think build recipes). there is a central repository of recipes on github: https://github.com/NixOS/nixpkgs/tree/master/pkgs

but you can make your own, and eventually make a pull request. They are more similar to Arch's PKGBUILDs. Packages in the central repository are constantly built by a continuos built process (http://nixos.org/hydra/), that works both as a binary cache and as a testing system. This is an expression I wrote to install SuperCollider plugins https://gist.github.com/gosub/a42e265ec38d9df203d6 using the Arch PKGBUILD as a reference https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=sc3-p...


Yeah we package a lot of stuff these days---more than our market share would lead one to guess. So yes feel free to file a PR for anything missing, but there's no need to port Arch packages en masse.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: