Skip to content
Snippets Groups Projects
flake.nix 2.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • Charles Hall's avatar
    Charles Hall committed
    {
    
      inputs = {
        nixpkgs.url = "github:NixOS/nixpkgs";
        flake-utils.url = "github:numtide/flake-utils";
    
        fenix = {
          url = "github:nix-community/fenix";
          inputs.nixpkgs.follows = "nixpkgs";
        };
    
        crane = {
          url = "github:ipetkov/crane";
    
          inputs.nixpkgs.follows = "nixpkgs";
    
          inputs.flake-utils.follows = "flake-utils";
    
      };
    
      outputs =
        { self
        , nixpkgs
        , flake-utils
    
        , fenix
    
        , crane
    
        }: flake-utils.lib.eachDefaultSystem (system:
        let
          pkgs = nixpkgs.legacyPackages.${system};
    
          # Nix-accessible `Cargo.toml`
          cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml);
    
          # The Rust toolchain to use
          toolchain = fenix.packages.${system}.toolchainOf {
            # Use the Rust version defined in `Cargo.toml`
            channel = cargoToml.package.rust-version;
    
            # THE rust-version HASH
            sha256 = "sha256-8len3i8oTwJSOJZMosGGXHBL5BVuGQnWOT2St5YAUFU=";
          };
    
    
    Charles Hall's avatar
    Charles Hall committed
          # Point to system RocksDB
          ROCKSDB_INCLUDE_DIR = "${pkgs.rocksdb_6_23}/include";
          ROCKSDB_LIB_DIR = "${pkgs.rocksdb_6_23}/lib";
    
    
          # Shared between the package and the devShell
          nativeBuildInputs = (with pkgs.rustPlatform; [
            bindgenHook
          ]);
    
    
          builder =
            ((crane.mkLib pkgs).overrideToolchain toolchain.toolchain).buildPackage;
    
        in
        {
          packages.default = builder {
            src = ./.;
    
    
    Charles Hall's avatar
    Charles Hall committed
            # Use system RocksDB
            inherit ROCKSDB_INCLUDE_DIR ROCKSDB_LIB_DIR;
    
    
            inherit nativeBuildInputs;
    
          };
    
          devShells.default = pkgs.mkShell {
            # Rust Analyzer needs to be able to find the path to default crate
            # sources, and it can read this environment variable to do so
            RUST_SRC_PATH = "${toolchain.rust-src}/lib/rustlib/src/rust/library";
    
    
    Charles Hall's avatar
    Charles Hall committed
            # Use system RocksDB
            inherit ROCKSDB_INCLUDE_DIR ROCKSDB_LIB_DIR;
    
    
            # Development tools
    
            nativeBuildInputs = nativeBuildInputs ++ (with toolchain; [
    
              cargo
              clippy
              rust-src
              rustc
              rustfmt
            ]);
          };
    
          checks = {
            packagesDefault = self.packages.${system}.default;
            devShellsDefault = self.devShells.${system}.default;
          };
        });
    
    Charles Hall's avatar
    Charles Hall committed
    }