Skip to content

feat: add Nix development environment with flake support#1119

Merged
akshaydeo merged 1 commit intomainfrom
feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost
Jan 20, 2026
Merged

feat: add Nix development environment with flake support#1119
akshaydeo merged 1 commit intomainfrom
feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost

Conversation

@danpiths
Copy link
Copy Markdown
Collaborator

Summary

Add Nix development environment support to the project using Nix Flakes,
providing a consistent and reproducible development environment across different
platforms.

Changes

  • Added flake.nix to define the development environment with Go and Node.js
  • Added flake.lock for dependency pinning
  • Added .envrc for direnv integration with the flake
  • Updated .gitignore to exclude Nix-specific directories
  • Fixed punctuation in Makefile build message

Type of change

  • Bug fix
  • Feature
  • Refactor
  • Documentation
  • Chore/CI

Affected areas

  • Core (Go)
  • Transports (HTTP)
  • Providers/Integrations
  • Plugins
  • UI (Next.js)
  • Docs

How to test

If you have Nix installed:

# Enter the development environment
nix develop

# Or with direnv
direnv allow

The environment will set up:

  • Project-local GOPATH/GOBIN with common Go tools
  • Project-local npm global prefix
  • All necessary development dependencies

Breaking changes

  • No
  • Yes

Related issues

N/A

Security considerations

The Nix environment is isolated and reproducible, improving development
environment consistency.

Checklist

  • I read docs/contributing/README.md and followed the guidelines
  • I added/updated tests where appropriate
  • I updated documentation where needed
  • I verified builds succeed (Go and UI)
  • I verified the CI pipeline passes locally if applicable

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Dec 17, 2025

📝 Walkthrough

Summary by CodeRabbit

  • Chores
    • Added Nix Flake configuration to provide multi-system development shells (Linux/macOS) with Go, Node.js and developer tools (formatters, linters, debugger)
    • Added direnv configuration for automatic environment activation when entering the project
    • Updated ignore rules to properly exclude build artifacts and Nix-specific directories
    • Minor Makefile formatting tweak

✏️ Tip: You can customize this high-level summary in your review settings.

Walkthrough

Adds a Nix flake (flake.nix) that provides multi-system dev shells with Go and Node tooling, a direnv .envrc invoking the flake, updates .gitignore to ignore target/ and Nix artifacts, and a trivial Makefile newline normalization.

Changes

Cohort / File(s) Summary
Nix flake / dev shells
flake.nix
New flake declaring supportedSystems (x86_64-linux, aarch64-linux, aarch64-darwin), forEachSupportedSystem, and devShells.default. Includes packages (go, gopls, gofumpt, air, delve/dlv, go-tools/staticcheck, nodejs_24) and a shellHook that sets GOPATH/GOBIN/GOMODCACHE/GOCACHE, creates bin dirs, configures npm prefix, and updates PATH.
Direnv integration
.envrc
New file with use flake to instruct direnv to load the flake-based development shell on directory entry.
Repository ignores
.gitignore
Replaced negated -target/ with target/ (now ignored), added Nix-specific ignores: .direnv and .nix-store, plus minor spacing/blank-line adjustments.
Build / Makefile
Makefile
Minor newline/whitespace normalization in an echo line; no behavioral changes.

Sequence Diagram(s)

sequenceDiagram
    participant Dev as Developer (shell)
    participant Direnv as direnv
    participant Flake as flake.nix
    participant Shell as devShell (shellHook)

    Dev->>Direnv: enter project directory
    Direnv->>Flake: evaluate "use flake"
    Flake->>Flake: resolve supportedSystems, select host attrs
    Flake->>Shell: instantiate devShell.default for host
    Shell->>Dev: execute shellHook (set GOPATH/GOBIN/GOMODCACHE/GOCACHE, create bin dirs, set npm prefix, update PATH)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 I nibble flakes where dev-shells softly wake,

Direnv hums "use flake" and I leap into the lake.
GOPATH snug, npm bins all in a row,
Tools align, my little paws can go-go.
Hooray — a tidy shell where rabbit builds can grow.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: add Nix development environment with flake support' clearly and specifically summarizes the main change—adding Nix Flakes support for development environments.
Description check ✅ Passed The PR description covers most required sections: Summary, Changes, Type of change, How to test, Breaking changes, and Checklist are all completed; Affected areas and Security considerations are addressed, though Affected areas checkboxes are unchecked despite being relevant.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost

Comment @coderabbitai help to get the list of available commands and usage tips.

