qt-chat-app

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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 }