Compare commits

41 Commits

Author SHA1 Message Date
m3ta-chiron 57c467ef11 chore: fix opus 4.8 thinking 2026-06-15 13:01:07 +02:00
m3ta-chiron fbcf8f65e6 chore: fix opus 4.8 thinking 2026-06-15 12:59:17 +02:00
m3ta-chiron ef78590a6a chore: opus 4.8 2026-06-15 12:46:09 +02:00
m3ta-chiron 39cc27fd72 chore: hyprland monitor config import from dms 2026-06-15 11:00:32 +02:00
m3ta-chiron fe88684d9d chore: move openwork into agent context 2026-06-15 07:39:27 +02:00
m3ta-chiron 4b4221da30 fix: resolve flake lock conflict markers 2026-06-15 07:22:07 +02:00
m3ta-chiron 9be26d79cc feat: openwork 2026-06-15 07:13:29 +02:00
m3ta-chiron 2821f4b6f4 feat: openwork 2026-06-15 07:13:04 +02:00
m3tam3re d1494476b8 flake update 2026-06-13 13:05:16 +02:00
m3tam3re eea29e9877 skills update 2026-06-13 09:41:14 +02:00
m3tam3re 2ab870db8c feat: re-export Hermes skills renderer 2026-06-13 09:25:40 +02:00
m3tam3re 66127c05ea fix(hyprland): set vibe typer keyboard layout to de 2026-06-13 08:17:16 +02:00
m3tam3re 4a9d24fe08 fix: nix eval warnings 2026-06-11 17:33:32 +02:00
m3tam3re 1265dea16a chore: vibetyper keyboard locale 2026-06-11 07:20:07 +02:00
m3tam3re 222c1becf4 chore: vibetyper keyboard locale 2026-06-11 07:14:35 +02:00
m3tam3re 365b6016f1 chore: vibetyper keyboard locale 2026-06-11 07:14:21 +02:00
m3tam3re 9566724015 chore: updates 2026-06-11 07:00:33 +02:00
m3ta-chiron cd80ded6c0 fix(nushell): guard optional agenix secrets source 2026-06-10 08:18:01 +02:00
m3ta-chiron 4fe9f3e306 +chrome 2026-06-08 06:52:56 +02:00
m3ta-chiron d26a40f4ee +chromium 2026-06-08 06:46:40 +02:00
m3ta-chiron 74566375f9 +playwright mcp 2026-06-08 06:38:43 +02:00
m3tam3re add002e05c fix: make inputs self-contained 2026-06-06 13:13:58 +02:00
m3tam3re 5c92a9f1c6 fix(nushell): source agenix secret env 2026-06-06 10:41:44 +02:00
m3tam3re b67922ca60 feat: add agent secrets and packages 2026-06-06 10:31:38 +02:00
m3tam3re 19dea8277e +nier wallpaper 2026-06-02 19:22:00 +02:00
m3tam3re 8bbfc64b84 +nier wallpaper 2026-06-02 19:21:50 +02:00
m3tam3re f5e2b50082 +nier wallpaper 2026-06-02 18:59:39 +02:00
m3ta-chiron 6286921cd1 fix system dark settings 2026-06-01 20:10:12 +02:00
m3ta-chiron a053c9a50e fix: use dark GTK theme variant 2026-06-01 20:01:21 +02:00
m3ta-chiron 7f80fd8a75 feat: add DankMaterialShell home module 2026-06-01 19:50:33 +02:00
m3ta-chiron 4e1b39f443 +dms draft 2026-06-01 19:34:00 +02:00
m3ta-chiron b2ca12f86c fix(agents): stop legacy agent rendering 2026-06-01 08:36:13 +02:00
m3tam3re 6c6164043b +agents-lib 2026-05-31 14:38:02 +02:00
m3tam3re e02a0a29ea flake update 2026-05-31 14:12:26 +02:00
m3tam3re 831698b766 +babysitter 2026-05-29 18:34:46 +02:00
m3tam3re 336a174a17 +worktrunk +babysitter 2026-05-29 17:37:09 +02:00
m3tam3re 70562ceef2 chore: temp fix invalid Hyprland dispatchers 2026-05-18 20:15:25 +02:00
m3tm3re ef5b67c3e9 chore: +hyprland configType 2026-05-18 20:09:28 +02:00
m3tam3re 4af565c76c feat: add hermes ssh config 2026-05-15 09:50:58 +02:00
m3tam3re a87d9510bd Merge branch 'master' of code.m3ta.dev:m3tam3re/m3ta-home 2026-05-11 19:22:18 +02:00
m3tam3re 9acb5c2370 feat: nix-index 2026-05-11 19:21:57 +02:00
26 changed files with 2371 additions and 389 deletions
+3
View File
@@ -177,6 +177,7 @@ base.secrets.enable # pass-wayland, pinentry
desktop.wm.hyprland.enable # Hyprland window manager desktop.wm.hyprland.enable # Hyprland window manager
desktop.wm.rofi.enable # Rofi launcher desktop.wm.rofi.enable # Rofi launcher
desktop.wm.wayland.enable # Wayland tools (grim, slurp, etc.) desktop.wm.wayland.enable # Wayland tools (grim, slurp, etc.)
desktop.wm.dms.enable # DankMaterialShell desktop shell
desktop.apps.obsidian.enable # Obsidian desktop.apps.obsidian.enable # Obsidian
desktop.apps.office.enable # LibreOffice desktop.apps.office.enable # LibreOffice
desktop.apps.crypto.enable # Bisq2, Monero, Trezor desktop.apps.crypto.enable # Bisq2, Monero, Trezor
@@ -245,6 +246,8 @@ source = "${config."m3ta-home".paths.srcRoot}/assets/wallpapers";
| `home-manager` | Home-Manager modules | | `home-manager` | Home-Manager modules |
| `nix-colors` | Dracula theme palette (used everywhere) | | `nix-colors` | Dracula theme palette (used everywhere) |
| `m3ta-nixpkgs` | Custom packages (zellij-ps, rofi-project-opener) and HM modules | | `m3ta-nixpkgs` | Custom packages (zellij-ps, rofi-project-opener) and HM modules |
| `dms` | DankMaterialShell Home-Manager module and package |
| `dms-plugin-registry` | DankMaterialShell plugin sources |
| `agenix` | Secret management | | `agenix` | Secret management |
| `NUR` | Additional packages | | `NUR` | Additional packages |
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 MiB

