{"id":48298636,"url":"https://github.com/defname/rofi-iwd-wifi-menu","last_synced_at":"2026-04-04T23:40:06.187Z","repository":{"id":65358199,"uuid":"589363441","full_name":"defname/rofi-iwd-wifi-menu","owner":"defname","description":"Minimalistic WiFi network chooser for iwd using rofi","archived":false,"fork":false,"pushed_at":"2024-10-17T15:03:34.000Z","size":526,"stargazers_count":61,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-19T21:57:42.178Z","etag":null,"topics":["gui","iwd","rofi-scripts","wifi-manager","wifi-menu"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/defname.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2023-01-15T23:01:36.000Z","updated_at":"2024-10-17T15:03:38.000Z","dependencies_parsed_at":"2023-02-18T23:01:21.580Z","dependency_job_id":null,"html_url":"https://github.com/defname/rofi-iwd-wifi-menu","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/defname/rofi-iwd-wifi-menu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defname%2Frofi-iwd-wifi-menu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defname%2Frofi-iwd-wifi-menu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defname%2Frofi-iwd-wifi-menu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defname%2Frofi-iwd-wifi-menu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/defname","download_url":"https://codeload.github.com/defname/rofi-iwd-wifi-menu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defname%2Frofi-iwd-wifi-menu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31419538,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["gui","iwd","rofi-scripts","wifi-manager","wifi-menu"],"created_at":"2026-04-04T23:40:05.624Z","updated_at":"2026-04-04T23:40:06.161Z","avatar_url":"https://github.com/defname.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# iwdrofimenu\nMinimalistic WiFi network chooser for *[iwd](https://iwd.wiki.kernel.org/)* with a\n*[rofi](https://github.com/davatorium/rofi)* frontend.\n\n## Overview\nA simple network chooser written in Python 3 and mainly for fun and my own use.\nIt is a script for *rofi* and works as a\nfrontend for *iwd*/*iwctl*. The functionality is very basic. It is only possible\nto list networks, connect/disconnect, show details of the active connection,\nand remove the active connection from the known networks.\n\n*iwdrofimenu* can run in two slightly different modes. A normal mode where it is possible to manage the connections, and an other mode optimized for *rofi*'s combi mode. In this less interactive mode only known (available) networks and less options are listed.\n\n*iwd* (iNet Wireless Daemon) is a small, standalone\nwireless network daemon that seems to be much more resource-friendly than\n*[networkmanager](https://networkmanager.dev/)* (which I used before).\nIt doesn't depend on a lot of other stuff (no need for *wpa_supplicant* or *dhcpd*\nanymore) and has a great text-based interface. However, I was used to\n*networkmanager*'s ncurses frontend and I wanted something similar, that is easy\nto use and fits into my *[i3](https://i3wm.org/)* setup, so I wrote this little\nprogram.\n\n## Screenshots\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd valign=\"center\"\u003e\n  \u003cdiv\u003e\u003cimg alt=\"Screenshot 1\" src=\"https://user-images.githubusercontent.com/7081451/213877647-4e047605-414b-4e87-a78f-1c8e6bc23f12.png\" width=\"240em\" /\u003e\u003c/div\u003e\n  \u003cdiv algin=\"center\"\u003emain dialog\u003c/div\u003e\n\u003c/td\u003e\n\u003ctd valign=\"center\"\u003e\n  \u003cdiv\u003e\u003cimg alt=\"Screenshot 2\" src=\"https://user-images.githubusercontent.com/7081451/213877674-5f3fc7c0-e294-42ce-9ee2-ee233e2caf0c.png\" width=\"240em\" /\u003e\u003c/div\u003e\n  \u003ccenter\u003econnection details\u003c/center\u003e\n\u003c/td\u003e\n\u003ctd valign=\"center\"\u003e\n  \u003cdiv\u003e\u003cimg alt=\"Screenshot 2\" src=\"https://user-images.githubusercontent.com/7081451/213877693-6a5d7380-40c5-45f6-a566-d66b1c2afe64.png\" width=\"240em\" /\u003e\u003c/div\u003e\n  \u003cdiv text-algin=\"center\"\u003emain dialog with rofis -no-config flag\u003c/div\u003e\n\u003ctd valign=\"center\"\u003e\n  \u003cdiv\u003e\u003cimg alt=\"Screenshot 2\" src=\"https://user-images.githubusercontent.com/7081451/213877712-61002b54-d2ae-4078-a5c7-c193d30d93f6.png\" width=\"240em\" /\u003e\u003c/div\u003e\n  \u003cdiv text-algin=\"center\"\u003eintegrated with other modes\u003c/div\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## Dependencies\nAs you probably guessed, you need a working installation of *iwd* (make sure your user has the needed permissions to run `iwctl`!),\n*rofi* and *Python 3* to use this script. All of these can be obtained from the official repositories of your favorite\nLinux distribution. You also need to install the Python library [pexpect](https://github.com/pexpect/pexpect) which you should also find with your distributions packet manager (e.g. in *Arch* it's `python-pexpect`). Otherwise you can install it with Python's package manager by running\n```\npip install pexpect\n```\nHowever, if you currently do not use iwd, you may not want to switch your wifi daemon as it may cause issues with integrated network buttons and other features in your Linux distribution's desktop environment.\n\n## Installation\n### To try it out\nIf you want to try it out, get your copy and run it as *rofi* script\n```sh\ngit clone https://github.com/defname/rofi-iwd-wifi-menu\ncd rofi-iwd-wifi-menu\nrofi -show wifi -modi \"wifi:./iwdrofimenu.py\"\n```\nWith some luck, it just works out of the box.\nIf it's not working, setting the name of your wifi device in a configuration file might help.\nTo find out the name of your device run\n```sh\niwctl device list\n```\nand look it up in the first column (it should be something similar to `wlan0`\nwhat's the default setting).\n\nThere are different possible locations for the configuration file, but if you only want to try it out, you can just create the file in the scripts root directory (where you should be located after above commands):\n```sh\necho -e \"[general]\\ndevice=\u003cDEVICENAME\u003e\" \u003e iwdrofimenu.conf\n```\nReplace `\u003cDEVICENAME\u003e` with the name of your wifi device.\n\nTo learn more about where to place the config file and what options there are, see the [Configuration section](#configuration)\n\n### Installation\nIf it works for you, you can install the script more permanently. You can install it system wide or in you home directory. For system wide installation run\n```sh\nsudo make install\n```\nThis will copy the script files to a subdirectory of `/usr/share` and create a\nsymlink to the executable in `/usr/bin`.\n\nTo install it in you home directory (or somewhere else) run\n```sh\nDESTDIR=~/.local make install\n```\nThe behaviour is as described above, but everything happens in the specified \ndirectory, not in `/usr`.\n(You have to make sure `~/.local/bin` exists and that it is in your `PATH`)\n\nIf you use *Arch* Linux you can also install from [AUR (iwdrofimenu-git)](https://aur.archlinux.org/packages/iwdrofimenu-git).\n\n## Usage\nWhen `iwdrofimenu` is installed you can run it with\n```sh\nrofi -show wifi -modi \"wifi:iwdrofimenu\"\n```\nYou can also add it to your global rofi configuration by adding `WiFi:iwdrofimenu` to the `modi` entry in your `~/.config/rofi/config.rasi`:\n```\nconfiguration {\n    /* ... */\n    modi: \"drun,filebrowser,window,wifi:iwdrofimenu\";\n    /* ... */\n}\n```\nTo use it in *rofi*'s combi-mode you can either run it directly with\n```sh\nrofi -show combi -modi combi -combi-modi drun,wifi:\"iwdrofimenu --combi-mode\"\n```\nor you change your *rofi* configuration to something like\n```\nconfiguration {\n    /* ... */\n    modi: \"combi,drun,filebrowser,wifi:iwdrofimenu\"\n    combi-modi: \"drun,run,wifi:iwdrofimenu --combi-mode\"\n    /* ... */\n}\n```\nand simply run\n```sh\nrofi -show combi\n```\nFor more information on how to use *rofi* and it's different modes check the [rofi (1) manpages](https://github.com/davatorium/rofi/blob/next/doc/rofi.1.markdown)\n\n## Configuration\nThe appearance of *rofi* depends on your local settings and will most likely\ndiffer from the images above. `rofi` has many options for styling and\na lot of great themes are out there (for example [those](https://github.com/adi1090x/rofi) are pretty awesome in my oppinion). For more information on customizing your *rofi* setup refer to the [rofi-theme (5) manpages](https://github.com/davatorium/rofi/blob/next/doc/rofi-theme.5.markdown)).\n\nNote that *iwdrofimenu* marks the list elements for active connections as `active` and for known connections as `urgent`, so they can be styled within the rofi configuration easily.\n\nStill, there are some customizations that can be made through a configuration file. You can overwrite *rofi* settings with a custom theme for the script, change every single string displayed, and change the icons.\n\n### Configuration Files\nThe script will look for configurations in the following files in the given order.\n```\n\u003cINSTALLDIR\u003e/iwdrofimenu.conf\n~/.config/rofi/iwdrofimenu.conf\n~/.config/iwdrofimenu/config\n~/.config/iwdrofimenu.conf\n~/.iwdrofimenu.conf\n```\nNone of these files will be created automatically, so choose a location that fits\nyour setup.\n\nTo create a file you can obtain the default configuration filled with every possible setting by running\n```\niwdrofimenu --config\n```\nWrite it to the file of your choice with\n```\niwdrofimenu --config \u003e ~/.config/iwdconfig.conf\n```\n\nIn this file you should remove all the settings you don't want to change, for the case the default configuration changes in future versions (otherwise all the\ndefaults will be overwritten by this file).\n\n### Basic Configuration\n\nThe configuration file is in the *INI* fileformat, consisting of the sections\n`general`, `templates` and `icons`. Here I will only discuss the parts that you are most likely to want to change.\n\n#### WiFI Device\nYou can specify the wifi device to use with the `device` option in the `general` section. For more information how to figure out the name of your wifi device look in the [Installation](#installation) section.\n\n#### Icon Set\nThe standard installation comes with two icon sets to choose. Use `dark` or `light` for the `img_subdir` option, to change it.\n\n#### Overwrite global *rofi* settings\nYou can overwrite global settings by specify a `.rasi` file with the `rofi_theme_file` option. This option is set to `\u003cinstall_dir\u003e/res/style.rasi` by default to overwrite one single *rofi* setting. It is the `tab-stops` property of `element-text` elements to align the values in the connection details dialog of `iwdrofimenu` property.\n\nThis might cause problems if `iwdrofimenu` is used together with other modules, since in this case this setting is overwritten for all other modules too.\nIf so you can set `rofi_theme_file` but leave it empty, so no `.rasi`-file will be\nloaded seperatly from the global *rofi* configuration.\n\n#### Deactivate the Separator\nPer default a separator line is displayed between the control-elements and the network list entries. Set `show_separator` to `False` to deactivate it. (You can also customize the separator with a [Template](#templates))\n\n#### Templates\nYou can change every string value output by *iwdwifimenu* through string templates in the `templates` section of the configuration file. Most of them are simple strings, but in some cases, you can use variables (starting with `$`) which will be replaced. In the default configuration (which you can obtain by calling `iwdrofimenu --config`) all possible variables are used, so you can explore and play around by yourself (most of it should be pretty obvious).\nIn the templates it is possible to use [Pango Markup](https://docs.gtk.org/Pango/pango_markup.html) for changing the font-color, weight, etc differently from the *rofi* theme.\n\n## Bugs\nPlease be aware that this script may contain bugs that I am currently unaware of, as I have no possibilities to thoroughly test it. If you encounter any problems, feel free to open an issue so that I can attempt to resolve them.\n\n## Limitations\nIt's not possibly to connect to hidden networks so far. (I'm even not sure if they show up in the list if they are already known). I never needed this feature and also have no easy possibility to test it. If it's something you really miss, let me know, maybe I find some time and add it.\n\n## Similar projects\nAlthough there are a variety of alternatives that utilize *NetworkManager*, I could find\nonly one that uses *iwd* (and this one I couldn't get running...).\n* *[rofi-wifi-menu](https://github.com/zbaylin/rofi-wifi-menu)*: A rofi wifi menu that uses *networkmanager*\nin the background\n* *[rofi-iwd-menu](https://github.com/TimTinkers/rofi-iwd-menu)*: Another one existing for *iwd*, but I\ncouldn't get it to work, that's why I started this little project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdefname%2Frofi-iwd-wifi-menu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdefname%2Frofi-iwd-wifi-menu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdefname%2Frofi-iwd-wifi-menu/lists"}