From fd87ab221af05b7192e54304483930b78a811834 Mon Sep 17 00:00:00 2001 From: NeodarZ Date: Sat, 29 Jul 2017 20:27:57 +0200 Subject: Edit i3pystatus conf file --- i3pystatus/.config/i3pystatus/conf.py | 170 +++++++++++++++++++++ i3pystatus/.config/i3pystatus/get_volume.sh | 3 + .../.config/i3pystatus_modules/now_playing.py | 162 ++++++++++++++++++++ i3pystatus/conf.py | 150 ------------------ 4 files changed, 335 insertions(+), 150 deletions(-) create mode 100644 i3pystatus/.config/i3pystatus/conf.py create mode 100755 i3pystatus/.config/i3pystatus/get_volume.sh create mode 100644 i3pystatus/.config/i3pystatus_modules/now_playing.py delete mode 100644 i3pystatus/conf.py diff --git a/i3pystatus/.config/i3pystatus/conf.py b/i3pystatus/.config/i3pystatus/conf.py new file mode 100644 index 0000000..9202272 --- /dev/null +++ b/i3pystatus/.config/i3pystatus/conf.py @@ -0,0 +1,170 @@ +import logging +from i3pystatus import Status + +status = Status(logfile='/home/neodarz/i3pystatus.log') + +status.register("text", + text=" :: ",) + +status.register("keyboard_locks", + format="{caps} {num}", + hints = {"separator": False, "separator_block_width": 0}, + caps_off="", + num_off="",) + +status.register("text", + text=" :: ", + hints = {"separator": False, "separator_block_width": 0},) + +# Displays clock like this: +# Tue 30 Jul 11:59:46 PM KW31 +# ^-- calendar week +status.register("clock", + format="%a %-d %b :: %X", + hints = {"separator": False, "separator_block_width": 0},) + +status.register("text", + text=" :: ", + hints = {"separator": False, "separator_block_width": 0},) + + + +# Shows the average load of the last minute and the last 5 minutes +# (the default value for format is used) +#status.register("load") + +# Shows your CPU temperature, if you have a Intel CPU +#status.register("temp", + # format=" {temp:.0f}°C",) + +# The battery monitor has many formatting options, see README for details + +# This would look like this, when discharging (or charging) +# ↓14.22W 56.15% [77.81%] 2h:41m +# And like this if full: +# =14.22W 100.0% [91.21%] +# +# This would also display a desktop notification (via D-Bus) if the percentage +# goes below 5 percent while discharging. The block will also color RED. +# If you don't have a desktop notification demon yet, take a look at dunst: +# http://www.knopwob.org/dunst/ +#status.register("battery", +# format="{status} {percentage:.2f}% [{percentage_design:.2f}%] {remaining:%E%hh:%Mm}", +# alert=True, +# alert_percentage=5, +# status={ +# "DIS": "↓", +# "CHR": "↑", +# "FULL": "=", +# },) + + +# Displays whether a DHCP client is running +#status.register("runwatch", +# name="DHCP", +# path="/var/run/dhclient*.pid",) + + +# Shows the address and up/down state of eth0. If it is up the address is shown in +# green (the default value of color_up) and the CIDR-address is shown +# (i.e. 10.10.10.42/24). +# If it's down just the interface name (eth0) will be displayed in red +# (defaults of format_down and color_down) +# +# Note: the network module requires PyPI package netifaces +status.register("network", + dynamic_color=True, + start_color="#420034", + color_down="#420034", + end_color="#420034", + interface="enp3s0", + format_up=" {v4cidr}", + format_down="", + hints = {"markup": "pango", "separator": False, "separator_block_width": 0},) + +status.register("text", + text=" :: ", + hints = {"separator": False, "separator_block_width": 0},) + +# Note: requires both netifaces and basiciw (for essid and quality) +#status.register("network", +# interface="wlp2s0", +# format_up=" {essid}  {quality:03.0f}%", +# format_down="") + +# Shows disk usage of / +# Format: +# 42/128G [86G] +status.register("disk", + path="/", + format="[ / ] {avail}G", + hints = {"separator": False, "separator_block_width": 0},) + +status.register("text", + text=" :: ", + hints = {"separator": False, "separator_block_width": 0},) + +status.register("disk", + path="/home", + format="[ /home ] {avail}G", + hints = {"separator": False, "separator_block_width": 0},) + +status.register("text", + text=" :: ", + hints = {"separator": False, "separator_block_width": 0},) + + +# Shows pulseaudio default sink volume +# +# Note: requires libpulseaudio from PyPI +status.register("pulseaudio", + format="{volume}",format_muted="", + hints = {"separator": False, "separator_block_width": 0},) + +status.register("text", + text=" :: ", + hints = {"separator": False, "separator_block_width": 0},) + + +status.register("shell", + command="sh ~/.config/i3pystatus/get_volume.sh", + interval=1, + hints = {"separator": False, "separator_block_width": 0},) + +status.register("text", + text=" :: ", + hints = {"separator": False, "separator_block_width": 0},) + +#status.register("backlight", +# format="{brightness}",) + +#status.register("shell", +# command="~/.i3-blocks/blocks/brightness",) + +# Shows mpd status +# Format: +# Cloud connected▶Reroute to Remain +status.register("cmus", + format="{status} {song_elapsed}/{song_length} {artist} - {title}", + status={ + "stopped": "◾", + "playing": "▶", + "paused": "▷", + },format_not_running="", + hints = {"separator": False, "separator_block_width": 0},) + + +status.register("now_playing", + player="clementine", + color="#ffc080", + hints = {"separator": False, "separator_block_width": 0}, + format='{status} {artist} - {title} {song_elapsed}/{song_length}', +# status = { + # "Playing": "plsay", + # "Paused": "pause", + # "Stopped": "stop", + # } +) + +status.run() + diff --git a/i3pystatus/.config/i3pystatus/get_volume.sh b/i3pystatus/.config/i3pystatus/get_volume.sh new file mode 100755 index 0000000..e0372f2 --- /dev/null +++ b/i3pystatus/.config/i3pystatus/get_volume.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +echo $(if [[ $(echo $(pacmd list | grep "active port") | cut -d" " -f3 | cut -d"<" -f2 | cut -d">" -f1) == "analog-output-lineout" ]]; then echo "Headphones"; elif [[ $(echo $(pacmd list | grep "active port") | cut -d" " -f3 | cut -d"<" -f2 | cut -d">" -f1) == "analog-output-headphones" ]]; then echo "Line Out"; fi) diff --git a/i3pystatus/.config/i3pystatus_modules/now_playing.py b/i3pystatus/.config/i3pystatus_modules/now_playing.py new file mode 100644 index 0000000..0be2825 --- /dev/null +++ b/i3pystatus/.config/i3pystatus_modules/now_playing.py @@ -0,0 +1,162 @@ + +import functools +from os.path import basename + +import dbus + +from i3pystatus import IntervalModule, formatp +from i3pystatus.core.util import TimeWrapper + + +class NoPlayerException(Exception): + pass + + +class NowPlaying(IntervalModule): + """ + Shows currently playing track information, supports most media players + + * Requires python-dbus available from every distros' package manager. + + Left click on the module play/pauses, right click goes to the next track. + + .. rubric:: Available formatters (uses :ref:`formatp`) + + * `{title}` — (the title of the current song) + * `{album}` — (the album of the current song, can be an empty string (e.g. for online streams)) + * `{artist}` — (can be empty, too) + * `{filename}` — (file name with out extension and path; empty unless title is empty) + * `{song_elapsed}` — (position in the currently playing song, uses :ref:`TimeWrapper`, default is `%m:%S`) + * `{song_length}` — (length of the current song, same as song_elapsed) + * `{status}` — (play, pause, stop mapped through the `status` dictionary) + * `{volume}` — (volume) + """ + + interval = 1 + + settings = ( + ("player", "Player name. If not set, compatible players will be \ + detected automatically."), + ("status", "Dictionary mapping pause, play and stop to output text"), + ("format", "formatp string"), + ("color", "Text color"), + ("format_no_player", "Text to show if no player is detected"), + ("color_no_player", "Text color when no player is detected"), + ("hide_no_player", "Hide output if no player is detected"), + ) + + hide_no_player = True + format_no_player = "No Player" + color_no_player = "#ffffff" + + format = "{title} {status}" + color = "#ffffff" + status = { + "pause": "▷", + "play": "▶", + "stop": "◾", + } + statusmap = { + "Playing": "playd", + "Paused": "pause", + "Stopped": "stop", + } + + on_leftclick = "playpause" + on_rightclick = "next_song" + + player = None + old_player = None + + def find_player(self): + players = [a for a in dbus.SessionBus().get_object("org.freedesktop.DBus", "/org/freedesktop/DBus").ListNames() if a.startswith("org.mpris.MediaPlayer2.")] + if self.old_player in players: + return self.old_player + if not players: + raise NoPlayerException() + self.old_player = players[0] + return players[0] + + def get_player(self): + if self.player: + player = "org.mpris.MediaPlayer2." + self.player + try: + return dbus.SessionBus().get_object(player, "/org/mpris/MediaPlayer2") + except dbus.exceptions.DBusException: + raise NoPlayerException() + else: + player = self.find_player() + return dbus.SessionBus().get_object(player, "/org/mpris/MediaPlayer2") + + def run(self): + try: + player = self.get_player() + properties = dbus.Interface(player, "org.freedesktop.DBus.Properties") + get_prop = functools.partial(properties.Get, "org.mpris.MediaPlayer2.Player") + currentsong = get_prop("Metadata") + + current_status = get_prop("PlaybackStatus") + fdict = { + "status": self.status[self.statusmap[current_status]], + "len": 0, # TODO: Use optional(!) TrackList interface for this to gain 100 % mpd<->now_playing compat + "pos": 0, + "volume": int(get_prop("Volume") * 100), + + "title": currentsong.get("xesam:title", ""), + "album": currentsong.get("xesam:album", ""), + "artist": ", ".join(currentsong.get("xesam:artist", "")), + "song_length": TimeWrapper((currentsong.get("mpris:length") or 0) / 1000 ** 2), + "song_elapsed": TimeWrapper((get_prop("Position") or 0) / 1000 ** 2), + "filename": "", + } + + if not fdict["title"]: + fdict["filename"] = '.'.join( + basename((currentsong.get("xesam:url") or "")).split('.')[:-1]) + + if current_status in ["Stopped", "Paused"]: + self.output = { + "full_text": self.status["play"], + "color": self.color, + } + else: + self.output = { + "full_text": formatp(self.format, **fdict).strip(), + "color": self.color, + } + + except NoPlayerException: + if self.hide_no_player: + self.output = None + else: + self.output = { + "full_text": self.format_no_player, + "color": self.color_no_player, + } + return + + except dbus.exceptions.DBusException as e: + if self.hide_no_player: + self.output = None + else: + self.output = { + "full_text": "DBus error: " + e.get_dbus_message(), + "color": "#ff0000", + } + return + + def playpause(self): + try: + dbus.Interface(self.get_player(), "org.mpris.MediaPlayer2.Player").PlayPause() + except NoPlayerException: + return + except dbus.exceptions.DBusException: + return + + def next_song(self): + try: + dbus.Interface(self.get_player(), "org.mpris.MediaPlayer2.Player").Next() + except NoPlayerException: + return + except dbus.exceptions.DBusException: + return diff --git a/i3pystatus/conf.py b/i3pystatus/conf.py deleted file mode 100644 index 6f29414..0000000 --- a/i3pystatus/conf.py +++ /dev/null @@ -1,150 +0,0 @@ -import logging -from i3pystatus import Status - -status = Status(logfile='/home/neodarz/i3pystatus.log') - -status.register("text", - text=" ░▒▓█",) - -status.register("keyboard_locks", - format="{caps} {num}", - hints = {"separator": False, "separator_block_width": 0}, - caps_off="", - num_off="",) - -status.register("text", - text=" ░▒▓█▓▒░ ", - hints = {"separator": False, "separator_block_width": 0},) - -# Displays clock like this: -# Tue 30 Jul 11:59:46 PM KW31 -# ^-- calendar week -status.register("clock", - format=" %a %-d %b  %X", - hints = {"separator": False, "separator_block_width": 0},) - -status.register("text", - text=" ░▒▓█▓▒░ ", - hints = {"separator": False, "separator_block_width": 0},) - - - -# Shows the average load of the last minute and the last 5 minutes -# (the default value for format is used) -#status.register("load") - -# Shows your CPU temperature, if you have a Intel CPU -#status.register("temp", - # format=" {temp:.0f}°C",) - -# The battery monitor has many formatting options, see README for details - -# This would look like this, when discharging (or charging) -# ↓14.22W 56.15% [77.81%] 2h:41m -# And like this if full: -# =14.22W 100.0% [91.21%] -# -# This would also display a desktop notification (via D-Bus) if the percentage -# goes below 5 percent while discharging. The block will also color RED. -# If you don't have a desktop notification demon yet, take a look at dunst: -# http://www.knopwob.org/dunst/ -#status.register("battery", -# format="{status} {percentage:.2f}% [{percentage_design:.2f}%] {remaining:%E%hh:%Mm}", -# alert=True, -# alert_percentage=5, -# status={ -# "DIS": "↓", -# "CHR": "↑", -# "FULL": "=", -# },) - - -# Displays whether a DHCP client is running -#status.register("runwatch", -# name="DHCP", -# path="/var/run/dhclient*.pid",) - - -# Shows the address and up/down state of eth0. If it is up the address is shown in -# green (the default value of color_up) and the CIDR-address is shown -# (i.e. 10.10.10.42/24). -# If it's down just the interface name (eth0) will be displayed in red -# (defaults of format_down and color_down) -# -# Note: the network module requires PyPI package netifaces -status.register("network", - dynamic_color=True, - start_color="#138491", - color_down="#138491", - end_color="#138491", - interface="enp3s0", - format_up=" {v4cidr}", - format_down="", - hints = {"markup": "pango", "separator": False, "separator_block_width": 0},) - -status.register("text", - text=" ░▒▓█▓▒░ ", - hints = {"separator": False, "separator_block_width": 0},) - -# Note: requires both netifaces and basiciw (for essid and quality) -#status.register("network", -# interface="wlp2s0", -# format_up=" {essid}  {quality:03.0f}%", -# format_down="") - -# Shows disk usage of / -# Format: -# 42/128G [86G] -status.register("disk", - path="/", - format=" {avail}G", - hints = {"separator": False, "separator_block_width": 0},) - -status.register("text", - text=" ░▒▓█▓▒░ ", - hints = {"separator": False, "separator_block_width": 0},) - -# Shows pulseaudio default sink volume -# -# Note: requires libpulseaudio from PyPI -status.register("pulseaudio", - format="{volume}",format_muted="", - hints = {"separator": False, "separator_block_width": 0},) - -status.register("text", - text=" █▓▒░ ", - hints = {"separator": False, "separator_block_width": 0},) - -#status.register("backlight", -# format="{brightness}",) - -#status.register("shell", -# command="~/.i3-blocks/blocks/brightness",) - -# Shows mpd status -# Format: -# Cloud connected▶Reroute to Remain -status.register("cmus", - format="{status} {song_elapsed}/{song_length} {artist} - {title}", - status={ - "stopped": "◾", - "playing": "▶", - "paused": "▷", - },format_not_running="", - hints = {"separator": False, "separator_block_width": 0},) - - -status.register("now_playing", - player="clementine", - color="#ffc080", - hints = {"separator": False, "separator_block_width": 0}, - format='{status} {artist} - {title} {song_elapsed}/{song_length}', -# status = { - # "Playing": "plsay", - # "Paused": "pause", - # "Stopped": "stop", - # } -) - -status.run() - -- cgit v1.2.1