This directory contains docs and helper scripts for developing and debugging:
dev.sh
: misc dev helpersdev-features.sh
: helpers for developing specific nix-bitcoin features, like servicestopics
features specific topicsdev-scenarios.nix
: extra test scenarios used in the above scripts
See also: test/README.md
There are two ways to run a dev shell:
This starts a shell with test/run-tests.sh
and
the scripts in dir helper
added to PATH
.
This is an opinionated, direnv-based dev env, optimized for developer experience.
dev-env/create.sh
creates a git repo with the following contents:
- Dir
src
which contains the nix-bitcoin repo - Dir
bin
for helper scripts - File
scenarios.nix
for custom test scenarios - File
.envrc
that defines a direnv environment, mainly for adding nix-bitcoin and helper scripts toPATH
-
Install direnv.
If you use NixOS (and Bash as the default shell), just add the following to your system config:environment.systemPackages = [ pkgs.direnv ]; programs.bash.interactiveShellInit = '' eval "$(direnv hook bash)" '';
-
Create the dev env:
# Set up a dev environment in dir ~/dev/nix-bitcoin. # The dir is created automatically. ./dev-env/create.sh ~/dev/nix-bitcoin cd ~/dev/nix-bitcoin # Enable direnv direnv allow
-
Optional: Editor integration
- Add envrc support to your editor
- Setup your editor so you can easily execute lines or paragraphs from a shell script
file in a shell.
This simplifies using dev helper scripts like./dev.sh
.
# The direnv is automatically activated when visiting any subdir of ~/dev/nix-bitcoin
cd ~/dev/nix-bitcoin
ls -al . bin lib
# The direnv config file
cat .envrc
# You can use this file to define extra scenarios
cat scenarios.nix
# Binary `dev-run-tests` runs nix-bitcoin's `run-tests.sh` with extra scenarios from ./scenarios.nix
# Example:
# Run command `nodeinfo` in `myscenario` (defined in ./scenarios.nix) via a container
dev-run-tests -s myscenario container --run c nodeinfo
# Equivalent (shorthand)
te -s myscenario container --run c nodeinfo
# Run the tests for `myscenario` in a VM
te -s myscenario
# Start an interactive shell inside a VM
te -s myscenario vm
See also: test/README.md
It's easiest to use an existing service as a template:
- electrs.nix: a basic service
- clightning.nix: simple, but covers a few more features.
(Acli
binary and a runtime-composed config to include secrets.) - rtl.nix: includes a custom package, defined in pkgs/rtl.
Most other services use packages that are already included in nixpkgs.
- flake.nix: update
nixpkgs.url
- cirrus.yml: update toplevel container -> image attribute
- examples/configuration.nix: update
system.stateVersion
- examples/flakes/flake.nix: update
inputs.nix-bitcoin.url
- Treewide: check if any
TODO-EXTERNAL
comments can be resolved