diff --git a/User-contributed-modules.md b/User-contributed-modules.md index eabedeb..422694e 100644 --- a/User-contributed-modules.md +++ b/User-contributed-modules.md @@ -1,563 +1,8 @@ -## Attention :) +We have started to maintain a repository for scripts contributed by the community: [polybar-scripts](https://github.com/x70b1/polybar-scripts). -We have started to maintain a repository for user contributed scripts: [polybar-scripts](https://github.com/x70b1/polybar-scripts) +This means that everything written in Shell, Python or Perl is collected there. Look over there! -The scripts on this page will be copied one by one. If you want to help or add a new script, send a pull request. -*** - - -This is a list of modules written by polybar users. They can be added to the bar using a [`custom/script`](https://github.com/jaagr/polybar/wiki/Module:-script) module. - -**Disclaimer:** These scripts are not tested by the polybar developers, use them at your own risk. - -# Contents -- [Music Player - Basic track info (MPRIS)](#music-player---basic-track-info-mpris) -- [Qmmp - info & control](#qmmp---info--control) -- [Pomodoro](#pomodoro-timer) -- [Trash](#trash) -- [pulseaudio volume](#pulseaudio-volume) -- [moc - info & control](#moc---info--control) -- [cmus](#cmus) -- [mpv](#mpv) ----------------------------------------- - -# Music Player - Basic track info (MPRIS) -![mpris](http://i.imgur.com/3W0zAtq.png) - -## Dependencies -* [aur: ttf-font-awesome](https://aur.archlinux.org/packages/ttf-font-awesome/) -* [playerctl](https://github.com/acrisci/playerctl) - -## Setup -* Create `~/.config/polybar/mpris.sh` script -```bash -#!/bin/bash - -# Specifying the icon(s) in the script -# This allows us to change its appearance conditionally -icon="" - -player_status=$(playerctl status 2> /dev/null) -if [[ $? -eq 0 ]]; then - metadata="$(playerctl metadata artist) - $(playerctl metadata title)" -fi - -# Foreground color formatting tags are optional -if [[ $player_status = "Playing" ]]; then - echo "%{F#D08770}$icon $metadata" # Orange when playing -elif [[ $player_status = "Paused" ]]; then - echo "%{F#65737E}$icon $metadata" # Greyed out info when paused -else - echo "%{F#65737E}$icon" # Greyed out icon when stopped -fi -``` - -## Module -```ini -[module/music] -type = custom/script -interval = 2 - -label = %output:0:45:...% -exec = ~/.config/polybar/mpris.sh -click-left = playerctl previous -click-middle = playerctl play-pause -click-right = playerctl next -``` - ----------------------------------------- - -# qmmp - info & control -![qmmp](http://i.imgur.com/KBfpCYT.png) - -## Setup -* Create `~/.config/polybar/qmmp.sh` script -```bash -#!/bin/bash -status=`qmmp --nowplaying '%p - %t'` -if [[ $status == "-" ]] -then - echo "Stopped" -else - echo "$status" -fi -``` - -## Module -```ini -[module/qmmp] -type = custom/script -exec = ~/.config/polybar/qmmp.sh -exec-if = pgrep -x qmmp -click-left = qmmp -t -click-right = qmmp --next -interval = 5 -``` - ----------------------------------------- - -# Pomodoro timer -![pomodoro_running](https://i.imgur.com/Ruyo7ZL.png) - -## Dependencies -* [aur:pymodoro-git](https://aur.archlinux.org/packages/pymodoro-git/) -* [aur:nerd-fonts-complete](https://aur.archlinux.org/packages/nerd-fonts-complete/) Optional to get nice looking glyphs - -## Setup -* Modify the following module to your needs, the command line parameters for the exec line can be found in pymodoro repo -* Change the icons to your needs (the commented exec uses the pomicons glyphs as in the Nerd fonts collection) - -## Module -```ini -[module/pomodoro] -type = custom/script -; Use pomodoro glyphs in Nerd fonts -; exec = pymodoro --break-prefix " " --pomodoro-prefix " " --pomodoro  --empty  --break  --length 5 -; Use default symbols -exec = pymodoro --length 5 -label = %output% -tail = true -interval = 0 -; Start or reset the timer -click-left = if [ -e ~/.pomodoro_session ]; then rm ~/.pomodoro_session; else echo "25 5" > ~/.pomodoro_session; fi -; Increase pomodoro time -click-right = echo "$((`cut .pomodoro_session -d ' ' -f 1`+5)) 5" > .pomodoro_session -; Reduce pomodoro time -click-middle = echo "$((`cut .pomodoro_session -d ' ' -f 1`-5)) 5" > .pomodoro_session -``` -## Usage -* Left click starts or stops/resets the timer -* Right click increases the pomodoro time by 5 minutes -* Middle click decreases the pomodoro time by 5 minutes - ----------------------------------------- - -# Trash -![trash](http://i.imgur.com/meMb27p.png) - -## Dependencies -* Sound event "trash-empty.oga" (if want) -* [aur: ttf-font-awesome](https://aur.archlinux.org/packages/ttf-font-awesome/) - -## Setup -* Create `~/.config/polybar/trash` script -```bash -#!/bin/bash - -TRASH_DIRECTORY="${BLOCK_INSTANCE}" - -if [[ "${TRASH_DIRECTORY}" = "" ]]; then - TRASH_DIRECTORY="${XDG_DATA_HOME:-${HOME}/.local/share}/Trash" -fi - -# Left click -if [[ "${BLOCK_BUTTON}" -eq 1 ]]; then - xdg-open "${TRASH_DIRECTORY}/files" -# Right click -elif [[ "${BLOCK_BUTTON}" -eq 3 ]]; then - # Delete all files permanently (unlink them) - rm -r "${TRASH_DIRECTORY}/files" - rm -r "${TRASH_DIRECTORY}/info" - exec paplay ~/.sounds/freedesktop/stereo/trash-empty.oga - # Create new directory - mkdir "${TRASH_DIRECTORY}/files" - mkdir "${TRASH_DIRECTORY}/info" -fi - -TRASH_COUNT=$(ls -U -1 "${TRASH_DIRECTORY}/files" | wc -l) - -URGENT_VALUE=30 - -echo "${TRASH_COUNT}" -echo "${TRASH_COUNT}" -echo "" - -if [[ "${TRASH_COUNT}" -ge "${URGENT_VALUE}" ]]; then - exit 31 -fi -``` - -## Module -```ini -[module/trash] -interval = 1 -type = custom/script -exec = ~/.config/polybar/trash -format-prefix = " " -click-right = rm -rf ~/.local/share/Trash/files/* ;exec paplay ~/.sounds/freedesktop/stereo/trash-empty.oga -click-left = pcmanfm ~/.local/share/Trash/files -``` - -## How it works -* Click-left open trash -* Click-right clean the trash - ----------------------------------------- - - -# pulseaudio volume - -## Dependencies -* extra/pulseaudio -* extra/libpulse -* optional: extra/pavucontrol - -## Setup -* Create `~/.config/polybar/pavolume.sh` script (slightly changed work of [Chris Frye](https://customlinux.blogspot.ru/2013/02/pavolumesh-control-active-sink-volume.html)) -```bash -#!/usr/bin/env bash - -# finds the active sink for pulse audio and increments the volume. useful when you have multiple audio outputs and have a key bound to vol-up and down - -osd='no' -inc='2' -capvol='no' -maxvol='200' -autosync='yes' - -# Muted status -# yes: muted -# no : not muted -curStatus="no" -active_sink="" -limit=$((100 - inc)) -maxlimit=$((maxvol - inc)) - -reloadSink() { - active_sink=$(pacmd list-sinks | awk '/* index:/{print $3}') -} - -function volUp { - - getCurVol - - if [ "$capvol" = 'yes' ] - then - if [ "$curVol" -le 100 ] && [ "$curVol" -ge "$limit" ] - then - pactl set-sink-volume "$active_sink" -- 100% - elif [ "$curVol" -lt "$limit" ] - then - pactl set-sink-volume "$active_sink" -- "+$inc%" - fi - elif [ "$curVol" -le "$maxvol" ] && [ "$curVol" -ge "$maxlimit" ] - then - pactl set-sink-volume "$active_sink" "$maxvol%" - elif [ "$curVol" -lt "$maxlimit" ] - then - pactl set-sink-volume "$active_sink" "+$inc%" - fi - - getCurVol - - if [ ${osd} = 'yes' ] - then - qdbus org.kde.kded /modules/kosd showVolume "$curVol" 0 - fi - - if [ ${autosync} = 'yes' ] - then - volSync - fi -} - -function volDown { - - pactl set-sink-volume "$active_sink" "-$inc%" - getCurVol - - if [ ${osd} = 'yes' ] - then - qdbus org.kde.kded /modules/kosd showVolume "$curVol" 0 - fi - - if [ ${autosync} = 'yes' ] - then - volSync - fi - -} - -function getSinkInputs { - input_array=$(pacmd list-sink-inputs | grep -B 4 "sink: $1 " | awk '/index:/{print $2}') -} - -function volSync { - getSinkInputs "$active_sink" - getCurVol - - for each in $input_array - do - pactl set-sink-input-volume "$each" "$curVol%" - done -} - -function getCurVol { - curVol=$(pacmd list-sinks | grep -A 15 "index: $active_sink$" | grep 'volume:' | grep -E -v 'base volume:' | awk -F : '{print $3}' | grep -o -P '.{0,3}%'| sed s/.$// | tr -d ' ') -} - -function volMute { - case "$1" in - mute) - pactl set-sink-mute "$active_sink" 1 - curVol=0 - status=1 - ;; - unmute) - pactl set-sink-mute "$active_sink" 0 - getCurVol - status=0 - ;; - esac - - if [ ${osd} = 'yes' ] - then - qdbus org.kde.kded /modules/kosd showVolume ${curVol} ${status} - fi - -} - -function volMuteStatus { - curStatus=$(pacmd list-sinks | grep -A 15 "index: $active_sink$" | awk '/muted/{ print $2}') -} - -# Prints output for bar -# Listens for events for fast update speed -function listen { - firstrun=0 - - pactl subscribe 2>/dev/null | { - while true; do - { - # If this is the first time just continue - # and print the current state - # Otherwise wait for events - # This is to prevent the module being empty until - # an event occurs - if [ $firstrun -eq 0 ] - then - firstrun=1 - else - read -r event || break - if ! echo "$event" | grep -e "on card" -e "on sink" - then - # Avoid double events - continue - fi - fi - } &>/dev/null - output - done - } -} - -function output() { - reloadSink - getCurVol - volMuteStatus - if [ "${curStatus}" = 'yes' ] - then - echo " $curVol%" - else - echo " $curVol%" - fi -} #}}} - -reloadSink -case "$1" in - --up) - volUp - ;; - --down) - volDown - ;; - --togmute) - volMuteStatus - if [ "$curStatus" = 'yes' ] - then - volMute unmute - else - volMute mute - fi - ;; - --mute) - volMute mute - ;; - --unmute) - volMute unmute - ;; - --sync) - volSync - ;; - --listen) - # Listen for changes and immediately create new output for the bar - # This is faster than having the script on an interval - listen - ;; - *) - # By default print output for bar - output - ;; -esac -``` - -## Module -```ini -[module/pavolume] -type = custom/script -interval = 2 -label = %output% -exec = ~/.config/polybar/pavolume.sh -exec-if = pacmd list-sinks | grep -q available -click-right = exec pavucontrol -click-left = ~/.config/polybar/pavolume.sh --togmute -scroll-up = ~/.config/polybar/pavolume.sh --up -scroll-down = ~/.config/polybar/pavolume.sh --down -``` - -Alternatively, if you want to use the `--listen` argument, you have to tail the output: -```ini -[module/pavolume] -type = custom/script -tail = true -label = %output% -exec = ~/.config/polybar/pavolume.sh --listen -click-right = exec pavucontrol -click-left = ~/.config/polybar/pavolume.sh --togmute -scroll-up = ~/.config/polybar/pavolume.sh --up -scroll-down = ~/.config/polybar/pavolume.sh --down -``` - ----------------------------------------- - -# moc - info & control -![mocp](https://i.imgur.com/cIcVcxy.png) - -## Setup -* Create `~/.config/polybar/mocp` script -```python -#!/usr/bin/python - -import subprocess - -song = stdoutdata = subprocess.getoutput("mocp -Q %song") -album = stdoutdata = subprocess.getoutput("mocp -Q %album") -artist = stdoutdata = subprocess.getoutput("mocp -Q %artist") -print(song + " by " + artist + " on " + album) - -``` - -## Module -```ini -[module/mocp] -type = custom/script -interval = 1 -format =