• Stars
    star
    114
  • Rank 297,606 (Top 7 %)
  • Language
    Nix
  • License
    MIT License
  • Created about 1 year ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Framework for simplifying flake setup [maintainer=@accelbread]

Flakelight

A modular Nix flake framework for simplifying flake definitions.

Goals

  • Minimize boilerplate needed for flakes
  • Support straightforward configuration of all vanilla flake attributes
  • Allow sharing common configuration using modules
  • What can be done automatically, should be
  • Provide good defaults, but let them be changed/disabled

Features

  • Handles generating per-system attributes
  • Extensible using the module system
  • Given package definitions, generates package and overlay outputs
  • Automatically import attributes from nix files in a directory (default ./nix)
  • Builds formatter outputs that can format multiple file types
  • Provides outputs/perSystem options for easy migration

Documentation

See the API docs for available options and example usage.

Additional modules

The following modules are also available:

Contact

Feel free to ask for help or other questions in the issues/discussions, or reach out on Matrix at #flakelight:nixos.org.

Examples

Shell

The following is an example flake.nix for a devshell, using the passed in nixpkgs. It outputs devShell.${system}.default attributes for each configured system. systems can be set to change configured systems from the default.

{
  inputs.flakelight.url = "github:nix-community/flakelight";
  outputs = { flakelight, ... }:
    flakelight ./. {
      devShell.packages = pkgs: [ pkgs.hello pkgs.coreutils ];
    };
}

With this flake, calling nix develop will make hello and coreutils available.

To use a different nixpkgs, you can instead use:

{
  inputs = {
    nixpkgs.url = "nixpkgs/nixpkgs-unstable";
    flakelight.url = "github:nix-community/flakelight";
  };
  outputs = { flakelight, ... }:
    flakelight ./. {
      devShell.packages = pkgs: [ pkgs.hello pkgs.coreutils ];
    };
}

Rust package

The following is an example flake for a Rust project using flakelight-rust, invoked by using flakelight-rust's wrapper. Package metadata is taken from the project's Cargo.toml.

{
  inputs.flakelight-rust.url = "github:accelbread/flakelight-rust";
  outputs = { flakelight-rust, ... }: flakelight-rust ./. { };
}

