-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflake.nix
More file actions
180 lines (160 loc) Β· 5.96 KB
/
flake.nix
File metadata and controls
180 lines (160 loc) Β· 5.96 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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
{
description = "Korppi - Local-first collaborative markdown editor with CRDT sync and patch history";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
rust-overlay.url = "github:oxalica/rust-overlay";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, rust-overlay, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
overlays = [ (import rust-overlay) ];
pkgs = import nixpkgs {
inherit system overlays;
};
# Use stable Rust toolchain
rustToolchain = pkgs.rust-bin.stable."1.90.0".default.override {
extensions = [
"rust-src"
"rust-analyzer"
"clippy"
];
targets = [
"wasm32-unknown-unknown"
];
};
darwinDeps = with pkgs; lib.optionals stdenv.isDarwin ([
libiconv
darwin.cctools
apple-sdk
]);
# Tauri 2.x dependencies for Linux
linuxDeps = with pkgs; lib.optionals stdenv.isLinux [
webkitgtk_4_1
gtk3
cairo
gdk-pixbuf
glib
dbus
openssl
librsvg
pango
atk
libsoup_3
pkg-config
];
# Common dependencies across all platforms
commonDeps = with pkgs; [
rustToolchain
cargo-watch
cargo-edit
cargo-outdated
cargo-audit
cargo-flamegraph
pandoc
nodejs_24
nodePackages.npm
openssl
zlib
pkg-config
cmake
just
watchexec
git
lldb
];
# Development scripts
scripts = {
dev = pkgs.writeShellScriptBin "korppi-dev" ''
echo "π¦ Starting Korppi development server..."
npm run tauri dev
'';
build = pkgs.writeShellScriptBin "korppi-build" ''
echo "ποΈ Building Korppi for production..."
npm run tauri build
'';
test = pkgs.writeShellScriptBin "korppi-test" ''
echo "π§ͺ Running Rust tests..."
cd src-tauri && cargo test --all-features
'';
check = pkgs.writeShellScriptBin "korppi-check" ''
echo "π Running code checks..."
cd src-tauri
cargo fmt --check
cargo clippy -- -D warnings
cargo test
'';
clean = pkgs.writeShellScriptBin "korppi-clean" ''
echo "π§Ή Cleaning build artifacts..."
rm -rf target src-tauri/target node_modules
echo "β¨ Clean complete!"
'';
update = pkgs.writeShellScriptBin "korppi-update" ''
echo "π¦ Updating dependencies..."
cd src-tauri && cargo update
npm update
echo "β
Dependencies updated!"
'';
};
in
{
############################################################
# DEV SHELL - provides development environment
# CI uses non-Nix approach for building releases
############################################################
devShells.default = pkgs.mkShell {
buildInputs = commonDeps ++ darwinDeps ++ linuxDeps ++ [
scripts.dev
scripts.build
scripts.test
scripts.check
scripts.clean
scripts.update
];
shellHook = ''
export RUST_BACKTRACE=1
export RUST_LOG=info
export PKG_CONFIG_PATH="${pkgs.openssl.dev}/lib/pkgconfig''${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
export OPENSSL_DIR="${pkgs.openssl.dev}"
export OPENSSL_LIB_DIR="${pkgs.openssl.out}/lib"
export OPENSSL_INCLUDE_DIR="${pkgs.openssl.dev}/include"
${pkgs.lib.optionalString pkgs.stdenv.isLinux ''
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath linuxDeps}:$LD_LIBRARY_PATH"
export XDG_DATA_DIRS="${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}:${pkgs.gtk3}/share/gsettings-schemas/${pkgs.gtk3.name}:$XDG_DATA_DIRS"
''}
echo ""
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo "π¦ Korppi Development Environment (Tauri 2.x)"
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
echo "π System Info:"
echo " Rust: $(rustc --version)"
echo " Cargo: $(cargo --version)"
echo " Node: $(node --version)"
echo " NPM: $(npm --version)"
echo " Platform: ${system}"
echo ""
echo "π Quick Commands:"
echo " korppi-dev"
echo " korppi-build"
echo " korppi-test"
echo " korppi-check"
echo " korppi-clean"
echo " korppi-update"
echo ""
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
if [ ! -d "node_modules" ]; then
echo "π‘ Tip: Run 'npm install' to install JavaScript dependencies"
echo ""
fi
'';
RUST_SRC_PATH = "${rustToolchain}/lib/rustlib/src/rust/library";
CARGO_BUILD_JOBS = "8";
RUST_BACKTRACE = "1";
CARGO_INCREMENTAL = "1";
};
formatter = pkgs.nixpkgs-fmt;
}
);
}