Author SHA1 Message Date
m3ta-chiron 78d1fa262c fix(hyprland): float+pin vibetyper Recording Indicator
Since vibetyper 1.5.x the indicator is a small bottom-center panel,
not a fullscreen overlay. Without an explicit float rule dwindle
tiles it and clips the panel to tile size (magic formatter preview,
language confirm etc. appeared cut off).
2026-09-17 06:51:12 +02:00
m3tam3re 601eae6362 fix(gaming): emulators.nix declared gamescope's option by mistake
Copy-paste slip from 7064bbe: emulators.nix declared
profiles.gaming.gamescope.enable (already declared in gamescope.nix)
while reading profiles.gaming.emulators, which was never declared.
Declare the emulators option instead.
2026-09-12 14:00:38 +02:00
m3tam3re 2de49b5204 fix(desktop): build hermes-desktop with corrected Electron 43.6.0 headers hash
Upstream hermes-agent v2026.8.31 pins sha256-f8bSb… for the
artifacts.electronjs.org v43.6.0 headers tarball. The CDN swapped
that artifact, breaking every desktop build with a fixed-output
derivation hash mismatch (specified f8bSb… vs got xDgc5…).

Local copy of upstream nix/desktop.nix with:
- verified hash for electron 43.6.0 (nix store prefetch-file)
- per-version hash map with a loud throw for unknown versions
- icon/desktop-entry paths resolved against the flake input checkout

Remove once upstream ships the corrected hash and the hermes-agent
input is bumped past that release.
2026-09-12 13:58:56 +02:00
m3tam3re 7064bbebe3 feat: emulators 2026-09-12 13:50:34 +02:00
m3tam3re 9c94b70c93 feat: emulators 2026-09-12 13:49:46 +02:00
m3tam3re afc5bc3aa6 chore: some updates 2026-09-11 17:39:29 +02:00
m3tam3re ff5fef0596 chore: hyprland keybindings 2026-09-05 09:36:29 +02:00
m3tam3re 207b794431 chore: hyprland keybindings 2026-09-05 09:28:05 +02:00
m3ta-chiron fb3e39f0ce fix: libreoffice-fresh -> libreoffice-stable (deprecated alias) 2026-08-31 11:44:58 +02:00
m3ta-chiron 9b1be8eca4 refactor(agents): consume llm-agents packages via pkgs.llm-agents namespace
numtide/llm-agents.nix's shared-nixpkgs overlay exposes everything under
pkgs.llm-agents.* — no flattening to top-level attrs anymore. Namespaced
refs fail loudly when the overlay is missing instead of silently falling
back to outdated nixpkgs attributes (opencode 0.3.x) or disappearing.

