Lock files
Generate lock file
As mentioned, a lock file must be generated in advance:
That command looks for deps.edn
files in your project and generates a
deps-lock.json
file in the current directory. Remember to re-run it if you
update your dependencies.
By default all dependencies in all deps.edn
files are included. It is possible
to exclude certain deps.edn
files and/or aliases. To see the full list of
options of deps-lock
run:
It is possible to add the dependencies to the nix store during the lock file
generation. Internally we are invoking the nix store add-path
command. By
default, it's disabled because that command is relatively slow. To add the
dependencies to the nix store, set the environment variable
CLJNIX_ADD_NIX_STORE
to true, e.g.:
Ignore deps.edn files
Sometimes it could be useful to ignore some deps.edn
files, to do that, just
pass the list of files to ignore the the deps-lock
command:
There is also a --deps-include
option, to include only certain files.
Ignore aliases
To exclude the dependencies defined in some aliases use the --alias-exclude
option:
There is also a --alias-include
option, to include only certain aliases.
Git dependencies in private/ssh repositories
In order to use the nix builtin fetcher on a git dependency, add a key-value
:clj-nix.git/fetch :builtins.fetchTree
to the dependency in deps.edn
, e.g.
{:deps {private/dependency {:git/url "git@private.host:secret/repo.git"
:git/sha "0000000000000000000000000000000000000000"
:clj-nix.git/fetch :builtins.fetchTree}}}
This should work well in many cases where a repository can be accessed with the help of ssh-agent or other credential mechanisms, that nix builtin fetch supports.
The trade-off (and reason that's not the default) is, that the
dependency will be fetched at evaluation time, causing downloads even
during --dry-run
; Pending resolution of an issue in nix.
Babashka dependencies
Dependencies on bb.edn
files can be added to the deps-lock.json
file:
Leiningen
Leiningen projects are supported. Use the --lein
option to add the
project.clj
dependencies to the lock file. This option can be combined with
ignored files:
By default, all custom profiles (if any) are merged to download the dependencies.
This can be customized with the --lein-profiles
option.
Keep in mind that deps-lock
command is not optimized for Leiningen projects,
it will download all the maven dependencies every time we generate the lock
file. For that reason, it is recommended to add a deps.edn
file with the same
dependencies to Leiningen projects. That way, we reduce the number of network
requests when the deps-lock
command is invoked.
There are projects to automatically generate a deps.edn
file from a Leiningen
project (e.g.: depify)
Warning
Leiningen projects must define a buildCommand
in the mkCljBin
function. The default build command assumes a deps.edn
project.