summaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
authorKjetil Orbekk <kj@orbekk.com>2022-12-27 19:56:00 -0500
committerKjetil Orbekk <kj@orbekk.com>2022-12-27 19:58:45 -0500
commit4c474b2ee6716d5c067ae20903e374073cefaa3d (patch)
tree9be4d721eda7417497e2187cccbaddf8b274e6ac /flake.nix
parent21b7b57336cd3bf7bd328ada38c6069a48504f85 (diff)
Create nix packages for project
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix171
1 files changed, 99 insertions, 72 deletions
diff --git a/flake.nix b/flake.nix
index edba281..a2aa32d 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,81 +1,108 @@
{
inputs = {
+ nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
+ crane.url = "github:ipetkov/crane";
+ crane.inputs.nixpkgs.follows = "nixpkgs";
flake-utils.url = "github:numtide/flake-utils";
- nixpkgs.url = "nixpkgs";
+ rust-overlay = {
+ url = "github:oxalica/rust-overlay";
+ inputs = {
+ nixpkgs.follows = "nixpkgs";
+ flake-utils.follows = "flake-utils";
+ };
+ };
};
- # TODO: Stuff to include in rust development environment:
- # - trunk
- # - cargo-watch
- # - sqlx-cli
- outputs = { self, nixpkgs, flake-utils }:
- flake-utils.lib.eachDefaultSystem (system:
- let pkgs = nixpkgs.legacyPackages.${system};
- in {
- packages.databaseImage = pkgs.dockerTools.buildImage {
- name = "bridge-database";
- contents = [ pkgs.shadow pkgs.postgresql_12 pkgs.bashInteractive pkgs.busybox ];
- tag = "latest";
+ outputs = { self, nixpkgs, crane, flake-utils, rust-overlay, ... }:
+ let
+ systems = with flake-utils.lib.system; [x86_64-linux x86_64-darwin aarch64-linux aarch64-darwin];
+ in
+ flake-utils.lib.eachSystem systems (system:
+ let
+ pkgs = import nixpkgs {
+ inherit system;
+ overlays = [ (import rust-overlay) ];
+ };
- runAsRoot = ''
- #!${pkgs.stdenv.shell}
- ${pkgs.dockerTools.shadowSetup}
- useradd postgres
- mkdir -p /var/lib/postgres
- chown postgres /var/lib/postgres
- su postgres -c 'initdb -D /var/lib/postgres/data'
- '';
+ craneLib = crane.lib.${system};
- config = {
- Cmd = [ "/bin/su" "postgres" "-c" "/bin/postgres -D /var/lib/postgres/data" ];
- };
- };
+ buildInputs = with pkgs; [
+ trunk
+ cargo-wasi
+ openssl
+ pkg-config
+ wasm-bindgen-cli
+ ];
- devShell = pkgs.mkShell {
- buildInputs = with pkgs; [
- podman-compose
- stdenv
- postgresql
- openssl
- pkg-config
- llvmPackages_latest.llvm
- llvmPackages_latest.bintools
- zlib.out
- rustup
- rust-analyzer
- #xorriso
- #grub2
- #qemu
- llvmPackages_latest.lld
- #python3
- ];
- RUSTC_VERSION = pkgs.lib.readFile ./rust-toolchain;
- # https://github.com/rust-lang/rust-bindgen#environment-variables
- LIBCLANG_PATH =
- pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ];
- HISTFILE = toString ./.history;
- shellHook = ''
- export PATH=$PATH:~/.cargo/bin
- export PATH=$PATH:~/.rustup/toolchains/$RUSTC_VERSION-x86_64-unknown-linux-gnu/bin/
- '';
- # Add libvmi precompiled library to rustc search path
- # RUSTFLAGS = (builtins.map (a: ''-L ${a}/lib'') [
- # pkgs.libvmi
- # ]);
- # Add libvmi, glibc, clang, glib headers to bindgen search path
- BINDGEN_EXTRA_CLANG_ARGS =
- # Includes with normal include path
- (builtins.map (a: ''-I"${a}/include"'') [
- # pkgs.libvmi
- pkgs.glibc.dev
- ])
- # Includes with special directory paths
- ++ [
- ''
- -I"${pkgs.llvmPackages_latest.libclang.lib}/lib/clang/${pkgs.llvmPackages_latest.libclang.version}/include"''
- ''-I"${pkgs.glib.dev}/include/glib-2.0"''
- "-I${pkgs.glib.out}/lib/glib-2.0/include/"
- ];
- };
- });
+ rustWithWasmTarget = pkgs.rust-bin.stable.latest.default.override {
+ targets = [ "wasm32-unknown-unknown" "wasm32-wasi" ];
+ };
+
+ craneLibWithWasmTarget = (crane.mkLib pkgs).overrideToolchain rustWithWasmTarget;
+
+ commonArgs = {
+ inherit buildInputs;
+ src = craneLib.cleanCargoSource ./.;
+ };
+
+ commonArgsForWasm = commonArgs // {
+ doCheck = false;
+ };
+
+ cargoArtifactsForServer = craneLib.buildDepsOnly (commonArgs // {
+ cargoExtraArgs = "--workspace --exclude webapp";
+ });
+
+ cargoArtifactsForWasm = craneLibWithWasmTarget.buildDepsOnly (commonArgsForWasm // {
+ cargoExtraArgs = "--workspace --exclude server --target wasm32-unknown-unknown";
+ });
+
+ in
+ {
+ # TODO add checks:
+ # - cargo sqlx prepare --merged --check
+ checks.sqlx-prepare = craneLib.mkCargoDerivation (commonArgs // {
+ cargoArtifacts = cargoArtifactsForServer;
+ buildInputs = commonArgs.buildInputs ++ [ pkgs.sqlx-cli ];
+ buildPhaseCargoCommand = "cargo sqlx prepare --merged --check";
+ });
+
+ checks.fmt = craneLib.cargoFmt {
+ inherit (commonArgs) src;
+ };
+ packages.bridge-server = craneLib.buildPackage (commonArgs // {
+ src = ./.;
+ });
+
+ packages.bridge-webapp = craneLibWithWasmTarget.buildPackage (commonArgsForWasm // {
+ cargoArtifacts = cargoArtifactsForWasm;
+ src = ./.;
+ cargoExtraArgs = "--target wasm32-unknown-unknown";
+ buildPhaseCargoCommand = ''
+ pushd webapp
+ echo Running trunk from directory $PWD
+ trunk build
+ popd
+ '';
+ installPhaseCommand = ''
+ mkdir -p $out
+ cp -r webapp/dist/* $out
+ '';
+ });
+
+ devShells.default = pkgs.mkShell {
+ inputsFrom = builtins.attrValues self.packages;
+ nativeBuildInputs = with pkgs; [
+ cargo
+ cargo-watch
+ rustfmt
+ sqlx-cli
+ podman-compose
+ postgresql
+ rust-analyzer
+ pkg-config
+ openssl
+ ];
+ };
+ });
}