Skip to content
Snippets Groups Projects
flake.nix 2.98 KiB
Newer Older
  • Learn to ignore specific revisions
  • Charles Hall's avatar
    Charles Hall committed
    {
    
        nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable";
    
        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";
    
      };
    
      outputs =
        { self
        , nixpkgs
        , flake-utils
    
        , fenix
    
        , crane
    
        }: flake-utils.lib.eachDefaultSystem (system:
        let
    
    Charles Hall's avatar
    Charles Hall committed
          pkgs = import nixpkgs {
            inherit system;
    
            overlays = [
              (final: prev: {
                rocksdb = prev.rocksdb.overrideAttrs (old:
                  let
    
    🥺's avatar
    🥺 committed
                    version = "8.10.0";
    
    Charles Hall's avatar
    Charles Hall committed
                  in
                  {
                    inherit version;
                    src = pkgs.fetchFromGitHub {
                      owner = "facebook";
                      repo = "rocksdb";
                      rev = "v${version}";
    
    🥺's avatar
    🥺 committed
                      hash = "sha256-KGsYDBc1fz/90YYNGwlZ0LUKXYsP1zyhP29TnRQwgjQ=";
    
    Charles Hall's avatar
    Charles Hall committed
          stdenv = if pkgs.stdenv.isLinux then
            pkgs.stdenvAdapters.useMoldLinker pkgs.stdenv
          else
            pkgs.stdenv;
    
    Charles Hall's avatar
    Charles Hall committed
    
    
          # 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-PjvuouwTsYfNKW5Vi5Ye7y+lL7SsWGBxCtBOOm2z14c=";
    
    Charles Hall's avatar
    Charles Hall committed
          mkToolchain = fenix.packages.${system}.combine;
    
          buildToolchain = mkToolchain (with toolchain; [
            cargo
            rustc
          ]);
    
          devToolchain = mkToolchain (with toolchain; [
            cargo
            clippy
            rust-src
            rustc
    
            # Always use nightly rustfmt because most of its options are unstable
            fenix.packages.${system}.latest.rustfmt
          ]);
    
          builder =
            ((crane.mkLib pkgs).overrideToolchain buildToolchain).buildPackage;
    
    
          nativeBuildInputs = (with pkgs.rustPlatform; [
            bindgenHook
          ]);
    
    
    Charles Hall's avatar
    Charles Hall committed
          env = {
            ROCKSDB_INCLUDE_DIR = "${pkgs.rocksdb}/include";
            ROCKSDB_LIB_DIR = "${pkgs.rocksdb}/lib";
          };
    
        in
        {
          packages.default = builder {
            src = ./.;
    
    
    Charles Hall's avatar
    Charles Hall committed
            inherit
    
    Charles Hall's avatar
    Charles Hall committed
              env
    
              nativeBuildInputs
    
    Charles Hall's avatar
    Charles Hall committed
              stdenv;
    
    Charles Hall's avatar
    Charles Hall committed
          devShells.default = (pkgs.mkShell.override { inherit stdenv; }) {
    
    Charles Hall's avatar
    Charles Hall committed
            env = env // {
              # Rust Analyzer needs to be able to find the path to default crate
              # sources, and it can read this environment variable to do so. The
              # `rust-src` component is required in order for this to work.
              RUST_SRC_PATH = "${devToolchain}/lib/rustlib/src/rust/library";
            };
    
            # Development tools
    
    Charles Hall's avatar
    Charles Hall committed
            nativeBuildInputs = nativeBuildInputs ++ [
              devToolchain
    
    Charles Hall's avatar
    Charles Hall committed
            ] ++ (with pkgs; [
              engage
            ]);
    
    Charles Hall's avatar
    Charles Hall committed
    }