probefs 0.1.0__tar.gz

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.
Files changed (47) hide show
  1. probefs-0.1.0/.gitignore +26 -0
  2. probefs-0.1.0/LICENSE +21 -0
  3. probefs-0.1.0/PKG-INFO +320 -0
  4. probefs-0.1.0/README.md +287 -0
  5. probefs-0.1.0/docs/USER_GUIDE.md +662 -0
  6. probefs-0.1.0/docs/keybindings.md +122 -0
  7. probefs-0.1.0/probefs.yaml.example +48 -0
  8. probefs-0.1.0/pyproject.toml +57 -0
  9. probefs-0.1.0/src/probefs/__init__.py +3 -0
  10. probefs-0.1.0/src/probefs/__main__.py +4 -0
  11. probefs-0.1.0/src/probefs/app.py +187 -0
  12. probefs-0.1.0/src/probefs/config.py +129 -0
  13. probefs-0.1.0/src/probefs/core/__init__.py +0 -0
  14. probefs-0.1.0/src/probefs/core/file_manager.py +129 -0
  15. probefs-0.1.0/src/probefs/fs/__init__.py +0 -0
  16. probefs-0.1.0/src/probefs/fs/probe_fs.py +382 -0
  17. probefs-0.1.0/src/probefs/icons/__init__.py +1 -0
  18. probefs-0.1.0/src/probefs/icons/ascii_set.py +43 -0
  19. probefs-0.1.0/src/probefs/icons/base.py +24 -0
  20. probefs-0.1.0/src/probefs/icons/factory.py +30 -0
  21. probefs-0.1.0/src/probefs/icons/nerd_set.py +46 -0
  22. probefs-0.1.0/src/probefs/icons/yaml_set.py +45 -0
  23. probefs-0.1.0/src/probefs/probefs.tcss +27 -0
  24. probefs-0.1.0/src/probefs/rendering/__init__.py +1 -0
  25. probefs-0.1.0/src/probefs/rendering/columns.py +68 -0
  26. probefs-0.1.0/src/probefs/rendering/metadata.py +138 -0
  27. probefs-0.1.0/src/probefs/screens/__init__.py +0 -0
  28. probefs-0.1.0/src/probefs/screens/main.py +487 -0
  29. probefs-0.1.0/src/probefs/screens/sftp.py +512 -0
  30. probefs-0.1.0/src/probefs/theme/__init__.py +3 -0
  31. probefs-0.1.0/src/probefs/theme/builtin.py +34 -0
  32. probefs-0.1.0/src/probefs/theme/loader.py +184 -0
  33. probefs-0.1.0/src/probefs/themes/__init__.py +0 -0
  34. probefs-0.1.0/src/probefs/themes/dark.yaml +16 -0
  35. probefs-0.1.0/src/probefs/themes/light.yaml +16 -0
  36. probefs-0.1.0/src/probefs/themes/tokyo-night.yaml +16 -0
  37. probefs-0.1.0/src/probefs/widgets/__init__.py +0 -0
  38. probefs-0.1.0/src/probefs/widgets/dialogs.py +502 -0
  39. probefs-0.1.0/src/probefs/widgets/directory_list.py +204 -0
  40. probefs-0.1.0/src/probefs/widgets/filter_bar.py +97 -0
  41. probefs-0.1.0/src/probefs/widgets/preview_pane.py +216 -0
  42. probefs-0.1.0/src/probefs/widgets/status_bar.py +86 -0
  43. probefs-0.1.0/tests/__init__.py +0 -0
  44. probefs-0.1.0/tests/test_file_manager_core.py +164 -0
  45. probefs-0.1.0/tests/test_rendering_metadata.py +205 -0
  46. probefs-0.1.0/tests/test_theme_loader.py +321 -0
  47. probefs-0.1.0/uv.lock +1096 -0
