Open-source project
snowfallorg/lib avatar
snowfallorg/lib

Snowfall Lib is a Nix flake for system, package and shell configuration

Unified configuration for systems, packages, modules, shells, templates, and more with Nix Flakes.

628 stars65 forksNixNOASSERTION

At a glance

What is it?
Snowfall Lib is a Nix Flake based library from the Snowfall organisation that aims to give one configuration surface for systems, packages, modules, shells and templates, with support for Linux, macOS and NixOS generators. The README's first section is a call for maintainers, because the project has been effectively unmaintained for some time.
Who is it for?
Snowfall Lib suits a team that already uses Nix flakes and wants one configuration surface across system, package, module, shell and template definitions, since the whole point of the project is that a single set of inputs drives all of those outputs rather than each being configured separately.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 98 days ago.
What is it written in?
Mainly Nix, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The call for maintainers comes first

The first section of the README is a Call For Maintainers, and it sets the tone for everything else in the repository.

The wording is direct: originally developed by Jake Hamilton, Snowfall Lib has been effectively unmaintained for some time now. If you still use Snowfall Lib and would like to take over maintenance of the project, please get in touch using the Discussion page.

That is an unusual thing to see at the top of a project README, and it is the single most decision-relevant fact here. Unlike a project that has simply gone quiet, this one has declared its state, which is more useful to an evaluator because there is no ambiguity about what the silence means. Nobody is going to fix a breakage in the Nixpkgs pin, or in a nixpkgs API change, unless a new maintainer takes it on.

The dates are consistent with that account. The last push to the repository was on 2026-07-17, there are no GitHub releases, and the default branch is main. The recent push is best read as maintenance of the existing state rather than as a development cadence, since the project describes itself as unmaintained.

The licence is recorded as a custom one that GitHub cannot classify, so the LICENSE file at the root is the authoritative text for anyone considering it in a distribution.

For a reader who uses this library, the practical implication is straightforward. A flake that pins its inputs and is not updated is not a dependency that breaks loudly, it is one that quietly stops evaluating against current nixpkgs, or that fails to build when an input moves underneath it.

What the library is meant to unify

The one-line description is Unified configuration for systems, packages, modules, shells, templates, and more with Nix Flakes, and the README repeats it as a blockquote directly under the badges.

That list is the actual scope. Systems, packages, modules, shells and templates are five different kinds of Nix output, and the claim is that one configuration layer covers all of them rather than each being its own project with its own conventions.

For someone arriving from the standard Nix ecosystem, that is a meaningful difference. The usual shape is that a flake outputs a devShell and a package, and a home-manager or NixOS module is a separate thing with a separate configuration. A library that exposes all five as outputs of the same set of inputs means a change to a shared setting, a compiler version, a package set or a base configuration propagates to every output rather than needing to be repeated.

The templates entry is the one that suggests the broader intent. A template in this sense is a starting point for a new project or a new machine, and treating it as a first-class output alongside packages and shells is a sign that the project is aimed at organisations with several machines and several projects rather than at a single developer with one flake.

The audience, then, is an operations-minded team already inside Nix, and the value proposition is a single place to change things. The cost is a dependency on a library that is not currently being maintained, and that cost is higher than usual because Nix configurations are exactly the kind of thing that needs to keep working for years.

The build system underneath, and the platform support

The library is built on top of flake-utils-plus, by Gytis Ivaskevicius, and that dependency choice explains a good deal about the shape of the project.

flake-utils-plus is the community successor to the widely used flake-utils pattern, where a library exposes a `forAllSystems` style helper that lets one flake output be written once and evaluated per system, with per-system attributes handled by a helper rather than by hand. Building on that means Snowfall Lib inherits a convention the Nix community already recognises, and it means the per-platform logic is expressed rather than repeated.

The badges state the platform support explicitly, and they are worth reading in order because each names a different integration. Nix Flakes Ready points at the NixOS wiki page on flakes. Linux Ready points at nixos.org. macOS Ready points at the nix-darwin repository. Generators Ready points at the nixos-generators project in the nix-community organisation.

That last one is the most interesting, because nixos-generators is the project behind nix-generate, which produces a bootable system image or a container from a Nix configuration. Supporting it means the library's configuration can drive a generated system image, not just a build on an existing machine. It is the clearest sign of the intended use: not a package library but a configuration layer for building whole systems.

So the platform story is Linux, macOS and generated images, and the difference between them is handled by the flake-utils-plus layer rather than by Snowfall Lib itself.

The repository layout and the documentation split

The top level of the repository is small and tells you the shape of the project.

