👁️
1{
2 inputs = {
3 nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
4 utils.url = "github:numtide/flake-utils";
5 };
6
7 outputs =
8 {
9 self,
10 nixpkgs,
11 utils,
12 }:
13 utils.lib.eachDefaultSystem (
14 system:
15 let
16 pkgs = import nixpkgs {
17 inherit system;
18 overlays = [
19 (final: prev: {
20 atproto-goat = prev.atproto-goat.overrideAttrs (old: {
21 # Patch vendored indigo to remove large-string lint warning
22 # (we intentionally use large strings for long-form richtext content)
23 preBuild =
24 (old.preBuild or "")
25 + ''
26 if [ -d vendor ]; then
27 chmod -R u+w vendor
28 lintFile=vendor/github.com/bluesky-social/indigo/lex/lexlint/lint.go
29 # Verify the pattern exists before patching
30 grep -q 'large-string' "$lintFile" || (echo "ERROR: large-string check not found in lint.go - pattern may have changed" && exit 1)
31 # Remove the large-string check
32 sed -i '/if v.MaxLength != nil && \*v.MaxLength > 20\*1024/,/^[[:space:]]*}$/d' "$lintFile"
33 # Verify it was removed
34 ! grep -q 'large-string' "$lintFile" || (echo "ERROR: failed to remove large-string check" && exit 1)
35 fi
36 '';
37 });
38 })
39 ];
40 };
41 in
42 {
43 devShell =
44 with pkgs;
45 mkShell {
46 buildInputs = [
47 nodejs_22
48 typescript
49 just
50 jq
51 atproto-goat
52 cacert # CA certificates for TLS verification
53 # language servers
54 typescript-language-server
55 typespec
56 # playwright browser for screenshot scripts
57 playwright-driver.browsers
58 ];
59 shellHook = ''
60 export PLAYWRIGHT_BROWSERS_PATH=${playwright-driver.browsers}
61 export PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS=true
62 '';
63 };
64 }
65 );
66}