@danpiths danpiths changed the base branch from 12-08-feat_governance_plugin_refactor to graphite-base/1119 December 17, 2025 09:41
@danpiths danpiths force-pushed the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch from bc0a584 to 0ed2f53 Compare December 17, 2025 09:41
@danpiths danpiths changed the base branch from graphite-base/1119 to 12-09-chore_governance_tests_added December 17, 2025 09:41
@danpiths danpiths changed the title feat: Add Nix development environment with flake support feat: add Nix development environment with flake support Dec 17, 2025
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (3)
Makefile (1)

154-155: Consider clarifying the static build message.

The sentence now reads: "This will create a statically linked build, to build with dynamic plugin support." This is grammatically awkward since static linking doesn't support dynamic plugins. Compare with the dynamic branch (lines 151-152) which has clearer separate sentences.

Consider keeping the period and capitalization to match the dynamic branch, or rewording to clarify that users should use DYNAMIC=1 for plugin support:

-		echo "$(YELLOW)Note: This will create a statically linked build,$(NC)"; \
-		echo "$(YELLOW)to build with dynamic plugin support.$(NC)"; \
+		echo "$(YELLOW)Note: This will create a statically linked build.$(NC)"; \
+		echo "$(YELLOW)Use DYNAMIC=1 for dynamic plugin support.$(NC)"; \
flake.nix (2)

12-16: Consider adding x86_64-darwin support for Intel Macs.

The supported systems list omits x86_64-darwin (64-bit Intel macOS). While Apple Silicon is increasingly common, some developers may still use Intel Macs.

     supportedSystems = [
       "x86_64-linux" # 64-bit Intel/AMD Linux
       "aarch64-linux" # 64-bit ARM Linux
       "aarch64-darwin" # 64-bit ARM macOS
+      "x86_64-darwin" # 64-bit Intel macOS
     ];

68-68: Prepend project-local paths to PATH for tool priority.

Appending to PATH means system-wide tools take precedence over project-local ones. Prepending ensures the Nix-managed project tools are used first:

-            export PATH="$PATH:$GOBIN"
+            export PATH="$GOBIN:$PATH"

Apply the same pattern to line 97:

-            export PATH="$PATH:$npm_config_prefix/bin"
+            export PATH="$npm_config_prefix/bin:$PATH"
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e0d915d and 0ed2f53.

