---
name: "nix3-flake-init"
section: "1"
platform: "linux"
package: "nix-bin"
version: "2.26.3+dfsg-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/nix3-flake-init"
---

# nix3-flake-init(1)

create a flake in the current directory from a template

**Warning** \
 This program is **experimental** ⟨@docroot@/development/experimental-features.md#xp-feature-nix-command⟩ and its interface is subject to change.

## Name

`nix flake init` - create a flake in the current directory from a template

## Synopsis

`nix flake init` \[*option*…\]

## Examples

- •

  Create a flake using the default template:

```
# nix flake init
```

- •

  List available templates:

```
# nix flake show templates
```

- •

  Create a flake from a specific template:

```
# nix flake init -t templates#simpleContainer
```

## Description

This command creates a flake in the current directory by copying the files of a template. It will not overwrite existing files. The default template is `templates#templates.default`, but this can be overridden using `-t`.

## Template definitions

A flake can declare templates through its `templates` output attribute. A template has the following attributes:

- •

  `description`: A one-line description of the template, in CommonMark syntax.

- •

  `path`: The path of the directory to be copied.

- •

  `welcomeText`: A block of markdown text to display when a user initializes a new flake based on this template.

Here is an example:

```
outputs = { self }: {
  templates.rust = {
    path = ./rust;
    description = "A simple Rust/Cargo project";
    welcomeText = ''
      # Simple Rust/Cargo Template
      ## Intended usage
      The intended usage of this flake is...
      ## More info
      - [Rust language](https://www.rust-lang.org/)
      - [Rust on the NixOS Wiki](https://wiki.nixos.org/wiki/Rust)
      - ...
    '';
  };
  templates.default = self.templates.rust;
}
```

## Options

- •

  `--template` ⟨#opt-template⟩ / `-t` *template*

-

  The template to use.

### Common evaluation options

- •

  `--arg` ⟨#opt-arg⟩ *name* *expr*

-

  Pass the value *expr* as the argument *name* to Nix functions.

- •

  `--arg-from-file` ⟨#opt-arg-from-file⟩ *name* *path*

-

  Pass the contents of file *path* as the argument *name* to Nix functions.

- •

  `--arg-from-stdin` ⟨#opt-arg-from-stdin⟩ *name*

-

  Pass the contents of stdin as the argument *name* to Nix functions.

- •

  `--argstr` ⟨#opt-argstr⟩ *name* *string*

-

  Pass the string *string* as the argument *name* to Nix functions.

- •

  `--debugger` ⟨#opt-debugger⟩

-

  Start an interactive environment if evaluation fails.

- •

  `--eval-store` ⟨#opt-eval-store⟩ *store-url*

-

  The URL of the Nix store ⟨@docroot@/store/types/index.md#store-url-format⟩ to use for evaluation, i.e. to store derivations (`.drv` files) and inputs referenced by them.

- •

  `--impure` ⟨#opt-impure⟩

-

  Allow access to mutable paths and repositories.

- •

  `--include` ⟨#opt-include⟩ / `-I` *path*

-

  Add *path* to search path entries used to resolve lookup paths ⟨@docroot@/language/constructs/lookup-path.md⟩

-

  This option may be given multiple times.

-

  Paths added through `-I` take precedence over the `nix-path` configuration setting ⟨@docroot@/command-ref/conf-file.md#conf-nix-path⟩ and the `NIX_PATH` environment variable ⟨@docroot@/command-ref/env-common.md#env-NIX\_PATH⟩\\c .

- •

  `--override-flake` ⟨#opt-override-flake⟩ *original-ref* *resolved-ref*

-

  Override the flake registries, redirecting *original-ref* to *resolved-ref*.

### Logging-related options

- •

  `--debug` ⟨#opt-debug⟩

-

  Set the logging verbosity level to ‘debug’.

- •

  `--log-format` ⟨#opt-log-format⟩ *format*

-

  Set the format of log output; one of `raw`, `internal-json`, `bar` or `bar-with-logs`.

- •

  `--print-build-logs` ⟨#opt-print-build-logs⟩ / `-L`

-

  Print full build logs on standard error.

- •

  `--quiet` ⟨#opt-quiet⟩

-

  Decrease the logging verbosity level.

- •

  `--verbose` ⟨#opt-verbose⟩ / `-v`

-

  Increase the logging verbosity level.

### Miscellaneous global options

- •

  `--help` ⟨#opt-help⟩

-

  Show usage information.

- •

  `--offline` ⟨#opt-offline⟩

-

  Disable substituters and consider all previously downloaded files up-to-date.

- •

  `--option` ⟨#opt-option⟩ *name* *value*

-

  Set the Nix configuration setting *name* to *value* (overriding `nix.conf`).

- •

  `--refresh` ⟨#opt-refresh⟩

-

  Consider all previously downloaded files out-of-date.

- •

  `--repair` ⟨#opt-repair⟩

-

  During evaluation, rewrite missing or corrupted files in the Nix store. During building, rebuild missing or corrupted store paths.

- •

  `--version` ⟨#opt-version⟩

-

  Show version information.

  **Note**

  See `man nix.conf` ⟨@docroot@/command-ref/conf-file.md#command-line-flags⟩ for overriding configuration settings with command line flags.
