Compare commits
46 Commits
update
...
update-maestro
| Author | SHA1 | Date | |
|---|---|---|---|
| 8ecaf614fc | |||
| 29d77ac8b4 | |||
| a23488dc52 | |||
| 2e464d2fe8 | |||
| 58e953a857 | |||
| 014dbde21d | |||
| 48c33fdbb5 | |||
| c11acc8b88 | |||
| 3d372cd155 | |||
| 0d2a4cb86f | |||
| fc88ed82fd | |||
| fb01826479 | |||
| d932409986 | |||
| 7c7aa0a7d9 | |||
| f99e0d4a8f | |||
| d41572a51c | |||
| 0f059c02c8 | |||
| 11f6ad5a3d | |||
| 1ce7046994 | |||
| 42fa03ec0e | |||
| 1b52576097 | |||
| 522eda7644 | |||
| 25ca90f134 | |||
| ccf0b2c35d | |||
| 2532100b26 | |||
| 9b4a2b44dc | |||
| 503b3baeb4 | |||
| 7bdff2ff98 | |||
| 9794335ad6 | |||
| 4a1e9aeaa8 | |||
| cd3b271e10 | |||
| 3eb0a098a2 | |||
| 77d8803a8f | |||
| ba5b618e49 | |||
| 7580edb82c | |||
| 88abb49340 | |||
| 9c536f87f6 | |||
| 88915d9cfd | |||
| 94e24f9277 | |||
| 51c852b5ef | |||
| 54fc3e317b | |||
| 81b9cbde44 | |||
| 60f93e604f | |||
| ced70ee3e3 | |||
| 5ba12d3684 | |||
| 231b6bdb28 |
Generated
+205
-123
@@ -7,27 +7,26 @@
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1786554876,
|
||||
"narHash": "sha256-akMknOIdX0QsBsM4lgreXSNNym7TNu9iOrDBqrQuTuQ=",
|
||||
"owner": "agent-of-empires",
|
||||
"repo": "agent-of-empires",
|
||||
"rev": "9b0d691a6cdaa6d2451f6eda05e83628c54eb95a",
|
||||
"type": "github"
|
||||
"lastModified": 1787387938,
|
||||
"narHash": "sha256-113jGEYKSeTwYgLdlVuRyqPBHYHJcU1kbRKiAUhj04Q=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "96472052106cb5c448e9fa39244b0d0ccae9be72",
|
||||
"revCount": 2192,
|
||||
"type": "git",
|
||||
"url": "https://git.naps.pt/yolo/agent-of-empires.git"
|
||||
},
|
||||
"original": {
|
||||
"owner": "agent-of-empires",
|
||||
"ref": "v1.14.1",
|
||||
"repo": "agent-of-empires",
|
||||
"type": "github"
|
||||
"type": "git",
|
||||
"url": "https://git.naps.pt/yolo/agent-of-empires.git"
|
||||
}
|
||||
},
|
||||
"agent-skills": {
|
||||
"locked": {
|
||||
"lastModified": 1787148831,
|
||||
"narHash": "sha256-OGVxFCa4nkWJwieNVD0qxKedf22Bi2snCTXhsFv2m5s=",
|
||||
"lastModified": 1787422509,
|
||||
"narHash": "sha256-kl6hR1JdXC2H9y84QNJJUxxeYCMgz6toBPjJ2//xXKU=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "6f057568704059bed1d25f21fcc35021df9611b1",
|
||||
"revCount": 52,
|
||||
"rev": "0f131f00a42782d45955a2e94e86d8f2ae69c043",
|
||||
"revCount": 79,
|
||||
"type": "git",
|
||||
"url": "https://git.naps.pt/yolo/agent-skills.git"
|
||||
},
|
||||
@@ -56,11 +55,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1784368054,
|
||||
"narHash": "sha256-zF1iJkBQSDWmRO4/LEeHR1SpKY0lqZaxkoQJpPS9K9U=",
|
||||
"lastModified": 1786464219,
|
||||
"narHash": "sha256-WKqWL8r7CyTDYueTr2ffJ9ya50dellv6IR1JX5PghDY=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "aquamarine",
|
||||
"rev": "9b5f14d9483445e766294eb8fbe0b8f370269ed0",
|
||||
"rev": "f3d1804205e8158c15595cdda1b566f93349ffae",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -71,15 +70,15 @@
|
||||
},
|
||||
"claude-code": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785285785,
|
||||
"narHash": "sha256-r1cMlvXjRVKe+uQ/GKwy4TpionpmbNgksFP2758D/MM=",
|
||||
"lastModified": 1787189302,
|
||||
"narHash": "sha256-cUM75Rob89qTxJvqVRF8GUewOriqQtLiyiy5xfd1fMM=",
|
||||
"owner": "sadjow",
|
||||
"repo": "claude-code-nix",
|
||||
"rev": "da78262708d858861afbe1f68ea65fedda4054c4",
|
||||
"rev": "8fb8cbab6345583e0b68ca7dbbbad08a0a348145",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -90,17 +89,17 @@
|
||||
},
|
||||
"codex-cli": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_2",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785294467,
|
||||
"narHash": "sha256-mylUWHK2wIw8S07K5hbkrLELnflJkDwsSWz2YFbJzLI=",
|
||||
"lastModified": 1787094470,
|
||||
"narHash": "sha256-UiHfeA8umiWByi/ijDnfnlGcVSEAhwNv1Gue3h6ey/U=",
|
||||
"owner": "sadjow",
|
||||
"repo": "codex-cli-nix",
|
||||
"rev": "e4e3b0672bbb8fba7f32fe53cd9c604990970374",
|
||||
"rev": "cfbeeca2f4dfbbfcc3c1a5b21e61a051ff43533d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -112,17 +111,17 @@
|
||||
},
|
||||
"codex-desktop-linux": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_3",
|
||||
"flake-utils": "flake-utils_2",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1786822283,
|
||||
"narHash": "sha256-RdoFKwNQ2m2zbHnq/QbgLf2lUI9cohsnlMwLfJuaTh0=",
|
||||
"lastModified": 1787079200,
|
||||
"narHash": "sha256-BYo8mVEqRj6y8PzpFd3rX6TQTknB3Ynp/3ykMTm56D8=",
|
||||
"owner": "ilysenko",
|
||||
"repo": "codex-desktop-linux",
|
||||
"rev": "e6b51d96ac2b9b5d9adafa852241bd0982972557",
|
||||
"rev": "1875dc2eaab6f9448617d18d0eda58902edf0f1a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -146,6 +145,21 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"crane_2": {
|
||||
"locked": {
|
||||
"lastModified": 1787326676,
|
||||
"narHash": "sha256-lWhBbBvC05/xwivKBBiM2YNizpmgqCgyOIzomvRuwxs=",
|
||||
"owner": "ipetkov",
|
||||
"repo": "crane",
|
||||
"rev": "692f7e9ef2ece8125b466f66f2af532b3edaed0d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "ipetkov",
|
||||
"repo": "crane",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"ethui": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_3",
|
||||
@@ -205,6 +219,24 @@
|
||||
"inputs": {
|
||||
"nixpkgs-lib": "nixpkgs-lib_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785627969,
|
||||
"narHash": "sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "427bf4bd9435fdf21321c8cc628c24efc14c0f7a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts_3": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": "nixpkgs-lib_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775087534,
|
||||
"narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=",
|
||||
@@ -220,24 +252,6 @@
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_2": {
|
||||
"inputs": {
|
||||
"systems": "systems_2"
|
||||
},
|
||||
@@ -255,7 +269,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_3": {
|
||||
"flake-utils_2": {
|
||||
"inputs": {
|
||||
"systems": "systems_3"
|
||||
},
|
||||
@@ -273,7 +287,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_4": {
|
||||
"flake-utils_3": {
|
||||
"locked": {
|
||||
"lastModified": 1644229661,
|
||||
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
|
||||
@@ -288,7 +302,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_5": {
|
||||
"flake-utils_4": {
|
||||
"inputs": {
|
||||
"systems": "systems_8"
|
||||
},
|
||||
@@ -308,17 +322,17 @@
|
||||
},
|
||||
"foundry": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_4",
|
||||
"flake-utils": "flake-utils_3",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785311662,
|
||||
"narHash": "sha256-lC5ZlyNMf8wcQnrAzUhYb1p6ndzwEovnXKiMqSTLgUo=",
|
||||
"lastModified": 1787123762,
|
||||
"narHash": "sha256-gKUrkWZRS2BxEcJDyVSBZJ3fi1rN51PPe8U5hCjFNIY=",
|
||||
"owner": "shazow",
|
||||
"repo": "foundry.nix",
|
||||
"rev": "0eb3d1233237eb4e6f4f45f31c087ee1a16245f1",
|
||||
"rev": "a194d90ec9f6a4d70d79220e644c531da8324266",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -334,11 +348,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785232496,
|
||||
"narHash": "sha256-65EQYIRRpTdpH8lUiB6Mvo5uBkG60aBIzAJuALfx+O0=",
|
||||
"lastModified": 1787144466,
|
||||
"narHash": "sha256-HHfv2/HkNSKbbSyU9iD/g8lbP6r4tl33sSw1W4rXCk0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "2e790b0a6be8ec2b76174ac0931b8ff11919ec98",
|
||||
"rev": "0471accf8d0a8210b31d947497d179ecc99e0021",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -355,11 +369,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785306346,
|
||||
"narHash": "sha256-DScBkW0fOgpGPK2trNoX3ryLTlaC14+gglFo/BhGJ4g=",
|
||||
"lastModified": 1787176219,
|
||||
"narHash": "sha256-djoRr6jBpe35q/0JwAvXpFXg1Ktf+X54NU2RLR7wnHw=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "e705714e918c3b11affcdd15db2cbe3a070420a0",
|
||||
"rev": "c53d643b3737e2fcd04e6cb3b3580ef50b2087a0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -376,11 +390,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1783963347,
|
||||
"narHash": "sha256-r376E2XpakiXwModDHIxlvB6qLq4iFVEq730vxOO4JY=",
|
||||
"lastModified": 1786719456,
|
||||
"narHash": "sha256-B74DLQs/VjlqyhnnX3tguWwghqJHWSJX30TKZuAljIg=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "a45a7c451455a51ae740ec3bce4024b312809c29",
|
||||
"rev": "83b7606dcf44abe3a94b86e8bb2b3355d22e8797",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -405,11 +419,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776511930,
|
||||
"narHash": "sha256-fCpwFiTW0rT7oKJqr3cqHMnkwypSwQKpbtUEtxdkgrM=",
|
||||
"lastModified": 1786464181,
|
||||
"narHash": "sha256-2alOMkLjXANh7unkZnYnCF2K2rApZaOLMoQ3o+VX2CY=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprcursor",
|
||||
"rev": "39435900785d0c560c6ae8777d29f28617d031ef",
|
||||
"rev": "e4ed7c08123df5af460a0a70961380cbfb872f76",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -434,11 +448,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1782566056,
|
||||
"narHash": "sha256-haEZcHzYrePnjFOYSWTbxm/Nrla0aPslJfmvdCvqtVc=",
|
||||
"lastModified": 1786464367,
|
||||
"narHash": "sha256-k58p4wbzIXWyRWrW84pP8tD+iaZSSYiiM+fr0Auk4oU=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprgraphics",
|
||||
"rev": "c6e7b9f673f4360bc813d3dc75028f75ee88d3f8",
|
||||
"rev": "7c895c44e3ca6d28ed68ddd80ec02b02b925e7fc",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -464,11 +478,11 @@
|
||||
"xdph": "xdph"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785334807,
|
||||
"narHash": "sha256-bN0KRhDfwSPqbpgUgWVcQMkuDje+8ghWlm7uUQZzaxc=",
|
||||
"lastModified": 1787138659,
|
||||
"narHash": "sha256-/3fIl+/xZoZqliAfwYB8ahCZK04Qr/zwdOQgiR41dy8=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "7803e68638c1bebce57cf9ea8da51fd9a1e19edd",
|
||||
"revCount": 7669,
|
||||
"rev": "52b368f1d7fdee1b0e96ef3dc655b5a577df4fdb",
|
||||
"revCount": 7745,
|
||||
"submodules": true,
|
||||
"type": "git",
|
||||
"url": "https://github.com/hyprwm/Hyprland"
|
||||
@@ -512,11 +526,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1784196523,
|
||||
"narHash": "sha256-ahtKMGXFJdlQNhatQm1+BBU/pGfGYnAqQt3vWvq4p8s=",
|
||||
"lastModified": 1786464504,
|
||||
"narHash": "sha256-7sHwM86KILQyHDHDuE2SDBlQ2jvZ0EW3hY7sW009/cg=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-guiutils",
|
||||
"rev": "a6ccb6cb112ed5a244c0191fb972347ecfa893e0",
|
||||
"rev": "4c30cf3097ea963c0e250749ee0c59f8b08816d6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -566,11 +580,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777320127,
|
||||
"narHash": "sha256-Qu+Wf2Bp5qUjyn2YpZNq8a7JyzTGowhT1knrwE38a9U=",
|
||||
"lastModified": 1786464129,
|
||||
"narHash": "sha256-339AkTlpMYSIvFuG0rnR+8Yg4/AZKeJalshJavlnKfg=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprlang",
|
||||
"rev": "090117506ddc3d7f26e650ff344d378c2ec329cc",
|
||||
"rev": "9508458be316a0d70d37ebed1ab725ccd10411ff",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -640,11 +654,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1782554491,
|
||||
"narHash": "sha256-+p3MlyN/nqRefcf2IckPlGRUn9+hielqpS9XClbLleM=",
|
||||
"lastModified": 1785930473,
|
||||
"narHash": "sha256-DitTu625BhEYpZjtjxtGpjrEJwPwW+X/+jJvhSZNSJM=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprtoolkit",
|
||||
"rev": "bdba25ced39ea39ab004a8f31593ba0b0ff1ca35",
|
||||
"rev": "af515b69dfbe366dc7873aa1475cb2f4db3ebad7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -665,11 +679,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1784323413,
|
||||
"narHash": "sha256-XnAVV+H4f8Xdv0yZcSwJ5kCjLyE8fHxPeLX6a3HSrAU=",
|
||||
"lastModified": 1786464080,
|
||||
"narHash": "sha256-W1hxvumEM57yV+QwsZ4QdAHEqOkr7e4S8VAkLX60qDE=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprutils",
|
||||
"rev": "5f03477ab3a005ff27c527486f551883535aea2f",
|
||||
"rev": "c157fe1e3092b980cc69315a6631f89aff09dcce",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -690,11 +704,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777159683,
|
||||
"narHash": "sha256-Jxixw6wZphUp+nHYxOKUYSckL17QMBx2d5Zp0rJHr1g=",
|
||||
"lastModified": 1786464033,
|
||||
"narHash": "sha256-QM8Qe4/L8lpdVN4bgwahmi+jyyc4fisseDMe4afcDxA=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprwayland-scanner",
|
||||
"rev": "b8632713a6beaf28b56f2a7b0ab2fb7088dbb404",
|
||||
"rev": "62e62c1ca23da17612c6890d4ad2064f575643db",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -719,11 +733,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778410714,
|
||||
"narHash": "sha256-o6RzFj4nJXaPRY7EM01siuCQeT41RfwwmcmFQqwFJJg=",
|
||||
"lastModified": 1786464294,
|
||||
"narHash": "sha256-ZQsZ2WvBdkboCIyh8LStDPdAIARmxzn0XMNxxoOhjPE=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprwire",
|
||||
"rev": "85148a8e612808cf5ddb25d0b3c5840f3498a7dc",
|
||||
"rev": "4ce7cd6b6128c1ac41caf23c58a30a26b327f9dd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -732,6 +746,27 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"maestro": {
|
||||
"inputs": {
|
||||
"crane": "crane_2",
|
||||
"flake-parts": "flake-parts_2",
|
||||
"nixpkgs": "nixpkgs_6",
|
||||
"process-compose-flake": "process-compose-flake"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787610419,
|
||||
"narHash": "sha256-YRDvlaiEOpzRC5JHMlm/S39EGfrGsD4kmEWwnyHz4Tg=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "80a93999051d41b29544258dca272d40f3fc0c98",
|
||||
"revCount": 443,
|
||||
"type": "git",
|
||||
"url": "https://git.naps.pt/naps62/maestro.git"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://git.naps.pt/naps62/maestro.git"
|
||||
}
|
||||
},
|
||||
"nix-index-database": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
@@ -739,11 +774,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785046085,
|
||||
"narHash": "sha256-UiK+mmZJuLWQVhJ5b2wDzogIYWAesyRm6LA3h3Ulh3Y=",
|
||||
"lastModified": 1786852476,
|
||||
"narHash": "sha256-IM5CYtf86W4w8eUPpKcY/LpdHElmVBtJhaKnoTKxZEA=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "11665045df8b9938ef811a3bfdc65cffb02b4b70",
|
||||
"rev": "c7962dc97b45129df8d751bedaf37beb5a17706e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -784,6 +819,21 @@
|
||||
}
|
||||
},
|
||||
"nixpkgs-lib_2": {
|
||||
"locked": {
|
||||
"lastModified": 1785031560,
|
||||
"narHash": "sha256-OmshNvn2vupOFpYinLUu+1Dnpu4n7Q5N3ggGVNHpkUI=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"rev": "0e79af5e3d4dcfcd676ab5ba3f95d2e3352e078c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-lib_3": {
|
||||
"locked": {
|
||||
"lastModified": 1774748309,
|
||||
"narHash": "sha256-+U7gF3qxzwD5TZuANzZPeJTZRHS29OFQgkQ2kiTJBIQ=",
|
||||
@@ -800,11 +850,11 @@
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1784783405,
|
||||
"narHash": "sha256-4IHyyLgLBdKefkljdKod4IMn023pQiDXAWJA187cmdY=",
|
||||
"lastModified": 1787111413,
|
||||
"narHash": "sha256-sFosWtq21eHGJRnTc/hvf4M1obRgLEUMNm/IzllkHMA=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "7525d999cd850b9a488817abc89c75dc733acf17",
|
||||
"rev": "afe3d8ac4395617bdcdac9f188ac8717a062e014",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -848,11 +898,11 @@
|
||||
},
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1784356753,
|
||||
"narHash": "sha256-12KrbMiWLcf8m7pCvAtZh1ZrgF85ZXDXvfR/fWTKy84=",
|
||||
"lastModified": 1786247143,
|
||||
"narHash": "sha256-8S3Kcxs7D4UtxJxSJZz0m14CGhuW0MxfrIwJxeGWGnQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "61b7c44c4073f0b827768aff0049561b5110ea5a",
|
||||
"rev": "279b4a8275f032c566576b3f181fa0f27197f588",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -864,11 +914,27 @@
|
||||
},
|
||||
"nixpkgs_6": {
|
||||
"locked": {
|
||||
"lastModified": 1785090369,
|
||||
"narHash": "sha256-m0pDuRJG7EDo9ri+4Ksu83VsI+PlxNC9lNBfydejce4=",
|
||||
"lastModified": 1787135253,
|
||||
"narHash": "sha256-RD2kNWCG+Bjo6h+JVjWVNntZs2GtRoeY2xHjts/FNkA=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "ffb3c9b700e759be2ef13237c9d8f953b32a1e46",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_7": {
|
||||
"locked": {
|
||||
"lastModified": 1787070829,
|
||||
"narHash": "sha256-vXNVDVtvfiQuXthP0NHPFdNvvMTkGpx0UP8oddIWbNk=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "624af665418d3c65d544145b4d34ad696439570e",
|
||||
"rev": "0ae2bc1419c3f345984c2629e72e7a631820fa4d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -878,7 +944,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_7": {
|
||||
"nixpkgs_8": {
|
||||
"locked": {
|
||||
"lastModified": 1775036866,
|
||||
"narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=",
|
||||
@@ -894,7 +960,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_8": {
|
||||
"nixpkgs_9": {
|
||||
"locked": {
|
||||
"lastModified": 1744536153,
|
||||
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
|
||||
@@ -936,11 +1002,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785121894,
|
||||
"narHash": "sha256-AWbstkwe4twd+5iWx8QBVzTgwGAUvn4vVdobGKW5BRc=",
|
||||
"lastModified": 1786797655,
|
||||
"narHash": "sha256-qAWI5Vf0xaRmb8/l9XWYrvEgrIaqKBv8Dg81JO7wkrY=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix4nvchad",
|
||||
"rev": "8135d402aa554b5f8e5dd2ec341c5a440fd18496",
|
||||
"rev": "b878640ae13c8f70f41aa1159234206051a4378c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -971,6 +1037,21 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"process-compose-flake": {
|
||||
"locked": {
|
||||
"lastModified": 1782060835,
|
||||
"narHash": "sha256-Q8HH2t1l3MITtWCWY4ytcH5F/Q7aAHo3Iq/QTMAKTe0=",
|
||||
"owner": "Platonic-Systems",
|
||||
"repo": "process-compose-flake",
|
||||
"rev": "464ff6880737f063c3f0d3d2c7781fda9190868f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Platonic-Systems",
|
||||
"repo": "process-compose-flake",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"agent-of-empires": "agent-of-empires",
|
||||
@@ -983,8 +1064,9 @@
|
||||
"hardware": "hardware",
|
||||
"home-manager": "home-manager",
|
||||
"hyprland": "hyprland",
|
||||
"maestro": "maestro",
|
||||
"nix-index-database": "nix-index-database",
|
||||
"nixpkgs": "nixpkgs_6",
|
||||
"nixpkgs": "nixpkgs_7",
|
||||
"nvchad-starter": "nvchad-starter",
|
||||
"nvchad4nix": "nvchad4nix",
|
||||
"rose-pine-hyprcursor": "rose-pine-hyprcursor",
|
||||
@@ -1036,7 +1118,7 @@
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_8"
|
||||
"nixpkgs": "nixpkgs_9"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775445266,
|
||||
@@ -1054,9 +1136,9 @@
|
||||
},
|
||||
"sem": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts_2",
|
||||
"flake-utils": "flake-utils_5",
|
||||
"nixpkgs": "nixpkgs_7",
|
||||
"flake-parts": "flake-parts_3",
|
||||
"flake-utils": "flake-utils_4",
|
||||
"nixpkgs": "nixpkgs_8",
|
||||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
"locked": {
|
||||
@@ -1081,11 +1163,11 @@
|
||||
"systems": "systems_9"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785048222,
|
||||
"narHash": "sha256-LjFVfwxensz76SjnvofF1Jsw+xTLd8Qp31W0J6nh2XI=",
|
||||
"lastModified": 1786855359,
|
||||
"narHash": "sha256-yeKMWFCPeoIKmPBLLvP1/15ulOJO8i9ZIlSSXGuW6aw=",
|
||||
"owner": "Gerg-L",
|
||||
"repo": "spicetify-nix",
|
||||
"rev": "17e524f330c282d31c32dfe076222d4a12277886",
|
||||
"rev": "0f478ff79b82abb785160cd4531293f61d21be86",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1308,11 +1390,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1784371182,
|
||||
"narHash": "sha256-S8A1lezEalltWcCp3gAic5lssS0xTSISK6fKODefhOk=",
|
||||
"lastModified": 1786464334,
|
||||
"narHash": "sha256-/TBQT5rhBB2Dm4HoZzhGDaCwYmRTs3W3DPhMXFWc/BU=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "xdg-desktop-portal-hyprland",
|
||||
"rev": "08d99f727944dd15e4740090305e31c5fb92a50a",
|
||||
"rev": "9f0e9ff02739cd538d39bd706422dc50e9ca60dd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1329,11 +1411,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785224333,
|
||||
"narHash": "sha256-8DNJUVM10ktK02V9ZIV064CH+fuPF272VCAZBn6arig=",
|
||||
"lastModified": 1787160391,
|
||||
"narHash": "sha256-5dRTU55IlWABqnWiXDgtzrc3wT54nPoZwDQ91VOY4mE=",
|
||||
"owner": "0xc000022070",
|
||||
"repo": "zen-browser-flake",
|
||||
"rev": "5f1a4be4d280e1ae06d61a75775a234b1714da3f",
|
||||
"rev": "228a12a50971a115caa1c87b7de3d87b08e35275",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
@@ -64,12 +64,15 @@
|
||||
};
|
||||
# Pinned to the tag, and pins its own nixpkgs for the same reason ethui does
|
||||
# — it is a verified Rust build. Bump deliberately, not via `flake update`.
|
||||
agent-of-empires.url = "github:agent-of-empires/agent-of-empires/v1.14.1";
|
||||
agent-of-empires.url = "git+https://git.naps.pt/yolo/agent-of-empires.git";
|
||||
# Semantic-diff tool rev calls via REV_SEM_BIN. NOT nixpkgs' `sem`, which is
|
||||
# the unrelated Semaphore CI cli.
|
||||
sem.url = "github:Ataraxy-Labs/sem";
|
||||
# Claude Code + Codex skills, commands, hooks and CLAUDE.md fragments.
|
||||
agent-skills.url = "git+https://git.naps.pt/yolo/agent-skills.git";
|
||||
# Terminal-session orchestrator. Pins its own nixpkgs for the same reason
|
||||
# ethui and agent-of-empires do — it is a verified Rust build.
|
||||
maestro.url = "git+https://git.naps.pt/naps62/maestro.git";
|
||||
nix-index-database = {
|
||||
url = "github:nix-community/nix-index-database";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
imports = [
|
||||
../common/programs/default.nix
|
||||
../common/programs/desktop
|
||||
../common/programs/workstation-apps.nix
|
||||
../common/programs/editors.nix
|
||||
../common/programs/dev-workstation.nix
|
||||
../common/programs/ai-gui.nix
|
||||
../common/programs/zen-browser.nix
|
||||
../common/programs/hyprland
|
||||
../common/programs/kitty
|
||||
|
||||
+34
-11
@@ -1,20 +1,43 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.custom.blender;
|
||||
in
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
blender
|
||||
prusa-slicer
|
||||
];
|
||||
options.custom.blender = {
|
||||
cuda = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Build Blender with CUDA/OptiX so Cycles renders on the GPU instead of
|
||||
the CPU. Only useful on an NVIDIA host; enabling it on arrakis (Intel)
|
||||
would mean a long build for nothing.
|
||||
|
||||
fonts.fontconfig.enable = true;
|
||||
No binary cache serves this — cuda-maintainers was measured to make no
|
||||
difference — so flipping this on rebuilds Blender, OpenUSD, OpenSubdiv
|
||||
and OpenImageDenoise from source.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
xdg.desktopEntries.prusaslicer-url-handler = {
|
||||
name = "PrusaSlicer Protocol Handler";
|
||||
exec = "prusa-slicer %u";
|
||||
type = "Application";
|
||||
noDisplay = true;
|
||||
mimeType = [ "x-scheme-handler/prusaslicer" ];
|
||||
config = {
|
||||
home.packages = [
|
||||
(if cfg.cuda then pkgs.blender.override { cudaSupport = true; } else pkgs.blender)
|
||||
pkgs.prusa-slicer
|
||||
];
|
||||
|
||||
fonts.fontconfig.enable = true;
|
||||
|
||||
xdg.desktopEntries.prusaslicer-url-handler = {
|
||||
name = "PrusaSlicer Protocol Handler";
|
||||
exec = "prusa-slicer %u";
|
||||
type = "Application";
|
||||
noDisplay = true;
|
||||
mimeType = [ "x-scheme-handler/prusaslicer" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
claude-desktop = pkgs.callPackage ../../../pkgs/claude-desktop/package.nix {
|
||||
inherit (config.custom.aiApps) deviceScaleFactor;
|
||||
};
|
||||
codex-cli = inputs.codex-cli.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
||||
t3-code = pkgs.callPackage ../../../pkgs/t3-code/package.nix {
|
||||
inherit (config.custom.aiApps) deviceScaleFactor;
|
||||
};
|
||||
in
|
||||
{
|
||||
imports = [ inputs.codex-desktop-linux.homeManagerModules.default ];
|
||||
|
||||
home.packages = lib.optionals pkgs.stdenv.hostPlatform.isx86_64 [
|
||||
claude-desktop
|
||||
t3-code
|
||||
];
|
||||
|
||||
programs.codexDesktopLinux = {
|
||||
enable = true;
|
||||
cliPackage = codex-cli;
|
||||
};
|
||||
}
|
||||
@@ -1,16 +1,9 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
# Official Anthropic Claude desktop app (Linux build, x86_64 only).
|
||||
claude-desktop = pkgs.callPackage ../../../../pkgs/claude-desktop/package.nix {
|
||||
inherit (config.custom.aiApps) deviceScaleFactor;
|
||||
};
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
inputs.agent-skills.homeModules.default
|
||||
@@ -27,23 +20,20 @@ in
|
||||
};
|
||||
|
||||
config.home = {
|
||||
packages =
|
||||
with pkgs;
|
||||
[
|
||||
inputs.claude-code.packages.${pkgs.stdenv.hostPlatform.system}.default
|
||||
packages = with pkgs; [
|
||||
inputs.claude-code.packages.${pkgs.stdenv.hostPlatform.system}.default
|
||||
|
||||
# sandbox
|
||||
bubblewrap
|
||||
socat
|
||||
libseccomp
|
||||
# sandbox
|
||||
bubblewrap
|
||||
socat
|
||||
libseccomp
|
||||
|
||||
# voice
|
||||
sox
|
||||
# voice
|
||||
sox
|
||||
|
||||
# beads
|
||||
dolt
|
||||
]
|
||||
++ lib.optional pkgs.stdenv.hostPlatform.isx86_64 claude-desktop;
|
||||
# beads
|
||||
dolt
|
||||
];
|
||||
|
||||
file = {
|
||||
".default-npm-packages".text = ''
|
||||
@@ -51,11 +41,6 @@ in
|
||||
@beads/bd
|
||||
'';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
".claude/statusline.sh" = {
|
||||
source = ./statusline.sh;
|
||||
executable = true;
|
||||
|
||||
@@ -7,14 +7,5 @@ let
|
||||
codex-cli = inputs.codex-cli.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
||||
in
|
||||
{
|
||||
imports = [ inputs.codex-desktop-linux.homeManagerModules.default ];
|
||||
|
||||
# cliPackage only tells the desktop app where to find codex; it does not put
|
||||
# it on PATH, so the cli needs installing separately.
|
||||
home.packages = [ codex-cli ];
|
||||
|
||||
programs.codexDesktopLinux = {
|
||||
enable = true;
|
||||
cliPackage = codex-cli;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
@@ -10,7 +9,6 @@
|
||||
./zsh.nix
|
||||
./nix.nix
|
||||
./neovim
|
||||
./editors.nix
|
||||
./rust.nix
|
||||
./elixir.nix
|
||||
./nodejs.nix
|
||||
@@ -34,10 +32,6 @@
|
||||
# this with a plain assignment.
|
||||
mutableFilesRepoPath = lib.mkDefault "${config.home.homeDirectory}/projects/nixos-config";
|
||||
|
||||
packages = with pkgs; [
|
||||
impala
|
||||
];
|
||||
|
||||
username = lib.mkDefault "naps62";
|
||||
homeDirectory = lib.mkDefault "/home/${config.home.username}";
|
||||
stateVersion = lib.mkDefault "24.05";
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
{
|
||||
imports = [
|
||||
./darkman.nix
|
||||
./spicetify.nix
|
||||
# mpv is installed by programs.mpv there, not as a bare package here.
|
||||
../mpv.nix
|
||||
];
|
||||
|
||||
home = {
|
||||
@@ -14,43 +15,21 @@
|
||||
# various
|
||||
google-chrome
|
||||
thunar
|
||||
obsidian
|
||||
mpv
|
||||
# screen recording — evaluating these
|
||||
obs-studio
|
||||
kooha # simple Wayland-native screen+audio recorder
|
||||
vokoscreen-ng # GUI recorder with webcam overlay
|
||||
gimp
|
||||
font-manager
|
||||
imv
|
||||
pavucontrol
|
||||
zathura
|
||||
libsForQt5.qt5ct
|
||||
kdePackages.qt6ct
|
||||
nwg-look
|
||||
xournalpp
|
||||
jq
|
||||
ffmpeg
|
||||
unzip
|
||||
|
||||
# remote desktop
|
||||
remmina
|
||||
|
||||
# networking
|
||||
networkmanagerapplet
|
||||
mtr
|
||||
dnsutils
|
||||
|
||||
# communication
|
||||
slack
|
||||
ferdium
|
||||
signal-desktop
|
||||
zoom-us
|
||||
|
||||
# dev tools
|
||||
yaak
|
||||
bun
|
||||
|
||||
# themes
|
||||
tela-icon-theme
|
||||
];
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
doctl
|
||||
awscli2
|
||||
terraform
|
||||
bruno
|
||||
coturn
|
||||
usbutils
|
||||
ktlint
|
||||
];
|
||||
}
|
||||
@@ -7,7 +7,6 @@
|
||||
./codex.nix
|
||||
./pi.nix
|
||||
./ralph-claude-code.nix
|
||||
./t3-code.nix
|
||||
];
|
||||
|
||||
programs = {
|
||||
@@ -26,19 +25,12 @@
|
||||
|
||||
home.packages = with pkgs; [
|
||||
imagemagick
|
||||
doctl
|
||||
awscli2
|
||||
terraform
|
||||
inotify-tools
|
||||
devenv
|
||||
bruno
|
||||
sshfs
|
||||
coturn
|
||||
file
|
||||
usbutils
|
||||
nmap
|
||||
lsof
|
||||
ktlint
|
||||
croc
|
||||
opencode
|
||||
process-compose
|
||||
|
||||
@@ -19,6 +19,9 @@ tmp/**/*
|
||||
*.log
|
||||
*.tmp
|
||||
|
||||
# Local git worktree checkouts
|
||||
worktrees/
|
||||
|
||||
# Latex
|
||||
_inputs.tex
|
||||
_sections.tex
|
||||
|
||||
@@ -10,6 +10,8 @@ let
|
||||
|
||||
hyprPkgs = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system};
|
||||
|
||||
osd = "${pkgs.swayosd}/bin/swayosd-client";
|
||||
|
||||
# xdph runs this instead of hyprland-share-picker (screencopy:custom_picker_binary).
|
||||
# The contract is just "print [SELECTION] to stdout"; a leading "r" grants a
|
||||
# restore token. Printing it immediately means the dialog never renders.
|
||||
@@ -365,18 +367,21 @@ in
|
||||
hl.dispatch(hl.dsp.window.center())
|
||||
end)
|
||||
|
||||
-- volume / brightness (locked so they work on the lock screen; repeat on hold)
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl set 5%+"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl set 5%-"), { locked = true, repeating = true })
|
||||
-- volume / brightness / media (locked so they work on the lock screen;
|
||||
-- volume and brightness repeat on hold). Everything goes through
|
||||
-- swayosd-client, which applies the change and draws the OSD popup;
|
||||
-- store paths because Hyprland execs these with the login PATH, which
|
||||
-- doesn't pick up profile changes made after the session started.
|
||||
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("${osd} --output-volume raise"), { locked = true, repeating = true })
|
||||
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("${osd} --output-volume lower"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("${osd} --brightness raise"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("${osd} --brightness lower"), { locked = true, repeating = true })
|
||||
|
||||
-- media keys (locked)
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("pactl set-sink-mute @DEFAULT_SINK@ toggle"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("volumectl -m toggle-mute"), { locked = true })
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("${osd} --output-volume mute-toggle"), { locked = true })
|
||||
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("${osd} --input-volume mute-toggle"), { locked = true })
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("${osd} --playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("${osd} --playerctl prev"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("${osd} --playerctl play-pause"), { locked = true })
|
||||
|
||||
-- move/resize windows with mod + LMB/RMB drag
|
||||
hl.bind(mod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||
|
||||
@@ -44,5 +44,41 @@
|
||||
};
|
||||
};
|
||||
|
||||
# swayosd: the on-screen volume/brightness/caps-lock popup. Noctalia drew this
|
||||
# before; without it the XF86 keys still work but give no feedback, which reads
|
||||
# as "the keys are dead". swayosd-client does the change *and* the popup, so the
|
||||
# binds in default.nix call it instead of wpctl/brightnessctl directly.
|
||||
services.swayosd = {
|
||||
enable = true;
|
||||
topMargin = 0.85;
|
||||
stylePath = pkgs.writeText "swayosd-style.css" ''
|
||||
window#osd {
|
||||
padding: 12px 20px;
|
||||
border-radius: 12px;
|
||||
border: 1px solid #4c566a;
|
||||
background: alpha(#2e3440, 0.94);
|
||||
}
|
||||
|
||||
window#osd #container { margin: 12px; }
|
||||
|
||||
window#osd image,
|
||||
window#osd label { color: #eceff4; }
|
||||
|
||||
window#osd progressbar:disabled { opacity: 0.5; }
|
||||
|
||||
window#osd trough {
|
||||
min-height: 6px;
|
||||
border-radius: 6px;
|
||||
background: #434c5e;
|
||||
}
|
||||
|
||||
window#osd progress {
|
||||
min-height: 6px;
|
||||
border-radius: 6px;
|
||||
background: #88c0d0;
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
services.hyprpolkitagent.enable = true;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
{ inputs, ... }:
|
||||
# Maestro: the terminal-session orchestrator. Module only — no `enable` here,
|
||||
# because the daemon owns every interactive shell on the host it runs on, and
|
||||
# only one box should be doing that. Hosts opt in from their own services.nix.
|
||||
{
|
||||
imports = [ inputs.maestro.homeManagerModules.default ];
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.custom.mpv;
|
||||
in
|
||||
{
|
||||
options.custom.mpv = {
|
||||
hwdec = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "auto-safe";
|
||||
example = "nvdec-copy";
|
||||
description = ''
|
||||
Value for mpv's `hwdec`. `auto-safe` only picks a decoder mpv considers
|
||||
reliable for the running driver and falls back to software otherwise,
|
||||
so it is correct on Intel (arrakis) and on hosts with no usable GPU
|
||||
decoder (yolo). NVIDIA hosts override it.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
programs.mpv = {
|
||||
enable = true;
|
||||
|
||||
config = {
|
||||
hwdec = cfg.hwdec;
|
||||
vo = lib.mkDefault "gpu-next";
|
||||
save-position-on-quit = true;
|
||||
keep-open = "yes";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
Screenshots: stored in ~/downloads/screenshots, with date time in the filename
|
||||
@@ -1,100 +0,0 @@
|
||||
---
|
||||
description: Merge worktree changes and clean up safely
|
||||
---
|
||||
|
||||
# Merge Worktree and Cleanup
|
||||
|
||||
Merge changes from the current worktree into a target branch and clean up the worktree.
|
||||
|
||||
**Usage:** `/merge [target-branch]`
|
||||
|
||||
**Arguments:**
|
||||
- `$1`: Target branch to merge into (default: auto-detect main/master)
|
||||
|
||||
## Process
|
||||
|
||||
### 1. Pre-flight Checks
|
||||
|
||||
```bash
|
||||
CURRENT_BRANCH=$(git branch --show-current)
|
||||
WORKTREE_DIR=$(git rev-parse --git-common-dir)
|
||||
|
||||
if [[ ! "$WORKTREE_DIR" == *".git/worktrees"* ]]; then
|
||||
echo "❌ Error: You're not in a worktree"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! git diff-index --quiet HEAD --; then
|
||||
echo "❌ Error: You have uncommitted changes"
|
||||
git status --short
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
### 2. Determine Target Branch
|
||||
|
||||
```bash
|
||||
TARGET_BRANCH="${1:-}"
|
||||
if [ -z "$TARGET_BRANCH" ]; then
|
||||
if git show-ref --verify --quiet refs/heads/main; then
|
||||
TARGET_BRANCH="main"
|
||||
elif git show-ref --verify --quiet refs/heads/master; then
|
||||
TARGET_BRANCH="master"
|
||||
else
|
||||
echo "❌ Error: Cannot auto-detect main branch"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
```
|
||||
|
||||
### 3. Update Target Branch
|
||||
|
||||
```bash
|
||||
WORKTREE_PATH=$(pwd)
|
||||
COMMON_DIR=$(git rev-parse --git-common-dir)
|
||||
REPO_ROOT=$(echo "$COMMON_DIR" | sed 's/\.git.*//' | sed 's/\/$//')
|
||||
if [ "$COMMON_DIR" = ".git" ]; then
|
||||
REPO_ROOT=$(git rev-parse --show-toplevel)
|
||||
fi
|
||||
|
||||
cd "$REPO_ROOT"
|
||||
git checkout "$TARGET_BRANCH"
|
||||
git pull origin "$TARGET_BRANCH"
|
||||
```
|
||||
|
||||
### 4. Merge
|
||||
|
||||
```bash
|
||||
git merge --no-ff "$CURRENT_BRANCH" -m "Merge branch '$CURRENT_BRANCH'"
|
||||
```
|
||||
|
||||
If you prefer a squash merge, do this instead:
|
||||
|
||||
```bash
|
||||
git merge --squash "$CURRENT_BRANCH"
|
||||
git commit -m "feat: <summary>"
|
||||
```
|
||||
|
||||
### 5. Push and Clean Up
|
||||
|
||||
```bash
|
||||
git push origin "$TARGET_BRANCH"
|
||||
|
||||
git worktree remove "$WORKTREE_PATH" --force || rm -rf "$WORKTREE_PATH"
|
||||
git branch -d "$CURRENT_BRANCH" || git branch -D "$CURRENT_BRANCH"
|
||||
```
|
||||
|
||||
### 6. Optional: Delete Remote Branch
|
||||
|
||||
```bash
|
||||
git push origin --delete "$CURRENT_BRANCH"
|
||||
```
|
||||
|
||||
## Language-specific checks
|
||||
|
||||
### Rust
|
||||
- `cargo check`
|
||||
- `cargo clippy` (clean up new warnings)
|
||||
|
||||
### TypeScript
|
||||
- `tsc`
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
description: Rebase/merge upstream changes into the current branch
|
||||
---
|
||||
This command should only work while in a secondary branch (not main or master).
|
||||
|
||||
Commit any unstaged changes
|
||||
Fetch updates from the origin repo
|
||||
If there are new commits on the parent branch (typically origin/main), then merge them back into the current branch
|
||||
Solve any conflicts, and analyze the incoming changes to see if additional changes are required to the branch's code (e.g.: if something was renamed in the meantime in main, our new code may need to be adjusted)
|
||||
@@ -1,12 +1,13 @@
|
||||
_:
|
||||
{
|
||||
# Global rules (opencode/AGENTS.md) and the shared commands (merge, update)
|
||||
# come from the agent-skills home-manager module — opencode has no @file
|
||||
# imports, so the module concatenates the shared fragments into one file.
|
||||
# opencode also auto-loads skills from ~/.claude/skills and ~/.agents/skills.
|
||||
xdg.configFile = {
|
||||
# Global config file
|
||||
"opencode/opencode.json".source = ./opencode.json;
|
||||
|
||||
# Global rules (equivalent to ~/.claude/CLAUDE.md)
|
||||
"opencode/AGENTS.md".source = ./AGENTS.md;
|
||||
|
||||
# Custom agents
|
||||
"opencode/agents/oracle.md".source = ./agents/oracle.md;
|
||||
"opencode/agents/explorer.md".source = ./agents/explorer.md;
|
||||
@@ -16,10 +17,8 @@ _:
|
||||
"opencode/agents/designer-bold.md".source = ./agents/designer-bold.md;
|
||||
"opencode/agents/analyze-branch.md".source = ./agents/analyze-branch.md;
|
||||
|
||||
# Global commands
|
||||
# Global commands (opencode-specific ones only)
|
||||
"opencode/commands/work.md".source = ./commands/work.md;
|
||||
"opencode/commands/merge.md".source = ./commands/merge.md;
|
||||
"opencode/commands/update.md".source = ./commands/update.md;
|
||||
"opencode/commands/smart-debug.md".source = ./commands/smart-debug.md;
|
||||
"opencode/commands/tdd-cycle.md".source = ./commands/tdd-cycle.md;
|
||||
"opencode/commands/security-scan.md".source = ./commands/security-scan.md;
|
||||
|
||||
@@ -1,32 +1,12 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
pi = pkgs.callPackage ../../../pkgs/pi/package.nix { };
|
||||
|
||||
skills = inputs.agent-skills;
|
||||
|
||||
# pi has no `@file` imports in context files, so fragments get concatenated
|
||||
# into one AGENTS.md. Skills need no wiring: pi reads ~/.agents/skills, which
|
||||
# the agent-skills module already links.
|
||||
agentsMd = pkgs.writeText "pi-AGENTS.md" (
|
||||
lib.concatMapStringsSep "\n" builtins.readFile [
|
||||
"${skills}/claude-md/machines/${config.programs.agentSkills.machine}.md"
|
||||
"${skills}/claude-md/operating.md"
|
||||
"${skills}/claude-md/writing.md"
|
||||
"${skills}/claude-md/code-comments.md"
|
||||
"${skills}/claude-md/RTK.md"
|
||||
]
|
||||
);
|
||||
in
|
||||
{
|
||||
home.packages = [ pi ];
|
||||
|
||||
# ~/.pi/agent/AGENTS.md comes from the agent-skills home-manager module
|
||||
# (pi has no @file imports, so the module concatenates the shared fragments).
|
||||
# Pi reads skills straight from ~/.agents/skills, which the module links.
|
||||
# Settings stay unmanaged: pi writes ~/.pi/agent/settings.json itself from
|
||||
# /settings, /trust and `pi config`.
|
||||
home.file.".pi/agent/AGENTS.md".source = agentsMd;
|
||||
home.packages = [ pi ];
|
||||
}
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
# T3 Code: open-source desktop control plane for coding agents (x86_64 only).
|
||||
# Shares the custom.aiApps.deviceScaleFactor knob (defined in ../claude).
|
||||
t3-code = pkgs.callPackage ../../../pkgs/t3-code/package.nix {
|
||||
inherit (config.custom.aiApps) deviceScaleFactor;
|
||||
};
|
||||
in
|
||||
{
|
||||
home.packages = lib.optional pkgs.stdenv.hostPlatform.isx86_64 t3-code;
|
||||
}
|
||||
@@ -30,6 +30,7 @@ set -ag terminal-overrides ",xterm*:Tc:smcup@:rmcup@"
|
||||
|
||||
# Forward Shift+Enter and other modified keys through to applications
|
||||
set -s extended-keys on
|
||||
set -s extended-keys-format csi-u
|
||||
set -as terminal-features "tmux-256color:extkeys"
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [ ./desktop/spicetify.nix ];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
obsidian
|
||||
obs-studio
|
||||
kooha
|
||||
vokoscreen-ng
|
||||
gimp
|
||||
font-manager
|
||||
xournalpp
|
||||
remmina
|
||||
slack
|
||||
signal-desktop
|
||||
zoom-us
|
||||
yaak
|
||||
bun
|
||||
];
|
||||
}
|
||||
@@ -10,7 +10,18 @@
|
||||
enableCompletion = true;
|
||||
autosuggestion.enable = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
completionInit = "autoload -U compinit && compinit -u";
|
||||
# A full compinit security-checks and rebuilds the dump on every shell
|
||||
# start. Do that at most once a day and use the cached dump (-C) in
|
||||
# between. Missing dump globs to nothing, so it takes the full path.
|
||||
completionInit = ''
|
||||
autoload -U compinit
|
||||
_zcompdump_fresh() {
|
||||
setopt local_options extendedglob
|
||||
[[ -n ''${ZDOTDIR:-$HOME}/.zcompdump(#qNmh-24) ]]
|
||||
}
|
||||
if _zcompdump_fresh; then compinit -C; else compinit -u; fi
|
||||
unfunction _zcompdump_fresh
|
||||
'';
|
||||
|
||||
shellAliases = {
|
||||
c = "cargo";
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
imports = [
|
||||
../common/programs/default.nix
|
||||
../common/programs/desktop
|
||||
../common/programs/workstation-apps.nix
|
||||
../common/programs/editors.nix
|
||||
../common/programs/dev-workstation.nix
|
||||
../common/programs/ai-gui.nix
|
||||
../common/programs/zen-browser.nix
|
||||
../common/programs/hyprland
|
||||
../common/programs/kitty
|
||||
@@ -20,10 +24,24 @@
|
||||
|
||||
home.sessionVariables = {
|
||||
LIBVA_DRIVER_NAME = "nvidia";
|
||||
GDM_BACKEND = "nvidia-drm";
|
||||
# Was GDM_BACKEND, which nothing reads (SDDM is the DM here).
|
||||
GBM_BACKEND = "nvidia-drm";
|
||||
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
|
||||
|
||||
# Firefox/Zen decode video in a separate RDD process whose sandbox denies
|
||||
# /dev/nvidia*, so nvidia-vaapi-driver never initialises there and playback
|
||||
# silently drops to software. Costs one sandbox layer; no narrower switch
|
||||
# exists. Check with `nvidia-smi --query-gpu=utilization.decoder`.
|
||||
MOZ_DISABLE_RDD_SANDBOX = "1";
|
||||
};
|
||||
|
||||
# Plain `nvdec` keeps frames in GPU memory and breaks some filters.
|
||||
custom.mpv.hwdec = "nvdec-copy";
|
||||
|
||||
# The 4060 would render Cycles far faster, but nothing caches this build —
|
||||
# flipping it on compiles Blender, OpenUSD, OpenSubdiv and OpenImageDenoise.
|
||||
custom.blender.cuda = false;
|
||||
|
||||
custom.hyprland = {
|
||||
yaziSize = "2400 1800";
|
||||
cursorSize = 42;
|
||||
|
||||
@@ -16,13 +16,6 @@ restrict_agents = false
|
||||
show_tool_durations = true
|
||||
silent_orphan_grace_secs = 120
|
||||
|
||||
[auth]
|
||||
persist_sessions = true
|
||||
|
||||
[diff]
|
||||
context_lines = 3
|
||||
split_view = false
|
||||
|
||||
[hooks]
|
||||
|
||||
[host_hooks]
|
||||
@@ -38,32 +31,13 @@ show_spans = false
|
||||
|
||||
[logging.targets]
|
||||
|
||||
[sandbox]
|
||||
auto_cleanup = true
|
||||
container_runtime = "docker"
|
||||
default_image = "ghcr.io/agent-of-empires/aoe-sandbox:latest"
|
||||
default_terminal_mode = "host"
|
||||
enabled_by_default = false
|
||||
environment = [
|
||||
"TERM",
|
||||
"COLORTERM",
|
||||
"FORCE_COLOR",
|
||||
"NO_COLOR",
|
||||
]
|
||||
extra_volumes = []
|
||||
mount_ssh = false
|
||||
selinux_relabel = false
|
||||
volume_ignores = []
|
||||
volume_ignores_strategy = "anonymous"
|
||||
|
||||
[session]
|
||||
agent_status_hooks = true
|
||||
auto_resume_on_restart = true
|
||||
auto_stop_idle_secs = 0
|
||||
click_action = "live_send"
|
||||
confirm_before_quit = false
|
||||
confirm_delete = false
|
||||
conversation_summary = false
|
||||
confirm_delete = true
|
||||
default_attach_mode = "tmux"
|
||||
delete_to_trash = false
|
||||
favorites_first = true
|
||||
@@ -79,10 +53,8 @@ prevent_sleep_when_active = false
|
||||
restart_wake_message = "wake up: pick up what you were doing"
|
||||
row_tag = "none"
|
||||
show_session_colors = true
|
||||
show_tips = false
|
||||
smart_rename = true
|
||||
smart_rename_agent = ""
|
||||
snooze_duration_minutes = 30
|
||||
strict_hotkeys = false
|
||||
tie_workdir_to_name = true
|
||||
trash_retention_days = 30
|
||||
@@ -95,18 +67,9 @@ synclaude = "claude"
|
||||
[session.custom_agents]
|
||||
synclaude = "synclaude"
|
||||
|
||||
[skills]
|
||||
auto_propagate = false
|
||||
|
||||
[sound]
|
||||
enabled = false
|
||||
|
||||
[status_hooks]
|
||||
enabled = false
|
||||
|
||||
[telemetry]
|
||||
enabled = false
|
||||
|
||||
[theme]
|
||||
color_mode = "truecolor"
|
||||
idle_decay_minutes = 0
|
||||
@@ -118,17 +81,6 @@ mouse = "auto"
|
||||
status_bar = "auto"
|
||||
vt_live = true
|
||||
|
||||
[updates]
|
||||
auto_update_plugins = false
|
||||
update_check_mode = "notify"
|
||||
|
||||
[web]
|
||||
notifications_enabled = true
|
||||
notify_on_error = true
|
||||
notify_on_idle = false
|
||||
notify_on_waiting = true
|
||||
notify_on_wake_fire = true
|
||||
|
||||
[worktree]
|
||||
auto_cleanup = true
|
||||
bare_repo_path_template = "./{branch}"
|
||||
|
||||
+218
-124
@@ -1,44 +1,51 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"Bash",
|
||||
"Edit",
|
||||
"Write",
|
||||
"NotebookEdit",
|
||||
"WebFetch",
|
||||
"WebSearch"
|
||||
],
|
||||
"deny": [
|
||||
"Read(~/.ssh/**)",
|
||||
"Read(*.pem)",
|
||||
"Read(*.key)",
|
||||
"mcp__dokploy__application-one",
|
||||
"mcp__dokploy__mounts-listByServiceId",
|
||||
"mcp__dokploy__mounts-one",
|
||||
"mcp__dokploy__compose-one",
|
||||
"mcp__dokploy__schedule-create",
|
||||
"mcp__dokploy__schedule-update",
|
||||
"mcp__dokploy__schedule-runManually"
|
||||
],
|
||||
"defaultMode": "auto"
|
||||
"$schema": "https://json.schemastore.org/claude-code-settings.json",
|
||||
"agentPushNotifEnabled": true,
|
||||
"autoCompactEnabled": true,
|
||||
"defaultMode": "acceptEdits",
|
||||
"editorMode": "vim",
|
||||
"enabledPlugins": {
|
||||
"building@subvisual": true,
|
||||
"caveman@caveman": true,
|
||||
"rust-analyzer-lsp@claude-plugins-official": false,
|
||||
"typescript-lsp@claude-plugins-official": true
|
||||
},
|
||||
"extraKnownMarketplaces": {
|
||||
"caveman": {
|
||||
"source": {
|
||||
"repo": "JuliusBrussee/caveman",
|
||||
"source": "github"
|
||||
}
|
||||
},
|
||||
"impeccable": {
|
||||
"source": {
|
||||
"repo": "pbakaus/impeccable",
|
||||
"source": "github"
|
||||
}
|
||||
},
|
||||
"subvisual": {
|
||||
"source": {
|
||||
"repo": "subvisual/harness",
|
||||
"source": "github"
|
||||
}
|
||||
},
|
||||
"superpowers-marketplace": {
|
||||
"source": {
|
||||
"repo": "obra/superpowers-marketplace",
|
||||
"source": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedbackSurveyState": {
|
||||
"lastShownTime": 1754052643456
|
||||
},
|
||||
"hooks": {
|
||||
"PostToolUse": [
|
||||
"ElicitationResult": [
|
||||
{
|
||||
"matcher": "Write|Edit|MultiEdit",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "~/.claude/hooks/comment-lint.py"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": "AskUserQuestion",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf running > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'"
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf running > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -47,98 +54,151 @@
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "~/.claude/hooks/tmux-attention.sh"
|
||||
"command": "~/.claude/hooks/tmux-attention.sh",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": "permission_prompt|elicitation_dialog|agent_needs_input",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf waiting > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'"
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf waiting > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
],
|
||||
"matcher": "permission_prompt|elicitation_dialog|agent_needs_input"
|
||||
},
|
||||
{
|
||||
"matcher": "idle_prompt|agent_completed",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf idle > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'"
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf idle > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'",
|
||||
"type": "command"
|
||||
}
|
||||
],
|
||||
"matcher": "idle_prompt|agent_completed"
|
||||
},
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"command": "/home/naps62/.local/share/maestro/maestro-claude-hook.sh AwaitingInput",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"PostToolUse": [
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"command": "~/.claude/hooks/comment-lint.py",
|
||||
"type": "command"
|
||||
}
|
||||
],
|
||||
"matcher": "Write|Edit|MultiEdit"
|
||||
},
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf running > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'",
|
||||
"type": "command"
|
||||
}
|
||||
],
|
||||
"matcher": "AskUserQuestion"
|
||||
},
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"command": "/home/naps62/.local/share/maestro/maestro-claude-hook.sh Active",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"PreToolUse": [
|
||||
{
|
||||
"matcher": "Bash",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "~/.claude/hooks/comms-lint.py"
|
||||
"command": "~/.claude/hooks/comms-lint.py",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
],
|
||||
"matcher": "Bash"
|
||||
},
|
||||
{
|
||||
"matcher": "",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "~/.claude/hooks/tmux-reset.sh"
|
||||
"command": "~/.claude/hooks/tmux-reset.sh",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
],
|
||||
"matcher": ""
|
||||
},
|
||||
{
|
||||
"matcher": "Bash",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "rtk hook claude"
|
||||
"command": "rtk hook claude",
|
||||
"type": "command"
|
||||
}
|
||||
],
|
||||
"matcher": "Bash"
|
||||
},
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"command": "sh -c 'for H in ~/.claude/hooks/secret-guard.py /home/naps62/tea/agent-skills/hooks/secret-guard.py /home/naps62/tea/agent-skills/worktrees/week-review-2026-w34/hooks/secret-guard.py; do [ -e \"$H\" ] && exec \"$H\"; done; exit 0'",
|
||||
"type": "command"
|
||||
}
|
||||
],
|
||||
"matcher": "Bash|Write|Edit|MultiEdit|NotebookEdit"
|
||||
},
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; IN=$(cat 2>/dev/null); S=running; case \"$IN\" in *\\\"tool_name\\\":\\\"AskUserQuestion\\\"*) S=waiting ;; esac; printf %s \"$S\" > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; IN=$(cat 2>/dev/null); S=running; case \"$IN\" in *\\\"tool_name\\\":\\\"AskUserQuestion\\\"*) S=waiting ;; esac; printf %s \"$S\" > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'"
|
||||
"command": "/home/naps62/.local/share/maestro/maestro-claude-hook.sh Active",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"SessionStart": [
|
||||
{
|
||||
"matcher": "startup|resume|clear",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "~/.claude/hooks/git-autoupdate.sh"
|
||||
"command": "~/.claude/hooks/git-autoupdate.sh",
|
||||
"type": "command"
|
||||
}
|
||||
],
|
||||
"matcher": "startup|resume|clear"
|
||||
},
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"command": "python3 ~/.claude/scripts/aoe-register-remote.py",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "python3 ~/.claude/scripts/aoe-register-remote.py"
|
||||
"command": "/home/naps62/tea/rev/scripts/rev-hook-session-start.sh",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "/home/naps62/tea/rev/scripts/rev-hook-session-start.sh"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "sh -c '[ -n \"$AOE_INSTANCE_ID\" ] || exit 0; command -v aoe >/dev/null 2>&1 || exit 0; aoe __extract-session-id 2>/dev/null; exit 0 # aoe-hooks'"
|
||||
"command": "sh -c '[ -n \"$AOE_INSTANCE_ID\" ] || exit 0; command -v aoe >/dev/null 2>&1 || exit 0; aoe __extract-session-id 2>/dev/null; exit 0 # aoe-hooks'",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -147,30 +207,24 @@
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "/home/naps62/tea/rev/scripts/rev-hook-stop.sh"
|
||||
"command": "/home/naps62/tea/rev/scripts/rev-hook-stop.sh",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf idle > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'"
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf idle > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"UserPromptSubmit": [
|
||||
},
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "sh -c '[ -n \"$AOE_INSTANCE_ID\" ] || exit 0; command -v aoe >/dev/null 2>&1 || exit 0; aoe __extract-session-id 2>/dev/null; exit 0 # aoe-hooks'"
|
||||
},
|
||||
{
|
||||
"type": "command",
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf running > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'"
|
||||
"command": "/home/naps62/.local/share/maestro/maestro-claude-hook.sh AwaitingInput",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -179,59 +233,49 @@
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf idle > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'"
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf idle > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"command": "/home/naps62/.local/share/maestro/maestro-claude-hook.sh Error",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ElicitationResult": [
|
||||
"UserPromptSubmit": [
|
||||
{
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf running > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'"
|
||||
"command": "sh -c '[ -n \"$AOE_INSTANCE_ID\" ] || exit 0; command -v aoe >/dev/null 2>&1 || exit 0; aoe __extract-session-id 2>/dev/null; exit 0 # aoe-hooks'",
|
||||
"type": "command"
|
||||
},
|
||||
{
|
||||
"command": "sh -c 'unset IFS; set -f; umask 077; [ -n \"$AOE_INSTANCE_ID\" ] || exit 0; case \"$AOE_INSTANCE_ID\" in *[!0-9a-zA-Z_-]*) exit 0 ;; esac; B=/tmp/aoe-hooks-1000; mkdir -p \"$B\" 2>/dev/null || exit 0; LS=$(LC_ALL=C ls -ldn \"$B\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; ME=$(id -u 2>/dev/null) || exit 0; [ \"$3\" = \"$ME\" ] || exit 0; D=\"$B/$AOE_INSTANCE_ID\"; mkdir -p \"$D\" 2>/dev/null; LS=$(LC_ALL=C ls -ldn \"$D\" 2>/dev/null) || exit 0; set -- $LS; M=\"$1\"; case \"$M\" in drwx------|drwx------.|drwx------+|drwx------@) ;; *) exit 0 ;; esac; [ \"$3\" = \"$ME\" ] || exit 0; printf running > \"$D/status\" 2>/dev/null; exit 0 # aoe-hooks'",
|
||||
"type": "command"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"worktree": {
|
||||
"baseRef": "fresh"
|
||||
},
|
||||
"enabledPlugins": {
|
||||
"building@subvisual": true,
|
||||
"rust-analyzer-lsp@claude-plugins-official": false,
|
||||
"caveman@caveman": true
|
||||
},
|
||||
"extraKnownMarketplaces": {
|
||||
"subvisual": {
|
||||
"source": {
|
||||
"source": "github",
|
||||
"repo": "subvisual/harness"
|
||||
}
|
||||
},
|
||||
"superpowers-marketplace": {
|
||||
"source": {
|
||||
"source": "github",
|
||||
"repo": "obra/superpowers-marketplace"
|
||||
}
|
||||
},
|
||||
"caveman": {
|
||||
"source": {
|
||||
"source": "github",
|
||||
"repo": "JuliusBrussee/caveman"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skipDangerousModePermissionPrompt": true,
|
||||
"theme": "dark",
|
||||
"editorMode": "vim",
|
||||
"preferredNotifChannel": "auto",
|
||||
"autoCompactEnabled": true,
|
||||
"remoteControlAtStartup": false,
|
||||
"inputNeededNotifEnabled": true,
|
||||
"mcpServers": {
|
||||
"herd-mcp": {
|
||||
"type": "http",
|
||||
"url": "https://mcp.herd.eco/v1"
|
||||
},
|
||||
"home-assistant": {
|
||||
"type": "http",
|
||||
"url": "https://ha-mcp.n62.casa/mcp"
|
||||
},
|
||||
"linear": {
|
||||
"type": "http",
|
||||
"url": "https://mcp.linear.app/mcp"
|
||||
},
|
||||
"playwright": {
|
||||
"args": [
|
||||
"-y",
|
||||
@@ -241,7 +285,57 @@
|
||||
"type": "stdio"
|
||||
}
|
||||
},
|
||||
"model": "opus[1m]",
|
||||
"permissions": {
|
||||
"additionalDirectories": [
|
||||
"/home/naps62/projects",
|
||||
"/home/naps62/ethui",
|
||||
"/home/naps62/labs",
|
||||
"/home/naps62/subvisual"
|
||||
],
|
||||
"allow": [
|
||||
"Bash",
|
||||
"Edit",
|
||||
"Write",
|
||||
"NotebookEdit",
|
||||
"WebFetch",
|
||||
"WebSearch"
|
||||
],
|
||||
"defaultMode": "auto",
|
||||
"deny": [
|
||||
"Read(~/.ssh/**)",
|
||||
"Read(*.pem)",
|
||||
"Read(*.key)",
|
||||
"mcp__dokploy__application-one",
|
||||
"mcp__dokploy__mounts-one",
|
||||
"mcp__dokploy__schedule-create",
|
||||
"mcp__dokploy__schedule-update",
|
||||
"mcp__dokploy__schedule-runManually"
|
||||
]
|
||||
},
|
||||
"preferredNotifChannel": "auto",
|
||||
"remoteControlAtStartup": false,
|
||||
"sandbox": {
|
||||
"allowedNetworkHosts": [
|
||||
"github.com",
|
||||
"api.github.com",
|
||||
"raw.githubusercontent.com",
|
||||
"gist.github.com",
|
||||
"release-assets.githubusercontent.com"
|
||||
],
|
||||
"autoAllowBashIfSandboxed": false,
|
||||
"enabled": false
|
||||
},
|
||||
"skipDangerousModePermissionPrompt": true,
|
||||
"statusLine": {
|
||||
"command": "~/.claude/statusline.sh",
|
||||
"type": "command"
|
||||
},
|
||||
"theme": "dark",
|
||||
"tui": "fullscreen",
|
||||
"verbose": false,
|
||||
"voiceEnabled": true,
|
||||
"worktree": {
|
||||
"baseRef": "fresh"
|
||||
}
|
||||
}
|
||||
|
||||
+22
-1
@@ -14,6 +14,14 @@ let
|
||||
lib.importJSON ./claude-settings.json
|
||||
)
|
||||
);
|
||||
|
||||
# Same merge, same reason: ./opencode.json holds only yolo's overrides so
|
||||
# agents, commands and skills keep coming from common.
|
||||
mergedOpencodeConfig = (pkgs.formats.json { }).generate "opencode.json" (
|
||||
lib.recursiveUpdate (lib.importJSON ../common/programs/opencode/opencode.json) (
|
||||
lib.importJSON ./opencode.json
|
||||
)
|
||||
);
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
@@ -23,12 +31,18 @@ in
|
||||
../common/programs/kitty
|
||||
../common/programs/gpg.nix
|
||||
../common/programs/aoe
|
||||
../common/programs/maestro
|
||||
../common/features/xdg.nix
|
||||
./monitors.nix
|
||||
./services.nix
|
||||
./ssh.nix
|
||||
];
|
||||
|
||||
# Host-local, like the aoe config below: bash goes from "ask" to
|
||||
# "allow" so unattended opencode sessions stop stalling on every git and grep.
|
||||
# It also drops the prompt on branches under review, which is the tradeoff.
|
||||
xdg.configFile."opencode/opencode.json".source = lib.mkForce mergedOpencodeConfig;
|
||||
|
||||
custom.hyprland.cursorSize = 32;
|
||||
|
||||
# Amber, and a different silhouette to Nordzy — this desktop is only ever seen
|
||||
@@ -64,7 +78,14 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
programs.agentSkills.machine = "yolo";
|
||||
# This is the one box that runs the agent-skills units; each starts a session,
|
||||
# so a second machine enabling them would run the same job twice.
|
||||
programs.agentSkills = {
|
||||
machine = "yolo";
|
||||
prDaemon.enable = true;
|
||||
hourlog.enable = true;
|
||||
weekReview.enable = true;
|
||||
};
|
||||
programs.nh.flake = "/home/naps62/tea/nixos-config";
|
||||
|
||||
# Idle lock and dpms-off blank the virtual output: Sunshine then captures a
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"permission": {
|
||||
"bash": "allow"
|
||||
}
|
||||
}
|
||||
+37
-61
@@ -22,8 +22,25 @@ in
|
||||
home.packages = [
|
||||
sem
|
||||
pkgs.bun
|
||||
# ACP adapter aoe's structured (web) sessions spawn as `claude-agent-acp`.
|
||||
pkgs.claude-agent-acp
|
||||
];
|
||||
|
||||
# maestro's own units come from its flake module, not from the hand-written
|
||||
# set below. 8081, not 8080: aoe-web already has that port on this host.
|
||||
# There is no auth layer, so 0.0.0.0 is only safe behind the LAN perimeter.
|
||||
services.maestro = {
|
||||
enable = true;
|
||||
web.enable = true;
|
||||
settings = {
|
||||
daemon.bind_addr = "127.0.0.1:7070";
|
||||
web = {
|
||||
bind_addr = "0.0.0.0:8081";
|
||||
daemon_url = "http://127.0.0.1:7070";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user.services = {
|
||||
rev = {
|
||||
Unit = {
|
||||
@@ -65,7 +82,8 @@ in
|
||||
WorkingDirectory = "%h/tea/rev";
|
||||
ExecStart = "${pkgs.bun}/bin/bun scripts/deploy-webhook.ts";
|
||||
EnvironmentFile = "%h/.config/rev/deploy.env";
|
||||
Environment = [ "PATH=${toolPath}" ];
|
||||
# Unit files are home-manager symlinks; deploy.sh must not rewrite them.
|
||||
Environment = [ "PATH=${toolPath}" "REV_SKIP_UNIT_INSTALL=1" ];
|
||||
Restart = "always";
|
||||
RestartSec = 2;
|
||||
};
|
||||
@@ -82,70 +100,28 @@ in
|
||||
Service = {
|
||||
Type = "simple";
|
||||
WorkingDirectory = "%h";
|
||||
# aoe refuses `--auth none` on a non-loopback bind unless --behind-proxy
|
||||
# is set; --allowed-host is what makes the rebinding gate accept a
|
||||
# hostname under a wildcard bind (an IP literal needs no flag).
|
||||
ExecStart = "${aoe}/bin/aoe serve --host 0.0.0.0 --port 8080 --auth none --behind-proxy --allowed-host aoe.n62.casa";
|
||||
Environment = [ "PATH=${toolPath}" ];
|
||||
# The fork removed dashboard auth entirely, so there is no --auth flag
|
||||
# any more — the reverse proxy is the only access gate. --allowed-host
|
||||
# is what makes the rebinding gate accept a hostname under a wildcard
|
||||
# bind (an IP literal needs no flag).
|
||||
ExecStart = "${aoe}/bin/aoe serve --host 0.0.0.0 --port 8080 --behind-proxy --allowed-host aoe.n62.casa";
|
||||
# TMUX_TMPDIR keeps the daemon on the same tmux server the shell and
|
||||
# TUI use, instead of a second one under /tmp (same bug pr-daemon had).
|
||||
Environment = [
|
||||
"PATH=${toolPath}"
|
||||
"TMUX_TMPDIR=%t"
|
||||
];
|
||||
Restart = "always";
|
||||
RestartSec = 2;
|
||||
# If this unit boots before any shell, the shared tmux server lands in
|
||||
# its cgroup; the default control-group kill would take every session
|
||||
# down on restart.
|
||||
KillMode = "process";
|
||||
};
|
||||
Install.WantedBy = [ "default.target" ];
|
||||
};
|
||||
|
||||
hourlog = {
|
||||
Unit = {
|
||||
Description = "Start the Friday hour log in a tmux session";
|
||||
Documentation = [ "https://git.naps.pt/yolo/agent-skills" ];
|
||||
ConditionPathIsDirectory = "%h/tea/agent-skills";
|
||||
};
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "%h/tea/agent-skills/bin/hourlog-session.sh";
|
||||
Environment = [ "PATH=${toolPath}" ];
|
||||
# This unit may be what starts the tmux server; the default cgroup kill
|
||||
# would take it back down as soon as ExecStart returns.
|
||||
KillMode = "process";
|
||||
};
|
||||
};
|
||||
|
||||
week-review = {
|
||||
Unit = {
|
||||
Description = "Start the weekly agent-skills review in a tmux session";
|
||||
Documentation = [ "https://git.naps.pt/yolo/agent-skills" ];
|
||||
ConditionPathIsDirectory = "%h/tea/agent-skills";
|
||||
};
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "%h/tea/agent-skills/bin/week-review-session.sh";
|
||||
Environment = [ "PATH=${toolPath}" ];
|
||||
KillMode = "process";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user.timers = {
|
||||
hourlog = {
|
||||
Unit.Description = "Friday hour log, 18:00 Europe/Lisbon";
|
||||
Timer = {
|
||||
# Zone suffix pinned because the machine clock is UTC; keeps it at 18:00
|
||||
# wall time across DST.
|
||||
OnCalendar = "Fri 18:00 Europe/Lisbon";
|
||||
Persistent = true;
|
||||
AccuracySec = "1min";
|
||||
};
|
||||
Install.WantedBy = [ "timers.target" ];
|
||||
};
|
||||
|
||||
week-review = {
|
||||
Unit.Description = "Weekly agent-skills review, Fridays 17:00 Europe/Lisbon";
|
||||
Timer = {
|
||||
OnCalendar = "Fri 17:00 Europe/Lisbon";
|
||||
Persistent = true;
|
||||
AccuracySec = "1min";
|
||||
};
|
||||
Install.WantedBy = [ "timers.target" ];
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
# pr-daemon, hourlog and week-review are not here: their units ship with the
|
||||
# scripts they run, in the agent-skills module. This host opts in with
|
||||
# programs.agentSkills.*.enable in home/yolo/default.nix.
|
||||
|
||||
@@ -35,6 +35,12 @@
|
||||
share = "media";
|
||||
mountPoint = "/mnt/media";
|
||||
}
|
||||
{
|
||||
# yolo VM's /home/naps62 (share defined in hosts/yolo/default.nix).
|
||||
server = "10.7.10.2";
|
||||
share = "home";
|
||||
mountPoint = "/home/naps62/yolo";
|
||||
}
|
||||
];
|
||||
|
||||
boot.kernelParams = [
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
sddm-noctalia-theme = pkgs.callPackage ../../../../pkgs/sddm-noctalia-theme/package.nix { };
|
||||
in
|
||||
{
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
@@ -15,7 +12,7 @@ in
|
||||
services.displayManager.sddm = {
|
||||
enable = true;
|
||||
wayland.enable = true;
|
||||
theme = "sddm-noctalia";
|
||||
theme = "sddm-astronaut-theme";
|
||||
package = pkgs.kdePackages.sddm;
|
||||
extraPackages = with pkgs.kdePackages; [
|
||||
qtmultimedia
|
||||
@@ -26,6 +23,6 @@ in
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
sddm-noctalia-theme
|
||||
sddm-astronaut
|
||||
];
|
||||
}
|
||||
|
||||
@@ -10,6 +10,13 @@
|
||||
portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
|
||||
};
|
||||
|
||||
# swayosd (the volume/brightness OSD, configured in home) writes
|
||||
# /sys/class/backlight/*/brightness directly. The package ships a udev rule
|
||||
# that chgrps those files to `video`; without both the rule and the group,
|
||||
# brightness keys pop the OSD but change nothing.
|
||||
services.udev.packages = [ pkgs.swayosd ];
|
||||
users.users.naps62.extraGroups = [ "video" ];
|
||||
|
||||
# GTK/GNOME services still useful on Wayland
|
||||
programs.dconf.enable = true;
|
||||
|
||||
|
||||
@@ -26,6 +26,10 @@
|
||||
|
||||
networking.hostName = "konishi";
|
||||
|
||||
# Set here rather than in hardware-configuration.nix so it survives a
|
||||
# nixos-generate-config regeneration; the list merges with that file's.
|
||||
fileSystems."/".options = [ "noatime" ];
|
||||
|
||||
# NAS media share — reachable only over the wg-home VPN. Lazy automount, so it
|
||||
# never blocks boot and (re)mounts on first access once the VPN is up.
|
||||
custom.smbMounts = [
|
||||
@@ -34,6 +38,12 @@
|
||||
share = "media";
|
||||
mountPoint = "/mnt/media";
|
||||
}
|
||||
{
|
||||
# yolo VM's /home/naps62 (share defined in hosts/yolo/default.nix).
|
||||
server = "10.7.10.2";
|
||||
share = "home";
|
||||
mountPoint = "/home/naps62/yolo";
|
||||
}
|
||||
];
|
||||
|
||||
# Arm Wake-on-LAN (magic packet) on the Intel igc NIC and re-apply it on every
|
||||
|
||||
@@ -58,6 +58,30 @@
|
||||
# virtio drivers; the agent itself is a separate service.
|
||||
qemuGuest.enable = true;
|
||||
|
||||
# Exposes /home/naps62 to arrakis/konishi (custom.smbMounts on both, mounted
|
||||
# at ~/yolo). Guest auth — the home dir holds SSH keys and credentials, so
|
||||
# the only guard is `hosts allow` limiting clients to the wireguard subnet
|
||||
# (desktops connect from wg addresses, 10.10.*).
|
||||
# Clients address this VM as 10.7.10.2; keep that DHCP lease reserved.
|
||||
samba = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
settings = {
|
||||
global = {
|
||||
"map to guest" = "bad user";
|
||||
"hosts allow" = "10.10.0.0/16 127.0.0.1";
|
||||
"hosts deny" = "ALL";
|
||||
};
|
||||
home = {
|
||||
path = "/home/naps62";
|
||||
"read only" = "no";
|
||||
"guest ok" = "yes";
|
||||
"force user" = "naps62";
|
||||
"force group" = "users";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# No physical seat: Sunshine is a user service and cannot capture until a
|
||||
# graphical session exists, so a cold boot must reach one unattended. No
|
||||
# hyprlock on start (unlike konishi) — nobody could type the password in.
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
pkgs.stdenv.mkDerivation {
|
||||
pname = "sddm-noctalia-theme";
|
||||
version = "1.0";
|
||||
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "mahaveergurjar";
|
||||
repo = "sddm";
|
||||
rev = "noctalia";
|
||||
sha256 = "sha256-e/gYI6znHXxlDCOVh4p265x3kO0nQUU897hCY1yEz88=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/sddm/themes/sddm-noctalia
|
||||
cp -r * $out/share/sddm/themes/sddm-noctalia/
|
||||
|
||||
# Patch for Qt6 SDDM greeter compatibility
|
||||
# SDDM reads QtVersion from metadata.desktop to find the greeter binary;
|
||||
# default is 5 (sddm-greeter), we need 6 (sddm-greeter-qt6)
|
||||
substituteInPlace $out/share/sddm/themes/sddm-noctalia/metadata.desktop \
|
||||
--replace-fail "Theme-Id=noctalia" "QtVersion=6
|
||||
Theme-Id=noctalia"
|
||||
|
||||
'';
|
||||
|
||||
meta = with pkgs.lib; {
|
||||
description = "Noctalia-themed SDDM login theme";
|
||||
homepage = "https://github.com/mahaveergurjar/sddm/tree/noctalia";
|
||||
license = licenses.gpl3;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user