up
This commit is contained in:
6
modules/_overlays/ast-grep.nix
Normal file
6
modules/_overlays/ast-grep.nix
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{inputs, ...}: final: prev: {
|
||||||
|
ast-grep =
|
||||||
|
prev.ast-grep.overrideAttrs (old: {
|
||||||
|
doCheck = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
44
modules/_overlays/cog-cli.nix
Normal file
44
modules/_overlays/cog-cli.nix
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{inputs, ...}: final: prev: let
|
||||||
|
version = "0.22.1";
|
||||||
|
srcs = {
|
||||||
|
x86_64-linux =
|
||||||
|
prev.fetchurl {
|
||||||
|
url = "https://github.com/trycog/cog-cli/releases/download/v${version}/cog-linux-x86_64.tar.gz";
|
||||||
|
hash = "sha256-ET+sNXisUrHShR1gxqdumegXycXcxGzJcQOdTr5005w=";
|
||||||
|
};
|
||||||
|
aarch64-darwin =
|
||||||
|
prev.fetchurl {
|
||||||
|
url = "https://github.com/trycog/cog-cli/releases/download/v${version}/cog-darwin-arm64.tar.gz";
|
||||||
|
hash = "sha256-jcN+DtOqr3or5C71jp7AIAz0wh73FYybCC4FRBykKO4=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
cog-cli =
|
||||||
|
prev.stdenvNoCC.mkDerivation {
|
||||||
|
pname = "cog-cli";
|
||||||
|
inherit version;
|
||||||
|
src =
|
||||||
|
srcs.${prev.stdenv.hostPlatform.system}
|
||||||
|
or (throw "Unsupported system for cog-cli: ${prev.stdenv.hostPlatform.system}");
|
||||||
|
|
||||||
|
dontUnpack = true;
|
||||||
|
dontConfigure = true;
|
||||||
|
dontBuild = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
tar -xzf "$src"
|
||||||
|
install -Dm755 cog "$out/bin/cog"
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with prev.lib; {
|
||||||
|
description = "Memory, code intelligence, and debugging for AI agents";
|
||||||
|
homepage = "https://github.com/trycog/cog-cli";
|
||||||
|
license = licenses.mit;
|
||||||
|
mainProgram = "cog";
|
||||||
|
platforms = builtins.attrNames srcs;
|
||||||
|
sourceProvenance = [sourceTypes.binaryNativeCode];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
3
modules/_overlays/himalaya.nix
Normal file
3
modules/_overlays/himalaya.nix
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{inputs, ...}: final: prev: {
|
||||||
|
himalaya = inputs.himalaya.packages.${prev.stdenv.hostPlatform.system}.default;
|
||||||
|
}
|
||||||
15
modules/_overlays/jj-ryu.nix
Normal file
15
modules/_overlays/jj-ryu.nix
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{inputs, ...}: final: prev: let
|
||||||
|
naersk-lib = prev.callPackage inputs.naersk {};
|
||||||
|
manifest = (prev.lib.importTOML "${inputs.jj-ryu}/Cargo.toml").package;
|
||||||
|
in {
|
||||||
|
jj-ryu =
|
||||||
|
naersk-lib.buildPackage {
|
||||||
|
pname = manifest.name;
|
||||||
|
version = manifest.version;
|
||||||
|
src = inputs.jj-ryu;
|
||||||
|
nativeBuildInputs = [prev.pkg-config];
|
||||||
|
buildInputs = [prev.openssl];
|
||||||
|
OPENSSL_NO_VENDOR = 1;
|
||||||
|
doCheck = false;
|
||||||
|
};
|
||||||
|
}
|
||||||
1
modules/_overlays/jj-starship.nix
Normal file
1
modules/_overlays/jj-starship.nix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{inputs, ...}: inputs.jj-starship.overlays.default
|
||||||
10
modules/_overlays/pi-agent-stuff.nix
Normal file
10
modules/_overlays/pi-agent-stuff.nix
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{inputs, ...}: final: prev: {
|
||||||
|
pi-agent-stuff =
|
||||||
|
prev.buildNpmPackage {
|
||||||
|
pname = "pi-agent-stuff";
|
||||||
|
version = "1.5.0";
|
||||||
|
src = inputs.pi-agent-stuff;
|
||||||
|
npmDepsHash = "sha256-pyXMNdlie8vAkhz2f3GUGT3CCYuwt+xkWnsijBajXIo=";
|
||||||
|
dontNpmBuild = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
33
modules/_overlays/pi-harness.nix
Normal file
33
modules/_overlays/pi-harness.nix
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{inputs, ...}: final: prev: {
|
||||||
|
pi-harness =
|
||||||
|
prev.stdenvNoCC.mkDerivation {
|
||||||
|
pname = "pi-harness";
|
||||||
|
version = "0.0.0";
|
||||||
|
src = inputs.pi-harness;
|
||||||
|
|
||||||
|
pnpmDeps =
|
||||||
|
prev.fetchPnpmDeps {
|
||||||
|
pname = "pi-harness";
|
||||||
|
version = "0.0.0";
|
||||||
|
src = inputs.pi-harness;
|
||||||
|
pnpm = prev.pnpm_10;
|
||||||
|
fetcherVersion = 1;
|
||||||
|
hash = "sha256-FgtJnmJ0/udz2A9N2DQns+a2CspMDEDk0DPUAxmCVY4=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
prev.pnpmConfigHook
|
||||||
|
prev.pnpm_10
|
||||||
|
prev.nodejs
|
||||||
|
];
|
||||||
|
|
||||||
|
dontBuild = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
mkdir -p $out/lib/node_modules/@aliou/pi-harness
|
||||||
|
cp -r . $out/lib/node_modules/@aliou/pi-harness
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
16
modules/_overlays/pi-mcp-adapter.nix
Normal file
16
modules/_overlays/pi-mcp-adapter.nix
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{inputs, ...}: final: prev: {
|
||||||
|
pi-mcp-adapter =
|
||||||
|
prev.buildNpmPackage {
|
||||||
|
pname = "pi-mcp-adapter";
|
||||||
|
version = "2.2.0";
|
||||||
|
src =
|
||||||
|
prev.fetchFromGitHub {
|
||||||
|
owner = "nicobailon";
|
||||||
|
repo = "pi-mcp-adapter";
|
||||||
|
rev = "v2.2.0";
|
||||||
|
hash = "sha256-E6Kf+OyTN/pF8pKADJO0B1+buAPqNcXnZl9ssZwSP8U=";
|
||||||
|
};
|
||||||
|
npmDepsHash = "sha256-myJ9h/zC/KDddt8NOVvJjjqbnkdEN4ZR+okCR5nu7hM=";
|
||||||
|
dontNpmBuild = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
3
modules/_overlays/zjstatus.nix
Normal file
3
modules/_overlays/zjstatus.nix
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{inputs, ...}: final: prev: {
|
||||||
|
zjstatus = inputs.zjstatus.packages.${prev.stdenv.hostPlatform.system}.default;
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
den.aspects.ai-tools.homeManager = {
|
den.aspects.ai-tools.homeManager = {
|
||||||
pkgs,
|
pkgs,
|
||||||
inputs',
|
inputs',
|
||||||
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
home.packages = [
|
home.packages = [
|
||||||
@@ -28,6 +29,152 @@
|
|||||||
source = "${inputs.pi-elixir}/skills/elixir-dev";
|
source = "${inputs.pi-elixir}/skills/elixir-dev";
|
||||||
recursive = true;
|
recursive = true;
|
||||||
};
|
};
|
||||||
|
".pi/agent/skills/jujutsu/SKILL.md".text =
|
||||||
|
lib.removePrefix "\n" (builtins.replaceStrings ["\t"] [""] ''
|
||||||
|
---
|
||||||
|
name: jujutsu
|
||||||
|
description: Manages version control with Jujutsu (jj), including rebasing, conflict resolution, and Git interop. Use when tracking changes, navigating history, squashing/splitting commits, or pushing to Git remotes.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Jujutsu
|
||||||
|
|
||||||
|
Git-compatible VCS focused on concurrent development and ease of use.
|
||||||
|
|
||||||
|
> ⚠️ **Not Git!** Jujutsu syntax differs from Git:
|
||||||
|
>
|
||||||
|
> - Parent: `@-` not `@~1` or `@^`
|
||||||
|
> - Grandparent: `@--` not `@~2`
|
||||||
|
> - Child: `@+` not `@~-1`
|
||||||
|
> - Use `jj log` not `jj changes`
|
||||||
|
|
||||||
|
## Key Commands
|
||||||
|
|
||||||
|
| Command | Description |
|
||||||
|
| -------------------------- | -------------------------------------------- |
|
||||||
|
| `jj st` | Show working copy status |
|
||||||
|
| `jj log` | Show change log |
|
||||||
|
| `jj diff` | Show changes in working copy |
|
||||||
|
| `jj new` | Create new change |
|
||||||
|
| `jj desc` | Edit change description |
|
||||||
|
| `jj squash` | Move changes to parent |
|
||||||
|
| `jj split` | Split current change |
|
||||||
|
| `jj rebase -s src -d dest` | Rebase changes |
|
||||||
|
| `jj absorb` | Move changes into stack of mutable revisions |
|
||||||
|
| `jj bisect` | Find bad revision by bisection |
|
||||||
|
| `jj fix` | Update files with formatting fixes |
|
||||||
|
| `jj sign` | Cryptographically sign a revision |
|
||||||
|
| `jj metaedit` | Modify metadata without changing content |
|
||||||
|
|
||||||
|
## Basic Workflow
|
||||||
|
|
||||||
|
```bash
|
||||||
|
jj new # Create new change
|
||||||
|
jj desc -m "feat: add feature" # Set description
|
||||||
|
jj log # View history
|
||||||
|
jj edit change-id # Switch to change
|
||||||
|
jj new --before @ # Time travel (create before current)
|
||||||
|
jj edit @- # Go to parent
|
||||||
|
```
|
||||||
|
|
||||||
|
## Time Travel
|
||||||
|
|
||||||
|
```bash
|
||||||
|
jj edit change-id # Switch to specific change
|
||||||
|
jj next --edit # Next child change
|
||||||
|
jj edit @- # Parent change
|
||||||
|
jj new --before @ -m msg # Insert before current
|
||||||
|
```
|
||||||
|
|
||||||
|
## Merging & Rebasing
|
||||||
|
|
||||||
|
```bash
|
||||||
|
jj new x yz -m msg # Merge changes
|
||||||
|
jj rebase -s src -d dest # Rebase source onto dest
|
||||||
|
jj abandon # Delete current change
|
||||||
|
```
|
||||||
|
|
||||||
|
## Conflicts
|
||||||
|
|
||||||
|
```bash
|
||||||
|
jj resolve # Interactive conflict resolution
|
||||||
|
# Edit files, then continue
|
||||||
|
```
|
||||||
|
|
||||||
|
## Revset Syntax
|
||||||
|
|
||||||
|
**Parent/child operators:**
|
||||||
|
|
||||||
|
| Syntax | Meaning | Example |
|
||||||
|
| ------ | ---------------- | -------------------- |
|
||||||
|
| `@-` | Parent of @ | `jj diff -r @-` |
|
||||||
|
| `@--` | Grandparent | `jj log -r @--` |
|
||||||
|
| `x-` | Parent of x | `jj diff -r abc123-` |
|
||||||
|
| `@+` | Child of @ | `jj log -r @+` |
|
||||||
|
| `x::y` | x to y inclusive | `jj log -r main::@` |
|
||||||
|
| `x..y` | x to y exclusive | `jj log -r main..@` |
|
||||||
|
| `x\|y` | Union (or) | `jj log -r 'a \| b'` |
|
||||||
|
|
||||||
|
**⚠️ Common mistakes:**
|
||||||
|
|
||||||
|
- ❌ `@~1` → ✅ `@-` (parent)
|
||||||
|
- ❌ `@^` → ✅ `@-` (parent)
|
||||||
|
- ❌ `@~-1` → ✅ `@+` (child)
|
||||||
|
- ❌ `jj changes` → ✅ `jj log` or `jj diff`
|
||||||
|
- ❌ `a,b,c` → ✅ `a | b | c` (union uses pipe, not comma)
|
||||||
|
|
||||||
|
**Functions:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
jj log -r 'heads(all())' # All heads
|
||||||
|
jj log -r 'remote_bookmarks()..' # Not on remote
|
||||||
|
jj log -r 'author(name)' # By author
|
||||||
|
jj log -r 'description(regex)' # By description
|
||||||
|
jj log -r 'mine()' # My commits
|
||||||
|
jj log -r 'committer_date(after:"7 days ago")' # Recent commits
|
||||||
|
jj log -r 'mine() & committer_date(after:"yesterday")' # My recent
|
||||||
|
```
|
||||||
|
|
||||||
|
## Templates
|
||||||
|
|
||||||
|
```bash
|
||||||
|
jj log -T 'commit_id ++ "\n" ++ description'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Git Interop
|
||||||
|
|
||||||
|
```bash
|
||||||
|
jj bookmark create main -r @ # Create bookmark
|
||||||
|
jj git push --bookmark main # Push bookmark
|
||||||
|
jj git fetch # Fetch from remote
|
||||||
|
jj bookmark track main@origin # Track remote
|
||||||
|
```
|
||||||
|
|
||||||
|
## Advanced Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
jj absorb # Auto-move changes to relevant commits in stack
|
||||||
|
jj bisect start # Start bisection
|
||||||
|
jj bisect good # Mark current as good
|
||||||
|
jj bisect bad # Mark current as bad
|
||||||
|
jj fix # Run configured formatters on files
|
||||||
|
jj sign -r @ # Sign current revision
|
||||||
|
jj metaedit -r @ -m "new message" # Edit metadata only
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tips
|
||||||
|
|
||||||
|
- No staging: changes are immediate
|
||||||
|
- Use conventional commits: `type(scope): desc`
|
||||||
|
- `jj undo` to revert operations
|
||||||
|
- `jj op log` to see operation history
|
||||||
|
- Bookmarks are like branches
|
||||||
|
- `jj absorb` is powerful for fixing up commits in a stack
|
||||||
|
|
||||||
|
## Related Skills
|
||||||
|
|
||||||
|
- **gh**: GitHub CLI for PRs and issues
|
||||||
|
- **review**: Code review before committing
|
||||||
|
'');
|
||||||
".pi/agent/themes" = {
|
".pi/agent/themes" = {
|
||||||
source = "${inputs.pi-rose-pine}/themes";
|
source = "${inputs.pi-rose-pine}/themes";
|
||||||
recursive = true;
|
recursive = true;
|
||||||
@@ -35,6 +182,7 @@
|
|||||||
".pi/agent/settings.json".text =
|
".pi/agent/settings.json".text =
|
||||||
builtins.toJSON {
|
builtins.toJSON {
|
||||||
theme = "rose-pine-dawn";
|
theme = "rose-pine-dawn";
|
||||||
|
quietStartup = true;
|
||||||
hideThinkingBlock = true;
|
hideThinkingBlock = true;
|
||||||
defaultProvider = "openai-codex";
|
defaultProvider = "openai-codex";
|
||||||
defaultModel = "gpt-5.4";
|
defaultModel = "gpt-5.4";
|
||||||
@@ -53,7 +201,7 @@
|
|||||||
themes = [];
|
themes = [];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
source = "${inputs.pi-harness}";
|
source = "${pkgs.pi-harness}/lib/node_modules/@aliou/pi-harness";
|
||||||
extensions = ["extensions/breadcrumbs/index.ts"];
|
extensions = ["extensions/breadcrumbs/index.ts"];
|
||||||
skills = [];
|
skills = [];
|
||||||
prompts = [];
|
prompts = [];
|
||||||
|
|||||||
@@ -1,112 +1,23 @@
|
|||||||
{inputs, ...}: let
|
{inputs, ...}: let
|
||||||
overlays = [
|
overlays = [
|
||||||
# himalaya
|
# himalaya
|
||||||
(final: prev: {
|
(import ./_overlays/himalaya.nix {inherit inputs;})
|
||||||
himalaya = inputs.himalaya.packages.${prev.stdenv.hostPlatform.system}.default;
|
|
||||||
})
|
|
||||||
# ast-grep (test_scan_invalid_rule_id fails on darwin in sandbox)
|
# ast-grep (test_scan_invalid_rule_id fails on darwin in sandbox)
|
||||||
(final: prev: {
|
(import ./_overlays/ast-grep.nix {inherit inputs;})
|
||||||
ast-grep =
|
|
||||||
prev.ast-grep.overrideAttrs (old: {
|
|
||||||
doCheck = false;
|
|
||||||
});
|
|
||||||
})
|
|
||||||
# jj-ryu
|
# jj-ryu
|
||||||
(final: prev: let
|
(import ./_overlays/jj-ryu.nix {inherit inputs;})
|
||||||
naersk-lib = prev.callPackage inputs.naersk {};
|
|
||||||
manifest = (prev.lib.importTOML "${inputs.jj-ryu}/Cargo.toml").package;
|
|
||||||
in {
|
|
||||||
jj-ryu =
|
|
||||||
naersk-lib.buildPackage {
|
|
||||||
pname = manifest.name;
|
|
||||||
version = manifest.version;
|
|
||||||
src = inputs.jj-ryu;
|
|
||||||
nativeBuildInputs = [prev.pkg-config];
|
|
||||||
buildInputs = [prev.openssl];
|
|
||||||
OPENSSL_NO_VENDOR = 1;
|
|
||||||
doCheck = false;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
|
|
||||||
# cog-cli
|
# cog-cli
|
||||||
(final: prev: let
|
(import ./_overlays/cog-cli.nix {inherit inputs;})
|
||||||
version = "0.22.1";
|
|
||||||
srcs = {
|
|
||||||
x86_64-linux =
|
|
||||||
prev.fetchurl {
|
|
||||||
url = "https://github.com/trycog/cog-cli/releases/download/v${version}/cog-linux-x86_64.tar.gz";
|
|
||||||
hash = "sha256-ET+sNXisUrHShR1gxqdumegXycXcxGzJcQOdTr5005w=";
|
|
||||||
};
|
|
||||||
aarch64-darwin =
|
|
||||||
prev.fetchurl {
|
|
||||||
url = "https://github.com/trycog/cog-cli/releases/download/v${version}/cog-darwin-arm64.tar.gz";
|
|
||||||
hash = "sha256-jcN+DtOqr3or5C71jp7AIAz0wh73FYybCC4FRBykKO4=";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
cog-cli =
|
|
||||||
prev.stdenvNoCC.mkDerivation {
|
|
||||||
pname = "cog-cli";
|
|
||||||
inherit version;
|
|
||||||
src =
|
|
||||||
srcs.${prev.stdenv.hostPlatform.system}
|
|
||||||
or (throw "Unsupported system for cog-cli: ${prev.stdenv.hostPlatform.system}");
|
|
||||||
|
|
||||||
dontUnpack = true;
|
|
||||||
dontConfigure = true;
|
|
||||||
dontBuild = true;
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
tar -xzf "$src"
|
|
||||||
install -Dm755 cog "$out/bin/cog"
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = with prev.lib; {
|
|
||||||
description = "Memory, code intelligence, and debugging for AI agents";
|
|
||||||
homepage = "https://github.com/trycog/cog-cli";
|
|
||||||
license = licenses.mit;
|
|
||||||
mainProgram = "cog";
|
|
||||||
platforms = builtins.attrNames srcs;
|
|
||||||
sourceProvenance = [sourceTypes.binaryNativeCode];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
})
|
|
||||||
# pi-agent-stuff (mitsuhiko)
|
# pi-agent-stuff (mitsuhiko)
|
||||||
(final: prev: {
|
(import ./_overlays/pi-agent-stuff.nix {inherit inputs;})
|
||||||
pi-agent-stuff =
|
# pi-harness (aliou)
|
||||||
prev.buildNpmPackage {
|
(import ./_overlays/pi-harness.nix {inherit inputs;})
|
||||||
pname = "pi-agent-stuff";
|
|
||||||
version = "1.5.0";
|
|
||||||
src = inputs.pi-agent-stuff;
|
|
||||||
npmDepsHash = "sha256-pyXMNdlie8vAkhz2f3GUGT3CCYuwt+xkWnsijBajXIo=";
|
|
||||||
dontNpmBuild = true;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
# pi-mcp-adapter
|
# pi-mcp-adapter
|
||||||
(final: prev: {
|
(import ./_overlays/pi-mcp-adapter.nix {inherit inputs;})
|
||||||
pi-mcp-adapter =
|
|
||||||
prev.buildNpmPackage {
|
|
||||||
pname = "pi-mcp-adapter";
|
|
||||||
version = "2.2.0";
|
|
||||||
src =
|
|
||||||
prev.fetchFromGitHub {
|
|
||||||
owner = "nicobailon";
|
|
||||||
repo = "pi-mcp-adapter";
|
|
||||||
rev = "v2.2.0";
|
|
||||||
hash = "sha256-E6Kf+OyTN/pF8pKADJO0B1+buAPqNcXnZl9ssZwSP8U=";
|
|
||||||
};
|
|
||||||
npmDepsHash = "sha256-myJ9h/zC/KDddt8NOVvJjjqbnkdEN4ZR+okCR5nu7hM=";
|
|
||||||
dontNpmBuild = true;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
# jj-starship (passes through upstream overlay)
|
# jj-starship (passes through upstream overlay)
|
||||||
inputs.jj-starship.overlays.default
|
(import ./_overlays/jj-starship.nix {inherit inputs;})
|
||||||
# zjstatus
|
# zjstatus
|
||||||
(final: prev: {
|
(import ./_overlays/zjstatus.nix {inherit inputs;})
|
||||||
zjstatus = inputs.zjstatus.packages.${prev.stdenv.hostPlatform.system}.default;
|
|
||||||
})
|
|
||||||
];
|
];
|
||||||
in {
|
in {
|
||||||
den.default.nixos.nixpkgs.overlays = overlays;
|
den.default.nixos.nixpkgs.overlays = overlays;
|
||||||
|
|||||||
Reference in New Issue
Block a user