Bar widget for removable USB drives: list devices, mount/unmount, eject, format (FAT32 / exFAT / ext4), and resize partitions. A background daemon watches udisksctl and shows connect/disconnect notifications.
Manage removable drives from the desktop shell instead of switching between command-line tools. This project demonstrates QML user interfaces, Linux device integration, background monitoring, and shell helpers.
Developer portfolio · Discuss Linux automation
Formatting erases the selected filesystem and resizing changes partitions. Back up the drive and verify the selected device before using those actions; removable-drive checks do not replace that review.
| Bar popout (device list) | Mounted drive + path |
|---|---|
![]() |
![]() |
| Format flow | Resize flow |
|---|---|
![]() |
![]() |
- DankMaterialShell with plugin support
udisks2(udisksctl),lsblk,bash- For format/resize:
parted,mkfs.vfat/mkfs.exfat/mkfs.ext4,resize2fs(ext4), optionalfatresize(FAT32 grow), Polkit/agent for privileged operations
Settings (e.g. Mod+,) → Plugins → Browse → install USB Manager once it appears in the registry.
git clone https://github.com/NordicsSys/dms-usb-manager.git \
~/.config/DankMaterialShell/plugins/USBManager
dms restart # or reload your sessionEnable USB Manager and its daemon in plugin settings.
| Path | Role |
|---|---|
plugin.json |
Plugin manifest |
USBManager.qml |
Bar widget |
USBManagerPopout.qml |
Popout UI (list, format, resize) |
daemon.qml |
Background monitor + notifications + IPC |
main.qml |
Panel UI |
helpers/*.sh |
List/mount/format/resize helpers |
- Reliable plugin path resolution (
usbManagervsUSBManagerinstall folder). - NVMe / mmcblk parent-disk detection in
usb_manager.sh. - Mount-then-open-file-manager waits for device list refresh (no race).
- Safer format/resize: USB transport required, stricter removable sysfs checks, stderr merged for pkexec errors.
udisksctl monitorrestart backoff (avoids tight loops if the binary is missing).- UI:
RowLayoutspacers, corrected widths, mount/unmount icon semantics.
See LICENSE.



