{"id":28906763,"url":"https://github.com/doeixd/nmtui-go","last_synced_at":"2026-06-11T09:31:12.058Z","repository":{"id":300150357,"uuid":"1005338852","full_name":"doeixd/nmtui-go","owner":"doeixd","description":"A TUI for managing NetworkManager (nmcli) Wi-Fi connections on Linux, built with Go \u0026 Bubble Tea.","archived":false,"fork":false,"pushed_at":"2026-03-17T16:50:23.000Z","size":2995,"stargazers_count":34,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-18T06:32:06.239Z","etag":null,"topics":["bubbletea","cli","go","golang","networkmanager","nmcli","nmtui","tui","wifi"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/doeixd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-20T04:37:40.000Z","updated_at":"2026-03-17T16:50:27.000Z","dependencies_parsed_at":"2025-08-18T14:13:42.514Z","dependency_job_id":"18f35b30-a8a3-4d00-a82f-10d87229c512","html_url":"https://github.com/doeixd/nmtui-go","commit_stats":null,"previous_names":["doeixd/nmtui-go"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/doeixd/nmtui-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doeixd%2Fnmtui-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doeixd%2Fnmtui-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doeixd%2Fnmtui-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doeixd%2Fnmtui-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/doeixd","download_url":"https://codeload.github.com/doeixd/nmtui-go/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doeixd%2Fnmtui-go/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34192870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bubbletea","cli","go","golang","networkmanager","nmcli","nmtui","tui","wifi"],"created_at":"2025-06-21T15:09:50.967Z","updated_at":"2026-06-11T09:31:12.043Z","avatar_url":"https://github.com/doeixd.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\r\n# Go Network Manager TUI (nmtui-go)\r\n\r\n[![GoReleaser](https://github.com/doeixd/nmtui-go/actions/workflows/release.yml/badge.svg)](https://github.com/doeixd/nmtui-go/actions/workflows/release.yml)\r\n[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/doeixd/nmtui-go?sort=semver\u0026label=latest%20release)](https://github.com/doeixd/nmtui-go/releases/latest)\r\n\u003c!-- Add other badges if you like: license, issues, etc. --\u003e\r\n\r\nA Terminal User Interface (TUI) for managing NetworkManager Wi-Fi connections on Linux systems, built with Go and the [Bubble Tea](https://github.com/charmbracelet/bubbletea) framework. This tool provides a keyboard-driven, user-friendly way to scan, connect to, and manage Wi-Fi networks directly from your terminal.\r\n\r\n\u003c!-- Optional: Add a screenshot or GIF of the TUI in action --\u003e\r\n![nmtui-go Screenshot](screenshot.png)\r\n**nmtui-go Screenshot**\r\n\r\n## Overview\r\n\r\n`nmtui-go` aims to offer a modern and convenient alternative or supplement to `nmcli` for common Wi-Fi tasks, especially on headless systems or for users who prefer terminal-based tools. It leverages the power of `nmcli` in the background for network operations while providing an interactive and visually organized frontend.\r\n\r\n## Why Use `nmtui-go`?\r\n\r\n*   **User-Friendly TUI:** Offers a more intuitive and guided experience compared to typing raw `nmcli` commands.\r\n*   **Keyboard Driven:** Optimized for keyboard-only operation, perfect for servers or quick interactions without a mouse.\r\n*   **At-a-Glance Information:** Clearly displays available networks, signal strength, security, and connection status.\r\n*   **Simplified Workflow:** Streamlines common tasks like scanning, connecting to open/secured networks, and viewing connection details.\r\n*   **Lightweight \u0026 Performant:** Built with Go, it's a single, relatively small binary with minimal dependencies (beyond NetworkManager itself).\r\n*   **Responsive Design:** Adapts to different terminal sizes.\r\n*   **Informative Feedback:** Provides clear status messages for connection attempts, errors, and other operations.\r\n\r\n## Features\r\n\r\n*   **Scan for Wi-Fi Networks:** Actively rescan or list currently visible access points.\r\n*   **Connect to Networks:**\r\n    *   Connect to open (unsecured) networks.\r\n    *   Connect to WPA/WPA2 PSK (password-protected) networks by prompting for a password.\r\n    *   Automatically uses existing NetworkManager profiles if available.\r\n*   **Network List Display:**\r\n    *   Shows SSID, signal strength (with color indicators), security type.\r\n    *   Indicates currently active (✔) and known (★) networks.\r\n    *   Option to show/hide unnamed (hidden SSID) networks.\r\n    *   Sorts networks by active, known, and then signal strength.\r\n*   **Active Connection Info:** Display detailed information about the current active Wi-Fi connection (IP address, MAC, gateway, DNS, etc.).\r\n*   **Manage Wi-Fi Radio:** Toggle the Wi-Fi radio on/off.\r\n*   **Manage Known Profiles (CRUD):** View, inspect details, create, edit, and forget Wi-Fi profiles, even if they are not currently in scan range.\r\n*   **Disconnect:** Disconnect from the currently active Wi-Fi network.\r\n*   **Filtering:** Filter the network list by SSID.\r\n*   **Vim-style Navigation:** `h`/`j`/`k`/`l` keys work alongside arrow keys for navigation (disabled in text input fields).\r\n*   **In-TUI Self-Update:** Check for and install updates directly from the TUI with `Shift+U`, with automatic backup and rollback.\r\n*   **Responsive Layout:** UI elements adjust to terminal window size.\r\n*   **Help View:** In-app help displays available keybindings, togglable between short and full views.\r\n\r\n## Requirements\r\n\r\n*   **Linux Operating System:** This tool relies heavily on `nmcli`.\r\n*   **NetworkManager:** Must be installed and running on your system. `nmcli` is its command-line interface.\r\n*   **`nmcli` command-line tool:** Must be installed and in the system's `PATH`.\r\n\r\n## Installation\r\n\r\nYou can download the latest pre-compiled binary for your Linux distribution and architecture from the [GitHub Releases page](https://github.com/doeixd/nmtui-go/releases/latest).\r\n\r\n1.  Go to the [Releases page](https://github.com/doeixd/nmtui-go/releases/latest).\r\n2.  Download the appropriate `.tar.gz` archive for your system (e.g., `nmtui-go_vx.y.z_linux_amd64.tar.gz`).\r\n3.  Extract the archive:\r\n    ```bash\r\n    tar -xvf nmtui-go_vx.y.z_linux_amd64.tar.gz\r\n    ```\r\n4.  This will extract the `nmtui-go` binary (and `README.md`, `LICENSE`).\r\n5.  Move the `nmtui-go` binary to a directory in your system's `PATH`, for example:\r\n    ```bash\r\n    sudo mv nmtui-go /usr/local/bin/\r\n    ```\r\n6.  Ensure the binary is executable:\r\n    ```bash\r\n    sudo chmod +x /usr/local/bin/nmtui-go\r\n    ```\r\n\r\nNow you can run the application by typing `nmtui-go` in your terminal.\r\n\r\n## Usage\r\n\r\nSimply run the command:\r\n\r\n```bash\r\nnmtui-go\r\n```\r\n\r\nThe application will start, scan for Wi-Fi networks, and display them in a list.\r\n\r\nYou can also use:\r\n\r\n```bash\r\nnmtui-go --help\r\nnmtui-go --version\r\n```\r\n\r\n**Keybindings:**\r\n\r\nThe most common keybindings are displayed in the help bar at the bottom. Press `?` to toggle a more detailed help view.\r\n\r\n*   **Arrow Keys (↑ / ↓) or `j` / `k`:** Navigate the network list or scroll viewports.\r\n*   **Enter or `l`:**\r\n    *   Select a network to connect.\r\n    *   Confirm password input.\r\n    *   Confirm disconnection.\r\n    *   Dismiss connection result messages.\r\n*   **Esc or `h`:**\r\n    *   Go back from password input or other views.\r\n    *   Cancel filtering.\r\n    *   Dismiss connection result messages.\r\n*   **`r`:** Refresh the list of Wi-Fi networks (rescan).\r\n*   **`/`:** Start filtering the network list by SSID.\r\n*   **`u`:** Toggle showing/hiding unnamed (hidden SSID) networks.\r\n*   **`t`:** Toggle the Wi-Fi radio on or off.\r\n*   **`d`:** Disconnect from the current active Wi-Fi network (will prompt for confirmation).\r\n*   **`i`:** Show detailed information about the currently active Wi-Fi connection.\r\n*   **`p`:** View and manage all known Wi-Fi connection profiles.\r\n*   **`n`:** In profiles view, create a new Wi-Fi profile.\r\n*   **`e`:** In profiles/details view, edit the selected Wi-Fi profile.\r\n*   **`ctrl+f`:** In the scan list or profiles list, forget the selected network profile.\r\n*   **`ctrl+x`:** In profile create/edit form, clear password for save.\r\n*   **`Shift+U`:** Start an in-TUI self-update (when an update is available).\r\n*   **`?`:** Toggle between short and full help display at the bottom.\r\n*   **`q` / `Ctrl+C`:** Quit the application (`q` does not quit while typing in text inputs).\r\n\r\n**Profile form notes:**\r\n\r\n*   `Esc` from profile create/edit with unsaved changes requires pressing `Esc` again to confirm discard.\r\n*   Profile edits and deletes are UUID-targeted to avoid name collision mistakes.\r\n\r\n## Self-Update\r\n\r\n`nmtui-go` can check for and install updates directly from within the TUI. When a new release is available, press `Shift+U` to update in place. The old binary is backed up automatically and can be rolled back if something goes wrong.\r\n\r\n**Environment Variables:**\r\n\r\n| Variable | Description |\r\n|---|---|\r\n| `NMTUI_NO_UPDATE_CHECK=1` | Disable automatic update checks on startup |\r\n| `NMTUI_UPDATE_KEEP_BACKUP=1` | Keep the backup of the old binary after a successful update |\r\n| `NMTUI_UPDATE_PRERELEASE=1` | Include prerelease/beta versions when checking for updates |\r\n| `GITHUB_TOKEN` | Optional GitHub token for higher API rate limits |\r\n\r\n## How It's Made\r\n\r\n`nmtui-go` is built using the following Go libraries and concepts:\r\n\r\n*   **Go:** The programming language.\r\n*   **[Bubble Tea](https://github.com/charmbracelet/bubbletea):** A powerful framework for building terminal user interfaces based on The Elm Architecture (Model-View-Update).\r\n    *   **[Bubbles](https://github.com/charmbracelet/bubbles):** A collection of pre-built TUI components (list, textinput, spinner, viewport, help).\r\n    *   **[Lipgloss](https://github.com/charmbracelet/lipgloss):** Used for styling text, backgrounds, borders, and layout in the TUI with a CSS-like approach.\r\n*   **`os/exec`:** Used to execute `nmcli` commands in the background.\r\n*   **`gonetworkmanager` (local package):** A custom Go wrapper around `nmcli` commands, responsible for:\r\n    *   Parsing `nmcli` output.\r\n    *   Formatting commands for connecting, scanning, getting status, etc.\r\n    *   Handling basic error propagation from `nmcli`.\r\n\r\nThe application follows the Model-View-Update (MVU) pattern:\r\n*   **Model:** Contains the entire state of the application (current view, list of networks, input fields, terminal dimensions, etc.).\r\n*   **View:** Renders the current state as styled text to be displayed in the terminal.\r\n*   **Update:** Handles incoming messages (user input, data loaded from `nmcli`, window resize events) and updates the model accordingly, potentially triggering new commands (like fetching data).\r\n\r\n**Release Process:**\r\nReleases are automated using [GoReleaser](https://goreleaser.com/) and [GitHub Actions](https://github.com/features/actions). When a new version tag (e.g., `vX.Y.Z`) is pushed to GitHub:\r\n1.  The GitHub Actions workflow triggers.\r\n2.  GoReleaser builds the Go binary for Linux (amd64, arm64).\r\n3.  Version information (version, commit, date) is embedded into the binary.\r\n4.  Archives (`.tar.gz`) are created containing the binary, README, and LICENSE.\r\n5.  A new GitHub Release is created, and these archives are uploaded as assets.\r\n\r\n## Troubleshooting \u0026 Gotchas\r\n\r\n*   **\"nmcli: command not found\" or errors related to `nmcli`:**\r\n    Ensure NetworkManager is installed and running, and that the `nmcli` command is available in your system's `PATH`. This tool is a frontend for `nmcli`.\r\n*   **\"Error: Connection activation failed: No suitable device found...\" / Mismatching Interface Name:**\r\n    This can happen if NetworkManager has an existing profile for an SSID that is tied to a specific, now incorrect, wireless interface name (e.g., `wlan0` when your interface is now `wlp3s0`).\r\n    `nmtui-go` attempts to handle this by deleting and re-creating profiles when connecting to a known network that requires a password. If you encounter this persistently:\r\n    1.  Try manually deleting the problematic connection profile using `nmcli con delete \"Profile Name or UUID\"`.\r\n    2.  Then, try connecting again through `nmtui-go`.\r\n*   **Wi-Fi Radio Won't Turn On/Off:**\r\n    Some systems might have hardware switches or other software (like `rfkill`) that can block Wi-Fi. Ensure no such blocks are active.\r\n*   **Incorrect Password:** The TUI will show a failure message. Double-check your password. The error from `nmcli` (visible in the debug log) often indicates \"Secrets were required, but not provided\" or similar for authentication failures.\r\n*   **Hidden Networks:** Use the `u` key to toggle visibility of unnamed networks if you're trying to connect to one. You'll need to know its SSID.\r\n*   **Debug Log:**\r\n    If you encounter issues, you can run the application with debug logging enabled:\r\n    ```bash\r\n    DEBUG_TEA=1 nmtui-go\r\n    ```\r\n    This will create a `nmtui-debug.log` file in the directory where you run the command. This log contains detailed information about `nmcli` commands being executed and any errors, which can be very helpful for diagnosing problems. Sensitive command arguments such as passwords are redacted. Please include relevant parts of this log if you are reporting an issue.\r\n*   **Linux Only:** This tool is designed for Linux systems running NetworkManager. It will not work on macOS or Windows as it depends on `nmcli`.\r\n\r\n## Contributing\r\n\r\nContributions are welcome! If you'd like to contribute, please:\r\n\r\n1.  Fork the repository.\r\n2.  Create a new branch for your feature or bug fix.\r\n3.  Make your changes.\r\n4.  Ensure your code is formatted (`gofmt` or `goimports`).\r\n5.  Open a Pull Request with a clear description of your changes.\r\n\r\n## License\r\n\r\nThis project is licensed under the [MIT License](LICENSE).\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoeixd%2Fnmtui-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdoeixd%2Fnmtui-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoeixd%2Fnmtui-go/lists"}