{"id":19205262,"url":"https://github.com/folke/polydock","last_synced_at":"2025-04-04T11:15:13.933Z","repository":{"id":37034653,"uuid":"268659493","full_name":"folke/polydock","owner":"folke","description":"✨ A shiny and hackable application dock","archived":false,"fork":false,"pushed_at":"2025-03-25T10:58:42.000Z","size":3394,"stargazers_count":206,"open_issues_count":20,"forks_count":8,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-28T10:09:21.233Z","etag":null,"topics":["bspwm","dock","i3wm","linux","openbox","polybar","window-manager","xmonad"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/folke.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.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}},"created_at":"2020-06-02T00:03:07.000Z","updated_at":"2025-03-28T02:51:46.000Z","dependencies_parsed_at":"2024-02-04T07:22:52.531Z","dependency_job_id":"5f16ff07-7883-49e9-b01e-d19c68b61459","html_url":"https://github.com/folke/polydock","commit_stats":{"total_commits":96,"total_committers":4,"mean_commits":24.0,"dds":0.15625,"last_synced_commit":"d635052a9a46438cd0413db67590cce0e8c437ab"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folke%2Fpolydock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folke%2Fpolydock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folke%2Fpolydock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/folke%2Fpolydock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/folke","download_url":"https://codeload.github.com/folke/polydock/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247166168,"owners_count":20894654,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["bspwm","dock","i3wm","linux","openbox","polybar","window-manager","xmonad"],"created_at":"2024-11-09T13:12:03.301Z","updated_at":"2025-04-04T11:15:13.910Z","avatar_url":"https://github.com/folke.png","language":"TypeScript","readme":"# 🚀 Polydock\n\n**Polydock** is a fast and hackable application dock for your desktop.\n\n![Polydock running on top of Polybar](screenshot.png)\n\u003csmall\u003e↗ **Polydock** (in the middle), running on top of **Polybar**\u003c/small\u003e\n\n## ❓ Why another dock\n\nI recently started using [bspwm](https://github.com/baskerville/bspwm) as my main window manager. Since **bspwm** is a tiling wm, most navigation is done using the keyboard. The only thing I really missed was the ability to quickly glance at a list of open, hidden, and grouped windows.\n\n[Polybar](https://github.com/polybar/polybar) is a beautiful status bar, but unfortunately lacks the ability to show a window list. Since I couldn't find a good looking, customizable dock, I decided to build one myself, that can easily be styled to blend into any existing status bar. *(I'm also terrible coming up with great project names)*\n\n## ✨ Features\n\n* highly customizable (see [settings.ini](https://github.com/folke/polydock/blob/master/config/settings.ini))\n* themeable with [Gtk+ CSS](https://developer.gnome.org/gtk3/stable/chap-css-overview.html) (see  [themes/default.css](https://github.com/folke/polydock/blob/master/config/themes/default.ini))\n* window grouping based on any combination of (example for a Google Chrome web app):\n  * **window class**: `Google Chrome`\n  * **instance**: `mail.google.com`\n  * **title**: `Inbox (123)`\n  * **visibility**: useful if you want to separate hidden/visible windows in different groups\n* limit the dock to windows on the current workspace or all workspaces\n* show only visible windows, hidden windows, or both\n* updates icon when it changes in the application (great for google chrome web application windows)\n* rules to define custom icons\n* exclude certain window classes / instances\n* clicking on a group cycles through the windows in that group (configurable)\n* right click to get a popup with all open windows in that group (configurable)\n* supports custom wm **hide** and **unhide** commands\n\n  ```ini\n  # Example for bspwm:\n  [commands]\n  unhide = bspc node {window} -g hidden=off -f\n  hide = bspc node {window} -g hidden=on -f\n  ```\n\n## 📦 Installation\n\nMake sure you have the following libraries on your system:\n\n* `gtk3`\n* `gjs`\n* `libwnck3`\n* `gdk-pixbuf2`\n\nGrab the [latest release](https://github.com/folke/polydock/releases) and unzip it somewhere on your system.\n\nYou can start using `polydock` right away from the bin folder:\n\n```shell\n$ bin/polydock\n```\n\nor, copy the binary and config files to your local directories.\n\nFor example:\n\n```shell\n$ cp bin/polydock ~/.local/bin\n\n$ cp -rv config ~/.config/polydock\n```\n\n## ⚙ Configuration\n\n### `settings.ini`\n\n```ini\n[appearance]\n#One of top, bottom, left, right\nposition=top\n#One of start, center, end\nalignment=center\n#Additional offsets to further fine-tune the position of the dock\noffsetX=0\noffsetY=0\niconSize=40\n#Name of the theme file, or 'default'.\n#See config/themes/default.css\ntheme=default\n#An gtk icon theme name, or 'default'\niconTheme=default\n\n[behavior]\n#Specify a list of keys to group windows on: class;instance;title;visibility\ngroupBy=instance;visibility;\nactiveWorkspaceOnly=false\nshowHidden=true\nshowVisible=true\n#Action on click. One of: show, hide, toggle, cycle, toggle-cycle\nclick=toggle-cycle\nmenu-click=show\n#Exclude windows whose class or instance contains one of these values\nexclude=scratchpad;\n#Automatically hides Polydock if another window overlaps\nautoHide=true\n\n[commands]\nhide=bspc node {window} -g hidden=on -f\nunhide=bspc node {window} -g hidden=off -f\n\n#Rules for custom icons matching the class::instance of windows\n#icon-name=string to be part of class::instance\n[icons]\ngoogle-agenda=calendar.google.com\ngmail=mail.google.com\nkeep=keep.google.com\nmessengerfordesktop=www.messenger.com\nwhatsapp=whatsapp\n```\n\n### Themes\n\n**Polydock** can be fully themed using Gtk+ CSS.\n\nTo create a new theme:\n\n```shell\n# Copy the default theme\n$ cp config/themes/default.css ~/.config/polydock/themes/awesome.css\n```\n\nThen hack away and set your custom theme `~/.config/polydock/settings.ini`\n\n```ini\n[appearance]\ntheme=awesome\n```\n\n## 🔥 Building from source\n\n**Polydock** is written in Typescript and needs some nodejs packages to transform the source into code that works with [GJS](https://gitlab.gnome.org/GNOME/gjs/-/blob/master/doc/Home.md)\n\nInstalling and building has been tested with the package manager **pnpm**, but should also work with **npm** or **yarn**\n\n```shell\n$ cd polydock\n\n# Install dependencies\n$ pnpm i\n\n# Build bundle\n$ pnpm run build\n\n# Run Polydock!\n$ dist/bin/polydock\n```\n\n## 👋 Contributing\n\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\n\n## ⚖ License\n\n[Apache 2.0](https://github.com/folke/polydock/blob/master/LICENSE)\n\n\u003c!-- markdownlint-disable-file MD014 MD033 --\u003e\n","funding_links":[],"categories":["Packages"],"sub_categories":["Bars, Panels, and Widgets"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffolke%2Fpolydock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffolke%2Fpolydock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffolke%2Fpolydock/lists"}