# nix-init
[](https://matrix.to/#/#nix-init:nixos.org)
[](https://github.com/nix-community/nix-init/releases)
[](https://crates.io/crates/nix-init)
[](https://www.mozilla.org/en-US/MPL/2.0)
[](https://nixbot.nix-community.org/repos/github/nix-community/nix-init)
Generate Nix packages from URLs
> Note: It is likely that the generated package will not work without some
> tweaks, also remember to double check the license and description even if it
> does work
- Hash prefetching powered by [nurl] with support for `cargoHash` and
`vendorHash`
- Dependency inference for Rust, Go, and Python projects
- Interactive prompts with fuzzy tab completions
- License detection

## Installation
The latest release of nix-init is packaged in nixpkgs and kept up to date on the
unstable branches

If you want to use a more recent snapshot of nix-init, it is also available as a
flake. The following command is equivalent to running `nix-init --help`:
```bash
nix run github:nix-community/nix-init -- --help
```
or if you don't have flakes enabled:
```bash
nix run --extra-experimental-features "flakes nix-command" github:nix-community/nix-init -- --help
```
## Usage
```
Usage: nix-init [OPTIONS] [OUTPUT]
Arguments:
[OUTPUT] The path or directory to output the generated file to
Options:
-u, --url Specify the URL
--rev Specify the tag or revision
-S, --submodules[=] Always fetch submodules when possible [possible values: true, false]
-V, --version [] Specify the version of the package, or print nix-init version if no arguments are present
--pname Specify the pname
--builder Specify the builder
--cargo-vendor Specify how the cargo dependencies are vendored [possible values: fetchCargoVendor, importCargoLock]
-y, --overwrite[=] Always overwrite files [possible values: true, false]
--headless Don't prompt for anything (requires --url)
-n, --nixpkgs Path to nixpkgs (in nix)
-C, --commit[=] Commit the changes if the output path is name-based (RFC 140) [possible values: true, false]
-c, --config Specify the config file
-h, --help Print help (see more with '--help')
```
### Supported builders
- `stdenv.mkDerivation` and `stdenvNoCC.mkDerivation`
- `buildRustPackage`
- `buildPythonApplication` and `buildPythonPackage`
- `buildGoModule`
- `buildNpmPackage`
### Supported fetchers
- `fetchCrate`
- `fetchFromGitHub`
- `fetchFromGitLab`
- `fetchFromGitea`
- `fetchPypi`
- All other fetchers supported by [nurl] are also supported, you just have to
manually input the tag/revision of the package
## Configuration
nix-init will try to find `nix-init/config.toml` under XDG configuration
directories
```toml
# ~/.config/nix-init/config.toml
# maintainers that will get added to the package meta
maintainers = ["figsoda"]
# path to nixpkgs (in nix), equivalent to `--nixpkgs`
nixpkgs = "" # use the nixpkgs from channels (default)
# nixpkgs = 'builtins.getFlake "nixpkgs"' # use the nixpkgs from the flake registry
# commit the changes if the output path is name-based (RFC 140)
# see https://github.com/NixOS/nixpkgs/tree/master/pkgs/by-name for more information
commit = true
# access tokens to access private repositories and avoid rate limits
[access-tokens]
"github.com" = "ghp_blahblahblah..."
"gitlab.com".command = ["secret-tool", "or", "whatever", "you", "use"]
"gitlab.gnome.org".file = "/path/to/api/token"
# if unspecified, nix-init tries to format the output file with nixfmt if it's found in PATH
# the formatter should take a Nix file from stdin and output the formatted file to stdout
[format]
command = ["alejandra"]
```
## Changelog
See [CHANGELOG.md](CHANGELOG.md)
[nurl]: https://github.com/nix-community/nurl