Merge branch 'main' into pulseaudio_extension

This commit is contained in:
Bernhard B 2022-03-22 18:21:33 +01:00
commit 7932af712e
12 changed files with 783 additions and 347 deletions

View file

@ -0,0 +1,57 @@
"""Check updates for AUR.
Requires the following executable:
* yay (https://github.com/Jguer/yay)
contributed by `ishaanbhimwal <https://github.com/ishaanbhimwal>`_ - many thanks!
"""
import logging
import core.module
import core.widget
import core.decorators
import util.cli
class Module(core.module.Module):
@core.decorators.every(minutes=60)
def __init__(self, config, theme):
super().__init__(config, theme, core.widget.Widget(self.utilization))
self.background = True
self.__packages = 0
self.__error = False
@property
def __format(self):
return self.parameter("format", "Update AUR: {}")
def utilization(self, widget):
return self.__format.format(self.__packages)
def hidden(self):
return self.__packages == 0 and not self.__error
def update(self):
self.__error = False
code, result = util.cli.execute(
"yay -Qum", ignore_errors=True, return_exitcode=True
)
if code == 0:
if result == "":
self.__packages = 0
else:
self.__packages = len(result.strip().split("\n"))
else:
self.__error = True
logging.error("aur-update exited with {}: {}".format(code, result))
def state(self, widget):
if self.__error:
return "warning"
return self.threshold_state(self.__packages, 1, 100)
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -0,0 +1,97 @@
"""Displays temperature of blugon and Controls it.
Use wheel up and down to change temperature, middle click to toggle and right click to reset temprature.
Default Values:
* Minimum temperature: 1000 (red)
* Maximum temperature: 20000 (blue)
* Default temperature: 6600
Requires the following executable:
* blugon
Parameters:
* blugon.step: The amount of increase/decrease on scroll (default: 200)
contributed by `DTan13 <https://github.com/DTan13>`
"""
import core.module
import core.widget
import util.cli
import util.format
import os
class Module(core.module.Module):
def __init__(self, config, theme):
super().__init__(config, theme, core.widget.Widget(self.full_text))
self.__state = True
self.__default = 6600
self.__step = (
util.format.asint(self.parameter("step")) if self.parameter("step") else 200
)
self.__max, self.__min = 20000, 1000
file = open(os.path.expanduser("~/.config/blugon/current"))
self.__current = int(float(file.read()))
events = [
{
"type": "toggle",
"action": self.toggle,
"button": core.input.MIDDLE_MOUSE,
},
{
"type": "blue",
"action": self.blue,
"button": core.input.WHEEL_UP,
},
{
"type": "red",
"action": self.red,
"button": core.input.WHEEL_DOWN,
},
{
"type": "reset",
"action": self.reset,
"button": core.input.RIGHT_MOUSE,
},
]
for event in events:
core.input.register(self, button=event["button"], cmd=event["action"])
def set_temp(self):
temp = self.__current if self.__state else self.__default
util.cli.execute("blugon --setcurrent={}".format(temp))
def full_text(self, widget):
return self.__current if self.__state else self.__default
def state(self, widget):
if not self.__state:
return ["critical"]
def toggle(self, event):
self.__state = not self.__state
self.set_temp()
def reset(self, event):
self.__current = 6600
self.set_temp()
def blue(self, event):
if self.__state and (self.__current < self.__max):
self.__current += self.__step
self.set_temp()
def red(self, event):
if self.__state and (self.__current > self.__min):
self.__current -= self.__step
self.set_temp()
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -94,6 +94,12 @@ class Module(core.module.Module):
"cmd": "mpc toggle" + self._hostcmd, "cmd": "mpc toggle" + self._hostcmd,
} }
widget.full_text(self.description) widget.full_text(self.description)
elif widget_name == "mpd.toggle":
widget_map[widget] = {
"button": core.input.LEFT_MOUSE,
"cmd": "mpc toggle" + self._hostcmd,
}
widget.full_text(self.toggle)
elif widget_name == "mpd.next": elif widget_name == "mpd.next":
widget_map[widget] = { widget_map[widget] = {
"button": core.input.LEFT_MOUSE, "button": core.input.LEFT_MOUSE,
@ -127,6 +133,9 @@ class Module(core.module.Module):
def description(self, widget): def description(self, widget):
return string.Formatter().vformat(self._fmt, (), self._tags) return string.Formatter().vformat(self._fmt, (), self._tags)
def toggle(self, widget):
return str(util.cli.execute("mpc status %currenttime%/%totaltime%", ignore_errors=True)).strip()
def update(self): def update(self):
self._load_song() self._load_song()

View file

@ -1,141 +0,0 @@
# pylint: disable=C0111,R0903
""" Displays the current default sink.
Left click opens a popup menu that lists all available sinks and allows to change the default sink.
Per default, this module uses the sink names returned by "pactl list sinks short"
sample output of "pactl list sinks short":
2 alsa_output.pci-0000_00_1f.3.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
3 alsa_output.usb-Logitech_Logitech_USB_Headset-00.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDE
As "alsa_output.usb-Logitech_Logitech_USB_Headset-00.analog-stereo" is not a particularly nice name, its possible to map the name to more a
user friendly name. e.g to map "alsa_output.usb-Logitech_Logitech_USB_Headset-00.analog-stereo" to the name "Headset", add the following
bumblebee-status config entry: pactl.alsa_output.usb-Logitech_Logitech_USB_Headset-00.analog-stereo=Headset
The module also allows to specify individual (unicode) icons for all the sinks. e.g in order to use the icon 🎧 for the
"alsa_output.usb-Logitech_Logitech_USB_Headset-00.analog-stereo" sink, add the following bumblebee-status config entry:
pactl.icon.alsa_output.usb-Logitech_Logitech_USB_Headset-00.analog-stereo=🎧
Requirements:
* pulseaudio
* pactl
"""
import logging
import functools
import core.module
import core.widget
import core.input
import util.cli
import util.popup
class Sink(object):
def __init__(self, id, internal_name, friendly_name, icon):
super().__init__()
self.__id = id
self.__internal_name = internal_name
self.__friendly_name = friendly_name
self.__icon = icon
@property
def id(self):
return self.__id
@property
def internal_name(self):
return self.__internal_name
@property
def friendly_name(self):
return self.__friendly_name
@property
def icon(self):
return self.__icon
@property
def display_name(self):
display_name = (
self.__icon + " " + self.__friendly_name
if self.__icon != ""
else self.__friendly_name
)
return display_name
class Module(core.module.Module):
def __init__(self, config, theme):
super().__init__(config, theme, core.widget.Widget(self.default_sink))
self.__default_sink = None
res = util.cli.execute("pactl list sinks short")
lines = res.splitlines()
self.__sinks = []
for line in lines:
info = line.split("\t")
try:
friendly_name = self.parameter(info[1], info[1])
icon = self.parameter("icon." + info[1], "")
self.__sinks.append(Sink(info[0], info[1], friendly_name, icon))
except:
logging.exception("Couldn't parse sink")
pass
core.input.register(self, button=core.input.LEFT_MOUSE, cmd=self.popup)
def __sink(self, internal_sink_name):
for sink in self.__sinks:
if internal_sink_name == sink.internal_name:
return sink
return None
def update(self):
try:
res = util.cli.execute("pactl info")
lines = res.splitlines()
self.__default_sink = None
for line in lines:
if not line.startswith("Default Sink:"):
continue
internal_sink_name = line.replace("Default Sink: ", "")
self.__default_sink = self.__sink(internal_sink_name)
break
except Exception as e:
logging.exception("Could not get pactl info")
self.__default_sink = None
def default_sink(self, widget):
if self.__default_sink is None:
return "unknown"
return self.__default_sink.display_name
def __on_sink_selected(self, sink):
try:
util.cli.execute("pactl set-default-sink {}".format(sink.id))
self.__default_sink = sink
except Exception as e:
logging.exception("Couldn't set default sink")
def popup(self, widget):
menu = util.popup.menu()
for sink in self.__sinks:
menu.add_menuitem(
sink.friendly_name,
callback=functools.partial(self.__on_sink_selected, sink),
)
menu.show(widget)
def state(self, widget):
return []
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -10,36 +10,22 @@ Parameters:
* datetime.locale: locale to use. default: "fa_IR" * datetime.locale: locale to use. default: "fa_IR"
""" """
from __future__ import absolute_import
import jdatetime import jdatetime
import locale
import core.module import core.decorators
import core.widget from modules.core.datetime import Module as dtmodule
import core.input
class Module(core.module.Module): class Module(dtmodule):
@core.decorators.every(minutes=1)
def __init__(self, config, theme): def __init__(self, config, theme):
super().__init__(config, theme, core.widget.Widget(self.full_text)) super().__init__(config, theme, dtlibrary=jdatetime)
l = ("fa_IR", "UTF-8")
lcl = self.parameter("locale", ".".join(l))
try:
locale.setlocale(locale.LC_ALL, lcl.split("."))
except Exception as e:
locale.setlocale(locale.LC_ALL, ("fa_IR", "UTF-8"))
def default_format(self): def default_format(self):
return "%A %d %B" return "%A %d %B"
def full_text(self, widget): def default_locale(self):
enc = locale.getpreferredencoding() return ("fa_IR", "UTF-8")
fmt = self.parameter("format", self.default_format())
retval = jdatetime.datetime.now().strftime(fmt)
if hasattr(retval, "decode"):
return retval.decode(enc)
return retval
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -9,6 +9,7 @@ Parameters:
* title.max : Maximum character length for title before truncating. Defaults to 64. * title.max : Maximum character length for title before truncating. Defaults to 64.
* title.placeholder : Placeholder text to be placed if title was truncated. Defaults to '...'. * title.placeholder : Placeholder text to be placed if title was truncated. Defaults to '...'.
* title.scroll : Boolean flag for scrolling title. Defaults to False * title.scroll : Boolean flag for scrolling title. Defaults to False
* title.short : Boolean flag for short title. Defaults to False
contributed by `UltimatePancake <https://github.com/UltimatePancake>`_ - many thanks! contributed by `UltimatePancake <https://github.com/UltimatePancake>`_ - many thanks!
@ -35,6 +36,7 @@ class Module(core.module.Module):
# parsing of parameters # parsing of parameters
self.__scroll = util.format.asbool(self.parameter("scroll", False)) self.__scroll = util.format.asbool(self.parameter("scroll", False))
self.__short = util.format.asbool(self.parameter("short", False))
self.__max = int(self.parameter("max", 64)) self.__max = int(self.parameter("max", 64))
self.__placeholder = self.parameter("placeholder", "...") self.__placeholder = self.parameter("placeholder", "...")
self.__title = "" self.__title = ""
@ -66,7 +68,9 @@ class Module(core.module.Module):
def __pollTitle(self): def __pollTitle(self):
"""Updating current title.""" """Updating current title."""
try: try:
self.__full_title = self.__i3.get_tree().find_focused().name focused = self.__i3.get_tree().find_focused().name
self.__full_title = focused.split(
"-")[-1].strip() if self.__short else focused
except: except:
self.__full_title = no_title self.__full_title = no_title
if self.__full_title is None: if self.__full_title is None:

View file

@ -17,26 +17,33 @@ import core.input
class Module(core.module.Module): class Module(core.module.Module):
def __init__(self, config, theme): def __init__(self, config, theme, dtlibrary=None):
super().__init__(config, theme, core.widget.Widget(self.full_text)) super().__init__(config, theme, core.widget.Widget(self.full_text))
core.input.register(self, button=core.input.LEFT_MOUSE, cmd="calendar") core.input.register(self, button=core.input.LEFT_MOUSE, cmd="calendar")
l = locale.getdefaultlocale() self.dtlibrary = dtlibrary or datetime
def set_locale(self):
l = self.default_locale()
if not l or l == (None, None): if not l or l == (None, None):
l = ("en_US", "UTF-8") l = ("en_US", "UTF-8")
lcl = self.parameter("locale", ".".join(l)) lcl = self.parameter("locale", ".".join(l))
try: try:
locale.setlocale(locale.LC_TIME, lcl.split(".")) locale.setlocale(locale.LC_ALL, lcl.split("."))
except Exception as e: except Exception as e:
locale.setlocale(locale.LC_TIME, ("en_US", "UTF-8")) locale.setlocale(locale.LC_ALL, ("en_US", "UTF-8"))
def default_format(self): def default_format(self):
return "%x %X" return "%x %X"
def default_locale(self):
return locale.getdefaultlocale()
def full_text(self, widget): def full_text(self, widget):
self.set_locale()
enc = locale.getpreferredencoding() enc = locale.getpreferredencoding()
fmt = self.parameter("format", self.default_format()) fmt = self.parameter("format", self.default_format())
retval = datetime.datetime.now().strftime(fmt) retval = self.dtlibrary.datetime.now().strftime(fmt)
if hasattr(retval, "decode"): if hasattr(retval, "decode"):
return retval.decode(enc) return retval.decode(enc)
return retval return retval

View file

@ -401,6 +401,20 @@ Requires the following executable:
contributed by `lucassouto <https://github.com/lucassouto>`_ - many thanks! contributed by `lucassouto <https://github.com/lucassouto>`_ - many thanks!
.. image:: ../screenshots/arch-update.png
aur-update
~~~~~~~~~~~
Check updates for AUR.
Requires the following executable:
* yay (https://github.com/Jguer/yay)
contributed by `ishaanbhimwal <https://github.com/ishaanbhimwal>`_ - many thanks!
.. image:: ../screenshots/aur-update.png
battery battery
~~~~~~~ ~~~~~~~

BIN
screenshots/arch-update.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
screenshots/aur-update.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -0,0 +1,2 @@
def test_load_module():
__import__("modules.contrib.zpool")

View file

@ -2,187 +2,489 @@
"defaults": { "defaults": {
"separator": "", "separator": "",
"padding": " ", "padding": " ",
"unknown": { "prefix": "" }, "unknown": {
"prefix": ""
},
"separator-block-width": 0, "separator-block-width": 0,
"default-separators": false "default-separators": false
}, },
"date": { "prefix": "" }, "date": {
"persian_date": { "prefix": "" }, "prefix": ""
"time": { "prefix": "" }, },
"datetime": { "prefix": "" }, "persian_date": {
"datetz": { "prefix": "" }, "prefix": ""
"timetz": { "prefix": "" }, },
"datetimetz": { "prefix": "" }, "time": {
"memory": { "prefix": "" }, "prefix": ""
"cpu": { "prefix": "" }, },
"cpu2": { "datetime": {
"freq": { "prefix": "" }, "prefix": ""
"load": { "prefix": "" }, },
"loads": { "prefix": "" }, "datetz": {
"temp": { "prefix": "" }, "prefix": ""
"fan": { "prefix": "" } },
"timetz": {
"prefix": ""
},
"datetimetz": {
"prefix": ""
},
"memory": {
"prefix": ""
},
"cpu": {
"prefix": ""
},
"cpu2": {
"freq": {
"prefix": ""
},
"load": {
"prefix": ""
},
"loads": {
"prefix": ""
},
"temp": {
"prefix": ""
},
"fan": {
"prefix": ""
}
},
"disk": {
"prefix": ""
},
"smartstatus": {
"prefix": ""
},
"dnf": {
"prefix": ""
},
"apt": {
"prefix": ""
},
"pacman": {
"prefix": ""
},
"brightness": {
"prefix": ""
},
"load": {
"prefix": ""
},
"layout": {
"prefix": ""
},
"layout-xkb": {
"prefix": ""
},
"layout-xkbswitch": {
"prefix": ""
}, },
"disk": { "prefix": "" },
"smartstatus": { "prefix": "" },
"dnf": { "prefix": "" },
"apt": { "prefix": "" },
"pacman": { "prefix": "" },
"brightness": { "prefix": "" },
"load": { "prefix": "" },
"layout": { "prefix": "" },
"layout-xkb": { "prefix": "" },
"layout-xkbswitch": { "prefix": "" },
"notmuch_count": { "notmuch_count": {
"empty": { "prefix": "\uf0e0" }, "empty": {
"items": { "prefix": "\uf0e0" } "prefix": "\uf0e0"
},
"items": {
"prefix": "\uf0e0"
}
}, },
"portage_status": { "portage_status": {
"idle": { "prefix": "" }, "idle": {
"active": { "prefix": "" } "prefix": ""
},
"active": {
"prefix": ""
}
}, },
"todo": { "todo": {
"empty": { "prefix": "" }, "empty": {
"items": { "prefix": "" }, "prefix": ""
"uptime": { "prefix": "" } },
"items": {
"prefix": ""
},
"uptime": {
"prefix": ""
}
}, },
"zpool": { "zpool": {
"poolread": { "prefix": "→ " }, "poolread": {
"poolwrite": { "prefix": "← " }, "prefix": "→ "
"ONLINE": { "prefix": "" }, },
"FAULTED": { "prefix": "!" }, "poolwrite": {
"DEGRADED": { "prefix": "!" } "prefix": "← "
},
"ONLINE": {
"prefix": ""
},
"FAULTED": {
"prefix": "!"
},
"DEGRADED": {
"prefix": "!"
}
}, },
"cmus": { "cmus": {
"playing": { "prefix": "" }, "playing": {
"paused": { "prefix": "" }, "prefix": ""
"stopped": { "prefix": "" }, },
"prev": { "prefix": "" }, "paused": {
"next": { "prefix": "" }, "prefix": ""
"shuffle-on": { "prefix": "" }, },
"shuffle-off": { "prefix": "" }, "stopped": {
"repeat-on": { "prefix": "" }, "prefix": ""
"repeat-off": { "prefix": "" } },
"prev": {
"prefix": ""
},
"next": {
"prefix": ""
},
"shuffle-on": {
"prefix": ""
},
"shuffle-off": {
"prefix": ""
},
"repeat-on": {
"prefix": ""
},
"repeat-off": {
"prefix": ""
}
}, },
"gpmdp": { "gpmdp": {
"playing": { "prefix": "" }, "playing": {
"paused": { "prefix": "" }, "prefix": ""
"stopped": { "prefix": "" }, },
"prev": { "prefix": "" }, "paused": {
"next": { "prefix": "" } "prefix": ""
},
"stopped": {
"prefix": ""
},
"prev": {
"prefix": ""
},
"next": {
"prefix": ""
}
}, },
"playerctl": { "playerctl": {
"playing": { "prefix": "" }, "playing": {
"paused": { "prefix": "" }, "prefix": ""
"stopped": { "prefix": "" }, },
"prev": { "prefix": "" }, "paused": {
"next": { "prefix": "" } "prefix": ""
},
"stopped": {
"prefix": ""
},
"prev": {
"prefix": ""
},
"next": {
"prefix": ""
}
}, },
"pasink": { "pasink": {
"muted": { "prefix": "" }, "muted": {
"unmuted": { "prefix": "" } "prefix": ""
},
"unmuted": {
"prefix": ""
}
}, },
"amixer": { "amixer": {
"muted": { "prefix": "" }, "muted": {
"unmuted": { "prefix": "" } "prefix": ""
},
"unmuted": {
"prefix": ""
}
}, },
"pasource": { "pasource": {
"muted": { "prefix": "" }, "muted": {
"unmuted": { "prefix": "" } "prefix": ""
},
"unmuted": {
"prefix": ""
}
}, },
"kernel": { "kernel": {
"prefix": "\uf17c" "prefix": "\uf17c"
}, },
"nic": { "nic": {
"wireless-up": { "prefix": "" }, "wireless-up": {
"wireless-down": { "prefix": "" }, "prefix": ""
"wired-up": { "prefix": "" }, },
"wired-down": { "prefix": "" }, "wireless-down": {
"tunnel-up": { "prefix": "" }, "prefix": ""
"tunnel-down": { "prefix": "" } },
"wired-up": {
"prefix": ""
},
"wired-down": {
"prefix": ""
},
"tunnel-up": {
"prefix": ""
},
"tunnel-down": {
"prefix": ""
}
}, },
"bluetooth": { "bluetooth": {
"ON": { "prefix": "" }, "ON": {
"OFF": { "prefix": "" }, "prefix": ""
"?": { "prefix": "" } },
"OFF": {
"prefix": ""
},
"?": {
"prefix": ""
}
}, },
"bluetooth2": { "bluetooth2": {
"ON": { "prefix": "" }, "ON": {
"warning": { "prefix": "" }, "prefix": ""
"critical": { "prefix": "" } },
"warning": {
"prefix": ""
},
"critical": {
"prefix": ""
}
}, },
"battery-upower": { "battery-upower": {
"charged": { "prefix": "", "suffix": "" }, "charged": {
"AC": { "suffix": "" }, "prefix": "",
"charging": {
"prefix": ["", "", "", "", ""],
"suffix": "" "suffix": ""
}, },
"discharging-10": { "prefix": "", "suffix": "" }, "AC": {
"discharging-25": { "prefix": "", "suffix": "" }, "suffix": ""
"discharging-50": { "prefix": "", "suffix": "" }, },
"discharging-80": { "prefix": "", "suffix": "" }, "charging": {
"discharging-100": { "prefix": "", "suffix": "" }, "prefix": [
"unlimited": { "prefix": "", "suffix": "" }, "",
"estimate": { "prefix": "" }, "",
"unknown-10": { "prefix": "", "suffix": "" }, "",
"unknown-25": { "prefix": "", "suffix": "" }, "",
"unknown-50": { "prefix": "", "suffix": "" }, ""
"unknown-80": { "prefix": "", "suffix": "" }, ],
"unknown-100": { "prefix": "", "suffix": "" } "suffix": ""
},
"discharging-10": {
"prefix": "",
"suffix": ""
},
"discharging-25": {
"prefix": "",
"suffix": ""
},
"discharging-50": {
"prefix": "",
"suffix": ""
},
"discharging-80": {
"prefix": "",
"suffix": ""
},
"discharging-100": {
"prefix": "",
"suffix": ""
},
"unlimited": {
"prefix": "",
"suffix": ""
},
"estimate": {
"prefix": ""
},
"unknown-10": {
"prefix": "",
"suffix": ""
},
"unknown-25": {
"prefix": "",
"suffix": ""
},
"unknown-50": {
"prefix": "",
"suffix": ""
},
"unknown-80": {
"prefix": "",
"suffix": ""
},
"unknown-100": {
"prefix": "",
"suffix": ""
}
}, },
"battery": { "battery": {
"charged": { "prefix": "", "suffix": "" }, "charged": {
"AC": { "suffix": "" }, "prefix": "",
"charging": {
"prefix": ["", "", "", "", ""],
"suffix": "" "suffix": ""
}, },
"discharging-10": { "prefix": "", "suffix": "" }, "AC": {
"discharging-25": { "prefix": "", "suffix": "" }, "suffix": ""
"discharging-50": { "prefix": "", "suffix": "" }, },
"discharging-80": { "prefix": "", "suffix": "" }, "charging": {
"discharging-100": { "prefix": "", "suffix": "" }, "prefix": [
"unlimited": { "prefix": "", "suffix": "" }, "",
"estimate": { "prefix": "" }, "",
"unknown-10": { "prefix": "", "suffix": "" }, "",
"unknown-25": { "prefix": "", "suffix": "" }, "",
"unknown-50": { "prefix": "", "suffix": "" }, ""
"unknown-80": { "prefix": "", "suffix": "" }, ],
"unknown-100": { "prefix": "", "suffix": "" } "suffix": ""
},
"discharging-10": {
"prefix": "",
"suffix": ""
},
"discharging-25": {
"prefix": "",
"suffix": ""
},
"discharging-50": {
"prefix": "",
"suffix": ""
},
"discharging-80": {
"prefix": "",
"suffix": ""
},
"discharging-100": {
"prefix": "",
"suffix": ""
},
"unlimited": {
"prefix": "",
"suffix": ""
},
"estimate": {
"prefix": ""
},
"unknown-10": {
"prefix": "",
"suffix": ""
},
"unknown-25": {
"prefix": "",
"suffix": ""
},
"unknown-50": {
"prefix": "",
"suffix": ""
},
"unknown-80": {
"prefix": "",
"suffix": ""
},
"unknown-100": {
"prefix": "",
"suffix": ""
}
}, },
"battery_all": { "battery_all": {
"charged": { "prefix": "", "suffix": "" }, "charged": {
"AC": { "suffix": "" }, "prefix": "",
"charging": {
"prefix": ["", "", "", "", ""],
"suffix": "" "suffix": ""
}, },
"discharging-10": { "prefix": "", "suffix": "" }, "AC": {
"discharging-25": { "prefix": "", "suffix": "" }, "suffix": ""
"discharging-50": { "prefix": "", "suffix": "" }, },
"discharging-80": { "prefix": "", "suffix": "" }, "charging": {
"discharging-100": { "prefix": "", "suffix": "" }, "prefix": [
"unlimited": { "prefix": "", "suffix": "" }, "",
"estimate": { "prefix": "" }, "",
"unknown-10": { "prefix": "", "suffix": "" }, "",
"unknown-25": { "prefix": "", "suffix": "" }, "",
"unknown-50": { "prefix": "", "suffix": "" }, ""
"unknown-80": { "prefix": "", "suffix": "" }, ],
"unknown-100": { "prefix": "", "suffix": "" } "suffix": ""
},
"discharging-10": {
"prefix": "",
"suffix": ""
},
"discharging-25": {
"prefix": "",
"suffix": ""
},
"discharging-50": {
"prefix": "",
"suffix": ""
},
"discharging-80": {
"prefix": "",
"suffix": ""
},
"discharging-100": {
"prefix": "",
"suffix": ""
},
"unlimited": {
"prefix": "",
"suffix": ""
},
"estimate": {
"prefix": ""
},
"unknown-10": {
"prefix": "",
"suffix": ""
},
"unknown-25": {
"prefix": "",
"suffix": ""
},
"unknown-50": {
"prefix": "",
"suffix": ""
},
"unknown-80": {
"prefix": "",
"suffix": ""
},
"unknown-100": {
"prefix": "",
"suffix": ""
}
}, },
"caffeine": { "caffeine": {
"activated": { "prefix": " " }, "activated": {
"deactivated": { "prefix": " " } "prefix": " "
},
"deactivated": {
"prefix": " "
}
}, },
"xrandr": { "xrandr": {
"on": { "prefix": " " }, "on": {
"off": { "prefix": " " }, "prefix": " "
"refresh": { "prefix": "" } },
"off": {
"prefix": " "
},
"refresh": {
"prefix": ""
}
}, },
"redshift": { "redshift": {
"day": { "prefix": "" }, "day": {
"night": { "prefix": "" }, "prefix": ""
"transition": { "prefix": "" } },
"night": {
"prefix": ""
},
"transition": {
"prefix": ""
}
}, },
"docker_ps": { "docker_ps": {
"prefix": "" "prefix": ""
@ -191,32 +493,67 @@
"prefix": "" "prefix": ""
}, },
"sensors2": { "sensors2": {
"temp": { "prefix": "" }, "temp": {
"fan": { "prefix": "" }, "prefix": ""
"cpu": { "prefix": "" } },
"fan": {
"prefix": ""
},
"cpu": {
"prefix": ""
}
}, },
"traffic": { "traffic": {
"rx": { "prefix": "" }, "rx": {
"tx": { "prefix": "" } "prefix": ""
},
"tx": {
"prefix": ""
}
}, },
"network_traffic": { "network_traffic": {
"rx": { "prefix": "" }, "rx": {
"tx": { "prefix": "" } "prefix": ""
},
"tx": {
"prefix": ""
}
}, },
"mpd": { "mpd": {
"playing": { "prefix": "" }, "playing": {
"paused": { "prefix": "" }, "prefix": ""
"stopped": { "prefix": "" }, },
"prev": { "prefix": "" }, "paused": {
"next": { "prefix": "" }, "prefix": ""
"shuffle-on": { "prefix": "" }, },
"shuffle-off": { "prefix": "" }, "stopped": {
"repeat-on": { "prefix": "" }, "prefix": ""
"repeat-off": { "prefix": "" } },
"prev": {
"prefix": ""
},
"next": {
"prefix": ""
},
"shuffle-on": {
"prefix": ""
},
"shuffle-off": {
"prefix": ""
},
"repeat-on": {
"prefix": ""
},
"repeat-off": {
"prefix": ""
}
}, },
"arch-update": { "arch-update": {
"prefix": " " "prefix": " "
}, },
"aur-update": {
"prefix": " "
},
"github": { "github": {
"prefix": "  " "prefix": "  "
}, },
@ -224,21 +561,41 @@
"prefix": "  " "prefix": "  "
}, },
"spotify": { "spotify": {
"song": { "prefix": "" }, "song": {
"playing": { "prefix": "" }, "prefix": ""
"paused": { "prefix": "" }, },
"prev": { "prefix": "" }, "playing": {
"next": { "prefix": "" } "prefix": ""
},
"paused": {
"prefix": ""
},
"prev": {
"prefix": ""
},
"next": {
"prefix": ""
}
}, },
"publicip": { "publicip": {
"prefix": "  " "prefix": "  "
}, },
"weather": { "weather": {
"clouds": { "prefix": "" }, "clouds": {
"rain": { "prefix": "" }, "prefix": ""
"snow": { "prefix": "" }, },
"clear": { "prefix": "" }, "rain": {
"thunder": { "prefix": "" } "prefix": ""
},
"snow": {
"prefix": ""
},
"clear": {
"prefix": ""
},
"thunder": {
"prefix": ""
}
}, },
"taskwarrior": { "taskwarrior": {
"prefix": "  " "prefix": "  "
@ -249,30 +606,56 @@
} }
}, },
"git": { "git": {
"main": { "prefix": "" }, "main": {
"new": { "prefix": "" }, "prefix": ""
"modified": { "prefix": "" }, },
"deleted": { "prefix": "" } "new": {
"prefix": ""
},
"modified": {
"prefix": ""
},
"deleted": {
"prefix": ""
}
}, },
"dunst": { "dunst": {
"muted": { "prefix": "" }, "muted": {
"unmuted": { "prefix": "" } "prefix": ""
},
"unmuted": {
"prefix": ""
}
}, },
"dunstctl": { "dunstctl": {
"muted": { "prefix": "" }, "muted": {
"unmuted": { "prefix": "" }, "prefix": ""
"unknown": { "prefix": "" } },
"unmuted": {
"prefix": ""
},
"unknown": {
"prefix": ""
}
}, },
"rofication": { "rofication": {
"prefix": "" "prefix": ""
}, },
"twmn": { "twmn": {
"muted": { "prefix": "" }, "muted": {
"unmuted": { "prefix": "" } "prefix": ""
},
"unmuted": {
"prefix": ""
}
}, },
"pihole": { "pihole": {
"enabled": { "prefix": "" }, "enabled": {
"disabled": { "prefix": "" } "prefix": ""
},
"disabled": {
"prefix": ""
}
}, },
"vpn": { "vpn": {
"prefix": "" "prefix": ""
@ -287,12 +670,22 @@
"prefix": "" "prefix": ""
}, },
"pomodoro": { "pomodoro": {
"off": { "prefix": "" }, "off": {
"paused": { "prefix": "" }, "prefix": ""
"work": { "prefix": "" }, },
"break": { "prefix": "" } "paused": {
"prefix": ""
},
"work": {
"prefix": ""
},
"break": {
"prefix": ""
}
},
"hddtemp": {
"prefix": ""
}, },
"hddtemp": { "prefix": "" },
"octoprint": { "octoprint": {
"prefix": " " "prefix": " "
}, },
@ -300,8 +693,16 @@
"prefix": "" "prefix": ""
}, },
"speedtest": { "speedtest": {
"running": { "prefix": ["\uf251", "\uf252", "\uf253"] }, "running": {
"not-running": { "prefix": "\uf144" } "prefix": [
"\uf251",
"\uf252",
"\uf253"
]
},
"not-running": {
"prefix": "\uf144"
}
}, },
"thunderbird": { "thunderbird": {
"prefix": "" "prefix": ""