-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflake.nix
More file actions
150 lines (124 loc) · 4.38 KB
/
flake.nix
File metadata and controls
150 lines (124 loc) · 4.38 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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
{
description = "wisp - a Lisp-to-WebAssembly compiler";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
pack = {
url = "github:colinrozzi/pack/v0.2.0";
flake = false;
};
};
outputs = { self, nixpkgs, flake-utils, rust-overlay, pack }:
flake-utils.lib.eachDefaultSystem (system:
let
overlays = [ (import rust-overlay) ];
pkgs = import nixpkgs {
inherit system overlays;
};
# Rust toolchain with WASM target
rustToolchain = pkgs.rust-bin.stable.latest.default.override {
extensions = [ "rust-src" "rust-analyzer" ];
targets = [ "wasm32-unknown-unknown" ];
};
# Build inputs
buildInputs = with pkgs; [
openssl
] ++ lib.optionals stdenv.isDarwin [
darwin.apple_sdk.frameworks.Security
darwin.apple_sdk.frameworks.SystemConfiguration
];
nativeBuildInputs = with pkgs; [
pkg-config
rustToolchain
];
in {
devShells.default = pkgs.mkShell {
inherit buildInputs nativeBuildInputs;
packages = with pkgs; [
rustToolchain
pkg-config
openssl
wasmtime
];
shellHook = ''
echo "wisp development environment"
echo " cargo build --release Build wisp compiler"
echo " cargo run -- compile X Compile a .wisp file"
echo " cargo test Run tests"
'';
};
packages.default = let
combinedSrc = pkgs.runCommand "wisp-combined-src" {} ''
mkdir -p $out
cp -r ${./.}/. $out/
chmod -R u+w $out
# Put pack as sibling so ../pack paths resolve
cp -rL ${pack} $out/../pack || true
# Also put it inside for Cargo git dep override
mkdir -p $out/pack
cp -rL ${pack}/. $out/pack/
'';
in pkgs.rustPlatform.buildRustPackage {
pname = "wisp";
version = "0.1.0";
src = combinedSrc;
cargoLock = {
lockFile = ./Cargo.lock;
};
inherit nativeBuildInputs buildInputs;
meta = with pkgs.lib; {
description = "A Lisp-to-WebAssembly compiler";
license = licenses.mit;
};
};
packages.wisp = self.packages.${system}.default;
packages.update-pack = pkgs.writeShellScriptBin "update-pack" ''
set -e
VERSION="''${1:?Usage: nix run .#update-pack <version> (e.g. v0.2.1)}"
echo "Updating pack to $VERSION..."
# Update all Cargo.toml files
find . -name "Cargo.toml" -not -path "*/target/*" \
-exec ${pkgs.gnused}/bin/sed -i \
"s|colinrozzi/pack\.git\", tag = \"[^\"]*\"|colinrozzi/pack.git\", tag = \"$VERSION\"|g" {} \;
echo " Updated Cargo.toml files"
# Update flake.nix URL
${pkgs.python3}/bin/python3 -c "
import re, sys
with open('flake.nix', 'r') as f:
content = f.read()
content = re.sub(
r'(url = \"github:colinrozzi/pack)/[^\"]*',
r'\1/' + sys.argv[1],
content,
count=1
)
with open('flake.nix', 'w') as f:
f.write(content)
" "$VERSION"
echo " Updated flake.nix"
# Update flake lock
nix flake update pack
echo " Updated flake.lock"
echo ""
echo "Pack updated to $VERSION. Changes:"
git diff --stat
'';
packages.update-theater = pkgs.writeShellScriptBin "update-theater" ''
set -e
VERSION="''${1:?Usage: nix run .#update-theater <version> (e.g. v0.3.1)}"
echo "Updating theater to $VERSION..."
# Update all Cargo.toml files
find . -name "Cargo.toml" -not -path "*/target/*" \
-exec ${pkgs.gnused}/bin/sed -i \
"s|colinrozzi/theater\.git\", tag = \"[^\"]*\"|colinrozzi/theater.git\", tag = \"$VERSION\"|g" {} \;
echo " Updated Cargo.toml files"
echo ""
echo "Theater updated to $VERSION. Changes:"
git diff --stat
'';
});
}