Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/divnix/std
A DevOps framework for the SDLC with the power of Nix and Flakes. Good for keeping deadlines!
https://github.com/divnix/std
devops nix nix-flakes sdlc
Last synced: 5 days ago
JSON representation
A DevOps framework for the SDLC with the power of Nix and Flakes. Good for keeping deadlines!
- Host: GitHub
- URL: https://github.com/divnix/std
- Owner: divnix
- Created: 2021-11-14T10:56:16.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-08-06T14:44:27.000Z (4 months ago)
- Last Synced: 2024-08-07T12:37:36.741Z (4 months ago)
- Topics: devops, nix, nix-flakes, sdlc
- Language: Nix
- Homepage: https://std.divnix.com
- Size: 6.47 MB
- Stars: 380
- Watchers: 15
- Forks: 41
- Open Issues: 35
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSES/BSD-3-Clause.txt
- Codeowners: .github/CODEOWNERS
- Roadmap: ROADMAP.md
Awesome Lists containing this project
- awesome-github-repos - divnix/std - A DevOps framework for the SDLC with the power of Nix and Flakes. Good for keeping deadlines! (Nix)
- awesome-nix - Standard - An opinionated Nix Flakes framework to keep Nix code in large projects organized, accompanied by a friendly CLI/TUI optized for DevOps scenarios. (DevOps / Discovery)
README
Standard
Ship today.
---
[Standard][std] is a nifty DevOps framework that
enables an efficient Software Development Life Cycle (SDLC) with the power of [Nix][nix] via [Flakes][nix-flakes].It organizes and disciplines your Nix and thereby speeds you up.
It also comes with great horizontal integrations of high
quality vertical DevOps tooling crafted by the [Nix Ecosystem][ecosystem].---
[![Support room on Matrix](https://img.shields.io/matrix/std-nix:matrix.org?server_fqdn=matrix.org&style=for-the-badge)](https://matrix.to/#/#std-nix:matrix.org)
###### Stack
[![Yants](https://img.shields.io/badge/DivNix-Yants-green?style=for-the-badge&logo=NixOS)](https://github.com/divnix/yants)
[![DMerge](https://img.shields.io/badge/DivNix-DMerge-yellow?style=for-the-badge&logo=NixOS)](https://github.com/divnix/data-merge)
[![NoSys](https://img.shields.io/badge/DivNix-NoSys-orange?style=for-the-badge&logo=NixOS)](https://github.com/divnix/nosys)
[![Blank](https://img.shields.io/badge/DivNix-Blank-grey?style=for-the-badge&logo=NixOS)](https://github.com/divnix/blank)
[![Incl](https://img.shields.io/badge/DivNix-Incl-blue?style=for-the-badge&logo=NixOS)](https://github.com/divnix/incl)
[![Paisano](https://img.shields.io/badge/DivNix-Paisano-red?style=for-the-badge&logo=NixOS)](https://github.com/divnix/paisano)###### Integrations
[![Numtide Devshell](https://img.shields.io/badge/Numtide-Devshell-yellowgreen?style=for-the-badge&logo=NixOS)](https://github.com/numtide/devshell)
[![Numtide Treefmt](https://img.shields.io/badge/Numtide-Treefmt-yellow?style=for-the-badge&logo=NixOS)](https://github.com/numtide/treefmt)
[![Nlewo Nix2Container](https://img.shields.io/badge/Nlewo-Nix2Container-blue?style=for-the-badge&logo=NixOS)](https://github.com/nlewo/nix2container)
[![Fluidattacks Makes](https://img.shields.io/badge/Fluidattacks-Makes-blue?style=for-the-badge&logo=NixOS)](https://github.com/fluidattacks/makes)
[![Astro MicroVM](https://img.shields.io/badge/Astro-MicroVM-blue?style=for-the-badge&logo=NixOS)](https://github.com/astro/microvm.nix)
[![HerculesCI FlakeParts](https://img.shields.io/badge/HerculesCI-FlakeParts-lightgrey?style=for-the-badge&logo=NixOS)](https://github.com/hercules-ci/flake-parts)
[![Cachix Cache](https://img.shields.io/badge/Cachix-Cache-blue?style=for-the-badge&logo=NixOS)](https://github.com/cachix)
[![Nix-Community Nixago](https://img.shields.io/badge/NixCommunity-Nixago-yellow?style=for-the-badge&logo=NixOS)](https://github.com/nix-community/nixago)###### The Standard Story
_Once_ your `nix` code has evolved into a giant
ball of spaghetti and nobody else except a few
select members of your tribe can still read it
with ease; and _once_ to the rest of your colleagues
it has grown into an impertinence, _then_ `std`
brings the overdue order to your piece of art
through a well-defined folder structure and
disciplining generic interfaces.With `std`, you'll learn how to organize your `nix`
flake outputs ('**Targets**') into **Cells** and
**Cell Blocks** — folded into a useful
**CLI & TUI** to also make the lives of your
colleagues easier.Through more intuition and less documentation,
your team and community will finally find a
_canonical_ answer to the everlasting question:
_What can I **do** with this repository?_###### The Standard NixOS Story (in case you wondered)
_Once_ you got fed up with `divnix/digga`
or a disorganized personal configuration,
please head straight over to [`divnix/hive`][hive]
and join the chat, there. It's work in progress.
But hey! It means: we can progress together!---
## Getting Started
```nix
# flake.nix
{
description = "Description for the project";inputs = {
std.url = "github:divnix/std";
nixpkgs.follows = "std/nixpkgs";
};outputs = { std, self, ...} @ inputs: std.growOn {
inherit inputs;
# 1. Each folder inside `cellsFrom` becomes a "Cell"
# Run for example: 'mkdir nix/mycell'
# 2. Each .nix or /default.nix within it becomes a "Cell Block"
# Run for example: '$EDITOR nix/mycell/packages.nix' - see example content below
cellsFrom = ./nix;
# 3. Only blocks with these names [here: "packages" & "shells"] are picked up by Standard
# It's a bit like the output type system of your flake project (hint: CLI & TUI!!)
cellBlocks = with std.blockTypes; [
(installables "packages" {ci.build = true;})
(devshells "shells" {ci.build = true;})
];
}
# 4. Run 'nix run github:divnix/std'
# 'growOn' ... Soil:
# - here, compat for the Nix CLI
# - but can use anything that produces flake outputs (e.g. flake-parts or flake-utils)
# 5. Run: nix run .
{
devShells = std.harvest self ["mycell" "shells"];
packages = std.harvest self ["mycell" "packages"];
};
}# nix/mycell/packages.nix
{inputs, cell}: {
inherit (inputs.nixpkgs) hello;
default = cell.packages.hello;
}
```## This Repository
This repository combines the above mentioned stack components into the ready-to-use Standard framework.
It adds a curated collection of [**Block Types**][blocktypes] for DevOps use cases.
It further dogfoods itself and implements utilities in its own [**Cells**][cells].###### Dogfooding
Only renders in the [Documentation][documentation].
```nix
{{#include ../dogfood.nix}}
```_That's it. `std.grow` is a "smart" importer of your `nix` code and is designed to keep boilerplate at bay. In the so called "Soil" compatibility layer, you can do whatever your heart desires. For example put `flake-utils` or `flake-parts` patterns here. Or, as in the above example, just make your stuff play nicely with the Nix CLI._
> **TIP:**
>
> 1. Clone this repo `git clone https://github.com/divnix/std.git`
> 2. Install `direnv` & inside the repo, do: `direnv allow` (first time takes a little longer)
> 3. Run the TUI by entering `std` (first time takes a little longer)
>
> What can I do with this repository?
>## Documentation
The [Documentation][documentation] is here.
And here is the [Book][book], a very good walk-trough. Start here!
###### Video Series
- [Std - Introduction](https://www.loom.com/share/cf9d5d1a10514d65bf6b8287f7ddc7d6)
- [Std - Cell Blocks Deep Dive](https://www.loom.com/share/04fa1d578fd044059b02c9c052d87b77)
- [Std - Operables & OCI](https://www.loom.com/share/27d91aa1eac24bcaaaed18ea6d6d03ca)
- [Std - Nixago](https://www.loom.com/share/5c1badd77ab641d3b8e256ddbba69042)###### Examples in the Wild
This [GitHub search query](https://github.com/search?q=%22divnix%2Fstd%22+path%3Aflake.nix&type=Code) holds a pretty good answer.
## Why?
- [Why `nix`?][why-nix]
- [Why `std`?][why-std]## Contributions
Please enter the contribution environment:
```console
direnv allow || nix develop -c "$SHELL"
```## Licenses
_What licenses are used? → [`./.reuse/dep5`][licensing]._
_And the usual copies? → [`./LICENSES`][licenses]._
---
[cells]: https://github.com/divnix/std/tree/main/cells
[documentation]: https://std.divnix.com
[book]: https://jmgilman.github.io/std-book/
[licensing]: https://github.com/divnix/std/blob/main/.reuse/dep5
[licenses]: https://github.com/divnix/std/tree/main/LICENSES
[blocktypes]: https://github.com/divnix/std/blob/main/src/blocktypes.nix
[nix-flakes]: https://nixos.wiki/wiki/Flakes
[nix]: https://nixos.org/manual/nix/unstable
[std]: https://github.com/divnix/std
[why-std]: https://std.divnix.com/explain/why-std.html
[why-nix]: https://std.divnix.com/explain/why-nix.html
[ecosystem]: https://discourse.nixos.org
[hive]: https://github.com/divnix/hive