[READ-ONLY] Mirror of https://github.com/plttn/mkd.
0

Configure Feed

Select the types of activity you want to include in your feed.

initial work

Jack Platten (May 24, 2026, 10:08 AM -0700) 7992a003

+877
+2
.gitignore
··· 1 + /dist 2 + node_modules
+2
mise.toml
··· 1 + [tools] 2 + pnpm = "latest"
+44
package.json
··· 1 + { 2 + "name": "mkd", 3 + "version": "1.0.0", 4 + "description": "", 5 + "scripts": { 6 + "dev": "tsx src/index.ts", 7 + "build": "tsc --build --clean && tsc --build" 8 + }, 9 + "type": "module", 10 + "bin": { 11 + "mkd": "dist/index.js" 12 + }, 13 + "files": [ 14 + "dist", 15 + "README.md", 16 + "sequoia.schema.json" 17 + ], 18 + "main": "./dist/index.js", 19 + "exports": { 20 + ".": "./dist/index.js" 21 + }, 22 + "keywords": [], 23 + "author": "", 24 + "license": "MIT", 25 + "devEngines": { 26 + "packageManager": { 27 + "name": "pnpm", 28 + "version": "^11.2.1", 29 + "onFail": "download" 30 + } 31 + }, 32 + "devDependencies": { 33 + "@types/node": "^25.9.1", 34 + "tsx": "^4.22.3", 35 + "typescript": "^6.0.3" 36 + }, 37 + "dependencies": { 38 + "@clack/prompts": "^1.4.0", 39 + "@sindresorhus/slugify": "^3.0.0", 40 + "cmd-ts": "^0.15.0", 41 + "filenamify": "^7.0.1", 42 + "gray-matter": "^4.0.3" 43 + } 44 + }
+752
pnpm-lock.yaml
··· 1 + --- 2 + lockfileVersion: '9.0' 3 + 4 + importers: 5 + 6 + .: 7 + configDependencies: {} 8 + packageManagerDependencies: 9 + '@pnpm/exe': 10 + specifier: ^11.2.1 11 + version: 11.2.2 12 + pnpm: 13 + specifier: ^11.2.1 14 + version: 11.2.2 15 + 16 + packages: 17 + 18 + '@pnpm/exe@11.2.2': 19 + resolution: {integrity: sha512-9AGho6f10GYF/XHvnpO6wnzDIAiHNSs2PyOTelrNNyUiHwfTVtnJoXwRz/6yPJAYOF3erhPauv5oxf62uh581w==} 20 + hasBin: true 21 + 22 + '@pnpm/linux-arm64@11.2.2': 23 + resolution: {integrity: sha512-cMEqyEwpghHb1UggKuowTuGKvbWe1Ra6bK3SF9CWoIrz36mzQz3FXxYXx1Theo8lmkwWH2MZdUGHKgtUoqEGKg==} 24 + cpu: [arm64] 25 + os: [linux] 26 + 27 + '@pnpm/linux-x64@11.2.2': 28 + resolution: {integrity: sha512-AShxDdan9wfAFbIGAO5YnbGRf3zuETOZVMuWqmx4mJLaAOR3kiA3Rwhzj3jyTsAoodn7Xdaxq9G1M3FpB92mkQ==} 29 + cpu: [x64] 30 + os: [linux] 31 + 32 + '@pnpm/linuxstatic-arm64@11.2.2': 33 + resolution: {integrity: sha512-m7BCdqFdMFo3fkiOpcOLa70c3Ppy5OKv78HXSIfzL4ajHBdPQfmv03VgC3U08l1ST/EeQFuSt+Za0azmOJyYqA==} 34 + cpu: [arm64] 35 + os: [linux] 36 + libc: [musl] 37 + 38 + '@pnpm/linuxstatic-x64@11.2.2': 39 + resolution: {integrity: sha512-UABTQUhdn6eCx/IlGVrdwklKT00pTHrjLNXdviP4OReJa1trM5HDWcDnreIg89ghCFmee+UTBKDx1FYlLON8EQ==} 40 + cpu: [x64] 41 + os: [linux] 42 + libc: [musl] 43 + 44 + '@pnpm/macos-arm64@11.2.2': 45 + resolution: {integrity: sha512-EakwHSWIxzza6fO6zQkmkUphoadjer9VXCsWRax1D4qNWmChKfn2muYFj6BOChS999lwb4fb42gc61Nbx0X6iw==} 46 + cpu: [arm64] 47 + os: [darwin] 48 + 49 + '@pnpm/win-arm64@11.2.2': 50 + resolution: {integrity: sha512-eXzlXAnwRAI9Uff1U2pfTJxC78vL8aGxU/fsUt/RzWjS09xMQZ2qtAunKg869fAi6xfsquDbogkdTZA3163lIw==} 51 + cpu: [arm64] 52 + os: [win32] 53 + 54 + '@pnpm/win-x64@11.2.2': 55 + resolution: {integrity: sha512-X74bQ4bvjSCYapcupRsGrse8cAg7XhPKXRn1o1qOouux1nJquz9lh2h5uKz8GPx816OUsYo9FS8DV3N9W+L8QA==} 56 + cpu: [x64] 57 + os: [win32] 58 + 59 + '@reflink/reflink-darwin-arm64@0.1.19': 60 + resolution: {integrity: sha512-ruy44Lpepdk1FqDz38vExBY/PVUsjxZA+chd9wozjUH9JjuDT/HEaQYA6wYN9mf041l0yLVar6BCZuWABJvHSA==} 61 + engines: {node: '>= 10'} 62 + cpu: [arm64] 63 + os: [darwin] 64 + 65 + '@reflink/reflink-darwin-x64@0.1.19': 66 + resolution: {integrity: sha512-By85MSWrMZa+c26TcnAy8SDk0sTUkYlNnwknSchkhHpGXOtjNDUOxJE9oByBnGbeuIE1PiQsxDG3Ud+IVV9yuA==} 67 + engines: {node: '>= 10'} 68 + cpu: [x64] 69 + os: [darwin] 70 + 71 + '@reflink/reflink-linux-arm64-gnu@0.1.19': 72 + resolution: {integrity: sha512-7P+er8+rP9iNeN+bfmccM4hTAaLP6PQJPKWSA4iSk2bNvo6KU6RyPgYeHxXmzNKzPVRcypZQTpFgstHam6maVg==} 73 + engines: {node: '>= 10'} 74 + cpu: [arm64] 75 + os: [linux] 76 + libc: [glibc] 77 + 78 + '@reflink/reflink-linux-arm64-musl@0.1.19': 79 + resolution: {integrity: sha512-37iO/Dp6m5DDaC2sf3zPtx/hl9FV3Xze4xoYidrxxS9bgP3S8ALroxRK6xBG/1TtfXKTvolvp+IjrUU6ujIGmA==} 80 + engines: {node: '>= 10'} 81 + cpu: [arm64] 82 + os: [linux] 83 + libc: [musl] 84 + 85 + '@reflink/reflink-linux-x64-gnu@0.1.19': 86 + resolution: {integrity: sha512-jbI8jvuYCaA3MVUdu8vLoLAFqC+iNMpiSuLbxlAgg7x3K5bsS8nOpTRnkLF7vISJ+rVR8W+7ThXlXlUQ93ulkw==} 87 + engines: {node: '>= 10'} 88 + cpu: [x64] 89 + os: [linux] 90 + libc: [glibc] 91 + 92 + '@reflink/reflink-linux-x64-musl@0.1.19': 93 + resolution: {integrity: sha512-e9FBWDe+lv7QKAwtKOt6A2W/fyy/aEEfr0g6j/hWzvQcrzHCsz07BNQYlNOjTfeytrtLU7k449H1PI95jA4OjQ==} 94 + engines: {node: '>= 10'} 95 + cpu: [x64] 96 + os: [linux] 97 + libc: [musl] 98 + 99 + '@reflink/reflink-win32-arm64-msvc@0.1.19': 100 + resolution: {integrity: sha512-09PxnVIQcd+UOn4WAW73WU6PXL7DwGS6wPlkMhMg2zlHHG65F3vHepOw06HFCq+N42qkaNAc8AKIabWvtk6cIQ==} 101 + engines: {node: '>= 10'} 102 + cpu: [arm64] 103 + os: [win32] 104 + 105 + '@reflink/reflink-win32-x64-msvc@0.1.19': 106 + resolution: {integrity: sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w==} 107 + engines: {node: '>= 10'} 108 + cpu: [x64] 109 + os: [win32] 110 + 111 + '@reflink/reflink@0.1.19': 112 + resolution: {integrity: sha512-DmCG8GzysnCZ15bres3N5AHCmwBwYgp0As6xjhQ47rAUTUXxJiK+lLUxaGsX3hd/30qUpVElh05PbGuxRPgJwA==} 113 + engines: {node: '>= 10'} 114 + 115 + detect-libc@2.1.2: 116 + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 117 + engines: {node: '>=8'} 118 + 119 + pnpm@11.2.2: 120 + resolution: {integrity: sha512-NuZiH61QYXiTZFXnAke4gI707CV5ep9DepMoGgIEhOJgf2pGmiLpgph8PbuIZuMHFRSrEKShdJ4G7c0ewRhDbw==} 121 + engines: {node: '>=22.13'} 122 + hasBin: true 123 + 124 + snapshots: 125 + 126 + '@pnpm/exe@11.2.2': 127 + dependencies: 128 + '@reflink/reflink': 0.1.19 129 + detect-libc: 2.1.2 130 + optionalDependencies: 131 + '@pnpm/linux-arm64': 11.2.2 132 + '@pnpm/linux-x64': 11.2.2 133 + '@pnpm/linuxstatic-arm64': 11.2.2 134 + '@pnpm/linuxstatic-x64': 11.2.2 135 + '@pnpm/macos-arm64': 11.2.2 136 + '@pnpm/win-arm64': 11.2.2 137 + '@pnpm/win-x64': 11.2.2 138 + 139 + '@pnpm/linux-arm64@11.2.2': 140 + optional: true 141 + 142 + '@pnpm/linux-x64@11.2.2': 143 + optional: true 144 + 145 + '@pnpm/linuxstatic-arm64@11.2.2': 146 + optional: true 147 + 148 + '@pnpm/linuxstatic-x64@11.2.2': 149 + optional: true 150 + 151 + '@pnpm/macos-arm64@11.2.2': 152 + optional: true 153 + 154 + '@pnpm/win-arm64@11.2.2': 155 + optional: true 156 + 157 + '@pnpm/win-x64@11.2.2': 158 + optional: true 159 + 160 + '@reflink/reflink-darwin-arm64@0.1.19': 161 + optional: true 162 + 163 + '@reflink/reflink-darwin-x64@0.1.19': 164 + optional: true 165 + 166 + '@reflink/reflink-linux-arm64-gnu@0.1.19': 167 + optional: true 168 + 169 + '@reflink/reflink-linux-arm64-musl@0.1.19': 170 + optional: true 171 + 172 + '@reflink/reflink-linux-x64-gnu@0.1.19': 173 + optional: true 174 + 175 + '@reflink/reflink-linux-x64-musl@0.1.19': 176 + optional: true 177 + 178 + '@reflink/reflink-win32-arm64-msvc@0.1.19': 179 + optional: true 180 + 181 + '@reflink/reflink-win32-x64-msvc@0.1.19': 182 + optional: true 183 + 184 + '@reflink/reflink@0.1.19': 185 + optionalDependencies: 186 + '@reflink/reflink-darwin-arm64': 0.1.19 187 + '@reflink/reflink-darwin-x64': 0.1.19 188 + '@reflink/reflink-linux-arm64-gnu': 0.1.19 189 + '@reflink/reflink-linux-arm64-musl': 0.1.19 190 + '@reflink/reflink-linux-x64-gnu': 0.1.19 191 + '@reflink/reflink-linux-x64-musl': 0.1.19 192 + '@reflink/reflink-win32-arm64-msvc': 0.1.19 193 + '@reflink/reflink-win32-x64-msvc': 0.1.19 194 + 195 + detect-libc@2.1.2: {} 196 + 197 + pnpm@11.2.2: {} 198 + 199 + --- 200 + lockfileVersion: '9.0' 201 + 202 + settings: 203 + autoInstallPeers: true 204 + excludeLinksFromLockfile: false 205 + 206 + importers: 207 + 208 + .: 209 + dependencies: 210 + '@clack/prompts': 211 + specifier: ^1.4.0 212 + version: 1.4.0 213 + '@sindresorhus/slugify': 214 + specifier: ^3.0.0 215 + version: 3.0.0 216 + cmd-ts: 217 + specifier: ^0.15.0 218 + version: 0.15.0 219 + filenamify: 220 + specifier: ^7.0.1 221 + version: 7.0.1 222 + gray-matter: 223 + specifier: ^4.0.3 224 + version: 4.0.3 225 + devDependencies: 226 + '@types/node': 227 + specifier: ^25.9.1 228 + version: 25.9.1 229 + tsx: 230 + specifier: ^4.22.3 231 + version: 4.22.3 232 + typescript: 233 + specifier: ^6.0.3 234 + version: 6.0.3 235 + 236 + packages: 237 + 238 + '@clack/core@1.3.1': 239 + resolution: {integrity: sha512-fT1qHVGAag4IEkrupZ6lRRbNCs1vS9P01KB/sG8zKgvUztbYtFBtQpjSITNwooDZ83tpsPzP0mRNs1/KVszCRA==} 240 + engines: {node: '>= 20.12.0'} 241 + 242 + '@clack/prompts@1.4.0': 243 + resolution: {integrity: sha512-S0My7XPGIgpRWMDG8uRqalbgT+a6FmCUdOW+HaIOVVpUPHOb7RrpvjTjiODadKp06fsrVDJZlIzc6yCTp4AnxA==} 244 + engines: {node: '>= 20.12.0'} 245 + 246 + '@esbuild/aix-ppc64@0.28.0': 247 + resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} 248 + engines: {node: '>=18'} 249 + cpu: [ppc64] 250 + os: [aix] 251 + 252 + '@esbuild/android-arm64@0.28.0': 253 + resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} 254 + engines: {node: '>=18'} 255 + cpu: [arm64] 256 + os: [android] 257 + 258 + '@esbuild/android-arm@0.28.0': 259 + resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} 260 + engines: {node: '>=18'} 261 + cpu: [arm] 262 + os: [android] 263 + 264 + '@esbuild/android-x64@0.28.0': 265 + resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} 266 + engines: {node: '>=18'} 267 + cpu: [x64] 268 + os: [android] 269 + 270 + '@esbuild/darwin-arm64@0.28.0': 271 + resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} 272 + engines: {node: '>=18'} 273 + cpu: [arm64] 274 + os: [darwin] 275 + 276 + '@esbuild/darwin-x64@0.28.0': 277 + resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} 278 + engines: {node: '>=18'} 279 + cpu: [x64] 280 + os: [darwin] 281 + 282 + '@esbuild/freebsd-arm64@0.28.0': 283 + resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} 284 + engines: {node: '>=18'} 285 + cpu: [arm64] 286 + os: [freebsd] 287 + 288 + '@esbuild/freebsd-x64@0.28.0': 289 + resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} 290 + engines: {node: '>=18'} 291 + cpu: [x64] 292 + os: [freebsd] 293 + 294 + '@esbuild/linux-arm64@0.28.0': 295 + resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} 296 + engines: {node: '>=18'} 297 + cpu: [arm64] 298 + os: [linux] 299 + 300 + '@esbuild/linux-arm@0.28.0': 301 + resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} 302 + engines: {node: '>=18'} 303 + cpu: [arm] 304 + os: [linux] 305 + 306 + '@esbuild/linux-ia32@0.28.0': 307 + resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} 308 + engines: {node: '>=18'} 309 + cpu: [ia32] 310 + os: [linux] 311 + 312 + '@esbuild/linux-loong64@0.28.0': 313 + resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} 314 + engines: {node: '>=18'} 315 + cpu: [loong64] 316 + os: [linux] 317 + 318 + '@esbuild/linux-mips64el@0.28.0': 319 + resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} 320 + engines: {node: '>=18'} 321 + cpu: [mips64el] 322 + os: [linux] 323 + 324 + '@esbuild/linux-ppc64@0.28.0': 325 + resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} 326 + engines: {node: '>=18'} 327 + cpu: [ppc64] 328 + os: [linux] 329 + 330 + '@esbuild/linux-riscv64@0.28.0': 331 + resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} 332 + engines: {node: '>=18'} 333 + cpu: [riscv64] 334 + os: [linux] 335 + 336 + '@esbuild/linux-s390x@0.28.0': 337 + resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} 338 + engines: {node: '>=18'} 339 + cpu: [s390x] 340 + os: [linux] 341 + 342 + '@esbuild/linux-x64@0.28.0': 343 + resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} 344 + engines: {node: '>=18'} 345 + cpu: [x64] 346 + os: [linux] 347 + 348 + '@esbuild/netbsd-arm64@0.28.0': 349 + resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} 350 + engines: {node: '>=18'} 351 + cpu: [arm64] 352 + os: [netbsd] 353 + 354 + '@esbuild/netbsd-x64@0.28.0': 355 + resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} 356 + engines: {node: '>=18'} 357 + cpu: [x64] 358 + os: [netbsd] 359 + 360 + '@esbuild/openbsd-arm64@0.28.0': 361 + resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} 362 + engines: {node: '>=18'} 363 + cpu: [arm64] 364 + os: [openbsd] 365 + 366 + '@esbuild/openbsd-x64@0.28.0': 367 + resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} 368 + engines: {node: '>=18'} 369 + cpu: [x64] 370 + os: [openbsd] 371 + 372 + '@esbuild/openharmony-arm64@0.28.0': 373 + resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} 374 + engines: {node: '>=18'} 375 + cpu: [arm64] 376 + os: [openharmony] 377 + 378 + '@esbuild/sunos-x64@0.28.0': 379 + resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} 380 + engines: {node: '>=18'} 381 + cpu: [x64] 382 + os: [sunos] 383 + 384 + '@esbuild/win32-arm64@0.28.0': 385 + resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} 386 + engines: {node: '>=18'} 387 + cpu: [arm64] 388 + os: [win32] 389 + 390 + '@esbuild/win32-ia32@0.28.0': 391 + resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} 392 + engines: {node: '>=18'} 393 + cpu: [ia32] 394 + os: [win32] 395 + 396 + '@esbuild/win32-x64@0.28.0': 397 + resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} 398 + engines: {node: '>=18'} 399 + cpu: [x64] 400 + os: [win32] 401 + 402 + '@sindresorhus/slugify@3.0.0': 403 + resolution: {integrity: sha512-SCrKh1zS96q+CuH5GumHcyQEVPsM4Ve8oE0E6tw7AAhGq50K8ojbTUOQnX/j9Mhcv/AXiIsbCfquovyGOo5fGw==} 404 + engines: {node: '>=20'} 405 + 406 + '@sindresorhus/transliterate@2.3.1': 407 + resolution: {integrity: sha512-gVaaGtKYMYAMmI8buULVH3A2TXVJ98QiwGwI7ddrWGuGidGC2uRt4FHs22+8iROJ0QTzju9CuMjlVsrvpqsdhA==} 408 + engines: {node: '>=20'} 409 + 410 + '@types/node@25.9.1': 411 + resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} 412 + 413 + ansi-regex@6.2.2: 414 + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} 415 + engines: {node: '>=12'} 416 + 417 + argparse@1.0.10: 418 + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 419 + 420 + chalk@5.6.2: 421 + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} 422 + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 423 + 424 + cmd-ts@0.15.0: 425 + resolution: {integrity: sha512-ASyAx+P6DNzNEZ6OYmvjjaLAQeI3L+4lm5rX2Jg8tondXdj06o9JTxi9mfC92KoVbrVFKhZ+j2TfBF8fcura6g==} 426 + 427 + debug@4.4.3: 428 + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 429 + engines: {node: '>=6.0'} 430 + peerDependencies: 431 + supports-color: '*' 432 + peerDependenciesMeta: 433 + supports-color: 434 + optional: true 435 + 436 + didyoumean@1.2.2: 437 + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 438 + 439 + esbuild@0.28.0: 440 + resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} 441 + engines: {node: '>=18'} 442 + hasBin: true 443 + 444 + escape-string-regexp@5.0.0: 445 + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} 446 + engines: {node: '>=12'} 447 + 448 + esprima@4.0.1: 449 + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 450 + engines: {node: '>=4'} 451 + hasBin: true 452 + 453 + extend-shallow@2.0.1: 454 + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} 455 + engines: {node: '>=0.10.0'} 456 + 457 + fast-string-truncated-width@3.0.3: 458 + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} 459 + 460 + fast-string-width@3.0.2: 461 + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} 462 + 463 + fast-wrap-ansi@0.2.2: 464 + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} 465 + 466 + filename-reserved-regex@4.0.0: 467 + resolution: {integrity: sha512-9ZT504KxEQDamsOogZImAWGEN24R1uFAxU3ZS4AZqn2ooidmN68Olh7n4/RcA4lLatZztjA0ZSuxeLHVoCc8JA==} 468 + engines: {node: '>=20'} 469 + 470 + filenamify@7.0.1: 471 + resolution: {integrity: sha512-9b4rfnaX2MkJCgp27wypV6DAMvj4WMOSgJ+TdcpJIO84Dql+Cv6iJjdG4XDTLubOWkfNiBv3joO59sau/TXw+Q==} 472 + engines: {node: '>=20'} 473 + 474 + fsevents@2.3.3: 475 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 476 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 477 + os: [darwin] 478 + 479 + gray-matter@4.0.3: 480 + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} 481 + engines: {node: '>=6.0'} 482 + 483 + is-extendable@0.1.1: 484 + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} 485 + engines: {node: '>=0.10.0'} 486 + 487 + js-yaml@3.14.2: 488 + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} 489 + hasBin: true 490 + 491 + kind-of@6.0.3: 492 + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 493 + engines: {node: '>=0.10.0'} 494 + 495 + ms@2.1.3: 496 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 497 + 498 + section-matter@1.0.0: 499 + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} 500 + engines: {node: '>=4'} 501 + 502 + sisteransi@1.0.5: 503 + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 504 + 505 + sprintf-js@1.0.3: 506 + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 507 + 508 + strip-ansi@7.2.0: 509 + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} 510 + engines: {node: '>=12'} 511 + 512 + strip-bom-string@1.0.0: 513 + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} 514 + engines: {node: '>=0.10.0'} 515 + 516 + tsx@4.22.3: 517 + resolution: {integrity: sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==} 518 + engines: {node: '>=18.0.0'} 519 + hasBin: true 520 + 521 + typescript@6.0.3: 522 + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} 523 + engines: {node: '>=14.17'} 524 + hasBin: true 525 + 526 + undici-types@7.24.6: 527 + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} 528 + 529 + snapshots: 530 + 531 + '@clack/core@1.3.1': 532 + dependencies: 533 + fast-wrap-ansi: 0.2.2 534 + sisteransi: 1.0.5 535 + 536 + '@clack/prompts@1.4.0': 537 + dependencies: 538 + '@clack/core': 1.3.1 539 + fast-string-width: 3.0.2 540 + fast-wrap-ansi: 0.2.2 541 + sisteransi: 1.0.5 542 + 543 + '@esbuild/aix-ppc64@0.28.0': 544 + optional: true 545 + 546 + '@esbuild/android-arm64@0.28.0': 547 + optional: true 548 + 549 + '@esbuild/android-arm@0.28.0': 550 + optional: true 551 + 552 + '@esbuild/android-x64@0.28.0': 553 + optional: true 554 + 555 + '@esbuild/darwin-arm64@0.28.0': 556 + optional: true 557 + 558 + '@esbuild/darwin-x64@0.28.0': 559 + optional: true 560 + 561 + '@esbuild/freebsd-arm64@0.28.0': 562 + optional: true 563 + 564 + '@esbuild/freebsd-x64@0.28.0': 565 + optional: true 566 + 567 + '@esbuild/linux-arm64@0.28.0': 568 + optional: true 569 + 570 + '@esbuild/linux-arm@0.28.0': 571 + optional: true 572 + 573 + '@esbuild/linux-ia32@0.28.0': 574 + optional: true 575 + 576 + '@esbuild/linux-loong64@0.28.0': 577 + optional: true 578 + 579 + '@esbuild/linux-mips64el@0.28.0': 580 + optional: true 581 + 582 + '@esbuild/linux-ppc64@0.28.0': 583 + optional: true 584 + 585 + '@esbuild/linux-riscv64@0.28.0': 586 + optional: true 587 + 588 + '@esbuild/linux-s390x@0.28.0': 589 + optional: true 590 + 591 + '@esbuild/linux-x64@0.28.0': 592 + optional: true 593 + 594 + '@esbuild/netbsd-arm64@0.28.0': 595 + optional: true 596 + 597 + '@esbuild/netbsd-x64@0.28.0': 598 + optional: true 599 + 600 + '@esbuild/openbsd-arm64@0.28.0': 601 + optional: true 602 + 603 + '@esbuild/openbsd-x64@0.28.0': 604 + optional: true 605 + 606 + '@esbuild/openharmony-arm64@0.28.0': 607 + optional: true 608 + 609 + '@esbuild/sunos-x64@0.28.0': 610 + optional: true 611 + 612 + '@esbuild/win32-arm64@0.28.0': 613 + optional: true 614 + 615 + '@esbuild/win32-ia32@0.28.0': 616 + optional: true 617 + 618 + '@esbuild/win32-x64@0.28.0': 619 + optional: true 620 + 621 + '@sindresorhus/slugify@3.0.0': 622 + dependencies: 623 + '@sindresorhus/transliterate': 2.3.1 624 + escape-string-regexp: 5.0.0 625 + 626 + '@sindresorhus/transliterate@2.3.1': {} 627 + 628 + '@types/node@25.9.1': 629 + dependencies: 630 + undici-types: 7.24.6 631 + 632 + ansi-regex@6.2.2: {} 633 + 634 + argparse@1.0.10: 635 + dependencies: 636 + sprintf-js: 1.0.3 637 + 638 + chalk@5.6.2: {} 639 + 640 + cmd-ts@0.15.0: 641 + dependencies: 642 + chalk: 5.6.2 643 + debug: 4.4.3 644 + didyoumean: 1.2.2 645 + strip-ansi: 7.2.0 646 + transitivePeerDependencies: 647 + - supports-color 648 + 649 + debug@4.4.3: 650 + dependencies: 651 + ms: 2.1.3 652 + 653 + didyoumean@1.2.2: {} 654 + 655 + esbuild@0.28.0: 656 + optionalDependencies: 657 + '@esbuild/aix-ppc64': 0.28.0 658 + '@esbuild/android-arm': 0.28.0 659 + '@esbuild/android-arm64': 0.28.0 660 + '@esbuild/android-x64': 0.28.0 661 + '@esbuild/darwin-arm64': 0.28.0 662 + '@esbuild/darwin-x64': 0.28.0 663 + '@esbuild/freebsd-arm64': 0.28.0 664 + '@esbuild/freebsd-x64': 0.28.0 665 + '@esbuild/linux-arm': 0.28.0 666 + '@esbuild/linux-arm64': 0.28.0 667 + '@esbuild/linux-ia32': 0.28.0 668 + '@esbuild/linux-loong64': 0.28.0 669 + '@esbuild/linux-mips64el': 0.28.0 670 + '@esbuild/linux-ppc64': 0.28.0 671 + '@esbuild/linux-riscv64': 0.28.0 672 + '@esbuild/linux-s390x': 0.28.0 673 + '@esbuild/linux-x64': 0.28.0 674 + '@esbuild/netbsd-arm64': 0.28.0 675 + '@esbuild/netbsd-x64': 0.28.0 676 + '@esbuild/openbsd-arm64': 0.28.0 677 + '@esbuild/openbsd-x64': 0.28.0 678 + '@esbuild/openharmony-arm64': 0.28.0 679 + '@esbuild/sunos-x64': 0.28.0 680 + '@esbuild/win32-arm64': 0.28.0 681 + '@esbuild/win32-ia32': 0.28.0 682 + '@esbuild/win32-x64': 0.28.0 683 + 684 + escape-string-regexp@5.0.0: {} 685 + 686 + esprima@4.0.1: {} 687 + 688 + extend-shallow@2.0.1: 689 + dependencies: 690 + is-extendable: 0.1.1 691 + 692 + fast-string-truncated-width@3.0.3: {} 693 + 694 + fast-string-width@3.0.2: 695 + dependencies: 696 + fast-string-truncated-width: 3.0.3 697 + 698 + fast-wrap-ansi@0.2.2: 699 + dependencies: 700 + fast-string-width: 3.0.2 701 + 702 + filename-reserved-regex@4.0.0: {} 703 + 704 + filenamify@7.0.1: 705 + dependencies: 706 + filename-reserved-regex: 4.0.0 707 + 708 + fsevents@2.3.3: 709 + optional: true 710 + 711 + gray-matter@4.0.3: 712 + dependencies: 713 + js-yaml: 3.14.2 714 + kind-of: 6.0.3 715 + section-matter: 1.0.0 716 + strip-bom-string: 1.0.0 717 + 718 + is-extendable@0.1.1: {} 719 + 720 + js-yaml@3.14.2: 721 + dependencies: 722 + argparse: 1.0.10 723 + esprima: 4.0.1 724 + 725 + kind-of@6.0.3: {} 726 + 727 + ms@2.1.3: {} 728 + 729 + section-matter@1.0.0: 730 + dependencies: 731 + extend-shallow: 2.0.1 732 + kind-of: 6.0.3 733 + 734 + sisteransi@1.0.5: {} 735 + 736 + sprintf-js@1.0.3: {} 737 + 738 + strip-ansi@7.2.0: 739 + dependencies: 740 + ansi-regex: 6.2.2 741 + 742 + strip-bom-string@1.0.0: {} 743 + 744 + tsx@4.22.3: 745 + dependencies: 746 + esbuild: 0.28.0 747 + optionalDependencies: 748 + fsevents: 2.3.3 749 + 750 + typescript@6.0.3: {} 751 + 752 + undici-types@7.24.6: {}
+2
pnpm-workspace.yaml
··· 1 + allowBuilds: 2 + esbuild: true
+21
src/commands/new.ts
··· 1 + import { command, restPositionals, string } from "cmd-ts"; 2 + import path from "node:path"; 3 + import slugify from "@sindresorhus/slugify"; 4 + import filenamify from "filenamify"; 5 + 6 + export const newCommand = command({ 7 + name: "new", 8 + description: "Create a new markdown file", 9 + args: { 10 + new: restPositionals({ 11 + type: string, 12 + displayName: "file", 13 + description: "name of the new post", 14 + }), 15 + }, 16 + handler: ({ new: titleArray }) => { 17 + const title = titleArray.join(" "); 18 + const slug = slugify(title); 19 + console.log(slug); 20 + }, 21 + });
+12
src/index.ts
··· 1 + #!/usr/bin/env node 2 + import { run, subcommands } from "cmd-ts"; 3 + import { newCommand } from "./commands/new"; 4 + 5 + const app = subcommands({ 6 + name: "mkd", 7 + cmds: { 8 + new: newCommand, 9 + }, 10 + }); 11 + 12 + run(app, process.argv.slice(2));
+18
test.md
··· 1 + --- 2 + author: Jack Platten 3 + createdAt: 2025-11-24T06:18:20.000Z 4 + modifiedAt: null 5 + title: Self hosting your PDS with Podman 6 + featured: true 7 + draft: false 8 + tags: 9 + - atproto 10 + - server 11 + description: A writeup of gotchas and other fun stuff along the way of deploying a PDS 12 + atUri: 'at://did:plc:cwdkf4xxjpznceembuuspt3d/site.standard.document/3mdrs3mtops2m' 13 + --- 14 + 15 + Bluesky is great (as evidenced by my multiple posts on it), but I wanted to own 16 + my data more than it living on the Bluesky servers. Now I could have just used 17 + the standard deployment as shown [in the PDS repo](https://github.com/bluesky-social/pds), 18 + but I wanted to do something a little more fitting my deployment practices.
+23
tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "lib": ["ES2022", "DOM"], 4 + "target": "ES2022", 5 + "module": "ESNext", 6 + "moduleResolution": "bundler", 7 + "outDir": "./dist", 8 + "rootDir": "./src", 9 + "declaration": true, 10 + "sourceMap": true, 11 + "strict": true, 12 + "skipLibCheck": true, 13 + "esModuleInterop": true, 14 + "resolveJsonModule": true, 15 + "forceConsistentCasingInFileNames": true, 16 + "noFallthroughCasesInSwitch": true, 17 + "noUncheckedIndexedAccess": true, 18 + "noUnusedLocals": false, 19 + "noUnusedParameters": false, 20 + "types": ["node"], 21 + }, 22 + "include": ["src/**/*"], 23 + }
+1
tsconfig.tsbuildinfo
··· 1 + {"root":["./src/index.ts","./src/commands/new.ts"],"version":"6.0.3"}