There is flake.nix and flake.lock, which is the usual pair for a flake, and a default.nix alongside it, which is the older entry point retained for compatibility with tooling that still expects one. There is a modules/ directory and a snowfall-lib/ directory, and those two names account for most of the project: the library itself lives in one, and the NixOS or home-manager style modules that consume it live in the other.

There is a .github/ directory for the workflows and a .gitignore, and that is the entire list.

Documentation is split across two locations, and the README points at both. Getting started is a Quickstart guide at snowfall.org/guides/lib/quickstart, which the README describes as the thing to see to start using Snowfall Lib. The full reference is at snowfall.org/reference/lib, which the README calls the Snowfall Lib Reference and offers for anyone looking for the documentation.

The two-page split is a reasonable structure: a quickstart that gets you running and a reference that documents the options. The website is at snowfall.org, and the project lives under the snowfallorg GitHub organisation.

What is not in the repository is as notable as what is. There is no example directory, no test suite visible at the top level, no CHANGELOG, and no tagged release history. For a project whose pitch is that it unifies configuration across five kinds of output, the absence of worked examples in the tree means the documentation site is carrying all of the load, and that is where you would have to look before adopting.

Where Snowfall Lib fits, and where it stops

The comparison worth making is with the alternatives inside the Nix world, and it comes down to whether you want a layer or a starting point.

Against a plain flake you write yourself, the difference is that Snowfall Lib supplies the structure. If your team has three or more systems, packages, shells and templates to keep in step, the value is in the propagation, in the shared inputs flowing to all five outputs. If you have one machine and one project, a small flake of your own is less to learn and nothing to maintain.

Against nixos-generators or a home-manager configuration on its own, Snowfall Lib is not a replacement but a layer above. The badges name those projects as the platforms it integrates with, so the realistic adoption is to put Snowfall Lib underneath a configuration that already targets one of them.

The limits are the ones the README already states, and they are not small. The project has been effectively unmaintained for some time, it is looking for a new maintainer, and there are no releases to pin. A flake without tagged versions is a dependency whose behaviour changes when its inputs change, and for a library whose job is to hold an organisation's system configuration together, that is the wrong failure mode.

The unclassified licence is the second thing to settle. Whatever the LICENSE file says is what applies, and for anyone shipping a Snowfall Lib based configuration inside a product or an image, that text needs reading rather than assuming.

The honest summary is that this is a well-shaped idea with a sensible foundation, currently without the maintenance to be safe to depend on. The quickstart guide is short enough to read before deciding, and the reference will tell you whether the five outputs it unifies are the five you actually maintain.

Editorial conclusion

Snowfall Lib suits a team that already uses Nix flakes and wants one configuration surface across system, package, module, shell and template definitions, since the whole point of the project is that a single set of inputs drives all of those outputs rather than each being configured separately. It is the wrong choice for a project starting with Nix today, because the README states plainly that the library has been effectively unmaintained for some time and is looking for a new maintainer, and there are no tagged releases to pin. Before adopting it, read the Quickstart guide at snowfall.org/guides/lib/quickstart, and check whether the flake still resolves against current nixpkgs, since a flake with no release discipline is the kind of dependency that breaks on a nixpkgs update rather than on a version bump.

Frequently asked questions

What is Snowfall Lib?

It is a Nix Flakes based library that provides unified configuration for systems, packages, modules, shells, templates and more. It is built on top of flake-utils-plus and is part of the Snowfall organisation, whose site is snowfall.org.

Is Snowfall Lib still maintained?

No. The README opens with a call for maintainers, stating that the project was originally developed by Jake Hamilton and has been effectively unmaintained for some time, and inviting anyone who still uses it to get in touch through the discussion page.

Which platforms does Snowfall Lib support?

The README badges state Nix Flakes, Linux, macOS and generators support, linking to the NixOS flake documentation, nixos.org, the nix-darwin repository and the nixos-generators project. The per-platform handling comes from the flake-utils-plus layer it is built on.

Where are the Snowfall Lib docs?

Two places. The Quickstart guide at snowfall.org/guides/lib/quickstart is the starting point for using the library, and the full reference is at snowfall.org/reference/lib. The README itself only links to those two pages and lists the repository structure.

How do I get started with Snowfall Lib?

The README points to the Snowfall Lib Quickstart guide at snowfall.org/guides/lib/quickstart, which covers starting to use the library. The repository itself is a flake, with flake.nix, flake.lock, a default.nix, and modules/ and snowfall-lib/ directories holding the modules and the library code.

Official sources

  1. Issues
  2. Project website
  3. README
  4. snowfallorg/lib on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/snowfallorg-lib.svg)](https://hysenlabs.com/projects/snowfallorg-lib)

Was this useful?