blitz_api/devenv.nix

144 lines
3.7 KiB
Nix
Raw Permalink Normal View History

2025-02-14 17:07:16 +01:00
{
pkgs,
lib,
config,
inputs,
...
}: let
2025-02-16 20:24:23 +01:00
# Datadir is different for testing and local development
# Datadir is cleared for each test run, but not for development
dataDir =
if !config.devenv.isTesting
then "$(pwd)/test_env_data"
else "/tmp/bapi_test_env";
setupString =
if !config.devenv.isTesting
# if we are not testing, execute setup
then ''
if [ ! -d ${dataDir} ]; then
echo "Setup Script: Creating directory ${bitcoinDataDir}"
mkdir -p ${bitcoinDataDir}
echo "Setup Script: Creating directory ${lndDataDir}"
mkdir -p ${lndDataDir}
echo "Setup Script: Creating directory ${clnDataDir}"
mkdir -p ${clnDataDir}
fi
if [ -f ${bitcoinConfFilePath} ]; then
echo "Setup Script: Deleting ${bitcoinConfFilePath}"
rm ${bitcoinConfFilePath}
fi
''
# if we are testing, clear the temp data
else ''
if [ -d ${dataDir} ]; then
echo "Setup Script: Deleting contents of ${dataDir}"
# check if path starts with /tmp/bapi, just to make sure
if [[ ${dataDir} == /tmp/bapi* ]]; then
echo "Setup Script: Deleting contents of ${dataDir}"
rm -rf ${dataDir}/*
echo "Setup Script: Creating directory ${bitcoinDataDir}"
mkdir -p ${bitcoinDataDir}
echo "Setup Script: Creating directory ${lndDataDir}"
mkdir -p ${lndDataDir}
echo "Setup Script: Creating directory ${clnDataDir}"
mkdir -p ${clnDataDir}
else
echo "Setup Script: Skipping deletion as ${dataDir} does not start with /tmp/bapi"
fi
fi
'';
2025-02-14 17:07:16 +01:00
bitcoinConfigText = builtins.readFile ./scripts/bitcoin_regtest.conf;
bitcoinDataDir = "${dataDir}/bitcoin";
bitcoinConfFilePath = "${bitcoinDataDir}/bitcoin.conf";
lndDataDir = "${dataDir}/lnd";
clnDataDir = "${dataDir}/cln";
pkgs-unstable = import inputs.nixpkgs-unstable {inherit (pkgs.stdenv) system;};
2025-02-14 17:07:16 +01:00
in {
2025-02-16 20:24:23 +01:00
languages = {
python = {
enable = true;
# 3.11 is default on RaspiBlitz 1.12
package = pkgs-unstable.python312;
uv = {
2025-02-16 20:24:23 +01:00
enable = true;
sync.enable = true;
package = pkgs-unstable.uv;
2025-02-16 20:24:23 +01:00
};
};
};
2025-02-14 17:07:16 +01:00
# https://devenv.sh/packages/
2025-02-16 20:24:23 +01:00
packages = with pkgs-unstable; [
2025-02-14 17:07:16 +01:00
stdenv.cc.cc
pyright
isort
2025-02-14 17:07:16 +01:00
alejandra
statix
ruff
redis
nushell
typos
typos-lsp
2025-02-14 17:07:16 +01:00
2025-02-16 20:24:23 +01:00
bitcoind
lnd
clightning
2025-02-14 17:07:16 +01:00
];
# blitz api uses its own .env file and is not applicable for
2025-02-16 20:24:23 +01:00
# the devenv
dotenv.disableHint = true;
2025-02-14 17:07:16 +01:00
# https://devenv.sh/processes/
processes = {
bitcoind.exec = ''
2025-02-16 20:24:23 +01:00
${setupString}
2025-02-14 17:07:16 +01:00
touch ${bitcoinConfFilePath}
echo "${bitcoinConfigText}" >> ${bitcoinConfFilePath}
bitcoind -regtest -datadir=${bitcoinDataDir} -conf=${bitcoinConfFilePath}
'';
lnd.exec = ''
sleep 3
lnd --lnddir=${lndDataDir} \
--bitcoin.node=bitcoind \
--bitcoin.regtest \
--bitcoind.dir=${bitcoinDataDir}
'';
cln.exec = ''
sleep 3
lightningd \
--bind-addr=127.0.0.1:9736 \
2025-02-14 17:07:16 +01:00
--regtest \
--lightning-dir=${clnDataDir} \
--bitcoin-datadir=${bitcoinDataDir}
'';
redis_updater.exec = ''
sleep 3
nu ./scripts/fake_blitz_scripts/update_redis_values.nu
'';
celery_worker.exec = ''
uv run celery -A app.celery_app worker --loglevel=info
'';
celery_beat.exec = ''
uv run celery -A app.celery_app beat --loglevel=info
'';
2025-02-14 17:07:16 +01:00
};
services = {
redis.enable = true;
};
2025-02-16 20:24:23 +01:00
enterShell = ''
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${
with pkgs-unstable;
lib.makeLibraryPath [stdenv.cc.cc.lib]
}"
'';
2025-02-14 17:07:16 +01:00
}