169 lines
4.4 KiB
Nix
169 lines
4.4 KiB
Nix
{
|
|
description = "rules_bun development flake";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
|
git-hooks.url = "github:cachix/git-hooks.nix";
|
|
treefmt-nix.url = "github:numtide/treefmt-nix";
|
|
};
|
|
|
|
outputs =
|
|
{
|
|
self,
|
|
nixpkgs,
|
|
treefmt-nix,
|
|
...
|
|
}@inputs:
|
|
let
|
|
supportedSystems = [
|
|
"x86_64-linux"
|
|
"aarch64-linux"
|
|
"x86_64-darwin"
|
|
"aarch64-darwin"
|
|
];
|
|
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
|
|
treefmtEvalFor =
|
|
system:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
in
|
|
treefmt-nix.lib.evalModule pkgs {
|
|
projectRootFile = "flake.nix";
|
|
|
|
programs = {
|
|
nixfmt.enable = true;
|
|
shfmt.enable = true;
|
|
oxfmt.enable = true;
|
|
};
|
|
|
|
settings = {
|
|
formatter = {
|
|
shfmt = {
|
|
options = [
|
|
"-i"
|
|
"2"
|
|
"-s"
|
|
"-w"
|
|
];
|
|
};
|
|
oxfmt = {
|
|
includes = [
|
|
"*.md"
|
|
"*.yaml"
|
|
"*.yml"
|
|
"*.json"
|
|
"*.html"
|
|
"*.css"
|
|
"*.js"
|
|
"*.ts"
|
|
"*.tsx"
|
|
"*.svelte"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
in
|
|
{
|
|
formatter = forAllSystems (system: (treefmtEvalFor system).config.build.wrapper);
|
|
|
|
checks = forAllSystems (
|
|
system:
|
|
let
|
|
pkgs = import nixpkgs { inherit system; };
|
|
in
|
|
{
|
|
pre-commit-check = inputs.git-hooks.lib.${system}.run {
|
|
src = ./.;
|
|
hooks = {
|
|
treefmt = {
|
|
enable = true;
|
|
entry = "${(treefmtEvalFor system).config.build.wrapper}/bin/treefmt";
|
|
pass_filenames = true;
|
|
};
|
|
gitlint.enable = true;
|
|
|
|
gitleaks = {
|
|
enable = true;
|
|
entry = "${pkgs.gitleaks}/bin/gitleaks protect --staged";
|
|
pass_filenames = false;
|
|
};
|
|
|
|
tests = {
|
|
enable = true;
|
|
entry = "echo 'No tests defined yet.'";
|
|
pass_filenames = false;
|
|
stages = [
|
|
"pre-push"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
}
|
|
);
|
|
|
|
devShells = forAllSystems (
|
|
system:
|
|
let
|
|
pkgs = import nixpkgs { inherit system; };
|
|
inherit (self.checks.${system}.pre-commit-check) shellHook enabledPackages;
|
|
customShellHook = shellHook + "";
|
|
bazel9 = pkgs.writeShellScriptBin "bazel" ''
|
|
export USE_BAZEL_VERSION="''${USE_BAZEL_VERSION:-9.0.0}"
|
|
exec ${pkgs.bazelisk}/bin/bazelisk "$@"
|
|
'';
|
|
|
|
in
|
|
{
|
|
default = pkgs.mkShell {
|
|
packages = with pkgs; [
|
|
go
|
|
gopls
|
|
gotools
|
|
|
|
bun
|
|
gitlint
|
|
bazel9
|
|
bazel-buildtools
|
|
];
|
|
|
|
shellHook = ''
|
|
${customShellHook}
|
|
export USE_BAZEL_VERSION="''${USE_BAZEL_VERSION:-9.0.0}"
|
|
export BUN_INSTALL="''${BUN_INSTALL:-$HOME/.bun}"
|
|
export PATH="$BUN_INSTALL/bin:$PATH"
|
|
|
|
if ! command -v oxfmt >/dev/null 2>&1; then
|
|
bun add --global oxfmt
|
|
fi
|
|
|
|
if ! command -v oxlint >/dev/null 2>&1; then
|
|
bun add --global oxlint
|
|
fi
|
|
|
|
if [ -t 1 ]; then
|
|
if command -v tput >/dev/null 2>&1; then
|
|
tput clear
|
|
else
|
|
printf '\033c'
|
|
fi
|
|
fi
|
|
|
|
GREEN='\033[1;32m'
|
|
CYAN='\033[1;36m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[1;34m'
|
|
RESET='\033[0m'
|
|
|
|
printf "\n$GREEN 🚀 Monorepo dev shell ready$RESET\n\n"
|
|
printf " $CYAN Bun:$RESET $YELLOW%s$RESET\n" "$(bun --version)"
|
|
printf " $CYAN Go:$RESET $YELLOW%s$RESET\n" "$(go version)"
|
|
printf " $CYAN Bazel:$RESET $BLUE%s$RESET\n\n" "$(bazel --version)"
|
|
'';
|
|
buildInputs = enabledPackages;
|
|
};
|
|
}
|
|
);
|
|
};
|
|
}
|