Compare commits
15
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2fac7fd6d9 | ||
|
|
cccc0d6a05 | ||
|
|
3397514743 | ||
|
|
89a1584f6f | ||
|
|
45ac13141c | ||
|
|
879bdb3005 | ||
|
|
c692ca1c63 | ||
|
|
2a1dbe540a | ||
|
|
93216125d6 | ||
|
|
690475af84 | ||
|
|
80c49a6727 | ||
|
|
8b495c6bc9 | ||
|
|
9bceb1c6d0 | ||
|
|
a5d321805b | ||
|
|
651b808f15 |
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"nixosConfigDir": "/home/m3tam3re/p/NIX/nixos-config",
|
||||
"m3taHomeDir": "/home/m3tam3re/p/NIX/m3ta-home",
|
||||
"specPath": "/home/m3tam3re/p/NIX/nixos-config/.a5c/inputs/fix-eval-warnings-spec.md"
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
Fix the following Nix/Home Manager evaluation warnings except for the gc/nh conflict warning:
|
||||
|
||||
- `evaluation warning: 'system' has been renamed to/replaced by 'stdenv.hostPlatform.system'`
|
||||
- `evaluation warning: m3tam3re profile: programs.ssh.matchBlocks defined in /nix/store/...-users/m3tam3re/identities/private.nix is deprecated. Use programs.ssh.settings.`
|
||||
|
||||
Do not fix or change the warning:
|
||||
|
||||
- `evaluation warning: programs.nh.clean.enable and nix.gc.automatic are both enabled. Please use one or the other to avoid conflict.`
|
||||
|
||||
The private identity source file is in `/home/m3tam3re/p/NIX/m3ta-home/users/m3tam3re/identities/private.nix`.
|
||||
@@ -0,0 +1,301 @@
|
||||
/**
|
||||
* @process local/fix-nix-eval-warnings
|
||||
* @description Fix Nix/Home Manager evaluation warnings except the nh/gc conflict warning.
|
||||
* @skill systematic-debugging methodologies/superpowers/systematic-debugging.js
|
||||
* @skill verification-before-completion methodologies/superpowers/verification-before-completion.js
|
||||
* @skill root-cause-diagnosis methodologies/shared/root-cause-diagnosis.js
|
||||
*/
|
||||
|
||||
import { defineTask } from '@a5c-ai/babysitter-sdk';
|
||||
|
||||
const q = (value) => `'${String(value).replace(/'/g, `'\\''`)}'`;
|
||||
|
||||
export async function process(inputs, ctx) {
|
||||
const nixosConfigDir = inputs.nixosConfigDir || '/home/m3tam3re/p/NIX/nixos-config';
|
||||
const m3taHomeDir = inputs.m3taHomeDir || '/home/m3tam3re/p/NIX/m3ta-home';
|
||||
const specPath = inputs.specPath || `${nixosConfigDir}/.a5c/inputs/fix-eval-warnings-spec.md`;
|
||||
|
||||
const spec = await ctx.task(readSpecTask, { specPath });
|
||||
|
||||
const inspection = await ctx.task(inspectWarningSourcesTask, {
|
||||
nixosConfigDir,
|
||||
m3taHomeDir,
|
||||
});
|
||||
|
||||
const implementation = await ctx.task(implementFixesTask, {
|
||||
nixosConfigDir,
|
||||
m3taHomeDir,
|
||||
spec: spec.stdout,
|
||||
inspection: inspection.stdout,
|
||||
});
|
||||
|
||||
const formatting = await ctx.task(formatChangedNixTask, {
|
||||
m3taHomeDir,
|
||||
});
|
||||
|
||||
const verification = await ctx.task(verifyWarningsTask, {
|
||||
nixosConfigDir,
|
||||
m3taHomeDir,
|
||||
});
|
||||
|
||||
const artifacts = await ctx.task(collectArtifactsTask, {
|
||||
nixosConfigDir,
|
||||
m3taHomeDir,
|
||||
verifyStdout: verification.stdout || '',
|
||||
verifyStderr: verification.stderr || '',
|
||||
});
|
||||
|
||||
const acceptance = await ctx.task(acceptanceReviewTask, {
|
||||
spec: spec.stdout,
|
||||
artifacts: artifacts.stdout,
|
||||
});
|
||||
|
||||
if (!acceptance.accepted) {
|
||||
await ctx.breakpoint({
|
||||
title: 'Warning fix acceptance review failed',
|
||||
question: `Acceptance review did not approve the changes: ${acceptance.reason}`,
|
||||
context: {
|
||||
runId: ctx.runId,
|
||||
files: [
|
||||
{ path: `${m3taHomeDir}/users/m3tam3re/identities/private.nix`, format: 'nix', label: 'Private SSH identity' },
|
||||
{ path: `${m3taHomeDir}/profiles/sets/coding/agents/agents.nix`, format: 'nix', label: 'Agent packages' },
|
||||
{ path: `${m3taHomeDir}/profiles/contexts/desktop/default.nix`, format: 'nix', label: 'Desktop packages' },
|
||||
],
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
success: acceptance.accepted,
|
||||
summary: implementation.summary,
|
||||
changedFiles: implementation.changedFiles,
|
||||
verification: {
|
||||
formatting: formatting.stdout,
|
||||
warnings: verification.stdout,
|
||||
review: acceptance,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export const readSpecTask = defineTask('read-spec', (args, taskCtx) => ({
|
||||
kind: 'shell',
|
||||
title: 'Read warning-fix spec',
|
||||
shell: {
|
||||
command: `cat ${q(args.specPath)}`,
|
||||
expectedExitCode: 0,
|
||||
timeout: 10000,
|
||||
},
|
||||
io: {
|
||||
inputJsonPath: `tasks/${taskCtx.effectId}/input.json`,
|
||||
outputJsonPath: `tasks/${taskCtx.effectId}/output.json`,
|
||||
},
|
||||
labels: ['spec', 'shell'],
|
||||
}));
|
||||
|
||||
export const inspectWarningSourcesTask = defineTask('inspect-warning-sources', (args, taskCtx) => ({
|
||||
kind: 'shell',
|
||||
title: 'Inspect current warning sources',
|
||||
shell: {
|
||||
command: [
|
||||
'set -euo pipefail',
|
||||
`echo '== nixos-config status =='`,
|
||||
`cd ${q(args.nixosConfigDir)} && git status --short`,
|
||||
`echo`,
|
||||
`echo '== m3ta-home status =='`,
|
||||
`cd ${q(args.m3taHomeDir)} && git status --short`,
|
||||
`echo`,
|
||||
`echo '== active pkgs.system-style package selectors =='`,
|
||||
`grep -RIn --include='*.nix' -E 'packages[.]\\$\\{pkgs[.]system\\}|packages[.]\\$\\{prev[.]system\\}|packages[.]\\$\\{final[.]system\\}' ${q(args.nixosConfigDir)} ${q(args.m3taHomeDir)} || true`,
|
||||
`echo`,
|
||||
`echo '== SSH matchBlocks in m3ta-home identities =='`,
|
||||
`grep -RIn --include='*.nix' 'matchBlocks' ${q(`${args.m3taHomeDir}/users/m3tam3re/identities`)} || true`,
|
||||
].join('\n'),
|
||||
expectedExitCode: 0,
|
||||
timeout: 30000,
|
||||
},
|
||||
io: {
|
||||
inputJsonPath: `tasks/${taskCtx.effectId}/input.json`,
|
||||
outputJsonPath: `tasks/${taskCtx.effectId}/output.json`,
|
||||
},
|
||||
labels: ['diagnosis', 'shell'],
|
||||
}));
|
||||
|
||||
export const implementFixesTask = defineTask('implement-warning-fixes', (args, taskCtx) => ({
|
||||
kind: 'agent',
|
||||
title: 'Implement requested warning fixes',
|
||||
agent: {
|
||||
name: 'worker',
|
||||
prompt: {
|
||||
role: 'Nix/Home Manager maintenance engineer',
|
||||
task: 'Edit the repositories to remove the requested evaluation warnings, excluding the nh/gc warning by request.',
|
||||
context: {
|
||||
nixosConfigDir: args.nixosConfigDir,
|
||||
m3taHomeDir: args.m3taHomeDir,
|
||||
specVerbatim: args.spec,
|
||||
inspectionStdout: args.inspection,
|
||||
},
|
||||
instructions: [
|
||||
'Execute the task fully; do not just provide a plan.',
|
||||
'Do not invoke the babysit skill or create another babysitter run.',
|
||||
'Read every file before editing it.',
|
||||
'Preserve unrelated existing user changes, especially any dirty files in nixos-config such as flake.nix or flake.lock.',
|
||||
'Fix active uses of pkgs.system/prev.system/final.system that trigger the Nixpkgs deprecation warning by using stdenv.hostPlatform.system through the appropriate package set.',
|
||||
'Migrate /home/m3tam3re/p/NIX/m3ta-home/users/m3tam3re/identities/private.nix from programs.ssh.matchBlocks to programs.ssh.settings.',
|
||||
'For programs.ssh.settings, use OpenSSH directive names such as HostName, User, Port, and IdentityFile; do not keep legacy camelCase option names under settings.',
|
||||
'Do not change programs.nh.clean.enable or nix.gc.automatic; the user explicitly excluded that warning.',
|
||||
'Keep the change minimal and focused on the warnings in the spec.',
|
||||
'Run a quick static check of the edited files if practical, but leave deterministic verification to the process quality gate.',
|
||||
],
|
||||
outputFormat: 'JSON with summary, changedFiles, and verificationNotes.',
|
||||
},
|
||||
outputSchema: {
|
||||
type: 'object',
|
||||
required: ['summary', 'changedFiles', 'verificationNotes'],
|
||||
properties: {
|
||||
summary: { type: 'string' },
|
||||
changedFiles: { type: 'array', items: { type: 'string' } },
|
||||
verificationNotes: { type: 'array', items: { type: 'string' } },
|
||||
},
|
||||
},
|
||||
},
|
||||
io: {
|
||||
inputJsonPath: `tasks/${taskCtx.effectId}/input.json`,
|
||||
outputJsonPath: `tasks/${taskCtx.effectId}/output.json`,
|
||||
},
|
||||
labels: ['implementation', 'agent', 'nix'],
|
||||
}));
|
||||
|
||||
export const formatChangedNixTask = defineTask('format-changed-nix', (args, taskCtx) => ({
|
||||
kind: 'shell',
|
||||
title: 'Format changed Nix files',
|
||||
shell: {
|
||||
command: [
|
||||
'set -euo pipefail',
|
||||
`cd ${q(args.m3taHomeDir)}`,
|
||||
`if command -v alejandra >/dev/null 2>&1; then`,
|
||||
` alejandra users/m3tam3re/identities/private.nix profiles/sets/coding/agents/agents.nix profiles/contexts/desktop/default.nix`,
|
||||
`else`,
|
||||
` nix run nixpkgs#alejandra -- users/m3tam3re/identities/private.nix profiles/sets/coding/agents/agents.nix profiles/contexts/desktop/default.nix`,
|
||||
`fi`,
|
||||
].join('\n'),
|
||||
expectedExitCode: 0,
|
||||
timeout: 120000,
|
||||
},
|
||||
io: {
|
||||
inputJsonPath: `tasks/${taskCtx.effectId}/input.json`,
|
||||
outputJsonPath: `tasks/${taskCtx.effectId}/output.json`,
|
||||
},
|
||||
labels: ['format', 'shell'],
|
||||
}));
|
||||
|
||||
export const verifyWarningsTask = defineTask('verify-warning-removal', (args, taskCtx) => ({
|
||||
kind: 'shell',
|
||||
title: 'Verify requested warnings are gone',
|
||||
shell: {
|
||||
command: [
|
||||
'set -euo pipefail',
|
||||
`echo '== static checks =='`,
|
||||
`! grep -RIn --include='*.nix' -E 'packages[.]\\$\\{pkgs[.]system\\}|packages[.]\\$\\{prev[.]system\\}|packages[.]\\$\\{final[.]system\\}' ${q(`${args.m3taHomeDir}/profiles`)} || { echo 'Found deprecated package system selector' >&2; exit 1; }`,
|
||||
`! grep -n 'matchBlocks' ${q(`${args.m3taHomeDir}/users/m3tam3re/identities/private.nix`)} || { echo 'private.nix still uses matchBlocks' >&2; exit 1; }`,
|
||||
`grep -n 'settings = {' ${q(`${args.m3taHomeDir}/users/m3tam3re/identities/private.nix`)}`,
|
||||
`echo`,
|
||||
`echo '== nix eval m3-ares =='`,
|
||||
`cd ${q(args.nixosConfigDir)}`,
|
||||
`eval_stdout=$(mktemp)`,
|
||||
`eval_stderr=$(mktemp)`,
|
||||
`set +e`,
|
||||
`nix eval .#nixosConfigurations.m3-ares.config.system.build.toplevel.drvPath --show-trace >"$eval_stdout" 2>"$eval_stderr"`,
|
||||
`status=$?`,
|
||||
`set -e`,
|
||||
`cat "$eval_stdout"`,
|
||||
`cat "$eval_stderr" >&2`,
|
||||
`if [ "$status" -ne 0 ]; then exit "$status"; fi`,
|
||||
`if grep -F "'system' has been renamed" "$eval_stderr"; then echo 'Deprecated system warning still present' >&2; exit 1; fi`,
|
||||
`if grep -F 'programs.ssh.matchBlocks' "$eval_stderr"; then echo 'Deprecated SSH matchBlocks warning still present' >&2; exit 1; fi`,
|
||||
`if grep -F 'programs.nh.clean.enable and nix.gc.automatic' "$eval_stderr" >/dev/null; then echo 'Allowed nh/gc warning remains by request.'; fi`,
|
||||
].join('\n'),
|
||||
expectedExitCode: 0,
|
||||
timeout: 300000,
|
||||
},
|
||||
io: {
|
||||
inputJsonPath: `tasks/${taskCtx.effectId}/input.json`,
|
||||
outputJsonPath: `tasks/${taskCtx.effectId}/output.json`,
|
||||
},
|
||||
labels: ['verification', 'shell', 'nix'],
|
||||
}));
|
||||
|
||||
export const collectArtifactsTask = defineTask('collect-artifacts', (args, taskCtx) => ({
|
||||
kind: 'shell',
|
||||
title: 'Collect diffs and verification output',
|
||||
shell: {
|
||||
command: [
|
||||
'set -euo pipefail',
|
||||
`echo '== m3ta-home diff =='`,
|
||||
`cd ${q(args.m3taHomeDir)} && git diff -- users/m3tam3re/identities/private.nix profiles/sets/coding/agents/agents.nix profiles/contexts/desktop/default.nix`,
|
||||
`echo`,
|
||||
`echo '== nixos-config diff (should not include warning fix unless needed) =='`,
|
||||
`cd ${q(args.nixosConfigDir)} && git diff -- overlays/default.nix flake.nix flake.lock || true`,
|
||||
`echo`,
|
||||
`echo '== verification stdout =='`,
|
||||
`cat <<'VERIFY_STDOUT'`,
|
||||
args.verifyStdout || '',
|
||||
`VERIFY_STDOUT`,
|
||||
`echo`,
|
||||
`echo '== verification stderr =='`,
|
||||
`cat <<'VERIFY_STDERR'`,
|
||||
args.verifyStderr || '',
|
||||
`VERIFY_STDERR`,
|
||||
].join('\n'),
|
||||
expectedExitCode: 0,
|
||||
timeout: 30000,
|
||||
},
|
||||
io: {
|
||||
inputJsonPath: `tasks/${taskCtx.effectId}/input.json`,
|
||||
outputJsonPath: `tasks/${taskCtx.effectId}/output.json`,
|
||||
},
|
||||
labels: ['artifacts', 'shell'],
|
||||
}));
|
||||
|
||||
export const acceptanceReviewTask = defineTask('acceptance-review', (args, taskCtx) => ({
|
||||
kind: 'agent',
|
||||
title: 'Review changes against requested warning fixes',
|
||||
agent: {
|
||||
name: 'reviewer',
|
||||
prompt: {
|
||||
role: 'Acceptance reviewer for a Nix/Home Manager warning fix',
|
||||
task: 'Compare SPEC to ARTIFACTS directly and decide whether the requested warnings were fixed without touching the excluded nh/gc warning.',
|
||||
instructions: [
|
||||
'Ignore any narrative in your context about how ARTIFACTS were built.',
|
||||
'Do not ask for additional changes unless they are required by the SPEC.',
|
||||
'Accept if the system deprecation warning and private SSH matchBlocks warning are addressed, and the nh/gc conflict remains untouched.',
|
||||
'',
|
||||
'SPEC (verbatim):',
|
||||
'---',
|
||||
args.spec,
|
||||
'---',
|
||||
'',
|
||||
'ARTIFACTS (verbatim):',
|
||||
'---',
|
||||
args.artifacts,
|
||||
'---',
|
||||
'',
|
||||
'Compare SPEC to ARTIFACTS directly. Ignore any narrative in your context about how ARTIFACTS were built.',
|
||||
],
|
||||
outputFormat: 'JSON with accepted boolean, reason string, and checkedCriteria array.',
|
||||
},
|
||||
outputSchema: {
|
||||
type: 'object',
|
||||
required: ['accepted', 'reason', 'checkedCriteria'],
|
||||
properties: {
|
||||
accepted: { type: 'boolean' },
|
||||
reason: { type: 'string' },
|
||||
checkedCriteria: { type: 'array', items: { type: 'string' } },
|
||||
},
|
||||
},
|
||||
},
|
||||
io: {
|
||||
inputJsonPath: `tasks/${taskCtx.effectId}/input.json`,
|
||||
outputJsonPath: `tasks/${taskCtx.effectId}/output.json`,
|
||||
},
|
||||
labels: ['acceptance', 'agent', 'review'],
|
||||
}));
|
||||
+114
-49
@@ -726,18 +726,44 @@
|
||||
"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 user-invoked skills in this repo.",
|
||||
"name": "ask-matt",
|
||||
"requires": [],
|
||||
"tags": []
|
||||
},
|
||||
"path": "skills/productivity/caveman"
|
||||
"path": "skills/engineering/ask-matt"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"decision-mapping": {
|
||||
"entry": "skills/in-progress/decision-mapping/SKILL.md",
|
||||
"licenseFiles": [
|
||||
"LICENSE"
|
||||
],
|
||||
"metadata": {
|
||||
"description": "Turn a loose idea into a sequenced map of investigation tickets, then drive them to resolution one at a time.",
|
||||
"name": "decision-mapping",
|
||||
"requires": [],
|
||||
"tags": []
|
||||
},
|
||||
"path": "skills/in-progress/decision-mapping"
|
||||
},
|
||||
"design-an-interface": {
|
||||
"entry": "skills/deprecated/design-an-interface/SKILL.md",
|
||||
@@ -752,18 +778,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",
|
||||
@@ -797,7 +836,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": []
|
||||
@@ -810,13 +849,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": "Interview the user relentlessly about a plan or design. Use when the user wants to stress-test a plan before building, or uses any 'grill' trigger phrases.",
|
||||
"name": "grilling",
|
||||
"requires": [],
|
||||
"tags": []
|
||||
},
|
||||
"path": "skills/productivity/grilling"
|
||||
},
|
||||
"handoff": {
|
||||
"entry": "skills/productivity/handoff/SKILL.md",
|
||||
"licenseFiles": [
|
||||
@@ -830,13 +882,26 @@
|
||||
},
|
||||
"path": "skills/productivity/handoff"
|
||||
},
|
||||
"implement": {
|
||||
"entry": "skills/engineering/implement/SKILL.md",
|
||||
"licenseFiles": [
|
||||
"LICENSE"
|
||||
],
|
||||
"metadata": {
|
||||
"description": "Implement a piece of work based on a PRD or set of issues.",
|
||||
"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": []
|
||||
@@ -875,7 +940,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 flesh out a design — a runnable terminal app for state/business-logic questions, or several radically different UI variations toggleable from one route.",
|
||||
"name": "prototype",
|
||||
"requires": [],
|
||||
"tags": []
|
||||
@@ -908,6 +973,19 @@
|
||||
},
|
||||
"path": "skills/deprecated/request-refactor-plan"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"review": {
|
||||
"entry": "skills/in-progress/review/SKILL.md",
|
||||
"licenseFiles": [
|
||||
@@ -940,7 +1018,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": []
|
||||
@@ -966,7 +1044,7 @@
|
||||
"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": []
|
||||
@@ -974,7 +1052,7 @@
|
||||
"path": "skills/engineering/tdd"
|
||||
},
|
||||
"teach": {
|
||||
"entry": "skills/in-progress/teach/SKILL.md",
|
||||
"entry": "skills/productivity/teach/SKILL.md",
|
||||
"licenseFiles": [
|
||||
"LICENSE"
|
||||
],
|
||||
@@ -984,7 +1062,7 @@
|
||||
"requires": [],
|
||||
"tags": []
|
||||
},
|
||||
"path": "skills/in-progress/teach"
|
||||
"path": "skills/productivity/teach"
|
||||
},
|
||||
"to-issues": {
|
||||
"entry": "skills/engineering/to-issues/SKILL.md",
|
||||
@@ -992,7 +1070,7 @@
|
||||
"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.",
|
||||
"description": "Break a plan, spec, or PRD into independently-grabbable issues on the project issue tracker using tracer-bullet vertical slices.",
|
||||
"name": "to-issues",
|
||||
"requires": [],
|
||||
"tags": []
|
||||
@@ -1005,7 +1083,7 @@
|
||||
"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.",
|
||||
"description": "Turn the current conversation into a PRD and publish it to the project issue tracker — no interview, just synthesis of what you've already discussed.",
|
||||
"name": "to-prd",
|
||||
"requires": [],
|
||||
"tags": []
|
||||
@@ -1018,7 +1096,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": []
|
||||
@@ -1038,19 +1116,6 @@
|
||||
},
|
||||
"path": "skills/deprecated/ubiquitous-language"
|
||||
},
|
||||
"write-a-skill": {
|
||||
"entry": "skills/productivity/write-a-skill/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",
|
||||
"requires": [],
|
||||
"tags": []
|
||||
},
|
||||
"path": "skills/productivity/write-a-skill"
|
||||
},
|
||||
"writing-beats": {
|
||||
"entry": "skills/in-progress/writing-beats/SKILL.md",
|
||||
"licenseFiles": [
|
||||
@@ -1077,6 +1142,19 @@
|
||||
},
|
||||
"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": [
|
||||
@@ -1089,26 +1167,13 @@
|
||||
"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:e61c575015dca998709776014f52317e29b49aca42659b635dbc69fb60a7f9e1",
|
||||
"narHash": "sha256:8ee1b06b32fb908c62f89275138af4028c1a2d0827987209a0fffab89cf7595f",
|
||||
"ref": null,
|
||||
"rev": "e3b90b5238f38cdea5996e16861dcae28ef52eda",
|
||||
"rev": "6eeb81b5fcfeeb5bd531dd47ab2f9f2bbea27461",
|
||||
"root": ".",
|
||||
"type": "git",
|
||||
"url": "https://github.com/mattpocock/skills",
|
||||
|
||||
Generated
+301
-107
@@ -43,26 +43,6 @@
|
||||
}
|
||||
},
|
||||
"agent-lib": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780681759,
|
||||
"narHash": "sha256-eszNyFb1If4ePaJD1aQTvHFog8lvpwjCTl8F9rUlXnk=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "9a4ee71b1a9008422266e4364a76ee2f08868b5a",
|
||||
"revCount": 25,
|
||||
"type": "git",
|
||||
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib"
|
||||
}
|
||||
},
|
||||
"agent-lib_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"m3ta-home",
|
||||
@@ -70,11 +50,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780157040,
|
||||
"narHash": "sha256-j2d3nj3FvOlxQ+Zlse+rMo3qHD3m4Gick5uiwtTaA2o=",
|
||||
"lastModified": 1781348569,
|
||||
"narHash": "sha256-1BJtmKSqtD0CD753ZE37RgxvCJK6Iw3iKLDDaS8trY4=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "f63712a9ba03da6e2f591766d0f055aa65e6d237",
|
||||
"revCount": 24,
|
||||
"rev": "75a2ed2533b4d6d8e4a34acd37e83d98d81a5fb0",
|
||||
"revCount": 30,
|
||||
"type": "git",
|
||||
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib"
|
||||
},
|
||||
@@ -104,11 +84,11 @@
|
||||
"agents_2": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1778518220,
|
||||
"narHash": "sha256-6AQs9VZ0/DuD4njPbYHRE4v+SgJc6SBrGwemTWxikVc=",
|
||||
"lastModified": 1780133320,
|
||||
"narHash": "sha256-8AiN9tV9PBb5xblJiPlhumBbKj61qLjzqXXFtkj3vvY=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "b6e1aaa6261c5056d024d8d4785659eaa4e675e6",
|
||||
"revCount": 87,
|
||||
"rev": "920c00313ae242bd93275c30131b9ab1e52ee2fb",
|
||||
"revCount": 88,
|
||||
"type": "git",
|
||||
"url": "https://code.m3ta.dev/m3tam3re/AGENTS"
|
||||
},
|
||||
@@ -120,11 +100,11 @@
|
||||
"agents_3": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1778518220,
|
||||
"narHash": "sha256-6AQs9VZ0/DuD4njPbYHRE4v+SgJc6SBrGwemTWxikVc=",
|
||||
"lastModified": 1780133320,
|
||||
"narHash": "sha256-8AiN9tV9PBb5xblJiPlhumBbKj61qLjzqXXFtkj3vvY=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "b6e1aaa6261c5056d024d8d4785659eaa4e675e6",
|
||||
"revCount": 87,
|
||||
"rev": "920c00313ae242bd93275c30131b9ab1e52ee2fb",
|
||||
"revCount": 88,
|
||||
"type": "git",
|
||||
"url": "https://code.m3ta.dev/m3tam3re/AGENTS"
|
||||
},
|
||||
@@ -320,11 +300,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780290312,
|
||||
"narHash": "sha256-eTAlX0CwgB84Ts3GaBd944A3DRXVMzgA0EqroZBISUo=",
|
||||
"lastModified": 1781152676,
|
||||
"narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "115e5211780054d8a890b41f0b7734cafad54dfe",
|
||||
"rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -364,11 +344,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780281921,
|
||||
"narHash": "sha256-ZDsDl7lTOfM+Le2l6gDyEP3o+KHR3TUCkuxd9hQaLro=",
|
||||
"lastModified": 1781317940,
|
||||
"narHash": "sha256-uMVOhV6pVPgm2hn1WGEbIcJRWjnsyWKy8PHCUn0++iI=",
|
||||
"owner": "AvengeMedia",
|
||||
"repo": "dms-plugin-registry",
|
||||
"rev": "ee4eeacce5a7041ed39f8cd7fe64b6e0e888e73b",
|
||||
"rev": "4ab59f3da3df33bf106045b856db8de875cc42c6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -420,6 +400,28 @@
|
||||
}
|
||||
},
|
||||
"flake-parts_3": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"m3ta-home",
|
||||
"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_4": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"m3ta-home",
|
||||
@@ -441,7 +443,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts_4": {
|
||||
"flake-parts_5": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"nur",
|
||||
@@ -472,16 +474,42 @@
|
||||
"uv2nix": "uv2nix_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780061757,
|
||||
"narHash": "sha256-0CmNH879jnsAAszo1nkkFm8RNE49xtwUditYdFIYBCM=",
|
||||
"lastModified": 1780707343,
|
||||
"narHash": "sha256-ngpkopVczNrT0bfCXHm38QjgrZT96Bm/rO89NA/ls3Y=",
|
||||
"owner": "NousResearch",
|
||||
"repo": "hermes-agent",
|
||||
"rev": "77a1650c78a4cb1813d8a81fa1da40a15b6a3ec5",
|
||||
"rev": "3c231eb3979ab9c57d5cd6d02f1d577a3b718b43",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NousResearch",
|
||||
"ref": "v2026.6.5",
|
||||
"repo": "hermes-agent",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hermes-agent_2": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts_3",
|
||||
"nixpkgs": [
|
||||
"m3ta-home",
|
||||
"nixpkgs"
|
||||
],
|
||||
"npm-lockfile-fix": "npm-lockfile-fix_2",
|
||||
"pyproject-build-systems": "pyproject-build-systems_2",
|
||||
"pyproject-nix": "pyproject-nix_5",
|
||||
"uv2nix": "uv2nix_4"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1781346807,
|
||||
"narHash": "sha256-ytT4ojx0qFW4b/oYeW+MkmaA3b/BZ9pqkPmpAg8j1gg=",
|
||||
"owner": "NousResearch",
|
||||
"repo": "hermes-agent",
|
||||
"rev": "2a5dc0ef3df433a36abed9ee544ea067d807c438",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NousResearch",
|
||||
"ref": "v2026.5.29.2",
|
||||
"repo": "hermes-agent",
|
||||
"type": "github"
|
||||
}
|
||||
@@ -514,11 +542,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780593650,
|
||||
"narHash": "sha256-CHo7k65YTL3HY+WQVedDTupji+LMgNlKCdrtRHZFAK4=",
|
||||
"lastModified": 1782051614,
|
||||
"narHash": "sha256-xBRAhYLEXcjp8hM2tkkTTLb6PWU7VDxDoogl25g7Ezs=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "447fd9ff62501dae7206dfe180ee89f8de27b7d5",
|
||||
"rev": "d1ccd0721ec599866622665f3651e19e6e2d4c6a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -557,11 +585,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780099287,
|
||||
"narHash": "sha256-efIPwVGtIWIjWcznhaop6XN6HxnOL8800hF6CBNvlqQ=",
|
||||
"lastModified": 1781305496,
|
||||
"narHash": "sha256-g8Vv4Qfc7n+lgov97REu3X6BeJtvYY0hlSUZR1GrGQQ=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "7d8127d308c3fb9664f7e643eec944be74ebb37d",
|
||||
"rev": "c87a39aa979acc4848016d2220c6238390d84779",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -602,11 +630,11 @@
|
||||
"treefmt-nix": "treefmt-nix"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780640554,
|
||||
"narHash": "sha256-dgnL2gTgRoO1D4z6wkARGCO/gimq3/UE/mVFcQcWBn8=",
|
||||
"lastModified": 1782068377,
|
||||
"narHash": "sha256-pKjKMGfTGlL+qOfDnV6h1XNXiS3/NXLAM2dnnmLxjsQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "llm-agents.nix",
|
||||
"rev": "f764eba1fdd162a1f2bc923f7e7034b894a22b4a",
|
||||
"rev": "3bf60a513d1ebab0b46aee641b2323394905d543",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -618,10 +646,11 @@
|
||||
"m3ta-home": {
|
||||
"inputs": {
|
||||
"agenix": "agenix_2",
|
||||
"agent-lib": "agent-lib_2",
|
||||
"agent-lib": "agent-lib",
|
||||
"agents": "agents",
|
||||
"dms": "dms",
|
||||
"dms-plugin-registry": "dms-plugin-registry",
|
||||
"hermes-agent": "hermes-agent_2",
|
||||
"home-manager": "home-manager_4",
|
||||
"m3ta-nixpkgs": "m3ta-nixpkgs",
|
||||
"nix-colors": "nix-colors",
|
||||
@@ -631,11 +660,11 @@
|
||||
"nur": "nur"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780420920,
|
||||
"narHash": "sha256-dxcRmexgCX+DlmlFRE/eW3gzdohVU7+JTAkzUzvG/1Y=",
|
||||
"lastModified": 1781945902,
|
||||
"narHash": "sha256-CxhK2GmZVttHJ1ltN+MgOvPPP8Faok6xoz42s6s7YEE=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "19dea8277ef9c473e95e2dc3be367044dfa3f65c",
|
||||
"revCount": 45,
|
||||
"rev": "9cd60383f885e877892e60a3f6034ffd1734c64c",
|
||||
"revCount": 74,
|
||||
"type": "git",
|
||||
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/m3ta-home"
|
||||
},
|
||||
@@ -656,11 +685,11 @@
|
||||
"openspec": "openspec"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779944037,
|
||||
"narHash": "sha256-jO6zAJjgc9n3SeDJW1EbV6CEqOa9DK+2AhTgWc+ImHQ=",
|
||||
"lastModified": 1781500279,
|
||||
"narHash": "sha256-810qVHwu6jVhu01FWj9dXuruK84Gw2smAlbu6FPBfeY=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "ae1fb97c21b311dc03a46e8d50867048e5568c88",
|
||||
"revCount": 323,
|
||||
"rev": "050c273c65b36dc03c34a7547d80e88afff5ac48",
|
||||
"revCount": 327,
|
||||
"type": "git",
|
||||
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/nixpkgs"
|
||||
},
|
||||
@@ -678,11 +707,11 @@
|
||||
"openspec": "openspec_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779944037,
|
||||
"narHash": "sha256-jO6zAJjgc9n3SeDJW1EbV6CEqOa9DK+2AhTgWc+ImHQ=",
|
||||
"lastModified": 1781945761,
|
||||
"narHash": "sha256-WOLjTr1BkFeZDjXmOv+5pSDDvS1tzpd74nirwWxWmps=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "ae1fb97c21b311dc03a46e8d50867048e5568c88",
|
||||
"revCount": 323,
|
||||
"rev": "b50dcf843b13eb6989bc3d9f0c490f509b6f533c",
|
||||
"revCount": 330,
|
||||
"type": "git",
|
||||
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/nixpkgs"
|
||||
},
|
||||
@@ -859,11 +888,11 @@
|
||||
},
|
||||
"nixpkgs-master": {
|
||||
"locked": {
|
||||
"lastModified": 1779457550,
|
||||
"narHash": "sha256-yALoy2CrvwvNfwMtGZDRdc+jqVNHulyuM5iVK12lUAI=",
|
||||
"lastModified": 1781153468,
|
||||
"narHash": "sha256-ZBRmjFtJn/XmHBV230OSabKQqxOoOJunJmBtSt1sLs0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a9c18fd234dbe4fd8de4bac53760b785c47e94ff",
|
||||
"rev": "cd265fd6b43f2ec1257c2e400f648895d2ad7ccd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -875,11 +904,11 @@
|
||||
},
|
||||
"nixpkgs-master_2": {
|
||||
"locked": {
|
||||
"lastModified": 1779457550,
|
||||
"narHash": "sha256-yALoy2CrvwvNfwMtGZDRdc+jqVNHulyuM5iVK12lUAI=",
|
||||
"lastModified": 1781153468,
|
||||
"narHash": "sha256-ZBRmjFtJn/XmHBV230OSabKQqxOoOJunJmBtSt1sLs0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a9c18fd234dbe4fd8de4bac53760b785c47e94ff",
|
||||
"rev": "cd265fd6b43f2ec1257c2e400f648895d2ad7ccd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -891,11 +920,11 @@
|
||||
},
|
||||
"nixpkgs-master_3": {
|
||||
"locked": {
|
||||
"lastModified": 1780675612,
|
||||
"narHash": "sha256-0uf5rIKWl6ljqZtDdYhVpBru9cggmUyoOw+m7IZNKYk=",
|
||||
"lastModified": 1782069111,
|
||||
"narHash": "sha256-glkgCRmN8fQhzguejEAsCvpk+nKJlSUekRrx21L1lS0=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a08eccd152a1534c8e01e69709fd21b108e5be2d",
|
||||
"rev": "3440baec567b76d5dd775696ce135284ed7c2743",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -907,11 +936,11 @@
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1779796641,
|
||||
"narHash": "sha256-ZsIrKmhp4vbBXoXXmR/tBXA/UCsAQiJL9vsgZEduhVY=",
|
||||
"lastModified": 1781509190,
|
||||
"narHash": "sha256-uJZs9Di8I6ciTp6jiojj0HzlNpBkud8ax5aT/O5aJkw=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "25f538306313eae3927264466c70d7001dcea1df",
|
||||
"rev": "d6df3513510aa548c83868fd22bfddd0a8c0a0d4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -955,11 +984,11 @@
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1780365719,
|
||||
"narHash": "sha256-QfWfccTN+70ZQ4m2qlU9PiKfz2Yppq94058iJyARNwc=",
|
||||
"lastModified": 1781607440,
|
||||
"narHash": "sha256-rxO+uc/KFbSJp+pgyXRuAX6QlG9hJdnt0BXpEQRXY+U=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "ffa10e26ae11d676b2db836259889f1f571cb14f",
|
||||
"rev": "3e41b24abd260e8f71dbe2f5737d24122f972158",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1003,11 +1032,11 @@
|
||||
},
|
||||
"nixpkgs_6": {
|
||||
"locked": {
|
||||
"lastModified": 1779560665,
|
||||
"narHash": "sha256-tpyBcxPpcQb8ukyNF7DoCwfSY3VPsxHoYwj00Cayv5o=",
|
||||
"lastModified": 1781074563,
|
||||
"narHash": "sha256-md8WlXOlfnIeHeOScMTTHFyf2d6iaTwPl2apR5EQ3P4=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "64c08a7ca051951c8eae34e3e3cb1e202fe36786",
|
||||
"rev": "9ae611a455b90cf061d8f332b977e387bda8e1ca",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1019,11 +1048,11 @@
|
||||
},
|
||||
"nixpkgs_7": {
|
||||
"locked": {
|
||||
"lastModified": 1778869304,
|
||||
"narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=",
|
||||
"lastModified": 1780749050,
|
||||
"narHash": "sha256-3av0pIjlOWQ6rDbNOmpUSvbNnJkGORQKKjb4LtCZsIY=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d233902339c02a9c334e7e593de68855ad26c4cb",
|
||||
"rev": "a799d3e3886da994fa307f817a6bc705ae538eeb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1051,11 +1080,11 @@
|
||||
},
|
||||
"nixpkgs_9": {
|
||||
"locked": {
|
||||
"lastModified": 1780365719,
|
||||
"narHash": "sha256-QfWfccTN+70ZQ4m2qlU9PiKfz2Yppq94058iJyARNwc=",
|
||||
"lastModified": 1781607440,
|
||||
"narHash": "sha256-rxO+uc/KFbSJp+pgyXRuAX6QlG9hJdnt0BXpEQRXY+U=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "ffa10e26ae11d676b2db836259889f1f571cb14f",
|
||||
"rev": "3e41b24abd260e8f71dbe2f5737d24122f972158",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1086,17 +1115,39 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"npm-lockfile-fix_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"m3ta-home",
|
||||
"hermes-agent",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775903712,
|
||||
"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_3",
|
||||
"flake-parts": "flake-parts_4",
|
||||
"nixpkgs": "nixpkgs_6"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780290189,
|
||||
"narHash": "sha256-2igu6l2/d4RikYmC/SsykZ1jF1e4+Df+2qWPYjq2xto=",
|
||||
"lastModified": 1781346642,
|
||||
"narHash": "sha256-o92OOSMAB08HQgG7pW2BZVIO53Pkv4oAjLk4Iol3Iko=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"rev": "8b6210602dcbd4409ab1c3453ea0c292637c2799",
|
||||
"rev": "6e4e8d731fbb3831296607d5f88de727cf7bf6de",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1107,17 +1158,17 @@
|
||||
},
|
||||
"nur_2": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts_4",
|
||||
"flake-parts": "flake-parts_5",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780667345,
|
||||
"narHash": "sha256-JkFBPvT91un8Hq2wrMJxcJgiWwpIl6X5frAH6E8f32M=",
|
||||
"lastModified": 1782068731,
|
||||
"narHash": "sha256-IbCmcOnYn0p1oRmFbLH64ZI40X6GnRF9bFrs2h0GQ6s=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"rev": "c81bd4bb3912e373c17eaff12d67d478dfedf418",
|
||||
"rev": "caa08b92f94bfc1c17987d079e2640c1f8fca756",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1135,11 +1186,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779302169,
|
||||
"narHash": "sha256-OOSPtUXC4F2umtsZPkyWlPQxhXBsxF2vqBXLeI/lqIw=",
|
||||
"lastModified": 1780479100,
|
||||
"narHash": "sha256-VZZ/ukjciXqiebwei2JizyOnxx0T3IeoowFWElKec4o=",
|
||||
"owner": "Fission-AI",
|
||||
"repo": "OpenSpec",
|
||||
"rev": "79303b521068c5f525ee61db06b915fc44b098f4",
|
||||
"rev": "1b06fddd59d8e592d5b5794a1970b22867e85b1f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1156,11 +1207,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779302169,
|
||||
"narHash": "sha256-OOSPtUXC4F2umtsZPkyWlPQxhXBsxF2vqBXLeI/lqIw=",
|
||||
"lastModified": 1780479100,
|
||||
"narHash": "sha256-VZZ/ukjciXqiebwei2JizyOnxx0T3IeoowFWElKec4o=",
|
||||
"owner": "Fission-AI",
|
||||
"repo": "OpenSpec",
|
||||
"rev": "79303b521068c5f525ee61db06b915fc44b098f4",
|
||||
"rev": "1b06fddd59d8e592d5b5794a1970b22867e85b1f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1192,6 +1243,30 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pyproject-build-systems_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"m3ta-home",
|
||||
"hermes-agent",
|
||||
"nixpkgs"
|
||||
],
|
||||
"pyproject-nix": "pyproject-nix_4",
|
||||
"uv2nix": "uv2nix_3"
|
||||
},
|
||||
"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": [
|
||||
@@ -1257,6 +1332,74 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pyproject-nix_4": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"m3ta-home",
|
||||
"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_5": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"m3ta-home",
|
||||
"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_6": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"m3ta-home",
|
||||
"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": [
|
||||
@@ -1283,7 +1426,6 @@
|
||||
"root": {
|
||||
"inputs": {
|
||||
"agenix": "agenix",
|
||||
"agent-lib": "agent-lib",
|
||||
"disko": "disko",
|
||||
"hermes-agent": "hermes-agent",
|
||||
"home-manager": "home-manager_2",
|
||||
@@ -1330,11 +1472,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1780564157,
|
||||
"narHash": "sha256-FOemUn2RVIeosaYbe5ukB7V6nHVke0n0Kep3DNYdfh4=",
|
||||
"lastModified": 1781317333,
|
||||
"narHash": "sha256-qnjeFFELEyOO0vkubMB96WCuFzkvftTZ/LE/VctU+SE=",
|
||||
"owner": "rustfs",
|
||||
"repo": "rustfs-flake",
|
||||
"rev": "253266a4361fe87a6ab57a6c630aeb820925f9b7",
|
||||
"rev": "1d3ef7296a7b22b4b9849d0766f53a0300bce893",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1505,6 +1647,58 @@
|
||||
"repo": "uv2nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"uv2nix_3": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"m3ta-home",
|
||||
"hermes-agent",
|
||||
"pyproject-build-systems",
|
||||
"nixpkgs"
|
||||
],
|
||||
"pyproject-nix": [
|
||||
"m3ta-home",
|
||||
"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_4": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"m3ta-home",
|
||||
"hermes-agent",
|
||||
"nixpkgs"
|
||||
],
|
||||
"pyproject-nix": "pyproject-nix_6"
|
||||
},
|
||||
"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",
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
m3ta-nixpkgs.url = "git+ssh://gitea@code.m3ta.dev/m3tam3re/nixpkgs";
|
||||
llm-agents.url = "github:numtide/llm-agents.nix";
|
||||
|
||||
#
|
||||
nur = {
|
||||
url = "github:nix-community/NUR";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
@@ -48,12 +47,7 @@
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
agent-lib = {
|
||||
url = "git+ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
hermes-agent.url = "github:NousResearch/hermes-agent/v2026.5.29.2";
|
||||
hermes-agent.url = "github:NousResearch/hermes-agent/v2026.6.5";
|
||||
|
||||
rustfs = {
|
||||
url = "github:rustfs/rustfs-flake";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{config, ...}: {
|
||||
virtualisation.oci-containers.containers."ghost" = {
|
||||
image = "docker.io/ghost:latest";
|
||||
image = "docker.io/ghost:6-alpine";
|
||||
environmentFiles = [config.age.secrets.ghost-env.path];
|
||||
ports = ["127.0.0.1:3002:2368"];
|
||||
volumes = ["ghost_data:/var/lib/ghost/content"];
|
||||
|
||||
@@ -8,44 +8,34 @@
|
||||
# Edge TTS: Seraphina — friendly, multilingual German female voice (free, no API key)
|
||||
edgeVoice = "de-DE-SeraphinaMultilingualNeural";
|
||||
|
||||
agentLock = builtins.fromJSON (builtins.readFile ../../../agent-sources.lock.json);
|
||||
|
||||
agentSkillSelections = {
|
||||
m3ta-agents.exclude = [];
|
||||
anthropic.exclude = ["pdf" "skill-creator" "xlsx"];
|
||||
basecamp.exclude = [];
|
||||
kestra.exclude = [];
|
||||
mattpocock.exclude = ["grill-me" "caveman"];
|
||||
superpowers.exclude = ["brainstorming" "systematic-debugging"];
|
||||
vercel.exclude = [];
|
||||
agentSkillExclusions = {
|
||||
m3ta-agents = [];
|
||||
anthropic = ["pdf" "skill-creator" "xlsx"];
|
||||
basecamp = [];
|
||||
kestra = [];
|
||||
mattpocock = ["grill-me" "caveman"];
|
||||
superpowers = ["brainstorming" "systematic-debugging"];
|
||||
vercel = [];
|
||||
};
|
||||
|
||||
sourceRoot = source:
|
||||
builtins.fetchGit {
|
||||
inherit (source) url rev;
|
||||
agentLibSourceSelections =
|
||||
lib.mapAttrs (_sourceName: exclude: {
|
||||
skills = {
|
||||
all = true;
|
||||
inherit exclude;
|
||||
};
|
||||
})
|
||||
agentSkillExclusions;
|
||||
|
||||
selectedSkillNames = sourceName: let
|
||||
source = agentLock.sources.${sourceName};
|
||||
excluded = agentSkillSelections.${sourceName}.exclude;
|
||||
in
|
||||
lib.subtractLists excluded (builtins.attrNames source.items.skills);
|
||||
|
||||
copySkill = sourceName: skillName: let
|
||||
source = agentLock.sources.${sourceName};
|
||||
item = source.items.skills.${skillName};
|
||||
in ''
|
||||
cp -R ${sourceRoot source}/${source.root}/${item.path} $out/${skillName}
|
||||
'';
|
||||
|
||||
copySourceSkills = sourceName:
|
||||
lib.concatMapStringsSep "\n" (copySkill sourceName) (selectedSkillNames sourceName);
|
||||
|
||||
# Build skills from the agent-lib lockfile instead of the legacy AGENTS flake.
|
||||
hermesSkills = pkgs.runCommand "hermes-agent-lib-skills" {} ''
|
||||
mkdir -p $out
|
||||
${lib.concatMapStringsSep "\n" copySourceSkills (builtins.attrNames agentSkillSelections)}
|
||||
'';
|
||||
# Deterministic store renderer consumed directly by Hermes. m3ta-home
|
||||
# re-exports the focused helper so nixos-config does not need a direct
|
||||
# agent-lib flake input.
|
||||
hermesSkills = inputs.m3ta-home.lib.mkHermesSkillsDir {
|
||||
system = pkgs.stdenv.hostPlatform.system;
|
||||
name = "hermes-agent-lib-skills";
|
||||
lockFile = ../../../agent-sources.lock.json;
|
||||
sources = agentLibSourceSelections;
|
||||
};
|
||||
in {
|
||||
virtualisation.docker.enable = true;
|
||||
|
||||
@@ -63,18 +53,7 @@ in {
|
||||
''}"
|
||||
];
|
||||
|
||||
systemd.services.copy-hermes-skills = {
|
||||
description = "Copy agent skills to hermes home directory";
|
||||
wantedBy = ["hermes-agent.service"];
|
||||
before = ["hermes-agent.service"];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
script = ''
|
||||
mkdir -p /var/lib/hermes/.agents
|
||||
cp -rT ${hermesSkills} /var/lib/hermes/.agents/skills
|
||||
chown -R hermes:hermes /var/lib/hermes/.agents
|
||||
'';
|
||||
};
|
||||
systemd.services.hermes-agent.restartTriggers = [hermesSkills];
|
||||
|
||||
services.hermes-agent = {
|
||||
enable = true;
|
||||
@@ -92,6 +71,7 @@ in {
|
||||
];
|
||||
|
||||
extraPackages = with pkgs; [
|
||||
basecamp
|
||||
docker
|
||||
git
|
||||
curl
|
||||
@@ -175,7 +155,7 @@ in {
|
||||
|
||||
skills = {
|
||||
external_dirs = [
|
||||
"/var/lib/hermes/.agents/skills"
|
||||
hermesSkills
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
# m3ta-home via the profile mapping in hosts/common/users/m3tam3re.nix.
|
||||
{
|
||||
config,
|
||||
inputs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
@@ -15,6 +14,8 @@ with lib; {
|
||||
config = mkMerge [
|
||||
# ── XDG / MIME defaults ──
|
||||
{
|
||||
qt.platformTheme.name = mkForce "qtct";
|
||||
|
||||
xdg = {
|
||||
enable = true;
|
||||
configFile."mimeapps.list".force = true;
|
||||
@@ -58,6 +59,22 @@ with lib; {
|
||||
"6, monitor:DP-2"
|
||||
"7, monitor:DP-2"
|
||||
];
|
||||
# m3ta-home sets QT_QPA_PLATFORMTHEME=gtk3 globally for Hyprland.
|
||||
# ksnip crashes with duplicate GDK type registration under that Qt GTK
|
||||
# platform theme, so use qtct for Qt apps on this host instead.
|
||||
env = mkForce [
|
||||
"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,qt5ct"
|
||||
"QT_QPA_PLATFORMTHEME_QT6,qt6ct"
|
||||
];
|
||||
windowrule = [
|
||||
"match:class dev.zed.Zed, workspace 1"
|
||||
"match:class ^(com.obsproject.Studio)$, workspace 2"
|
||||
|
||||
@@ -1,26 +1,25 @@
|
||||
age-encryption.org/v1
|
||||
-> ssh-ed25519 4NLKrw 2TwbZwX9SwWg4SVC0A2ICmyRjSfO+xtfBcBOK1lh3T4
|
||||
DSf4DrOAvW7L49lh6cq5IqrMM7gqXv2+67rR3ttn+CE
|
||||
-> ssh-ed25519 5kwcsA K1hqFOAxq2T+oLp3bQjLYpXtlQVkA7RHCM/8ETMGbwU
|
||||
xIE4xz50LB5vbDTTLKVcx9vC2iXIsRLThHYYxGjcJyY
|
||||
-> ssh-ed25519 9d4YIQ bXYb62OM/N+EXpMOZZ6zEbpfaH10Vz62PuUdGODXolw
|
||||
j64kKzOn8CmSnykEuWnXHZ0nfqwOfOxX4FPR4GSouR0
|
||||
-> ssh-ed25519 3Bcr1w C4alN6ud7q0K4I7NHuBgC77D6zeTfZVGjNS3EKpvL00
|
||||
NpjOsg3eJ5LvX0lV7NYuVHLeqeYylHdmw60H+KeG1GY
|
||||
-> ssh-ed25519 c4NQlA In5wsg4+LTIEbP75B83GMXPCItSPGwKWUW8QO+QjXyY
|
||||
oK1kikhr4RMq6QMv9kjNjiKrf5srlGh7hGbU2qns2rM
|
||||
-> ssh-ed25519 4NLKrw 42tBp6EbDJpC7EBt0++QxmF3N9rQJ/AP+7A/S174rCs
|
||||
bRzpQku0GLEBvANvCdeH3L4Kf06k6w2C4FfZCOp2QWI
|
||||
-> ssh-ed25519 5kwcsA YAYkQzsxfbHwrCPMW2eqLS9mRuuxr+EjHKl7MV3DDEo
|
||||
dN3TitETbdPbXzBtIDBglienhY4oDsFGgfe0VYdsP1o
|
||||
-> ssh-ed25519 9d4YIQ 2vTWMSuLrgpgaTWeu0ARoUOukLBKupCfMdqJhLvTqwA
|
||||
Lzk2Uo2U3tUJiq29on/a5zYfuUjgOZvCHhZYuFGSDG4
|
||||
-> ssh-ed25519 3Bcr1w x689Z0/TsOLLk1JNPXg2jj6y5ucaH37zRt46d/Z1l2w
|
||||
Bkzg3umkDYFBemmgev/M5LUFuobFugXe0u85mLmsDSo
|
||||
-> ssh-ed25519 c4NQlA 5Dn6e8bILaYl9FVt+ZwuZ6rOC0k0Kg1+KOSP4JakyWI
|
||||
AT6LeCo+P7RjgNhRex04kJ/7NHD2DAWRqs33uOJ7e5E
|
||||
-> ssh-rsa DQlE7w
|
||||
tcP4yPgGWqHYeE1gw/KD6cswik+9WU2s2f7hg5mK78085sQ7npXRsBVAz2OCRn07
|
||||
foeAAmnY4YmKriBh421JOVNBDOXHR5dfaIKY9b663L+rYj99ic0rfW26C+dqKitF
|
||||
SnvveL3Zf16nqg6duSVA7LIcIFgkIlA+RXnHPVho+P4GwEH7W8nCf/4kUquuhB7B
|
||||
F4Hx1qOknmGyNBJBFi27D04ZDDk/ZVxioYsO6P6TUu7MuaGmQCoVKREDl5RRh4zO
|
||||
XD8/TFDRsJLqqcbCKIlU+6CN1+L0r4FN4K0UaTjwPNzGvn5EEjBKw9RpOhdvI28I
|
||||
WlAQ+w6gdQiz9Ju4e5p7Doz2MbNb6894DimawHjzl968Xy5ifX2XA+FBdcW5hU9A
|
||||
u+7VXKZmbfMyvRA7lmKRoi4SurJAyQd6iXBrVKfTwFc53V/tJi48bsKcE3yXxHH+
|
||||
lKGuZFNGDDkqCruycjvz94WaIHy3fv5hhmBdgwoCZK1VGSLAnwdm1rG4B9m3t/K8
|
||||
M9pUnzZDa1v6X5UbQOE6HILaGU36VkQtnfXaJJdxJSRQ/sE9R3ZQoLjRZAw+UhUf
|
||||
09JwLkS55477xaar3bpvvOxeP4MrtTHLJ7593eEkFT3i45FfVmxutq6EYckZrCJB
|
||||
WjrCG7Cbvc20o6s54PYiF4Xk8AuPxt+SElRxBtcOK+SPba84f+WWHqrBA1YRzTDK
|
||||
fsM15eKWsJgzaz5y36grv4xSj4KbWMFtmEt5V5BEW32+zXBU5CPhonO59TxEQgh4
|
||||
hI2+gNmAzKQja7xbuxCyr3jcXWJz7IuXcrklr+2ZjF1wx3BDll1z+vxSX0C88MCc
|
||||
OLKDfnUiDa6BlgUfLK90dLIia8v0oIPXs4OWRfYs7SC/Z3QOPpSO62Ky9dKYRrod
|
||||
PHvCgxX28QvROE4TekL9PV81AfAbMVJrnkRiybg6id8CscldtDmgaKqoaIoJlAuF
|
||||
g5/LGd+FPfmlv2iNfGUn2Glhui8SkrBK1MzGJpeQw+l4CXLH33yQzHX0m6TdQBzr
|
||||
|
||||
-> ssh-ed25519 CSMyhg FNYYdEIJYcxkjMuM5lnIs9gIilvgD44uazZE8CjNeho
|
||||
QHeghlsOOlYNMwhMHT4o7DeuyxGP/3wyqm94HUHjn44
|
||||
--- zRG6aCTS+X18VpeN+tz38kaUoilk1kN5KrWTWYZ6pV4
|
||||
ræX_qÔÁ’Ð껿H#p¯f™”}(žA(ã|»?ë0ªyJk¥SD‡\Jm&uõÃ&Ô9€ýÄ5Ù+çÊ…!v%Y˜ù~ãÁ$û“šZÇÓ°j„z–Â\ßá1,Vf˜
|
||||
£’æ1zª»#Ó
|
||||
-> ssh-ed25519 CSMyhg 5YHqBNbkkUFVhDEfOM4P2tAxT2t1rDn5KItUcjUs4DY
|
||||
oWEKUGiIVkRQvEkY33PpOUcoqsmacgHAaX58H6sRpP4
|
||||
--- KH+IYh4+bS3JMeEmFYakwIceMxOrlEZj0Fqt3VMgFRk
|
||||
�96¨ºà·ènÅϬuk!ß±1ÝNItŽNŸ8E�çwĹ]3µ”S*¡õ«0>!ý9zc‡(”2O;åI.^jC”&$ºÚ\ÛËWtÇÃNÿ#Õ€Å3¾ÜøÞÌÏcMuÈAߢ•<¾)¬MÄ´¼a¥rdí'p’ÄggPä5’ÆõOQòNfà”×1AZ|1v\š4F›‡�Ò6;„T<l£
|
||||
Binary file not shown.
Reference in New Issue
Block a user