2026-04-21 20:24:38 +02:00
|
|
|
|
# AI coding agent development environment with coding rules
|
|
|
|
|
|
# Sets up coding rules for OpenCode and Pi, plus useful companion tools.
|
|
|
|
|
|
# Usage: nix develop .#coding
|
|
|
|
|
|
#
|
|
|
|
|
|
# To enable coding rules, add the agents input to your flake:
|
|
|
|
|
|
# agents = {
|
|
|
|
|
|
# url = "git+https://code.m3ta.dev/m3tam3re/AGENTS";
|
|
|
|
|
|
# flake = false;
|
|
|
|
|
|
# };
|
|
|
|
|
|
{
|
|
|
|
|
|
pkgs,
|
|
|
|
|
|
lib ? pkgs.lib,
|
|
|
|
|
|
inputs ? null,
|
|
|
|
|
|
agents ? null,
|
|
|
|
|
|
}: let
|
|
|
|
|
|
# Import the coding-rules library
|
|
|
|
|
|
m3taLib = import ../lib {lib = pkgs.lib;};
|
|
|
|
|
|
|
|
|
|
|
|
# Import custom packages
|
|
|
|
|
|
customPackages = import ../pkgs {inherit pkgs inputs;};
|
|
|
|
|
|
|
|
|
|
|
|
# Create rules configuration only if agents input is provided
|
|
|
|
|
|
rulesConfig = lib.optionalAttrs (agents != null) {
|
|
|
|
|
|
rules = m3taLib.coding-rules.mkCodingRules {
|
|
|
|
|
|
inherit agents;
|
|
|
|
|
|
|
|
|
|
|
|
# Languages relevant to this repository
|
|
|
|
|
|
languages = ["nix" "python" "shell"];
|
|
|
|
|
|
|
|
|
|
|
|
# Frameworks used in this repo
|
|
|
|
|
|
frameworks = ["n8n"];
|
|
|
|
|
|
|
|
|
|
|
|
# Standard concerns for development
|
|
|
|
|
|
concerns = [
|
|
|
|
|
|
"coding-style"
|
|
|
|
|
|
"naming"
|
|
|
|
|
|
"documentation"
|
|
|
|
|
|
"testing"
|
|
|
|
|
|
"git-workflow"
|
|
|
|
|
|
"project-structure"
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
# Also append rules to AGENTS.md for Pi agent discovery
|
|
|
|
|
|
forPi = true;
|
|
|
|
|
|
};
|
|
|
|
|
|
};
|
|
|
|
|
|
in
|
|
|
|
|
|
pkgs.mkShell {
|
|
|
|
|
|
name = "coding";
|
|
|
|
|
|
|
|
|
|
|
|
# Development tools
|
2026-04-22 18:50:31 +02:00
|
|
|
|
buildInputs = with pkgs; [
|
|
|
|
|
|
# Task management for AI coding sessions
|
|
|
|
|
|
customPackages.td
|
2026-04-21 20:24:38 +02:00
|
|
|
|
|
2026-04-22 18:50:31 +02:00
|
|
|
|
# Companion tool for CLI agents (diffs, file trees, task management)
|
|
|
|
|
|
customPackages.sidecar
|
2026-04-21 20:24:38 +02:00
|
|
|
|
|
2026-04-22 18:50:31 +02:00
|
|
|
|
# Code analysis tools
|
2026-04-21 20:24:38 +02:00
|
|
|
|
|
2026-04-22 18:50:31 +02:00
|
|
|
|
# Nix development tools (for this repo)
|
|
|
|
|
|
nil
|
|
|
|
|
|
alejandra
|
|
|
|
|
|
statix
|
|
|
|
|
|
deadnix
|
|
|
|
|
|
];
|
2026-04-21 20:24:38 +02:00
|
|
|
|
|
|
|
|
|
|
shellHook = ''
|
|
|
|
|
|
echo "🤖 AI Coding Environment"
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
|
|
${
|
|
|
|
|
|
if (agents != null)
|
|
|
|
|
|
then ''
|
|
|
|
|
|
# Set up coding rules for OpenCode + Pi
|
|
|
|
|
|
${rulesConfig.rules.shellHook}
|
|
|
|
|
|
|
|
|
|
|
|
echo "✅ Coding rules configured (OpenCode + Pi)"
|
|
|
|
|
|
echo " Languages: nix, python, shell"
|
|
|
|
|
|
echo " Frameworks: n8n"
|
|
|
|
|
|
echo " Concerns: coding-style, naming, documentation, testing, git-workflow, project-structure"
|
|
|
|
|
|
''
|
|
|
|
|
|
else ''
|
|
|
|
|
|
echo "⚠️ Coding rules not configured"
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo "To enable, add the agents input to your flake.nix:"
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo " agents = {"
|
|
|
|
|
|
echo " url = \"git+https://code.m3ta.dev/m3tam3re/AGENTS\";"
|
|
|
|
|
|
echo " flake = false;"
|
|
|
|
|
|
echo " };"
|
|
|
|
|
|
''
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo "Available tools:"
|
|
|
|
|
|
echo " opencode - AI coding agent"
|
|
|
|
|
|
echo " td usage --new-session - View current tasks"
|
|
|
|
|
|
echo " sidecar - Companion tool (diffs, file trees, tasks)"
|
|
|
|
|
|
echo " code2prompt - Convert code to prompts"
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo "Nix development tools:"
|
|
|
|
|
|
echo " nix flake check - Check flake validity"
|
|
|
|
|
|
echo " nix fmt . - Format Nix files"
|
|
|
|
|
|
echo " statix check . - Lint Nix files"
|
|
|
|
|
|
echo " deadnix . - Find dead code"
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
'';
|
|
|
|
|
|
}
|