Compare commits

...

5 Commits

Author SHA1 Message Date
ce490cacdc up 2026-03-19 17:36:07 +00:00
2452683a0c cog 2026-03-19 17:36:07 +00:00
7be22a5210 fix home 2026-03-19 17:36:07 +00:00
3e8f143752 fix 2026-03-19 17:36:07 +00:00
2b44191e73 flk 2026-03-19 17:36:07 +00:00
13 changed files with 272 additions and 420 deletions

250
flake.lock generated
View File

@@ -130,11 +130,11 @@
}, },
"den": { "den": {
"locked": { "locked": {
"lastModified": 1773602164, "lastModified": 1773922822,
"narHash": "sha256-YbWJ0S+rCAIsNl/7289C++XTU0PjQVdqf2BZwcOeDQM=", "narHash": "sha256-1mgL8P5XYVQeYMwZ7QRn2vFQYu7iNGTLaYAgllZaef8=",
"owner": "vic", "owner": "vic",
"repo": "den", "repo": "den",
"rev": "679b9e8627634cfa33602557249b7d086c255ba4", "rev": "35542c55f36f53203864f6449862d8d9e0bcda10",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -170,11 +170,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1773506317, "lastModified": 1773889306,
"narHash": "sha256-qWKbLUJpavIpvOdX1fhHYm0WGerytFHRoh9lVck6Bh0=", "narHash": "sha256-PAqwnsBSI9SVC2QugvQ3xeYCB0otOwCacB1ueQj2tgw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "878ec37d6a8f52c6c801d0e2a2ad554c75b9353c", "rev": "5ad85c82cc52264f4beddc934ba57f3789f28347",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -191,11 +191,11 @@
"rust-analyzer-src": "rust-analyzer-src" "rust-analyzer-src": "rust-analyzer-src"
}, },
"locked": { "locked": {
"lastModified": 1773646590, "lastModified": 1773904249,
"narHash": "sha256-qwnecNC3DB0hSu6MvU27xh/Mg9uPbmmg7d1wBOtO7ds=", "narHash": "sha256-lkvol0ZJqgN21tJQIwAIYQYCkYFFHJEDAXzoPEzJ9gI=",
"owner": "nix-community", "owner": "nix-community",
"repo": "fenix", "repo": "fenix",
"rev": "350a4df2afc34c1ae115173e0509cec7067a06c9", "rev": "daa310a9b3fd5e36b4a8f3ece720c4a6d494f91f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -249,29 +249,6 @@
"type": "github" "type": "github"
} }
}, },
"fenix_4": {
"inputs": {
"nixpkgs": [
"tuicr",
"naersk",
"nixpkgs"
],
"rust-analyzer-src": "rust-analyzer-src_4"
},
"locked": {
"lastModified": 1752475459,
"narHash": "sha256-z6QEu4ZFuHiqdOPbYss4/Q8B0BFhacR8ts6jO/F/aOU=",
"owner": "nix-community",
"repo": "fenix",
"rev": "bf0d6f70f4c9a9cf8845f992105652173f4b617f",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "fenix",
"type": "github"
}
},
"flake-aspects": { "flake-aspects": {
"locked": { "locked": {
"lastModified": 1773552804, "lastModified": 1773552804,
@@ -421,7 +398,7 @@
}, },
"flake-utils_2": { "flake-utils_2": {
"inputs": { "inputs": {
"systems": "systems_6" "systems": "systems_5"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@@ -464,11 +441,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1773608492, "lastModified": 1773935367,
"narHash": "sha256-QZteyExJYSQzgxqdsesDPbQgjctGG7iKV/6ooyQPITk=", "narHash": "sha256-+RjULqqbCYmOJG+99pNqEGRJV7bX8DYPbxKUhKWFKsI=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "9a40ec3b78fc688d0908485887d355caa5666d18", "rev": "a7ec5440474cdcc9939cc67c320f01aea0a2f195",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -480,11 +457,11 @@
"homebrew-cask": { "homebrew-cask": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1773649640, "lastModified": 1773940387,
"narHash": "sha256-7n/N/B6Z8wh2VLNunuSvK7Fkb5ilb2kKJvwWoyDgARI=", "narHash": "sha256-WQhd19zLZZw6LsWwJLqRsNFjibStZ+9QMmZsu5ZgM1o=",
"owner": "homebrew", "owner": "homebrew",
"repo": "homebrew-cask", "repo": "homebrew-cask",
"rev": "b7bbc97fb538f9008983184117dd7cf498f7a667", "rev": "85e2ca93ecd44d9c2c37c3e246114cab22f3b4e0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -496,11 +473,11 @@
"homebrew-core": { "homebrew-core": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1773652250, "lastModified": 1773939917,
"narHash": "sha256-BI7w+rZYcH9xL7By64rWeeSF0dBamEGOY/STGgqgEn8=", "narHash": "sha256-ZKNySDCKzaY4DpTuoIt0BjGx0aRyQCNO3Kg/at5zO2w=",
"owner": "homebrew", "owner": "homebrew",
"repo": "homebrew-core", "repo": "homebrew-core",
"rev": "04d3dd640652983579edb4d852c6063d84bec608", "rev": "9cdd9bcd1c57b14e233ebb4469a1829cd80e8f44",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -511,11 +488,11 @@
}, },
"import-tree": { "import-tree": {
"locked": { "locked": {
"lastModified": 1773554199, "lastModified": 1773693634,
"narHash": "sha256-6apV5N1F5tTD8JY9AUGnkWmy56HqDPn4MNFRsq4Rg+s=", "narHash": "sha256-BtZ2dtkBdSUnFPPFc+n0kcMbgaTxzFNPv2iaO326Ffg=",
"owner": "vic", "owner": "vic",
"repo": "import-tree", "repo": "import-tree",
"rev": "c6ebc59c85ee54cfb68163d06d1a3149ce0fe431", "rev": "c41e7d58045f9057880b0d85e1152d6a4430dbf1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -558,11 +535,11 @@
"jj-nvim": { "jj-nvim": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1773335406, "lastModified": 1773914813,
"narHash": "sha256-GaiDUDTwPANbFtvIcrs1VOqTlSIBI+vnB7nOGBQxjW0=", "narHash": "sha256-UuNcOfgsWuHu9hx6NT/FbQ0E8T6nRY1X6O6CDRtH8Sk=",
"owner": "NicolasGB", "owner": "NicolasGB",
"repo": "jj.nvim", "repo": "jj.nvim",
"rev": "d471a03685836faedbe952ab3794fdca65c4af60", "rev": "a6e163bcc3a6b75e5b6d4190b64ed4b39f8ddb0c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -616,11 +593,11 @@
"treefmt-nix": "treefmt-nix" "treefmt-nix": "treefmt-nix"
}, },
"locked": { "locked": {
"lastModified": 1773648349, "lastModified": 1773930710,
"narHash": "sha256-OBit0v5D63KHwLDj7r0BJ2/OxoZQ4llAhwx0PFKdX9A=", "narHash": "sha256-VzR/HQV6beRr0MjQPvoA2zYaLh04PpLAOnhrxwDgF80=",
"owner": "numtide", "owner": "numtide",
"repo": "llm-agents.nix", "repo": "llm-agents.nix",
"rev": "239fc4654af09f366b554b6a242f3a96277e0b0a", "rev": "6e67383a3e3c0c9142adde7cfebbd3c9fbf6fac2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -651,29 +628,6 @@
"type": "github" "type": "github"
} }
}, },
"naersk_2": {
"inputs": {
"fenix": "fenix_4",
"nixpkgs": [
"tuicr",
"nixpkgs"
]
},
"locked": {
"lastModified": 1769799857,
"narHash": "sha256-88IFXZ7Sa1vxbz5pty0Io5qEaMQMMUPMonLa3Ls/ss4=",
"owner": "nix-community",
"repo": "naersk",
"rev": "9d4ed44d8b8cecdceb1d6fd76e74123d90ae6339",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "master",
"repo": "naersk",
"type": "github"
}
},
"neovim-nightly-overlay": { "neovim-nightly-overlay": {
"inputs": { "inputs": {
"flake-parts": "flake-parts_3", "flake-parts": "flake-parts_3",
@@ -683,11 +637,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1773619513, "lastModified": 1773878753,
"narHash": "sha256-2xCVm8ajE9pNngv489dPKOUa5P0tlmJRwgVPjhy7c8w=", "narHash": "sha256-yfJ3Vj0kqvJ+F5E1QtGfYgCFDncEe2vmYcDK+ofUrmQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "neovim-nightly-overlay", "repo": "neovim-nightly-overlay",
"rev": "07227cc79efb9c1744ec99d51f98c7a3584a62d2", "rev": "14408dc1b61b6112a79d4b2e5e10e658e18bd554",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -699,11 +653,11 @@
"neovim-src": { "neovim-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1773615769, "lastModified": 1773878059,
"narHash": "sha256-qU71k2BTckpJDHpjxaU4aQwl14+iApnAycq+IJDTmO0=", "narHash": "sha256-2AygdMsagzsmMZfmayQ8Zr8M/Ac8lGiCm+eXL2/+TKw=",
"owner": "neovim", "owner": "neovim",
"repo": "neovim", "repo": "neovim",
"rev": "16f7440cc7b59b7e5c79f593fedc117d2d16d7dd", "rev": "19715e6e8a7145c8d4da39c9ebc2b09da5be74e7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -780,11 +734,11 @@
}, },
"nixpkgs_4": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1773507054, "lastModified": 1773628058,
"narHash": "sha256-Q8U5VXgrcxmCxPtCCJCIZkcAX3FCZwGh1GNVIXxMND0=", "narHash": "sha256-hpXH0z3K9xv0fHaje136KY872VT2T5uwxtezlAskQgY=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "e80236013dc8b77aa49ca90e7a12d86f5d8d64c9", "rev": "f8573b9c935cfaa162dd62cc9e75ae2db86f85df",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -796,11 +750,11 @@
}, },
"nixpkgs_5": { "nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1773652326, "lastModified": 1773941401,
"narHash": "sha256-VMI7iiSJxIoc0Ye9zFH1vJQ88EnMdzfUwbKINy53FXQ=", "narHash": "sha256-BIDEkDTGPLhO1wSn6XrZjLjHLKU0eDEICEDWp5dBSJE=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "84cc03d4065cc2197f1d58f6349f59503adb185c", "rev": "f04aee989d4152466a636ece931c1ae8774a3ea9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -827,22 +781,6 @@
} }
}, },
"nixpkgs_7": { "nixpkgs_7": {
"locked": {
"lastModified": 1771923393,
"narHash": "sha256-Fy0+UXELv9hOE8WjYhJt8fMDLYTU2Dqn3cX4BwoGBos=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ea7f1f06811ce7fcc81d6c6fd4213150c23edcf2",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_8": {
"locked": { "locked": {
"lastModified": 1765934234, "lastModified": 1765934234,
"narHash": "sha256-pJjWUzNnjbIAMIc5gRFUuKCDQ9S1cuh3b2hKgA7Mc4A=", "narHash": "sha256-pJjWUzNnjbIAMIc5gRFUuKCDQ9S1cuh3b2hKgA7Mc4A=",
@@ -878,30 +816,14 @@
"type": "github" "type": "github"
} }
}, },
"nono": {
"flake": false,
"locked": {
"lastModified": 1773651195,
"narHash": "sha256-a9wDe9gOe0vWlFq1HuUvs5Xylqf54lBEIIvpUn4NBXo=",
"owner": "always-further",
"repo": "nono",
"rev": "d5f15c91fef11456c595a08dcf5b9ac40ff1eeb4",
"type": "github"
},
"original": {
"owner": "always-further",
"repo": "nono",
"type": "github"
}
},
"opencode-nvim": { "opencode-nvim": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1773400860, "lastModified": 1773871721,
"narHash": "sha256-+ijlFNKwPrnv+/PAjlJqd7GKcD43nSjr2a984jfjN5U=", "narHash": "sha256-u4NOYZgl8HpYaeobyXFJn+c2FDvSVSf1DrIf9zYA4OI=",
"owner": "sudo-tee", "owner": "sudo-tee",
"repo": "opencode.nvim", "repo": "opencode.nvim",
"rev": "e95905bee7feb6175f0f783f18ef3f83c201e93e", "rev": "138299df61f06b9c8e6a6d0ed27a284aa0058dad",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -955,21 +877,19 @@
"nixpkgs" "nixpkgs"
], ],
"nixvim": "nixvim", "nixvim": "nixvim",
"nono": "nono",
"opencode-nvim": "opencode-nvim", "opencode-nvim": "opencode-nvim",
"sops-nix": "sops-nix", "sops-nix": "sops-nix",
"tuicr": "tuicr",
"zjstatus": "zjstatus" "zjstatus": "zjstatus"
} }
}, },
"rust-analyzer-src": { "rust-analyzer-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1773543526, "lastModified": 1773775226,
"narHash": "sha256-CKmkYqUi2pI1uDGDfpK0mkZbRLyjUKCpYDU3eMHtmks=", "narHash": "sha256-413aE+fhubk1GA2v4IlRrpdZZzW/b89wJGuDfZCVtEs=",
"owner": "rust-lang", "owner": "rust-lang",
"repo": "rust-analyzer", "repo": "rust-analyzer",
"rev": "90c8906e6443e7cee18cece9c2621a8b1c10794c", "rev": "4eac290b58a70961e78f2e0c04f61a08b995b2cb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1013,23 +933,6 @@
"type": "github" "type": "github"
} }
}, },
"rust-analyzer-src_4": {
"flake": false,
"locked": {
"lastModified": 1752428706,
"narHash": "sha256-EJcdxw3aXfP8Ex1Nm3s0awyH9egQvB2Gu+QEnJn2Sfg=",
"owner": "rust-lang",
"repo": "rust-analyzer",
"rev": "591e3b7624be97e4443ea7b5542c191311aa141d",
"type": "github"
},
"original": {
"owner": "rust-lang",
"ref": "nightly",
"repo": "rust-analyzer",
"type": "github"
}
},
"rust-overlay": { "rust-overlay": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -1058,11 +961,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1773550941, "lastModified": 1773889674,
"narHash": "sha256-wa/++bL2QeMUreNFBZEWluQfOYB0MnQIeGNMuaX9sfs=", "narHash": "sha256-+ycaiVAk3MEshJTg35cBTUa0MizGiS+bgpYw/f8ohkg=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "c469b6885f0dcd5c7c56bd935a0f08dbcd9e79e1", "rev": "29b6519f3e0780452bca0ac0be4584f04ac16cc5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1146,21 +1049,6 @@
"type": "github" "type": "github"
} }
}, },
"systems_6": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": { "treefmt-nix": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -1182,26 +1070,6 @@
"type": "github" "type": "github"
} }
}, },
"tuicr": {
"inputs": {
"naersk": "naersk_2",
"nixpkgs": "nixpkgs_7",
"utils": "utils_2"
},
"locked": {
"lastModified": 1773433980,
"narHash": "sha256-5NVwBcWG823ZvgOKEqFuBqINpxuPUHwU830KFsPGuok=",
"owner": "agavra",
"repo": "tuicr",
"rev": "c88887806ad1a3ee63eac1f10caeeb4b8cbd2c1f",
"type": "github"
},
"original": {
"owner": "agavra",
"repo": "tuicr",
"type": "github"
}
},
"utils": { "utils": {
"inputs": { "inputs": {
"systems": "systems" "systems": "systems"
@@ -1220,29 +1088,11 @@
"type": "github" "type": "github"
} }
}, },
"utils_2": {
"inputs": {
"systems": "systems_5"
},
"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"
}
},
"zjstatus": { "zjstatus": {
"inputs": { "inputs": {
"crane": "crane", "crane": "crane",
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs_8", "nixpkgs": "nixpkgs_7",
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {

View File

@@ -68,10 +68,6 @@
nixpkgs.url = "github:nixos/nixpkgs/master"; nixpkgs.url = "github:nixos/nixpkgs/master";
nixpkgs-lib.follows = "nixpkgs"; nixpkgs-lib.follows = "nixpkgs";
nixvim.url = "github:nix-community/nixvim"; nixvim.url = "github:nix-community/nixvim";
nono = {
url = "github:always-further/nono";
flake = false;
};
opencode-nvim = { opencode-nvim = {
url = "github:sudo-tee/opencode.nvim"; url = "github:sudo-tee/opencode.nvim";
flake = false; flake = false;
@@ -80,7 +76,6 @@
url = "github:Mic92/sops-nix"; url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
tuicr.url = "github:agavra/tuicr";
zjstatus.url = "github:dj95/zjstatus"; zjstatus.url = "github:dj95/zjstatus";
}; };
} }

View File

@@ -9,16 +9,6 @@
version = "unstable"; version = "unstable";
src = nvim-plugin-sources.opencode-nvim; src = nvim-plugin-sources.opencode-nvim;
doCheck = false; doCheck = false;
postPatch = ''
# Widen sign column and move border further left for more padding
sed -i "s/signcolumn', 'yes'/signcolumn', 'yes:2'/" lua/opencode/ui/output_window.lua
sed -i "s/, -3)/, -5)/g" lua/opencode/ui/formatter.lua
sed -i "s/win_col = -3/win_col = -5/g" lua/opencode/ui/formatter.lua
# Fix off-by-one: user border starts 1 line too early (bleeds into header empty line)
sed -i 's/start_line = output:get_line_count() *$/start_line = output:get_line_count() + 1/' lua/opencode/ui/formatter.lua
# Fix file mention border starting 1 line too early
sed -i 's/file_line - 1, file_line/file_line, file_line/' lua/opencode/ui/formatter.lua
'';
}; };
in { in {
programs.nixvim = { programs.nixvim = {

View File

@@ -7,13 +7,9 @@
}: { }: {
home.packages = [ home.packages = [
inputs'.llm-agents.packages.claude-code inputs'.llm-agents.packages.claude-code
pkgs.nono pkgs.cog-cli
]; ];
home.shellAliases = {
noc = "nono run -s --allow-cwd --profile opencode --allow ~/.bun --allow ~/.local/share/opensrc --allow ~/.config/jj --network-profile developer --proxy-allow models.dev --proxy-allow chatgpt.com --proxy-allow mcp.grep.app --proxy-allow mcp.context7.com --proxy-allow mcp.exa.ai --proxy-allow mcp.sentry.dev -- opencode";
};
programs.opencode = { programs.opencode = {
enable = true; enable = true;
package = inputs'.llm-agents.packages.opencode; package = inputs'.llm-agents.packages.opencode;

View File

@@ -1,30 +1,28 @@
{den, ...}: { {den, ...}: {
den.aspects.chidi.includes = [ den.aspects.chidi.includes = [
den.aspects.darwin-system (den.lib.perHost {
den.aspects.core includes = [
den.aspects.tailscale den.aspects.darwin-system
den.aspects.desktop den.aspects.core
den.aspects.terminal den.aspects.tailscale
den.aspects.atuin ];
den.aspects.dev-tools
den.aspects.neovim darwin = {pkgs, ...}: {
den.aspects.ai-tools networking.hostName = "chidi";
den.aspects.secrets networking.computerName = "chidi";
den.aspects.zellij
den.aspects.zk environment.systemPackages = with pkgs; [
slack
];
};
})
(den.lib.perUser {
includes = [den.aspects.desktop];
homeManager = {...}: {
fonts.fontconfig.enable = true;
programs.git.settings.user.email = "christoph@tuist.dev";
};
})
]; ];
den.aspects.chidi.darwin = {pkgs, ...}: {
networking.hostName = "chidi";
networking.computerName = "chidi";
environment.systemPackages = with pkgs; [
slack
];
};
den.aspects.chidi.homeManager = {...}: {
fonts.fontconfig.enable = true;
programs.git.settings.user.email = "christoph@tuist.dev";
};
} }

View File

@@ -10,7 +10,6 @@
# Darwin system utilities # Darwin system utilities
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
alcove
dockutil dockutil
mas mas
]; ];

View File

@@ -62,7 +62,6 @@
}; };
jj-starship.url = "github:dmmulroy/jj-starship"; jj-starship.url = "github:dmmulroy/jj-starship";
zjstatus.url = "github:dj95/zjstatus"; zjstatus.url = "github:dj95/zjstatus";
tuicr.url = "github:agavra/tuicr";
fenix = { fenix = {
url = "github:nix-community/fenix"; url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
@@ -71,10 +70,6 @@
url = "github:nix-community/naersk/master"; url = "github:nix-community/naersk/master";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nono = {
url = "github:always-further/nono";
flake = false;
};
# Neovim plugin inputs # Neovim plugin inputs
opencode-nvim = { opencode-nvim = {
url = "github:sudo-tee/opencode.nvim"; url = "github:sudo-tee/opencode.nvim";

View File

@@ -1,26 +1,24 @@
{den, ...}: { {den, ...}: {
den.aspects.jason.includes = [ den.aspects.jason.includes = [
den.aspects.darwin-system (den.lib.perHost {
den.aspects.core includes = [
den.aspects.tailscale den.aspects.darwin-system
den.aspects.desktop den.aspects.core
den.aspects.terminal den.aspects.tailscale
den.aspects.atuin ];
den.aspects.dev-tools
den.aspects.neovim darwin = {...}: {
den.aspects.ai-tools networking.hostName = "jason";
den.aspects.secrets networking.computerName = "jason";
den.aspects.zellij };
den.aspects.zk })
(den.lib.perUser {
includes = [den.aspects.desktop];
homeManager = {...}: {
fonts.fontconfig.enable = true;
programs.git.settings.user.email = "christoph@schmatzler.com";
};
})
]; ];
den.aspects.jason.darwin = {...}: {
networking.hostName = "jason";
networking.computerName = "jason";
};
den.aspects.jason.homeManager = {...}: {
fonts.fontconfig.enable = true;
programs.git.settings.user.email = "christoph@schmatzler.com";
};
} }

View File

@@ -1,26 +1,30 @@
{ {
inputs,
den, den,
inputs,
... ...
}: { }: {
den.aspects.michael.includes = [ den.aspects.michael.includes = [
den.aspects.nixos-system (den.lib.perHost {
den.aspects.core includes = [
den.aspects.openssh den.aspects.nixos-system
den.aspects.fail2ban den.aspects.core
den.aspects.tailscale den.aspects.openssh
den.aspects.fail2ban
den.aspects.tailscale
];
nixos = {modulesPath, ...}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
./_hosts/michael/backups.nix
./_hosts/michael/disk-config.nix
./_hosts/michael/gitea.nix
./_hosts/michael/hardware-configuration.nix
inputs.disko.nixosModules.default
];
networking.hostName = "michael";
};
})
]; ];
den.aspects.michael.nixos = {modulesPath, ...}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
./_hosts/michael/backups.nix
./_hosts/michael/disk-config.nix
./_hosts/michael/gitea.nix
./_hosts/michael/hardware-configuration.nix
inputs.disko.nixosModules.default
];
networking.hostName = "michael";
};
} }

View File

@@ -27,20 +27,50 @@
doCheck = false; doCheck = false;
}; };
}) })
# nono (AI agent sandbox CLI — Cargo workspace)
# cog-cli
(final: prev: let (final: prev: let
naersk-lib = prev.callPackage inputs.naersk {}; version = "0.20.0";
manifest = (prev.lib.importTOML "${inputs.nono}/crates/nono-cli/Cargo.toml").package; 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-tsuL2VntvG5AsWh8+CMAWtJqDJiaKu/pQ+xY516eiOY=";
};
aarch64-darwin =
prev.fetchurl {
url = "https://github.com/trycog/cog-cli/releases/download/v${version}/cog-darwin-arm64.tar.gz";
hash = "sha256-k6HsTQS6/MVduT9WstD77X+xPHPj3XlFIoS3qjfblZw=";
};
};
in { in {
nono = cog-cli =
naersk-lib.buildPackage { prev.stdenvNoCC.mkDerivation {
pname = manifest.name; pname = "cog-cli";
version = manifest.version; inherit version;
src = inputs.nono; src =
nativeBuildInputs = [prev.pkg-config prev.cmake prev.perl]; srcs.${prev.stdenv.hostPlatform.system}
buildInputs = [prev.openssl] ++ prev.lib.optionals prev.stdenv.isLinux [prev.dbus]; or (throw "Unsupported system for cog-cli: ${prev.stdenv.hostPlatform.system}");
OPENSSL_NO_VENDOR = 1;
doCheck = false; 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];
};
}; };
}) })
# jj-starship (passes through upstream overlay) # jj-starship (passes through upstream overlay)
@@ -49,10 +79,6 @@
(final: prev: { (final: prev: {
zjstatus = inputs.zjstatus.packages.${prev.stdenv.hostPlatform.system}.default; zjstatus = inputs.zjstatus.packages.${prev.stdenv.hostPlatform.system}.default;
}) })
# tuicr
(final: prev: {
tuicr = inputs.tuicr.defaultPackage.${prev.stdenv.hostPlatform.system};
})
]; ];
in { in {
den.default.nixos.nixpkgs.overlays = overlays; den.default.nixos.nixpkgs.overlays = overlays;

View File

@@ -1,114 +1,106 @@
{den, ...}: { {den, ...}: {
den.aspects.tahani.includes = [ den.aspects.tahani.includes = [
den.aspects.nixos-system (den.lib.perHost {
den.aspects.core includes = [
den.aspects.openssh den.aspects.nixos-system
den.aspects.tailscale den.aspects.core
den.aspects.terminal den.aspects.openssh
den.aspects.email den.aspects.tailscale
den.aspects.atuin ];
den.aspects.dev-tools
den.aspects.neovim nixos = {...}: {
den.aspects.ai-tools imports = [
den.aspects.secrets ./_hosts/tahani/adguardhome.nix
den.aspects.zellij ./_hosts/tahani/cache.nix
den.aspects.zk ./_hosts/tahani/networking.nix
./_hosts/tahani/paperless.nix
];
networking.hostName = "tahani";
sops.secrets = {
tahani-paperless-password = {
sopsFile = ../secrets/tahani-paperless-password;
format = "binary";
path = "/run/secrets/tahani-paperless-password";
};
tahani-paperless-gpt-env = {
sopsFile = ../secrets/tahani-paperless-gpt-env;
format = "binary";
path = "/run/secrets/tahani-paperless-gpt-env";
};
tahani-email-password = {
sopsFile = ../secrets/tahani-email-password;
format = "binary";
owner = "cschmatzler";
path = "/run/secrets/tahani-email-password";
};
};
virtualisation.docker.enable = true;
users.users.cschmatzler.extraGroups = ["docker" "paperless"];
systemd.tmpfiles.rules = [
"d /var/lib/paperless/consume 2775 paperless paperless -"
"d /var/lib/paperless/consume/inbox-triage 2775 paperless paperless -"
];
swapDevices = [
{
device = "/swapfile";
size = 16 * 1024;
}
];
};
})
(den.lib.perUser {
homeManager = {
config,
inputs',
...
}: let
opencode = inputs'.llm-agents.packages.opencode;
in {
programs.git.settings.user.email = "christoph@schmatzler.com";
programs.opencode.settings.permission.external_directory = {
"/tmp/himalaya-triage/*" = "allow";
"/var/lib/paperless/consume/inbox-triage/*" = "allow";
};
programs.nushell.extraConfig = ''
if $nu.is-interactive and ('SSH_CONNECTION' in ($env | columns)) and ('ZELLIJ' not-in ($env | columns)) {
try {
zellij attach -c main
exit
} catch {
print "zellij auto-start failed; staying in shell"
}
}
'';
systemd.user.services.opencode-inbox-triage = {
Unit = {
Description = "OpenCode inbox triage";
};
Service = {
Type = "oneshot";
ExecStart = "${opencode}/bin/opencode run --command inbox-triage --model opencode-go/glm-5";
Environment = "PATH=${config.home.profileDirectory}/bin:/run/current-system/sw/bin";
};
};
systemd.user.timers.opencode-inbox-triage = {
Unit = {
Description = "Run OpenCode inbox triage every 12 hours";
};
Timer = {
OnCalendar = "*-*-* 0/12:00:00";
Persistent = true;
};
Install = {
WantedBy = ["timers.target"];
};
};
};
})
]; ];
den.aspects.tahani.nixos = {...}: {
imports = [
./_hosts/tahani/adguardhome.nix
./_hosts/tahani/cache.nix
./_hosts/tahani/networking.nix
./_hosts/tahani/paperless.nix
];
networking.hostName = "tahani";
sops.secrets = {
tahani-paperless-password = {
sopsFile = ../secrets/tahani-paperless-password;
format = "binary";
path = "/run/secrets/tahani-paperless-password";
};
tahani-paperless-gpt-env = {
sopsFile = ../secrets/tahani-paperless-gpt-env;
format = "binary";
path = "/run/secrets/tahani-paperless-gpt-env";
};
tahani-email-password = {
sopsFile = ../secrets/tahani-email-password;
format = "binary";
owner = "cschmatzler";
path = "/run/secrets/tahani-email-password";
};
};
virtualisation.docker.enable = true;
users.users.cschmatzler.extraGroups = ["docker" "paperless"];
systemd.tmpfiles.rules = [
"d /var/lib/paperless/consume 2775 paperless paperless -"
"d /var/lib/paperless/consume/inbox-triage 2775 paperless paperless -"
];
swapDevices = [
{
device = "/swapfile";
size = 16 * 1024;
}
];
};
den.aspects.tahani.homeManager = {
config,
pkgs,
inputs',
...
}: let
opencode = inputs'.llm-agents.packages.opencode;
in {
programs.git.settings.user.email = "christoph@schmatzler.com";
# Allow inbox-triage to access attachment staging and paperless ingestion dirs
programs.opencode.settings.permission.external_directory = {
"/tmp/himalaya-triage/*" = "allow";
"/var/lib/paperless/consume/inbox-triage/*" = "allow";
};
# Auto-start zellij in nushell on tahani (headless server)
programs.nushell.extraConfig = ''
if $nu.is-interactive and ('SSH_CONNECTION' in ($env | columns)) and ('ZELLIJ' not-in ($env | columns)) {
try {
zellij attach -c main
exit
} catch {
print "zellij auto-start failed; staying in shell"
}
}
'';
# Inbox-triage systemd service
systemd.user.services.opencode-inbox-triage = {
Unit = {
Description = "OpenCode inbox triage";
};
Service = {
Type = "oneshot";
ExecStart = "${opencode}/bin/opencode run --command inbox-triage --model opencode-go/glm-5";
Environment = "PATH=${config.home.profileDirectory}/bin:/run/current-system/sw/bin";
};
};
systemd.user.timers.opencode-inbox-triage = {
Unit = {
Description = "Run OpenCode inbox triage every 12 hours";
};
Timer = {
OnCalendar = "*-*-* 0/12:00:00";
Persistent = true;
};
Install = {
WantedBy = ["timers.target"];
};
};
};
} }

View File

@@ -24,7 +24,6 @@
ov ov
sd sd
tree tree
tuicr
] ]
++ lib.optionals stdenv.isLinux [ ++ lib.optionals stdenv.isLinux [
ghostty.terminfo ghostty.terminfo

View File

@@ -1,8 +1,18 @@
{den, ...}: { {den, ...}: {
den.aspects.cschmatzler.includes = [ den.aspects.cschmatzler.includes = [
den._.bidirectional
den.provides.primary-user den.provides.primary-user
den.aspects.shell den.aspects.shell
den.aspects.ssh-client den.aspects.ssh-client
den.aspects.terminal
den.aspects.email
den.aspects.atuin
den.aspects.dev-tools
den.aspects.neovim
den.aspects.ai-tools
den.aspects.secrets
den.aspects.zellij
den.aspects.zk
]; ];
den.aspects.cschmatzler.homeManager = { den.aspects.cschmatzler.homeManager = {