{"id":15024136,"url":"https://github.com/mousebyte/awesomex","last_synced_at":"2026-02-17T03:38:06.404Z","repository":{"id":76430227,"uuid":"585238813","full_name":"mousebyte/awesomex","owner":"mousebyte","description":"A drop-in awful extension module for AwesomeWM providing new features and quality of life improvements.","archived":false,"fork":false,"pushed_at":"2023-01-06T19:47:48.000Z","size":23,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-10T05:02:31.320Z","etag":null,"topics":["awesomewm","awesomewm-widgets","lua","window-manager"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mousebyte.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-01-04T17:03:50.000Z","updated_at":"2023-08-03T17:56:55.000Z","dependencies_parsed_at":"2024-01-13T01:26:52.810Z","dependency_job_id":"10a42371-de22-49b0-af2e-df08bf90edae","html_url":"https://github.com/mousebyte/awesomex","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mousebyte/awesomex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mousebyte%2Fawesomex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mousebyte%2Fawesomex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mousebyte%2Fawesomex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mousebyte%2Fawesomex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mousebyte","download_url":"https://codeload.github.com/mousebyte/awesomex/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mousebyte%2Fawesomex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29532437,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T03:01:11.216Z","status":"ssl_error","status_checked_at":"2026-02-17T03:00:31.803Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["awesomewm","awesomewm-widgets","lua","window-manager"],"created_at":"2024-09-24T19:59:50.771Z","updated_at":"2026-02-17T03:38:06.388Z","avatar_url":"https://github.com/mousebyte.png","language":"Lua","readme":"# AwesomeX\nAwesomeX is a drop-in extension module for `awful` providing new features, widgets, and quality of life improvements.\n\nThis project is in the early stages of development and breaking changes are possible down the line.\n\n## Getting Started\nTo install AwesomeX, clone the repository into your awesome configuration directory.\n```bash\ncd ~/.config/awesome\ngit clone https://github.com/mousebyte/awesomex\n```\nThen, in your runtime configuration, replace `awful` with `awesomex`.\n```lua\nlocal awful = require(\"awesomex\")\n```\n\nThat's it! Restart awesome to make sure everything is working properly. Any references to unmodified components will be\nautomatically forwarded to the stock `awful` module using the `__index` metamethod.\n\n## Extended Modules\nThe behavior of some modules has been extended.\n\n### Screen\nThe [`screen`](https://awesomewm.org/doc/api/classes/screen.html) module has been extended with a signal emitted when the\nfocused screen changes. The signal will fire in the following situations:\n* When the focused screen changes via a call to [`awful.screen.focus`](https://awesomewm.org/doc/api/classes/screen.html#awful.screen.focus),\n  [`awful.screen.focus_bydirection`](https://awesomewm.org/doc/api/classes/screen.html#awful.screen.focus_bydirection), or\n  [`awful.screen.focus_relative`](https://awesomewm.org/doc/api/classes/screen.html#awful.screen.focus_relative).\n* When a client on a different screen emits the [`focus`](https://awesomewm.org/doc/api/classes/client.html#client.focus) signal.\n* When the focused client's [`screen`](https://awesomewm.org/doc/api/classes/client.html#client.screen) property changes.\n\nYou can connect to the signal per-screen:\n```lua\nlocal scr = screen[1]\nscr:connect_signal(\"focused\", function(s) do_stuff(s) end)\n```\n\nor globally across all screens:\n```lua\nscreen.connect_signal(\"focused\", function(s) do_stuff(s) end)\n```\n\n## Widgets\nAwesomeX provides several new widgets, located in `awful.widget` as per usual.\n\n### Focus Indicator\nThe focus indicator widget flashes over a screen's wibar (or any other widget) when that screen gains focus.\nIt uses the new focus signal internally. Setup is simple and should work out of the box. assuming you have your\nwibars stored on your `screen` objects:\n```lua\nfor s in screen do\n    s.focus_indicator = awful.widget.focus_indicator { wibar = s.mywibar }\nend\n```\n\nThe background color of the widget defaults to `beautiful.bg_urgent`, this can be overridden with the `bg` argument.\nI recommend setting your compositor to animate opacity changes for the best effect.\n\n### Fuzzy Search Dialog\nThe fuzzy select widget provides a customizable fuzzy search dialog supporting custom data sources, filter and sorting functions,\nand list-item generation. Here's an example of how to create a dialog that allows you to select and focus any client.\n```lua\nlocal client_jumper = awful.widget.fuzzy_select { \n    title = 'Focus Client',\n    --function to return a table of items\n    source = client.get\n    --function to filter items, should return true if filter matches item v\n    filter = function(filter, v)\n        return awful.fzy.has_match(filter, v.name)\n    end,\n    --function to sort items, should return true if item a goes before item b\n    sort = function(filter, a, b)\n        return awful.fzy.score(filter, a.name) \u003e awful.fzy.score(filter, b.name)\n    end,\n    --function to create a widget representing item v\n    item = function(v)\n        return wibox.widget {\n            markup = '\u003cspan size=\"large\"\u003e'..gears.string.xml_escape(v.name)..'\u003c/span\u003e',\n            widget = wibox.widget.textbox\n        }\n    end,\n    --table of additional keybindings for the widget's keygrabber. self.fuzzy is a reference\n    --to client_jumper.\n    keybindings = {\n        {{'Control'}, 'j', function(self) self.fuzzy:select_next() end },\n        {{'Control'}, 'k', function(self) self.fuzzy:select_previous() end },\n        {{}, 'Return', function(self)\n            self.fuzzy.selected_item.value:jump_to(false)\n            self:stop()\n        end}\n    }\n}\n\n-- Run the widget:\nclient_jumper.screen = awful.screen.focused()\nclient_jumper:run()\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmousebyte%2Fawesomex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmousebyte%2Fawesomex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmousebyte%2Fawesomex/lists"}