Skip to content

Commit 8bd69e8

Browse files
Release v0.2.0
1 parent 51cfb63 commit 8bd69e8

3 files changed

Lines changed: 77 additions & 100 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "nettui"
3-
version = "0.1.13"
3+
version = "0.2.0"
44
edition = "2024"
55
description = "Unified TUI for Wi-Fi and Ethernet"
66
license = "GPL-3.0-only"

README.md

Lines changed: 75 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,39 @@
11
<div align="center">
2-
<h2>🖧 TUI for managing Wi-Fi and Ethernet</h2>
2+
<h2>🖧 nettui</h2>
3+
<p>TUI for Wi-Fi and Ethernet</p>
34
</div>
45

5-
# nettui
6-
76
`nettui` is a unified terminal UI for Wi-Fi and Ethernet.
87

9-
It is a clean-room project inspired by the UX direction of tools like `impala` and `ethtui`, with one app shell and switchable Wi-Fi/Ethernet panels.
10-
This project was inspired by and builds upon ideas from Impala by pythops.
8+
It is heavily inspired by `impala` and `ethtui`, but built as one app shell with switchable `Wi-Fi` and `Ethernet` panels.
9+
10+
It is primarily meant for `Omarchy` and tested on `Omarchy`, but it should also work on other Linux distributions that use the same core stack:
11+
12+
- `iwd`
13+
- `systemd-networkd`
14+
- `networkctl`
15+
- Nerd Fonts
1116

1217
## ✨ Features
1318

