https://github.com/snowfallorg/flake
Simplify Nix Flakes on the command line.
https://github.com/snowfallorg/flake
Last synced: about 1 year ago
JSON representation
Simplify Nix Flakes on the command line.
- Host: GitHub
- URL: https://github.com/snowfallorg/flake
- Owner: snowfallorg
- License: other
- Created: 2022-10-30T18:14:51.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-05-25T22:20:56.000Z (about 2 years ago)
- Last Synced: 2025-03-24T18:52:28.624Z (over 1 year ago)
- Language: Shell
- Size: 102 KB
- Stars: 108
- Watchers: 3
- Forks: 5
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Snowfall Flake
> Simplified Nix Flakes on the command line.
## Installation
### Nix Profile
You can install this package imperatively with the following command.
```bash
nix profile install github:snowfallorg/flake
```
### Nix Configuration
You can install this package by adding it as an input to your Nix Flake.
```nix
{
description = "My system flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-22.05";
unstable.url = "github:nixos/nixpkgs/nixos-unstable";
# Snowfall Lib is not required, but will make configuration easier for you.
snowfall-lib = {
url = "github:snowfallorg/lib";
inputs.nixpkgs.follows = "nixpkgs";
};
snowfall-flake = {
url = "github:snowfallorg/flake";
# Flake requires some packages that aren't on 22.05, but are available on unstable.
inputs.nixpkgs.follows = "unstable";
};
};
outputs = inputs:
inputs.snowfall-lib.mkFlake {
inherit inputs;
src = ./.;
overlays = with inputs; [
# Use the overlay provided by this flake.
snowfall-flake.overlay
# There is also a named overlay, though the output is the same.
snowfall-flake.overlays."package/flake"
];
};
}
```
If you've added the overlay from this flake, then in your system configuration you
can add the `snowfallorg.flake` package.
```nix
{ pkgs }:
{
environment.systemPackages = with pkgs; [
snowfallorg.flake
];
}
```
## Usage
### `flake new`
Create new projects from flake templates.
```bash
# Create a new flake and directory my-project with the default template.
flake new my-project
# Create a new flake and directory my-project with a custom template.
flake new my-project --template github:snowfallorg/templates#package
# Create a new flake and directory my-project with a template selected from a list.
flake new my-project --pick
```
### `flake init`
Initialize a flake in an existing project.
```bash
# Create a new flake in the current directory with the default template.
flake init
# Create a new flake in the current directory with a custom template.
flake init --template github:snowfallorg/templates#package
# Create a new flake in the current directory with a template selected from a list.
flake init --pick
```
### `flake dev`
Run development shells.
```bash
# Open the default development shell of the flake in the current directory.
flake dev
# Open a specific development shell of the flake in the current directory.
flake dev my-shell
# Open a development shell from a specific flake.
flake dev github:snowfall/dotbox#dotbox
# Pick a development shell from the current directory.
flake dev --pick
# Pick a development shell from a specific flake.
flake dev github:snowfall/dotbox --pick
```
### `flake run`
Run apps from Nix Flakes.
```bash
# Run the default app of the flake in the current directory.
flake run
# Run a specific app of the flake in the current directory.
flake run my-package
# Run a specific app from a specific flake.
flake run github:snowfall/dotbox#dotbox
# Pick an app to run from the current directory.
flake run --pick
# Pick an app to run from a specific flake.
flake run github:snowfall/dotbox --pick
```
### `flake build`
Build packages from Nix Flakes.
```bash
# Build the default package of the flake in the current directory.
flake build
# Build a specific package of the flake in the current directory.
flake build my-package
# Build a package from a specific flake.
flake build github:snowfall/dotbox#dotbox
# Pick a package to build from the current directory.
flake build --pick
# Pick a package to build from a specific flake.
flake build github:snowfall/dotbox --pick
```
### `flake switch`
Rebuild and switch system configuration with support for both NixOS and nix-darwin.
```bash
# Switch to configuration with the same hostname from the flake in the current directory.
flake switch
# Switch to specific configuration from the flake in the current directory.
flake switch my-system
# Pick a configuration to switch to from the flake in the current directory.
flake switch --pick
# Switch to configuration from a specific flake.
flake switch github:jakehamilton/config#bismuth
# Pick configuration from a specific flake.
flake switch github:jakehamilton/config --pick
```
### `flake test`
Test a system configuration
```bash
flake test
DESCRIPTION
Test a system configuration with support for both NixOS and nix-darwin.
USAGE
$ flake test [options]
OPTIONS
--help, -h Show this help message
--debug Show debug messages
--show-trace Show a trace when a Nix command fails
EXAMPLES
# Test a configuration with the same hostname from the flake in the current directory.
$ flake test
# Test a specific configuration from the flake in the current directory.
$ flake test my-system
# Pick a configuration to test from the flake in the current directory.
$ flake test --pick
# Test a configuration from a specific flake.
$ flake test github:jakehamilton/config#bismuth
# Pick configuration from a specific flake.
$ flake test github:jakehamilton/config --pick
```
### `flake boot`
Update the system's bootable generations.
```bash
flake boot
DESCRIPTION
Set a NixOS configuration as the bootable system.
USAGE
$ flake boot [options]
OPTIONS
--help, -h Show this help message
--debug Show debug messages
--show-trace Show a trace when a Nix command fails
EXAMPLES
# Boot a configuration with the same hostname from the flake in the current directory.
$ flake boot
# Boot a specific configuration from the flake in the current directory.
$ flake boot my-system
# Pick a configuration to boot from the flake in the current directory.
$ flake boot --pick
# Boot a configuration from a specific flake.
$ flake boot github:jakehamilton/config#bismuth
# Pick configuration from a specific flake.
$ flake boot github:jakehamilton/config --pick
```
### `flake show`
Show flake outputs.
```bash
flake show
DESCRIPTION
Show the outputs of a Nix Flake.
USAGE
$ flake show [options]
OPTIONS
--help, -h Show this help message
--debug Show debug messages
--show-trace Show a trace when a Nix command fails
EXAMPLES
# Show outputs from the flake in the current directory.
$ flake show
# Show outputs from a specific flake.
$ flake show github:jakehamilton/config
```
### `flake update`
Update a Nix Flake's inputs.
```bash
# Update all flake inputs.
flake update
# Update one or more specific inputs.
flake update nixpkgs snowfall-lib
# Pick inputs to update from a list.
flake update --pick
```
### `flake build-`
Build a NixOS, nix-darwin, and other types of systems.
> See `flake build-system --help` for more information.
```bash
# Build the system with the same hostname from the flake in the current directory.
flake build-system
# Build the NixOS system with the same hostname from the flake in the current directory.
flake build-nixos
# Build a specific nix-darwin system from the flake in the current directory.
flake build-darwin my-system
# Build the system with the same hostname from a specific flake.
flake build-system github:jakehamilton/config#bismuth
# Pick and build a system from the flake in the current directory
flake build-system --pick
# Pick and build a system from a specific flake.
flake build-system github:jakehamilton/config --pick
# Build a specific ISO from the flake in the current directory.
flake build-iso my-iso-system
```
### `flake option`
Show NixOS options from Nix Flakes.
```bash
flake option
DESCRIPTION
Show NixOS options from Nix Flakes.
USAGE
flake option [option] [options]
flake option [option] [options]
flake option [option] [options]
OPTIONS
--pick, -p Pick options from a list
--help, -h Show this help message
--debug Show debug messages
--show-trace Show a trace when a Nix command fails
EXAMPLES
# Show options for the current host in the current directory.
$ flake option
# Show options for a specific host.
$ flake option my-host
# Show a specific option for a specific host.
$ flake option my-host services.openssh
# Show options for a flake's host.
$ flake option github:jakehamilton/config#bismuth
# Show a specific option for a flake's host.
$ flake option github:jakehamilton/config#bismuth services.openssh
# Pick options for the flake in the current directory.
$ flake option --pick
# Pick options from a specific flake.
$ flake option github:jakehamilton/config --pick
```