Mic92/adios-flake
{ "createdAt": "2026-02-28T10:11:36Z", "defaultBranch": "main", "description": "Composable flake outputs using the adios module system — the ergonomics of flake-parts without the evaluation overhead.", "fullName": "Mic92/adios-flake", "homepage": "", "language": "Nix", "name": "adios-flake", "pushedAt": "2026-04-03T11:46:50Z", "stargazersCount": 31, "topics": [], "updatedAt": "2026-06-03T21:26:35Z", "url": "https://github.com/Mic92/adios-flake"}adios-flake
Section titled “adios-flake”⚠️ Alpha — API may change. Not yet recommended for production use.
Composable flake outputs using the adios module system — the ergonomics of flake-parts without the evaluation overhead.
This project was born from a conversation between
@adisbladis and
@MatthewCroughan. Matthew loved the
ergonomics of flake-parts — the composable modules, perSystem, self' — but
adisbladis had been digging into the evaluation performance and pointed out
how much overhead the NixOS module system adds to every flake evaluation,
especially when you multiply it across a graph of flake inputs that all use
flake-parts.
The result: adios-flake. It reimplements the flake-parts API on top of
adios, a module system designed for
memoized evaluation. You get the same mkFlake you know and love, but
evaluations run ~30% faster with ~40% fewer attribute lookups and nearly
half the primitive operations. See [BENCHMARKS.md]!(BENCHMARKS.md) for the
numbers.
Features
Section titled “Features”- Familiar API: Drop-in
mkFlakewithperSystem,self',inputs', andwithSystem— if you’ve used flake-parts, you already know how this works - Memoized evaluation: System-independent modules are evaluated once regardless of how many systems are configured
- Three module styles: Ergonomic functions, native adios modules, and static attrsets
- Extensible output categories: Modules can declare new flake output categories (e.g.,
containers,templates) with merge semantics (attrsetorscalar) - Conflict detection: Clear errors when two modules define the same output key, or when a scalar output has multiple providers
- Cross-module references:
self'automatically includes module-declared categories, providing per-system access to other modules’ outputs via the Nix flake fixpoint withSystemhelper: Bridge per-system and system-agnostic outputs (e.g., nixosConfigurations)
Getting Started
Section titled “Getting Started”nix flake init -t github:Mic92/adios-flakeQuick Example
Section titled “Quick Example”{ inputs = { adios-flake.url = "github:Mic92/adios-flake"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; };
outputs = inputs@{ adios-flake, self, ... }: adios-flake.lib.mkFlake { inherit inputs self; systems = [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin" ]; perSystem = { pkgs, ... }: { packages.default = pkgs.hello; }; };}Documentation
Section titled “Documentation”- [API Reference]!(docs/api-reference.md) —
mkFlakeparameters, module styles,self',withSystem - [Writing Reusable Modules]!(docs/writing-modules.md) — native adios modules, output declarations, custom categories
- [Benchmarks]!(BENCHMARKS.md) — performance comparison with flake-parts
Ecosystem
Section titled “Ecosystem”- red-tape — Convention-based Nix project builder on top of adios-flake, inspired by blueprint. Drop your Nix files in the right places, and red-tape turns them into a complete flake — packages, devshells, checks, NixOS hosts, modules, templates, and lib — with zero boilerplate.
Acknowledgements
Section titled “Acknowledgements”adios-flake stands on the shoulders of
flake-parts by
Hercules CI. The mkFlake API, perSystem
pattern, self'/inputs' helpers, withSystem bridge, and the overall
vision of composable flake modules all originate from flake-parts. The design
owes a great deal to the groundwork laid by Robert Hensing and the flake-parts
contributors — we just wanted it faster.
Thanks to @adisbladis for creating the adios module system that makes the memoized evaluation possible, and to @MatthewCroughan for insisting that we shouldn’t have to choose between ergonomics and performance.