Our Roadmap for Nix

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
  • nix

    Nix, the purely functional package manager

  • As I said, I've tried installing it from the Arch repo and using Nix's installer (+ the adjustments described here [1]).

    [1] https://github.com/NixOS/nix/issues/879#issuecomment-4109043...

  • nixpkgs

    Nix Packages collection & NixOS

  • The official installer leverages an initialization script, to be sourced at shell init time, which is written in POSIX shell. Fish can't just source it because it's not compatible with POSIX shell.

    > I then searched the Internet and found a very "creative" workaround for Arch users that didn't work either.

    Arch users shouldn't need anything special here.

    You can use fenv¹ to source it, you can translate it to bash using babelfish, or you can exec into fish after running bash to log in (make sure to set $SHELL after if you choose that option). Just make sure you do it as early as possible if you want to use things installed by Nix in your other Fish config snippets.

    I think Home Manager will also take care of this for you. (The other module systems, Nix-Darwin and NixOS, both do.)

    If you wanna do it like NixOS does, you can install Fish via Nix and then create your own preinit environment script in /etc/fish. This has the advantage of setting up your Nix environment variables before any other config is sourced. You can take a look at it here, which also explains some of the Fish initialization process: https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/p...

    and here's where the hooks go in the Fish package, where the comments describe the Fish initialization process in detail as well as why things are done this way on NixOS: https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/p...

    1: https://github.com/oh-my-fish/plugin-foreign-env

    2: https://github.com/bouk/babelfish

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • nickel

    Better configuration for less

  • > Dynamic typing and lazy evaluation don't seem to mix.

    Incidentally, this is one of the things that some of the people involved with the blog post in the OP have set out to fix. A few years ago, Theophane (author of the blog post) started an experiment to add gradual typing to Nix, which eventually became the start of Nickel: https://github.com/tweag/nickel

    Today, Nickel development continues at Tweag, but now Yann Hamdaoui is doing all the coding. Producing helpful error messages is one of the major goals of Nickel, as a potential successor language to Nix. All of the language design decisions are documented as GitHub issues on the repo, so if the technical side of this kind of problem is interesting to you, you may enjoy browsing that.

    It appears that Nickel is very close to a usable state for early experimentation. You might be interested in cloning the repo and messing around with it!

  • fennecOS

    My NixOs config

  • I love nix, I've been using it for the last 2 years, I have a very stable setup from these 2 years of effort [0], and I just can't recommend Nix for Linux beginners, why?

    Well, because everything is scattered, you have to consult many places to find out how to do things with Nix, here is my workflow:

    Usually, when I need a new complex program, like Steam, I first check the system-wide configuration [1], the wiki [2] and the package list [3], if I just want it on my user, I need to check if Home Manager has an option [4], if it doesn't, I can just use the "home.packages" option. Now, if I need to override something on the package, I need to remember how to do it with [5] [6] (while checking the source code for the package in parallel to find the options).

    And then sometimes, on very rare occasions, I need to fine tune something with the nix language, so I need to check the builtins/lib docs [7], but some builtins are not there, so I need to either use nix-doc [8] or find the docs inside the code-bases [9] [10] (they are split between both repos)

    [0] - https://github.com/shiryel/nixos-dotfiles

  • nix-doc

    An interactive Nix documentation tool providing a CLI for function search, a Nix plugin for docs in the REPL, and a ctags implementation for Nix script

  • nix-book

    Discontinued Nix documentation – centralized community online learning resource for Nix

  • We're onto the pedagogy thing. Check out the Nix book efforts: https://discourse.nixos.org/t/documentation-team-flattening-....

    Regarding the language and "configurations" specifically, you might like what we do with Nickel: https://github.com/tweag/nickel. Research project showing a potential future for Nix.

  • nickel-nix

    Discontinued An experimental Nix toolkit to use nickel as a language for writing nix packages, shells and more. [Moved to: https://github.com/nickel-lang/organist]

  • Undecided; see https://github.com/nickel-lang/nickel-nix for a proof-of-concept of an integration that requires making no changes to either Nickel or Nix.

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
  • go-nix

    Elements of Nix re-implemented as Go libraries [maintainer=@flokli]

  • There has been a bit of a pause while tazjin was exploring how to use Nix as a monorepo build system, together with Gerrit. Now that this is done, he recently started writing a new Nix interpreter that will better scale for big repos. I don't think that work is public yet.

    There also has been some effort on https://github.com/nix-community/go-nix spearheaded by flokli to re-define some of the binary cache protocols. This will allow for more incremental transfers of build artefacts, reduced bandwidth and disk consumption.

  • rnix-lsp

    Discontinued WIP Language Server for Nix! [maintainer=@aaronjanse]

  • gobyexample

    Go by Example

  • Advice to nix devs: do a nixbyexample website. These are what attract the most people to a language. See

    https://o1-labs.github.io/ocamlbyexample/

    https://gobyexample.com/

    https://doc.rust-lang.org/rust-by-example/

    Also if it’s not on learnXinYminutes it should be

  • anarki

    Community-managed fork of the Arc dialect of Lisp; for commit privileges submit a pull request.

  • > People who think otherwise probably don’t understand why people like javascript and python and will never write any product that catches on.

    Ironically, this has been posted on a popular site written in a dialect of scheme:

    http://arclanguage.org/

    https://github.com/arclanguage/anarki

  • niv

    Easy dependency management for Nix projects

  • I agree that the FP part is not the only issue. It's that the community feels a bit more academic/I'll fix this for myself in the way that works best for me.

    You can indeed achieve some reproducibility with Docker. It's tricky though, as you'd have to pin exact package versions of software. If you'd `FROM ubuntu:$VERION`, and would run an `apt-get update`, you're not guaranteed to get the same software.

    Nix is like ZFS, as that it breaks the wall between two previously distinct area's. Those being building software, and installing/configuration software on your OS. It's quite different from the snapshot-everything methodology that Docker uses. Yeah, one can split in multi-stage images etc, but than you'll be keeping track of which dependencies need to be moved between the stages yourself, in a manner that cannot be abstracted away, so you're doomed to repeat the same patterns over and over again.

    People also state that LVM + ext3 is more than sufficient compared to the complexity of ZFS. They miss out on the fact on how much more fine grained solutions are possible with ZFS.

    I've used niv [0] before flakes arrived, and am actually still using that instead of flakes. The experimental nature of them has scared me away from them, as I'm not daily involved in this ecosystem at the moment.

    [0] https://github.com/nmattia/niv#niv

  • dagger

    Application Delivery as Code that Runs Anywhere (by dagger)

  • > These alternatives are far more familiar and easier to work with. You can get most (but not all) of the benefits of NixOS with far less work.

    > Worse is better.

    There are some potential alternatives out there that seem inspired by Nix but which are less strict. I think a system that offers and manages Nix's purity but doesn't require it could end up the final winner some day. Shea Levy had some ideas for eventually achieving this in Nix that he called 'Nomia' (probably riffing on the name of Sander van der Burg's Dysnomia, I'd guess), but his life circumstances changed before the project really materialized. But Nix still could be the place where that is first achieved.

    Meanwhile new container image-building DSLs like Dagger¹ and Bass² look a lot like a Nix which is impure by default, and bash builders are replaced with BuildKit directives. And there's Denxi³, which looks more like a Nix that lets you reduce its purity when you want to.

    For now, though, the Nix ecosystem is still vastly more capable than these alternatives because of all the incredible work that Nixpkgs represents. Nix we know it today could still end up the concrete basis for what succeeds it, and not just an inspiration.

    1: https://dagger.io/

  • plugin-foreign-env

    Run foreign bash scripts and capture exported environment variables

  • The official installer leverages an initialization script, to be sourced at shell init time, which is written in POSIX shell. Fish can't just source it because it's not compatible with POSIX shell.

    > I then searched the Internet and found a very "creative" workaround for Arch users that didn't work either.

    Arch users shouldn't need anything special here.

    You can use fenv¹ to source it, you can translate it to bash using babelfish, or you can exec into fish after running bash to log in (make sure to set $SHELL after if you choose that option). Just make sure you do it as early as possible if you want to use things installed by Nix in your other Fish config snippets.

    I think Home Manager will also take care of this for you. (The other module systems, Nix-Darwin and NixOS, both do.)

    If you wanna do it like NixOS does, you can install Fish via Nix and then create your own preinit environment script in /etc/fish. This has the advantage of setting up your Nix environment variables before any other config is sourced. You can take a look at it here, which also explains some of the Fish initialization process: https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/p...

    and here's where the hooks go in the Fish package, where the comments describe the Fish initialization process in detail as well as why things are done this way on NixOS: https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/p...

    1: https://github.com/oh-my-fish/plugin-foreign-env

    2: https://github.com/bouk/babelfish

  • flake-utils

    Pure Nix flake utility functions [maintainer=@zimbatm]

  • The ‘flake-utils’ readme is a pretty good jumping off point: https://github.com/numtide/flake-utils

    I have this or that nitpick with FL and FLP but overall it’s very solid stuff. FLP is a little more “magical”, and that’s not always the best starting out, but you really can’t go wrong with either.

  • rules_nixpkgs

    Rules for importing Nixpkgs packages into Bazel.

  • I have spent a little bit of time working on a prototype of a setup like this, and have needed to write a lot of (hacky) glue and BUILD files.

    I take it you have departed quite a bit from https://github.com/tweag/rules_nixpkgs ? Are you generating BUILD.bazel files for nixpkgs, or are you doing that by hand?

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts