1
0
Fork 0
mirror of https://github.com/hercules-ci/flake-parts.git synced 2024-12-14 11:47:31 +00:00
❄️ Simplify Nix Flakes with the module system
Find a file
2023-02-01 23:45:33 +00:00
dev easyOverlay: fix 2023-01-05 01:16:03 +01:00
extras easyOverlay: Remove performance warning which is not relevant 2023-01-05 01:07:58 +01:00
modules doc: Fix nixosModules link fragment 2023-01-26 23:10:40 +01:00
template add lib argument to multi-module template 2023-01-10 15:33:53 +08:00
.gitignore Unignore flake.lock. We use a committed lock now. 2022-11-12 16:38:48 +01:00
all-modules.nix Add debug module 2022-12-20 18:07:16 +01:00
bors.toml Add bors bot 2022-05-19 09:48:46 +02:00
ChangeLog.md Add option for defining flake-parts modules for downstream flakes. 2022-12-25 06:30:44 -05:00
ci.nix dev: Add nixpkgs-fmt to pre-commit 2022-05-17 10:37:27 +02:00
flake.lock flake.lock: Update 2023-02-01 23:35:48 +00:00
flake.nix Add flakeModules.easyOverlay code 2022-12-27 15:39:34 +01:00
lib.nix Merge #61 2022-12-27 12:46:02 +00:00
LICENSE Initial commit 2021-10-27 11:03:43 +02:00
README.md Fix broken link in README.md 2022-12-18 00:22:52 +01:00
shell.nix Add local tooling and CI wiring without bloating flake.nix 2022-05-17 10:12:40 +02:00

Flake Parts

Core of a distributed framework for writing Nix Flakes.

flake-parts provides the options that represent standard flake attributes and establishes a way of working with system. Opinionated features are provided by an ecosystem of modules that you can import.

flake-parts itself has the goal to be a minimal mirror of the Nix flake schema. Used by itself, it is very lightweight.

Why Modules?

Flakes are configuration. The module system lets you refactor configuration into modules that can be shared.

It reduces the proliferation of custom Nix glue code, similar to what the module system has done for NixOS configurations.

Unlike NixOS, but following Flakes' spirit, flake-parts is not a monorepo with the implied goal of absorbing all of open source, but rather a single module that other repositories can build upon, while ensuring a baseline level of compatibility: the core attributes that constitute a flake.

Features

  • Split your flake.nix into focused units, each in their own file.

  • Take care of system.

  • Allow users of your library flake to easily integrate your generated flake outputs into their flake.

  • Reuse project logic written by others

Getting Started

If your project does not have a flake yet:

nix flake init -t github:hercules-ci/flake-parts

Migrate

Otherwise, add the input,

    flake-parts.url = "github:hercules-ci/flake-parts";

then slide mkFlake between your outputs function head and body,

  outputs = inputs@{ flake-parts, ... }:
    flake-parts.lib.mkFlake { inherit inputs; } {
      flake = {
        # Put your original flake attributes here.
      };
      systems = [
        # systems for which you want to build the `perSystem` attributes
        "x86_64-linux"
        # ...
      ];
    };

Now you can add the remaining module attributes like in the the template.

Example

See the template.

Options Reference

See flake.parts options

Documentation

See flake.parts