Repository navigation
Expand file tree
/
Copy pathtool.json
More file actions
302 lines (302 loc) · 10.3 KB
/
Copy pathtool.json
File metadata and controls
302 lines (302 loc) · 10.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
{
"schemaVersion": 1,
"name": "tui-disk",
"binary": "tui-disk",
"tagline": "Disks, mounts, fstab, btrfs and SMART, previewed before every change",
"description": "A terminal UI for the machine's storage. Five screens over one read: the block devices with their filesystems and usage bars, the mount table crossed against `/etc/fstab`, the btrfs filesystems in full, the SMART health of every drive, and what `df` says about free space.\n\nThe mounts screen is the one that earns its keep. It shows what is mounted now next to what fstab says will be mounted next boot, and marks every row where those disagree: a filesystem mounted by hand that will vanish on reboot, an fstab entry that failed to mount and nobody noticed, and options fstab asks for that are not in effect.\n\nChanges are previewed. Mounting and unmounting an entry, starting or cancelling a btrfs scrub or balance, starting a drive self-test, and editing `/etc/fstab` — which is validated with `findmnt --verify` against the staged file BEFORE the dialog opens, shown as a unified diff, then installed and applied with `systemctl daemon-reload` — all carry the exact command line.\n\nRun `tui-disk --demo` to drive a sample machine: an NVMe root on btrfs, a spinning disk with two reallocated sectors, a USB stick mounted by hand and one fstab mismatch. Nothing touches your system.",
"category": "storage",
"stability": "stable",
"stableSince": "1.0.0",
"homepage": "https://github.com/tui-tools/tui-disk",
"repo": "https://github.com/tui-tools/tui-disk",
"license": "MIT",
"platforms": [
"linux/amd64",
"linux/arm64"
],
"icon": "assets/icon.svg",
"logo": "assets/logo.png",
"screenshots": [
{
"path": "docs/screenshots/tui-disk-devices.png",
"caption": "The device tree: size, filesystem, usage and the SMART verdict of every disk"
},
{
"path": "docs/screenshots/tui-disk-mounts.png",
"caption": "The mount table crossed with fstab, with every disagreement marked"
},
{
"path": "docs/screenshots/tui-disk-fstab.png",
"caption": "The guided fstab editor: a device by UUID, a mount point, a type and an options preset"
},
{
"path": "docs/screenshots/tui-disk-diff.png",
"caption": "Writing that entry: findmnt verified the staged file, then the diff and the two commands that apply it"
},
{
"path": "docs/screenshots/tui-disk-btrfs.png",
"caption": "One btrfs filesystem: allocation, subvolumes, scrub, balance and the per-device error counters"
},
{
"path": "docs/screenshots/tui-disk-smart.png",
"caption": "Drive health: the self-assessment, temperature, hours and the counters that predict a failure"
}
],
"keys": [
{
"key": "1…5 / tab",
"action": "Switch between devices, mounts, btrfs, health and space"
},
{
"key": "enter",
"action": "Open the selected row in full"
},
{
"key": "m / u",
"action": "Mount or unmount the selected fstab entry"
},
{
"key": "e",
"action": "Edit the fstab entry for the selected row, with a diff to confirm"
},
{
"key": "a",
"action": "Add an fstab entry, picking the device by UUID"
},
{
"key": "D",
"action": "Reload the systemd units generated from fstab"
},
{
"key": "c / C",
"action": "Start or cancel a btrfs scrub"
},
{
"key": "b / B",
"action": "Start or cancel a btrfs balance, with a block group filter"
},
{
"key": "s / S",
"action": "Start a short or extended drive self-test"
},
{
"key": "/",
"action": "Filter the current screen across every column"
},
{
"key": "R",
"action": "Re-read the storage"
},
{
"key": "?",
"action": "Help"
},
{
"key": "q",
"action": "Quit"
}
],
"backends": [
{
"name": "util-linux",
"binary": "lsblk",
"versionCommand": [
"lsblk",
"--version"
],
"versionRegex": "util-linux ([0-9.]+)",
"minimum": "2.34",
"searchPaths": [
"/usr/bin/lsblk",
"/bin/lsblk"
],
"features": [
{
"name": "mountpoints",
"since": "2.37"
}
],
"notes": [
{
"range": "<2.37",
"impact": "lsblk has no `MOUNTPOINTS` column, so the single-valued `MOUNTPOINT` is asked for instead; a device mounted at several paths reports only the first one. lsblk fails the whole call on a column name it does not know, so this is a gate rather than a fallback"
},
{
"range": ">=2.34",
"impact": "`blkid` reads /dev directly and answers an unprivileged caller with an empty body and exit 0, so the fstab editor's device picker escalates with `sudo -n` and falls back to the UUIDs lsblk already reported when it cannot"
}
],
"tested": [
"2.39.3",
"2.41.5",
"2.42.2"
]
},
{
"name": "btrfs-progs",
"binary": "btrfs",
"versionCommand": [
"btrfs",
"--version"
],
"versionRegex": "btrfs-progs v([0-9.]+)",
"minimum": "5.10",
"searchPaths": [
"/usr/sbin/btrfs",
"/sbin/btrfs",
"/usr/bin/btrfs"
],
"features": [
{
"name": "json-output",
"since": "5.15"
}
],
"notes": [
{
"range": ">=5.10",
"impact": "`--format json` is supported per command, not globally: `device stats` and `filesystem df` emit JSON, while `filesystem usage`, `subvolume list`, `scrub status` and `balance status` refuse it through 6.19 at least, so those four are read from their text output"
},
{
"range": ">=5.10",
"impact": "`subvolume list`, `qgroup show`, `balance status`, and on some kernels (Ubuntu 24.04) `scrub status` and `device stats`, refuse an unprivileged caller; they are retried with `sudo -n`, and what still cannot be read is left empty with a note saying so"
},
{
"range": "<5.15",
"impact": "no `--format json` at all, so `device stats` is read from its text output too"
}
],
"tested": [
"6.6.3",
"6.19.1",
"7.1"
]
},
{
"name": "smartmontools",
"binary": "smartctl",
"versionCommand": [
"smartctl",
"--version"
],
"versionRegex": "smartctl ([0-9.]+)",
"minimum": "7.0",
"searchPaths": [
"/usr/sbin/smartctl",
"/sbin/smartctl",
"/usr/bin/smartctl"
],
"features": [
{
"name": "json-output",
"since": "7.0"
}
],
"notes": [
{
"range": "<7.0",
"impact": "`smartctl --json` does not exist, and the health of every drive is reported as unknown rather than scraped out of a table meant for human eyes"
},
{
"range": ">=7.0",
"impact": "reading SMART needs the raw device, so it escalates with `sudo -n`; a drive behind a USB bridge that passes no SMART through, and a virtual disk that has no firmware, both come back unknown with the reason smartctl gave"
}
],
"tested": [
"7.5"
]
}
],
"install": {
"repo_url": "https://pkgs.tui.tools",
"pacman": {
"available": true,
"package": "tui-disk",
"repo": "tui-tools",
"requires_repo_setup": true,
"command": "sudo pacman -S tui-disk",
"url": "https://pkgs.tui.tools/arch",
"note": "Upgrades then arrive with the rest of your system updates."
},
"aur": {
"available": false,
"package": "tui-disk-bin",
"repo": "aur",
"command": "paru -S tui-disk-bin",
"url": "https://aur.archlinux.org/packages/tui-disk-bin",
"note": "The -bin package installs the released static binary."
},
"apt": {
"available": true,
"package": "tui-disk",
"repo": "tui-tools",
"requires_repo_setup": true,
"command": "sudo apt install tui-disk",
"url": "https://pkgs.tui.tools/deb",
"note": "Upgrades then arrive with the rest of your system updates."
},
"dnf": {
"available": true,
"package": "tui-disk",
"repo": "tui-tools",
"requires_repo_setup": true,
"command": "sudo dnf install tui-disk",
"url": "https://pkgs.tui.tools/rpm",
"note": "Upgrades then arrive with the rest of your system updates."
},
"zypper": {
"available": false,
"package": "tui-disk",
"repo": "tui-tools",
"requires_repo_setup": true,
"command": "sudo zypper install tui-disk",
"url": "https://pkgs.tui.tools/rpm",
"note": "The rpm repository is shared with dnf; zypper support is not tested yet."
},
"binary": {
"available": true,
"pattern": "tui-disk_{version}_linux_{arch}.tar.gz",
"command": "curl -fsSL https://github.com/tui-tools/tui-disk/releases/download/v{version}/tui-disk_{version}_linux_{arch}.tar.gz | tar -xz tui-disk\nsudo install -m0755 tui-disk /usr/local/bin/tui-disk",
"url": "https://github.com/tui-tools/tui-disk/releases",
"note": "One static binary. Verify it against checksums.txt from the same release."
},
"source": {
"available": true,
"command": "git clone https://github.com/tui-tools/tui-disk\ncd tui-disk && make build\nsudo install -m0755 bin/tui-disk /usr/local/bin/tui-disk",
"url": "https://github.com/tui-tools/tui-disk",
"note": "Needs Go 1.27 or newer."
}
},
"security": {
"needs_sudo": "Most reads are unprivileged. Five are not and escalate with `sudo -n`, which never prompts: blkid, `btrfs subvolume list`, `qgroup show`, `balance status` and `smartctl -a`. Every change escalates the same way.",
"preview_before_run": true,
"no_daemon": true,
"no_network": true,
"static_binary": true,
"signed_releases": true,
"config_paths": [
"/etc/tui-disk/config.toml",
"~/.config/tui-disk/config.toml"
]
},
"maintainers": [
{
"name": "Edimar Cardoso",
"github": "edimarlnx"
}
],
"since": "2026-08-29",
"keywords": [
"storage",
"disk",
"lsblk",
"findmnt",
"fstab",
"mount",
"btrfs",
"smart",
"smartctl",
"tui",
"bubbletea"
]
}