The above flake exports the following:

  • Per-system attributes for default systems (x86_64-linux and aarch64-linux)
  • packages.${system}.default attributes for each system
  • overlays.default providing an overlay with the package (built with the applied pkg set's dependencies)
  • devShells.${system}.default that provides rust-analyzer, cargo, clippy, rustc, and rustfmt as well as sets RUST_SRC_PATH
  • checks.${system}.${check} attributes for build, test, clippy, and formatting checks
  • formatter.${system} with additional support for formatting Rust files

Equivalently, you can just import the flakelight-rust module as follows:

{
  inputs = {
    flakelight.url = "github:nix-community/flakelight";
    flakelight-rust.url = "github:accelbread/flakelight-rust";
  };
  outputs = { flakelight, flakelight-rust, ... }: flakelight ./. {
    imports = [ flakelight-rust.flakelightModules.default ];
  };
}

See flakelight-rust.nix to see how you could configure it without the module.

C application

The following example flake is for a C project with a simple make setup.

{
  description = "My C application.";
  inputs.flakelight.url = "github:nix-community/flakelight";
  outputs = { flakelight, ... }:
    flakelight ./. {
      license = "AGPL-3.0-or-later";

      package = { stdenv, defaultMeta }:
        stdenv.mkDerivation {
          name = "hello-world";
          src = ./.;
          installPhase = ''
            runHook preInstall
            make DESTDIR=$out install
            runHook postInstall
          '';
          meta = defaultMeta;
        };

      devShell.packages = pkgs: with pkgs; [ clang-tools coreutils ];

      formatters = {
        "*.h" = "clang-format -i";
        "*.c" = "clang-format -i";
      }
    };
}

This flake exports the following:

  • Per-system attributes for default systems (x86_64-linux and aarch64-linux)
  • packages.${system}.default attributes for each system, with license and description set
  • overlays.default providing an overlay with the package (built with the applied pkg set's dependencies)
  • devShells.${system}.default that provides clang-tools and coreutils
  • checks.${system}.${check} attributes for build and formatting checks.
  • formatter.${system} with additional support for formatting c and h files with clang-format

C application using autoloads

The above example can instead use the autoload directory feature for the package like the following. Most attributes can be autoloaded.

./flake.nix:

{
  description = "My C application.";
  inputs.flakelight.url = "github:nix-community/flakelight";
  outputs = { flakelight, ... }@inputs:
    flakelight ./. {
      license = "AGPL-3.0-or-later";

      devShell.packages = pkgs: with pkgs; [ clang-tools coreutils ];

      formatters = {
        "*.h" = "clang-format -i";
        "*.c" = "clang-format -i";
      }
    };
}

./nix/packages/_default.nix:

{ stdenv, defaultMeta }:
stdenv.mkDerivation {
  name = "hello-world";
  src = ./.;
  installPhase = ''
    runHook preInstall
    make DESTDIR=$out install
    runHook postInstall
  '';
  meta = defaultMeta;
}

A leading underscore in filename is stripped (default needs to be escaped to not conflict with dir import).

More Repositories

1

home-manager

Manage a user environment using Nix [maintainer=@rycee]
Nix
5,937
star
2

awesome-nix

😎 A curated list of the best resources in the Nix community [maintainer=@cyntheticfox]
2,546
star
3

nixos-generators

Collection of image builders [maintainer=@Lassulus]
Nix
1,338
star
4

NixOS-WSL

NixOS on WSL(2) [maintainer=@nzbr]
Nix
1,236
star
5

disko

Declarative disk partitioning and formatting using nix [maintainer=@Lassulus]
Nix
1,232
star
6

nix-direnv

A fast, persistent use_nix/use_flake implementation for direnv [maintainer=@Mic92 / @bbenne10]
Nix
1,170
star
7

nixvim

Configure Neovim with Nix! [maintainer=@pta2002, @traxys, @GaetanLepage]
Nix
1,060
star
8

nix-on-droid

Nix-enabled environment for your Android device. [maintainers=@t184256,@Gerschtli]
Nix
1,038
star
9

nixos-anywhere

install nixos everywhere via ssh [maintainer=@numtide]
Shell
1,029
star
10

NUR

Nix User Repository: User contributed nix packages [maintainer=@Mic92]
Python
882
star
11

impermanence

Modules to help you handle persistent state on systems with ephemeral root storage [maintainer=@talyz]
Nix
882
star
12

dream2nix

Simplified nix packaging for various programming language ecosystems [maintainer=@DavHau]
Nix
839
star
13

comma

Comma runs software without installing it. [maintainers=@Artturin,@burke,@DavHau]
Rust
831
star
14

rnix-lsp

WIP Language Server for Nix! [maintainer=@aaronjanse]
Rust
701
star
15

poetry2nix

Convert poetry projects to nix automagically [maintainer=@adisbladis]
Nix
693
star
16

nix-init

Generate Nix packages from URLs with hash prefetching, dependency inference, license detection, and more [maintainer=@figsoda]
Rust
692
star
17

nix-index

Quickly locate nix packages with specific files [maintainers=@bennofs @figsoda @raitobezarius]
Rust
681
star
18

naersk

Build Rust projects in Nix - no configuration, no code generation, no IFD, sandbox friendly.
Nix
641
star
19

nixd

Nix language server, based on nix libraries [maintainer=@inclyc]
C++
619
star
20

lanzaboote

Secure Boot for NixOS [maintainers=@blitz @raitobezarius @nikstur]
Rust
584
star
21

lorri

Your project’s nix-env [maintainer=@Profpatsch,@nyarly]
Rust
576
star
22

nixGL

A wrapper tool for nix OpenGL application [maintainer=@guibou]
Nix
564
star
23

robotnix

Build Android (AOSP) using Nix [maintainer=@danielfullmer,@Atemu]
Nix
558
star
24

fenix

Rust toolchains and rust-analyzer nightly for Nix [maintainer=@figsoda]
Nix
547
star
25

nixpkgs-fmt

Nix code formatter for nixpkgs [maintainer=@zimbatm]
Rust
503
star
26

nixpkgs-wayland

Automated, pre-built packages for Wayland (sway/wlroots) tools for NixOS. [maintainers=@colemickens, @Artturin]
Nix
467
star
27

emacs-overlay

Bleeding edge emacs overlay [maintainer=@adisbladis]
Nix
451
star
28

vulnix

Vulnerability (CVE) scanner for Nix/NixOS.
Python
378
star
29

nurl

Generate Nix fetcher calls from repository URLs [maintainer=@figsoda]
Rust
360
star
30

rnix-parser

A Nix parser written in Rust [maintainer=@oberblastmeister]
Nix
328
star
31

nixos-vscode-server

Visual Studio Code Server support in NixOS
Nix
316
star
32

crate2nix

rebuild only changed crates in CI with crate2nix and nix
Nix
311
star
33

terraform-nixos

A set of Terraform modules that are designed to deploy NixOS [maintainer=@adrian-gierakowski]
HCL
304
star
34

srvos

NixOS profiles for servers [maintainer=@numtide]
Nix
297
star
35

nixbox

NixOS Vagrant boxes [maintainer=@zimbatm]
HCL
276
star
36

neovim-nightly-overlay

[maintainer=@Kranzes]
Nix
267
star
37

vscode-nix-ide

Nix language support for VSCode editor [maintainer: @jnoortheen]
TypeScript
248
star
38

nix-user-chroot

Install & Run nix without root permissions [maintainer=@Mic92]
Rust
243
star
39

haumea

Filesystem-based module system for Nix [maintainer=@figsoda]
Nix
235
star
40

trustix

Trustix: Distributed trust and reproducibility tracking for binary caches [maintainer=@adisbladis]
Go
234
star
41

NixNG

A linux distribution based on Nix [maintainer=@MagicRB]
Nix
210
star
42

nix-zsh-completions

ZSH Completions for Nix
Shell
208
star
43

nix-index-database

Weekly updated nix-index database [maintainer=@Mic92]
Nix
205
star
44

noogle

https://noogle.dev - nix function exploring. [maintainer=@hsjobeki]
Nix
194
star
45

nix-melt

A ranger-like flake.lock viewer [maintainer=@figsoda]
Rust
190
star
46

pypi2nix

Abandoned! Generate Nix expressions for Python packages
Python
189
star
47

gomod2nix

Convert applications using Go modules to Nix expressions [maintainer=@adisbladis]
Nix
186
star
48

todomvc-nix

Example on how to nixify a project [maintainer=@Rizary]
Nix
160
star
49

nix-environments

Repository to maintain out-of-tree shell.nix files (maintainer=@mic92)
Nix
156
star
50

pip2nix

Freeze pip-installable packages into Nix expressions [maintainer=@datakurre]
Python
152
star
51

docker-nixpkgs

docker images from nixpkgs [maintainer=@zimbatm]
Nix
137
star
52

linuxkit-nix

An easy to use Linux builder for macOS [maintainer=@nicknovitski]
Nix
133
star
53

nix-vscode-extensions

Nix expressions for VSCode and OpenVSX extensions [maintainers: @deemp, @AmeerTaweel]
Haskell
132
star
54

tree-sitter-nix

Nix grammar for tree-sitter [maintainer=@cstrahan]
JavaScript
129
star
55

npmlock2nix

nixify npm based packages [maintainer=@andir]
Nix
125
star
56

yarn2nix

Generate nix expressions from a yarn.lock file [maintainer=???]
Nix
123
star
57

nixos-install-scripts

collection of one-shot scripts to install NixOS on various server hosters and other hardware. [maintainer=@happysalada]
Shell
122
star
58

nix-eval-jobs

Parallel nix evaluator with a streamable json output [maintainers @Mic92, @adisbladis]
C++
119
star
59

nixdoc

Tool to generate documentation for Nix library functions [maintainer=@infinisil]
Nix
113
star
60

nixago

Generate configuration files using Nix [maintainer=@jmgilman]
Nix
112
star
61

nix-unstable-installer

A place to host Nix unstable releases [maintainer=@lilyinstarlight]
Ruby
105
star
62

wiki

Nixos wiki [maintainer=@samueldr]
104
star
63

go-nix

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

nixpkgs-lint

A fast semantic linter for Nix using tree-sitter 🌳 + ❄️. [maintainers=@Artturin,@siraben]
Rust
101
star
65

namaka

Snapshot testing for Nix based on haumea [maintainer=@figsoda]
Rust
96
star
66

dns.nix

A Nix DSL for DNS zone files
Nix
93
star
67

nur-combined

A repository of NUR that combines all repositories [maintainer=@Mic92]
Nix
92
star
68

napalm

Support for building npm packages in Nix and lightweight npm registry [maintainer @jtojnar]
Nix
91
star
69

nixos-images

Automatically build (netboot) images for NixOS [maintainer=@Mic92]
Nix
90
star
70

vgo2nix

Convert go.mod files to nixpkgs buildGoPackage compatible deps.nix files [maintainer=@adisbladis]
Nix
89
star
71

nixt

Simple unit-testing for Nix [maintainer=@Lord-Valen]
TypeScript
87
star
72

nur-packages-template

A template for NUR repositories: [maintainer=@fgaz]
Nix
84
star
73

pnpm2nix

Load pnpm lock files into nix :) [maintainer=@adisbladis]
Nix
82
star
74

mineflake

Declarative Minecraft server in NixOS [unmaintained]
Rust
75
star
75

infra

nix-community infrastructure [maintainer=@Mic92]
Nix
74
star
76

kde2nix

Provisional, experimental Plasma 6 (and friends) pre-release packaging [maintainer=@K900]
Nix
69
star
77

nix-data-science

Standard set of packages and overlays for data-scientists [maintainer=@tbenst]
Nix
68
star
78

pyproject.nix

A collection of Nix utilities to work with Python projects [maintainer=@adisbladis]
Nix
65
star
79

ethereum.nix

Nix packages and NixOS modules for the Ethereum ecosystem. [maintainers=@aldoborrero,@brianmcgee,@selfuryon]
Nix
65
star
80

setup.nix

Nixpkgs based build tools for declarative Python packages [maintainer=@datakurre]
Nix
64
star
81

nixpkgs.lib

nixpkgs lib for cheap instantiation [maintainer=@github-action] (with initial help from @blaggacao)
Nix
63
star
82

nix-installers

Nix installers for legacy distributions (rpm & deb & pacman) [maintainer=@adisbladis]
Nix
62
star
83

hydra-check

check hydra for the build status of a package [maintainer=@makefu,@Artturin]
Python
60
star
84

zon2nix

Convert the dependencies in `build.zig.zon` to a Nix expression [maintainer=@figsoda]
Zig
58
star
85

redoxpkgs

Cross-compile to Redox using Nix [maintainer=@aaronjanse]
Nix
51
star
86

nix-github-actions

A library to turn Nix Flake attribute sets into Github Actions matrices [maintainer=@adisbladis]
Nix
49
star
87

nix-ld-rs

Run unpatched dynamic binaries on NixOS [maintainer=@zhaofengli @Mic92]
Rust
47
star
88

patsh

A command-line tool for patching shell scripts inspired by resholve [maintainer=@figsoda]
Rust
46
star
89

mavenix

Deterministic Maven builds using Nix [maintainer=@icetan]
Nix
45
star
90

nixpkgs-pytools

Tools for removing the tedious nature of creating nixpkgs derivations [maintainer=@costrouc]
Python
42
star
91

nix-unit

Unit testing for Nix code [maintainer=@adisbladis]
C++
41
star
92

docker-nix

Docker image for nix [maintainer=@zimbatm] [status=deprecated]
Dockerfile
38
star
93

nix-ts-mode

An Emacs major mode for editing Nix expressions, powered by tree-sitter.
Emacs Lisp
37
star
94

builtwithnix.org

Share the love of Nix [maintainer=@zimbatm]
HTML
37
star
95

nixpkgs-terraform-providers-bin

auto-updating terraform providers for nix [maintainer=@zimbatm]
Nix
35
star
96

nixops-libvirtd

NixOps libvirtd backend plugin [maintainer=@AmineChikhaoui]
Python
34
star
97

flake-nimble

Nimble packages Nix flake [maintainer=?]
Nix
33
star
98

authentik-nix

Nix flake with package, NixOS module and basic VM test for authentik. Trying to provide an alternative deployment mode to the officially supported docker-compose approach. Not affiliated with or officially supported by the authentik project [maintainer=@willibutz]
Nix
31
star
99

flake-firefox-nightly

this provides an auto-updating flake for firefox-nightly-bin from nixpkgs-mozilla [maintainer=@colemickens, @Artturin]
Nix
27
star
100

dreampkgs

A collection of software packages managed with dream2nix [maintainer=@DavHau]
Nix
26
star