Generate Nix packages from URLs with hash prefetching, dependency inference, license detection, and more [maintainer=@figsoda]
gonixrustcargopythontemplatepoetrynixpkgs
Key Metrics
Star Growth
Stars
1.4k
Forks
43
Weekly Growth
—
Issues
21
5001k
Jan 2023Aug 2023Mar 2024Oct 2024May 2025Dec 2025Jul 2026
Artifactscrates.iocargo add nix-init
README
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:
nix run github:nix-community/nix-init -- --help
or if you don't have flakes enabled:
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 <URL> Specify the URL
--rev <REV> Specify the tag or revision
-S, --submodules[=<SUBMODULES>] Always fetch submodules when possible [possible values: true, false]
-V, --version [<VERSION>] Specify the version of the package, or print nix-init version if no arguments are present
--pname <PNAME> Specify the pname
--builder <BUILDER> Specify the builder
--cargo-vendor <CARGO_VENDOR> Specify how the cargo dependencies are vendored [possible values: fetchCargoVendor, importCargoLock]
-y, --overwrite[=<OVERWRITE>] Always overwrite files [possible values: true, false]
--headless Don't prompt for anything (requires --url)
-n, --nixpkgs <NIXPKGS> Path to nixpkgs (in nix)
-C, --commit[=<COMMIT>] Commit the changes if the output path is name-based (RFC 140) [possible values: true, false]
-c, --config <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
# ~/.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 = "<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"]