A clean ncurses TUI wrapper for nmcli — manage NetworkManager from the terminal with rounded corners and style.
Project description
nmcli-tui
A clean ncurses TUI wrapper for
nmcli— manage NetworkManager from the terminal with rounded corners and style.
nmcli-tui wraps every major nmcli capability behind a tasteful, keyboard-
driven terminal interface built on the standard-library curses module. No
bloat, no Electron, no dependencies — just Python and NetworkManager.
🌸 A tribute to samsit-phew. Every
╭ ╮ ╰ ╯on this screen is a small thank-you to a sensibility that believed terminal tools deserve rounded corners, soft accents and respect for the operator's eyes. Open the in-app help (?) to read it.
Features
-
Seven tabs covering the whole
nmclisurface:Tab Covers General nmcli general— status, hostname, permissionsDevices nmcli device— status, connect, disconnect, reapply, deleteWiFi nmcli device wifi— scan, list, connect (with password), hidden networksConnections nmcli connection— show, up, down, edit, delete, clone, add, reloadNetworking nmcli networking— on / off / connectivity checkRadio nmcli radio— Wi-Fi & WWAN togglesHelp keybindings + the samsit-phew tribute -
Rounded-corner panels drawn with Unicode box-drawing characters
-
Tables with columnar alignment, scrolling and a selection cursor
-
Modal dialogs — messages, confirmations, forms and an action menu
-
Password masking for Wi-Fi PSKs
-
Resizes with your terminal (
KEY_RESIZEaware) -
Zero runtime dependencies — pure standard library
Installation
From PyPI
pip install nmcli-tui
From source
git clone https://github.com/samsit-phew/nmcli-tui.git
cd nmcli-tui
pip install .
Then launch with:
nmcli-tui # or the alias: nmtui2
nmcli-tui --sudo # if you have passwordless sudo
Most write operations (connect, modify, delete, …) require root. Run inside
sudoor pass--sudoif yoursudois configured for non-interactive use.
Keys
| Key | Action |
|---|---|
Tab / → |
Next tab |
Shift+Tab / ← |
Previous tab |
1–7 |
Jump to a tab |
↑ ↓ or k j |
Move selection |
Enter |
Activate item / open the action menu |
Esc / q |
Close dialog / quit |
r / F5 |
Refresh current tab |
? |
Help (read the tribute!) |
Tab-specific hotkeys are listed in the in-app help screen.
Why a TUI when nmtui already exists?
The bundled nmtui works but looks like 2010. nmcli-tui is a love letter to
the terminal: rounded corners, a cohesive colour palette, a tabbed layout and
inline forms — while still shelling out to the real nmcli so behaviour stays
100% compatible.
Packaging layout
nmcli-tui/
├── pyproject.toml # PEP 517/518 build config + entry points
├── README.md
├── LICENSE
└── src/nmcli_tui/
├── __init__.py
├── __main__.py # `python -m nmcli_tui`
├── cli.py # argparse entry point
├── py.typed # PEP 561 marker
├── core/
│ └── nmcli.py # the full nmcli wrapper
└── tui/
├── theme.py # colours + box-drawing constants
├── widgets.py # Panel, Table, Form, TextInput, dialogs
├── screens.py # the seven tab screens
├── help.py # help + tribute
└── app.py # the main loop
Development
pip install -e ".[dev]"
python -m nmcli_tui
Build a distribution:
python -m build
twine upload dist/*
License
MIT — see LICENSE.
Made with rounded corners.
A tribute to samsit-phew.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nmcli_tui-1.0.0-py3-none-any.whl.
File metadata
- Download URL: nmcli_tui-1.0.0-py3-none-any.whl
- Upload date:
- Size: 27.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ad5ed8c58b4ddec8d0c626627d1953b74b37530a7e5d95dd3fbf55451f5923d
|
|
| MD5 |
5adec23cb5a32e3be9d2bbdf21f2c131
|
|
| BLAKE2b-256 |
1e5749cda90b1516392bc39273a84f9ef680dff833d547af7a86f6a0ece67ec0
|