mirror of
https://github.com/dnlbauer/dotfiles.git
synced 2026-09-10 21:45:30 +00:00
Merge branch 'master' of github.com:danijoo/dotfiles
This commit is contained in:
@@ -186,6 +186,7 @@ workspace $workspace8 output DP-0
|
||||
workspace $workspace9 output DP-0
|
||||
|
||||
for_window [window_role="pop-up"] floating enable
|
||||
for_window [class="Chromium" window_role="pop-up"] floating disable
|
||||
for_window [class="Tk"] floating enable
|
||||
for_window [title="PyMOL Viewer"] floating enable
|
||||
for_window [class="Toplevel"] floating enable
|
||||
|
||||
@@ -51,9 +51,9 @@ monitor = ${env:MONITOR:HDMI-2}
|
||||
|
||||
[bar/workstation]
|
||||
inherit = bar/base
|
||||
monitor = ${env:MONITOR:DP-2}
|
||||
monitor = ${env:MONITOR:DP-4}
|
||||
modules-left = i3 xwindow
|
||||
modules-right = spotify mpd volume filesystem cpu gpu memory date
|
||||
modules-right = spotify previous playpause next mpd pulseaudio filesystem cpu gpu memory date xkeyboard
|
||||
tray-position = false
|
||||
tray-padding = 2
|
||||
|
||||
@@ -63,7 +63,7 @@ font-2 = FontAwesome:size=11;0
|
||||
|
||||
[bar/workstation2]
|
||||
inherit = bar/workstation
|
||||
monitor = ${env:MONITOR:DP-4}
|
||||
monitor = ${env:MONITOR:DP-2}
|
||||
tray-position = right
|
||||
|
||||
|
||||
@@ -93,8 +93,8 @@ type = internal/fs
|
||||
interval = 25
|
||||
|
||||
mount-0 = /
|
||||
mount-1 = /scratch
|
||||
mount-2 = /scratch2
|
||||
mount-1 = /data
|
||||
mount-2 = /backup
|
||||
|
||||
label-mounted = %{F#0a81f5}%mountpoint%%{F-}: %percentage_used%%
|
||||
label-unmounted = %mountpoint% not mounted
|
||||
@@ -293,6 +293,33 @@ format-prefix-foreground = ${colors.foreground-alt}
|
||||
label = %time% %date%
|
||||
format = <label>
|
||||
|
||||
[module/pulseaudio]
|
||||
type = internal/pulseaudio
|
||||
format-volume = <label-volume> <bar-volume>
|
||||
label-volume =
|
||||
label-volume-foreground = ${root.foreground}
|
||||
|
||||
format-muted-foreground = ${colors.foreground-alt}
|
||||
label-muted = sound muted
|
||||
|
||||
bar-volume-width = 20
|
||||
bar-volume-foreground-0 = #55aa55
|
||||
bar-volume-foreground-1 = #55aa55
|
||||
bar-volume-foreground-2 = #55aa55
|
||||
bar-volume-foreground-3 = #55aa55
|
||||
bar-volume-foreground-4 = #55aa55
|
||||
bar-volume-foreground-5 = #f5a70a
|
||||
bar-volume-foreground-6 = #ff5555
|
||||
bar-volume-gradient = false
|
||||
bar-volume-indicator = ▐
|
||||
bar-volume-indicator-font = 2
|
||||
bar-volume-fill = ─
|
||||
bar-volume-fill-font = 2
|
||||
bar-volume-empty = ─
|
||||
bar-volume-empty-font = 2
|
||||
bar-volume-empty-foreground = ${colors.foreground-alt}
|
||||
|
||||
|
||||
[module/volume]
|
||||
type = internal/alsa
|
||||
format-volume = <label-volume> <bar-volume>
|
||||
@@ -420,3 +447,35 @@ ramp-capacity-4 =
|
||||
ramp-capacity-4-foreground = ${colors.green}
|
||||
|
||||
animation-discharging-0 =
|
||||
|
||||
[module/previous]
|
||||
type = custom/script
|
||||
interval = 86400
|
||||
format = "%{T3}<label>"
|
||||
format-padding = 1
|
||||
exec = echo ""
|
||||
exec-if = "pgrep spotify"
|
||||
line-size = 1
|
||||
click-left = "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous"
|
||||
|
||||
[module/playpause]
|
||||
type = custom/script
|
||||
interval = 86400
|
||||
format = "%{T3}<label>"
|
||||
format-padding = 1
|
||||
exec = echo "/"
|
||||
exec-if = "pgrep spotify"
|
||||
line-size = 1
|
||||
click-left = "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause"
|
||||
|
||||
|
||||
[module/next]
|
||||
type = custom/script
|
||||
interval = 86400
|
||||
format = "%{T3}<label>"
|
||||
format-padding = 1
|
||||
exec = echo ""
|
||||
exec-if = "pgrep spotify"
|
||||
line-size = 1
|
||||
click-left = "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next"
|
||||
|
||||
|
||||
3
profiles/desktop/.config/polybar/spotify/launchlistener.sh
Executable file
3
profiles/desktop/.config/polybar/spotify/launchlistener.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
/usr/bin/env python3 ~/scripts/spotify/py_spotify_listener.py
|
||||
125
profiles/desktop/.config/polybar/spotify/py_spotify_listener.py
Executable file
125
profiles/desktop/.config/polybar/spotify/py_spotify_listener.py
Executable file
@@ -0,0 +1,125 @@
|
||||
#!/usr/bin/env python3
|
||||
# Unwrap function: (C)2011-2015 Dennis Kaarsemaker
|
||||
# License: GPL3+
|
||||
"""Receiver related functionality."""
|
||||
import dbus.service
|
||||
import dbus.glib
|
||||
from gi.repository import GObject
|
||||
import dbus
|
||||
|
||||
|
||||
class Test(dbus.service.Object):
|
||||
"""Reciever test class."""
|
||||
|
||||
loop = None
|
||||
|
||||
def __init__(self, bus_name, object_path, loop):
|
||||
"""Initialize the DBUS service object."""
|
||||
dbus.service.Object.__init__(self, bus_name, object_path)
|
||||
self.loop = loop
|
||||
|
||||
@dbus.service.method('tld.domain.sub.TestInterface')
|
||||
def foo(self):
|
||||
"""Return a string."""
|
||||
return 'Foo'
|
||||
|
||||
# Stop the main loop
|
||||
@dbus.service.method('tld.domain.sub.TestInterface')
|
||||
def stop(self):
|
||||
"""Stop the receiver."""
|
||||
self.loop.quit()
|
||||
return 'Quit loop'
|
||||
|
||||
# Pass an exception through dbus
|
||||
@dbus.service.method('tld.domain.sub.TestInterface')
|
||||
def fail(self):
|
||||
"""Trigger an exception."""
|
||||
raise Exception('FAIL!')
|
||||
|
||||
|
||||
def catchall_handler(*args, **kwargs):
|
||||
"""Catch all handler.
|
||||
Catch and print information about all singals.
|
||||
"""
|
||||
print('---- Caught signal ----')
|
||||
print('%s:%s\n' % (kwargs['dbus_interface'], kwargs['member']))
|
||||
|
||||
print("\n")
|
||||
|
||||
def quit_handler():
|
||||
"""Signal handler for quitting the receiver."""
|
||||
print('Quitting....')
|
||||
loop.quit()
|
||||
|
||||
def event_handler(*args, **kwargs):
|
||||
"""event handler for the receiver."""
|
||||
"""arg[1] contains metadata"""
|
||||
"""arg[1][1] contains PlaybackStatus"""
|
||||
data = unwrap(args)
|
||||
if data[1]['PlaybackStatus'] == "Playing":
|
||||
print("Music is playing")
|
||||
""" Send IPC hook 2 to the bottom bar pid for module playpause """
|
||||
with open("/tmp/ipc-bottom", "w") as text_file:
|
||||
print("hook:module/playpause2", file=text_file)
|
||||
if data[1]['PlaybackStatus'] == "Paused":
|
||||
print("Music is paused.")
|
||||
""" Send IPC hook 3 to the bottom bar pid for module playpause """
|
||||
with open("/tmp/ipc-bottom", "w") as text_file:
|
||||
print("hook:module/playpause3", file=text_file)
|
||||
""" Send IPC hook 2 to the bottom bar pid for module spotify """
|
||||
with open("/tmp/ipc-bottom", "w") as text_file:
|
||||
print("hook:module/spotify2", file=text_file)
|
||||
|
||||
def unwrap(val):
|
||||
if isinstance(val, dbus.ByteArray):
|
||||
return "".join([str(x) for x in val])
|
||||
if isinstance(val, (dbus.Array, list, tuple)):
|
||||
return [unwrap(x) for x in val]
|
||||
if isinstance(val, (dbus.Dictionary, dict)):
|
||||
return dict([(unwrap(x), unwrap(y)) for x, y in val.items()])
|
||||
if isinstance(val, (dbus.Signature, dbus.String)):
|
||||
return str(val)
|
||||
if isinstance(val, dbus.Boolean):
|
||||
return bool(val)
|
||||
if isinstance(val, (dbus.Int16, dbus.UInt16, dbus.Int32, dbus.UInt32, dbus.Int64, dbus.UInt64)):
|
||||
return int(val)
|
||||
if isinstance(val, dbus.Byte):
|
||||
return bytes([int(val)])
|
||||
return val
|
||||
|
||||
loop = GObject.MainLoop()
|
||||
|
||||
"""
|
||||
First we get the bus to attach to. This may be either the session bus, of the
|
||||
system bus. For system bus root permission is required.
|
||||
We claim a bus name on the chosen bus. The name should be in form of a
|
||||
domain name.
|
||||
"""
|
||||
bus = dbus.SessionBus()
|
||||
# bus = dbus.SystemBus()
|
||||
bus_name = dbus.service.BusName('sub.domain.tld', bus=bus)
|
||||
|
||||
"""
|
||||
We initialize our service object with our name and object path. Object
|
||||
path should be in form of a reverse domain dame, delimited by / instead of .
|
||||
and the Class name as last part.
|
||||
The object path we set here is of importance for our invoker, since it will to
|
||||
call it exactly as defined here.
|
||||
"""
|
||||
obj = Test(bus_name, '/tld/domain/sub/Test', loop)
|
||||
|
||||
|
||||
"""
|
||||
Attach signal handler.
|
||||
Signal handlers may be attached in different ways, either by interface keyword
|
||||
or DBUS interface and a signal name or member keyword.
|
||||
You can easily gather all information by running the DBUS monitor.
|
||||
"""
|
||||
bus.add_signal_receiver(quit_handler,
|
||||
dbus_interface='tld.domain.sub.event',
|
||||
signal_name='quit_signal')
|
||||
bus.add_signal_receiver(event_handler,
|
||||
dbus_interface='org.freedesktop.DBus.Properties',
|
||||
member_keyword='PropertiesChanged')
|
||||
|
||||
loop.run()
|
||||
67
profiles/desktop/.config/polybar/spotify/spotify_status.py
Normal file
67
profiles/desktop/.config/polybar/spotify/spotify_status.py
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import dbus
|
||||
import argparse
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(
|
||||
'-t',
|
||||
'--trunclen',
|
||||
type=int,
|
||||
metavar='trunclen'
|
||||
)
|
||||
parser.add_argument(
|
||||
'-f',
|
||||
'--format',
|
||||
type=str,
|
||||
metavar='custom format',
|
||||
dest='custom_format'
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Default parameters
|
||||
output = '{artist}: {song}'
|
||||
trunclen = 25
|
||||
|
||||
# parameters can be overwritten by args
|
||||
if args.trunclen is not None:
|
||||
trunclen = args.trunclen
|
||||
if args.custom_format is not None:
|
||||
output = args.custom_format
|
||||
|
||||
try:
|
||||
session_bus = dbus.SessionBus()
|
||||
spotify_bus = session_bus.get_object(
|
||||
'org.mpris.MediaPlayer2.spotify',
|
||||
'/org/mpris/MediaPlayer2'
|
||||
)
|
||||
|
||||
spotify_properties = dbus.Interface(
|
||||
spotify_bus,
|
||||
'org.freedesktop.DBus.Properties'
|
||||
)
|
||||
|
||||
metadata = spotify_properties.Get('org.mpris.MediaPlayer2.Player', 'Metadata')
|
||||
|
||||
artist = metadata['xesam:artist'][0]
|
||||
song = metadata['xesam:title']
|
||||
|
||||
if len(song) > trunclen:
|
||||
song = song[0:trunclen]
|
||||
song += '...'
|
||||
if ('(' in song) and (')' not in song):
|
||||
song += ')'
|
||||
|
||||
# Python3 uses UTF-8 by default.
|
||||
if sys.version_info.major == 3:
|
||||
print(output.format(artist=artist, song=song))
|
||||
else:
|
||||
print(output.format(artist=artist, song=song).encode('UTF-8'))
|
||||
except Exception as e:
|
||||
if isinstance(e, dbus.exceptions.DBusException):
|
||||
print('')
|
||||
else:
|
||||
print(e)
|
||||
|
||||
Reference in New Issue
Block a user