mirror of
https://github.com/philemonchiro/obsidian-notekeeper.git
synced 2026-07-22 17:10:28 +00:00
Compare commits
No commits in common. "main" and "0.1.1" have entirely different histories.
17 changed files with 956 additions and 10196 deletions
50
.github/workflows/release.yml
vendored
50
.github/workflows/release.yml
vendored
|
|
@ -1,50 +0,0 @@
|
|||
name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '[0-9]+.[0-9]+.[0-9]+'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
id-token: write
|
||||
attestations: write
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Build plugin
|
||||
run: npm run build
|
||||
|
||||
- name: Attest build provenance
|
||||
uses: actions/attest-build-provenance@v4
|
||||
with:
|
||||
subject-path: |
|
||||
main.js
|
||||
manifest.json
|
||||
styles.css
|
||||
|
||||
- name: Create or update release
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
TAG: ${{ github.ref_name }}
|
||||
run: |
|
||||
if gh release view "$TAG" >/dev/null 2>&1; then
|
||||
gh release upload "$TAG" main.js manifest.json styles.css --clobber
|
||||
else
|
||||
gh release create "$TAG" \
|
||||
--title "$TAG" \
|
||||
--generate-notes \
|
||||
main.js manifest.json styles.css
|
||||
fi
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -4,4 +4,3 @@ node_modules/
|
|||
data.json
|
||||
.env
|
||||
.env.local
|
||||
launch/
|
||||
|
|
|
|||
|
|
@ -1,50 +0,0 @@
|
|||
# Contributing to Notekeeper
|
||||
|
||||
Thanks for considering a contribution. This is a small project and the bar to merge is intentionally low — useful is more important than perfect.
|
||||
|
||||
## Project shape
|
||||
|
||||
- **`main.ts`** — the entire plugin source, single file by design. Includes the view, modals, settings tab, and helpers.
|
||||
- **`styles.css`** — every visual style. Light-theme overrides live in a clearly-marked block at the bottom.
|
||||
- **`manifest.json` / `versions.json`** — the Obsidian plugin manifest and per-version minimum-app-version map.
|
||||
- **`main.js`** — esbuild output. Committed so manual installs work without a build step. Rebuild it before opening a PR.
|
||||
|
||||
## Build and dev
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run dev # watch + rebuild on save
|
||||
npm run build # type-check + production bundle
|
||||
```
|
||||
|
||||
Local lint (matches the directory's automated scan, modulo the rules disabled in `eslint.config.mjs`):
|
||||
|
||||
```bash
|
||||
npx eslint main.ts
|
||||
```
|
||||
|
||||
## Opening a PR
|
||||
|
||||
- Make sure `npm run build` succeeds and `main.js` is up to date in the commit.
|
||||
- Run `npx eslint main.ts` — should be clean.
|
||||
- Test the change in a real vault. The `Documents/Obsidian Vault` pattern works, or any vault you don't mind experimenting on; just symlink or copy `main.js`, `manifest.json`, and `styles.css` into `<vault>/.obsidian/plugins/notekeeper/` and reload.
|
||||
- Keep the diff narrow. If you find adjacent things to clean up, file a separate issue or PR.
|
||||
|
||||
## Filing an issue
|
||||
|
||||
Open one [on GitHub](https://github.com/PhilemonChiro/obsidian-notekeeper/issues). Helpful to include:
|
||||
|
||||
- Obsidian version and platform (desktop/mobile, OS)
|
||||
- Notekeeper version (from settings)
|
||||
- A short repro — ideally the smallest sequence of clicks that triggers the behaviour
|
||||
- A screenshot or short clip if the bug is visual
|
||||
|
||||
Feature requests are very welcome. Even one-line ones.
|
||||
|
||||
## Releases
|
||||
|
||||
Releases ship through `.github/workflows/release.yml` on every `X.Y.Z` tag push. The workflow builds, signs `main.js` / `manifest.json` / `styles.css` with [GitHub build provenance attestation](https://docs.github.com/en/actions/security-for-github-actions/using-artifact-attestations), and either creates the release or uploads to an existing tag.
|
||||
|
||||
## Licence
|
||||
|
||||
Notekeeper is MIT. Contributions are accepted under the same licence.
|
||||
26
README.md
26
README.md
|
|
@ -1,16 +1,12 @@
|
|||
# Notekeeper
|
||||
|
||||
A Google Keep–style wall of sticky notes for your Obsidian vault. Browse, capture, pin, color, and curate your notes on a sticky-note wall — or switch to a denser card grid when you need more density.
|
||||
A Google Keep–style masonry of cards for your Obsidian vault. Browse, capture, pin, color, archive, and filter your notes from one screen — without leaving the grid.
|
||||
|
||||

|
||||

|
||||
|
||||
Capture a note with a title, body, optional pin, and color — saved to the wall in one click:
|
||||
Click any card to open a full markdown-rendered preview with one-click pin / edit / color / archive / open-in-tab actions:
|
||||
|
||||

|
||||
|
||||
Click any sticky for a full markdown-rendered preview that inherits the note's color:
|
||||
|
||||

|
||||

|
||||
|
||||
## Features
|
||||
|
||||
|
|
@ -113,20 +109,6 @@ Open Obsidian → Settings → Community plugins → Browse, search "Notekeeper"
|
|||
2. Copy them into `<vault>/.obsidian/plugins/notekeeper/`
|
||||
3. Reload Obsidian and enable Notekeeper in Settings → Community plugins
|
||||
|
||||
## Development
|
||||
|
||||
Source lives in `main.ts`. The committed `main.js` is what Obsidian loads at runtime; rebuild it with esbuild after editing `main.ts`:
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run build # type-check + bundle to main.js
|
||||
npm run dev # rebuild on save
|
||||
```
|
||||
|
||||
`main.ts`, `manifest.json`, and `styles.css` are the authored sources. The `main.js` artifact is produced by the build and committed alongside (so manual installs work without a build step).
|
||||
|
||||
PRs welcome. The codebase is single-file by design — keep it that way unless the addition is large enough to warrant its own module.
|
||||
|
||||
## License
|
||||
|
||||
MIT — see [LICENSE](./LICENSE).
|
||||
|
|
|
|||
BIN
docs/capture.png
BIN
docs/capture.png
Binary file not shown.
|
Before Width: | Height: | Size: 1.7 MiB |
BIN
docs/grid.png
BIN
docs/grid.png
Binary file not shown.
|
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 410 KiB |
BIN
docs/modal.png
BIN
docs/modal.png
Binary file not shown.
|
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 373 KiB |
|
|
@ -1,40 +0,0 @@
|
|||
import esbuild from "esbuild";
|
||||
import process from "process";
|
||||
import { builtinModules } from "node:module";
|
||||
|
||||
const prod = process.argv[2] === "production";
|
||||
|
||||
const ctx = await esbuild.context({
|
||||
entryPoints: ["main.ts"],
|
||||
bundle: true,
|
||||
external: [
|
||||
"obsidian",
|
||||
"electron",
|
||||
"@codemirror/autocomplete",
|
||||
"@codemirror/collab",
|
||||
"@codemirror/commands",
|
||||
"@codemirror/language",
|
||||
"@codemirror/lint",
|
||||
"@codemirror/search",
|
||||
"@codemirror/state",
|
||||
"@codemirror/view",
|
||||
"@lezer/common",
|
||||
"@lezer/highlight",
|
||||
"@lezer/lr",
|
||||
...builtinModules,
|
||||
],
|
||||
format: "cjs",
|
||||
target: "es2020",
|
||||
logLevel: "info",
|
||||
sourcemap: prod ? false : "inline",
|
||||
treeShaking: true,
|
||||
outfile: "main.js",
|
||||
minify: false,
|
||||
});
|
||||
|
||||
if (prod) {
|
||||
await ctx.rebuild();
|
||||
process.exit(0);
|
||||
} else {
|
||||
await ctx.watch();
|
||||
}
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
import obsidianmd from 'eslint-plugin-obsidianmd';
|
||||
import tsParser from '@typescript-eslint/parser';
|
||||
|
||||
const plugin = obsidianmd.default || obsidianmd;
|
||||
|
||||
export default [
|
||||
...plugin.configs.recommended,
|
||||
{
|
||||
files: ['main.ts'],
|
||||
languageOptions: {
|
||||
parser: tsParser,
|
||||
parserOptions: {
|
||||
ecmaVersion: 'latest',
|
||||
sourceType: 'module',
|
||||
project: './tsconfig.json',
|
||||
tsconfigRootDir: import.meta.dirname,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
ignores: ['main.js', 'node_modules/**', 'docs/**', 'launch/**'],
|
||||
},
|
||||
{
|
||||
files: ['main.ts'],
|
||||
rules: {
|
||||
'@typescript-eslint/no-unsafe-member-access': 'off',
|
||||
'@typescript-eslint/no-unsafe-call': 'off',
|
||||
'@typescript-eslint/no-unsafe-assignment': 'off',
|
||||
'@typescript-eslint/no-unsafe-argument': 'off',
|
||||
'@typescript-eslint/no-unsafe-return': 'off',
|
||||
'@typescript-eslint/require-await': 'error',
|
||||
},
|
||||
},
|
||||
];
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"id": "notekeeper",
|
||||
"name": "Notekeeper",
|
||||
"version": "0.2.5",
|
||||
"minAppVersion": "1.7.2",
|
||||
"version": "0.1.1",
|
||||
"minAppVersion": "1.4.0",
|
||||
"description": "Browse your vault as a Google Keep-style masonry of cards. Quick capture, pin, color, archive, and filter notes by labels — sticky-note style.",
|
||||
"author": "Philemon Chiro",
|
||||
"authorUrl": "https://github.com/PhilemonChiro",
|
||||
|
|
|
|||
5099
package-lock.json
generated
5099
package-lock.json
generated
File diff suppressed because it is too large
Load diff
11
package.json
11
package.json
|
|
@ -1,25 +1,20 @@
|
|||
{
|
||||
"name": "obsidian-notekeeper",
|
||||
"version": "0.2.5",
|
||||
"version": "0.1.1",
|
||||
"description": "Browse your vault as a Google Keep-style masonry of cards. Quick capture, pin, color, archive, and filter notes by labels.",
|
||||
"author": "Philemon Chiro",
|
||||
"license": "MIT",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "node esbuild.config.mjs",
|
||||
"build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production"
|
||||
"build": "node esbuild.config.mjs production"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20",
|
||||
"@typescript-eslint/parser": "^8.59.1",
|
||||
"builtin-modules": "^3.3.0",
|
||||
"esbuild": "^0.21.0",
|
||||
"eslint": "^9.39.4",
|
||||
"eslint-plugin-obsidianmd": "^0.2.9",
|
||||
"obsidian": "latest",
|
||||
"tslib": "^2.6.0",
|
||||
"typescript": "^5.4.0"
|
||||
},
|
||||
"pnpm": {
|
||||
"onlyBuiltDependencies": ["esbuild"]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
969
styles.css
969
styles.css
File diff suppressed because it is too large
Load diff
|
|
@ -1,21 +0,0 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"inlineSourceMap": true,
|
||||
"inlineSources": true,
|
||||
"module": "ESNext",
|
||||
"target": "ES2020",
|
||||
"allowJs": true,
|
||||
"noImplicitAny": false,
|
||||
"moduleResolution": "node",
|
||||
"importHelpers": true,
|
||||
"isolatedModules": true,
|
||||
"strictNullChecks": false,
|
||||
"lib": ["DOM", "ES2020"],
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"downlevelIteration": true
|
||||
},
|
||||
"include": ["**/*.ts"],
|
||||
"exclude": ["node_modules", "main.js"]
|
||||
}
|
||||
|
|
@ -1,11 +1,4 @@
|
|||
{
|
||||
"0.1.0": "1.4.0",
|
||||
"0.1.1": "1.4.0",
|
||||
"0.1.2": "1.7.2",
|
||||
"0.2.0": "1.7.2",
|
||||
"0.2.1": "1.7.2",
|
||||
"0.2.2": "1.7.2",
|
||||
"0.2.3": "1.7.2",
|
||||
"0.2.4": "1.7.2",
|
||||
"0.2.5": "1.7.2"
|
||||
"0.1.1": "1.4.0"
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue