diff --git a/.gitignore b/.gitignore index 8a9f57c..138bca6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .superpowers/ .worktrees/ +/.*/skills/ .env* !.env.example .output/ diff --git a/README.md b/README.md index 45e1456..5b01d48 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,9 @@ nix develop -c pnpm install --frozen-lockfile cp .env.example .env.local ``` +The Nix development shell installs Hallmark's agent skill for the supported +local agent targets. + Set `TWITTER_RELAY_BASE_URL` in `.env.local` for Vite development, and set `BIRD_PROFILE_NAME` when the relay has multiple profiles. Export the same values in the process environment before `start` or `test:live`: diff --git a/flake.lock b/flake.lock index 8e8f6d5..2366b86 100644 --- a/flake.lock +++ b/flake.lock @@ -1,6 +1,78 @@ { "nodes": { + "agent-skills-nix": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1783839654, + "narHash": "sha256-rn5DkeQ9PBaJTZl9juBtPnVawyN4B83tyz1VpiinQFo=", + "owner": "Kyure-A", + "repo": "agent-skills-nix", + "rev": "8326df98cf494dc515db99affa9ea9d2bd6666b6", + "type": "github" + }, + "original": { + "owner": "Kyure-A", + "repo": "agent-skills-nix", + "type": "github" + } + }, + "hallmark": { + "flake": false, + "locked": { + "lastModified": 1780605762, + "narHash": "sha256-+yPIG1XdI6hhyOH48rd20+YlFrA9Gr416tPt1OoxfwQ=", + "owner": "Nutlope", + "repo": "hallmark", + "rev": "aeb42fb354ff4efa36ab475773a082315a3af2ce", + "type": "github" + }, + "original": { + "owner": "Nutlope", + "repo": "hallmark", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "agent-skills-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1783222121, + "narHash": "sha256-E/ElL373TO8lQ2aMvYyzN+k4xkVaUGoRqoa8AtM71tI=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "a1645f40777620c4bd2b6d854b290c2fc354a266", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, "nixpkgs": { + "locked": { + "lastModified": 1783224372, + "narHash": "sha256-8i/87eeoqiGE4yOTjwSA3Eh/ziJRQEmd/unYU+K27sk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1783776592, "narHash": "sha256-UgCQzxeWI75XM8G+hPrPh+MKzEPjG3SpAj7dtqSbksA=", @@ -18,7 +90,9 @@ }, "root": { "inputs": { - "nixpkgs": "nixpkgs" + "agent-skills-nix": "agent-skills-nix", + "hallmark": "hallmark", + "nixpkgs": "nixpkgs_2" } } }, diff --git a/flake.nix b/flake.nix index cdb4736..7f45eff 100644 --- a/flake.nix +++ b/flake.nix @@ -2,8 +2,13 @@ description = "Intentional X reader"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + inputs.agent-skills-nix.url = "github:Kyure-A/agent-skills-nix"; + inputs.hallmark = { + url = "github:Nutlope/hallmark"; + flake = false; + }; - outputs = { self, nixpkgs, ... }: + outputs = inputs@{ self, nixpkgs, ... }: let systems = [ "x86_64-linux" "aarch64-linux" ]; forAllSystems = nixpkgs.lib.genAttrs systems; @@ -55,10 +60,34 @@ }); devShells = forAllSystems (system: - let pkgs = import nixpkgs { inherit system; }; + let + pkgs = import nixpkgs { inherit system; }; + agentLib = inputs.agent-skills-nix.lib.agent-skills; + sources.hallmark = { + path = inputs.hallmark; + subdir = "skills"; + }; + catalog = agentLib.discoverCatalog sources; + allowlist = agentLib.allowlistFor { + inherit catalog sources; + enableAll = true; + }; + selection = agentLib.selectSkills { + inherit catalog allowlist sources; + skills = { }; + }; + bundle = agentLib.mkBundle { inherit pkgs selection; }; + localTargets = builtins.mapAttrs (_: target: + target // { + enable = true; + }) agentLib.defaultLocalTargets; in { default = pkgs.mkShell { packages = with pkgs; [ nodejs_22 pnpm chromium ]; + shellHook = agentLib.mkShellHook { + inherit pkgs bundle; + targets = localTargets; + }; PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = "1"; PLAYWRIGHT_CHROMIUM_EXECUTABLE = "${pkgs.chromium}/bin/chromium";