Generated
+359 -32
View File
@@ -21,14 +21,52 @@
"type": "github" "type": "github"
} }
}, },
"agent-lib": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1781348569,
"narHash": "sha256-1BJtmKSqtD0CD753ZE37RgxvCJK6Iw3iKLDDaS8trY4=",
"ref": "refs/heads/master",
"rev": "75a2ed2533b4d6d8e4a34acd37e83d98d81a5fb0",
"revCount": 30,
"type": "git",
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib"
},
"original": {
"type": "git",
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib"
}
},
"agents": { "agents": {
"inputs": {
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1780133320,
"narHash": "sha256-8AiN9tV9PBb5xblJiPlhumBbKj61qLjzqXXFtkj3vvY=",
"ref": "refs/heads/master",
"rev": "920c00313ae242bd93275c30131b9ab1e52ee2fb",
"revCount": 88,
"type": "git",
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/AGENTS"
},
"original": {
"type": "git",
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/AGENTS"
}
},
"agents_2": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1777399938, "lastModified": 1780133320,
"narHash": "sha256-xXPqUQezDdDtF8MbpZnwD1HkybOYwF92evx8rJ6OXCU=", "narHash": "sha256-8AiN9tV9PBb5xblJiPlhumBbKj61qLjzqXXFtkj3vvY=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "9a91f1ee0cf011a7eaf1f16a9e17610b0457e055", "rev": "920c00313ae242bd93275c30131b9ab1e52ee2fb",
"revCount": 85, "revCount": 88,
"type": "git", "type": "git",
"url": "https://code.m3ta.dev/m3tam3re/AGENTS" "url": "https://code.m3ta.dev/m3tam3re/AGENTS"
}, },
@@ -97,7 +135,70 @@
"type": "github" "type": "github"
} }
}, },
"dms": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"quickshell": "quickshell"
},
"locked": {
"lastModified": 1777431599,
"narHash": "sha256-g6r/Gx8PTDzO3jCNzzySA+Ff1lmLF9nDlMCNyyoQjoE=",
"owner": "AvengeMedia",
"repo": "DankMaterialShell",
"rev": "eb5afcdc40ea5446c27e18552ff4a19f9daf9484",
"type": "github"
},
"original": {
"owner": "AvengeMedia",
"ref": "stable",
"repo": "DankMaterialShell",
"type": "github"
}
},
"dms-plugin-registry": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1781317940,
"narHash": "sha256-uMVOhV6pVPgm2hn1WGEbIcJRWjnsyWKy8PHCUn0++iI=",
"owner": "AvengeMedia",
"repo": "dms-plugin-registry",
"rev": "4ab59f3da3df33bf106045b856db8de875cc42c6",
"type": "github"
},
"original": {
"owner": "AvengeMedia",
"repo": "dms-plugin-registry",
"type": "github"
}
},
"flake-parts": { "flake-parts": {
"inputs": {
"nixpkgs-lib": [
"hermes-agent",
"nixpkgs"
]
},
"locked": {
"lastModified": 1772408722,
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_2": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
"nur", "nur",
@@ -118,6 +219,31 @@
"type": "github" "type": "github"
} }
}, },
"hermes-agent": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": [
"nixpkgs"
],
"npm-lockfile-fix": "npm-lockfile-fix",
"pyproject-build-systems": "pyproject-build-systems",
"pyproject-nix": "pyproject-nix_2",
"uv2nix": "uv2nix_2"
},
"locked": {
"lastModified": 1781346807,
"narHash": "sha256-ytT4ojx0qFW4b/oYeW+MkmaA3b/BZ9pqkPmpAg8j1gg=",
"owner": "NousResearch",
"repo": "hermes-agent",
"rev": "2a5dc0ef3df433a36abed9ee544ea067d807c438",
"type": "github"
},
"original": {
"owner": "NousResearch",
"repo": "hermes-agent",
"type": "github"
}
},
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -146,11 +272,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1778503501, "lastModified": 1781305496,
"narHash": "sha256-08L/X4/do7nET4rzidJ76eV/1r+mB7DchVpdPypsghc=", "narHash": "sha256-g8Vv4Qfc7n+lgov97REu3X6BeJtvYY0hlSUZR1GrGQQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "85ba629c79449badf4338117c27f0ee92b4b9f1a", "rev": "c87a39aa979acc4848016d2220c6238390d84779",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -161,7 +287,7 @@
}, },
"m3ta-nixpkgs": { "m3ta-nixpkgs": {
"inputs": { "inputs": {
"agents": "agents", "agents": "agents_2",
"basecamp": "basecamp", "basecamp": "basecamp",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
@@ -170,11 +296,11 @@
"openspec": "openspec" "openspec": "openspec"
}, },
"locked": { "locked": {
"lastModified": 1778508052, "lastModified": 1781500279,
"narHash": "sha256-kxzZvJv757TGfHReR21aX6N/jkGMWzGSy9GQEclYD4Y=", "narHash": "sha256-810qVHwu6jVhu01FWj9dXuruK84Gw2smAlbu6FPBfeY=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "8113723a48c4afa016881ccd5bc4be3fad2c7d5f", "rev": "050c273c65b36dc03c34a7547d80e88afff5ac48",
"revCount": 294, "revCount": 327,
"type": "git", "type": "git",
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/nixpkgs" "url": "ssh://gitea@code.m3ta.dev/m3tam3re/nixpkgs"
}, },
@@ -235,11 +361,11 @@
}, },
"nixpkgs-master": { "nixpkgs-master": {
"locked": { "locked": {
"lastModified": 1778507606, "lastModified": 1781153468,
"narHash": "sha256-6Yc2dIhijc8G+dbMNocyclxF19dUrjaT+EeXGrXmXlg=", "narHash": "sha256-ZBRmjFtJn/XmHBV230OSabKQqxOoOJunJmBtSt1sLs0=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "39a7b8d815fcc8b689d56fc4a3fa8de4ef93d169", "rev": "cd265fd6b43f2ec1257c2e400f648895d2ad7ccd",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -251,27 +377,43 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1777954456, "lastModified": 1772479524,
"narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=", "narHash": "sha256-u7nCaNiMjqvKpE+uZz9hE7pgXXTmm5yvdtFaqzSzUQI=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1", "rev": "4215e62dc2cd3bc705b0a423b9719ff6be378a43",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixos-unstable", "ref": "nixpkgs-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1777954456, "lastModified": 1781074563,
"narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=", "narHash": "sha256-md8WlXOlfnIeHeOScMTTHFyf2d6iaTwPl2apR5EQ3P4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9ae611a455b90cf061d8f332b977e387bda8e1ca",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1781074563,
"narHash": "sha256-md8WlXOlfnIeHeOScMTTHFyf2d6iaTwPl2apR5EQ3P4=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1", "rev": "9ae611a455b90cf061d8f332b977e387bda8e1ca",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -281,17 +423,38 @@
"type": "github" "type": "github"
} }
}, },
"nur": { "npm-lockfile-fix": {
"inputs": { "inputs": {
"flake-parts": "flake-parts", "nixpkgs": [
"nixpkgs": "nixpkgs_3" "hermes-agent",
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1778506944, "lastModified": 1775903712,
"narHash": "sha256-lU0Bleh0reE+WU7j8Uiqsu6ekPav50L8sXsgOvEQS+0=", "narHash": "sha256-2GV79U6iVH4gKAPWYrxUReB0S41ty/Y3dBLquU8AlaA=",
"owner": "jeslie0",
"repo": "npm-lockfile-fix",
"rev": "c6093acb0c0548e0f9b8b3d82918823721930fe8",
"type": "github"
},
"original": {
"owner": "jeslie0",
"repo": "npm-lockfile-fix",
"type": "github"
}
},
"nur": {
"inputs": {
"flake-parts": "flake-parts_2",
"nixpkgs": "nixpkgs_4"
},
"locked": {
"lastModified": 1781346642,
"narHash": "sha256-o92OOSMAB08HQgG7pW2BZVIO53Pkv4oAjLk4Iol3Iko=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NUR", "repo": "NUR",
"rev": "0166493cfe4e0e9927435c1cfbf5505cfb0d10d1", "rev": "6e4e8d731fbb3831296607d5f88de727cf7bf6de",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -308,11 +471,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1778120451, "lastModified": 1780479100,
"narHash": "sha256-MUSPD16+hoFBfQWYahtNLN2BIFEAlFFo2KNofrc947g=", "narHash": "sha256-VZZ/ukjciXqiebwei2JizyOnxx0T3IeoowFWElKec4o=",
"owner": "Fission-AI", "owner": "Fission-AI",
"repo": "OpenSpec", "repo": "OpenSpec",
"rev": "053d8a59d587f3c027a06ad80503a6b43d4f2a92", "rev": "1b06fddd59d8e592d5b5794a1970b22867e85b1f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -321,13 +484,128 @@
"type": "github" "type": "github"
} }
}, },
"pyproject-build-systems": {
"inputs": {
"nixpkgs": [
"hermes-agent",
"nixpkgs"
],
"pyproject-nix": "pyproject-nix",
"uv2nix": "uv2nix"
},
"locked": {
"lastModified": 1772555609,
"narHash": "sha256-3BA3HnUvJSbHJAlJj6XSy0Jmu7RyP2gyB/0fL7XuEDo=",
"owner": "pyproject-nix",
"repo": "build-system-pkgs",
"rev": "c37f66a953535c394244888598947679af231863",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "build-system-pkgs",
"type": "github"
}
},
"pyproject-nix": {
"inputs": {
"nixpkgs": [
"hermes-agent",
"pyproject-build-systems",
"nixpkgs"
]
},
"locked": {
"lastModified": 1769936401,
"narHash": "sha256-kwCOegKLZJM9v/e/7cqwg1p/YjjTAukKPqmxKnAZRgA=",
"owner": "nix-community",
"repo": "pyproject.nix",
"rev": "b0d513eeeebed6d45b4f2e874f9afba2021f7812",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "pyproject.nix",
"type": "github"
}
},
"pyproject-nix_2": {
"inputs": {
"nixpkgs": [
"hermes-agent",
"nixpkgs"
]
},
"locked": {
"lastModified": 1772865871,
"narHash": "sha256-/ZTSg97aouL0SlPHaokA4r3iuH9QzHVuWPACD2CUCFY=",
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"rev": "e537db02e72d553cea470976b9733581bcf5b3ed",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"type": "github"
}
},
"pyproject-nix_3": {
"inputs": {
"nixpkgs": [
"hermes-agent",
"uv2nix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1771518446,
"narHash": "sha256-nFJSfD89vWTu92KyuJWDoTQJuoDuddkJV3TlOl1cOic=",
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"rev": "eb204c6b3335698dec6c7fc1da0ebc3c6df05937",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"type": "github"
}
},
"quickshell": {
"inputs": {
"nixpkgs": [
"dms",
"nixpkgs"
]
},
"locked": {
"lastModified": 1776854048,
"narHash": "sha256-lLbV66V3RMNp1l8/UelmR4YzoJ5ONtgvEtiUMJATH/o=",
"ref": "refs/heads/master",
"rev": "783c953987dc56ff0601abe6845ed96f1d00495a",
"revCount": 806,
"type": "git",
"url": "https://git.outfoxxed.me/quickshell/quickshell"
},
"original": {
"rev": "783c953987dc56ff0601abe6845ed96f1d00495a",
"type": "git",
"url": "https://git.outfoxxed.me/quickshell/quickshell"
}
},
"root": { "root": {
"inputs": { "inputs": {
"agenix": "agenix", "agenix": "agenix",
"agent-lib": "agent-lib",
"agents": "agents",
"dms": "dms",
"dms-plugin-registry": "dms-plugin-registry",
"hermes-agent": "hermes-agent",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"m3ta-nixpkgs": "m3ta-nixpkgs", "m3ta-nixpkgs": "m3ta-nixpkgs",
"nix-colors": "nix-colors", "nix-colors": "nix-colors",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_3",
"nur": "nur" "nur": "nur"
} }
}, },
@@ -345,6 +623,55 @@
"repo": "default", "repo": "default",
"type": "github" "type": "github"
} }
},
"uv2nix": {
"inputs": {
"nixpkgs": [
"hermes-agent",
"pyproject-build-systems",
"nixpkgs"
],
"pyproject-nix": [
"hermes-agent",
"pyproject-build-systems",
"pyproject-nix"
]
},
"locked": {
"lastModified": 1770770348,
"narHash": "sha256-A2GzkmzdYvdgmMEu5yxW+xhossP+txrYb7RuzRaqhlg=",
"owner": "pyproject-nix",
"repo": "uv2nix",
"rev": "5d1b2cb4fe3158043fbafbbe2e46238abbc954b0",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "uv2nix",
"type": "github"
}
},
"uv2nix_2": {
"inputs": {
"nixpkgs": [
"hermes-agent",
"nixpkgs"
],
"pyproject-nix": "pyproject-nix_3"
},
"locked": {
"lastModified": 1773039484,
"narHash": "sha256-+boo33KYkJDw9KItpeEXXv8+65f7hHv/earxpcyzQ0I=",
"owner": "pyproject-nix",
"repo": "uv2nix",
"rev": "b68be7cfeacbed9a3fa38a2b5adc0cfb81d9bb1f",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "uv2nix",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",
+35 -9
View File
@@ -16,26 +16,52 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
agents = {
# url = "path:/home/m3tam3re/p/AI/AGENTS";
url = "git+ssh://gitea@code.m3ta.dev/m3tam3re/AGENTS";
};
agent-lib = {
# url = "path:/home/m3tam3re/p/NIX/agent-lib";
url = "git+ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib";
inputs.nixpkgs.follows = "nixpkgs";
};
hermes-agent = {
url = "github:NousResearch/hermes-agent";
inputs.nixpkgs.follows = "nixpkgs";
};
dms = {
url = "github:AvengeMedia/DankMaterialShell/stable";
inputs.nixpkgs.follows = "nixpkgs";
};
dms-plugin-registry = {
url = "github:AvengeMedia/dms-plugin-registry";
inputs.nixpkgs.follows = "nixpkgs";
};
agenix.url = "github:ryantm/agenix"; agenix.url = "github:ryantm/agenix";
nur.url = "github:nix-community/NUR"; nur.url = "github:nix-community/NUR";
}; };
outputs = { outputs = {self, ...} @ inputs: {
self,
nixpkgs,
...
} @ inputs: let
lib = nixpkgs.lib;
in {
# Home-Manager modules — import in nixos-config via: # Home-Manager modules — import in nixos-config via:
# imports = [ inputs.m3ta-home.homeManagerModules.default ]; # imports = [ inputs.m3ta-home.homeManagerModules.default ];
homeManagerModules = import ./modules { inherit inputs; selfPath = self.outPath; }; homeManagerModules = import ./modules {
inherit inputs;
selfPath = self.outPath;
};
# Library functions — use in nixos-config via: # Library functions — use in nixos-config via:
# m3ta-lib = inputs.m3ta-home.lib; # m3ta-lib = inputs.m3ta-home.lib;
# imports = [ (m3ta-lib.mkHome { ... }) ]; # imports = [ (m3ta-lib.mkHome { ... }) ];
lib = import ./lib {inherit inputs; selfPath = self.outPath;}; lib = import ./lib {
inherit inputs;
selfPath = self.outPath;
};
# Overlays (re-exports from m3ta-nixpkgs) # Overlays (re-exports from m3ta-nixpkgs)
overlays = inputs.m3ta-nixpkgs.overlays; overlays = inputs.m3ta-nixpkgs.overlays;
+13 -2
View File
@@ -1,5 +1,16 @@
# lib/default.nix — Entry point for m3ta-home library functions. # lib/default.nix — Entry point for m3ta-home library functions.
# #
# Called by flake.nix: import ./lib { inherit inputs; selfPath = self.outPath; } # Called by flake.nix: import ./lib { inherit inputs; selfPath = self.outPath; }
# Re-exports mkHome and future library functions. # Re-exports mkHome and focused helpers for consumers that should not depend on
{inputs, selfPath}: import ./mkHome.nix {inherit inputs selfPath;} # m3ta-home's implementation inputs directly.
{
inputs,
selfPath,
}: let
mkHomeLib = import ./mkHome.nix {inherit inputs selfPath;};
in
mkHomeLib
// {
mkHermesSkillsDir = {system, ...} @ args:
inputs.agent-lib.lib.${system}.mkHermesSkillsDir (builtins.removeAttrs args ["system"]);
}
+13 -1
View File
@@ -19,7 +19,10 @@
# m3ta.home.sets.coding.languages.python.extra = true; # m3ta.home.sets.coding.languages.python.extra = true;
# wayland.windowManager.hyprland.settings.monitor = [ ... ]; # wayland.windowManager.hyprland.settings.monitor = [ ... ];
# #
{inputs, selfPath}: let {
inputs,
selfPath,
}: let
lib = inputs.nixpkgs.lib; lib = inputs.nixpkgs.lib;
in { in {
mkHome = { mkHome = {
@@ -80,6 +83,13 @@ in {
in { in {
imports = imports =
[ [
# External Home Manager modules required by selectable profiles
inputs.agent-lib.homeManagerModules.default
inputs.dms.homeModules.default
inputs.dms-plugin-registry.homeModules.default
inputs.nix-colors.homeManagerModules.default
inputs.m3ta-nixpkgs.homeManagerModules.default
# Paths module — must be first, provides m3taHome.paths.srcRoot # Paths module — must be first, provides m3taHome.paths.srcRoot
../modules/paths.nix ../modules/paths.nix
baseModule baseModule
@@ -89,6 +99,8 @@ in {
++ contextImport ++ contextImport
++ setImports; ++ setImports;
_module.args.m3taHomeInputs = inputs;
# Set the flake source root for asset path resolution # Set the flake source root for asset path resolution
"m3ta-home".paths.srcRoot = selfPath; "m3ta-home".paths.srcRoot = selfPath;
+9 -3
View File
@@ -8,11 +8,15 @@
{ {
inputs, inputs,
selfPath, selfPath,
}: let }: {
lib = inputs.nixpkgs.lib;
in {
default = { default = {
imports = [ imports = [
# External modules
inputs.agent-lib.homeManagerModules.default
inputs.dms.homeModules.default
inputs.dms-plugin-registry.homeModules.default
inputs.nix-colors.homeManagerModules.default
inputs.m3ta-nixpkgs.homeManagerModules.default
# Paths — must be first, provides "m3ta-home".paths.srcRoot # Paths — must be first, provides "m3ta-home".paths.srcRoot
./paths.nix ./paths.nix
@@ -30,6 +34,8 @@ in {
./../users/m3tam3re/identities/work.nix ./../users/m3tam3re/identities/work.nix
]; ];
_module.args.m3taHomeInputs = inputs;
# Set the source root for asset path resolution # Set the source root for asset path resolution
"m3ta-home".paths.srcRoot = selfPath; "m3ta-home".paths.srcRoot = selfPath;
}; };
+1
View File
@@ -9,6 +9,7 @@
./hermes-remote.nix ./hermes-remote.nix
./lf.nix ./lf.nix
./nitch.nix ./nitch.nix
./nix-index.nix
./packages.nix ./packages.nix
./television.nix ./television.nix
./zellij.nix ./zellij.nix
+24
View File
@@ -0,0 +1,24 @@
# nix-index — Files database for nixpkgs
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.base.cliTools.lf;
in {
# Enabled by default — base modules are always-on.
options.base.nix-index.lf.enable = (mkEnableOption "enable nix-index files database") // {default = true;};
config = mkIf cfg.enable {
home.packages = [pkgs.comma];
programs.nix-index = {
enable = true;
enableBashIntegration = true;
enableFishIntegration = true;
enableNushellIntegration = true;
};
};
}
+1 -2
View File
@@ -24,11 +24,10 @@ in {
# Nix # Nix
alejandra alejandra
comma
nixd nixd
nix-diff nix-diff
nix-index
nix-update nix-update
nix-tree
# Dev tools # Dev tools
bc bc
+5 -8
View File
@@ -1,7 +1,6 @@
# profiles/base/default.nix — Always loaded on every host. # profiles/base/default.nix — Always loaded on every host.
# #
# Provides: # Provides:
# - nix-colors and m3ta-nixpkgs HM module imports
# - Shell (nushell, fish, starship) with enable options # - Shell (nushell, fish, starship) with enable options
# - CLI tools (bat, carapace, direnv, eza, fzf, lf, nitch, television, zellij, zoxide) # - CLI tools (bat, carapace, direnv, eza, fzf, lf, nitch, television, zellij, zoxide)
# - Secrets management (pass-wayland) # - Secrets management (pass-wayland)
@@ -9,21 +8,19 @@
# - Base packages # - Base packages
# #
# NOTE: Overlays are NOT set here. The consuming flake (nixos-config) handles # NOTE: Overlays are NOT set here. The consuming flake (nixos-config) handles
# overlays at the NixOS level via nixpkgs.overlays. This module only imports # overlays at the NixOS level via nixpkgs.overlays. External HM modules are
# HM modules and sets user-level preferences. # imported by mkHome/modules/default.nix. This module only imports base profile
# submodules and sets user-level preferences.
# #
# When used standalone (not through NixOS), overlays should be set by the # When used standalone (not through NixOS), overlays should be set by the
# standalone HM configuration or by the consuming flake. # standalone HM configuration or by the consuming flake.
{ {
inputs,
lib, lib,
m3taHomeInputs,
pkgs, pkgs,
... ...
}: { }: {
imports = [ imports = [
inputs.nix-colors.homeManagerModules.default
inputs.m3ta-nixpkgs.homeManagerModules.default
./shell ./shell
./cli-tools ./cli-tools
./secrets ./secrets
@@ -44,7 +41,7 @@
}; };
# ── Color scheme ── # ── Color scheme ──
colorScheme = inputs.nix-colors.colorSchemes.dracula; colorScheme = m3taHomeInputs.nix-colors.colorSchemes.dracula;
# ── Base packages ── # ── Base packages ──
home.packages = with pkgs; [ home.packages = with pkgs; [
+10
View File
@@ -41,6 +41,16 @@ in {
| transpose -r -d | transpose -r -d
| load-env | load-env
} }
# Load m3tam3re secrets from agenix. The secret file is Nushell code
# containing a `load-env { ... }` block, not KEY=VALUE lines.
# `source` resolves literal paths at parse time, so use `null` when absent.
const m3tam3re_secrets_file = if ("/run/agenix/m3tam3re-secrets" | path exists) {
"/run/agenix/m3tam3re-secrets"
} else {
null
}
source $m3tam3re_secrets_file
''; '';
configFile.text = '' configFile.text = ''
+61 -56
View File
@@ -1,7 +1,7 @@
# Desktop environment aggregator — only loaded when context=desktop. # Desktop environment aggregator — only loaded when context=desktop.
# Includes window manager, applications, theming, and desktop session config. # Includes window manager, applications, theming, and desktop session config.
{ {
config, m3taHomeInputs,
pkgs, pkgs,
... ...
}: { }: {
@@ -38,7 +38,8 @@
}; };
}; };
home.sessionVariables = { home = {
sessionVariables = {
WEBKIT_DISABLE_COMPOSITING_MODE = "1"; WEBKIT_DISABLE_COMPOSITING_MODE = "1";
NIXOS_OZONE_WL = "1"; NIXOS_OZONE_WL = "1";
TERMINAL = "ghostty"; TERMINAL = "ghostty";
@@ -48,13 +49,46 @@
XDG_SESSION_DESKTOP = "Hyprland"; XDG_SESSION_DESKTOP = "Hyprland";
}; };
home.sessionPath = [ sessionPath = [
"\${XDG_BIN_HOME}" "\${XDG_BIN_HOME}"
"\${HOME}/.cargo/bin" "\${HOME}/.cargo/bin"
"$HOME/.npm-global/bin" "$HOME/.npm-global/bin"
"$HOME/.cache/.bun/bin" "$HOME/.cache/.bun/bin"
]; ];
pointerCursor = {
gtk.enable = true;
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
size = 20;
};
packages = with pkgs; [
appimage-run
bemoji
google-chrome
dconf
(element-desktop.override {
commandLineArgs = "--password-store=gnome-libsecret";
})
m3taHomeInputs.hermes-agent.packages.${pkgs.stdenv.hostPlatform.system}.desktop
launch-webapp
file-roller
gsettings-desktop-schemas
seahorse
sushi
ksnip
nwg-look
qt6Packages.qt6ct
rose-pine-hyprcursor
remmina
slack
vivaldi
vivaldi-ffmpeg-codecs
vibetyper
];
};
fonts.fontconfig.enable = true; fonts.fontconfig.enable = true;
programs.ghostty = { programs.ghostty = {
@@ -64,59 +98,30 @@
settings = { settings = {
font-family = "Fira Code"; font-family = "Fira Code";
copy-on-select = "clipboard"; copy-on-select = "clipboard";
foreground = "#${config.colorScheme.palette.base05}"; theme = "dankcolors";
background = "#${config.colorScheme.palette.base00}"; # foreground = "#${config.colorScheme.palette.base05}";
selection-foreground = "#${config.colorScheme.palette.base07}"; # background = "#${config.colorScheme.palette.base00}";
selection-background = "#${config.colorScheme.palette.base02}"; # selection-foreground = "#${config.colorScheme.palette.base07}";
cursor-color = "#${config.colorScheme.palette.base05}"; # selection-background = "#${config.colorScheme.palette.base02}";
palette = [ # cursor-color = "#${config.colorScheme.palette.base05}";
"0=#${config.colorScheme.palette.base01}" # palette = [
"1=#${config.colorScheme.palette.base08}" # "0=#${config.colorScheme.palette.base01}"
"2=#${config.colorScheme.palette.base0B}" # "1=#${config.colorScheme.palette.base08}"
"3=#${config.colorScheme.palette.base0A}" # "2=#${config.colorScheme.palette.base0B}"
"4=#${config.colorScheme.palette.base0D}" # "3=#${config.colorScheme.palette.base0A}"
"5=#${config.colorScheme.palette.base0E}" # "4=#${config.colorScheme.palette.base0D}"
"6=#${config.colorScheme.palette.base0C}" # "5=#${config.colorScheme.palette.base0E}"
"7=#${config.colorScheme.palette.base05}" # "6=#${config.colorScheme.palette.base0C}"
"8=#${config.colorScheme.palette.base03}" # "7=#${config.colorScheme.palette.base05}"
"9=#${config.colorScheme.palette.base08}" # "8=#${config.colorScheme.palette.base03}"
"10=#${config.colorScheme.palette.base0B}" # "9=#${config.colorScheme.palette.base08}"
"11=#${config.colorScheme.palette.base0A}" # "10=#${config.colorScheme.palette.base0B}"
"12=#${config.colorScheme.palette.base0D}" # "11=#${config.colorScheme.palette.base0A}"
"13=#${config.colorScheme.palette.base0E}" # "12=#${config.colorScheme.palette.base0D}"
"14=#${config.colorScheme.palette.base0C}" # "13=#${config.colorScheme.palette.base0E}"
"15=#${config.colorScheme.palette.base07}" # "14=#${config.colorScheme.palette.base0C}"
]; # "15=#${config.colorScheme.palette.base07}"
# ];
}; };
}; };
home.pointerCursor = {
gtk.enable = true;
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
size = 20;
};
home.packages = with pkgs; [
appimage-run
bemoji
eigent
(element-desktop.override {
commandLineArgs = "--password-store=gnome-libsecret";
})
launch-webapp
file-roller
hyprpanel
hyprpaper-random
seahorse
sushi
ksnip
nwg-look
rose-pine-hyprcursor
remmina
slack
vivaldi
vivaldi-ffmpeg-codecs
vibetyper
];
} }
+6 -5
View File
@@ -1,4 +1,4 @@
# GTK and Qt theming — Dracula theme with matching icons and cursor. # GTK and Qt theming — system-wide dark Adwaita/libadwaita-compatible theme.
{ {
pkgs, pkgs,
config, config,
@@ -11,13 +11,14 @@
gtk = { gtk = {
enable = true; enable = true;
colorScheme = "dark";
theme = { theme = {
name = "Dracula"; name = "adw-gtk3-dark";
package = pkgs.dracula-theme; package = pkgs.adw-gtk3;
}; };
iconTheme = { iconTheme = {
name = "Dracula"; name = "Papirus-Dark";
package = pkgs.dracula-icon-theme; package = pkgs.papirus-icon-theme;
}; };
gtk4.theme = config.gtk.theme; gtk4.theme = config.gtk.theme;
}; };
+1
View File
@@ -4,5 +4,6 @@
./hyprland.nix ./hyprland.nix
./wayland.nix ./wayland.nix
./rofi.nix ./rofi.nix
./dms.nix
]; ];
} }
+29
View File
@@ -0,0 +1,29 @@
# DankMaterialShell user-session configuration.
# External DMS Home-Manager modules are imported by mkHome/modules/default.nix
# so this file only owns the m3ta-home feature flag and desired defaults.
{
config,
lib,
...
}:
with lib; let
cfg = config.desktop.wm.dms;
in {
options.desktop.wm.dms.enable = mkEnableOption "DankMaterialShell desktop shell";
config = mkIf cfg.enable {
programs.dank-material-shell = {
enable = true;
systemd.enable = true;
enableDynamicTheming = true;
enableClipboardPaste = true;
plugins = {
dankBatteryAlerts.enable = true;
emojiLauncher.enable = true;
dankPomodoroTimer.enable = true;
dankVault.enable = true;
};
};
};
}
+108 -109
View File
@@ -11,16 +11,17 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
configType = "hyprlang";
settings = { settings = {
xwayland = { xwayland = {
force_zero_scaling = true; force_zero_scaling = true;
}; };
source = [
"~/.config/hypr/dms/colors.conf"
"~/.config/hypr/dms/layout.conf"
"~/.config/hypr/dms/outputs.conf"
];
exec-once = [ exec-once = [
"hyprpanel"
"while ! hyprpaper-random; do sleep 0.5; done"
"wl-paste --type text --watch cliphist store"
"wl-paste --type image --watch cliphist store"
"vibetyper" "vibetyper"
]; ];
@@ -28,12 +29,14 @@ in {
"XCURSOR_SIZE,32" "XCURSOR_SIZE,32"
"HYPRCURSOR_THEME,Bibata-Modern-Ice" "HYPRCURSOR_THEME,Bibata-Modern-Ice"
"WLR_NO_HARDWARE_CURSORS,1" "WLR_NO_HARDWARE_CURSORS,1"
"GTK_THEME,Dracula"
"XDG_CURRENT_DESKTOP,Hyprland" "XDG_CURRENT_DESKTOP,Hyprland"
"XDG_SESSION_TYPE,wayland" "XDG_SESSION_TYPE,wayland"
"XDG_SESSION_DESKTOP,Hyprland" "XDG_SESSION_DESKTOP,Hyprland"
"XKB_DEFAULT_LAYOUT,de" "XKB_DEFAULT_LAYOUT,de"
"NIXOS_OZONE_WL,1" "NIXOS_OZONE_WL,1"
"QT_QPA_PLATFORM,wayland;xcb"
"QT_QPA_PLATFORMTHEME,gtk3"
"QT_QPA_PLATFORMTHEME_QT6,gtk3"
]; ];
input = { input = {
@@ -49,8 +52,6 @@ in {
gaps_in = 5; gaps_in = 5;
gaps_out = 5; gaps_out = 5;
border_size = 1; border_size = 1;
"col.active_border" = "rgba(9742b5ee) rgba(9742b5ee) 45deg";
"col.inactive_border" = "rgba(${config.colorScheme.palette.base03}aa)";
layout = "dwindle"; layout = "dwindle";
}; };
@@ -59,7 +60,7 @@ in {
enabled = true; enabled = true;
range = 60; range = 60;
render_power = 3; render_power = 3;
color = "rgba(${config.colorScheme.palette.base00}66)"; # color = "rgba(${config.colorScheme.palette.base00}66)";
offset = "1 2"; offset = "1 2";
scale = 0.97; scale = 0.97;
}; };
@@ -87,7 +88,7 @@ in {
}; };
dwindle = { dwindle = {
pseudotile = true; # pseudotile = true; # TODO
preserve_split = true; preserve_split = true;
}; };
@@ -96,14 +97,14 @@ in {
}; };
device = [ device = [
{
name = "epic-mouse-v1";
sensitivity = -0.5;
}
{ {
name = "zsa-technology-labs-moonlander-mark-i"; name = "zsa-technology-labs-moonlander-mark-i";
kb_layout = "us"; kb_layout = "us";
} }
{
name = "vibe-typer-virtual-keyboard";
kb_layout = "de";
}
{ {
name = "keychron-keychron-k7"; name = "keychron-keychron-k7";
kb_layout = "us"; kb_layout = "us";
@@ -165,21 +166,21 @@ in {
"$mainMod, r, exec, hyprctl dispatch focuswindow \"initialtitle:.*alert-box.*\" && hyprctl dispatch moveactive exact 4300 102 && hyprctl dispatch focuswindow \"initialtitle:.*chat-box.*\" && hyprctl dispatch moveactive exact 4300 512" "$mainMod, r, exec, hyprctl dispatch focuswindow \"initialtitle:.*alert-box.*\" && hyprctl dispatch moveactive exact 4300 102 && hyprctl dispatch focuswindow \"initialtitle:.*chat-box.*\" && hyprctl dispatch moveactive exact 4300 512"
"$mainMod, b, exec, uwsm app -- thunar" "$mainMod, b, exec, uwsm app -- thunar"
"$mainMod SHIFT, B, exec, uwsm app -- vivaldi" "$mainMod SHIFT, B, exec, uwsm app -- vivaldi"
"$mainMod, Escape, exec, uwsm app -- wlogout -p layer-shell" "$mainMod, Escape, exec, uwsm app -- dms ipc call powermenu toggle"
"$mainMod, Space, togglefloating" # "$mainMod, Space, togglefloating"
"$mainMod, q, killactive" "$mainMod, q, killactive"
"$mainMod, M, exit" "$mainMod, M, exit"
"$mainMod, F, fullscreen" "$mainMod, F, fullscreen"
"$mainMod SHIFT, V, togglefloating" "$mainMod SHIFT, V, togglefloating"
"$mainMod, D, exec, uwsm app -- rofi -show drun -run-command \"uwsm app -- {cmd}\"" "$mainMod, D, exec, uwsm app -- dms ipc call spotlight toggle"
"$mainMod, V, exec, uwsm app -- cliphist list | rofi -dmenu | cliphist decode | wl-copy" "$mainMod, V, exec, uwsm app -- dms ipc call clipboard toggle"
"$mainMod, C, exec, bash -c 'FILE=/tmp/screenshot_$(date +%s).png; grim -g \"$(slurp)\" \"$FILE\" && ksnip \"$FILE\"'" "$mainMod, C, exec, bash -c 'FILE=/tmp/screenshot_$(date +%s).png; grim -g \"$(slurp)\" \"$FILE\" && ksnip \"$FILE\"'"
"$mainMod SHIFT, S, exec, uwsm app -- rofi -show emoji" "$mainMod SHIFT, S, exec, uwsm app -- rofi -show emoji"
"$mainMod, P, exec, uwsm app -- rofi-pass" "$mainMod, P, exec, uwsm app -- rofi-pass"
"$mainMod SHIFT, P, pseudo" "$mainMod SHIFT, P, pseudo"
"$mainMod, R, exec, stt-ptt start" "$mainMod, R, exec, stt-ptt start"
"$mainMod, S, exec, stt-ptt start" "$mainMod, S, exec, stt-ptt start"
"$mainMod, J, togglesplit" # "$mainMod, J, togglesplit" # TODO
"$mainMod, h, movefocus, l" "$mainMod, h, movefocus, l"
"$mainMod, l, movefocus, r" "$mainMod, l, movefocus, r"
"$mainMod, k, movefocus, u" "$mainMod, k, movefocus, u"
@@ -209,8 +210,6 @@ in {
]; ];
bindr = [ bindr = [
"$mainMod, R, exec, stt-ptt stop"
"$mainMod, S, exec, stt-ptt format-stop"
]; ];
bindm = [ bindm = [
@@ -220,99 +219,99 @@ in {
}; };
}; };
services.hypridle = { # services.hypridle = {
enable = true; # enable = true;
settings = { # settings = {
general = { # general = {
before_sleep_cmd = "hyprlock"; # before_sleep_cmd = "hyprlock";
after_sleep_cmd = "hyprctl dispatch dpms on"; # after_sleep_cmd = "hyprctl dispatch dpms on";
inhibit_sleep = 3; # inhibit_sleep = 3;
}; # };
listener = [ # listener = [
{ # {
timeout = 300; # timeout = 300;
on-timeout = "hyprlock"; # on-timeout = "hyprlock";
} # }
{ # {
timeout = 420; # timeout = 420;
on-timeout = "hyprctl dispatch dpms off"; # on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on"; # on-resume = "hyprctl dispatch dpms on";
} # }
]; # ];
}; # };
}; # };
services.hyprpaper.enable = true; # services.hyprpaper.enable = true;
programs.hyprlock = { # programs.hyprlock = {
enable = true; # enable = true;
settings = { # settings = {
"$font" = "JetBrainsMono Nerd Font"; # "$font" = "JetBrainsMono Nerd Font";
"$base" = "rgb(${config.colorScheme.palette.base00})"; # "$base" = "rgb(${config.colorScheme.palette.base00})";
"$text" = "rgb(${config.colorScheme.palette.base05})"; # "$text" = "rgb(${config.colorScheme.palette.base05})";
"$textAlpha" = "${config.colorScheme.palette.base05}"; # "$textAlpha" = "${config.colorScheme.palette.base05}";
"$accentAlpha" = "${config.colorScheme.palette.base0D}"; # "$accentAlpha" = "${config.colorScheme.palette.base0D}";
"$red" = "rgb(${config.colorScheme.palette.base08})"; # "$red" = "rgb(${config.colorScheme.palette.base08})";
"$yellow" = "rgb(${config.colorScheme.palette.base0A})"; # "$yellow" = "rgb(${config.colorScheme.palette.base0A})";
general = { # general = {
hide_cursor = true; # hide_cursor = true;
}; # };
background = { # background = {
monitor = ""; # monitor = "";
path = "${config.home.homeDirectory}/.config/hypr/wallpapers/wallhaven-lmmo8r.jpg"; # path = "${config.home.homeDirectory}/.config/hypr/wallpapers/wallhaven-lmmo8r.jpg";
blur_passes = 0; # blur_passes = 0;
color = "rgb(${config.colorScheme.palette.base00})"; # color = "rgb(${config.colorScheme.palette.base00})";
}; # };
label = [ # label = [
{ # {
monitor = ""; # monitor = "";
text = "$TIME"; # text = "$TIME";
color = "$text"; # color = "$text";
font_size = 90; # font_size = 90;
font_family = "$font"; # font_family = "$font";
position = "30, 0"; # position = "30, 0";
halign = "left"; # halign = "left";
valign = "top"; # valign = "top";
} # }
{ # {
monitor = ""; # monitor = "";
text = ''cmd[update:43200000] echo "$(date +"%A, %d %B %Y")"''; # text = ''cmd[update:43200000] echo "$(date +"%A, %d %B %Y")"'';
color = "$text"; # color = "$text";
font_size = 25; # font_size = 25;
font_family = "$font"; # font_family = "$font";
position = "30, -150"; # position = "30, -150";
halign = "left"; # halign = "left";
valign = "top"; # valign = "top";
} # }
]; # ];
input-field = [ # input-field = [
{ # {
monitor = ""; # monitor = "";
size = "300, 60"; # size = "300, 60";
outline_thickness = 4; # outline_thickness = 4;
dots_size = 0.2; # dots_size = 0.2;
dots_spacing = 0.2; # dots_spacing = 0.2;
dots_center = true; # dots_center = true;
outer_color = "rgb(${config.colorScheme.palette.base0D})"; # outer_color = "rgb(${config.colorScheme.palette.base0D})";
inner_color = "rgb(${config.colorScheme.palette.base00})"; # inner_color = "rgb(${config.colorScheme.palette.base00})";
font_color = "rgb(${config.colorScheme.palette.base05})"; # font_color = "rgb(${config.colorScheme.palette.base05})";
fade_on_empty = false; # fade_on_empty = false;
placeholder_text = ''<span foreground="##${config.colorScheme.palette.base05}">󰌾 Logged in as <span foreground="##${config.colorScheme.palette.base0D}">$USER</span></span>''; # placeholder_text = ''<span foreground="##${config.colorScheme.palette.base05}">󰌾 Logged in as <span foreground="##${config.colorScheme.palette.base0D}">$USER</span></span>'';
hide_input = false; # hide_input = false;
check_color = "rgb(${config.colorScheme.palette.base0D})"; # check_color = "rgb(${config.colorScheme.palette.base0D})";
fail_color = "rgb(${config.colorScheme.palette.base08})"; # fail_color = "rgb(${config.colorScheme.palette.base08})";
fail_text = ''<i>$FAIL <b>($ATTEMPTS)</b></i>''; # fail_text = ''<i>$FAIL <b>($ATTEMPTS)</b></i>'';
capslock_color = "rgb(${config.colorScheme.palette.base0A})"; # capslock_color = "rgb(${config.colorScheme.palette.base0A})";
position = "0, -35"; # position = "0, -35";
halign = "center"; # halign = "center";
valign = "center"; # valign = "center";
} # }
]; # ];
}; # };
}; # };
}; };
} }
@@ -0,0 +1,36 @@
{config, ...}: {
programs.agent-lib = {
enable = true;
lockFile = config."m3ta-home".paths.srcRoot + "/agent-sources.lock.json";
targets.pi.enable = true;
targets.opencode.enable = true;
profiles.default = {
sources = {
m3ta-agents = {
agents = {
all = true;
};
skills = {
all = true;
exclude = ["brainstorming" "pdf" "systematic-debugging" "xlsx"];
};
};
anthropic.skills = {
all = true;
exclude = ["skill-creator"];
};
basecamp.skills.all = true;
kestra.skills.all = true;
mattpocock.skills = {
all = true;
};
superpowers.skills = {
all = true;
};
vercel.skills.all = true;
};
};
};
}
+12 -18
View File
@@ -1,10 +1,8 @@
# AI agent system — OpenCode, Pi, and MCP server configuration. # AI agent system — OpenCode, Pi, and MCP server configuration.
# Relies on coding.agents options provided by home/common/default.nix # Relies on coding.agents options provided by home/common/default.nix
# (inputs.m3ta-nixpkgs.homeManagerModules.default). # (m3taHomeInputs.m3ta-nixpkgs.homeManagerModules.default).
{ {
config, m3taHomeInputs,
inputs,
lib,
pkgs, pkgs,
videoDrivers ? [], videoDrivers ? [],
... ...
@@ -19,24 +17,14 @@
}; };
imports = [ imports = [
# OpenCode and Pi agent configurations # OpenCode, Pi, and Babysitter agent configurations
./agents-lib.nix
./babysitter.nix
./opencode.nix ./opencode.nix
./pi.nix ./pi.nix
]; ];
coding.agents.skills = { coding.agents.babysitter.enable = true;
agentsInput = inputs.agents;
externalSkills = [
{
src = inputs.skills-anthropic;
selectSkills = ["pdf" "docx" "frontend-design"];
}
{src = inputs.skills-superpowers;}
{src = inputs.skills-vercel;}
{src = inputs.skills-basecamp;}
{src = inputs.skills-kestra;}
];
};
programs.mcp = { programs.mcp = {
enable = true; enable = true;
@@ -66,12 +54,17 @@
''exec bunx mcp-remote@latest https://mcp.honcho.dev --header "Authorization:Bearer $(cat /run/agenix/honcho-key)" --header "X-Honcho-User-Name:m3tam3re"'' ''exec bunx mcp-remote@latest https://mcp.honcho.dev --header "Authorization:Bearer $(cat /run/agenix/honcho-key)" --header "X-Honcho-User-Name:m3tam3re"''
]; ];
}; };
Playwright = {
command = "bash";
args = ["-c" "exec bunx @playwright/mcp@latest"];
};
}; };
}; };
home.packages = with pkgs; [ home.packages = with pkgs; [
agenix-cli agenix-cli
agent-browser agent-browser
m3taHomeInputs.agent-lib.packages.${pkgs.stdenv.hostPlatform.system}.agent-lib-cli
beads beads
pi-coding-agent pi-coding-agent
(qmd.override { (qmd.override {
@@ -81,5 +74,6 @@
# opencode-desktop # opencode-desktop
openshell openshell
openspec openspec
openwork
]; ];
} }
+142
View File
@@ -0,0 +1,142 @@
# Babysitter user profile for Pi/agent workflows.
{
config,
lib,
...
}: let
cfg = config.coding.agents.babysitter;
defaultTimestamp = "2026-05-29T00:00:00.000Z";
defaultUserProfile = {
name = config.home.username;
specialties = [
{
domain = "declarative-system-configuration";
subdomains = ["nix" "home-manager" "agents"];
}
];
expertiseLevels = {};
goals = [
{
id = "goal-agents-declarative-profile";
description = "Keep Babysitter user preferences declarative and reproducible across systems.";
category = "agents";
priority = "medium";
status = "active";
}
];
preferences = {
verbosity = "concise";
autonomyLevel = "semi-autonomous";
riskTolerance = "conservative";
};
toolPreferences = {
packageManagers = ["nix"];
languages = ["nix"];
operatingSystem = "nixos";
};
breakpointTolerance = {
global = "moderate";
skipBreakpointsForKnownPatterns = false;
alwaysBreakOn = ["destructive-operations" "secrets" "external-publication"];
};
communicationStyle = {
tone = "technical";
language = "en";
useEmojis = false;
explanationDepth = "brief";
preferredResponseFormat = "markdown";
};
experience = {};
installedPlugins = ["babysitter-pi"];
installedSkills = ["babysit" "call" "plan" "resume" "doctor" "yolo"];
installedAgents = [];
createdAt = defaultTimestamp;
updatedAt = defaultTimestamp;
version = 1;
};
effectiveProfile = lib.recursiveUpdate cfg.profile cfg.profileOverrides;
profileJsonTarget = "${cfg.profileDirectory}/user-profile.json";
profileMarkdownTarget = "${cfg.profileDirectory}/user-profile.md";
profilePreferences = effectiveProfile.preferences or {};
profileBreakpointTolerance = effectiveProfile.breakpointTolerance or {};
listMarkdown = values:
lib.concatMapStringsSep "\n" (value: "- ${toString value}") values;
specialtyDomains = map (specialty: specialty.domain or "unspecified") (effectiveProfile.specialties or []);
profileMarkdown = ''
# Babysitter User Profile
This file is generated by Home Manager from `coding.agents.babysitter`.
- Name: ${effectiveProfile.name or "unspecified"}
- Breakpoint tolerance: ${profileBreakpointTolerance.global or "unspecified"}
- Autonomy level: ${profilePreferences.autonomyLevel or "unspecified"}
- Risk tolerance: ${profilePreferences.riskTolerance or "unspecified"}
## Specialties
${listMarkdown specialtyDomains}
## Installed Babysitter Pi Skills
${listMarkdown (effectiveProfile.installedSkills or [])}
'';
in {
options.coding.agents.babysitter = {
enable = lib.mkEnableOption "Babysitter user profile for Pi/agent workflows";
profileDirectory = lib.mkOption {
type = lib.types.str;
default = ".a5c";
description = ''
Home-relative directory where Babysitter reads the user profile.
Babysitter Pi documents the user profile at ~/.a5c/user-profile.json.
'';
};
profile = lib.mkOption {
type = lib.types.attrsOf lib.types.anything;
default = defaultUserProfile;
description = "Complete non-secret Babysitter user profile JSON.";
};
profileOverrides = lib.mkOption {
type = lib.types.attrsOf lib.types.anything;
default = {};
description = ''
Recursive overrides merged into the default Babysitter user profile.
Keep this non-secret; the result is written into the Nix store.
'';
};
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = cfg.profileDirectory != "" && !lib.hasPrefix "/" cfg.profileDirectory;
message = "coding.agents.babysitter.profileDirectory must be a non-empty home-relative path.";
}
{
assertion = effectiveProfile ? name && builtins.isString effectiveProfile.name;
message = "coding.agents.babysitter profile must include a string name.";
}
{
assertion = effectiveProfile ? specialties && builtins.isList effectiveProfile.specialties;
message = "coding.agents.babysitter profile must include a specialties list.";
}
{
assertion = effectiveProfile ? breakpointTolerance && effectiveProfile.breakpointTolerance ? global;
message = "coding.agents.babysitter profile must include breakpointTolerance.global.";
}
];
home.file = {
"${profileJsonTarget}".text = builtins.toJSON effectiveProfile + "\n";
"${profileMarkdownTarget}".text = profileMarkdown;
};
};
}
+4 -14
View File
@@ -1,13 +1,4 @@
{ {lib, ...}: {
inputs,
lib,
...
}: {
coding.agents.opencode = {
enable = true;
agentsInput = inputs.agents;
};
coding.opencode = { coding.opencode = {
enable = true; enable = true;
@@ -236,12 +227,11 @@
output = 64000; output = 64000;
}; };
}; };
"claude-opus-4-6" = { "claude-opus-4-8" = {
name = "Claude Opus 4.6"; name = "Claude Opus 4.8";
options = { options = {
thinking = { thinking = {
type = "enabled"; type = "adaptive";
budget_tokens = 16000;
}; };
}; };
limit = { limit = {
+5 -33
View File
@@ -1,39 +1,11 @@
{inputs, ...}: { {...}: {
coding.agents.pi = { coding.agents.pi = {
enable = true; enable = true;
agentsInput = inputs.agents;
modelOverrides = {
chiron = "minimax/MiniMax-M2.7";
chiron-forge = "minimax/MiniMax-M2.7";
};
# Coding rules for Pi agent
# Rules sourced from AGENTS repo
codingRules = {
# Language-specific rules
languages = [
"nix" # Nix language conventions
];
# Standard concerns from AGENTS repo
concerns = [
"coding-style" # General coding principles
"naming" # Naming conventions (camelCase, snake_case, etc.)
"documentation" # Documentation standards
"testing" # Testing guidelines (Arrange-Act-Assert)
"git-workflow" # Conventional commits, branch naming
"git-identity" # Git identity configuration for agents
"project-structure" # Project layout conventions
];
# No framework-specific rules for NixOS config
frameworks = [];
};
settings = { settings = {
packages = [ packages = [
"npm:@dreadedzombie/pi-init" "npm:@dreadedzombie/pi-init"
"git:github.com/a5c-ai/babysitter-pi"
"npm:@plannotator/pi-extension" "npm:@plannotator/pi-extension"
"npm:@thesethrose/pi-zai-provider" "npm:@thesethrose/pi-zai-provider"
"npm:pi-agent-browser-native" "npm:pi-agent-browser-native"
@@ -49,8 +21,8 @@
"git:github.com/hk-vk/pi-connect" "git:github.com/hk-vk/pi-connect"
]; ];
defaultProvider = "minimax"; defaultProvider = "openai-codex";
defaultModel = "MiniMax-M2.7"; defaultModel = "gpt-5.5";
defaultThinkingLevel = "high"; defaultThinkingLevel = "high";
}; };
@@ -59,7 +31,7 @@
# NOTE: Local project .pi/extensions/guardrails.json can override same rule IDs. # NOTE: Local project .pi/extensions/guardrails.json can override same rule IDs.
# For immutable global policies, consider a wrapper or upstream patch. # For immutable global policies, consider a wrapper or upstream patch.
guardrails = { guardrails = {
enable = true; enable = false;
config = { config = {
enabled = true; enabled = true;
applyBuiltinDefaults = true; applyBuiltinDefaults = true;
+1
View File
@@ -9,5 +9,6 @@
jq jq
ripgrep ripgrep
tree tree
worktrunk
]; ];
} }
+66 -81
View File
@@ -44,122 +44,107 @@
programs.ssh = { programs.ssh = {
enable = true; enable = true;
enableDefaultConfig = false; enableDefaultConfig = false;
matchBlocks = { settings = {
"github.com" = { "github.com" = {
hostname = "github.com"; HostName = "github.com";
user = "m3tam3re"; User = "m3tam3re";
port = 22; Port = 22;
identityFile = "~/.ssh/github"; IdentityFile = "~/.ssh/github";
}; };
"code.m3ta.dev" = { "code.m3ta.dev" = {
hostname = "code.m3ta.dev"; HostName = "code.m3ta.dev";
user = "m3tam3re"; User = "m3tam3re";
identityFile = "~/.ssh/gitea"; IdentityFile = "~/.ssh/gitea";
};
"nikhil" = {
hostname = "91.99.176.80";
user = "nikhilmaddirala";
identityFile = "~/.ssh/m3tam3re";
}; };
"lkk-nix-1" = { "lkk-nix-1" = {
hostname = "89.58.10.189"; HostName = "89.58.10.189";
user = "lkk-admin"; User = "lkk-admin";
identityFile = "~/.ssh/lkk-admin"; IdentityFile = "~/.ssh/lkk-admin";
}; };
"m3-r1" = { "m3-r1" = {
hostname = "202.61.226.110"; HostName = "202.61.226.110";
user = "m3tam3re"; User = "m3tam3re";
identityFile = "~/.ssh/m3tam3re"; IdentityFile = "~/.ssh/m3tam3re";
};
"lkk-prod-test" = {
hostname = "192.168.122.215";
user = "root";
identityFile = "~/.ssh/m3tam3re";
};
"lkk-prod-1" = {
hostname = "192.168.0.24";
user = "root";
identityFile = "~/.ssh/m3tam3re";
};
"lkk-prod-2" = {
hostname = "192.168.0.20";
user = "root";
identityFile = "~/.ssh/m3tam3re";
}; };
"m3-deck" = { "m3-deck" = {
hostname = "192.168.178.193"; HostName = "192.168.178.193";
user = "m3tam3re"; User = "m3tam3re";
identityFile = "~/.ssh/m3tam3re"; IdentityFile = "~/.ssh/m3tam3re";
}; };
"m3-kratos-vm" = { "m3-kratos-vm" = {
hostname = "192.168.122.43"; HostName = "192.168.122.43";
user = "m3tam3re"; User = "m3tam3re";
identityFile = "~/.ssh/m3tam3re"; IdentityFile = "~/.ssh/m3tam3re";
}; };
"m3-helios" = { "m3-helios" = {
hostname = "192.168.178.210"; HostName = "192.168.178.210";
user = "m3tam3re"; User = "m3tam3re";
identityFile = "~/.ssh/m3tam3re"; IdentityFile = "~/.ssh/m3tam3re";
}; };
"m3-ares" = { "m3-ares" = {
hostname = "192.168.1.30"; HostName = "192.168.1.30";
user = "m3tam3re"; User = "m3tam3re";
identityFile = "~/.ssh/m3tam3re"; IdentityFile = "~/.ssh/m3tam3re";
}; };
"m3-atlas" = { "m3-atlas" = {
hostname = "152.53.85.162"; HostName = "152.53.85.162";
user = "m3tam3re"; User = "m3tam3re";
identityFile = "~/.ssh/m3tam3re"; IdentityFile = "~/.ssh/m3tam3re";
}; };
"m3-hermes" = { "m3-hermes" = {
hostname = "204.168.229.93"; HostName = "204.168.229.93";
user = "m3tam3re"; User = "m3tam3re";
identityFile = "~/.ssh/m3tam3re"; IdentityFile = "~/.ssh/m3tam3re";
};
"hermes" = {
HostName = "46.224.0.92";
User = "admin";
IdentityFile = "~/.ssh/m3tam3re";
}; };
"m3-zelda" = { "m3-zelda" = {
hostname = "95.217.189.186"; HostName = "95.217.189.186";
user = "m3tam3re"; User = "m3tam3re";
identityFile = "~/.ssh/m3tam3re"; IdentityFile = "~/.ssh/m3tam3re";
}; };
"m3-skynet" = { "m3-skynet" = {
hostname = "m3-skynet"; HostName = "m3-skynet";
user = "admin"; User = "admin";
identityFile = "~/.ssh/m3tam3re"; IdentityFile = "~/.ssh/m3tam3re";
}; };
"m3-prox-1" = { "m3-prox-1" = {
hostname = "192.168.1.110"; HostName = "192.168.1.110";
user = "root"; User = "root";
identityFile = "~/.ssh/m3tam3re"; IdentityFile = "~/.ssh/m3tam3re";
}; };
"shp-old" = { "shp-old" = {
hostname = "95.217.3.250"; HostName = "95.217.3.250";
port = 2222; Port = 2222;
user = "m3tam3re"; User = "m3tam3re";
identityFile = "~/.ssh/self-host-playbook"; IdentityFile = "~/.ssh/self-host-playbook";
}; };
"shp-1" = { "shp-1" = {
hostname = "95.217.189.186"; HostName = "95.217.189.186";
port = 2222; Port = 2222;
user = "m3tam3re"; User = "m3tam3re";
identityFile = "~/.ssh/self-host-playbook"; IdentityFile = "~/.ssh/self-host-playbook";
}; };
"AZ-CLD-1" = { "AZ-CLD-1" = {
hostname = "152.53.186.119"; HostName = "152.53.186.119";
user = "sascha.koenig"; User = "sascha.koenig";
port = 2022; Port = 2022;
identityFile = "~/.ssh/sascha.koenig"; IdentityFile = "~/.ssh/sascha.koenig";
}; };
"AZ-PRM-1" = { "AZ-PRM-1" = {
hostname = "192.168.152.76"; HostName = "192.168.152.76";
user = "sascha.koenig"; User = "sascha.koenig";
port = 2022; Port = 2022;
identityFile = "~/.ssh/sascha.koenig"; IdentityFile = "~/.ssh/sascha.koenig";
}; };
"git.az-gruppe.com" = { "git.az-gruppe.com" = {
hostname = "git.az-gruppe.com"; HostName = "git.az-gruppe.com";
port = 2022; Port = 2022;
user = "sascha.koenig"; User = "sascha.koenig";
identityFile = "~/.ssh/sascha.koenig"; IdentityFile = "~/.ssh/sascha.koenig";
}; };
}; };
}; };