trevstack/flake.nix
2025-03-12 18:29:56 -04:00

79 lines
2.1 KiB
Nix

{
description = "A trevstack development environment";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { nixpkgs, flake-utils, ... }@inputs:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
protoc-gen-connect-openapi = pkgs.buildGoModule rec {
name = "protoc-gen-connect-openapi";
src = pkgs.fetchFromGitHub {
owner = "sudorandom";
repo = "protoc-gen-connect-openapi";
rev = "v0.16.1";
sha256 = "sha256-3XBQCc9H9N/AZm/8J5bJRgBhVtoZKFvbdTB+glHxYdA=";
};
vendorHash = "sha256-CIiG/XhV8xxjYY0sZcSvIFcJ1Wh8LyDDwqem2cSSwBA=";
nativeCheckInputs = with pkgs; [ less ];
};
in
{
devShells.default = pkgs.mkShell {
packages = with pkgs; [
# Go backend
go
gotools
gopls
goreleaser
air
# Protobuf middleware
buf
protoc-gen-go
protoc-gen-connect-go
protoc-gen-connect-openapi
# Svelte frontend
nodejs_22
# Helper scripts
(writeShellApplication {
name = "run";
text = ''
gitroot=$(git rev-parse --show-toplevel)
(cd "''${gitroot}" && air) & (cd "''${gitroot}" && npm run dev) && fg
'';
})
(writeShellApplication {
name = "build";
text = ''
gitroot=$(git rev-parse --show-toplevel)
(cd "''${gitroot}" && npm run build) && (cd "''${gitroot}" && go build -o ./build_server/golte .)
'';
})
(writeShellApplication {
name = "gen";
text = ''
gitroot=$(git rev-parse --show-toplevel)
(cd "''${gitroot}" && buf generate)
'';
})
];
};
}
);
}