# This is a nix-shell for use with the nix package manager.
# If you have nix installed, you may simply run `nix-shell`
# in this repo, and have all dependencies ready in the new shell.

{ pkgs ? import <nixpkgs> {} }:
let
  verible_used_stdenv = pkgs.stdenv;
  #verible_used_stdenv = pkgs.gcc15Stdenv;
  #verible_used_stdenv = pkgs.clang19Stdenv;
  bazel = pkgs.bazel_8;


  userNixPath = ./user.nix;  # optional user config
  userPackages =
    if builtins.pathExists userNixPath
    then
      let loaded = import userNixPath;
      in if builtins.isFunction loaded
         then loaded { inherit pkgs; }
         else loaded
    else [];
in
verible_used_stdenv.mkDerivation {
  name = "verible-build-environment";
  buildInputs = with pkgs;
    [
      bazel
      git

      # For scripts used inside bzl rules and tests
      gnused

      # To run error-log-analyzer
      python3
      python3Packages.mdutils
      ripgrep

      # To manually run export_json_examples
      python3Packages.anytree

      # For using --//bazel:use_local_flex_bison if desired
      flex
      bison

      # To build vscode vsix package
      nodejs

      # Ease development
      lcov              # coverage html generation.
      bazel-buildtools  # buildifier

      llvmPackages_22.clang-tools    # for clang-tidy
      llvmPackages_19.clang-tools    # for clang-format
    ] ++ userPackages;
  shellHook = ''
      # clang tidy: use latest.
      export CLANG_TIDY=${pkgs.llvmPackages_22.clang-tools}/bin/clang-tidy

      # Last version that current github CI supports.
      export CLANG_FORMAT=${pkgs.llvmPackages_19.clang-tools}/bin/clang-format
  '';
}