⛔ Files ignored due to path filters (1)
  • flake.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .envrc (1 hunks)
  • .gitignore (1 hunks)
  • Makefile (2 hunks)
  • flake.nix (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**

⚙️ CodeRabbit configuration file

always check the stack if there is one for the current PR. do not give localized reviews for the PR, always see all changes in the light of the whole stack of PRs (if there is a stack, if there is no stack you can continue to make localized suggestions/reviews)

Files:

  • flake.nix
  • Makefile
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
🔇 Additional comments (4)
.envrc (1)

1-1: LGTM!

Standard direnv configuration for Nix flake integration. This correctly enables automatic environment activation when entering the project directory.

.gitignore (1)

58-60: LGTM!

The ignore patterns correctly exclude the direnv cache directory and the project-local .nix-store directory used for Go and npm artifacts in the flake's shellHook.

flake.nix (2)

70-85: LGTM with minor consideration.

The auto-installation of Go tools (gopls, air, dlv, staticcheck) is convenient for onboarding. The command -v checks ensure tools are only installed if missing, which is efficient for subsequent shell activations.

Note: First-time shell activation will be slower due to tool downloads. This is acceptable for a development environment.


48-51: nodejs_24 is available in nixpkgs-unstable.

Node.js 24 is included in nixos-unstable, and Node.js 24 is in active LTS status and ready for production use. There's no need to change this reference unless targeting macOS, where there are known build issues.

Likely an incorrect or invalid review comment.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (3)
Makefile (1)

154-156: Clarify the build message for static linking.

The current message reads: "This will create a statically linked build, to build with dynamic plugin support." This phrasing is incomplete—it seems to be trailing off without explaining how to build with dynamic plugin support. Consider completing the sentence:

 	else \
-		echo "$(YELLOW)Note: This will create a statically linked build,$(NC)"; \
-		echo "$(YELLOW)to build with dynamic plugin support.$(NC)"; \
+		echo "$(YELLOW)Note: This will create a statically linked build.$(NC)"; \
+		echo "$(YELLOW)To build with dynamic plugin support, use: make build DYNAMIC=1$(NC)"; \
 	fi
flake.nix (2)

12-16: Consider adding x86_64-darwin support.

Intel-based Macs (x86_64-darwin) are not included in the supported systems. While Apple Silicon is increasingly common, some developers may still use Intel Macs.

     supportedSystems = [
       "x86_64-linux" # 64-bit Intel/AMD Linux
       "aarch64-linux" # 64-bit ARM Linux
       "aarch64-darwin" # 64-bit ARM macOS
+      "x86_64-darwin" # 64-bit Intel macOS
     ];

68-68: Consider prepending project paths to PATH.

The current configuration appends $GOBIN after $PATH, meaning system-installed tools take precedence over project-local ones. For a reproducible dev environment, project-local tools should typically take precedence.

-            export PATH="$PATH:$GOBIN"
+            export PATH="$GOBIN:$PATH"

Apply the same pattern on line 97 for npm:

-            export PATH="$PATH:$npm_config_prefix/bin"
+            export PATH="$npm_config_prefix/bin:$PATH"
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e0d915d and 0ed2f53.

⛔ Files ignored due to path filters (1)
  • flake.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .envrc (1 hunks)
  • .gitignore (1 hunks)
  • Makefile (2 hunks)
  • flake.nix (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**

⚙️ CodeRabbit configuration file

always check the stack if there is one for the current PR. do not give localized reviews for the PR, always see all changes in the light of the whole stack of PRs (if there is a stack, if there is no stack you can continue to make localized suggestions/reviews)

Files:

  • Makefile
  • flake.nix
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
🔇 Additional comments (4)
.envrc (1)

1-1: LGTM!

Standard direnv configuration for Nix flake integration. The use flake directive correctly references the flake.nix in the same directory, and direnv's security model requires explicit direnv allow before activation.

.gitignore (1)

58-60: LGTM!

The Nix-specific ignores correctly match the directories configured in flake.nix: .direnv for direnv cache and .nix-store for the project-local Go/npm artifacts defined in the shellHook.

flake.nix (2)

70-85: Tool installation runs on every shell entry when tools are missing.

The conditional installation is correct, but note that go install will run during shell activation if tools are missing, which may cause a delay on first entry or if GOBIN is cleared. This is acceptable but worth documenting in the PR description or README for developer awareness.


48-51: Verify nodejs_24 package availability in current nixpkgs.

The package naming convention nodejs_24 aligns with nixpkgs patterns (e.g., nodejs_22, nodejs_23), but availability in nixpkgs-unstable could not be confirmed. Check the nixpkgs package repository or use nix search nixpkgs nodejs to verify the exact package name available for your target Node.js version.

@Pratham-Mishra04 Pratham-Mishra04 changed the base branch from 12-09-chore_governance_tests_added to graphite-base/1119 December 17, 2025 11:41
@danpiths danpiths force-pushed the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch from 0ed2f53 to b9764ab Compare December 22, 2025 12:27
@danpiths danpiths changed the base branch from graphite-base/1119 to 12-09-chore_governance_tests_added December 22, 2025 12:27
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
flake.nix (1)

12-16: Consider adding x86_64-darwin support for Intel Mac users.

The flake supports ARM macOS (aarch64-darwin) but omits x86_64-darwin (Intel macOS). If any developers use Intel Macs, they won't be able to use this development environment. If this is intentional, no action needed.

🔎 Proposed addition
     supportedSystems = [
       "x86_64-linux" # 64-bit Intel/AMD Linux
       "aarch64-linux" # 64-bit ARM Linux
       "aarch64-darwin" # 64-bit ARM macOS
+      "x86_64-darwin" # 64-bit Intel macOS
     ];
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0ed2f53 and b9764ab.

⛔ Files ignored due to path filters (1)
  • flake.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .envrc
  • .gitignore
  • Makefile
  • flake.nix
🚧 Files skipped from review as they are similar to previous changes (3)
  • .envrc
  • Makefile
  • .gitignore
🧰 Additional context used
📓 Path-based instructions (1)
**

⚙️ CodeRabbit configuration file

always check the stack if there is one for the current PR. do not give localized reviews for the PR, always see all changes in the light of the whole stack of PRs (if there is a stack, if there is no stack you can continue to make localized suggestions/reviews)

Files:

  • flake.nix
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
🔇 Additional comments (4)
flake.nix (4)

27-28: Verify that allowUnfree is necessary.

The configuration enables unfree (proprietary) packages. The currently listed packages (go, nodejs_24) are both free/open-source. If you don't need any proprietary tools, you can remove this setting for stricter licensing compliance.


48-51: Package declarations look good.

The base packages (go, nodejs_24) are appropriate. However, the Go development tools installed later in the shellHook (gopls, air, dlv, staticcheck) should ideally be declared here as Nix packages for better reproducibility. This will be addressed in a separate comment on the shellHook section.


87-97: Node/npm environment setup looks good.

The npm configuration appropriately sets up a project-local "global" prefix, which allows developers to install global npm packages in an isolated project directory. This approach is idiomatic and doesn't have the reproducibility issues present in the Go setup.


6-6: Use a stable nixpkgs branch instead of staging-next.

The staging-next branch is intended only for stabilization fixes and security fixes before merging to master, and receives mass rebuilds like Mesa updates, introducing instability. For a reproducible development environment, use nixpkgs-unstable which follows the master branch delivering tested updates, or pin a stable release like nixos-24.11.

-    nixpkgs.url = "github:NixOS/nixpkgs/staging-next";
+    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";

Comment thread flake.nix Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
flake.nix (3)

54-54: Optional: Remove redundant empty env object.

The empty env = {} object can be removed as it serves no purpose.

🔎 Proposed change
-          # Set any environment variables for your development environment
-          env = {};
-
           # Add any shell logic you want executed when the environment is activated

70-85: Consider using Nix packages for Go tools instead of @latest installations.

Installing Go tools with @latest undermines the reproducibility that Nix provides. Different developers entering the environment at different times will get different tool versions, and the environment won't be truly reproducible.

Consider adding these tools to the packages list instead:

🔎 Alternative approach using Nix packages
 packages = with pkgs; [
   go
   nodejs_24
+  gopls
+  air
+  delve
+  go-tools # provides staticcheck
 ];

This approach ensures:

  • All developers get the exact same tool versions
  • Tools are cached by Nix and don't need to be compiled
  • The environment is truly reproducible
  • Faster shell activation (no need to check and install)

If you need to keep the shellHook approach, consider pinning specific versions instead of using @latest:

go install golang.org/x/tools/gopls@v0.14.2

68-68: Consider prepending to PATH instead of appending.

Lines 68 and 97 append the project-local bin directories to $PATH. Prepending (e.g., export PATH="$GOBIN:$PATH") ensures that project-local tools take precedence over system-wide installations, which is typically the desired behavior in a development environment.

🔎 Proposed change
-            export PATH="$PATH:$GOBIN"
+            export PATH="$GOBIN:$PATH"
-            export PATH="$PATH:$npm_config_prefix/bin"
+            export PATH="$npm_config_prefix/bin:$PATH"

Also applies to: 97-97

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0ed2f53 and b9764ab.

⛔ Files ignored due to path filters (1)
  • flake.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .envrc
  • .gitignore
  • Makefile
  • flake.nix
✅ Files skipped from review due to trivial changes (1)
  • Makefile
🚧 Files skipped from review as they are similar to previous changes (2)
  • .envrc
  • .gitignore
🧰 Additional context used
📓 Path-based instructions (1)
**

⚙️ CodeRabbit configuration file

always check the stack if there is one for the current PR. do not give localized reviews for the PR, always see all changes in the light of the whole stack of PRs (if there is a stack, if there is no stack you can continue to make localized suggestions/reviews)

Files:

  • flake.nix
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (12)
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
  • GitHub Check: Graphite / mergeability_check
🔇 Additional comments (1)
flake.nix (1)

12-16: Consider adding Intel macOS support.

The flake currently supports ARM macOS (aarch64-darwin) but not Intel macOS (x86_64-darwin). If any team members use Intel Macs, they won't be able to use this development environment.

Consider adding "x86_64-darwin" to the supportedSystems list if Intel Mac support is needed:

🔎 Proposed addition
 supportedSystems = [
   "x86_64-linux" # 64-bit Intel/AMD Linux
   "aarch64-linux" # 64-bit ARM Linux
   "aarch64-darwin" # 64-bit ARM macOS
+  "x86_64-darwin" # 64-bit Intel macOS
 ];

Comment thread flake.nix
@danpiths danpiths force-pushed the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch from b9764ab to f6b85fa Compare December 22, 2025 13:05
@Pratham-Mishra04 Pratham-Mishra04 changed the base branch from 12-09-chore_governance_tests_added to graphite-base/1119 December 22, 2025 15:28
@danpiths danpiths force-pushed the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch from f6b85fa to 654de5d Compare December 23, 2025 08:00
@danpiths danpiths changed the base branch from graphite-base/1119 to 12-09-chore_governance_tests_added December 23, 2025 08:00
@Pratham-Mishra04 Pratham-Mishra04 changed the base branch from 12-09-chore_governance_tests_added to graphite-base/1119 December 23, 2025 14:42
@danpiths danpiths force-pushed the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch from 654de5d to be49a44 Compare December 24, 2025 05:08
@akshaydeo akshaydeo force-pushed the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch from be49a44 to ee064c2 Compare December 24, 2025 12:13
@graphite-app graphite-app Bot changed the base branch from graphite-base/1119 to v1.4.0 December 24, 2025 12:13
@akshaydeo akshaydeo force-pushed the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch from ee064c2 to 51556a1 Compare December 24, 2025 12:13
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
.gitignore (1)

43-45: Consolidate duplicate "Cursor specific" section headers.

Two separate "Cursor specific" comment sections exist at lines 43-45 (containing .claude) and lines 55-56 (containing .cursor/). Consolidate these into a single section for better maintainability and clarity.

🔎 Proposed consolidation
 # Cursor specific
 .claude
+.cursor/

-# Python specific
+# Python specific

Then remove the duplicate section header at lines 55-56.

Also applies to: 55-56

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between be49a44 and 51556a1.

⛔ Files ignored due to path filters (1)
  • flake.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .envrc
  • .gitignore
  • Makefile
  • flake.nix
✅ Files skipped from review due to trivial changes (1)
  • .envrc
🚧 Files skipped from review as they are similar to previous changes (2)
  • flake.nix
  • Makefile
🔇 Additional comments (1)
.gitignore (1)

58-60: Nix-specific entries align well with the flake-based dev environment.

The addition of .direnv and .nix-store to the ignore list is appropriate for the Nix Flakes integration. These entries ensure that direnv and Nix store artifacts are not accidentally committed.

@danpiths danpiths force-pushed the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch 2 times, most recently from c6e01b1 to 60af306 Compare December 24, 2025 14:40
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
flake.nix (2)

6-6: Consider documenting the staging-next branch choice.

As noted in previous discussions, staging-next is used because Go 1.25.5 is required and not yet available on nixpkgs-unstable. Adding a brief inline comment would help future maintainers understand when it's safe to migrate to a more stable branch.

🔎 Suggested documentation addition
   inputs = {
+    # Using staging-next for Go 1.25.5 availability (not yet in nixpkgs-unstable)
     nixpkgs.url = "github:NixOS/nixpkgs/staging-next";
   };

74-74: Consider prepending project tool directories to PATH instead of appending.

The shellHook appends $GOBIN and $npm_config_prefix/bin to PATH, which means system-installed tools will take precedence over the Nix-provided project tools. This could lead to unexpected behavior if system-installed versions differ from those in the Nix environment.

🔎 Suggested PATH precedence change
             mkdir -p "$GOBIN" "$GOMODCACHE" "$GOCACHE"
 
-            export PATH="$PATH:$GOBIN"
+            export PATH="$GOBIN:$PATH"
 
             ##
             ## Node: project-local "global" npm prefix
             mkdir -p "$npm_config_prefix/bin"
 
             # Ensure "global" npm bin is on PATH for this shell only
-            export PATH="$PATH:$npm_config_prefix/bin"
+            export PATH="$npm_config_prefix/bin:$PATH"
           '';

Alternatively, consolidate both PATH updates into a single export:

             mkdir -p "$GOBIN" "$GOMODCACHE" "$GOCACHE"
 
-            export PATH="$PATH:$GOBIN"
-
             ##
             ## Node: project-local "global" npm prefix
             ##
             mkdir -p "$npm_config_prefix/bin"
 
-            # Ensure "global" npm bin is on PATH for this shell only
-            export PATH="$PATH:$npm_config_prefix/bin"
+            # Ensure project tools take precedence over system tools
+            export PATH="$GOBIN:$npm_config_prefix/bin:$PATH"
           '';

Also applies to: 86-86

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c6e01b1 and 60af306.

⛔ Files ignored due to path filters (1)
  • flake.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .envrc
  • .gitignore
  • Makefile
  • flake.nix
✅ Files skipped from review due to trivial changes (1)
  • Makefile
🚧 Files skipped from review as they are similar to previous changes (1)
  • .envrc
🧰 Additional context used
📓 Path-based instructions (1)
**

⚙️ CodeRabbit configuration file

always check the stack if there is one for the current PR. do not give localized reviews for the PR, always see all changes in the light of the whole stack of PRs (if there is a stack, if there is no stack you can continue to make localized suggestions/reviews)

Files:

  • flake.nix
🔇 Additional comments (4)
.gitignore (1)

56-60: LGTM! Appropriate ignore rules for the Nix development environment.

The updates correctly ignore Nix-specific artifacts (.direnv from direnv activation and .nix-store used as the project-local directory in the flake's shellHook) and switch .cursor/ from negated to actively ignored.

flake.nix (3)

28-28: Verify that allowUnfree is necessary for the development environment.

The flake enables unfree packages with config.allowUnfree = true. Based on the packages declared (Go, Node.js, and Go development tools), all appear to be open-source and freely licensed. Enabling unfree packages may be unnecessary unless specific unfree dependencies are planned.

If unfree packages aren't required, consider removing this setting to maintain a more restrictive (and typical) Nix environment:

🔎 Suggested change if unfree packages aren't needed
             pkgs = import inputs.nixpkgs {
               inherit system;
-              # Enable using unfree packages
-              config.allowUnfree = true;
             };

48-57: LGTM! Go tools are now declared as reproducible Nix packages.

The development tools (gopls, air, delve, go-tools, gofumpt) are correctly declared as Nix packages rather than being installed dynamically with @latest. This ensures reproducible builds across all developers and addresses the concern from the previous review.


12-16: Document the rationale for excluding x86_64-darwin (Intel macOS) support.

The flake.nix explicitly supports ARM macOS but not Intel macOS. While this likely reflects Apple's deprecation of Intel Macs in favor of Apple Silicon, the decision should be documented if intentional. If any team members still use Intel-based Macs, add "x86_64-darwin" to the supportedSystems list.

@danpiths danpiths changed the base branch from v1.4.0 to graphite-base/1119 December 24, 2025 16:03
@danpiths danpiths force-pushed the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch from 60af306 to d4e7365 Compare December 24, 2025 16:03
@danpiths danpiths changed the base branch from graphite-base/1119 to 11-19-plugins_v2_architecture December 24, 2025 16:03
@akshaydeo akshaydeo mentioned this pull request Dec 24, 2025
15 tasks
@danpiths danpiths changed the base branch from 11-19-plugins_v2_architecture to graphite-base/1119 December 24, 2025 18:31
@danpiths danpiths force-pushed the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch from d4e7365 to b0ed2b6 Compare January 2, 2026 05:45
@danpiths danpiths force-pushed the graphite-base/1119 branch from 810ac1d to 122e22a Compare January 2, 2026 05:45
@danpiths danpiths changed the base branch from graphite-base/1119 to v1.4.0 January 2, 2026 05:45
Base automatically changed from v1.4.0 to main January 12, 2026 09:18
@danpiths danpiths force-pushed the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch from b0ed2b6 to 074ece1 Compare January 16, 2026 13:31
@danpiths danpiths requested a review from akshaydeo January 16, 2026 13:31
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @.gitignore:
- Around line 60-62: Replace the non-standard `.nix-store` entry in .gitignore
with the standard Nix build output patterns by removing `.nix-store` and adding
`result` and `result-*`; keep the existing `.direnv` entry as-is so Nix flake
build symlinks created by `nix build` are properly ignored.
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b0ed2b6 and 074ece1.

⛔ Files ignored due to path filters (1)
  • flake.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .envrc
  • .gitignore
  • Makefile
  • flake.nix
✅ Files skipped from review due to trivial changes (2)
  • Makefile
  • .envrc
🚧 Files skipped from review as they are similar to previous changes (1)
  • flake.nix
🔇 Additional comments (1)
.gitignore (1)

58-58: LGTM: Properly ignores build artifacts.

The target/ pattern correctly ignores the build output directory, which is standard for many build systems.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment thread .gitignore
@danpiths danpiths force-pushed the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch 2 times, most recently from dbdfd7e to a63e698 Compare January 19, 2026 14:59
@danpiths danpiths force-pushed the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch from a63e698 to 8a05992 Compare January 20, 2026 06:51
Copy link
Copy Markdown
Contributor

akshaydeo commented Jan 20, 2026

Merge activity

  • Jan 20, 8:34 AM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Jan 20, 8:34 AM UTC: @akshaydeo merged this pull request with Graphite.

@akshaydeo akshaydeo merged commit eae02f0 into main Jan 20, 2026
8 checks passed
@akshaydeo akshaydeo deleted the feature/12-12-_nix_support_adds_nix_flake_support_for_bifrost branch January 20, 2026 08:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants