@carlesandres/house 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -137
- package/README.md +15 -15
- package/package.json +1 -1
- package/src/Browser.tsx +212 -134
- package/src/CommandPalette.tsx +70 -46
- package/src/Footer.tsx +66 -26
- package/src/Header.tsx +68 -0
- package/src/HelpOverlay.tsx +59 -41
- package/src/brand.ts +7 -0
- package/src/cli/argv.ts +34 -3
- package/src/config/load.ts +84 -19
- package/src/discovery/walk.ts +8 -3
- package/src/index.tsx +64 -11
- package/src/layout/resolve.ts +9 -9
- package/src/theme/colors.ts +51 -15
- package/src/theme/types.ts +7 -0
- package/src/update/cache.ts +77 -0
- package/src/update/check.ts +165 -0
- package/src/update/compare.ts +41 -0
- package/src/update/notice.ts +29 -0
- package/src/update/runtime.ts +48 -0
- package/src/update/useUpdateNotice.ts +24 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,31 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
All notable changes to house land here. Format follows
|
|
4
|
-
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project
|
|
5
|
-
follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html) from
|
|
6
|
-
v0.1.0 onward.
|
|
3
|
+
All notable changes to house land here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html) from v0.1.0 onward.
|
|
7
4
|
|
|
8
|
-
The publish workflow (`.github/workflows/publish.yml`) runs on the
|
|
9
|
-
`release: published` event, runs `npm publish` via Trusted Publisher,
|
|
10
|
-
and lets GitHub auto-generate release notes from commit subjects; this
|
|
11
|
-
file is the curated, narrative version.
|
|
5
|
+
The publish workflow (`.github/workflows/publish.yml`) runs on the `release: published` event, runs `npm publish` via Trusted Publisher, and lets GitHub auto-generate release notes from commit subjects; this file is the curated, narrative version.
|
|
12
6
|
|
|
13
7
|
## [Unreleased]
|
|
14
8
|
|
|
9
|
+
## [0.4.1] — 2026-05-22
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Header chrome: borderless one-row identity strip above the panes carries the ⌂ brand mark and running version. Renders in both directory mode (Browser) and single-file mode (App). Hidden on terminals shorter than 20 rows so tight panes keep the reader breathable.
|
|
14
|
+
|
|
15
15
|
## [0.4.0] — 2026-05-21
|
|
16
16
|
|
|
17
17
|
### Added
|
|
18
18
|
|
|
19
|
-
- Command palette v1: `ctrl+p` opens a modal palette with visible browser
|
|
20
|
-
|
|
21
|
-
filter, open-in-browser, and theme controls.
|
|
22
|
-
- Palette search uses a small tiered scorer so empty queries stay in keymap
|
|
23
|
-
order while typed queries rank stronger title and word-boundary matches.
|
|
19
|
+
- Command palette v1: `ctrl+p` opens a modal palette with visible browser commands derived from the keymap, including quit, sidebar toggle, help, filter, open-in-browser, and theme controls.
|
|
20
|
+
- Palette search uses a small tiered scorer so empty queries stay in keymap order while typed queries rank stronger title and word-boundary matches.
|
|
24
21
|
|
|
25
22
|
### Fixed
|
|
26
23
|
|
|
27
|
-
- Reader scroll focus is suspended while overlays are open, preventing palette
|
|
28
|
-
arrow navigation from scrolling the markdown pane behind the modal.
|
|
24
|
+
- Reader scroll focus is suspended while overlays are open, preventing palette arrow navigation from scrolling the markdown pane behind the modal.
|
|
29
25
|
|
|
30
26
|
### Tests
|
|
31
27
|
|
|
@@ -37,77 +33,43 @@ Beta release gates (DESIGN §10.2) closed.
|
|
|
37
33
|
|
|
38
34
|
### Fixed
|
|
39
35
|
|
|
40
|
-
- Language-tagged fenced code blocks no longer disappear while markdown
|
|
41
|
-
|
|
42
|
-
markdown/code-block rendering fixes, and the browser pane no longer
|
|
43
|
-
remounts markdown for one file while still holding another file's loaded
|
|
44
|
-
content.
|
|
45
|
-
- Strikethrough text (`~~strike~~`) now renders distinctly (dim + muted
|
|
46
|
-
foreground) instead of as plain body text. opentui's syntax-style API
|
|
47
|
-
has no true strikethrough attribute; this is the closest visual we can
|
|
48
|
-
produce, documented in DESIGN §5.1.
|
|
36
|
+
- Language-tagged fenced code blocks no longer disappear while markdown highlighting settles. `house` now uses opentui `0.2.12`, which includes markdown/code-block rendering fixes, and the browser pane no longer remounts markdown for one file while still holding another file's loaded content.
|
|
37
|
+
- Strikethrough text (`~~strike~~`) now renders distinctly (dim + muted foreground) instead of as plain body text. opentui's syntax-style API has no true strikethrough attribute; this is the closest visual we can produce, documented in DESIGN §5.1.
|
|
49
38
|
|
|
50
39
|
### Changed
|
|
51
40
|
|
|
52
41
|
- Reduced re-renders and allocations in `Browser` / `Footer` hot paths.
|
|
53
|
-
- DESIGN §10.2 test gate rephrased to target the integration surface
|
|
54
|
-
house owns (the tree-sitter scope map) rather than re-testing opentui's
|
|
55
|
-
renderer; `test/theme-syntax-map.test.ts` enforces scope coverage for
|
|
56
|
-
every node type §5.1.3 promises.
|
|
42
|
+
- DESIGN §10.2 test gate rephrased to target the integration surface house owns (the tree-sitter scope map) rather than re-testing opentui's renderer; `test/theme-syntax-map.test.ts` enforces scope coverage for every node type §5.1.3 promises.
|
|
57
43
|
|
|
58
44
|
### Docs
|
|
59
45
|
|
|
60
|
-
- README embeds a VHS-generated demo gif; `tape/` holds the source
|
|
61
|
-
|
|
62
|
-
- `CONTRIBUTING.md` documents the `captureSpans()` / `MockTreeSitterClient`
|
|
63
|
-
/ `TestRecorder` testing patterns and the "before blaming `<markdown>`"
|
|
64
|
-
stale-watcher debugging checklist.
|
|
46
|
+
- README embeds a VHS-generated demo gif; `tape/` holds the source scripts.
|
|
47
|
+
- `CONTRIBUTING.md` documents the `captureSpans()` / `MockTreeSitterClient` / `TestRecorder` testing patterns and the "before blaming `<markdown>`" stale-watcher debugging checklist.
|
|
65
48
|
|
|
66
49
|
## [0.3.0] — 2026-05-16
|
|
67
50
|
|
|
68
51
|
### Changed
|
|
69
52
|
|
|
70
|
-
- **Project renamed from `openmdr` to `house`.** The npm package is now
|
|
71
|
-
|
|
72
|
-
not receive further releases. The CLI binary is now `house` (was
|
|
73
|
-
`openmdr`). The GitHub repository moved to
|
|
74
|
-
`https://github.com/carlesandres/house`; GitHub auto-redirects old
|
|
75
|
-
URLs and issue/PR numbers are preserved. The theme schema file moved
|
|
76
|
-
to `schema/house-theme.schema.json` and its `$id` is now a GitHub URL
|
|
77
|
-
on the new repo.
|
|
78
|
-
- `/` is no longer reserved (DESIGN.md §7.3) — it now drives the filter
|
|
79
|
-
input.
|
|
53
|
+
- **Project renamed from `openmdr` to `house`.** The npm package is now `@carlesandres/house`; `@carlesandres/openmdr` is deprecated and will not receive further releases. The CLI binary is now `house` (was `openmdr`). The GitHub repository moved to `https://github.com/carlesandres/house`; GitHub auto-redirects old URLs and issue/PR numbers are preserved. The theme schema file moved to `schema/house-theme.schema.json` and its `$id` is now a GitHub URL on the new repo.
|
|
54
|
+
- `/` is no longer reserved (DESIGN.md §7.3) — it now drives the filter input.
|
|
80
55
|
|
|
81
56
|
### Added
|
|
82
57
|
|
|
83
|
-
- `--sort <mode>` flag selecting the per-directory group order in the
|
|
84
|
-
|
|
85
|
-
files; `files-first` flips it, surfacing top-level files like
|
|
86
|
-
`README.md` before nested subtrees.
|
|
87
|
-
- `/` opens a filter input at the bottom of the sidebar. Typed
|
|
88
|
-
characters narrow the list with a fuzzy subsequence match on the
|
|
89
|
-
file's relative path; matches are re-ranked by score (word-boundary
|
|
90
|
-
and consecutive-character bonuses). Esc clears the query and closes
|
|
91
|
-
the filter; Return closes it and focuses the reader on the highlighted
|
|
92
|
-
match.
|
|
58
|
+
- `--sort <mode>` flag selecting the per-directory group order in the sidebar. `dirs-first` (the existing default) keeps directories above files; `files-first` flips it, surfacing top-level files like `README.md` before nested subtrees.
|
|
59
|
+
- `/` opens a filter input at the bottom of the sidebar. Typed characters narrow the list with a fuzzy subsequence match on the file's relative path; matches are re-ranked by score (word-boundary and consecutive-character bonuses). Esc clears the query and closes the filter; Return closes it and focuses the reader on the highlighted match.
|
|
93
60
|
|
|
94
61
|
## [0.2.1] — 2026-05-13
|
|
95
62
|
|
|
96
63
|
### Added
|
|
97
64
|
|
|
98
|
-
- Footer hint row in the browser pane, generated from the keymap so the
|
|
99
|
-
|
|
100
|
-
- `ROADMAP.md` as the single index of planned work; footer/header chrome
|
|
101
|
-
issues registered there.
|
|
65
|
+
- Footer hint row in the browser pane, generated from the keymap so the visible hints stay in sync with the bindings.
|
|
66
|
+
- `ROADMAP.md` as the single index of planned work; footer/header chrome issues registered there.
|
|
102
67
|
|
|
103
68
|
### Changed
|
|
104
69
|
|
|
105
70
|
- Sidebar toggle rebound from `\` to `s`.
|
|
106
|
-
- Help overlay: theme keys (`t` / `T` / `L`) now cycle while the overlay
|
|
107
|
-
|
|
108
|
-
showing.
|
|
109
|
-
- `DESIGN.md` §5.3 expanded with competitive-review gaps; keys reserved
|
|
110
|
-
for history and bookmarks.
|
|
71
|
+
- Help overlay: theme keys (`t` / `T` / `L`) now cycle while the overlay is open; the help hint label switches to `close` while the overlay is showing.
|
|
72
|
+
- `DESIGN.md` §5.3 expanded with competitive-review gaps; keys reserved for history and bookmarks.
|
|
111
73
|
|
|
112
74
|
### Fixed
|
|
113
75
|
|
|
@@ -118,42 +80,17 @@ Beta release gates (DESIGN §10.2) closed.
|
|
|
118
80
|
|
|
119
81
|
### Added — themes
|
|
120
82
|
|
|
121
|
-
- **33 bundled JSON themes** selectable via `--theme <id>`: `aura`, `ayu`,
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
`osaka-jade`, `palenight`, `rosepine`, `solarized`, `synthwave84`,
|
|
127
|
-
`tokyonight`, `vercel`, `vesper`, `zenburn`. Token values sourced
|
|
128
|
-
directly from each upstream's canonical palette via
|
|
129
|
-
`dev/build-themes.ts`.
|
|
130
|
-
- **`--tone dark|light`** flag to select the variant of a theme. Defaults
|
|
131
|
-
to `dark`. Not all themes have a well-tuned light variant; quality is
|
|
132
|
-
best-effort for those.
|
|
133
|
-
- **JSON theme format**: each theme is a `{defs, theme: {dark, light}}`
|
|
134
|
-
file validated against `schema/openmdr-theme.schema.json`. The format
|
|
135
|
-
mirrors opencode's TUI theme shape; `defs` supports variable
|
|
136
|
-
substitution.
|
|
137
|
-
- **`dev/build-themes.ts`**: fetches themes from the opencode GitHub API,
|
|
138
|
-
strips diff tokens, resolves variables, and regenerates `src/theme/loader.ts`.
|
|
139
|
-
Supports `GITHUB_TOKEN` and `--dry-run`. Not shipped in the npm package.
|
|
140
|
-
- **Runtime theme cycling**: press `t` / `T` to step forward / backward
|
|
141
|
-
through all themes without restarting. Press `L` (shift+l) to toggle
|
|
142
|
-
between dark and light tone. Works in both browser mode and single-file
|
|
143
|
-
mode. Theme changes take effect immediately; syntax highlighting
|
|
144
|
-
rebuilds with the new palette.
|
|
83
|
+
- **33 bundled JSON themes** selectable via `--theme <id>`: `aura`, `ayu`, `carbonfox`, `catppuccin`, `catppuccin-frappe`, `catppuccin-macchiato`, `cobalt2`, `cursor`, `dracula`, `everforest`, `flexoki`, `github`, `gruvbox`, `kanagawa`, `lucent-orng`, `material`, `matrix`, `mercury`, `monokai`, `nightowl`, `nord`, `one-dark`, `opencode`, `orng`, `osaka-jade`, `palenight`, `rosepine`, `solarized`, `synthwave84`, `tokyonight`, `vercel`, `vesper`, `zenburn`. Token values sourced directly from each upstream's canonical palette via `dev/build-themes.ts`.
|
|
84
|
+
- **`--tone dark|light`** flag to select the variant of a theme. Defaults to `dark`. Not all themes have a well-tuned light variant; quality is best-effort for those.
|
|
85
|
+
- **JSON theme format**: each theme is a `{defs, theme: {dark, light}}` file validated against `schema/openmdr-theme.schema.json`. The format mirrors opencode's TUI theme shape; `defs` supports variable substitution.
|
|
86
|
+
- **`dev/build-themes.ts`**: fetches themes from the opencode GitHub API, strips diff tokens, resolves variables, and regenerates `src/theme/loader.ts`. Supports `GITHUB_TOKEN` and `--dry-run`. Not shipped in the npm package.
|
|
87
|
+
- **Runtime theme cycling**: press `t` / `T` to step forward / backward through all themes without restarting. Press `L` (shift+l) to toggle between dark and light tone. Works in both browser mode and single-file mode. Theme changes take effect immediately; syntax highlighting rebuilds with the new palette.
|
|
145
88
|
|
|
146
89
|
### Changed
|
|
147
90
|
|
|
148
|
-
- Theme system replaced: derivation engine (`derive.ts`) and the 12
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
`App`, `HelpOverlay`) required no changes beyond the re-render wiring.
|
|
152
|
-
- `--theme` default changed from `dark` to `opencode` (the opencode
|
|
153
|
-
project's own palette).
|
|
154
|
-
- Effect Atoms (`@effect/atom-react`) wired for re-render signalling:
|
|
155
|
-
`themeAtom` holds `{ id, tone }`; `RegistryProvider` wraps both render
|
|
156
|
-
paths in `index.tsx`.
|
|
91
|
+
- Theme system replaced: derivation engine (`derive.ts`) and the 12 TS-value themes removed in favour of the JSON format above. The `ColorPalette` interface is unchanged; existing consumers (`Browser`, `App`, `HelpOverlay`) required no changes beyond the re-render wiring.
|
|
92
|
+
- `--theme` default changed from `dark` to `opencode` (the opencode project's own palette).
|
|
93
|
+
- Effect Atoms (`@effect/atom-react`) wired for re-render signalling: `themeAtom` holds `{ id, tone }`; `RegistryProvider` wraps both render paths in `index.tsx`.
|
|
157
94
|
|
|
158
95
|
## [0.1.0] — 2026-05-10
|
|
159
96
|
|
|
@@ -161,17 +98,13 @@ The v1 MVP, published as `@carlesandres/openmdr` on npm.
|
|
|
161
98
|
|
|
162
99
|
### Added — TUI
|
|
163
100
|
|
|
164
|
-
- Two-pane browser: sidebar + reader, with a focus model, sidebar
|
|
165
|
-
visibility toggle (`\`), and a `?` help overlay generated from the
|
|
166
|
-
bindings array.
|
|
101
|
+
- Two-pane browser: sidebar + reader, with a focus model, sidebar visibility toggle (`\`), and a `?` help overlay generated from the bindings array.
|
|
167
102
|
- Single-file mode when invoked on a file path.
|
|
168
|
-
- Themes: dark + light as typed `ColorPalette` values, mutable singleton
|
|
169
|
-
consumer, selected via `--theme`.
|
|
103
|
+
- Themes: dark + light as typed `ColorPalette` values, mutable singleton consumer, selected via `--theme`.
|
|
170
104
|
|
|
171
105
|
### Added — discovery
|
|
172
106
|
|
|
173
|
-
- Recursive walk from the path argument (or cwd), `.md` / `.markdown` /
|
|
174
|
-
`.mdx` only.
|
|
107
|
+
- Recursive walk from the path argument (or cwd), `.md` / `.markdown` / `.mdx` only.
|
|
175
108
|
- Honors `.gitignore` (root + nested).
|
|
176
109
|
- Hard-skips `node_modules`, `.git`, `.venv` (always, even with `--all`).
|
|
177
110
|
- Does not follow symlinks.
|
|
@@ -182,51 +115,28 @@ The v1 MVP, published as `@carlesandres/openmdr` on npm.
|
|
|
182
115
|
|
|
183
116
|
### Added — keymap
|
|
184
117
|
|
|
185
|
-
- `KeyBinding[]` with `id` / `description` / `keys` / `group` / optional
|
|
186
|
-
|
|
187
|
-
help overlay.
|
|
188
|
-
- Bindings: `j`/`k` + arrows, shift-jump, page/half-page, `g`/`G`,
|
|
189
|
-
`return`/`l`/`→`, `escape`/`h`/`←`, `[`/`]`, `tab`, `\`, `?`,
|
|
190
|
-
`q`/`ctrl+c`. Reserved (not bound): `/`, `e`, `o`, `r`.
|
|
118
|
+
- `KeyBinding[]` with `id` / `description` / `keys` / `group` / optional `when` / `run`. Single source for both `useKeyboard` dispatch and the help overlay.
|
|
119
|
+
- Bindings: `j`/`k` + arrows, shift-jump, page/half-page, `g`/`G`, `return`/`l`/`→`, `escape`/`h`/`←`, `[`/`]`, `tab`, `\`, `?`, `q`/`ctrl+c`. Reserved (not bound): `/`, `e`, `o`, `r`.
|
|
191
120
|
|
|
192
121
|
### Added — release infra
|
|
193
122
|
|
|
194
|
-
- Distribution as `@carlesandres/openmdr` on npm (Bun runtime required
|
|
195
|
-
|
|
196
|
-
- `.github/workflows/
|
|
197
|
-
and `npm pack --dry-run` on every push and PR.
|
|
198
|
-
- `.github/workflows/publish.yml`: `release: published` triggers
|
|
199
|
-
`npm publish` via Trusted Publisher (OIDC, no token), with a
|
|
200
|
-
tag-vs-`package.json`-version assertion before publish.
|
|
123
|
+
- Distribution as `@carlesandres/openmdr` on npm (Bun runtime required on user's `PATH`, no compiled binary). Modeled on ghui.
|
|
124
|
+
- `.github/workflows/ci.yml`: typecheck, lint, format:check, test, and `npm pack --dry-run` on every push and PR.
|
|
125
|
+
- `.github/workflows/publish.yml`: `release: published` triggers `npm publish` via Trusted Publisher (OIDC, no token), with a tag-vs-`package.json`-version assertion before publish.
|
|
201
126
|
- `.oxfmtrc.json`: pinned formatting so `format:check` is meaningful.
|
|
202
127
|
|
|
203
128
|
### Added — docs
|
|
204
129
|
|
|
205
|
-
- `DESIGN.md`: foundational design doc (13 sections; §3 non-goals,
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
- `README.md`, `CONTRIBUTING.md`, `AGENTS.md` (cookbook for AI
|
|
209
|
-
assistants), `LICENSE` (MIT).
|
|
210
|
-
- Issue templates (bug + feature + blank), PR template. All
|
|
211
|
-
communication routes through GitHub issues.
|
|
130
|
+
- `DESIGN.md`: foundational design doc (13 sections; §3 non-goals, §5.3 deferred, §7.3 reserved keys, §10 v2 gates, §12 deferred patterns with triggers).
|
|
131
|
+
- `README.md`, `CONTRIBUTING.md`, `AGENTS.md` (cookbook for AI assistants), `LICENSE` (MIT).
|
|
132
|
+
- Issue templates (bug + feature + blank), PR template. All communication routes through GitHub issues.
|
|
212
133
|
|
|
213
134
|
### Added — tests
|
|
214
135
|
|
|
215
|
-
- 75 headless tests via `testRender` + `captureCharFrame` +
|
|
216
|
-
`mockInput`.
|
|
136
|
+
- 75 headless tests via `testRender` + `captureCharFrame` + `mockInput`.
|
|
217
137
|
|
|
218
138
|
### Out of scope (deliberate, see DESIGN.md §3 / §5.3)
|
|
219
139
|
|
|
220
|
-
Search, stdin, URL fetching, cross-file link following, `$EDITOR`
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
[#2](https://github.com/carlesandres/openmdr/issues/2)),
|
|
224
|
-
Homebrew tap. All tracked.
|
|
225
|
-
|
|
226
|
-
[Unreleased]: https://github.com/carlesandres/house/compare/v0.4.0...HEAD
|
|
227
|
-
[0.4.0]: https://github.com/carlesandres/house/compare/v0.3.1...v0.4.0
|
|
228
|
-
[0.3.1]: https://github.com/carlesandres/house/compare/v0.3.0...v0.3.1
|
|
229
|
-
[0.3.0]: https://github.com/carlesandres/house/compare/v0.2.1...v0.3.0
|
|
230
|
-
[0.2.1]: https://github.com/carlesandres/house/compare/v0.2.0...v0.2.1
|
|
231
|
-
[0.2.0]: https://github.com/carlesandres/house/compare/v0.1.0...v0.2.0
|
|
232
|
-
[0.1.0]: https://github.com/carlesandres/house/releases/tag/v0.1.0
|
|
140
|
+
Search, stdin, URL fetching, cross-file link following, `$EDITOR` hand-off, syntax highlighting, persistent config, OS-appearance auto-detect, single-binary distribution (issue [#2](https://github.com/carlesandres/openmdr/issues/2)), Homebrew tap. All tracked.
|
|
141
|
+
|
|
142
|
+
[Unreleased]: https://github.com/carlesandres/house/compare/v0.4.1...HEAD [0.4.1]: https://github.com/carlesandres/house/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/carlesandres/house/compare/v0.3.1...v0.4.0 [0.3.1]: https://github.com/carlesandres/house/compare/v0.3.0...v0.3.1 [0.3.0]: https://github.com/carlesandres/house/compare/v0.2.1...v0.3.0 [0.2.1]: https://github.com/carlesandres/house/compare/v0.2.0...v0.2.1 [0.2.0]: https://github.com/carlesandres/house/compare/v0.1.0...v0.2.0 [0.1.0]: https://github.com/carlesandres/house/releases/tag/v0.1.0
|
package/README.md
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
# house
|
|
1
|
+
# ⌂ house
|
|
2
2
|
|
|
3
|
-
A terminal markdown reader
|
|
4
|
-
Point it at a directory and navigate its `.md` files without leaving the terminal.
|
|
3
|
+
A terminal markdown reader and navigator — themable and configurable, with a keyboard-driven modern UI. Point it at a directory and browse its `.md` files without leaving the terminal.
|
|
5
4
|
|
|
6
5
|

|
|
7
6
|
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **30+ themes** with dark and light tones
|
|
10
|
+
- **Responsive layout**
|
|
11
|
+
- **Fuzzy search** across nested folders (`.gitignore`-aware)
|
|
12
|
+
- **Command palette**
|
|
13
|
+
- **Keyboard-driven**
|
|
14
|
+
- **Open in browser**
|
|
15
|
+
|
|
8
16
|
Requires [Bun](https://bun.sh) on `PATH`.
|
|
9
17
|
|
|
10
18
|
## Install
|
|
@@ -18,7 +26,7 @@ bun add -g @carlesandres/house
|
|
|
18
26
|
## Upgrade
|
|
19
27
|
|
|
20
28
|
```bash
|
|
21
|
-
npm
|
|
29
|
+
npm i -g @carlesandres/house
|
|
22
30
|
# or
|
|
23
31
|
bun add -g @carlesandres/house
|
|
24
32
|
```
|
|
@@ -62,9 +70,7 @@ Precedence, highest to lowest:
|
|
|
62
70
|
3. Config file
|
|
63
71
|
4. Built-in defaults (`opencode` / `dark`)
|
|
64
72
|
|
|
65
|
-
The file is optional — a missing file is fine. Invalid keys, unknown themes,
|
|
66
|
-
or malformed TOML fail loudly with a one-line error. Per-project config
|
|
67
|
-
(`.house/config.toml`) and additional keys are deferred.
|
|
73
|
+
The file is optional — a missing file is fine. Invalid keys, unknown themes, or malformed TOML fail loudly with a one-line error. Per-project config (`.house/config.toml`) and additional keys are deferred.
|
|
68
74
|
|
|
69
75
|
## Keys
|
|
70
76
|
|
|
@@ -106,15 +112,9 @@ or malformed TOML fail loudly with a one-line error. Per-project config
|
|
|
106
112
|
|
|
107
113
|
## Themes
|
|
108
114
|
|
|
109
|
-
33 built-in themes, all sourced from the
|
|
110
|
-
[opencode](https://github.com/anomalyco/opencode) TUI palette:
|
|
115
|
+
33 built-in themes, all sourced from the [opencode](https://github.com/anomalyco/opencode) TUI palette:
|
|
111
116
|
|
|
112
|
-
`aura` · `ayu` · `carbonfox` · `catppuccin` · `catppuccin-frappe` ·
|
|
113
|
-
`catppuccin-macchiato` · `cobalt2` · `cursor` · `dracula` · `everforest` ·
|
|
114
|
-
`flexoki` · `github` · `gruvbox` · `kanagawa` · `lucent-orng` · `material` ·
|
|
115
|
-
`matrix` · `mercury` · `monokai` · `nightowl` · `nord` · `one-dark` ·
|
|
116
|
-
`opencode` · `orng` · `osaka-jade` · `palenight` · `rosepine` · `solarized` ·
|
|
117
|
-
`synthwave84` · `tokyonight` · `vercel` · `vesper` · `zenburn`
|
|
117
|
+
`aura` · `ayu` · `carbonfox` · `catppuccin` · `catppuccin-frappe` · `catppuccin-macchiato` · `cobalt2` · `cursor` · `dracula` · `everforest` · `flexoki` · `github` · `gruvbox` · `kanagawa` · `lucent-orng` · `material` · `matrix` · `mercury` · `monokai` · `nightowl` · `nord` · `one-dark` · `opencode` · `orng` · `osaka-jade` · `palenight` · `rosepine` · `solarized` · `synthwave84` · `tokyonight` · `vercel` · `vesper` · `zenburn`
|
|
118
118
|
|
|
119
119
|
Each theme supports dark and light tones. Cycle with `t` / `T`; toggle tone with `L`.
|
|
120
120
|
|