Requires the consumer's nixos-config to apply
inputs.llm-agents.overlays.shared-nixpkgs (see nixos-config
hosts/common/default.nix).
2026-08-31 11:44:22 +02:00
m3tam3re 890dc4cb2c mcp changes 2026-08-25 20:09:58 +02:00
m3ta-chiron 31d47b00e5 feat: add ansible to base cli-tools
Adds ansible + ansible-lint as an always-on base module so it is
available in both identities (private/work) and all contexts.
Disable per host via base.cliTools.ansible.enable = false.
2026-08-21 09:06:49 +02:00
m3tam3re 6a311045a4 chore: ssh changes 2026-08-16 13:44:59 +02:00
m3tam3re 808b6628c8 chore: flake update 2026-08-15 14:06:47 +02:00
m3tam3re b58b7e84d1 chore: opencode config updates 2026-08-15 13:53:22 +02:00
m3ta-chiron fbba78e358 chore: fix local repo paths 2026-08-12 10:25:49 +02:00
m3ta-chiron 38fa16eda6 chore: TC01 addr change 2026-08-12 10:24:00 +02:00
m3tam3re 33d0c85ef4 chore: ssh changes 2026-08-11 17:06:01 +02:00
m3tam3re f2cc6b59ef chore: update hyrpland/dms config 2026-08-09 09:50:45 +02:00
m3tam3re f0e98a2ac7 feat: buzz 2026-08-08 17:46:57 +02:00
m3ta-chiron 6a67324c6d fix: litelllm models 2026-08-03 11:49:56 +02:00
m3ta-chiron c90f5a5857 fix: litelllm models 2026-08-03 11:49:23 +02:00
m3ta-chiron 69082a07f2 fix: litelllm models 2026-08-03 11:34:59 +02:00
m3ta-chiron d2b39a3f2d AZ-TC-01 2026-08-03 09:12:37 +02:00
m3ta-chiron de16245929 AZ-TC-01 2026-08-03 08:44:48 +02:00
m3ta-chiron b01084482f Merge branch 'master' of code.m3ta.dev:m3tam3re/m3ta-home 2026-08-03 06:31:55 +02:00
m3ta-chiron 66b1dc72f5 fix: agent-lib-legacy repo url 2026-08-03 06:31:43 +02:00
m3tam3re 0db970c161 feat: docker-sbx 2026-08-02 16:34:20 +02:00
m3tam3re 516f9d74e0 chore: -aionui 2026-08-02 13:41:01 +02:00
m3tam3re 7926491466 feat: migrate Hyprland configuration to Lua 2026-08-01 10:53:09 +02:00
m3tam3re a9cf13abd4 feat: add some mcp servers 2026-07-30 14:50:43 +02:00
m3tam3re 4dec87ebc7 feat: okf skills 2026-07-30 14:22:13 +02:00
m3tam3re 53de70bf4f feat: okf skills 2026-07-30 14:16:33 +02:00
m3tam3re 206ee46d4f fix: basecamp rollback as new rc version does not have a source hash 2026-07-30 09:33:31 +02:00
m3tam3re 4ac8d6fb9a chore: flake update 2026-07-30 08:26:14 +02:00
m3tam3re a22ff06004 chore: flake update 2026-07-30 07:21:22 +02:00
m3tam3re acbf02c3e1 +opencode-desktop 2026-07-30 07:03:27 +02:00
m3ta-chiron 128391afb2 -zellij-ps 2026-07-28 06:49:42 +02:00
m3ta-chiron 92244b5f02 -zellij-ps 2026-07-28 06:35:01 +02:00
m3tam3re 7b3ef4a2c3 Merge branch 'master' of code.m3ta.dev:m3tam3re/m3ta-home 2026-07-25 11:45:38 +02:00
m3tam3re 2aac223e77 chore: flake update 2026-07-25 11:45:26 +02:00
m3ta-chiron 5e26e13aa7 chore: model changes for opencode 2026-07-17 07:21:35 +02:00
m3tam3re 017bf5002e fix: gstreamer 2026-07-16 18:56:09 +02:00
m3tam3re c85600a3b0 chore: skill issue 2026-07-10 15:18:06 +02:00
m3tam3re 32fdaddf7c Merge branch 'master' of code.m3ta.dev:m3tam3re/m3ta-home 2026-07-08 20:41:14 +02:00
m3tam3re 99753e18df feat: +aionui 2026-07-08 20:41:03 +02:00
m3tam3re 10876be5e6 fix: resolve eval warnings and npm prefix 2026-07-07 19:39:43 +02:00
m3tam3re 93cecb1a53 feat: herdr 2026-07-07 18:52:04 +02:00
m3ta-chiron 192b5df938 chore: gitea npm registry 2026-07-07 07:19:28 +02:00
m3ta-chiron 47fbdaaa37 chore: gitea npm registry 2026-07-07 06:51:56 +02:00
m3tam3re ed976b0e9e chore: remove hermes-desktop 2026-07-05 18:37:34 +02:00
m3ta-chiron 671ad7bb8f feat: new skills 2026-07-02 21:13:02 +02:00
m3tam3re 013f031a56 feat: talk crunch 2026-07-02 20:26:03 +02:00
m3tam3re 9f44404d94 feat: talk crunch 2026-07-02 20:24:21 +02:00
m3tam3re 2f4c5c8cba Merge pull request 'refactor: dynamic nushell secrets path via config.home.username' (#2) from feat/dynamic-secrets into master
Reviewed-on: #2
2026-07-02 19:08:43 +02:00
24 changed files with 1428 additions and 522 deletions
+1
View File
@@ -161,6 +161,7 @@ Every module in m3ta-home has an `enable` option. Base modules default to `true`
### Available Flags
```
base.cliTools.ansible.enable # Ansible (config rollout to servers)
base.shell.fish.enable # Fish shell
base.shell.nushell.enable # Nushell
base.shell.starship.enable # Starship prompt
+324 -57
View File
@@ -533,6 +533,17 @@
},
"path": "skills/changelog"
},
"crunch-jobs": {
"entry": "skills/crunch-jobs/SKILL.md",
"licenseFiles": [],
"metadata": {
"description": "Use when: (1) The user asks to be reminded at a specific time, (2) Schedule recurring notifications, (3) Set up AI-powered scheduled jobs (summarize, review, report), (4) Run custom pipeline scripts on a schedule with voice output. Triggers: remind me, erinnere mich, schedule, cron, daily, weekly, täglich, jeden Montag, crunch, talk at, notify me at, voice reminder.",
"name": "crunch-jobs",
"requires": [],
"tags": []
},
"path": "skills/crunch-jobs"
},
"doc-translator": {
"entry": "skills/doc-translator/SKILL.md",
"licenseFiles": [],
@@ -687,6 +698,17 @@
},
"path": "skills/systematic-debugging"
},
"voice-notify": {
"entry": "skills/voice-notify/SKILL.md",
"licenseFiles": [],
"metadata": {
"description": "Use when: (1) A long-running task (build, test, migration, cruncher job) completes, (2) The user asks to be notified audibly, (3) An agent finishes delegated work and should announce results, (4) Important errors or completions need immediate attention. Triggers: talk, voice, notify, audio, abbrechen, notify me, let me know when done, cruncher, job complete.",
"name": "voice-notify",
"requires": [],
"tags": []
},
"path": "skills/voice-notify"
},
"xlsx": {
"entry": "skills/xlsx/SKILL.md",
"licenseFiles": [],
@@ -701,9 +723,9 @@
},
"tools": {}
},
"narHash": "sha256:632df1722f82091772f12e9ec51bbf9e823a4a88bd1ce9d093d80901242861fe",
"narHash": "sha256:c119e6197eb556c9c00a13a88d2e8f42d740c724262b2b0e2ac6fb05456fe621",
"ref": null,
"rev": "cd36a91440b971582fcf2d4eedf9a46fb755f6e1",
"rev": "83284d752d2ac325d4bf3ab7b38acad1c2fffe3a",
"root": ".",
"type": "git",
"url": "https://code.m3ta.dev/m3tam3re/AGENTS",
@@ -748,18 +770,70 @@
"agents": {},
"prompts": {},
"skills": {
"caveman": {
"entry": "skills/productivity/caveman/SKILL.md",
"ask-matt": {
"entry": "skills/engineering/ask-matt/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": ">",
"name": "caveman",
"description": "Ask which skill or flow fits your situation. A router over the skills in this repo.",
"name": "ask-matt",
"requires": [],
"tags": []
},
"path": "skills/productivity/caveman"
"path": "skills/engineering/ask-matt"
},
"batch-grill-me": {
"entry": "skills/in-progress/batch-grill-me/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "A relentless interview that asks every frontier question at once, round by round.",
"name": "batch-grill-me",
"requires": [],
"tags": []
},
"path": "skills/in-progress/batch-grill-me"
},
"claude-handoff": {
"entry": "skills/in-progress/claude-handoff/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Hand the current conversation off to a fresh background agent that picks up the work immediately.",
"name": "claude-handoff",
"requires": [],
"tags": []
},
"path": "skills/in-progress/claude-handoff"
},
"code-review": {
"entry": "skills/engineering/code-review/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes — Standards (does the code follow this repo's documented coding standards?) and Spec (does the code match what the originating issue/PRD asked for?). Runs both reviews in parallel sub-agents and reports them side by side. Use when the user wants to review a branch, a PR, work-in-progress changes, or asks to \"review since X\".",
"name": "code-review",
"requires": [],
"tags": []
},
"path": "skills/engineering/code-review"
},
"codebase-design": {
"entry": "skills/engineering/codebase-design/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.",
"name": "codebase-design",
"requires": [],
"tags": []
},
"path": "skills/engineering/codebase-design"
},
"design-an-interface": {
"entry": "skills/deprecated/design-an-interface/SKILL.md",
@@ -774,18 +848,31 @@
},
"path": "skills/deprecated/design-an-interface"
},
"diagnose": {
"entry": "skills/engineering/diagnose/SKILL.md",
"diagnosing-bugs": {
"entry": "skills/engineering/diagnosing-bugs/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Disciplined diagnosis loop for hard bugs and performance regressions. Reproduce → minimise → hypothesise → instrument → fix → regression-test. Use when user says \"diagnose this\" / \"debug this\", reports a bug, says something is broken/throwing/failing, or describes a performance regression.",
"name": "diagnose",
"description": "Diagnosis loop for hard bugs and performance regressions. Use when the user says \"diagnose\"/\"debug this\", or reports something broken/throwing/failing/slow.",
"name": "diagnosing-bugs",
"requires": [],
"tags": []
},
"path": "skills/engineering/diagnose"
"path": "skills/engineering/diagnosing-bugs"
},
"domain-modeling": {
"entry": "skills/engineering/domain-modeling/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Build and sharpen a project's domain model. Use when the user wants to pin down domain terminology or a ubiquitous language, record an architectural decision, or when another skill needs to maintain the domain model.",
"name": "domain-modeling",
"requires": [],
"tags": []
},
"path": "skills/engineering/domain-modeling"
},
"edit-article": {
"entry": "skills/personal/edit-article/SKILL.md",
@@ -819,7 +906,7 @@
"LICENSE"
],
"metadata": {
"description": "Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions \"grill me\".",
"description": "A relentless interview to sharpen a plan or design.",
"name": "grill-me",
"requires": [],
"tags": []
@@ -832,13 +919,26 @@
"LICENSE"
],
"metadata": {
"description": "Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions.",
"description": "A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.",
"name": "grill-with-docs",
"requires": [],
"tags": []
},
"path": "skills/engineering/grill-with-docs"
},
"grilling": {
"entry": "skills/productivity/grilling/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Grill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any 'grill' trigger phrases.",
"name": "grilling",
"requires": [],
"tags": []
},
"path": "skills/productivity/grilling"
},
"handoff": {
"entry": "skills/productivity/handoff/SKILL.md",
"licenseFiles": [
@@ -852,19 +952,45 @@
},
"path": "skills/productivity/handoff"
},
"implement": {
"entry": "skills/engineering/implement/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Implement a piece of work based on a spec or set of tickets.",
"name": "implement",
"requires": [],
"tags": []
},
"path": "skills/engineering/implement"
},
"improve-codebase-architecture": {
"entry": "skills/engineering/improve-codebase-architecture/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Find deepening opportunities in a codebase, informed by the domain language in CONTEXT.md and the decisions in docs/adr/. Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable.",
"description": "Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.",
"name": "improve-codebase-architecture",
"requires": [],
"tags": []
},
"path": "skills/engineering/improve-codebase-architecture"
},
"loop-me": {
"entry": "skills/in-progress/loop-me/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Grill me about specs for the workflows I want to build, within this workspace.",
"name": "loop-me",
"requires": [],
"tags": []
},
"path": "skills/in-progress/loop-me"
},
"migrate-to-shoehorn": {
"entry": "skills/misc/migrate-to-shoehorn/SKILL.md",
"licenseFiles": [
@@ -897,7 +1023,7 @@
"LICENSE"
],
"metadata": {
"description": "Build a throwaway prototype to flesh out a design before committing to it. Routes between two branches — a runnable terminal app for state/business-logic questions, or several radically different UI variations toggleable from one route. Use when the user wants to prototype, sanity-check a data model or state machine, mock up a UI, explore design options, or says \"prototype this\", \"let me play with it\", \"try a few designs\".",
"description": "Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.",
"name": "prototype",
"requires": [],
"tags": []
@@ -930,18 +1056,31 @@
},
"path": "skills/deprecated/request-refactor-plan"
},
"review": {
"entry": "skills/in-progress/review/SKILL.md",
"research": {
"entry": "skills/engineering/research/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes — Standards (does the code follow this repo's documented coding standards?) and Spec (does the code match what the originating issue/PRD asked for?). Runs both reviews in parallel sub-agents and reports them side by side. Use when the user wants to review a branch, a PR, work-in-progress changes, or asks to \"review since X\".",
"name": "review",
"description": "Investigate a question against high-trust primary sources and capture the findings as a Markdown file in the repo. Use when the user wants a topic researched, docs or API facts gathered, or reading legwork delegated to a background agent.",
"name": "research",
"requires": [],
"tags": []
},
"path": "skills/in-progress/review"
"path": "skills/engineering/research"
},
"resolving-merge-conflicts": {
"entry": "skills/engineering/resolving-merge-conflicts/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Use when you need to resolve an in-progress git merge/rebase conflict.",
"name": "resolving-merge-conflicts",
"requires": [],
"tags": []
},
"path": "skills/engineering/resolving-merge-conflicts"
},
"scaffold-exercises": {
"entry": "skills/misc/scaffold-exercises/SKILL.md",
@@ -962,7 +1101,7 @@
"LICENSE"
],
"metadata": {
"description": "Sets up an `## Agent skills` block in AGENTS.md/CLAUDE.md and `docs/agents/` so the engineering skills know this repo's issue tracker (GitHub or local markdown), triage label vocabulary, and domain doc layout. Run before first use of `to-issues`, `to-prd`, `triage`, `diagnose`, `tdd`, `improve-codebase-architecture`, or `zoom-out` — or if those skills appear to be missing context about the issue tracker, triage labels, or domain docs.",
"description": "Configure this repo for the engineering skills — set up its issue tracker, triage label vocabulary, and domain doc layout. Run once before first use of the other engineering skills.",
"name": "setup-matt-pocock-skills",
"requires": [],
"tags": []
@@ -982,13 +1121,26 @@
},
"path": "skills/misc/setup-pre-commit"
},
"setup-ts-deep-modules": {
"entry": "skills/in-progress/setup-ts-deep-modules/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Wire dependency-cruiser into a TypeScript repo so each package is a deep module — implementation hidden in subfolders, reachable only through its entry-point files. User-invoked.",
"name": "setup-ts-deep-modules",
"requires": [],
"tags": []
},
"path": "skills/in-progress/setup-ts-deep-modules"
},
"tdd": {
"entry": "skills/engineering/tdd/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Test-driven development with red-green-refactor loop. Use when user wants to build features or fix bugs using TDD, mentions \"red-green-refactor\", wants integration tests, or asks for test-first development.",
"description": "Test-driven development. Use when the user wants to build features or fix bugs test-first, mentions \"red-green-refactor\", or wants integration tests.",
"name": "tdd",
"requires": [],
"tags": []
@@ -1008,31 +1160,44 @@
},
"path": "skills/productivity/teach"
},
"to-issues": {
"entry": "skills/engineering/to-issues/SKILL.md",
"to-questionnaire": {
"entry": "skills/in-progress/to-questionnaire/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Break a plan, spec, or PRD into independently-grabbable issues on the project issue tracker using tracer-bullet vertical slices. Use when user wants to convert a plan into issues, create implementation tickets, or break down work into issues.",
"name": "to-issues",
"description": "Turn a decision you can't fully answer into a questionnaire for someone else to fill in.",
"name": "to-questionnaire",
"requires": [],
"tags": []
},
"path": "skills/engineering/to-issues"
"path": "skills/in-progress/to-questionnaire"
},
"to-prd": {
"entry": "skills/engineering/to-prd/SKILL.md",
"to-spec": {
"entry": "skills/engineering/to-spec/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Turn the current conversation context into a PRD and publish it to the project issue tracker. Use when user wants to create a PRD from the current context.",
"name": "to-prd",
"description": "Turn the current conversation into a spec and publish it to the project issue tracker — no interview, just synthesis of what you've already discussed.",
"name": "to-spec",
"requires": [],
"tags": []
},
"path": "skills/engineering/to-prd"
"path": "skills/engineering/to-spec"
},
"to-tickets": {
"entry": "skills/engineering/to-tickets/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Break a plan, spec, or the current conversation into a set of tracer-bullet tickets, each declaring its blocking edges, published to the configured tracker — edges as text in one file per ticket locally, or native blocking links on a real tracker.",
"name": "to-tickets",
"requires": [],
"tags": []
},
"path": "skills/engineering/to-tickets"
},
"triage": {
"entry": "skills/engineering/triage/SKILL.md",
@@ -1040,7 +1205,7 @@
"LICENSE"
],
"metadata": {
"description": "Triage issues through a state machine driven by triage roles. Use when user wants to create an issue, triage issues, review incoming bugs or feature requests, prepare issues for an AFK agent, or manage issue workflow.",
"description": "Move issues and external PRs through a state machine of triage roles — categorise, verify, grill if needed, and write agent-ready briefs.",
"name": "triage",
"requires": [],
"tags": []
@@ -1060,18 +1225,31 @@
},
"path": "skills/deprecated/ubiquitous-language"
},
"write-a-skill": {
"entry": "skills/productivity/write-a-skill/SKILL.md",
"wayfinder": {
"entry": "skills/engineering/wayfinder/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Create new agent skills with proper structure, progressive disclosure, and bundled resources. Use when user wants to create, write, or build a new skill.",
"name": "write-a-skill",
"description": "Plan a huge chunk of work — more than one agent session can hold — as a shared map of decision tickets on your issue tracker, and resolve them one at a time until the way to the destination is clear.",
"name": "wayfinder",
"requires": [],
"tags": []
},
"path": "skills/productivity/write-a-skill"
"path": "skills/engineering/wayfinder"
},
"wizard": {
"entry": "skills/in-progress/wizard/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Generate an interactive bash wizard that walks a human through a manual procedure — third-party setup, a one-off migration, an A→B state transition — opening URLs, capturing values, confirming each step, and writing .env files and GitHub Actions secrets.",
"name": "wizard",
"requires": [],
"tags": []
},
"path": "skills/in-progress/wizard"
},
"writing-beats": {
"entry": "skills/in-progress/writing-beats/SKILL.md",
@@ -1079,7 +1257,7 @@
"LICENSE"
],
"metadata": {
"description": "Shape an article as a journey of beats, choose-your-own-adventure style. The user picks a starting beat from the raw material, you write only that beat, then offer options for where to pivot next, beat by beat, until the article reaches a natural end. Use when the user has raw material and wants to assemble it as a narrative rather than an argument.",
"description": "Writing, exploit — assemble raw material into a journey of beats, grounding each term before a beat leans on it.",
"name": "writing-beats",
"requires": [],
"tags": []
@@ -1092,50 +1270,139 @@
"LICENSE"
],
"metadata": {
"description": "Grilling session that mines the user for fragments — heterogeneous nuggets of writing (claims, vignettes, sharp sentences, half-thoughts) — and appends them to a single document as raw material for a future article. Use when the user wants to develop ideas before imposing structure, or mentions \"fragments\", \"ideate\", or \"raw material\" for writing.",
"description": "Writing, explore — mine raw fragments, no structure yet.",
"name": "writing-fragments",
"requires": [],
"tags": []
},
"path": "skills/in-progress/writing-fragments"
},
"writing-great-skills": {
"entry": "skills/productivity/writing-great-skills/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Reference for writing and editing skills well — the vocabulary and principles that make a skill predictable.",
"name": "writing-great-skills",
"requires": [],
"tags": []
},
"path": "skills/productivity/writing-great-skills"
},
"writing-shape": {
"entry": "skills/in-progress/writing-shape/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Take a markdown file of raw material and shape it into an article through a conversational session — drafting candidate openings, growing the piece paragraph by paragraph, arguing about format (lists, tables, callouts, quotes) at each step. Use when the user has a pile of notes, fragments, or a rough draft and wants help turning it into something publishable.",
"description": "Writing, exploit — shape raw material into an article, paragraph by paragraph.",
"name": "writing-shape",
"requires": [],
"tags": []
},
"path": "skills/in-progress/writing-shape"
},
"zoom-out": {
"entry": "skills/engineering/zoom-out/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": "Tell the agent to zoom out and give broader context or a higher-level perspective. Use when you're unfamiliar with a section of code or need to understand how it fits into the bigger picture.",
"name": "zoom-out",
"requires": [],
"tags": []
},
"path": "skills/engineering/zoom-out"
}
},
"tools": {}
},
"narHash": "sha256:f0f009c64fe1572fbfade479e4829f2fd4499f703e7110c1387a5e05bfe00b9e",
"narHash": "sha256:51778614e8086c70f3382b8076425f1a6c9edaa6f926e0771e21d10315d2f118",
"ref": null,
"rev": "694fa30311e02c2639942308513555e61ee84a6f",
"rev": "ed37663cc5fbef691ddfecd080dff42f7e7e350d",
"root": ".",
"type": "git",
"url": "https://github.com/mattpocock/skills",
"warnings": []
},
"okf": {
"discovery": {
"agents": {
"include": [
"**/AGENT.md"
],
"paths": [
"agents"
]
},
"prompts": {
"include": [
"**/PROMPT.md"
],
"paths": [
"prompts"
]
},
"skills": {
"include": [
"**/SKILL.md"
],
"paths": [
"skills"
]
},
"tools": {
"include": [
"**/TOOL.md"
],
"paths": [
"tools"
]
}
},
"items": {
"agents": {},
"prompts": {},
"skills": {
"okf": {
"entry": "skills/okf/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": ">-",
"name": "okf",
"requires": [],
"tags": []
},
"path": "skills/okf"
},
"validate": {
"entry": "skills/validate/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": ">-",
"name": "validate",
"requires": [],
"tags": []
},
"path": "skills/validate"
},
"visualize": {
"entry": "skills/visualize/SKILL.md",
"licenseFiles": [
"LICENSE"
],
"metadata": {
"description": ">-",
"name": "visualize",
"requires": [],
"tags": []
},
"path": "skills/visualize"
}
},
"tools": {}
},
"narHash": "sha256:7491a95f121a0e5d045381113955252bd6d401009fe2b9b27752f3caeeb6682e",
"ref": null,
"rev": "cb5c0a9973c81ea3702f677e0b8852d93b47be80",
"root": ".",
"type": "git",
"url": "https://github.com/scaccogatto/okf-skills",
"warnings": []
},
"superpowers": {
"discovery": {
"agents": {
Generated
+221 -167
View File
@@ -34,11 +34,11 @@
"rev": "75a2ed2533b4d6d8e4a34acd37e83d98d81a5fb0",
"revCount": 30,
"type": "git",
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib"
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib-legacy"
},
"original": {
"type": "git",
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib"
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib-legacy"
}
},
"agents": {
@@ -46,11 +46,11 @@
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1782789853,
"narHash": "sha256-LEmctqYRQRq0wB1MoS+IVr/0/uu/0nKahqNeJBGTjJ8=",
"lastModified": 1783016143,
"narHash": "sha256-3qejDAo4g2XfzTyWCaX8RVKH17JXnw/fujsbXQA+Mzc=",
"ref": "refs/heads/master",
"rev": "cd36a91440b971582fcf2d4eedf9a46fb755f6e1",
"revCount": 92,
"rev": "83284d752d2ac325d4bf3ab7b38acad1c2fffe3a",
"revCount": 98,
"type": "git",
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/AGENTS"
},
@@ -62,11 +62,11 @@
"agents_2": {
"flake": false,
"locked": {
"lastModified": 1780133320,
"narHash": "sha256-8AiN9tV9PBb5xblJiPlhumBbKj61qLjzqXXFtkj3vvY=",
"lastModified": 1783016143,
"narHash": "sha256-3qejDAo4g2XfzTyWCaX8RVKH17JXnw/fujsbXQA+Mzc=",
"ref": "refs/heads/master",
"rev": "920c00313ae242bd93275c30131b9ab1e52ee2fb",
"revCount": 88,
"rev": "83284d752d2ac325d4bf3ab7b38acad1c2fffe3a",
"revCount": 98,
"type": "git",
"url": "https://code.m3ta.dev/m3tam3re/AGENTS"
},
@@ -99,20 +99,59 @@
]
},
"locked": {
"lastModified": 1774505501,
"narHash": "sha256-7UiRrDptj7yuEFwToOfdunUMz/i3jRLR7CmMoYQjq6k=",
"lastModified": 1785979955,
"narHash": "sha256-OP96Ak4OBydR98keoNYKdGY8j+wrIys0LafSZgwS20g=",
"owner": "basecamp",
"repo": "basecamp-cli",
"rev": "f087e6ef84002503d0dbc75ea1c8c928a8928d9e",
"rev": "61a5591de1da9bc99c56b8072a4d6bad2c9b9e47",
"type": "github"
},
"original": {
"owner": "basecamp",
"ref": "v0.7.2",
"ref": "v0.9.0",
"repo": "basecamp-cli",
"type": "github"
}
},
"buzz": {
"inputs": {
"nixpkgs": [
"m3ta-nixpkgs",
"nixpkgs"
],
"rust-overlay": "rust-overlay",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1788856318,
"narHash": "sha256-bOLED82KPrzIXTWELw30y3PVI6MBmlY4Y2F2lwrdOnM=",
"owner": "mulatta",
"repo": "buzz.nix",
"rev": "fdd0152c12c6be339fe01d91887122bb10823aaf",
"type": "github"
},
"original": {
"owner": "mulatta",
"repo": "buzz.nix",
"type": "github"
}
},
"dank-qml-common": {
"flake": false,
"locked": {
"lastModified": 1788376015,
"narHash": "sha256-/tT8rTznLADndTwLBzdgzzgfJH1ZhYQibYo5v/F8U+U=",
"owner": "AvengeMedia",
"repo": "dank-qml-common",
"rev": "26396ce432d6c71c3f5367438f96f4a8d667e160",
"type": "github"
},
"original": {
"owner": "AvengeMedia",
"repo": "dank-qml-common",
"type": "github"
}
},
"darwin": {
"inputs": {
"nixpkgs": [
@@ -137,17 +176,18 @@
},
"dms": {
"inputs": {
"dank-qml-common": "dank-qml-common",
"flake-compat": "flake-compat",
"nixpkgs": [
"nixpkgs"
],
"quickshell": "quickshell"
]
},
"locked": {
"lastModified": 1777431599,
"narHash": "sha256-g6r/Gx8PTDzO3jCNzzySA+Ff1lmLF9nDlMCNyyoQjoE=",
"lastModified": 1788959433,
"narHash": "sha256-MAbxGEomcpGomFfw+WYurNkSKBIh7PKEc1U5OV0X6oU=",
"owner": "AvengeMedia",
"repo": "DankMaterialShell",
"rev": "eb5afcdc40ea5446c27e18552ff4a19f9daf9484",
"rev": "fe293b7379a51f62a4db7043fc09df71f78e72ef",
"type": "github"
},
"original": {
@@ -164,11 +204,11 @@
]
},
"locked": {
"lastModified": 1782780764,
"narHash": "sha256-Q2wPFsuDo1y6neZ3ttxxOOItupg/4+mPkyAZbC0+wfw=",
"lastModified": 1789138529,
"narHash": "sha256-46RwWSOzklur59Plvo8N0YBZYun4M4cwK04+8owhJeo=",
"owner": "AvengeMedia",
"repo": "dms-plugin-registry",
"rev": "9fa716427ab5905845b2a10a01d67bee0b1e4c4b",
"rev": "5e5d72f980f5f16503b8fd0b8b66c4a3441eecdc",
"type": "github"
},
"original": {
@@ -177,6 +217,22 @@
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
@@ -185,11 +241,11 @@
]
},
"locked": {
"lastModified": 1772408722,
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
"lastModified": 1782949081,
"narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
"rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e",
"type": "github"
},
"original": {
@@ -222,24 +278,26 @@
"hermes-agent": {
"inputs": {
"flake-parts": "flake-parts",
"home-manager": "home-manager_2",
"nixpkgs": [
"nixpkgs"
],
"npm-lockfile-fix": "npm-lockfile-fix",
"pyproject-build-systems": "pyproject-build-systems",
"pyproject-nix": "pyproject-nix_2",
"uv2nix": "uv2nix_2"
"pyproject-nix": "pyproject-nix",
"uv2nix": "uv2nix"
},
"locked": {
"lastModified": 1782794050,
"narHash": "sha256-+qKEwIhTkml3DNSmIvGFJyssW9ZXTp78KGclFdcDvX8=",
"lastModified": 1788204567,
"narHash": "sha256-Ii9xP2fKUpvCcwWZuxJ0g3CZ+IL2UZH14pUNvBfdclc=",
"owner": "NousResearch",
"repo": "hermes-agent",
"rev": "972b1620906a1b80772c2f67492ad50b3c83f048",
"rev": "29112bef099274229cadff79cdff7bf7b99c4b77",
"type": "github"
},
"original": {
"owner": "NousResearch",
"ref": "v2026.8.31",
"repo": "hermes-agent",
"type": "github"
}
@@ -268,15 +326,36 @@
"home-manager_2": {
"inputs": {
"nixpkgs": [
"hermes-agent",
"nixpkgs"
]
},
"locked": {
"lastModified": 1782749631,
"narHash": "sha256-slFTUgDy0KTPA4LBAmC/9SngDq8GCPdX+ZR0yQHHN1E=",
"lastModified": 1786487128,
"narHash": "sha256-ad60hrRVhH/bo3Jl1YLzO+QcS3mUNZr9LNJdzhMO2P4=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "5d72a29fc36ac21adae6ae35568fe5ee6700850f",
"rev": "f404edbfa4117810c96b97048299242fc50e5362",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_3": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1789136855,
"narHash": "sha256-82D7ADWE8erhfALj3dqxAOeQaoa+Bwlsdcp9v2m/ExM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "d0fd95e15e0c3baf565a9fd4bc352321e2564ea3",
"type": "github"
},
"original": {
@@ -289,18 +368,19 @@
"inputs": {
"agents": "agents_2",
"basecamp": "basecamp",
"buzz": "buzz",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-master": "nixpkgs-master",
"openspec": "openspec"
"opencode": "opencode"
},
"locked": {
"lastModified": 1782541692,
"narHash": "sha256-gCWM240hAkKQqZrq7I4+1g9cSo0JZ08l6XFHzyNxohk=",
"lastModified": 1789141095,
"narHash": "sha256-f5NLbwOwSQL+tDDelxps1VFh84obOMyw+ox9gcvE7TU=",
"ref": "refs/heads/master",
"rev": "d42a6f57f534965f9e39056ef3385c523c9671f6",
"revCount": 332,
"rev": "1e0db37c579935b9916c1fcb3d3ed733b4cb3114",
"revCount": 389,
"type": "git",
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/nixpkgs"
},
@@ -361,11 +441,11 @@
},
"nixpkgs-master": {
"locked": {
"lastModified": 1782540244,
"narHash": "sha256-3skOZJEfAUG7LSB/Ok2AQUiqeagYLSq+8wKjtS1hOyc=",
"lastModified": 1789139724,
"narHash": "sha256-QEoQ8xoSO3H2tmwHNBYFL/5Y8Gt10U+bg5ETMsWXiIM=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "a65184fc373636356fcaf460dc09655a919c66ea",
"rev": "e27e37949736566430ed2f6157bebcdade8860c5",
"type": "github"
},
"original": {
@@ -393,11 +473,27 @@
},
"nixpkgs_3": {
"locked": {
"lastModified": 1782723713,
"narHash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ=",
"lastModified": 1776683584,
"narHash": "sha256-NuTLMrr10Tng72hurYG8jYQ4XKK8wnpJmOGcPiis96g=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8",
"rev": "9dd5558b06dbdacbf635a3dd36dce1b1a7ee3a89",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1789006805,
"narHash": "sha256-xB8mKMOx1IA9vTDNLmJZ6n4wCMq/cuWBBOzGCRnqxrU=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "8ce4ef6cb6f871616146b9fe26d2a5ae594e94fe",
"type": "github"
},
"original": {
@@ -407,13 +503,13 @@
"type": "github"
}
},
"nixpkgs_4": {
"nixpkgs_5": {
"locked": {
"lastModified": 1782723713,
"narHash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ=",
"lastModified": 1789006805,
"narHash": "sha256-xB8mKMOx1IA9vTDNLmJZ6n4wCMq/cuWBBOzGCRnqxrU=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8",
"rev": "8ce4ef6cb6f871616146b9fe26d2a5ae594e94fe",
"type": "github"
},
"original": {
@@ -447,14 +543,14 @@
"nur": {
"inputs": {
"flake-parts": "flake-parts_2",
"nixpkgs": "nixpkgs_4"
"nixpkgs": "nixpkgs_5"
},
"locked": {
"lastModified": 1782796354,
"narHash": "sha256-zHZEX+twYRO4n369Nrk21DBb519JZCGJLHBo/trhHO0=",
"lastModified": 1789141061,
"narHash": "sha256-T2+uq8rR7zvUFh7/R8DQgsf2AGrUO3EPpr1iv7Jby8Y=",
"owner": "nix-community",
"repo": "NUR",
"rev": "df4f4323fe161a8bab3aafa2d067ff9d7e223a67",
"rev": "4250406d791dcb1db2b1ce7bd223ac3ee120cfe3",
"type": "github"
},
"original": {
@@ -463,24 +559,22 @@
"type": "github"
}
},
"openspec": {
"opencode": {
"inputs": {
"nixpkgs": [
"m3ta-nixpkgs",
"nixpkgs"
]
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1782291243,
"narHash": "sha256-0pVn5pDqlKpqSgzf4eG9TFCjkjzOtnmGTpbILso7GwI=",
"owner": "Fission-AI",
"repo": "OpenSpec",
"rev": "737518b36fe4b6fdb09c83eeaf8d873a428c92e6",
"lastModified": 1789132601,
"narHash": "sha256-2+j5RuHoqrsnjssZ4VfIfSKzGdrPNFT4nazJ2QxNdu0=",
"owner": "anomalyco",
"repo": "opencode",
"rev": "95daf90670b7c039c436c85537da5fbfe2205b41",
"type": "github"
},
"original": {
"owner": "Fission-AI",
"repo": "OpenSpec",
"owner": "anomalyco",
"ref": "dev",
"repo": "opencode",
"type": "github"
}
},
@@ -490,15 +584,21 @@
"hermes-agent",
"nixpkgs"
],
"pyproject-nix": "pyproject-nix",
"uv2nix": "uv2nix"
"pyproject-nix": [
"hermes-agent",
"pyproject-nix"
],
"uv2nix": [
"hermes-agent",
"uv2nix"
]
},
"locked": {
"lastModified": 1772555609,
"narHash": "sha256-3BA3HnUvJSbHJAlJj6XSy0Jmu7RyP2gyB/0fL7XuEDo=",
"lastModified": 1785115949,
"narHash": "sha256-8AM37BfyGaL2v/SZyg4PupRxJ01Y4htvM+WrTjWrPpo=",
"owner": "pyproject-nix",
"repo": "build-system-pkgs",
"rev": "c37f66a953535c394244888598947679af231863",
"rev": "62c0d86027edb1c4f39a5facc09876348144f7c9",
"type": "github"
},
"original": {
@@ -511,37 +611,15 @@
"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=",
"lastModified": 1784591072,
"narHash": "sha256-zP/WaDxrRu8GANZM61+V2LT/7ycEEdoyLWn7M6WzU7M=",
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"rev": "e537db02e72d553cea470976b9733581bcf5b3ed",
"rev": "e3b599ca2e7fcf93d4edf65d7f19bbf6491724f3",
"type": "github"
},
"original": {
@@ -550,50 +628,6 @@
"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": {
"inputs": {
"agenix": "agenix",
@@ -602,13 +636,35 @@
"dms": "dms",
"dms-plugin-registry": "dms-plugin-registry",
"hermes-agent": "hermes-agent",
"home-manager": "home-manager_2",
"home-manager": "home-manager_3",
"m3ta-nixpkgs": "m3ta-nixpkgs",
"nix-colors": "nix-colors",
"nixpkgs": "nixpkgs_3",
"nixpkgs": "nixpkgs_4",
"nur": "nur"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"m3ta-nixpkgs",
"buzz",
"nixpkgs"
]
},
"locked": {
"lastModified": 1788591095,
"narHash": "sha256-Vh+BeLWfbTT9AecazIsQ/Tkg/RzJeX3lEduANf256WA=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "c361047d3a538f547f1617bb6b410411929ac9cc",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
@@ -624,47 +680,45 @@
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"m3ta-nixpkgs",
"buzz",
"nixpkgs"
]
},
"locked": {
"lastModified": 1786901030,
"narHash": "sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "27b3b12a8e6375f28ebe122f07d230ca5459bbfa",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"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=",
"lastModified": 1785277507,
"narHash": "sha256-9Tq3UDX2hD/aveW/HvkBlAmEwJTOlY5HQXJM+L5BGmE=",
"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",
"rev": "5a836d395cbf5fc22670eb98dd4aa4fc4d406977",
"type": "github"
},
"original": {
+4 -3
View File
@@ -13,6 +13,7 @@
m3ta-nixpkgs = {
url = "git+ssh://gitea@code.m3ta.dev/m3tam3re/nixpkgs";
# url = "path:/home/m3tam3re/p/NIX/nixpkgs";
inputs.nixpkgs.follows = "nixpkgs";
};
@@ -22,13 +23,13 @@
};
agent-lib = {
# url = "path:/home/m3tam3re/p/NIX/agent-lib";
url = "git+ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib";
# url = "path:/home/m3tam3re/p/agent-lib-legacy";
url = "git+ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib-legacy";
inputs.nixpkgs.follows = "nixpkgs";
};
hermes-agent = {
url = "github:NousResearch/hermes-agent";
url = "github:NousResearch/hermes-agent/v2026.8.31";
inputs.nixpkgs.follows = "nixpkgs";
};
+21
View File
@@ -0,0 +1,21 @@
# Ansible — configuration management for rolling out configurations to servers.
# Lives in base so it is available in every identity (private/work) and context.
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.base.cliTools.ansible;
in {
# Enabled by default — base modules are always-on.
options.base.cliTools.ansible.enable = (mkEnableOption "enable Ansible configuration management") // {default = true;};
config = mkIf cfg.enable {
home.packages = with pkgs; [
ansible
ansible-lint
];
};
}
+1 -1
View File
@@ -1,6 +1,7 @@
# CLI tools aggregator — imports all base command-line utilities.
{...}: {
imports = [
./ansible.nix
./bat.nix
./carapace.nix
./direnv.nix
@@ -13,7 +14,6 @@
./packages.nix
./television.nix
./zellij.nix
./zellij-ps.nix
./zoxide.nix
];
}
+33 -26
View File
@@ -2,40 +2,47 @@
{
config,
lib,
options,
...
}:
with lib; let
cfg = config.base.cliTools.fzf;
changeDirWidgetCommand = "fd --type d --exclude .git --follow --hidden";
in {
# Enabled by default — base modules are always-on.
options.base.cliTools.fzf.enable = (mkEnableOption "enable fuzzy finder") // {default = true;};
config = mkIf cfg.enable {
programs.fzf = {
enable = true;
enableFishIntegration = true;
colors = {
"fg" = "#${config.colorScheme.palette.base05}";
"bg" = "#${config.colorScheme.palette.base00}";
"hl" = "#${config.colorScheme.palette.base0E}";
"fg+" = "#${config.colorScheme.palette.base05}";
"bg+" = "#${config.colorScheme.palette.base02}";
"hl+" = "#${config.colorScheme.palette.base0E}";
"info" = "#${config.colorScheme.palette.base09}";
"prompt" = "#${config.colorScheme.palette.base0B}";
"pointer" = "#${config.colorScheme.palette.base08}";
"marker" = "#${config.colorScheme.palette.base08}";
"spinner" = "#${config.colorScheme.palette.base09}";
"header" = "#${config.colorScheme.palette.base03}";
};
defaultOptions = [
"--preview='bat --color=always -n {}'"
"--bind 'ctrl-/:toggle-preview'"
"--header 'Press CTRL-Y to copy command into clipboard'"
"--bind 'ctrl-y:execute-silent(echo -n {2..} | wl-copy)+abort'"
];
defaultCommand = "fd --type f --exclude .git --follow --hidden";
changeDirWidgetCommand = "fd --type d --exclude .git --follow --hidden";
};
programs.fzf =
{
enable = true;
enableFishIntegration = true;
colors = {
"fg" = "#${config.colorScheme.palette.base05}";
"bg" = "#${config.colorScheme.palette.base00}";
"hl" = "#${config.colorScheme.palette.base0E}";
"fg+" = "#${config.colorScheme.palette.base05}";
"bg+" = "#${config.colorScheme.palette.base02}";
"hl+" = "#${config.colorScheme.palette.base0E}";
"info" = "#${config.colorScheme.palette.base09}";
"prompt" = "#${config.colorScheme.palette.base0B}";
"pointer" = "#${config.colorScheme.palette.base08}";
"marker" = "#${config.colorScheme.palette.base08}";
"spinner" = "#${config.colorScheme.palette.base09}";
"header" = "#${config.colorScheme.palette.base03}";
};
defaultOptions = [
"--preview='bat --color=always -n {}'"
"--bind 'ctrl-/:toggle-preview'"
"--header 'Press CTRL-Y to copy command into clipboard'"
"--bind 'ctrl-y:execute-silent(echo -n {2..} | wl-copy)+abort'"
];
defaultCommand = "fd --type f --exclude .git --follow --hidden";
}
// (
if options.programs.fzf ? changeDirWidget
then {changeDirWidget.command = changeDirWidgetCommand;}
else {inherit changeDirWidgetCommand;}
);
};
}
-30
View File
@@ -1,30 +0,0 @@
# Zellij-ps — project-aware Zellij session manager from m3ta-nixpkgs.
# Delegates to `cli.zellij-ps` — the home-manager module namespace provided by
# m3ta-nixpkgs. Requires m3ta-nixpkgs overlays to be applied to pkgs
# (via home-manager.useGlobalPkgs = true in NixOS, or overlays in standalone).
{
config,
lib,
...
}:
with lib; let
cfg = config.base.cliTools.zellijPs;
in {
options.base.cliTools.zellijPs = {
# Enabled by default — base modules are always-on.
enable = (mkEnableOption "enable zellij-ps project session manager") // {default = true;};
projectFolders = mkOption {
type = types.listOf types.path;
description = "Project root folders scanned by zellij-ps.";
default = ["${config.home.homeDirectory}/p"];
};
};
config = mkIf cfg.enable {
cli.zellij-ps = {
enable = true;
projectFolders = cfg.projectFolders;
};
};
}
+3 -1
View File
@@ -11,6 +11,8 @@ in {
options.desktop.apps.office.enable = mkEnableOption "install office and paperwork apps";
config = mkIf cfg.enable {
home.packages = [pkgs.libreoffice-fresh];
# libreoffice-fresh warns: upstream changed versioning; -stable is the
# supported attr now.
home.packages = [pkgs.libreoffice-stable];
};
}
+16 -2
View File
@@ -4,7 +4,20 @@
m3taHomeInputs,
pkgs,
...
}: {
}: let
# WORKAROUND (2026-09-12): hermes-agent v2026.8.31 pins a stale hash for
# the Electron 43.6.0 headers artifact (the CDN swapped the file). Build
# the desktop app from a local copy of upstream's nix/desktop.nix with
# the verified hash. Remove when upstream fixes it and the input is bumped.
hermesDesktopFixed = let
hermesAgent = m3taHomeInputs.hermes-agent.packages.${pkgs.stdenv.hostPlatform.system}.default;
in
pkgs.callPackage ./hermes-desktop.nix {
inherit hermesAgent;
hermesNpmLib = hermesAgent.hermesNpmLib;
hermesSrc = m3taHomeInputs.hermes-agent.outPath;
};
in {
imports = [
./wm
./apps
@@ -57,6 +70,7 @@
];
pointerCursor = {
enable = true;
gtk.enable = true;
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
@@ -71,7 +85,7 @@
(element-desktop.override {
commandLineArgs = "--password-store=gnome-libsecret";
})
m3taHomeInputs.hermes-agent.packages.${pkgs.stdenv.hostPlatform.system}.desktop
hermesDesktopFixed
launch-webapp
file-roller
gsettings-desktop-schemas
@@ -0,0 +1,244 @@
# hermes-desktop.nix — local copy of hermes-agent's nix/desktop.nix
#
# WORKAROUND for an upstream build failure (hermes-agent v2026.8.31):
#
# Upstream pins sha256-f8bSbLRmtbP93CJAvEBs+sHWDZ1xP2bcpLhC1EnOmZU=
# for https://artifacts.electronjs.org/headers/dist/v43.6.0/node-v43.6.0-headers.tar.gz
# The Electron CDN swapped that artifact, so the pinned hash no longer
# matches what the server serves today (verified 2026-09-12 via
# `nix store prefetch-file`). Upstream has fixed this class of breakage
# repeatedly ("fix electron headers sha" commits); main is not fixed yet.
#
# Differences from upstream nix/desktop.nix:
# 1. electron headers sha256 per electron version, with a clear throw
# for unknown versions (upstream hardcodes one hash).
# 2. icon.png / linux_desktop_entry.py resolve against `hermesSrc`
# (the flake input checkout) instead of relative repo paths.
#
# REMOVE THIS FILE and the hermesDesktopFixed let-binding in default.nix
# once upstream ships the corrected hash and the hermes-agent input is
# bumped past that release.
{
pkgs,
lib,
stdenv,
makeWrapper,
hermesNpmLib,
electron,
hermesAgent,
python3,
# Checkout of the hermes-agent flake input (outPath), used for files
# that upstream references with relative paths inside its own repo.
hermesSrc,
# Environment to bake into the launcher. A GUI launcher reads none of the
# shell profile, so a variable that an interactive shell exports does not
# reach an app that the desktop menu starts. The Home Manager module passes
# HERMES_HOME and HERMES_MANAGED here, which gives the app the same state
# directory as the services.
extraEnv ? {},
# Shell lines to run before the app starts. A secret belongs here and never
# in extraEnv: makeWrapper writes a --set value into the Nix store, which
# all users can read. A --run line reads the value from a runtime path at
# each start instead.
extraRun ? [],
...
}: let
# Each flag goes on its own continued line, and the leading backslash is
# inside the generated string. An empty attribute set then adds no text
# at all, and cannot leave a backslash above a blank line. That fault ends the
# makeWrapper command early, and the next flag runs as a shell command.
extraEnvFlags = lib.concatMapStrings (
name: " \\\n --set ${name} ${lib.escapeShellArg (toString extraEnv.${name})}"
) (lib.attrNames extraEnv);
extraRunFlags = lib.concatMapStrings (line: " \\\n --run ${lib.escapeShellArg line}") extraRun;
# Electron's CDN has re-uploaded header artifacts for the same version
# before, which silently changes their hash. Keep one verified hash per
# electron version and fail loudly (instead of with a cryptic FOD
# mismatch) whenever a bump needs a new one.
electronHeaderHashes = {
"43.6.0" = "sha256-xDgc5PpkcLpWHnlqVcjBD3SxJKtkUoSGLnJaSSrxJtI=";
};
electronHeaders = pkgs.fetchurl {
url = "https://artifacts.electronjs.org/headers/dist/v${electron.version}/node-v${electron.version}-headers.tar.gz";
sha256 =
electronHeaderHashes.${
electron.version
}
or (throw ''
hermes-desktop workaround: no verified Electron headers hash for version ${electron.version}.
Run: nix store prefetch-file https://artifacts.electronjs.org/headers/dist/v${electron.version}/node-v${electron.version}-headers.tar.gz
and add it to electronHeaderHashes in profiles/contexts/desktop/hermes-desktop.nix (m3ta-home).
'');
};
# node-pty ships no Electron-tagged prebuild we can trust to match this
# exact nixpkgs electron version, so it's always compiled from source
# against Electron's own headers (not whatever Node ran `npm`).
targetPlatform =
if stdenv.hostPlatform.isDarwin
then "darwin"
else if stdenv.hostPlatform.isLinux
then "linux"
else throw "hermes-desktop: unsupported host platform for node-pty staging";
targetArch =
if stdenv.hostPlatform.isAarch64
then "arm64"
else if stdenv.hostPlatform.isx86_64
then "x64"
else throw "hermes-desktop: unsupported host arch for node-pty staging";
# Build the renderer (dist/ + electron/ + package.json).
renderer = hermesNpmLib.buildNpmPackage {
dirs = [
"apps/desktop"
"apps/shared"
];
pname = "hermes-desktop-renderer";
doCheck = true;
buildPhase = ''
runHook preBuild
mkdir -p apps/desktop/build
patchShebangs .
pushd apps/desktop
# typecheck :3
npm exec -- tsc -b
# build the renderer bundle
# vite's emptyOutDir wipes dist/ on every run
# so it has to be first
npm exec -- vite build
# build the electron bundle
node scripts/bundle-electron-main.mjs
# Compile node-pty against Electron's actual ABI (the nixpkgs
# `electron` we ship). Headers come from a pinned fetchurl input
# since the sandbox has no network here, so node-gyp's
# normal --disturl download path can't run.
mkdir -p "$TMPDIR/electron-headers"
tar -xzf ${electronHeaders} -C "$TMPDIR/electron-headers" --strip-components=1
${lib.getExe hermesNpmLib.node-gyp} rebuild \
--directory=../../node_modules/node-pty \
--build-from-source \
--runtime=electron \
--target=${electron.version} \
--nodedir="$TMPDIR/electron-headers" \
--disturl="" \
--offline
# Target platform/arch come from stdenv.hostPlatform, not the
# build host's own process.platform/arch.
node scripts/stage-native-deps.mjs ${targetPlatform} ${targetArch}
popd
runHook postBuild
'';
checkPhase = ''
runHook preCheck
pushd apps/desktop
npm run postbuild
# validate staged node-pty native binary is present.
STAGED_PTY_NODE="./dist/node_modules/node-pty/build/Release/pty.node"
if [ ! -f "$STAGED_PTY_NODE" ]; then
echo "FATAL: Missing staged node-pty native binary at $STAGED_PTY_NODE"
echo "node-pty must be compiled natively"
exit 1
fi
popd
runHook postCheck
'';
installPhase = ''
runHook preInstall
mkdir -p $out
# vite writes to apps/desktop/dist/ (we cd'd there in buildPhase).
# stage-native-deps.mjs stages node-pty into dist/node_modules/node-pty,
# so copying dist/ wholesale carries the native dep along with the
# esbuild bundle that require()s it. apps/desktop/build was created
# before the cd.
cp -rn apps/desktop/dist $out/
echo '{"schemaVersion":1,"commit":"nix-dummy-commit","branch":"nix","dirty":false,"source":"nix"}' > $out/install-stamp.json
cp -n apps/desktop/package.json $out/
runHook postInstall
'';
};
in
# Electron wrapper: nixpkgs' electron binary pointed at the renderer dir.
stdenv.mkDerivation {
pname = "hermes-desktop";
inherit (renderer) version;
dontUnpack = true;
dontBuild = true;
nativeBuildInputs = [
makeWrapper
python3
];
installPhase = ''
runHook preInstall
mkdir -p $out/share/hermes-desktop $out/bin
cp -r ${renderer}/* $out/share/hermes-desktop/
# Standard nixpkgs pattern for electron-builder apps: patch process.resourcesPath
# to point to the app's directory. In Nix, unpackaged electron defaults this
# to the electron distribution's resources path, breaking extraResources lookups.
substituteInPlace $out/share/hermes-desktop/dist/electron-main.mjs \
--replace-fail "process.resourcesPath" "'$out/share/hermes-desktop'"
# Wrap the nixpkgs electron binary to launch our app. Set
# HERMES_DESKTOP_HERMES to the absolute path of the nix-built `hermes`
# binary so the desktop's resolver step 4 ("existing Hermes CLI on
# PATH") uses our fully wrapped binary venv with all deps,
# bundled skills/plugins, runtime PATH (ripgrep/git/ffmpeg/etc).
# No reimplementation of the agent resolver in the wrapper.
makeWrapper ${lib.getExe electron} $out/bin/hermes-desktop \
--add-flags "$out/share/hermes-desktop" \
--set HERMES_DESKTOP_HERMES "${lib.getExe hermesAgent}" \
--set ELECTRON_IS_DEV 0${extraEnvFlags}${extraRunFlags}
# XDG launcher entry
mkdir -p $out/share/applications $out/share/icons/hicolor/1024x1024/apps
install -m 0644 ${hermesSrc}/apps/desktop/assets/icon.png \
$out/share/icons/hicolor/1024x1024/apps/hermes.png
export PYTHONPATH=$(mktemp -d)
cp ${hermesSrc}/hermes_cli/linux_desktop_entry.py "$PYTHONPATH/linux_desktop_entry.py"
export DESKTOP_EXEC="$out/bin/hermes-desktop"
export DESKTOP_ICON="$out/share/icons/hicolor/1024x1024/apps/hermes.png"
python3 -c 'import os; from linux_desktop_entry import render_desktop_entry; print(render_desktop_entry(os.environ["DESKTOP_EXEC"], os.environ["DESKTOP_ICON"]))' > $out/share/applications/hermes.desktop
runHook postInstall
'';
passthru = {
inherit (renderer.passthru) packageJsonPath;
};
meta = with lib; {
description = "Native Electron desktop shell for Hermes Agent";
homepage = "https://github.com/NousResearch/hermes-agent";
license = licenses.mit;
platforms = platforms.unix;
mainProgram = "hermes-desktop";
};
}
+1 -1
View File
@@ -6,7 +6,7 @@
}: {
qt = {
enable = true;
platformTheme.name = "gtk";
platformTheme.name = "gtk3";
};
gtk = {
+448 -184
View File
@@ -6,98 +6,151 @@
}:
with lib; let
cfg = config.desktop.wm.hyprland;
lua = lib.generators.mkLuaInline;
luaString = builtins.toJSON;
mkEnvVar = name: value: {
_args = [
name
value
];
};
modKey = key: lua ''mainMod .. " + ${key}"'';
mkDispatcher = expression: lua expression;
execCmd = command: "hl.dsp.exec_cmd(${luaString command})";
execExpr = expression: "hl.dsp.exec_cmd(${expression})";
mkBinding = keys: dispatcher: {
_args = [
keys
(mkDispatcher dispatcher)
];
};
mkBindingWithOptions = keys: dispatcher: options: {
_args = [
keys
(mkDispatcher dispatcher)
options
];
};
startupCommand = command: {
_args = [
"hyprland.start"
(lua ''
function()
hl.exec_cmd(${luaString command})
end
'')
];
};
focusWorkspace = workspace: "hl.dsp.focus({ workspace = ${luaString workspace} })";
moveToWorkspace = workspace: "hl.dsp.window.move({ workspace = ${luaString workspace} })";
in {
options.desktop.wm.hyprland.enable = mkEnableOption "Hyprland window manager";
config = mkIf cfg.enable {
wayland.windowManager.hyprland = {
configType = "hyprlang";
configType = "lua";
extraLuaFiles."00-dms" = {
autoLoad = true;
content = ''
-- DMS setup/runtime owns these modules. Load only the Lua equivalents
-- of the pre-migration active sources, before local Home Manager
-- settings, preserving the old source-first order without enabling new
-- DMS default binds or rules.
--
-- Keep fresh Home Manager generations usable before DMS has written
-- ~/.config/hypr/dms/*.lua.
local function require_if_present(module)
if package.searchpath(module, package.path) ~= nil then
require(module)
end
end
require_if_present("dms.colors")
require_if_present("dms.layout")
require_if_present("dms.outputs")
require_if_present("dms.binds-user")
'';
};
settings = {
xwayland = {
force_zero_scaling = true;
mainMod = {
_var = "SUPER";
};
source = [
"~/.config/hypr/dms/colors.conf"
"~/.config/hypr/dms/layout.conf"
"~/.config/hypr/dms/outputs.conf"
];
exec-once = [
"vibetyper"
];
env = [
"XCURSOR_SIZE,32"
"HYPRCURSOR_THEME,Bibata-Modern-Ice"
"WLR_NO_HARDWARE_CURSORS,1"
"XDG_CURRENT_DESKTOP,Hyprland"
"XDG_SESSION_TYPE,wayland"
"XDG_SESSION_DESKTOP,Hyprland"
"XKB_DEFAULT_LAYOUT,de"
"NIXOS_OZONE_WL,1"
"QT_QPA_PLATFORM,wayland;xcb"
"QT_QPA_PLATFORMTHEME,gtk3"
"QT_QPA_PLATFORMTHEME_QT6,gtk3"
];
input = {
kb_layout = "us";
kb_variant = "";
kb_model = "";
kb_rules = "";
kb_options = "ctrl:nocaps";
follow_mouse = 1;
terminal = {
_var = "ghostty";
};
general = {
gaps_in = 5;
gaps_out = 5;
border_size = 1;
layout = "dwindle";
};
decoration = {
shadow = {
enabled = true;
range = 60;
render_power = 3;
# color = "rgba(${config.colorScheme.palette.base00}66)";
offset = "1 2";
scale = 0.97;
config = {
xwayland = {
force_zero_scaling = true;
};
rounding = 8;
blur = {
input = {
kb_layout = "us,de";
kb_variant = "";
kb_model = "";
kb_rules = "";
kb_options = "ctrl:nocaps";
follow_mouse = 1;
};
general = {
gaps_in = 5;
gaps_out = 5;
border_size = 1;
layout = "dwindle";
};
decoration = {
shadow = {
enabled = true;
range = 60;
render_power = 3;
# color = "rgba(${config.colorScheme.palette.base00}66)";
offset = "1 2";
scale = 0.97;
};
rounding = 8;
blur = {
enabled = true;
size = 3;
passes = 3;
};
active_opacity = 0.9;
inactive_opacity = 0.5;
};
animations = {
enabled = true;
size = 3;
passes = 3;
};
dwindle = {
# pseudotile = true; # TODO
preserve_split = true;
};
master = {
new_status = "master";
};
active_opacity = 0.9;
inactive_opacity = 0.5;
};
animations = {
enabled = true;
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
};
on = [
(startupCommand "vibetyper")
];
dwindle = {
# pseudotile = true; # TODO
preserve_split = true;
};
master = {
new_status = "master";
};
"env" = [
(mkEnvVar "XCURSOR_SIZE" "32")
(mkEnvVar "HYPRCURSOR_THEME" "Bibata-Modern-Ice")
(mkEnvVar "WLR_NO_HARDWARE_CURSORS" "1")
(mkEnvVar "XDG_CURRENT_DESKTOP" "Hyprland")
(mkEnvVar "XDG_SESSION_TYPE" "wayland")
(mkEnvVar "XDG_SESSION_DESKTOP" "Hyprland")
(mkEnvVar "XKB_DEFAULT_LAYOUT" "de")
(mkEnvVar "NIXOS_OZONE_WL" "1")
(mkEnvVar "QT_QPA_PLATFORM" "wayland;xcb")
(mkEnvVar "QT_QPA_PLATFORMTHEME" "gtk3")
(mkEnvVar "QT_QPA_PLATFORMTHEME_QT6" "gtk3")
];
device = [
# Alle normalen Keyboards explizit auf de setzen:
{
name = "video-bus";
kb_layout = "de,us";
@@ -120,135 +173,346 @@ in {
}
{
name = "keychron-keychron-k7";
kb_layout = "us";
kb_layout = "us,de";
kb_options = "ctrl:nocaps";
}
# Moonlander Sub-Devices bleiben us (erben global)
# Moonlander Sub-Devices bleiben us zuerst (de als zweites Layout):
{
name = "zsa-technology-labs-moonlander-mark-i-consumer-control";
kb_layout = "us";
kb_layout = "us,de";
kb_options = "ctrl:nocaps";
}
{
name = "zsa-technology-labs-moonlander-mark-i-keyboard";
kb_layout = "us";
kb_layout = "us,de";
kb_options = "ctrl:nocaps";
}
{
name = "zsa-technology-labs-moonlander-mark-i-system-control";
kb_layout = "us";
kb_layout = "us,de";
kb_options = "ctrl:nocaps";
}
{
name = "asustek-computer-inc.-gz302ea-keyboard";
kb_layout = "de,us";
kb_options = "ctrl:nocaps";
}
{
name = "asustek-computer-inc.-gz302ea-keyboard-2";
kb_layout = "de,us";
kb_options = "ctrl:nocaps";
}
];
windowrule = [
"match:class file_progress, float on"
"match:class confirm, float on"
"match:class dialog, float on"
"match:class download, float on"
"match:class notification, float on"
"match:class error, float on"
"match:class splash, float on"
"match:class confirmreset, float on"
"match:title Open File, float on"
"match:title branchdialog, float on"
"match:class pavucontrol-qt, float on"
"match:class pavucontrol, float on"
"match:class class:^(espanso)$, float on"
"match:class wlogout, fullscreen on"
"match:title wlogout, float on"
"match:title wlogout, fullscreen on"
"match:class mpv, float on"
"match:class mpv, idle_inhibit focus"
"match:class mpv, opacity 1.0 override"
"match:title ^(Media viewer)$, float on"
"match:title ^(Volume Control)$, float on"
"match:title ^(Picture-in-Picture)$, float on"
"match:title ^(floating-pomodoro)$, float on"
"match:title ^(floating-pomodoro)$, size 250 50"
"match:title ^(floating-pomodoro)$, move 12 (monitor_h-150)"
"match:title ^(floating-pomodoro)$, pin on"
"match:initial_title .*streamlabs.com.*, float on"
"match:initial_title .*streamlabs.com.*, pin on"
"match:initial_title .*streamlabs.com.*, size 800 400"
"match:initial_title .*alert-box.*, move 100%-820 102"
"match:initial_title .*chat-box.*, move 100%-820 512"
"match:initial_title .*streamlabs.com.*, opacity 0.5 override"
"match:initial_title .*streamlabs.com.*, idle_inhibit focus"
"match:initial_title .*streamlabs.com.*, no_anim on"
"match:initial_title .*streamlabs.com.*, decorate off"
"match:initial_title .*streamlabs.com.*, no_shadow on"
"match:initial_title .*streamlabs.com.*, no_blur on"
"match:class ^vibe-typer$, match:title ^Recording Indicator$, no_blur on"
"match:class ^vibe-typer$, match:title ^Recording Indicator$, no_shadow on"
"match:class ^vibe-typer$, match:title ^Recording Indicator$, no_anim on"
"match:class ^vibe-typer$, match:title ^Recording Indicator$, border_size 0"
"match:class ^vibe-typer$, match:title ^Recording Indicator$, no_focus on"
"border_color rgb(ffffff), match:xwayland 1"
curve = {
_args = [
"myBezier"
(lua ''{ type = "bezier", points = { { 0.05, 0.9 }, { 0.1, 1.05 } } }'')
];
};
animation = [
{
leaf = "windows";
enabled = true;
speed = 7;
bezier = "myBezier";
}
{
leaf = "windowsOut";
enabled = true;
speed = 7;
bezier = "default";
style = "popin 80%";
}
{
leaf = "border";
enabled = true;
speed = 10;
bezier = "default";
}
{
leaf = "borderangle";
enabled = true;
speed = 8;
bezier = "default";
}
{
leaf = "fade";
enabled = true;
speed = 7;
bezier = "default";
}
{
leaf = "workspaces";
enabled = true;
speed = 6;
bezier = "default";
}
];
"$mainMod" = "SUPER";
"$terminal" = "ghostty";
bind = [
"$mainMod, return, exec, $terminal nu -c zellij-ps"
"$mainMod, t, exec, $terminal -e nu -c 'nitch; exec nu'"
"$mainMod SHIFT, t, exec, launch-timer"
"$mainMod, n, exec, $terminal -e nvim"
"$mainMod, z, exec, uwsm app -- zeditor"
"$mainMod, o, exec, hyprctl dispatch setprop activewindow opaque toggle"
"$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 SHIFT, B, exec, uwsm app -- vivaldi"
"$mainMod, Escape, exec, uwsm app -- dms ipc call powermenu toggle"
# "$mainMod, Space, togglefloating"
"$mainMod, q, killactive"
"$mainMod, M, exit"
"$mainMod, F, fullscreen"
"$mainMod SHIFT, V, togglefloating"
"$mainMod, D, exec, uwsm app -- dms ipc call spotlight toggle"
"$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 SHIFT, S, exec, uwsm app -- rofi -show emoji"
"$mainMod, P, exec, uwsm app -- rofi-pass"
"$mainMod SHIFT, P, pseudo"
"$mainMod, R, exec, stt-ptt start"
"$mainMod, S, exec, stt-ptt start"
# "$mainMod, J, togglesplit" # TODO
"$mainMod, h, movefocus, l"
"$mainMod, l, movefocus, r"
"$mainMod, k, movefocus, u"
"$mainMod, j, movefocus, d"
"$mainMod, 1, workspace, 1"
"$mainMod, 2, workspace, 2"
"$mainMod, 3, workspace, 3"
"$mainMod, 4, workspace, 4"
"$mainMod, 5, workspace, 5"
"$mainMod, 6, workspace, 6"
"$mainMod, 7, workspace, 7"
"$mainMod, 8, workspace, 8"
"$mainMod, 9, workspace, 9"
"$mainMod, 0, workspace, 10"
"$mainMod SHIFT, 1, movetoworkspace, 1"
"$mainMod SHIFT, 2, movetoworkspace, 2"
"$mainMod SHIFT, 3, movetoworkspace, 3"
"$mainMod SHIFT, 4, movetoworkspace, 4"
"$mainMod SHIFT, 5, movetoworkspace, 5"
"$mainMod SHIFT, 6, movetoworkspace, 6"
"$mainMod SHIFT, 7, movetoworkspace, 7"
"$mainMod SHIFT, 8, movetoworkspace, 8"
"$mainMod SHIFT, 9, movetoworkspace, 9"
"$mainMod SHIFT, 0, movetoworkspace, 10"
"$mainMod, mouse_down, workspace, e+1"
"$mainMod, mouse_up, workspace, e-1"
window_rule = [
{
match.class = "file_progress";
float = true;
}
{
match.class = "confirm";
float = true;
}
{
match.class = "dialog";
float = true;
}
{
match.class = "download";
float = true;
}
{
match.class = "notification";
float = true;
}
{
match.class = "error";
float = true;
}
{
match.class = "splash";
float = true;
}
{
match.class = "confirmreset";
float = true;
}
{
match.title = "Open File";
float = true;
}
{
match.title = "branchdialog";
float = true;
}
{
match.class = "pavucontrol-qt";
float = true;
}
{
match.class = "pavucontrol";
float = true;
}
{
match.class = "class:^(espanso)$";
float = true;
}
{
match.class = "wlogout";
fullscreen = true;
}
{
match.title = "wlogout";
float = true;
}
{
match.title = "wlogout";
fullscreen = true;
}
{
match.class = "mpv";
float = true;
}
{
match.class = "mpv";
idle_inhibit = "focus";
}
{
match.class = "mpv";
opacity = "1.0 override";
}
{
match.title = "^(Media viewer)$";
float = true;
}
{
match.title = "^(Volume Control)$";
float = true;
}
{
match.title = "^(Picture-in-Picture)$";
float = true;
}
{
match.title = "^(floating-pomodoro)$";
float = true;
}
{
match.title = "^(floating-pomodoro)$";
size = "250 50";
}
{
match.title = "^(floating-pomodoro)$";
move = "12 (monitor_h-150)";
}
{
match.title = "^(floating-pomodoro)$";
pin = true;
}
{
match.initial_title = ".*streamlabs.com.*";
float = true;
}
{
match.initial_title = ".*streamlabs.com.*";
pin = true;
}
{
match.initial_title = ".*streamlabs.com.*";
size = "800 400";
}
{
match.initial_title = ".*alert-box.*";
move = "100%-820 102";
}
{
match.initial_title = ".*chat-box.*";
move = "100%-820 512";
}
{
match.initial_title = ".*streamlabs.com.*";
opacity = "0.5 override";
}
{
match.initial_title = ".*streamlabs.com.*";
idle_inhibit = "focus";
}
{
match.initial_title = ".*streamlabs.com.*";
no_anim = true;
}
{
match.initial_title = ".*streamlabs.com.*";
decorate = false;
}
{
match.initial_title = ".*streamlabs.com.*";
no_shadow = true;
}
{
match.initial_title = ".*streamlabs.com.*";
no_blur = true;
}
{
match = {
class = "^vibe-typer$";
title = "^Recording Indicator$";
};
# 1.5.x renders a small bottom-center panel, not a fullscreen overlay.
# Without float it gets tiled by dwindle and clipped to tile size.
float = true;
}
{
match = {
class = "^vibe-typer$";
title = "^Recording Indicator$";
};
pin = true;
}
{
match = {
class = "^vibe-typer$";
title = "^Recording Indicator$";
};
no_blur = true;
}
{
match = {
class = "^vibe-typer$";
title = "^Recording Indicator$";
};
no_shadow = true;
}
{
match = {
class = "^vibe-typer$";
title = "^Recording Indicator$";
};
no_anim = true;
}
{
match = {
class = "^vibe-typer$";
title = "^Recording Indicator$";
};
border_size = 0;
}
{
match = {
class = "^vibe-typer$";
title = "^Recording Indicator$";
};
no_focus = true;
}
{
match.xwayland = true;
border_color = "rgb(ffffff)";
}
];
bindr = [
];
bindm = [
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
"bind" = [
# mainMod + return intentionally remains disabled from the previous config.
(mkBinding (modKey "t") (execExpr ''terminal .. " -e nu -c 'nitch; exec nu'"''))
(mkBinding (modKey "SHIFT + t") (execCmd "launch-timer"))
(mkBinding (modKey "n") (execExpr ''terminal .. " -e nvim"''))
(mkBinding (modKey "z") (execCmd "uwsm app -- zeditor"))
(mkBinding (modKey "o") ''hl.dsp.window.set_prop({ prop = "opaque", value = "toggle" })'')
(mkBinding (modKey "r") (
execCmd ''hyprctl dispatch focuswindow "initialtitle:.*alert-box.*" && hyprctl dispatch moveactive exact 4300 102 && hyprctl dispatch focuswindow "initialtitle:.*chat-box.*" && hyprctl dispatch moveactive exact 4300 512''
))
(mkBinding (modKey "b") (execCmd "uwsm app -- thunar"))
(mkBinding (modKey "SHIFT + B") (execCmd "uwsm app -- vivaldi"))
(mkBinding (modKey "Escape") (execCmd "uwsm app -- dms ipc call powermenu toggle"))
(mkBinding (modKey "q") "hl.dsp.window.close()")
(mkBinding (modKey "M") "hl.dsp.exit()")
(mkBinding (modKey "F") "hl.dsp.window.fullscreen({})")
(mkBinding (modKey "SHIFT + V") ''hl.dsp.window.float({ action = "toggle" })'')
(mkBinding (modKey "D") (execCmd "uwsm app -- dms ipc call spotlight toggle"))
(mkBinding (modKey "V") (execCmd "uwsm app -- dms ipc call clipboard toggle"))
(mkBinding (modKey "C") (
execCmd "bash -c 'FILE=/tmp/screenshot_$(date +%s).png; grim -g \"$(slurp)\" \"$FILE\" && ksnip \"$FILE\"'"
))
(mkBinding (modKey "SHIFT + S") (execCmd "uwsm app -- rofi -show emoji"))
(mkBinding (modKey "P") (execCmd "uwsm app -- rofi-pass"))
(mkBinding (modKey "SHIFT + P") "hl.dsp.window.pseudo({})")
(mkBinding (modKey "R") (execCmd "stt-ptt start"))
(mkBinding (modKey "S") (execCmd "stt-ptt start"))
(mkBinding (modKey "h") ''hl.dsp.focus({ direction = "l" })'')
(mkBinding (modKey "l") ''hl.dsp.focus({ direction = "r" })'')
(mkBinding (modKey "k") ''hl.dsp.focus({ direction = "u" })'')
(mkBinding (modKey "j") ''hl.dsp.focus({ direction = "d" })'')
(mkBinding (modKey "1") (focusWorkspace "1"))
(mkBinding (modKey "2") (focusWorkspace "2"))
(mkBinding (modKey "3") (focusWorkspace "3"))
(mkBinding (modKey "4") (focusWorkspace "4"))
(mkBinding (modKey "5") (focusWorkspace "5"))
(mkBinding (modKey "6") (focusWorkspace "6"))
(mkBinding (modKey "7") (focusWorkspace "7"))
(mkBinding (modKey "8") (focusWorkspace "8"))
(mkBinding (modKey "9") (focusWorkspace "9"))
(mkBinding (modKey "0") (focusWorkspace "10"))
(mkBinding (modKey "SHIFT + 1") (moveToWorkspace "1"))
(mkBinding (modKey "SHIFT + 2") (moveToWorkspace "2"))
(mkBinding (modKey "SHIFT + 3") (moveToWorkspace "3"))
(mkBinding (modKey "SHIFT + 4") (moveToWorkspace "4"))
(mkBinding (modKey "SHIFT + 5") (moveToWorkspace "5"))
(mkBinding (modKey "SHIFT + 6") (moveToWorkspace "6"))
(mkBinding (modKey "SHIFT + 7") (moveToWorkspace "7"))
(mkBinding (modKey "SHIFT + 8") (moveToWorkspace "8"))
(mkBinding (modKey "SHIFT + 9") (moveToWorkspace "9"))
(mkBinding (modKey "SHIFT + 0") (moveToWorkspace "10"))
(mkBinding (modKey "mouse_down") (focusWorkspace "e+1"))
(mkBinding (modKey "mouse_up") (focusWorkspace "e-1"))
(mkBindingWithOptions (modKey "mouse:272") "hl.dsp.window.drag()" {mouse = true;})
(mkBindingWithOptions (modKey "mouse:273") "hl.dsp.window.resize()" {mouse = true;})
(mkBinding (modKey "SPACE") (execCmd "hyprctl switchxkblayout current next"))
];
};
};
@@ -26,6 +26,9 @@
mattpocock.skills = {
all = true;
};
okf.skills = {
all = true;
};
superpowers.skills = {
all = true;
};
+30 -20
View File
@@ -29,51 +29,61 @@
programs.mcp = {
enable = true;
servers = {
ContextMode = {
command = "bash";
args = ["-c" "exec bunx context-mode@latest"];
};
DeepWiki = {
url = "https://mcp.deepwiki.com/mcp";
};
Ref = {
command = "bash";
args = ["-c" "REF_API_KEY=$(cat /run/agenix/ref-key) exec bunx ref-tools-mcp@latest"];
};
Exa = {
command = "bash";
args = ["-c" "EXA_API_KEY=$(cat /run/agenix/exa-key) exec bunx exa-mcp-server@latest tools=web_search_exa"];
};
SallyAI = {
url = "https://app.sally.io/api/v1/McpExternal";
};
Outline = {
url = "https://wiki.az-gruppe.com/mcp";
};
ContextMode = {
command = "bash";
args = ["-c" "exec bunx context-mode@latest"];
};
Honcho = {
command = "bash";
args = [
"-c"
''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"];
};
Ref = {
command = "bash";
args = ["-c" "REF_API_KEY=$(cat /run/agenix/ref-key) exec bunx ref-tools-mcp@latest"];
};
Teams = {
command = "bunx";
args = ["-y" "@floriscornel/teams-mcp@latest"];
};
};
};
# NOTE: llm-agent packages are consumed via the `llm-agents` namespace
# (pkgs.llm-agents.*), provided by numtide/llm-agents.nix's
# `overlays.shared-nixpkgs`. The consumer's nixos-config MUST apply that
# overlay — namespaced refs fail loudly if it is missing, instead of
# silently falling back to (outdated) nixpkgs attributes.
home.packages = with pkgs; [
agenix-cli
agent-browser
llm-agents.agent-browser
m3taHomeInputs.agent-lib.packages.${pkgs.stdenv.hostPlatform.system}.agent-lib-cli
beads
llm-agents.beads
buzz
crunch
docker-sbx
llm-agents.herdr
pi-coding-agent
(qmd.override {
(llm-agents.qmd.override {
vulkanSupport = videoDrivers == ["amdgpu"];
cudaSupport = videoDrivers == ["nvidia"];
})
# opencode-desktop
opencode-desktop
openshell
openspec
llm-agents.openspec
openwork
talk
];
}
+32 -17
View File
@@ -4,25 +4,34 @@
ohMyOpencodeSettings = {
agents = {
sisyphus.model = "litellm/claude-opus-4-8";
oracle.model = "litellm/claude-sonnet-4-6";
librarian.model = "litellm/claude-sonnet-4-6";
explore.model = "litellm/claude-haiku-4-5";
multimodal-looker.model = "litellm/gpt-5.3-codex";
# Primary worker: GLM-5.3 (1M ctx, beats Opus 4.8 on token efficiency).
sisyphus.model = "zai-coding-plan/glm-5.3";
# Planning + deep analysis: strongest reasoning tier.
prometheus.model = "litellm/claude-opus-4-8";
metis.model = "litellm/claude-opus-4-8";
momus.model = "litellm/claude-opus-4-8";
atlas.model = "litellm/claude-sonnet-4-8";
# Verification + docs research: best tool-use quality.
oracle.model = "litellm/claude-sonnet-5";
librarian.model = "litellm/claude-sonnet-5";
# High-volume parallel codebase scans: speed-tuned GLM on flat rate.
explore.model = "zai-coding-plan/glm-5-turbo";
# Vision: GLM-5.3 is text-only -> cheap capable Claude Haiku.
multimodal-looker.model = "litellm/claude-haiku-4-5";
# Critic + navigator: flagship GLM on flat rate.
momus.model = "zai-coding-plan/glm-5.3";
atlas.model = "zai-coding-plan/glm-5.3";
};
categories = {
visual-engineering.model = "zai-coding-plan/glm-5.2";
# Volume categories -> flat-rate GLM-5.3 (1M ctx).
visual-engineering.model = "zai-coding-plan/glm-5.3";
artistry.model = "zai-coding-plan/glm-5.3";
writing.model = "zai-coding-plan/glm-5.3";
# Long deep-work sessions -> GLM-5.3 1M ctx beats Sonnet 200k.
deep.model = "zai-coding-plan/glm-5.3";
# Deliberately pay-per-token for top quality:
ultrabrain.model = "litellm/claude-opus-4-8";
deep.model = "litellm/claude-sonnet-4-6";
artistry.model = "zai-coding-plan/glm-5.2";
quick.model = "litellm/claude-haiku-4-5";
unspecified-low.model = "litellm/claude-sonnet-4-6";
unspecified-high.model = "litellm/claude-opus-4-8";
writing.model = "zai-coding-plan/glm-5.2";
unspecified-low.model = "litellm/claude-sonnet-5";
quick.model = "litellm/claude-haiku-4-5";
};
};
};
@@ -194,6 +203,13 @@
output = 128000;
};
};
"gpt-5.6-sol" = {
name = "GPT-5.6 Sol";
limit = {
context = 400000;
output = 128000;
};
};
"gpt-5.3-codex" = {
name = "GPT-5.3 Codex";
limit = {
@@ -214,12 +230,11 @@
output = 64000;
};
};
"claude-sonnet-4-6" = {
name = "Claude Sonnet 4.6";
"claude-sonnet-5" = {
name = "Claude Sonnet 5";
options = {
thinking = {
type = "enabled";
budget_tokens = 16000;
type = "adaptive";
};
};
limit = {
-2
View File
@@ -7,7 +7,6 @@
"npm:@dreadedzombie/pi-init"
"git:github.com/a5c-ai/babysitter-pi"
"npm:@plannotator/pi-extension"
"npm:@thesethrose/pi-zai-provider"
"npm:pi-agent-browser-native"
"npm:pi-beads-extension"
"npm:pi-lens"
@@ -18,7 +17,6 @@
"npm:pi-subagents"
"npm:pi-tool-display"
"npm:pi-web-access"
"git:github.com/hk-vk/pi-connect"
];
defaultProvider = "openai-codex";
@@ -17,9 +17,6 @@ in {
bun
];
home.file.".npmrc".text = ''
prefix=${npmGlobalPrefix}
'';
home.sessionVariables.NPM_CONFIG_PREFIX = npmGlobalPrefix;
};
}
+1
View File
@@ -1,6 +1,7 @@
# Gaming profile aggregator — Steam platform, Gamescope session, and AMD GPU tools.
{...}: {
imports = [
./emulators.nix
./steam.nix
./gamescope.nix
./gpu.nix
+18
View File
@@ -0,0 +1,18 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.profiles.gaming.emulators;
in {
options.profiles.gaming.emulators.enable = mkEnableOption "Emulators";
config = mkIf cfg.enable {
home.packages = with pkgs; [
shadps4
shadps4-qtlauncher
];
};
}
+1 -1
View File
@@ -15,7 +15,7 @@ in {
amf
ffmpeg_6-full
gst_all_1.gstreamer
gst_all_1.gst-vaapi
gst_all_1.gst-plugins-bad
pamixer
pavucontrol
qpwgraph
+6 -6
View File
@@ -89,17 +89,17 @@
"m3-atlas" = {
HostName = "152.53.85.162";
User = "m3tam3re";
IdentityFile = "~/.ssh/m3tam3re";
IdentityFile = "~/.ssh/m3ta-adm";
};
"m3-hermes" = {
HostName = "204.168.229.93";
User = "m3tam3re";
IdentityFile = "~/.ssh/m3tam3re";
IdentityFile = "~/.ssh/m3ta-adm";
};
"hermes" = {
HostName = "46.224.0.92";
User = "admin";
IdentityFile = "~/.ssh/m3tam3re";
"hermes-agent" = {
HostName = "204.168.229.93";
User = "hermes";
IdentityFile = "~/.ssh/hermes";
};
"m3-zelda" = {
HostName = "95.217.189.186";
+11
View File
@@ -57,6 +57,12 @@
Port = 2022;
IdentityFile = "~/.ssh/sascha.koenig";
};
"AZ-TC-01" = {
HostName = "192.168.153.172";
User = "sascha.koenig";
Port = 22;
IdentityFile = "~/.ssh/sascha.koenig";
};
"git.az-gruppe.com" = {
HostName = "git.az-gruppe.com";
Port = 2022;
@@ -68,6 +74,11 @@
User = "m3tam3re";
IdentityFile = "~/.ssh/sascha.koenig";
};
"hermes-agent" = {
HostName = "204.168.229.93";
User = "hermes";
IdentityFile = "~/.ssh/hermes";
};
};
};
}
+9 -1
View File
@@ -11,7 +11,9 @@
pkgs,
lib,
...
}: {
}: let
npmGlobalPrefix = "${config.home.homeDirectory}/.npm-global";
in {
# ── Clipboard ──
services.cliphist = {
enable = true;
@@ -25,4 +27,10 @@
# These are overridden by the identity module, but provide safe defaults.
home.username = lib.mkDefault "m3tam3re";
home.homeDirectory = lib.mkDefault "/home/${config.home.username}";
home.file.".npmrc".text = ''
prefix=${npmGlobalPrefix}
@m3ta:registry=https://code.m3ta.dev/api/packages/m3tam3re/npm/
//code.m3ta.dev/api/packages/m3tam3re/npm/:_authToken=''${GITEA_TOKEN}
'';
}