flake.nix (4003B)
1 { 2 description = "Beegram, a messaging application built using Qt."; 3 4 inputs = { 5 nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11"; 6 rust-overlay.url = "github:oxalica/rust-overlay"; 7 }; 8 9 outputs = { self, nixpkgs, rust-overlay }: 10 let 11 systems = [ "x86_64-darwin" "aarch64-darwin" "x86_64-linux" ]; 12 forAllSystems = nixpkgs.lib.genAttrs systems; 13 in 14 { 15 packages = forAllSystems (system: 16 let 17 pkgs = import nixpkgs { 18 inherit system; 19 overlays = [ rust-overlay.overlays.default ]; 20 }; 21 in 22 { 23 default = pkgs.qt6Packages.callPackage ./derivation.nix ({ 24 rust = pkgs.rust-bin.stable.latest.default; 25 rustPlatform = pkgs.rustPlatform; 26 pkg-config = pkgs.pkg-config; 27 llvmPackages = pkgs.llvmPackages; 28 git = pkgs.git; 29 cacert = pkgs.cacert; 30 } // pkgs.lib.optionalAttrs pkgs.stdenv.isDarwin { 31 Security = pkgs.darwin.apple_sdk.frameworks.Security; 32 SystemConfiguration = pkgs.darwin.apple_sdk.frameworks.SystemConfiguration; 33 } // pkgs.lib.optionalAttrs pkgs.stdenv.isLinux { 34 libsecret = pkgs.libsecret; 35 dbus = pkgs.dbus; 36 }); 37 38 # TrailBase backend server 39 trailbase = pkgs.callPackage ./trailbase.nix { }; 40 } 41 ); 42 43 checks = forAllSystems (system: 44 let 45 pkgs = import nixpkgs { 46 inherit system; 47 overlays = [ rust-overlay.overlays.default ]; 48 }; 49 in 50 { 51 # Verify generated Rust types match JSON schemas 52 generated-types = pkgs.runCommand "check-generated-types" { 53 buildInputs = [ pkgs.quicktype pkgs.gnumake pkgs.diffutils ]; 54 src = self; 55 } '' 56 cp -r $src $TMPDIR/src 57 chmod -R +w $TMPDIR/src 58 cd $TMPDIR/src 59 60 # Regenerate types from schemas 61 make rust/src/generated/mod.rs 62 63 # Compare with committed file 64 if ! diff -q $src/rust/src/generated/mod.rs rust/src/generated/mod.rs > /dev/null 2>&1; then 65 echo "ERROR: Generated types are out of sync with JSON schemas!" 66 echo "Run 'make types' to regenerate." 67 diff $src/rust/src/generated/mod.rs rust/src/generated/mod.rs || true 68 exit 1 69 fi 70 71 echo "Generated types are in sync with schemas." 72 touch $out 73 ''; 74 } 75 ); 76 77 apps = forAllSystems (system: 78 let 79 pkgs = import nixpkgs { inherit system; }; 80 trailbase = pkgs.callPackage ./trailbase.nix { }; 81 in 82 { 83 trail = { 84 type = "app"; 85 program = toString (pkgs.writeShellScript "trail-run" '' 86 ${trailbase}/bin/trail run 87 ''); 88 }; 89 } 90 ); 91 92 devShells = forAllSystems (system: 93 let 94 pkgs = import nixpkgs { 95 inherit system; 96 overlays = [ rust-overlay.overlays.default ]; 97 }; 98 rust = pkgs.rust-bin.stable.latest.default.override { 99 extensions = [ "rust-src" "rust-analyzer" ]; 100 }; 101 in 102 { 103 default = pkgs.mkShell { 104 buildInputs = with pkgs; [ 105 cmake 106 pkg-config 107 rust 108 quicktype 109 gnumake 110 qt6.qtbase 111 qt6.qtdeclarative 112 qt6.qt5compat 113 qt6.wrapQtAppsHook 114 (pkgs.callPackage ./trailbase.nix { }) 115 ] ++ lib.optionals stdenv.isDarwin [ 116 darwin.apple_sdk.frameworks.Security 117 darwin.apple_sdk.frameworks.SystemConfiguration 118 ] ++ lib.optionals stdenv.isLinux [ 119 libsecret 120 dbus 121 ]; 122 123 LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib"; 124 }; 125 } 126 ); 127 }; 128 }