From e124bff57296d7654a1831b977d1e2a0d474aca0 Mon Sep 17 00:00:00 2001 From: niftynei Date: Tue, 23 Jun 2026 12:39:12 +0300 Subject: [PATCH 1/5] nix shells: add uv to packages Changelog-Added: nix: development shells now include `uv` for Python dependency and command execution. --- nix/shells.nix | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/nix/shells.nix b/nix/shells.nix index bb3588c28b3a..c1598223f1d4 100644 --- a/nix/shells.nix +++ b/nix/shells.nix @@ -9,12 +9,19 @@ }: { devShells = { - default = pkgs.mkShell { inputsFrom = [ config.packages.default ]; }; - postgres = pkgs.mkShell { inputsFrom = [ config.packages.cln-postgres ]; }; + default = pkgs.mkShell { + inputsFrom = [ config.packages.default ]; + packages = [ pkgs.uv ]; + }; + postgres = pkgs.mkShell { + inputsFrom = [ config.packages.cln-postgres ]; + packages = [ pkgs.uv ]; + }; rust = pkgs.craneLib.devShell { checks = { inherit (self.checks.${system}) rust; }; + packages = [ pkgs.uv ]; }; }; }; From 4a60c828aed25f201df0d71490bf8ef0d205bd62 Mon Sep 17 00:00:00 2001 From: niftynei Date: Sat, 8 Aug 2026 16:01:41 -0500 Subject: [PATCH 2/5] nix develop: configure so will work on macos Update paths in configure + Makefile so that nix develop works on a MacOS machine Changelog-Fixed: nix: `nix develop` now configures and builds correctly on macOS without injecting Homebrew paths into the Nix toolchain. --- Makefile | 25 ++++++++++++++++++------- configure | 24 +++++++++++++++--------- nix/shells.nix | 15 ++++++++++++--- 3 files changed, 45 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index 20d4aedff053..fb6faf74d984 100644 --- a/Makefile +++ b/Makefile @@ -261,20 +261,30 @@ man5dir = $(mandir)/man5 man7dir = $(mandir)/man7 man8dir = $(mandir)/man8 +ifndef IN_NIX_SHELL # M1 macos machines with homebrew will install the native libraries in # /opt/homebrew instead of /usr/local, most likely because they # emulate x86_64 compatibility via Rosetta, and wanting to keep the # libraries separate. This however means we also need to switch out # the paths accordingly when we detect we're on an M1 macos machine. ifeq ("$(OS)-$(ARCH)", "Darwin-arm64") -CPATH := /opt/homebrew/include -LIBRARY_PATH := /opt/homebrew/lib +CPATH ?= /opt/homebrew/include +LIBRARY_PATH ?= /opt/homebrew/lib else -CPATH := /usr/local/include -LIBRARY_PATH := /usr/local/lib +CPATH ?= /usr/local/include +LIBRARY_PATH ?= /usr/local/lib +endif +endif + +ifneq ($(CPATH),) +CPATH_CFLAGS := -I$(CPATH) +endif +ifneq ($(LIBRARY_PATH),) +LIBRARY_PATH_LDFLAGS := -L$(LIBRARY_PATH) endif # Detect OpenSSL and SQLite paths dynamically using brew --prefix +ifndef IN_NIX_SHELL ifeq ("$(OS)", "Darwin") OPENSSL_PREFIX := $(shell brew --prefix openssl@3 2>/dev/null || brew --prefix openssl 2>/dev/null || echo "") SQLITE_PREFIX := $(shell brew --prefix sqlite 2>/dev/null || echo "") @@ -288,9 +298,10 @@ CPPFLAGS += -I$(SQLITE_PREFIX)/include PKG_CONFIG_PATH := $(SQLITE_PREFIX)/lib/pkgconfig:$(PKG_CONFIG_PATH) endif endif +endif CPPFLAGS += -DCLN_NEXT_VERSION="\"$(CLN_NEXT_VERSION)\"" -DPKGLIBEXECDIR="\"$(pkglibexecdir)\"" -DBINDIR="\"$(bindir)\"" -DPLUGINDIR="\"$(plugindir)\"" -DCCAN_TAL_NEVER_RETURN_NULL=1 -CFLAGS = $(CPPFLAGS) $(CWARNFLAGS) $(CDEBUGFLAGS) $(COPTFLAGS) -I $(CCANDIR) $(EXTERNAL_INCLUDE_FLAGS) -I . -I$(CPATH) $(SQLITE3_CFLAGS) $(SODIUM_CFLAGS) $(POSTGRES_INCLUDE) $(FEATURES) $(COVFLAGS) $(DEV_CFLAGS) -DSHACHAIN_BITS=48 -DJSMN_PARENT_LINKS $(PIE_CFLAGS) $(COMPAT_CFLAGS) $(CSANFLAGS) +CFLAGS = $(CPPFLAGS) $(CWARNFLAGS) $(CDEBUGFLAGS) $(COPTFLAGS) -I $(CCANDIR) $(EXTERNAL_INCLUDE_FLAGS) -I . $(CPATH_CFLAGS) $(SQLITE3_CFLAGS) $(SODIUM_CFLAGS) $(POSTGRES_INCLUDE) $(FEATURES) $(COVFLAGS) $(DEV_CFLAGS) -DSHACHAIN_BITS=48 -DJSMN_PARENT_LINKS $(PIE_CFLAGS) $(COMPAT_CFLAGS) $(CSANFLAGS) # If CFLAGS is already set in the environment of make (to whatever value, it # does not matter) then it would export it to subprocesses with the above value @@ -308,9 +319,9 @@ ifeq ($(STATIC),1) # For MacOS, Jacob Rapoport changed this to: # -L/usr/local/lib -lsqlite3 -lz -Wl,-lm -lpthread -ldl $(COVFLAGS) # But that doesn't static link. -LDLIBS = -L$(CPATH) -Wl,-dn $(SQLITE3_LDLIBS) -Wl,-dy -lm -lpthread -ldl $(COVFLAGS) +LDLIBS = $(LIBRARY_PATH_LDFLAGS) -Wl,-dn $(SQLITE3_LDLIBS) -Wl,-dy -lm -lpthread -ldl $(COVFLAGS) else -LDLIBS = -L$(CPATH) -lm $(SQLITE3_LDLIBS) $(COVFLAGS) +LDLIBS = $(LIBRARY_PATH_LDFLAGS) -lm $(SQLITE3_LDLIBS) $(COVFLAGS) endif ifeq ($(HAVE_FUNCTION_SECTIONS),1) diff --git a/configure b/configure index 0cd88749dc92..588c6d0ad527 100755 --- a/configure +++ b/configure @@ -10,14 +10,16 @@ BASE_WARNFLAGS="-Wall -Wundef -Wmissing-prototypes -Wmissing-declarations -Wstri OS=$(uname -s) ARCH=$(uname -m) -if [ "$OS-$ARCH" = "Darwin-arm64" ]; then -CPATH=/opt/homebrew/include -LIBRARY_PATH=/opt/homebrew/lib -export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/opt/homebrew/opt/sqlite/lib/pkgconfig -else -CPATH=/usr/local/lib -LIBRARY_PATH=/usr/local/lib -export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/usr/local/opt/sqlite/lib/pkgconfig +if [ -z "$IN_NIX_SHELL" ]; then + if [ "$OS-$ARCH" = "Darwin-arm64" ]; then + CPATH=${CPATH:-/opt/homebrew/include} + LIBRARY_PATH=${LIBRARY_PATH:-/opt/homebrew/lib} + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/opt/homebrew/opt/sqlite/lib/pkgconfig + else + CPATH=${CPATH:-/usr/local/include} + LIBRARY_PATH=${LIBRARY_PATH:-/usr/local/lib} + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/usr/local/opt/sqlite/lib/pkgconfig + fi fi : ${PKG_CONFIG=pkg-config} @@ -432,7 +434,11 @@ fi # Clean up on exit. trap "rm -f $CONFIG_VAR_FILE.$$*" 0 -$CONFIGURATOR --extra-tests --autotools-style --var-file=$CONFIG_VAR_FILE.$$ --header-file=$CONFIG_HEADER.$$ --configurator-cc="$CONFIGURATOR_CC" --wrapper="$CONFIGURATOR_WRAPPER" "$CC" ${CWARNFLAGS-$BASE_WARNFLAGS} $CDEBUGFLAGS $COPTFLAGS $CSANFLAGS -I$CPATH -L$LIBRARY_PATH $SQLITE3_CFLAGS $SODIUM_CFLAGS $POSTGRES_INCLUDE < Date: Sat, 8 Aug 2026 16:26:07 -0500 Subject: [PATCH 3/5] nix develop: add eatmydata to the nix shell We use `eatmydata` in the contrib/startup_regtest.sh shell script. This automatically adds it to the nix development shell so it's available Changelog-Added: nix: development shells now include `eatmydata` for `contrib/startup_regtest.sh`. --- nix/shells.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nix/shells.nix b/nix/shells.nix index 92a43f822eab..b36abca945f1 100644 --- a/nix/shells.nix +++ b/nix/shells.nix @@ -11,7 +11,12 @@ gsed = pkgs.writeShellScriptBin "gsed" '' exec ${pkgs.gnused}/bin/sed "$@" ''; + libeatmydata = pkgs.libeatmydata.overrideAttrs (_: { + doCheck = false; + nativeCheckInputs = [ ]; + }); devTools = [ + libeatmydata pkgs.uv gsed ]; From 8175caf63b53cbc9da6d4d685ec7ce6b87cac63a Mon Sep 17 00:00:00 2001 From: niftynei Date: Sat, 8 Aug 2026 16:35:06 -0500 Subject: [PATCH 4/5] nix shell: add shellhook for cleaning up contrib/startup_regtest.sh If you're running any startup_regtest daemons in the shell, this will attempt to stop them on exit from the development shell. Changelog-Added: nix: development shells now stop `startup_regtest.sh` daemons when the shell exits. --- nix/shells.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/nix/shells.nix b/nix/shells.nix index b36abca945f1..a7ed588faf33 100644 --- a/nix/shells.nix +++ b/nix/shells.nix @@ -20,22 +20,34 @@ pkgs.uv gsed ]; + shellHook = '' + _cln_stop_regtest_on_exit() { + if command -v stop_ln >/dev/null 2>&1; then + stop_ln >/dev/null 2>&1 || true + fi + } + + trap _cln_stop_regtest_on_exit EXIT + ''; in { devShells = { default = pkgs.mkShell { inputsFrom = [ config.packages.default ]; packages = devTools; + inherit shellHook; }; postgres = pkgs.mkShell { inputsFrom = [ config.packages.cln-postgres ]; packages = devTools; + inherit shellHook; }; rust = pkgs.craneLib.devShell { checks = { inherit (self.checks.${system}) rust; }; packages = devTools; + inherit shellHook; }; }; }; From 1c4e9155aba685747931e28f0d95ac6060073204 Mon Sep 17 00:00:00 2001 From: niftynei Date: Fri, 21 Aug 2026 21:08:47 -0500 Subject: [PATCH 5/5] nix: add shellcheck to development shell Add shellcheck to nix develop to complete checks without requiring a separate host installation. Changelog-Added: nix: development shells now include `shellcheck`. --- nix/shells.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nix/shells.nix b/nix/shells.nix index a7ed588faf33..167100c4b47e 100644 --- a/nix/shells.nix +++ b/nix/shells.nix @@ -17,6 +17,7 @@ }); devTools = [ libeatmydata + pkgs.shellcheck pkgs.uv gsed ];