-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflake.nix
More file actions
129 lines (114 loc) · 4.22 KB
/
flake.nix
File metadata and controls
129 lines (114 loc) · 4.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# Copyright 2026 ResQ
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
{
description = "ResQ Programs — Solana Anchor on-chain programs (airspace, delivery)";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
flake-utils.url = "github:numtide/flake-utils";
rust-overlay.url = "github:oxalica/rust-overlay";
};
outputs =
{ self, nixpkgs, flake-utils, rust-overlay, ... }:
let
supportedSystems = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
mkDevShell = pkgs: system:
let
# Anchor 0.30.1 requires a pinned nightly; stable works for most program development
rustToolchain = pkgs.rust-bin.stable.latest.default.override {
extensions = [ "rust-src" "rust-analyzer" "rustfmt" "clippy" ];
targets = [ "bpfel-unknown-none" ]; # BPF target for Solana programs
};
devPackages = with pkgs;
builtins.filter (p: p != null) [
# Rust (required for Anchor + Solana programs)
rustToolchain
# Node / Bun (Anchor client-side tests and scripts)
nodejs_22
bun
# Build deps
pkg-config
git
jq
osv-scanner
curl
# Linux build deps for solana-sdk crates
(if stdenv.isLinux then openssl else null)
(if stdenv.isLinux then libudev-zero else null)
] ++ lib.optionals stdenv.isDarwin [
darwin.apple_sdk.frameworks.Security
darwin.apple_sdk.frameworks.CoreFoundation
darwin.apple_sdk.frameworks.SystemConfiguration
];
shellHook = ''
echo "--- ResQ Programs Dev Environment (${system}) ---"
version_check() {
local cmd="$1" name="$2"
if command -v "$cmd" >/dev/null 2>&1; then
echo "$name: $("$cmd" --version 2>/dev/null | head -n1 | xargs)"
else
echo "$name: NOT FOUND"
fi
}
version_check rustc "Rust"
version_check cargo "Cargo"
version_check node "Node"
version_check bun "Bun"
version_check solana "Solana CLI"
version_check anchor "Anchor"
if ! command -v solana >/dev/null 2>&1; then
echo ""
echo "⚠ Solana CLI not found. Install via:"
echo " sh -c \"\$(curl -sSfL https://release.anza.xyz/stable/install)\""
fi
if ! command -v anchor >/dev/null 2>&1; then
echo ""
echo "⚠ Anchor CLI not found. Install via:"
echo " cargo install --git https://github.com/coral-xyz/anchor avm --locked"
echo " avm install 0.30.1 && avm use 0.30.1"
fi
echo ""
echo "Build: anchor build"
echo "Test: bash ./scripts/test.sh"
echo "Deploy: anchor deploy --provider.cluster devnet"
echo "-------------------------------------------------"
export CARGO_HOME="$PWD/.cargo"
export PATH="$CARGO_HOME/bin:$PATH"
'';
in
{
default = pkgs.mkShell {
packages = devPackages;
inherit shellHook;
};
};
in
flake-utils.lib.eachSystem supportedSystems (system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ rust-overlay.overlays.default ];
config.allowUnfree = true;
};
in
{
formatter = pkgs.alejandra or pkgs.nixpkgs-fmt;
devShells = mkDevShell pkgs system;
}
);
}