From 9bc3ca1230d96119bdf61b9c3ec0c66a2b6eafdc Mon Sep 17 00:00:00 2001 From: Bob van der Linden Date: Sun, 15 Mar 2026 18:04:18 +0100 Subject: [PATCH] opencode: skill -> skills The skills option was creating files under ~/.config/opencode/skill/ (singular) but OpenCode documentation only mentions ~/.config/opencode/skills/ (plural). Both work, but using an undocumented directory can be confusing. Fixes: https://github.com/nix-community/home-manager/issues/8907 --- modules/programs/opencode.nix | 14 +++++++------- tests/modules/programs/opencode/mixed-content.nix | 12 ++++++------ .../programs/opencode/skills-bulk-directory.nix | 8 ++++---- .../modules/programs/opencode/skills-directory.nix | 6 +++--- tests/modules/programs/opencode/skills-inline.nix | 4 ++-- tests/modules/programs/opencode/skills-path.nix | 4 ++-- .../programs/opencode/skills-store-path.nix | 4 ++-- 7 files changed, 26 insertions(+), 26 deletions(-) diff --git a/modules/programs/opencode.nix b/modules/programs/opencode.nix index 1cbbe2d6..653d967a 100644 --- a/modules/programs/opencode.nix +++ b/modules/programs/opencode.nix @@ -247,16 +247,16 @@ in If an attribute set is used, the attribute name becomes the skill directory name, and the value is either: - - Inline content as a string (creates `opencode/skill//SKILL.md`) - - A path to a file (creates `opencode/skill//SKILL.md`) - - A path to a directory (creates `opencode/skill//` with all files) + - Inline content as a string (creates `opencode/skills//SKILL.md`) + - A path to a file (creates `opencode/skills//SKILL.md`) + - A path to a directory (creates `opencode/skills//` with all files) This also accepts Nix store paths (e.g., source from a package), allowing you to reference subdirectories within a package source. If a path is used, it is expected to contain one folder per skill name, each containing a {file}`SKILL.md`. The directory is symlinked to - {file}`$XDG_CONFIG_HOME/opencode/skill/`. + {file}`$XDG_CONFIG_HOME/opencode/skills/`. See for the documentation. ''; @@ -419,7 +419,7 @@ in recursive = true; }; - "opencode/skill" = mkIf (lib.isPath cfg.skills) { + "opencode/skills" = mkIf (lib.isPath cfg.skills) { source = cfg.skills; recursive = true; }; @@ -460,12 +460,12 @@ in || (builtins.isString content && lib.hasPrefix builtins.storeDir content) then - lib.nameValuePair "opencode/skill/${name}" { + lib.nameValuePair "opencode/skills/${name}" { source = content; recursive = true; } else - lib.nameValuePair "opencode/skill/${name}/SKILL.md" ( + lib.nameValuePair "opencode/skills/${name}/SKILL.md" ( if lib.isPath content then { source = content; } else { text = content; } ) ) (if builtins.isAttrs cfg.skills then cfg.skills else { }) diff --git a/tests/modules/programs/opencode/mixed-content.nix b/tests/modules/programs/opencode/mixed-content.nix index fb6c3649..05423f28 100644 --- a/tests/modules/programs/opencode/mixed-content.nix +++ b/tests/modules/programs/opencode/mixed-content.nix @@ -78,14 +78,14 @@ ${./test-tool.ts} # Skills - assertFileExists home-files/.config/opencode/skill/inline-skill/SKILL.md - assertFileExists home-files/.config/opencode/skill/path-skill/SKILL.md - assertFileExists home-files/.config/opencode/skill/dir-skill/SKILL.md - assertFileExists home-files/.config/opencode/skill/dir-skill/notes.txt + assertFileExists home-files/.config/opencode/skills/inline-skill/SKILL.md + assertFileExists home-files/.config/opencode/skills/path-skill/SKILL.md + assertFileExists home-files/.config/opencode/skills/dir-skill/SKILL.md + assertFileExists home-files/.config/opencode/skills/dir-skill/notes.txt - assertFileContent home-files/.config/opencode/skill/path-skill/SKILL.md \ + assertFileContent home-files/.config/opencode/skills/path-skill/SKILL.md \ ${./git-release-SKILL.md} - assertFileContent home-files/.config/opencode/skill/dir-skill/SKILL.md \ + assertFileContent home-files/.config/opencode/skills/dir-skill/SKILL.md \ ${./skill-dir/data-analysis/SKILL.md} # Themes diff --git a/tests/modules/programs/opencode/skills-bulk-directory.nix b/tests/modules/programs/opencode/skills-bulk-directory.nix index 248cf26e..38558530 100644 --- a/tests/modules/programs/opencode/skills-bulk-directory.nix +++ b/tests/modules/programs/opencode/skills-bulk-directory.nix @@ -5,11 +5,11 @@ }; nmt.script = '' - assertFileExists home-files/.config/opencode/skill/git-release/SKILL.md - assertFileExists home-files/.config/opencode/skill/pdf-processing/SKILL.md - assertFileContent home-files/.config/opencode/skill/git-release/SKILL.md \ + assertFileExists home-files/.config/opencode/skills/git-release/SKILL.md + assertFileExists home-files/.config/opencode/skills/pdf-processing/SKILL.md + assertFileContent home-files/.config/opencode/skills/git-release/SKILL.md \ ${./skills-bulk/git-release/SKILL.md} - assertFileContent home-files/.config/opencode/skill/pdf-processing/SKILL.md \ + assertFileContent home-files/.config/opencode/skills/pdf-processing/SKILL.md \ ${./skills-bulk/pdf-processing/SKILL.md} ''; } diff --git a/tests/modules/programs/opencode/skills-directory.nix b/tests/modules/programs/opencode/skills-directory.nix index a21f8c43..a1055ec5 100644 --- a/tests/modules/programs/opencode/skills-directory.nix +++ b/tests/modules/programs/opencode/skills-directory.nix @@ -7,9 +7,9 @@ }; nmt.script = '' - assertFileExists home-files/.config/opencode/skill/data-analysis/SKILL.md - assertFileExists home-files/.config/opencode/skill/data-analysis/notes.txt - assertFileContent home-files/.config/opencode/skill/data-analysis/SKILL.md \ + assertFileExists home-files/.config/opencode/skills/data-analysis/SKILL.md + assertFileExists home-files/.config/opencode/skills/data-analysis/notes.txt + assertFileContent home-files/.config/opencode/skills/data-analysis/SKILL.md \ ${./skill-dir/data-analysis/SKILL.md} ''; } diff --git a/tests/modules/programs/opencode/skills-inline.nix b/tests/modules/programs/opencode/skills-inline.nix index a34a27d7..042d9c59 100644 --- a/tests/modules/programs/opencode/skills-inline.nix +++ b/tests/modules/programs/opencode/skills-inline.nix @@ -18,8 +18,8 @@ }; nmt.script = '' - assertFileExists home-files/.config/opencode/skill/git-release/SKILL.md - assertFileContent home-files/.config/opencode/skill/git-release/SKILL.md \ + assertFileExists home-files/.config/opencode/skills/git-release/SKILL.md + assertFileContent home-files/.config/opencode/skills/git-release/SKILL.md \ ${./git-release-SKILL.md} ''; } diff --git a/tests/modules/programs/opencode/skills-path.nix b/tests/modules/programs/opencode/skills-path.nix index b26cdbda..5287d7a1 100644 --- a/tests/modules/programs/opencode/skills-path.nix +++ b/tests/modules/programs/opencode/skills-path.nix @@ -7,8 +7,8 @@ }; nmt.script = '' - assertFileExists home-files/.config/opencode/skill/pdf-processing/SKILL.md - assertFileContent home-files/.config/opencode/skill/pdf-processing/SKILL.md \ + assertFileExists home-files/.config/opencode/skills/pdf-processing/SKILL.md + assertFileContent home-files/.config/opencode/skills/pdf-processing/SKILL.md \ ${./pdf-processing-SKILL.md} ''; } diff --git a/tests/modules/programs/opencode/skills-store-path.nix b/tests/modules/programs/opencode/skills-store-path.nix index bb66aeb5..774ba022 100644 --- a/tests/modules/programs/opencode/skills-store-path.nix +++ b/tests/modules/programs/opencode/skills-store-path.nix @@ -16,9 +16,9 @@ in }; nmt.script = '' - assertFileExists home-files/.config/opencode/skill/internal-skill/SKILL.md + assertFileExists home-files/.config/opencode/skills/internal-skill/SKILL.md - assertFileContent home-files/.config/opencode/skill/internal-skill/SKILL.md \ + assertFileContent home-files/.config/opencode/skills/internal-skill/SKILL.md \ "${src}/skills/external-skill/SKILL.md" ''; }