@@ -0,0 +1,26 @@
1
+ # Planning
2
+ .planning/
3
+
4
+ # Python version pin
5
+ .python-version
6
+
7
+ # Python
8
+ __pycache__/
9
+ *.py[cod]
10
+ *.pyo
11
+ *.egg-info/
12
+ dist/
13
+ build/
14
+ .venv/
15
+ *.egg
16
+
17
+ # Testing / coverage
18
+ .pytest_cache/
19
+ .coverage
20
+ htmlcov/
21
+
22
+ # Editors / OS
23
+ .DS_Store
24
+ .idea/
25
+ .vscode/
26
+ *.swp
probefs-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Dale Wright
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
probefs-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,320 @@
1
+ Metadata-Version: 2.4
2
+ Name: probefs
3
+ Version: 0.1.0
4
+ Summary: A fast, beautiful, keyboard-driven TUI file browser
5
+ Project-URL: Homepage, https://github.com/diverdale/probefs
6
+ Project-URL: Repository, https://github.com/diverdale/probefs
7
+ Project-URL: Bug Tracker, https://github.com/diverdale/probefs/issues
8
+ Author-email: Dale Wright <diverdale@gmail.com>
9
+ License: MIT
10
+ License-File: LICENSE
11
+ Keywords: cli,file-browser,file-manager,miller-columns,sftp,terminal,textual,tui
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: System Administrators
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Topic :: System :: Filesystems
24
+ Classifier: Topic :: Terminals
25
+ Classifier: Topic :: Utilities
26
+ Requires-Python: >=3.10
27
+ Requires-Dist: fsspec>=2024.2.0
28
+ Requires-Dist: paramiko>=3.0.0
29
+ Requires-Dist: ruamel-yaml>=0.19.1
30
+ Requires-Dist: send2trash>=2.1.0
31
+ Requires-Dist: textual>=0.89.1
32
+ Description-Content-Type: text/markdown
33
+
34
+ # probefs
35
+
36
+ **A fast, beautiful, keyboard-driven TUI file browser built with Python and Textual.**
37
+ Navigate your filesystem at the speed of thought — no mouse required.
38
+
39
+ ![Python](https://img.shields.io/badge/python-%3E%3D3.10-blue)
40
+ ![License](https://img.shields.io/badge/license-MIT-green)
41
+ ![Framework](https://img.shields.io/badge/built%20with-Textual-purple)
42
+
43
+ ---
44
+
45
+ ## Layout
46
+
47
+ ```
48
+ ┌─────────────────────────────────────────────────────────────────────────┐
49
+ │ probefs │
50
+ ├──────────────────┬──────────────────────┬──────────────────────────────┤
51
+ │ PARENT │ CURRENT │ PREVIEW │
52
+ │ │ │ │
53
+ │ .. │ > Documents/ │ # README.md │
54
+ │ home/ │ Downloads/ │ │
55
+ │ etc/ │ Music/ │ Welcome to probefs. │
56
+ │ usr/ │ Pictures/ │ A keyboard-driven TUI │
57
+ │ var/ │ Videos/ │ file browser built with │
58
+ │ │ README.md │ Python and Textual. │
59
+ │ │ .bashrc │ │
60
+ │ │ .gitconfig │ Navigate fast. No mouse. │
61
+ │ │ │ │
62
+ ├──────────────────┴──────────────────────┴──────────────────────────────┤
63
+ │ ~/home/user • 8 items • 42.3 GB free │
64
+ ├─────────────────────────────────────────────────────────────────────────┤
65
+ │ j/k move l/Enter open h/Back up y copy p move d trash ? help │
66
+ └─────────────────────────────────────────────────────────────────────────┘
67
+ ```
68
+
69
+ ---
70
+
71
+ ## Features
72
+
73
+ - **Three-pane miller columns** — parent context, active directory, and live preview side-by-side
74
+ - **Vim-style navigation** — `j`/`k` to move, `l` to enter, `h` to go up
75
+ - **Navigation history** — `Ctrl+O` / `Ctrl+I` to jump back and forward; `g` to go to any path
76
+ - **Syntax-highlighted previews** — powered by Pygments, auto-detected from file extension
77
+ - **Archive previews** — ZIP and tar file contents listed inline, no extra deps required
78
+ - **PDF previews** — extracted text preview via poppler (`pdftotext`), if installed
79
+ - **Directory previews** — right pane lists directory contents when a folder is selected
80
+ - **Sort modes** — `s` cycles name↑ → name↓ → size↓ → date↓; sort indicator in status bar
81
+ - **Fuzzy name filter** — `/` opens a live filter bar; type to narrow, `Enter` to keep, `Esc` to clear
82
+ - **Full file operations** — copy, move, rename, delete, new file, new directory
83
+ - **Safe deletes** — `d` sends to OS Trash, never permanent deletion
84
+ - **Open with default app** — `o` launches the system default application for a file
85
+ - **Clipboard** — `Y` copies the selected item's full path to the clipboard
86
+ - **Shell drop** — `!` drops to your `$SHELL` in the current directory; probefs resumes on exit
87
+ - **SFTP dual-pane** — `Ctrl+S` opens a local↔remote transfer screen; connection profiles saved automatically
88
+ - **Toggle hidden files** — `.` key shows/hides dotfiles instantly
89
+ - **Nerd Fonts icons** — optional glyph icons with `icons: nerd` in config (falls back to ASCII)
90
+ - **Configurable themes** — three built-ins plus a full custom theme YAML schema
91
+ - **Rebindable keys** — override any action's keybinding in your config file
92
+ - **Help dialog** — `?` shows the full keybinding reference at any time
93
+ - **Status bar** — always shows current path, item count, sort mode, and free disk space
94
+ - **Zero mouse required** — every operation reachable from the keyboard
95
+
96
+ ---
97
+
98
+ ## Requirements
99
+
100
+ - Python >= 3.10
101
+ - Any modern terminal (kitty, iTerm2, Ghostty, Windows Terminal, GNOME Terminal, etc.)
102
+ - **Optional:** [poppler](https://poppler.freedesktop.org/) for PDF previews (`brew install poppler` / `apt install poppler-utils`)
103
+
104
+ ---
105
+
106
+ ## Installation
107
+
108
+ ### From PyPI (recommended)
109
+
110
+ ```sh
111
+ pip install probefs
112
+ ```
113
+
114
+ Or with [uv](https://github.com/astral-sh/uv) (installs as an isolated tool):
115
+
116
+ ```sh
117
+ uv tool install probefs
118
+ ```
119
+
120
+ ### From source (development)
121
+
122
+ ```sh
123
+ git clone https://github.com/yourusername/probefs.git
124
+ cd probefs
125
+ uv sync
126
+ uv run probefs
127
+ ```
128
+
129
+ ---
130
+
131
+ ## Quick Start
132
+
133
+ ```sh
134
+ probefs
135
+ ```
136
+
137
+ That's it. probefs opens in your current directory.
138
+
139
+ ---
140
+
141
+ ## Key Bindings
142
+
143
+ ### Navigation
144
+
145
+ | Key | Action |
146
+ |-----|--------|
147
+ | `j` / `↓` | Move cursor down |
148
+ | `k` / `↑` | Move cursor up |
149
+ | `l` / `Enter` | Enter directory / open file |
150
+ | `h` / `Backspace` | Go up to parent directory |
151
+ | `Ctrl+O` | Navigate back in history |
152
+ | `Ctrl+I` | Navigate forward in history |
153
+ | `g` | Go to path (jump anywhere) |
154
+
155
+ ### View
156
+
157
+ | Key | Action |
158
+ |-----|--------|
159
+ | `.` | Toggle hidden files (dotfiles) |
160
+ | `s` | Cycle sort mode (name↑ → name↓ → size↓ → date↓) |
161
+ | `/` | Filter files by name (live; `Esc` cancel · `Enter` keep) |
162
+
163
+ ### File Operations
164
+
165
+ | Key | Action |
166
+ |-----|--------|
167
+ | `y` | Copy selected item |
168
+ | `p` | Move selected item |
169
+ | `d` | Delete — sends to OS Trash (safe, reversible) |
170
+ | `r` | Rename selected item |
171
+ | `n` | New file in current directory |
172
+ | `Ctrl+N` | New directory in current directory |
173
+
174
+ ### Clipboard & Launch
175
+
176
+ | Key | Action |
177
+ |-----|--------|
178
+ | `Y` | Copy current path to clipboard |
179
+ | `o` | Open with system default application |
180
+ | `!` | Drop to shell in current directory |
181
+ | `Ctrl+S` | Open SFTP screen |
182
+
183
+ ### App
184
+
185
+ | Key | Action |
186
+ |-----|--------|
187
+ | `?` | Show help / keybinding reference |
188
+ | `a` | About probefs |
189
+ | `Ctrl+Q` / `Ctrl+C` | Quit |
190
+
191
+ ---
192
+
193
+ ## Configuration
194
+
195
+ probefs reads `~/.probefs/probefs.yaml` on startup. The file and directory are created automatically on first launch. For a fully commented reference, see [`probefs.yaml.example`](probefs.yaml.example) in this repo.
196
+
197
+ ```yaml
198
+ # ~/.probefs/probefs.yaml
199
+
200
+ theme: probefs-dark # built-in theme name
201
+ theme_file: ~/mytheme.yaml # path to a custom theme YAML (overrides theme:)
202
+
203
+ icons: nerd # nerd (requires Nerd Fonts) | ascii (default)
204
+
205
+ keybindings:
206
+ probefs.cursor_down: "j" # override a default key
207
+ ```
208
+
209
+ Invalid configuration is silently ignored; probefs will never crash on startup due to a bad config file.
210
+
211
+ ---
212
+
213
+ ## Themes
214
+
215
+ Three themes are built in:
216
+
217
+ | Theme name | Style |
218
+ |---|---|
219
+ | `probefs-dark` | Dark background, blue/teal accents (default) |
220
+ | `probefs-light` | Light background, high-contrast |
221
+ | `probefs-tokyo-night` | Tokyo Night color palette |
222
+
223
+ Activate a theme in your config:
224
+
225
+ ```yaml
226
+ theme: probefs-tokyo-night
227
+ ```
228
+
229
+ ---
230
+
231
+ ## Custom Themes
232
+
233
+ Drop a `.yaml` file into `~/.probefs/themes/` and probefs picks it up automatically on next launch. Activate it by name:
234
+
235
+ ```yaml
236
+ theme: my-theme
237
+ ```
238
+
239
+ Or point `theme_file` directly at any YAML file:
240
+
241
+ ```yaml
242
+ theme_file: ~/my-probefs-theme.yaml
243
+ ```
244
+
245
+ Full theme schema:
246
+
247
+ ```yaml
248
+ name: my-theme # required
249
+ dark: true # true = dark background variant
250
+
251
+ # Core colors (all accept CSS hex, rgb(), or named colors)
252
+ primary: "#5B8DD9"
253
+ secondary: "#2D4A8A"
254
+ background: "#1C2023"
255
+ surface: "#252B2E"
256
+ panel: "#1E2528"
257
+ foreground: "#E0E0E0"
258
+ warning: "#FFB86C"
259
+ error: "#FF5555"
260
+ success: "#50FA7B"
261
+ accent: "#8BE9FD"
262
+
263
+ # Optional metadata (informational only, not used at runtime)
264
+ author: "Your Name"
265
+ description: "My custom theme"
266
+ version: "1.0.0"
267
+ ```
268
+
269
+ Only `name` and `primary` are required. All other color fields are optional and fall back to theme defaults.
270
+
271
+ ---
272
+
273
+ ## Icons
274
+
275
+ By default probefs uses plain ASCII symbols that work in any terminal. If your terminal uses a [Nerd Fonts](https://www.nerdfonts.com/) patched font, enable glyph icons:
276
+
277
+ ```yaml
278
+ icons: nerd
279
+ ```
280
+
281
+ | Setting | Icons used |
282
+ |---------|------------|
283
+ | `ascii` (default) | `/` dirs, space files — works everywhere including SSH |
284
+ | `nerd` | Unicode glyphs from Nerd Fonts (requires patched font) |
285
+
286
+ > Auto-detection is not possible over SSH, so Nerd Fonts must be explicitly enabled.
287
+
288
+ ---
289
+
290
+ ## Keybinding Overrides
291
+
292
+ Override any action's key in `~/.probefs/probefs.yaml`:
293
+
294
+ ```yaml
295
+ keybindings:
296
+ probefs.cursor_down: "j,ctrl+j" # multiple keys: comma-separated
297
+ probefs.cursor_up: "k"
298
+ probefs.quit: "q"
299
+ ```
300
+
301
+ An override **replaces** all defaults for that action. To keep an existing key and add a new one, list both:
302
+
303
+ ```yaml
304
+ keybindings:
305
+ probefs.enter_dir: "l,enter,space" # l, Enter, and Space all enter a directory
306
+ ```
307
+
308
+ > Note: chord/sequence bindings (e.g. `gg`) are not supported. No conflict detection is performed — if two actions share a key, last registration wins.
309
+
310
+ ---
311
+
312
+ ## Documentation
313
+
314
+ Full reference: [docs/USER_GUIDE.md](docs/USER_GUIDE.md)
315
+
316
+ ---
317
+
318
+ ## License
319
+
320
+ MIT — see [LICENSE](LICENSE) for details.
@@ -0,0 +1,287 @@
1
+ # probefs
2
+
3
+ **A fast, beautiful, keyboard-driven TUI file browser built with Python and Textual.**
4
+ Navigate your filesystem at the speed of thought — no mouse required.
5
+
6
+ ![Python](https://img.shields.io/badge/python-%3E%3D3.10-blue)
7
+ ![License](https://img.shields.io/badge/license-MIT-green)
8
+ ![Framework](https://img.shields.io/badge/built%20with-Textual-purple)
9
+
10
+ ---
11
+
12
+ ## Layout
13
+
14
+ ```
15
+ ┌─────────────────────────────────────────────────────────────────────────┐
16
+ │ probefs │
17
+ ├──────────────────┬──────────────────────┬──────────────────────────────┤
18
+ │ PARENT │ CURRENT │ PREVIEW │
19
+ │ │ │ │
20
+ │ .. │ > Documents/ │ # README.md │
21
+ │ home/ │ Downloads/ │ │
22
+ │ etc/ │ Music/ │ Welcome to probefs. │
23
+ │ usr/ │ Pictures/ │ A keyboard-driven TUI │
24
+ │ var/ │ Videos/ │ file browser built with │
25
+ │ │ README.md │ Python and Textual. │
26
+ │ │ .bashrc │ │
27
+ │ │ .gitconfig │ Navigate fast. No mouse. │
28
+ │ │ │ │
29
+ ├──────────────────┴──────────────────────┴──────────────────────────────┤
30
+ │ ~/home/user • 8 items • 42.3 GB free │
31
+ ├─────────────────────────────────────────────────────────────────────────┤
32
+ │ j/k move l/Enter open h/Back up y copy p move d trash ? help │
33
+ └─────────────────────────────────────────────────────────────────────────┘
34
+ ```
35
+
36
+ ---
37
+
38
+ ## Features
39
+
40
+ - **Three-pane miller columns** — parent context, active directory, and live preview side-by-side
41
+ - **Vim-style navigation** — `j`/`k` to move, `l` to enter, `h` to go up
42
+ - **Navigation history** — `Ctrl+O` / `Ctrl+I` to jump back and forward; `g` to go to any path
43
+ - **Syntax-highlighted previews** — powered by Pygments, auto-detected from file extension
44
+ - **Archive previews** — ZIP and tar file contents listed inline, no extra deps required
45
+ - **PDF previews** — extracted text preview via poppler (`pdftotext`), if installed
46
+ - **Directory previews** — right pane lists directory contents when a folder is selected
47
+ - **Sort modes** — `s` cycles name↑ → name↓ → size↓ → date↓; sort indicator in status bar
48
+ - **Fuzzy name filter** — `/` opens a live filter bar; type to narrow, `Enter` to keep, `Esc` to clear
49
+ - **Full file operations** — copy, move, rename, delete, new file, new directory
50
+ - **Safe deletes** — `d` sends to OS Trash, never permanent deletion
51
+ - **Open with default app** — `o` launches the system default application for a file
52
+ - **Clipboard** — `Y` copies the selected item's full path to the clipboard
53
+ - **Shell drop** — `!` drops to your `$SHELL` in the current directory; probefs resumes on exit
54
+ - **SFTP dual-pane** — `Ctrl+S` opens a local↔remote transfer screen; connection profiles saved automatically
55
+ - **Toggle hidden files** — `.` key shows/hides dotfiles instantly
56
+ - **Nerd Fonts icons** — optional glyph icons with `icons: nerd` in config (falls back to ASCII)
57
+ - **Configurable themes** — three built-ins plus a full custom theme YAML schema
58
+ - **Rebindable keys** — override any action's keybinding in your config file
59
+ - **Help dialog** — `?` shows the full keybinding reference at any time
60
+ - **Status bar** — always shows current path, item count, sort mode, and free disk space
61
+ - **Zero mouse required** — every operation reachable from the keyboard
62
+
63
+ ---
64
+
65
+ ## Requirements
66
+
67
+ - Python >= 3.10
68
+ - Any modern terminal (kitty, iTerm2, Ghostty, Windows Terminal, GNOME Terminal, etc.)
69
+ - **Optional:** [poppler](https://poppler.freedesktop.org/) for PDF previews (`brew install poppler` / `apt install poppler-utils`)
70
+
71
+ ---
72
+
73
+ ## Installation
74
+
75
+ ### From PyPI (recommended)
76
+
77
+ ```sh
78
+ pip install probefs
79
+ ```
80
+
81
+ Or with [uv](https://github.com/astral-sh/uv) (installs as an isolated tool):
82
+
83
+ ```sh
84
+ uv tool install probefs
85
+ ```
86
+
87
+ ### From source (development)
88
+
89
+ ```sh
90
+ git clone https://github.com/yourusername/probefs.git
91
+ cd probefs
92
+ uv sync
93
+ uv run probefs
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Quick Start
99
+
100
+ ```sh
101
+ probefs
102
+ ```
103
+
104
+ That's it. probefs opens in your current directory.
105
+
106
+ ---
107
+
108
+ ## Key Bindings
109
+
110
+ ### Navigation
111
+
112
+ | Key | Action |
113
+ |-----|--------|
114
+ | `j` / `↓` | Move cursor down |
115
+ | `k` / `↑` | Move cursor up |
116
+ | `l` / `Enter` | Enter directory / open file |
117
+ | `h` / `Backspace` | Go up to parent directory |
118
+ | `Ctrl+O` | Navigate back in history |
119
+ | `Ctrl+I` | Navigate forward in history |
120
+ | `g` | Go to path (jump anywhere) |
121
+
122
+ ### View
123
+
124
+ | Key | Action |
125
+ |-----|--------|
126
+ | `.` | Toggle hidden files (dotfiles) |
127
+ | `s` | Cycle sort mode (name↑ → name↓ → size↓ → date↓) |
128
+ | `/` | Filter files by name (live; `Esc` cancel · `Enter` keep) |
129
+
130
+ ### File Operations
131
+
132
+ | Key | Action |
133
+ |-----|--------|
134
+ | `y` | Copy selected item |
135
+ | `p` | Move selected item |
136
+ | `d` | Delete — sends to OS Trash (safe, reversible) |
137
+ | `r` | Rename selected item |
138
+ | `n` | New file in current directory |
139
+ | `Ctrl+N` | New directory in current directory |
140
+
141
+ ### Clipboard & Launch
142
+
143
+ | Key | Action |
144
+ |-----|--------|
145
+ | `Y` | Copy current path to clipboard |
146
+ | `o` | Open with system default application |
147
+ | `!` | Drop to shell in current directory |
148
+ | `Ctrl+S` | Open SFTP screen |
149
+
150
+ ### App
151
+
152
+ | Key | Action |
153
+ |-----|--------|
154
+ | `?` | Show help / keybinding reference |
155
+ | `a` | About probefs |
156
+ | `Ctrl+Q` / `Ctrl+C` | Quit |
157
+
158
+ ---
159
+
160
+ ## Configuration
161
+
162
+ probefs reads `~/.probefs/probefs.yaml` on startup. The file and directory are created automatically on first launch. For a fully commented reference, see [`probefs.yaml.example`](probefs.yaml.example) in this repo.
163
+
164
+ ```yaml
165
+ # ~/.probefs/probefs.yaml
166
+
167
+ theme: probefs-dark # built-in theme name
168
+ theme_file: ~/mytheme.yaml # path to a custom theme YAML (overrides theme:)
169
+
170
+ icons: nerd # nerd (requires Nerd Fonts) | ascii (default)
171
+
172
+ keybindings:
173
+ probefs.cursor_down: "j" # override a default key
174
+ ```
175
+
176
+ Invalid configuration is silently ignored; probefs will never crash on startup due to a bad config file.
177
+
178
+ ---
179
+
180
+ ## Themes
181
+
182
+ Three themes are built in:
183
+
184
+ | Theme name | Style |
185
+ |---|---|
186
+ | `probefs-dark` | Dark background, blue/teal accents (default) |
187
+ | `probefs-light` | Light background, high-contrast |
188
+ | `probefs-tokyo-night` | Tokyo Night color palette |
189
+
190
+ Activate a theme in your config:
191
+
192
+ ```yaml
193
+ theme: probefs-tokyo-night
194
+ ```
195
+
196
+ ---
197
+
198
+ ## Custom Themes
199
+
200
+ Drop a `.yaml` file into `~/.probefs/themes/` and probefs picks it up automatically on next launch. Activate it by name:
201
+
202
+ ```yaml
203
+ theme: my-theme
204
+ ```
205
+
206
+ Or point `theme_file` directly at any YAML file:
207
+
208
+ ```yaml
209
+ theme_file: ~/my-probefs-theme.yaml
210
+ ```
211
+
212
+ Full theme schema:
213
+
214
+ ```yaml
215
+ name: my-theme # required
216
+ dark: true # true = dark background variant
217
+
218
+ # Core colors (all accept CSS hex, rgb(), or named colors)
219
+ primary: "#5B8DD9"
220
+ secondary: "#2D4A8A"
221
+ background: "#1C2023"
222
+ surface: "#252B2E"
223
+ panel: "#1E2528"
224
+ foreground: "#E0E0E0"
225
+ warning: "#FFB86C"
226
+ error: "#FF5555"
227
+ success: "#50FA7B"
228
+ accent: "#8BE9FD"
229
+
230
+ # Optional metadata (informational only, not used at runtime)
231
+ author: "Your Name"
232
+ description: "My custom theme"
233
+ version: "1.0.0"
234
+ ```
235
+
236
+ Only `name` and `primary` are required. All other color fields are optional and fall back to theme defaults.
237
+
238
+ ---
239
+
240
+ ## Icons
241
+
242
+ By default probefs uses plain ASCII symbols that work in any terminal. If your terminal uses a [Nerd Fonts](https://www.nerdfonts.com/) patched font, enable glyph icons:
243
+
244
+ ```yaml
245
+ icons: nerd
246
+ ```
247
+
248
+ | Setting | Icons used |
249
+ |---------|------------|
250
+ | `ascii` (default) | `/` dirs, space files — works everywhere including SSH |
251
+ | `nerd` | Unicode glyphs from Nerd Fonts (requires patched font) |
252
+
253
+ > Auto-detection is not possible over SSH, so Nerd Fonts must be explicitly enabled.
254
+
255
+ ---
256
+
257
+ ## Keybinding Overrides
258
+
259
+ Override any action's key in `~/.probefs/probefs.yaml`:
260
+
261
+ ```yaml
262
+ keybindings:
263
+ probefs.cursor_down: "j,ctrl+j" # multiple keys: comma-separated
264
+ probefs.cursor_up: "k"
265
+ probefs.quit: "q"
266
+ ```
267
+
268
+ An override **replaces** all defaults for that action. To keep an existing key and add a new one, list both:
269
+
270
+ ```yaml
271
+ keybindings:
272
+ probefs.enter_dir: "l,enter,space" # l, Enter, and Space all enter a directory
273
+ ```
274
+
275
+ > Note: chord/sequence bindings (e.g. `gg`) are not supported. No conflict detection is performed — if two actions share a key, last registration wins.
276
+
277
+ ---
278
+
279
+ ## Documentation
280
+
281
+ Full reference: [docs/USER_GUIDE.md](docs/USER_GUIDE.md)
282
+
283
+ ---
284
+
285
+ ## License
286
+
287
+ MIT — see [LICENSE](LICENSE) for details.