relay filter/appview bootstrap
1{
2 description = "Prism - ATProto AppView service for gmstn";
3
4 inputs = {
5 nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
6 rust-overlay = {
7 url = "github:oxalica/rust-overlay";
8 inputs.nixpkgs.follows = "nixpkgs";
9 };
10 crane.url = "github:ipetkov/crane";
11 };
12
13 outputs =
14 {
15 self,
16 nixpkgs,
17 rust-overlay,
18 crane,
19 }:
20 let
21 supportedSystems = [
22 "x86_64-linux"
23 "aarch64-linux"
24 "x86_64-darwin"
25 "aarch64-darwin"
26 ];
27 forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
28
29 mkPkgs =
30 system:
31 import nixpkgs {
32 inherit system;
33 overlays = [ rust-overlay.overlays.default ];
34 };
35 in
36 {
37 packages = forAllSystems (
38 system:
39 let
40 pkgs = mkPkgs system;
41 rustToolchain = pkgs.rust-bin.stable.latest.default;
42 craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;
43
44 commonArgs = {
45 src = craneLib.cleanCargoSource ./.;
46 strictDeps = true;
47
48 buildInputs =
49 with pkgs;
50 [
51 openssl
52 postgresql
53 ]
54 ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
55 pkgs.apple-sdk
56 ];
57
58 nativeBuildInputs = with pkgs; [
59 pkg-config
60 ];
61
62 SQLX_OFFLINE = "true";
63 };
64
65 cargoArtifacts = craneLib.buildDepsOnly commonArgs;
66
67 prism = craneLib.buildPackage (
68 commonArgs
69 // {
70 inherit cargoArtifacts;
71 }
72 );
73 in
74 {
75 inherit prism;
76 default = prism;
77 }
78 );
79
80 devShells = forAllSystems (
81 system:
82 let
83 pkgs = mkPkgs system;
84 rustToolchain = pkgs.rust-bin.stable.latest.default.override {
85 extensions = [
86 "rust-src"
87 "rust-analyzer"
88 ];
89 };
90 in
91 {
92 default = pkgs.mkShell {
93 buildInputs =
94 with pkgs;
95 [
96 rustToolchain
97
98 pkg-config
99 openssl
100
101 postgresql
102 sqlx-cli
103
104 docker-client
105 ]
106 ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
107 pkgs.apple-sdk
108 ];
109
110 DATABASE_URL = "postgres://postgres:postgres@localhost:5432/prism";
111
112 shellHook = ''
113 echo "🔮 Prism development environment"
114 echo ""
115 echo "Available commands:"
116 echo " cargo run - Start the server"
117 echo " cargo test - Run tests (needs Docker)"
118 echo " cargo sqlx - Database migrations"
119 echo ""
120 echo "Database: $DATABASE_URL"
121 '';
122 };
123 }
124 );
125
126 overlays.default = final: prev: {
127 prism = self.packages.${final.stdenv.hostPlatform.system}.prism;
128 };
129 };
130}