• Stars
    star
    197
  • Rank 197,722 (Top 4 %)
  • Language
    TypeScript
  • License
    Apache License 2.0
  • Created over 4 years ago
  • Updated about 1 month 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
14,509
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
6,321
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
5,507
star
4

which-key.nvim

๐Ÿ’ฅ Create key bindings that stick. WhichKey helps you remember your Neovim keymaps, by showing available keybindings in a popup as you type.
Lua
5,310
star
5

noice.nvim

๐Ÿ’ฅ Highly experimental plugin that completely replaces the UI for messages, cmdline and the popupmenu.
Lua
4,350
star
6

todo-comments.nvim

โœ… Highlight, list and search todo comments in your projects
Lua
3,194
star
7

flash.nvim

Navigate your code with search labels, enhanced character motions and Treesitter integration
Lua
2,509
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
2,018
star
9

zen-mode.nvim

๐Ÿง˜ Distraction-free coding for Neovim
Lua
1,708
star
10

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,280
star
11

ultra-runner

๐Ÿƒโ›ฐ Ultra fast monorepo script runner and build tool
TypeScript
1,202
star
12

dot

โ˜•๏ธ My Dot Files
TypeScript
868
star
13

edgy.nvim

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

neoconf.nvim

๐Ÿ’ผ Neovim plugin to manage global and project-local settings
Lua
722
star
15

esbuild-runner

โšก๏ธ Super-fast on-the-fly transpilation of modern JS, TypeScript and JSX using esbuild
TypeScript
710
star
16

lazydev.nvim

Faster LuaLS setup for Neovim
Lua
675
star
17

persistence.nvim

๐Ÿ’พ Simple session management for Neovim
Lua
662
star
18

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
438
star
19

ts-comments.nvim

Tiny plugin to enhance Neovim's native comments
Lua
335
star
20

devmoji

๐Ÿค– ๐Ÿš€ โœจ Emojify your conventional commits with Devmoji
TypeScript
335
star
21

styler.nvim

Simple Neovim plugin to set a different colorscheme per filetype.
Lua
283
star
22

drop.nvim

๐Ÿ Fun little plugin that can be used as a screensaver and on your dashboard
Lua
280
star
23

paint.nvim

Easily add additional highlights to your buffers
Lua
166
star
24

vscode-monorepo-workspace

๐Ÿ“ฆโœจManage monorepos with multi-root workspaces. Supports Lerna, Yarn, Pnpm, Rushjs and recursive package directories.
TypeScript
145
star
25

splashcii

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

zmk-config

Folke's ZMK config
C++
29
star
27

semantic-release-commit-filter

๐Ÿ“ฆ๐Ÿ•ต๏ธโ€โ™€๏ธ Semantic-release plugin that filters git commits based on the current working directory
JavaScript
28
star
28

lovelace-styler

Custom styling for lovelace cards
TypeScript
18
star
29

folke

13
star
30

github

Lua
13
star
31

chess

C#
4
star
32

phpintel

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

adventofcode

๐ŸŽ… ๐ŸŽ„ โ›„ โœจ Solutions for Advent of Code 2020 in TypeScript
TypeScript
2
star
34

adventofcode2019

Advent of Code 2019 in TypeScript
TypeScript
2
star