tui-tools

tui-disk

Disks, mounts, fstab, btrfs and SMART, previewed before every change

v0.1.1storageMIT
The device tree: size, filesystem, usage and the SMART verdict of every disk
The device tree: size, filesystem, usage and the SMART verdict of every disk

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.

The 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.

Changes 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.

Run 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.

Keys

KeyAction
1…5 / tabSwitch between devices, mounts, btrfs, health and space
enterOpen the selected row in full
m / uMount or unmount the selected fstab entry
eEdit the fstab entry for the selected row, with a diff to confirm
aAdd an fstab entry, picking the device by UUID
DReload the systemd units generated from fstab
c / CStart or cancel a btrfs scrub
b / BStart or cancel a btrfs balance, with a block group filter
s / SStart a short or extended drive self-test
/Filter the current screen across every column
RRe-read the storage
?Help
qQuit

Press ? inside the tool for the full help screen, which is generated from the same action table as the key map.

Compatibility

This tool is a face on the program below, so its version matters.Tested is not a claim: a version lands there only after the tool's own suite passed against it on a real machine in the lab, and the run is kept as evidence in the repository. At startup the tool probes the backend once and says what it found in its header — a version nobody has run against is shown as(untested) in the warning colour, one older than the minimum as (below minimum) in the error colour. Neither stops it: the backend still refuses what it cannot do, in its own words.

util-linux

lsblk ≥ 2.34
Binary
lsblk
Minimum
2.34
Probed with
lsblk --version
Tested
2.39.32.41.52.42.2

Needs a version this new

  • mountpointssince 2.37

What changes on older versions

  • util-linux <2.37

    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

  • util-linux >=2.34

    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

btrfs-progs

btrfs ≥ 5.10
Binary
btrfs
Minimum
5.10
Probed with
btrfs --version
Tested
6.6.36.19.17.1

Needs a version this new

  • json-outputsince 5.15

What changes on older versions

  • btrfs-progs >=5.10

    --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

  • btrfs-progs >=5.10

    subvolume list, qgroup show and balance status refuse an unprivileged caller with "Operation not permitted"; they are retried with sudo -n, and a machine that cannot escalate shows those sections empty with a note saying so

  • btrfs-progs <5.15

    no --format json at all, so device stats is read from its text output too

smartmontools

smartctl ≥ 7.0
Binary
smartctl
Minimum
7.0
Probed with
smartctl --version
Tested
No recorded run yet. The tool still runs and reports the version it found as untested.

Needs a version this new

  • json-outputsince 7.0

What changes on older versions

  • smartmontools <7.0

    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

  • smartmontools >=7.0

    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

Install

Once per machine, then every tool in the family is one pacman away.

Add the repository
$ curl -fsSL https://pkgs.tui.tools/install.sh | sh
Or run the same thing yourself, one command at a time

A family whose whole promise is preview before you run is not going to insist you pipe a script into a shell. These are the commands that script runs.

The one-time setup, by hand
$ curl -fsSL -o /tmp/tui-tools.asc https://pkgs.tui.tools/pubkey.asc
  sudo pacman-key --add /tmp/tui-tools.asc
  sudo pacman-key --lsign-key \
    "$(gpg --show-keys --with-colons /tmp/tui-tools.asc | awk -F: '/^fpr:/{print $10; exit}')"
  printf '[tui-tools]\nServer = https://pkgs.tui.tools/arch/$arch\n' \
    | sudo tee -a /etc/pacman.conf
  sudo pacman -Sy
Arch Linux · tui-disk
$ sudo pacman -S tui-disk

Upgrades then arrive with the rest of your system updates.

What it can do to your machine

  • Preview, then confirm

    Every change is shown as an exact command line and confirmed before it runs. The dialog and the runner receive the same value, so the preview cannot drift from what executes.

  • Escalates for actions

    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.

  • No daemon, no state of its own

    Nothing keeps running after you quit, and nothing is installed to run later. The system is the source of truth; the tool re-reads it after every change.

  • No network access

    The tool opens no network connection of its own. No telemetry, no update check, no phone home.

  • Static binary

    Released statically linked, with no runtime dependencies to install.

  • Releases are not signed yet

    Releases carry SHA-256 checksums but no signature. Verify the checksum, and read this as the open item it is.

Reporting

Report a security issue privately, through GitHub's private vulnerability reporting on the repository's Security tab. The family-wide policy, and what counts as in scope, is on the security page.

Downloads

v0.1.1 · 2026-08-30
FileSizeSHA-256
checksums.txt776 B
tui-disk-0.1.1-1-aarch64.pkg.tar.zst1.7 MBecc303e5852847b853ca3a5683a31daf7de1682aca99361cf78ba0035296dcd1
tui-disk-0.1.1-1-x86_64.pkg.tar.zst1.9 MBed934ca8e780622596a14e2225a8080463b23faf62a1caab730f29418385da10
tui-disk-0.1.1-1.aarch64.rpm1.7 MB0f296dc15c78de34ab70c0f80a8485ba79c38b24f1a51c2665001b911aa31ff7
tui-disk-0.1.1-1.x86_64.rpm1.9 MB4d2fd1605bb485d595e64fd1d72cc40c98765eb29e9e302df4ff74bbea5b10c8
tui-disk_0.1.1_amd64.deb1.9 MB41832cf85b5c0289ef11186c71f594f3b1154b68136188824faad486103efa05
tui-disk_0.1.1_arm64.deb1.7 MBabd21a1d19f88a6065dddd4c66cd2d1d0d6a2603a353799d51ceab607ee4012c
tui-disk_0.1.1_linux_amd64.tar.gz1.9 MB64ebcb3e7dd571e605fec25f6bcfa2e55918380a3ba5df17370e1fb96750de8a
tui-disk_0.1.1_linux_arm64.tar.gz1.7 MB9e1066d4b076d395895c1965d2edbe86d88295cbab33706d40ba5173ac72b7c8

Every release ships a checksums.txt. Download it next to the archive and run sha256sum -c checksums.txt --ignore-missing. See verifying a download.

Releases

v0.1.1

2026-08-30
## Changelog
* 6e2c0ac055010364892989959f23ec4ed1ae3980 Cover the btrfs filesystem that is not the root, and record the first real run
* 2922593be9f088a3a1bb62b9e13bbd4c5cf520a6 Packages are available from pkgs.tui.tools
* 3d74312aec38354d784b2ae8021fdb042274e161 Re-pin the kit at v0.2.3
* c7a25638d6e73e1f13cf3b0175ddbe2c3ef7a4ac Ship the tool as a .deb, an .rpm and a pacman package

v0.1.0

2026-08-30
## Changelog
* 32f35b639edef85b8a39f13f82bc0a70bdf91fae Build tui-disk: disks, mounts, fstab, btrfs and SMART on one screen
* 53b08c5ec4331f3890a7636851c92509bcd33a63 Fit the manifest inside the family schema
* f4eab3e7cc3bbff4422b3b8607d71f464ff1884d Initial commit