{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; flake-parts.url = "github:hercules-ci/flake-parts"; systems.url = "github:nix-systems/default"; # Dev tools treefmt-nix.url = "github:numtide/treefmt-nix"; }; outputs = inputs: inputs.flake-parts.lib.mkFlake {inherit inputs;} { systems = import inputs.systems; imports = [ inputs.treefmt-nix.flakeModule ]; perSystem = { config, pkgs, ... }: let cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); nonRustDeps = with pkgs; [ libiconv libudev-zero pkg-config postgresql ]; rust-toolchain = pkgs.symlinkJoin { name = "rust-toolchain"; paths = with pkgs; [rustc cargo cargo-watch rust-analyzer rustPlatform.rustcSrc]; }; udev-rule = builtins.readFile ./heliox.udev; in { # Rust package packages.default = pkgs.rustPlatform.buildRustPackage { inherit (cargoToml.package) name version; src = ./.; cargoLock.lockFile = ./Cargo.lock; nativeBuildInputs = with pkgs; [pkg-config udev libudev-zero libpqxx]; buildInputs = with pkgs; [udev libudev-zero libpqxx]; postInstall = '' mkdir -p $out/etc/udev/rules.d echo '${udev-rule}' > $out/etc/udev/rules.d/70-heliox.rules ''; }; # Rust dev environment devShells.default = pkgs.mkShell { inputsFrom = [ config.treefmt.build.devShell ]; buildInputs = nonRustDeps; nativeBuildInputs = with pkgs; [ rust-toolchain diesel-cli ] ++ nonRustDeps; RUST_BACKTRACE = 1; }; treefmt.config = { projectRootFile = "flake.nix"; programs = { nixpkgs-fmt.enable = true; rustfmt.enable = true; }; }; }; }; }