• Stars
    star
    179
  • Rank 206,810 (Top 5 %)
  • Language
    TypeScript
  • License
    Apache License 2.0
  • Created almost 4 years ago
  • Updated 19 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

✨ A shiny and hackable application dock

πŸš€ Polydock

Polydock is a fast and hackable application dock for your desktop.

Polydock running on top of Polybar β†— Polydock (in the middle), running on top of Polybar

❓ Why another dock

I recently started using 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.

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)

✨ Features

  • highly customizable (see settings.ini)

  • themeable with Gtk+ CSS (see themes/default.css)

  • window grouping based on any combination of (example for a Google Chrome web app):

    • window class: Google Chrome
    • instance: mail.google.com
    • title: Inbox (123)
    • visibility: useful if you want to separate hidden/visible windows in different groups
  • limit the dock to windows on the current workspace or all workspaces

  • show only visible windows, hidden windows, or both

  • updates icon when it changes in the application (great for google chrome web application windows)

  • rules to define custom icons

  • exclude certain window classes / instances

  • clicking on a group cycles through the windows in that group (configurable)

  • right click to get a popup with all open windows in that group (configurable)

  • supports custom wm hide and unhide commands

    # Example for bspwm:
    [commands]
    unhide = bspc node {window} -g hidden=off -f
    hide = bspc node {window} -g hidden=on -f

πŸ“¦ Installation

Make sure you have the following libraries on your system:

  • gtk3
  • gjs
  • libwnck3
  • gdk-pixbuf2

Grab the latest release and unzip it somewhere on your system.

You can start using polydock right away from the bin folder:

$ bin/polydock

or, copy the binary and config files to your local directories.

For example:

$ cp bin/polydock ~/.local/bin

$ cp -rv config ~/.config/polydock

βš™ Configuration

settings.ini

[appearance]
#One of top, bottom, left, right
position=top
#One of start, center, end
alignment=center
#Additional offsets to further fine-tune the position of the dock
offsetX=0
offsetY=0
iconSize=40
#Name of the theme file, or 'default'.
#See config/themes/default.css
theme=default
#An gtk icon theme name, or 'default'
iconTheme=default

[behavior]
#Specify a list of keys to group windows on: class;instance;title;visibility
groupBy=instance;visibility;
activeWorkspaceOnly=false
showHidden=true
showVisible=true
#Action on click. One of: show, hide, toggle, cycle, toggle-cycle
click=toggle-cycle
menu-click=show
#Exclude windows whose class or instance contains one of these values
exclude=scratchpad;
#Automatically hides Polydock if another window overlaps
autoHide=true

[commands]
hide=bspc node {window} -g hidden=on -f
unhide=bspc node {window} -g hidden=off -f

#Rules for custom icons matching the class::instance of windows
#icon-name=string to be part of class::instance
[icons]
google-agenda=calendar.google.com
gmail=mail.google.com
keep=keep.google.com
messengerfordesktop=www.messenger.com
whatsapp=whatsapp

Themes

Polydock can be fully themed using Gtk+ CSS.

To create a new theme:

# Copy the default theme
$ cp config/themes/default.css ~/.config/polydock/themes/awesome.css

Then hack away and set your custom theme ~/.config/polydock/settings.ini

[appearance]
theme=awesome

πŸ”₯ Building from source

Polydock is written in Typescript and needs some nodejs packages to transform the source into code that works with GJS

Installing and building has been tested with the package manager pnpm, but should also work with npm or yarn

$ cd polydock

# Install dependencies
$ pnpm i

# Build bundle
$ pnpm run build

# Run Polydock!
$ dist/bin/polydock

πŸ‘‹ Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

βš– License

Apache 2.0

More Repositories

1

lazy.nvim

πŸ’€ A modern plugin manager for Neovim
Lua
11,573
star
2

tokyonight.nvim

πŸ™ A clean, dark Neovim theme written in Lua, with support for lsp, treesitter and lots of plugins. Includes additional themes for Kitty, Alacritty, iTerm and Fish.
Lua
5,173
star
3

trouble.nvim

🚦 A pretty diagnostics, references, telescope results, quickfix and location list to help you solve all the trouble your code is causing.
Lua
4,726
star
4

which-key.nvim

πŸ’₯ Create key bindings that stick. WhichKey is a lua plugin for Neovim 0.5 that displays a popup with possible keybindings of the command you started typing.
Lua
4,441
star
5

noice.nvim

πŸ’₯ Highly experimental plugin that completely replaces the UI for messages, cmdline and the popupmenu.
Lua
3,677
star
6

todo-comments.nvim

βœ… Highlight, list and search todo comments in your projects
Lua
2,711
star
7

flash.nvim

Navigate your code with search labels, enhanced character motions and Treesitter integration
Lua
1,965
star
8

neodev.nvim

πŸ’» Neovim setup for init.lua and plugin development with full signature help, docs and completion for the nvim lua API.
Lua
1,935
star
9

zen-mode.nvim

🧘 Distraction-free coding for Neovim
Lua
1,442
star
10

ultra-runner

πŸƒβ›° Ultra fast monorepo script runner and build tool
TypeScript
1,188
star
11

twilight.nvim

πŸŒ… Twilight is a Lua plugin for Neovim 0.5 that dims inactive portions of the code you're editing using TreeSitter.
Lua
1,130
star
12

esbuild-runner

⚑️ Super-fast on-the-fly transpilation of modern JS, TypeScript and JSX using esbuild
TypeScript
701
star
13

dot

β˜•οΈ My Dot Files
Lua
670
star
14

edgy.nvim

Easily create and manage predefined window layouts, bringing a new edge to your workflow
Lua
665
star
15

neoconf.nvim

πŸ’Ό Neovim plugin to manage global and project-local settings
Lua
605
star
16

persistence.nvim

πŸ’Ύ Simple session management for Neovim
Lua
533
star
17

lsp-colors.nvim

🌈 Plugin that creates missing LSP diagnostics highlight groups for color schemes that don't yet support the Neovim 0.5 builtin LSP client.
Lua
434
star
18

devmoji

πŸ€– πŸš€ ✨ Emojify your conventional commits with Devmoji
TypeScript
286
star
19

styler.nvim

Simple Neovim plugin to set a different colorscheme per filetype.
Lua
247
star
20

drop.nvim

🍁 Fun little plugin that can be used as a screensaver and on your dashboard
Lua
190
star
21

paint.nvim

Easily add additional highlights to your buffers
Lua
152
star
22

vscode-monorepo-workspace

πŸ“¦βœ¨Manage monorepos with multi-root workspaces. Supports Lerna, Yarn, Pnpm, Rushjs and recursive package directories.
TypeScript
138
star
23

splashcii

Simple cli tool that shows a random ascii art from https://www.asciiur.com/
TypeScript
35
star
24

semantic-release-commit-filter

πŸ“¦πŸ•΅οΈβ€β™€οΈ Semantic-release plugin that filters git commits based on the current working directory
JavaScript
25
star
25

zmk-config

Folke's ZMK config
C++
21
star
26

lovelace-styler

Custom styling for lovelace cards
TypeScript
18
star
27

folke

7
star
28

phpintel

Accurate autocompletion / code checking / .... framework for PHP
PHP
3
star
29

adventofcode

πŸŽ… πŸŽ„ β›„ ✨ Solutions for Advent of Code 2020 in TypeScript
TypeScript
2
star
30

chess

C#
2
star
31

adventofcode2019

Advent of Code 2019 in TypeScript
TypeScript
2
star
32

telescope.nvim

Find, Filter, Preview, Pick. All lua, all the time.
Lua
1
star