14-
- One TUI with two transport tabs: `Wi-Fi` and `Ethernet`
15-
- Startup tab policy: prefer active transport (`Ethernet` if active, else `Wi-Fi` if active
16-
- Connect/disconnect, forget, autoconnect toggle, hidden SSID connect
17-
- Known-network sharing popup with Wi-Fi QR code
18-
- Passphrase fallback flow when iwd reports `No Agent registered`
19-
- Wi-Fi adapter power toggle from the `Device` section
20-
- Ethernet details + link up/down + DHCP renew
21-
- Configurable keybinds via `~/.config/nettui/keybinds.toml`
22-
- Toast/error popups and terminal size guard (`119x35` minimum)
19+
- `Wi-Fi` and `Ethernet`
20+
- Hidden SSID connect
21+
- QR Wi-Fi sharing
22+
- Wi-Fi power toggle
23+
- Access point mode
24+
- DHCP renew
25+
- Configurable keybinds
2326

2427
## 💡 Prerequisites
2528

2629
- Linux
27-
- `iwd` running and reachable on D-Bus
28-
- `systemd-networkd` + `networkctl` available
29-
- Nerd Fonts recommended for icon rendering
30+
- `iwd` running on D-Bus
31+
- `systemd-networkd`
32+
- `networkctl`
33+
- Nerd Fonts recommended
3034

3135
> [!IMPORTANT]
32-
> To avoid network stack conflicts, keep one wireless manager in control. If `iwd` is your backend, avoid running overlapping managers for Wi-Fi (for example `NetworkManager` or `wpa_supplicant`) at the same time.
36+
> `nettui` works best when `iwd` is the only active Wi-Fi manager. Avoid overlapping managers like `NetworkManager` or `wpa_supplicant`.
3337
3438
## 🚀 Installation
3539

@@ -39,13 +43,13 @@ This project was inspired by and builds upon ideas from Impala by pythops.
3943
cargo install nettui
4044
```
4145

42-
### Arch Linux (AUR source build)
46+
### Arch Linux (AUR source)
4347

4448
```bash
4549
yay -S nettui
4650
```
4751

48-
### Arch Linux (AUR prebuilt binary)
52+
### Arch Linux (AUR binary)
4953

5054
```bash
5155
yay -S nettui-bin
@@ -57,104 +61,84 @@ yay -S nettui-bin
5761
nettui
5862
```
5963

60-
## 🩺 Troubleshooting
61-
62-
- `scan` says `Wi-Fi scan already running`:
63-
- previous scan is still in progress.
64-
- `scan` says `Wait ... ms before next scan`:
65-
- debounce cooldown is active; retry after the short wait.
66-
- `Access point` starts but clients cannot join or do not receive IP:
67-
- AP mode depends on Wi-Fi chipset, kernel driver, `iwd`, channel/regulatory domain, and client compatibility.
68-
- `nettui` uses a conservative iwd AP profile, but hotspot mode is still hardware-dependent and cannot be guaranteed on every adapter.
69-
- for DHCP in AP mode, `/etc/iwd/main.conf` must enable `[General] EnableNetworkConfiguration=true`.
70-
71-
## ⌨️ Controls
72-
73-
Global:
74-
75-
- `h/l` or `←/→`: switch transport tab (`Wi-Fi` / `Ethernet`)
76-
- `j/k` or `↓/↑`: move selection
77-
- `r`: refresh (shows info toast)
78-
- `q` or `Esc`: quit
79-
80-
Wi-Fi tab:
81-
82-
- `Tab` / `Shift+Tab`: switch focus (`Known` / `New` / `Device`)
83-
- `s`: scan
84-
- `Enter`: connect/disconnect selected network
85-
- `a`: show/hide extra entries (`Known`: unavailable, `New`: hidden)
86-
- `d`: forget selected known network
87-
- `y`: share selected known network (in `Known`)
88-
- `t`: toggle autoconnect for selected known network
89-
- `n`: connect hidden network (in `New`)
90-
- `i`: toggle Wi-Fi details popup
91-
- `o`: toggle Wi-Fi adapter power (in `Device`)
92-
- `p`: start/stop access point
93-
- Empty `New Networks` list shows `- no new networks -`
94-
95-
Ethernet tab:
96-
97-
- `Enter`: toggle selected interface link (`up/down`)
98-
- `n`: renew DHCP on selected interface
99-
100-
## ⚙️ Keybind config
101-
102-
Config file path:
64+
On first launch, `nettui` creates:
10365

10466
```bash
10567
~/.config/nettui/keybinds.toml
10668
```
10769

108-
On first launch, `nettui` auto-creates this file with defaults.
70+
## 🧩 Omarchy
10971

110-
To reset from template:
72+
Official Omarchy currently launches `impala` for Wi-Fi:
11173

11274
```bash
113-
mkdir -p ~/.config/nettui
114-
cp /usr/share/doc/nettui/keybinds.toml.example ~/.config/nettui/keybinds.toml
75+
rfkill unblock wifi
76+
omarchy-launch-or-focus-tui impala
11577
```
11678

117-
Edit this file directly and restart `nettui` after changes.
79+
To switch your local Omarchy install to `nettui`:
11880

119-
## 🔄 Restart / control
120-
121-
`nettui` is not a `systemd` service, so `systemctl` does not apply.
81+
```bash
82+
sed -i 's/omarchy-launch-or-focus-tui impala/omarchy-launch-or-focus-tui nettui/g' ~/.local/share/omarchy/bin/omarchy-launch-wifi
83+
```
12284

123-
Quick restart:
85+
Verify:
12486

12587
```bash
126-
pkill -x nettui || true
127-
omarchy-launch-or-focus-tui nettui
88+
sed -n '1,120p' ~/.local/share/omarchy/bin/omarchy-launch-wifi
12889
```
12990

130-
## 🧩 Omarchy integration
131-
132-
Official Omarchy `dev` launcher (`bin/omarchy-launch-wifi`) is:
91+
Optional Hyprland rule:
13392

13493
```bash
135-
rfkill unblock wifi
136-
omarchy-launch-or-focus-tui impala
94+
grep -q "match:class org.omarchy.nettui" ~/.config/hypr/apps/system.conf || echo "windowrule = size 1190 735, match:class org.omarchy.nettui" >> ~/.config/hypr/apps/system.conf
95+
hyprctl reload
13796
```
13897

139-
So installing `nettui` alone does not replace Wi-Fi handling automatically.
98+
## ⌨️ Controls
14099

141-
To use `nettui` instead of `impala` in your local Omarchy install:
100+
### Global
142101

143-
```bash
144-
sed -i 's/omarchy-launch-or-focus-tui impala/omarchy-launch-or-focus-tui nettui/g' ~/.local/share/omarchy/bin/omarchy-launch-wifi
145-
```
102+
- `h/l` or `←/→`: switch tab
103+
- `j/k` or `↓/↑`: move
104+
- `r`: refresh
105+
- `q` or `Esc`: quit
146106

147-
Verify:
107+
### Wi-Fi
148108

149-
```bash
150-
sed -n '1,120p' ~/.local/share/omarchy/bin/omarchy-launch-wifi
109+
- `Tab` / `Shift+Tab`: switch section
110+
- `s`: scan
111+
- `Enter`: connect or disconnect
112+
- `a`: show all
113+
- `d`: forget
114+
- `y`: share
115+
- `t`: autoconnect
116+
- `n`: hidden network
117+
- `i`: details
118+
- `o`: power
119+
- `p`: access point
120+
121+
### Ethernet
122+
123+
- `Enter`: link up/down
124+
- `n`: renew DHCP
125+
126+
## 🩺 Notes
127+
128+
- `Access point` mode is hardware-dependent.
129+
- Some adapters can scan and connect normally, but still fail in AP mode.
130+
- For DHCP in AP mode, `/etc/iwd/main.conf` should enable:
131+
132+
```ini
133+
[General]
134+
EnableNetworkConfiguration=true
151135
```
152136

153-
Optional Hyprland size rule for `org.omarchy.nettui`:
137+
## 🔄 Restart
154138

155139
```bash
156-
grep -q "match:class org.omarchy.nettui" ~/.config/hypr/apps/system.conf || echo "windowrule = size 1190 735, match:class org.omarchy.nettui" >> ~/.config/hypr/apps/system.conf
157-
hyprctl reload
140+
pkill -x nettui || true
141+
omarchy-launch-or-focus-tui nettui
158142
```
159143

160144
## 🛠️ Build
@@ -165,21 +149,14 @@ cargo test
165149
cargo clippy --all-targets --all-features -- -D warnings
166150
```
167151

168-
## 📦 Maintainer Release Asset
152+
## 📦 Release Asset
169153

170154
Always build the GitHub release tarball with:
171155

172156
```bash
173157
./scripts/build-release-asset.sh
174158
```
175159

176-
This script enforces the archive layout expected by `nettui-bin` AUR:
177-
178-
- `nettui-v<version>-x86_64/nettui`
179-
- `nettui-v<version>-x86_64/README.md`
180-
- `nettui-v<version>-x86_64/LICENSE`
181-
- `nettui-v<version>-x86_64/config/keybinds.toml.example`
182-
183160
## ⚖️ License
184161

185162
`nettui` is licensed under `GPL-3.0-only`. See `LICENSE`.

0 commit comments

Comments
 (0)