From 56619b94a4f5528f450a11b076adce16fb3b4088 Mon Sep 17 00:00:00 2001 From: Mihir Lad Date: Sat, 19 Dec 2020 20:20:36 -0500 Subject: [PATCH] README.md: Replace with info about fork --- README.md | 364 ++++++++++++++++++++++++++++--------------------- dwm-module.png | Bin 0 -> 3407 bytes 2 files changed, 212 insertions(+), 152 deletions(-) create mode 100644 dwm-module.png diff --git a/README.md b/README.md index 378ab8cb..f29a6d79 100644 --- a/README.md +++ b/README.md @@ -1,160 +1,220 @@ -

- Polybar -

+# polybar-dwm-module +![DWM +Module](https://github.com/mihirlad55/polybar-dwm-module/blob/master/dwm-module.png) -

-A fast and easy-to-use tool for creating status bars. -

- -

- - - - - - - - -

- -**Polybar** aims to help users build beautiful and highly customizable status bars -for their desktop environment, without the need of having a black belt in shell scripting. -Here are a few screenshots showing you what it can look like: - -[![sample screenshot](https://i.imgur.com/xvlw9iHt.png)](https://i.imgur.com/xvlw9iH.png) -[![sample screenshot](https://i.imgur.com/cYQOuRrt.png)](https://i.imgur.com/cYQOuRr.png) -[![sample screenshot](https://i.imgur.com/A6spiZZt.png)](https://i.imgur.com/A6spiZZ.png) -[![sample screenshot](https://i.imgur.com/TY5a5r9t.png)](https://i.imgur.com/TY5a5r9.png) - -You can find polybar configs for these example images (and other configs) [here](https://github.com/jaagr/dots/tree/master/.local/etc/themer/themes). - -## Table of Contents - -* [Introduction](#introduction) -* [Getting Help](#getting-help) -* [Contributing](#contributing) -* [Getting started](#getting-started) - * [Installation](#installation) - * [Configuration](#configuration) - * [Running](#running) -* [Community](#community) -* [Contributors](#contributors) -* [License](#license) +**polybar-dwm-module** is a fork of +[polybar](https://github.com/polybar/polybar) which implements a dwm module. -## Introduction +## Requirements +* dwm with the [IPC patch](https://github.com/mihirlad55/dwm-ipc) applied +* [dwmipcpp](https://github.com/mihirlad55/dwmipcpp) C++ client library for + communicating with dwm (included as a submodule). +* [jsoncpp](https://github.com/open-source-parsers/jsoncpp) for polybar and + dwmipcpp (required by module). -The main purpose of **Polybar** is to help users create awesome status bars. -It has built-in functionality to display information about the most commonly used services. -Some of the services included so far: - -- Systray icons -- Window title -- Playback controls and status display for [MPD](https://www.musicpd.org/) using [libmpdclient](https://www.musicpd.org/libs/libmpdclient/) -- [ALSA](https://www.alsa-project.org/main/index.php/Main_Page) and [PulseAudio](https://www.freedesktop.org/wiki/Software/PulseAudio/) volume controls -- Workspace and desktop panel for [bspwm](https://github.com/baskerville/bspwm), [i3](https://github.com/i3/i3), and [dwm](https://dwm.suckless.org) -- Workspace module for [EWMH compliant](https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html#idm140130320786080) window managers -- Keyboard layout and indicator status -- CPU and memory load indicator -- Battery display -- Network connection details -- Backlight level -- Date and time label -- Time-based shell script execution -- Command output tailing -- User-defined menu tree -- Inter-process messaging -- And more... - -[See the wiki for more details](https://github.com/polybar/polybar/wiki). - -## Getting Help - -If you find yourself stuck, have a look at our [Support](SUPPORT.md) page for resources where you can find help. - -## Contributing - -Read our [contributing guidelines](CONTRIBUTING.md) for how to get started with contributing to polybar. - -## Getting started - - - Packaging status - - -Polybar was already packaged for the distros listed below. -If you can't find your distro here, you will have to [build from source](https://github.com/polybar/polybar/wiki/Compiling). - -If you are using **Debian** (unstable or testing), you can install [polybar](https://tracker.debian.org/pkg/polybar) using `sudo apt install polybar`. -If you are using **Debian** (buster/stable), you need to enable [backports](https://wiki.debian.org/Backports) and then install using `sudo apt -t buster-backports install polybar`. - -If you are using **Arch Linux**, you can install the AUR package [polybar-git](https://aur.archlinux.org/packages/polybar-git/) to get the latest version, or -[polybar](https://aur.archlinux.org/packages/polybar/) for the latest stable release. - -If you are using **Void Linux**, you can install [polybar](https://github.com/void-linux/void-packages/blob/master/srcpkgs/polybar/template) using `xbps-install -S polybar`. - -If you are using **NixOS**, polybar is available in both the stable and unstable channels and can be installed with the command `nix-env -iA nixos.polybar`. - -If you are using **Slackware**, polybar is available from the [SlackBuilds](https://slackbuilds.org/repository/14.2/desktop/polybar/) repository. - -If you are using **Source Mage GNU/Linux**, polybar spell is available in test grimoire and can be installed via `cast polybar`. - -If you are using **openSUSE**, polybar is available from [OBS](https://build.opensuse.org/package/show/X11:Utilities/polybar/) repository. Package is available for openSUSE Leap 15.1, openSUSE Leap 15.2 and Tumbleweed. - -If you are using **FreeBSD**, [polybar](https://svnweb.freebsd.org/ports/head/x11/polybar/) can be installed using `pkg install polybar`. Make sure you are using the `latest` package branch. - -If you are using **Gentoo**, both release and git-master versions are available in the [main](https://packages.gentoo.org/packages/x11-misc/polybar) repository. - -If you are using **Fedora**, you can install [polybar](https://src.fedoraproject.org/rpms/polybar) using `sudo dnf install polybar`. - -### Installation - -The [compiling page](https://github.com/polybar/polybar/wiki/Compiling) on the -wiki describes all steps necessary to build and install polybar. - -### Configuration - -Details on how to setup and configure the bar and each module have been moved to [the wiki](https://github.com/polybar/polybar/wiki/Configuration). - -#### Install the example configuration -Run the following inside the build directory: -~~~ sh -$ make userconfig -~~~ -Or you can copy the example config from `/usr/share/doc/polybar/config` or ` /usr/local/share/doc/polybar/config` (depending on your install parameters) - -#### Launch the example bar - ~~~ sh - $ polybar example - ~~~ - -### Running - -[See the wiki for details on how to run polybar](https://github.com/polybar/polybar/wiki). - -## Community -Want to get in touch? - -* Join our Gitter room at [gitter.im/polybar/polybar](https://gitter.im/polybar/polybar) -* We have our own subreddit at [r/polybar](https://www.reddit.com/r/polybar). -* Chat with us in the `#polybar` IRC channel on the `chat.freenode.net` server. - -## Contributors - -### Owner -* Michael Carlberg [**@jaagr**](https://github.com/jaagr/) - -### Maintainers -* [**@NBonaparte**](https://github.com/NBonaparte) -* Chase Geigle [**@skystrife**](https://github.com/skystrife) -* Patrick Ziegler [**@patrick96**](https://github.com/patrick96) - -### Logo Design by -* [**@Tobaloidee**](https://github.com/Tobaloidee) +The [dwm-anybar patch](https://github.com/mihirlad55/dwm-anybar) is optionally +recommended for a better experience. This patch allows dwm to manage polybar and +fixes some weird quirks that you may experience without it. -### [All Contributors](https://github.com/polybar/polybar/graphs/contributors) +## The DWM Module +The dwm module currently supports the following: +- Labels: + * Display dwm tags + - Separator label between tags + * Display the current layout + * Display the currently focused window title (per monitor) + * Display label when focused window is floating +- Click Handlers: + * Tags: + - Left-click tag to view tag + - Right-click tag to toggle view on tag + - Scroll tags to view different tags (with wrapping, reverse scroll, and + empty tag scroll) + * Layout: + - Left-click to set `secondary-layout` (specified in config) + - Right-click to set previous layout + - Scroll to cycle through layouts (with wrapping and reverse scroll) +- Different formatting for different tag states: + * Focused: selected tag on selected monitor + * Unfocused: selected tag on unselected monitor + * Visible: unselected, but occupied tag on any monitor + * Urgent: Tag with window that has the urgent hint set + * Empty: Unselected and unoccupied tags +- The combined power of polybar + + +## How to Install +First, apply all the patches you want on dwm, saving the IPC patch for last. + +Optionally, apply the [dwm-anybar +patch](https://github.com/mihirlad55/dwm-anybar) and make sure your `config.h` +contains the following +``` +static const int showbar = 1; /* 0 means no bar */ +static const int topbar = 1; /* 0 means bottom bar */ +static const int usealtbar = 1; /* 1 means use non-dwm status bar */ +static const char *altbarclass = "Polybar"; /* Alternate bar class name */ +static const char *altbarcmd = "$HOME/bar.sh"; /* Alternate bar launch command */ +``` +If your polybar is to be displayed on the bottom of the monitor, set `topbar` +to `0`. + +Next, apply the [IPC patch](https://github.com/mihirlad55/dwm-ipc). There will +likely be merge conflicts. The IPC patch is mostly additive, so in most conflict +cases, you will be keeping both changes. + +After applying all your patches, make sure you compile and install dwm +``` +$ sudo make install +``` + +Make sure you have `jsoncpp` installed, and any other requirements from +[polybar](https://github.com/polybar/polybar). + +Arch linux users can install the +[`polybar-dwm-module`](https://aur.archlinux.org/packages/polybar-dwm-module/) +package from the AUR. + +Otherwise you can clone, make, and install polybar yourself. Follow the on +screen prompts in the `build.sh` script and enable any additional features you +want. +``` +$ git clone https://github.com/mihirlad55/polybar-dwm-module +$ cd polybar-dwm-module +$ ./build.sh -d +``` + +Configure the bar! You can view `/usr/share/doc/polybar/config` for a sample config that +includes the supported settings for the dwm module. + +**IF YOU APPLIED THE ANYBAR PATCH**, make sure you have +`override-redirect = false` in your polybar config. + +**IF YOU DID NOT APPLY THE ANYBAR PATCH**, make sure you have +`override-redirect = true` in your polybar config. You will have to set the bar +height in your dwm's `config.h` to match polybar's height and make sure +`showbar` is set to `1` in your `config.h`. Also make sure `topbar` is set to +the correct value based on if your polybar is a bottom/top bar. + +## Launching Polybar +There are multiple ways to launch polybar. Whatever way you decide to use, make +sure polybar launches a few seconds after dwm, else dwm's socket will not be +initialized and the module will fail: + +### Anybar Method +The `altbarcmd` variable can be set to the bar launch script. When you apply the +anybar patch, make sure `spawnbar()` occurs in the `setup()` function after +`setupepoll()` and this will ensure that the bar is launched after dwm is ready. +Also make sure that the script checks for running bars before launching more, +else if dwm is restarted, duplicate bars will be launched. + +### Hacky Delay Method +In your `.xsession` script or whatever script launches at startup, add something +like the following: +``` +$(sleep 4s && "$HOME/launch-polybar.sh") & +``` +This will start your polybar script after a 4 second delay which should give dwm +enough time to initialize before polybar tries to connect to dwm. If this +doesn't work, try a longer delay. + +### Autostart Method +Apply the [autostart patch](https://dwm.suckless.org/patches/autostart/). In +your `autostart_blocking.sh`, add your command to launch polybar. + + +## Sample Module Configuration +```ini +... + +modules-left = ... dwm ... + +... + +[module/dwm] +type = internal/dwm +format = +; Path to dwm socket (default: /tmp/dwm.sock) +; socket-path = /tmp/dwm.sock + +; Left-click to view tag, right-click to toggle tag view +enable-tags-click = false +; Scroll to cycle between available tags +enable-tags-scroll = false +; If true and enable-tags-scroll = true, scrolling will view all tags regardless if occupied +tags-scroll-empty = false +; If true and enable-tags-scroll = true, scrolling will cycle through tags backwards +tags-scroll-reverse = false +; If true and enable-tags-scroll = true, wrap active tag when scrolling +tags-scroll-wrap = false +; Left-click to set secondary layout, right-click to switch to previous layout +enable-layout-click = false +; Scroll to cycle between available layouts +enable-layout-scroll = false +; Wrap when scrolling and reaching beginning/end of layouts +layout-scroll-wrap = false +; Reverse scroll direction +layout-scroll-reverse = false + +; If enable-layout-click = true, clicking the layout symbol will switch to this layout +secondary-layout-symbol = [M] + +; Separator in between shown tags +; label-separator = | + +; Title of currently focused window +; Available tokens: +; %title% +label-title = %title% +label-title-padding = 2 +label-title-foreground = ${colors.primary} +label-title-maxlen = 30 + +; Symbol of current layout +; Available tokens: +; %symbol% +label-layout = %symbol% +label-layout-padding = 2 +label-layout-foreground = #000 +label-layout-background = ${colors.primary} + +; Text to show when currently focused window is floating +label-floating = F + +; States: focused, unfocused, visible, urgent, empty +; Available tokens: +; %name% + +; focused = Selected tag on focused monitor +label-focused = %name% +label-focused-background = ${colors.background-alt} +label-focused-underline= ${colors.primary} +label-focused-padding = 2 + +; unfocused = Unselected tag on unselected monitor +label-unfocused = %name% +label-unfocused-padding = 2 + +; visible = Unselected tag, but occupied tag on any monitor +label-visible = %name% +label-visible-background = ${self.label-focused-background} +label-visible-underline = ${self.label-focused-underline} +label-visible-padding = ${self.label-focused-padding} + +; urgent = Unselected tag with window that has urgency hint set +label-urgent = %name% +label-urgent-background = ${colors.alert} +label-urgent-padding = 2 + +; empty = Unselected and unoccupied tag +; This can be set to an empty string to hide empty tags +label-empty = %name% +label-empty-background = ${colors.primary} +label-empty-padding = 2 +``` ## License - -Polybar is licensed under the MIT license. [See LICENSE for more information](https://github.com/polybar/polybar/blob/master/LICENSE). +Polybar is licensed under the MIT license. [See LICENSE for more +information](https://github.com/polybar/polybar/blob/master/LICENSE). diff --git a/dwm-module.png b/dwm-module.png new file mode 100644 index 0000000000000000000000000000000000000000..4177f100fc8d4a7900fafc23109af8ba3a532fbc GIT binary patch literal 3407 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 m`oq{q=Wz60^8ZJOCHiFZ