background grid image
Image for post zero-to-nix
Jan 23, 2023 by Luc Perkins

Introducing Zero To Nix

We at Determinate Systems are pleased to announce our initial release of Zero to Nix, a brand new learning resource for Nix. You can check it out at zero-to-nix.com. Zero to Nix is mostly targeted at two groups:

  • People who are curious about Nix but haven’t yet taken the time to really explore it (perhaps because they’ve felt intimidated by it).
  • People who are pretty sure they would benefit from Nix and have tried to cross the chasm to using it in their daily workflows but haven’t gotten there yet.

We’re confident that both of these groups stand to benefit from Zero to Nix. It presents information in a streamlined, narrative format that’s geared toward generating fresh interest in Nix and unblocking those who have felt stymied in the past.

Information architecture

Upon initial launch, Zero to Nix is divided into two basic content domains: the quick start and the concept docs.

Quick start

This takes you all the way from not even having Nix on your machine to:

And much more. The quick start is geared toward generating those initial “a-ha!” moments that make people feel empowered to go further.

Concept docs

While there’s already a lot of conceptual documentation about Nix out there, much of it is tricky to navigate and useful only to seasoned pros. Zero to Nix’s conceptual docs are intended not to be comprehensive or the final word. On the contrary, they’re meant to both provide digestible nuggets of content that smooth the landing into Nix and to direct readers to docs that are meant to be more comprehensive.

Why a new learning resource?

The Nix ecosystem already has a lot of documentation in it. There’s the Nixpkgs manual, the NixOS manual, nix.dev, the Nixpkgs codebase, Nix Pills, and more. Zero to Nix is not intended as a replacement for any of those sources and we will certainly not dissuade you from consulting them (in fact, some of us at Determinate Systems have contributed a great deal to them). But these sources have one thing in common: they don’t really excel at onboarding new users.

The decision to create a new resource from scratch isn’t one that we took lightly. Our reasoning in a nutshell:

  • Although Nix flakes remain experimental, we believe that they are the future of Nix. Anyone beginning their Nix journey today should center their learning and experimentation around Nix flakes and the new unified nix CLI rather than Nix channels and the nix-* CLI tools (nix-env, nix-shell, nix-build, etc.). And many new Nix users are doing precisely that. But because both flakes and the new CLI are experimental, official documentation sources are barred from featuring them. And with good reason! Official sources need to be careful and conservative with experimental features; we wanted to proceed differently.
  • We like the official Nix installation script well enough, and all of us at Determinate Systems have used it numerous times. But it has some shortcomings that make it less than ideal. First, it doesn’t provide a solution to the tricky problem of uninstalling Nix, requiring you to manually undo the changes that the script makes to your system. Second, it requires you to manually enable flakes and the unified CLI. Nix Installer, on the other hand, seamlessly undoes all of the changes it makes to your system and enables flakes and the unified CLI by default. We’ll be saying much more about Nix Installer soon.
  • We wanted to be bold and move quickly. When you’re working within the confines of official projects, you need to work carefully, building consensus, having often-difficult conversations, and striving for small wins and incremental progress. With Zero to Nix, we wanted to inject a fresh approach and perspective into the mix and our cumulative experience in the Nix community suggested that going outside official channels was the best way forward.
  • We wanted full control over the site generation process and the freedom to include interactive elements like widgets for selecting your preferred programming language and a dark mode option. The official Nix documentation sources use more “vanilla” static site generators. In case you’re curious, Zero to Nix is built using the lovely îles framework, with Vue for its templating logic and Tailwind for styling and Nano Stores for the limited amount of state management the site needs.

How to contribute

There are many ways that you can help out with Zero to Nix:

  • Pull requests welcome! Zero to Nix is licensed under Creative Commons and we welcome pull requests for both written content and aesthetics/UX.
  • File issues. As with pull requests, we warmly welcome issues related to the content of the site as well as aesthetics and UX. We recommend using issues to identify problems and discussions (see directly below) for more open-ended purposes.
  • Start a discussion. Do you want to see a new form of content on Zero to Nix? Do you have questions about Nix or our Nix Installer? This is a great place to interact with us at Determinate Systems and others in the community.

Shortcomings

In its current state, we think that Zero to Nix will be of immediate benefit to many, from general technology enthusiasts to decision makers considering Nix to people who have tried to learn Nix before but gave up for whatever reason. But providing a full-fledged “front end” to Nix is quite a task and we’re not quite where we want to be. Most importantly, the concept docs will be a major area of focus in the coming weeks. We currently have docs for most of the concepts we’d like to cover in Zero to Nix but some of those docs are a bit thin.

We’re more confident in the quick start as we’ve performed several user studies for that content (huge thanks to those who participated!). But even with the quick start, the community will be the ultimate judge. People will point out missing content, readers will get confused by the way we present certain concepts, people will have unexpected problems using Nix on some platforms. C’est la vie. We’re prepared to do whatever it takes to turn Nix from impenetrable to an indispensable part of people’s workflows.

Our goals for Zero to Nix

Our overarching goal at Determinate Systems is to enable people to more fully harness Nix’s potential. The good news is that Nix is already extremely powerful, providing a wide range of features that can immensely benefit teams and entire organizations: declarative development environments and Linux systems, fully reproducible package builds, and much more. But we know that Nix can be a tough nut to crack, and the existing documentation sources often come up short for Nix users of all knowledge levels. Many of us in the Nix community feel that Nix is about to reach a major inflection point—if it hasn’t already—and we see Zero to Nix as a resource that can help Nix cross the chasm.


Share
Avatar for Luc Perkins
Written by Luc Perkins

Luc is a technical writer, software engineer, and Nix advocate who's always on the lookout for qualitatively better ways of building software. He originally hails from the Pacific Northwest but has recently taken to living abroad.