TL;DR
- ์ฝ๊ธฐ ๋ชจ๋์์ ์ฃฝ์ด๋ฒ๋ฆฌ๋ vim ๋ด๋น๊ฒ์ด์ ์ ๋์ด๋ฆฌ๋ Obsidian ํ๋ฌ๊ทธ์ธ
j/kยทd/u์คํฌ๋กค๊ณผf๋งํฌ ํํธ๋ก ๋ง์ฐ์ค ์์ด ์ฝ๊ธฐ ๋ชจ๋ ํ์- ์์์ ์น์ธ์ ๋ฐ์ ์ปค๋ฎค๋ํฐ ํ๋ฌ๊ทธ์ธ ์คํ ์ด์ ์ ์ ๋ฑ๋ก
AI-assisted
Obsidian์์ vim ํค ๋ฐ์ธ๋ฉ์ ์ผ๋๊ณ ์ด๋ค. ํธ์งํ ๋๋ j, k๋ก ์ ๋์๋ค๋๋๋ฐ, ์ฝ๊ธฐ ๋ชจ๋๋ก ๋ฐ๊พธ๋ ์๊ฐ ๋ค ๋จนํต์ด ๋๋ค.
๊ธ์ ์ฝ์ ๋๋ ๊น๋ํ๊ฒ ์ฝ๊ธฐ ๋ชจ๋๋ก ๋ณด๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง์์ ์ฝ๋ ์ค์๋ ํค๋ณด๋๋ก ํํ ๋๊ธฐ๊ณ ์ถ์๋ค.
๊ทธ๋์ ์ฐพ์๋ดค๋๋ ๋ง์นจ ๋ฑ ๋ง๋ ๊ฒ ์์๋ค. vim-scrolling์ด๋ผ๋ ํ๋ฌ๊ทธ์ธ์ธ๋ฐ, ์ฝ๊ธฐ ๋ชจ๋์์๋ j/k๋ก ์คํฌ๋กคํ๊ณ gg, G๋ก ์์๋ ๋๊น์ง ์ ํ๊ฐ ๋๋ค. ํ์ํ ๊ธฐ๋ฅ๋ง ๋ฑ ๋ค์ด์์ด์ ํ์ฐธ ์ ์ผ๋ค.
๋ค๋ง ์ฐ๋ค ๋ณด๋ ๊ธฐ์กด ํฌ๋กฌ์์ ์ฌ์ฉํ๋ Vimium ์ต์คํ ์ ์ ๋นํ๋ฉด ์ด์ง ์์ฌ์ด ๊ฒ ๋ ๊ฐ ์์๋ค.
ํ๋๋ ๋ฐ ํ์ด์ง ์คํฌ๋กค. Ctrl+D/Ctrl+U๋ก๋ง ๋๋๋ฐ ๋๋ ๊ทธ๋ฅ d/u๋ก ๋๋ฅด๋ ๊ฒ ํธํ๋ค. ์ฝ๊ธฐ ๋ชจ๋์ ์ด์ฐจํผ ํธ์ง ๊ธฐ๋ฅ์ด ์์ผ๋ d, u๋ก ํด๋ ํฐ ๋ฌธ์ ๊ฐ ์์ ๊ฒ ๊ฐ์๋ค (์์์ํํ
์ถ๊ฐํด๋ฌ๋ผ๊ณ ์ด์๋ ๋จ๊ฒจ๋ดค๋๋ฐ ์๋ณธ์ vim ํ์ค์ ์ถฉ์คํ๊ฒ ๋๊ณ ์ถ๋ค๋ ๋ต์ด ์๋ค)
๋ค๋ฅธ ํ๋๋ ๋งํฌ์๋ค. ์ฝ๋ค๊ฐ ๋งํฌ๋ฅผ ๋๋ฅด๋ ค๋ฉด ๊ฒฐ๊ตญ ๋ง์ฐ์ค๋ก ์์ด ๊ฐ๋ค. ํฌ๋กฌ์์ Vimium์ผ๋ก f ๋๋ฌ์ ๋งํฌ๋ง๋ค ๋ผ๋ฒจ ๋์ฐ๊ณ ํค๋ณด๋๋ก ์ ํํ๋ ๊ฒ ์๋ ํธํ์ด์ ๊ทธ ๋๋์ ์ฝ๊ธฐ ๋ชจ๋์๋ ๋ฃ๊ณ ์ถ์๋ค.
๊ทธ๋์ ๋ ๊ฐ๋ฅผ ๋ถ์๋ค.
Ctrl์์ดd/u๋ก๋ ๋ฐ ํ์ด์ง ์คํฌ๋กคf๋ฅผ ๋๋ฅด๋ฉด ํ๋ฉด์ ๋ณด์ด๋ ๋งํฌ๋ง๋ค ๋ผ๋ฒจ์ด ๋จ๊ณ ๋ผ๋ฒจ์ ์ ๋ ฅํ๋ฉด ๊ทธ ๋งํฌ๋ก ์ ํ. ๋ด๋ถ ๋ฌธ์๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊น์ง ๋จ๊ณ ,Enter๋ก ์ด๋(์ธ๋ถ ๋งํฌ๋ URL์ด ์ด๋ฆฐ๋ค),Esc๋ก ์ทจ์.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฝ๋ ๋์ ๋ง์ฐ์ค์ ์ ์ ๋๊ณ vim ํค๋ง์ผ๋ก ๊ฑฐ์ ๋ค ๋๋ค. ๋ฑ ์ํ๋ ๊ทธ๋ฆผ์ด๋ค.
์ปค๋ฎค๋ํฐ ํ๋ฌ๊ทธ์ธ ๋ฑ๋ก๊น์ง
๊ฐ์ธ์ฉ fork๋ก ํ๋์ ์ฐ๋ค๊ฐ ์ปค๋ฎค๋ํฐ ํ๋ฌ๊ทธ์ธ ์คํ ์ด์ ์ ์์ผ๋ก ์ฌ๋ ธ๋ค. ์ด์ Vim Reading Navigation์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ฒ์ํด์ ์ค์นํ ์ ์๋ค.
fork๋ฅผ ์คํ ์ด์ ์ฌ๋ฆฌ๋ ๊ฒ ์์ฒด๋ ์ ์ ๊ฒฝ๋ก๋ค. ์ฌ๋ฆฌ๊ธฐ ์ ์ ์ธ ๊ฐ์ง๋ฅผ ํ์ธํ๋ค.
- ๋ผ์ด์ ์ค: ์๋ณธ์ด 0BSD๋ผ ์์ ยท์ฌ๋ฐฐํฌ์ ์ ์ฝ์ด ์๋ค
- fork ์ ์ฑ : Developer Policies์ ์์์์ ๊ณต๊ฐ ์น์ธ์ด ์๊ฑฐ๋, ์ฐ๋ฝ์ด ๋ฟ์ง ์๊ณ ์๋ณธ์ด 6๊ฐ์ ์ด์ ๋ฌดํ๋์ด๋ฉด ๋ฑ๋กํ ์ ์๋ค. ์ด๋ ์ชฝ์ด๋ ์์์ ํฌ๋ ๋ง์ ํ์
- ์ ๋ก: Slides Extended์ฒ๋ผ ์คํ ์ด์ ์น์ธ๋ fork๊ฐ ์ด๋ฏธ ์๋ค
์์์ ์น์ธ์ ์๋ณธ repo์ issue๋ก ์์ฒญํ๋ค. ์์ ์ ๋จ๊ธด ๊ธฐ๋ฅ ์ ์ issue๋ฅผ ์ธ์ฉํด upstream ๊ธฐ์ฌ๋ฅผ ๋จผ์ ์๋ํ๋ ํ๋ฆ์ ๋ณด์ฌ์ฃผ๊ณ โapproved ํ๋ง๋๋ฉด ๋๋คโ๊ณ ์ ์ด ์์์์ ๋ถ๋ด์ ์ค์๋ค. ์ดํ ๋ง์ ์น์ธ ์ฝ๋ฉํธ๋ฅผ ๋ฐ์๊ณ ๊ทธ permalink๊ฐ ์น์ธ ์ฆ๊ฑฐ๊ฐ ๋๋ค.
๋ฆด๋ฆฌ์ฆ ์๋ํ
๋ฆด๋ฆฌ์ฆ๋ ๋ก์ปฌ ๋ช ๋ น์์ ์์ํด CI๊ฐ ๋๊น์ง ์ฒ๋ฆฌํ๋ค.
npm version patch # ๋ฒ์ ๋๊ธฐํ + ํ๊ทธ ์์ฑ
git push origin master --tags # ํ๊ทธ push โ release workflow ํธ๋ฆฌ๊ฑฐ- ๋ฒ์ ๋๊ธฐํ:
npm version์ด package.json์version์คํฌ๋ฆฝํธ ํ ์ผ๋กversion-bump.mjs๋ฅผ ์คํํ๋ค. manifest.json์ ๋ฒ์ ์ ์ฌ๋ฆฌ๊ณ versions.json์"์ ๋ฒ์ ": minAppVersionํญ๋ชฉ์ ์ถ๊ฐํ๋ค - ํ๊ทธ ๊ท์น: Obsidian์ release ํ๊ทธ์ manifest ๋ฒ์ ์ด ์ผ์นํด์ผ ํ๋ค.
.npmrc์tag-version-prefix=""๋ฅผ ๋ฃ์ด ํ๊ทธ๊ฐv1.1.1์ด ์๋๋ผ1.1.1๋ก ์๊ธฐ๊ฒ ํ๋ค - ๋น๋ ๊ฒ์ฆ: pushยทPR๋ง๋ค lint workflow๊ฐ Node 20ยท22 matrix์์ ๋น๋์ eslint๋ฅผ ๋๋ฆฐ๋ค
ํ๊ทธ๊ฐ push๋๋ฉด release workflow๊ฐ ์ด์ด๋ฐ๋๋ค. ํต์ฌ๋ง ๋ฐ์ทํ๋ฉด ์ด๋ ๋ค.
on:
push:
tags: ["*"]
permissions:
contents: write
attestations: write
id-token: write
steps:
# actions/checkout โ setup-node โ npm ci โ npm run build
- uses: actions/attest-build-provenance@v2
with:
subject-path: |
main.js
styles.css
- run: gh release create "${GITHUB_REF_NAME}" main.js manifest.json styles.css- ๋น๋:
npm run build๊ฐtsc -noEmitํ์ ๊ฒ์ฌ๋ฅผ ํต๊ณผํด์ผ esbuild production ๋ฒ๋ค์ ๋ง๋ ๋ค - ์ถ์ฒ ์ฆ๋ช
:
attest-build-provenance๊ฐ ๋น๋ ์ฐ์ถ๋ฌผ์ attestation์ ์ฒจ๋ถํ๋ค. ์คํ ์ด ์๋ ๋ฆฌ๋ทฐ๊ฐ ํ์ธํ๋ ํญ๋ชฉ์ด๊ณgh attestation verify main.js --repo DS-argus/vim-reading-nav๋ก ๋๊ตฌ๋ ๊ฒ์ฆํ ์ ์๋ค - release ์์ฑ: ํ๊ทธ ์ด๋ฆ ๊ทธ๋๋ก release๋ฅผ ๋ง๋ค๊ณ
main.jsยทmanifest.jsonยทstyles.css๋ฅผ ์์ฐ์ผ๋ก ์ฒจ๋ถํ๋ค
์ ์ถ๊ณผ ๋ฆฌ๋ทฐ ๋์
์ ์ถ์ community.obsidian.md์ ๋ก๊ทธ์ธํด repo URL์ ์น์ผ๋ก ๋ฃ์ผ๋ฉด ๋๋๋ค. obsidian-releases repo์ community-plugins.json PR์ ๋ณด๋ด๋ ์ ๋ฐฉ์์ ํ๊ธฐ๋๊ณ ์ง๊ธ ๊ทธ ํ์ผ์ ๋๋ ํ ๋ฆฌ์์ ์๋ ๋ฏธ๋ฌ๋ง๋๋ ์ฐ์ถ๋ฌผ์ด๋ค. ํ๋ฌ๊ทธ์ธ id๋ ์ ์ญ์์ ์ ์ผํด์ผ ํ๊ณ obsidian์ด๋ผ๋ ๋จ์ด๋ฅผ ๋ฃ์ ์ ์๋ค.
์ ์ถํ๋ฉด ์๋ ๋ฆฌ๋ทฐ(Scorecard)๊ฐ ๋๋ค. ์ค์ ๋ก ๋ฐ์ ํผ๋๋ฐฑ์ 3๊ฑด์ด์๋ค.
- Issues disabled: fork๋ Issues ํญ์ด ๊ธฐ๋ณธ์ผ๋ก ๊บผ์ ธ ์๋ค.
gh repo edit --enable-issues๋ก ํ์ฑํ - README links to another repository with the same name: upstream๊ณผ repo ์ด๋ฆ์ด ๊ฐ์ ์๊ธด ์คํ. repo๋ฅผ ํ๋ฌ๊ทธ์ธ id์ธ
vim-reading-nav๋ก renameํ๋ ๋ฐ๋ ์กฐ๊ฑด์ด ์ฌ๋ผ์ก๋ค. GitHub ๋ฆฌ๋ค์ด๋ ํธ ๋์ ๊ธฐ์กด ๋งํฌ๋ ์์ ํ๋ค. ๋จ, ๊ตฌ ์ด๋ฆ์ผ๋ก ์ repo๋ฅผ ๋ง๋ค๋ฉด ๋ฆฌ๋ค์ด๋ ํธ๊ฐ ๋๊ธด๋ค - Missing artifact attestations: ์์ release workflow์ attestation ๋จ๊ณ๋ฅผ ์ถ๊ฐํด ํด๊ฒฐ
์ฃผ์: ๊ณต์ ๋ฌธ์์ ์๋ ๊ฒ๋ค
- fork repo๋ ์์ ์๊ฐ Actions ํญ์์ workflow๋ฅผ ์๋์ผ๋ก ์ผ๊ธฐ ์ ๊น์ง ์ด๋ค ํธ๋ฆฌ๊ฑฐ๋ ๋์ง ์๋๋ค
- ์ ์ถ ๋ชฉ๋ก์ Request review๋ ์๋ ์ฌ๊ฒ์ฌ๊ฐ ์๋๋ผ ์ฌ๋ ๋ฆฌ๋ทฐ ์์ฒญ์ด๋ค. ์๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ค์ ๋๋ฆฌ๋ ค๋ฉด ๋ฒ์ ์ ์ฌ๋ฆฐ ์ release๊ฐ ํ์ํ๋ค
- Publish ํ ์ฑ ๊ฒ์์ ๋จ๊ธฐ๊น์ง ๋ฐฐ์น ์ ํ๊ฐ ๋ช ๋จ๊ณ ์๋ค. ์ค์ธก์ผ๋ก 4-5์๊ฐ ๊ฑธ๋ ธ๋ค
์จ๋ณด๋ ค๋ฉด
์ด์ ์ปค๋ฎค๋ํฐ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ค์นํ๋ฉด ๋๋ค. ์ค์ โ Community plugins โ Browse์์ Vim Reading Navigation์ ๊ฒ์ํ๋ค.
์ง์ ๋น๋ํด์ ์ฐ๋ ๋ฐฉ๋ฒ๋ ๊ทธ๋๋ก ์๋ค.
git clone https://github.com/DS-argus/vim-reading-nav
cd vim-reading-nav
npm install
npm run build๋น๋ํ๋ฉด ๋์ค๋ main.js, manifest.json, styles.css๋ฅผ ๋ณผํธ์ .obsidian/plugins/vim-reading-nav/์ ๋ฃ๊ณ Obsidian์ ๋ค์ ์ผ๋ฉด ๋๋ค. ๋ ๊ฐ์ง๋ง ์ผ์ ธ ์์ผ๋ฉด ๋๋ค: Vim key bindings(์ค์ โ ์๋ํฐ), ๊ทธ๋ฆฌ๊ณ ๋งํฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ฐ๋ ค๋ฉด Page Preview ์ฝ์ด ํ๋ฌ๊ทธ์ธ.