WIP frobar 4
This commit is contained in:
parent
dc0048d8dc
commit
f15e407240
4 changed files with 209 additions and 139 deletions
|
@ -12,7 +12,7 @@
|
||||||
# is called pyton-mpd2 on PyPi but mpd2 in nixpkgs.
|
# is called pyton-mpd2 on PyPi but mpd2 in nixpkgs.
|
||||||
pkgs.python3Packages.buildPythonPackage rec {
|
pkgs.python3Packages.buildPythonPackage rec {
|
||||||
pname = "frobar";
|
pname = "frobar";
|
||||||
version = "3.1";
|
version = "4.0";
|
||||||
|
|
||||||
dependencies = with pkgs.python3Packages; [
|
dependencies = with pkgs.python3Packages; [
|
||||||
i3ipc
|
i3ipc
|
||||||
|
@ -29,6 +29,7 @@ pkgs.python3Packages.buildPythonPackage rec {
|
||||||
|
|
||||||
buildInputs = with pkgs; [
|
buildInputs = with pkgs; [
|
||||||
playerctl
|
playerctl
|
||||||
|
gtk4-layer-shell
|
||||||
];
|
];
|
||||||
|
|
||||||
preFixup = ''
|
preFixup = ''
|
||||||
|
@ -50,6 +51,7 @@ pkgs.python3Packages.buildPythonPackage rec {
|
||||||
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [
|
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [
|
||||||
pkgs.glib.out
|
pkgs.glib.out
|
||||||
pkgs.playerctl
|
pkgs.playerctl
|
||||||
|
pkgs.gtk4-layer-shell
|
||||||
];
|
];
|
||||||
|
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
|
149
hm/desktop/frobar/frobar/__init__.bak.py
Normal file
149
hm/desktop/frobar/frobar/__init__.bak.py
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
import rich.color
|
||||||
|
import rich.logging
|
||||||
|
import rich.terminal_theme
|
||||||
|
|
||||||
|
import frobar.common
|
||||||
|
import frobar.providers
|
||||||
|
from frobar.common import Alignment
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
# TODO Configurable
|
||||||
|
frogarized = (
|
||||||
|
"#092c0e",
|
||||||
|
"#143718",
|
||||||
|
"#5a7058",
|
||||||
|
"#677d64",
|
||||||
|
"#89947f",
|
||||||
|
"#99a08d",
|
||||||
|
"#fae2e3",
|
||||||
|
"#fff0f1",
|
||||||
|
"#e0332e",
|
||||||
|
"#cf4b15",
|
||||||
|
"#bb8801",
|
||||||
|
"#8d9800",
|
||||||
|
"#1fa198",
|
||||||
|
"#008dd1",
|
||||||
|
"#5c73c4",
|
||||||
|
"#d43982",
|
||||||
|
)
|
||||||
|
# TODO Not super happy with the color management,
|
||||||
|
# while using an existing library is great, it's limited to ANSI colors
|
||||||
|
|
||||||
|
def base16_color(color: int) -> tuple[int, int, int]:
|
||||||
|
hexa = frogarized[color]
|
||||||
|
return tuple(rich.color.parse_rgb_hex(hexa[1:]))
|
||||||
|
|
||||||
|
theme = rich.terminal_theme.TerminalTheme(
|
||||||
|
base16_color(0x0),
|
||||||
|
base16_color(0x0), # TODO Should be 0x7 but otherwise spacer is white
|
||||||
|
[
|
||||||
|
base16_color(0x0), # black
|
||||||
|
base16_color(0x8), # red
|
||||||
|
base16_color(0xB), # green
|
||||||
|
base16_color(0xA), # yellow
|
||||||
|
base16_color(0xD), # blue
|
||||||
|
base16_color(0xE), # magenta
|
||||||
|
base16_color(0xC), # cyan
|
||||||
|
base16_color(0x5), # white
|
||||||
|
],
|
||||||
|
[
|
||||||
|
base16_color(0x3), # bright black
|
||||||
|
base16_color(0x8), # bright red
|
||||||
|
base16_color(0xB), # bright green
|
||||||
|
base16_color(0xA), # bright yellow
|
||||||
|
base16_color(0xD), # bright blue
|
||||||
|
base16_color(0xE), # bright magenta
|
||||||
|
base16_color(0xC), # bright cyan
|
||||||
|
base16_color(0x7), # bright white
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
bar = frobar.common.Bar(theme=theme)
|
||||||
|
dual_screen = len(bar.children) > 1
|
||||||
|
left_preferred = 0 if dual_screen else None
|
||||||
|
right_preferred = 1 if dual_screen else None
|
||||||
|
|
||||||
|
workspaces_suffixes = "▲■"
|
||||||
|
workspaces_names = {
|
||||||
|
str(i + 1): f"{i + 1} {c}" for i, c in enumerate(workspaces_suffixes)
|
||||||
|
}
|
||||||
|
|
||||||
|
color = rich.color.Color.parse
|
||||||
|
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.providers.I3ModeProvider(color=color("red")),
|
||||||
|
alignment=Alignment.LEFT,
|
||||||
|
)
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.providers.I3WorkspacesProvider(custom_names=workspaces_names),
|
||||||
|
alignment=Alignment.LEFT,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if dual_screen:
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.providers.I3WindowTitleProvider(color=color("white")),
|
||||||
|
screen_num=0,
|
||||||
|
alignment=Alignment.CENTER,
|
||||||
|
)
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.providers.MprisProvider(color=color("bright_white")),
|
||||||
|
screen_num=right_preferred,
|
||||||
|
alignment=Alignment.CENTER,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.common.SpacerProvider(),
|
||||||
|
alignment=Alignment.LEFT,
|
||||||
|
)
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.providers.MprisProvider(color=color("bright_white")),
|
||||||
|
alignment=Alignment.LEFT,
|
||||||
|
)
|
||||||
|
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.providers.CpuProvider(),
|
||||||
|
screen_num=left_preferred,
|
||||||
|
alignment=Alignment.RIGHT,
|
||||||
|
)
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.providers.LoadProvider(),
|
||||||
|
screen_num=left_preferred,
|
||||||
|
alignment=Alignment.RIGHT,
|
||||||
|
)
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.providers.RamProvider(),
|
||||||
|
screen_num=left_preferred,
|
||||||
|
alignment=Alignment.RIGHT,
|
||||||
|
)
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.providers.TemperatureProvider(),
|
||||||
|
screen_num=left_preferred,
|
||||||
|
alignment=Alignment.RIGHT,
|
||||||
|
)
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.providers.BatteryProvider(),
|
||||||
|
screen_num=left_preferred,
|
||||||
|
alignment=Alignment.RIGHT,
|
||||||
|
)
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.providers.PulseaudioProvider(color=color("magenta")),
|
||||||
|
screen_num=right_preferred,
|
||||||
|
alignment=Alignment.RIGHT,
|
||||||
|
)
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.providers.NetworkProvider(color=color("blue")),
|
||||||
|
screen_num=left_preferred,
|
||||||
|
alignment=Alignment.RIGHT,
|
||||||
|
)
|
||||||
|
bar.add_provider(
|
||||||
|
frobar.providers.TimeProvider(color=color("cyan")),
|
||||||
|
alignment=Alignment.RIGHT,
|
||||||
|
)
|
||||||
|
|
||||||
|
bar.launch()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -1,149 +1,68 @@
|
||||||
import rich.color
|
from ctypes import CDLL
|
||||||
import rich.logging
|
|
||||||
import rich.terminal_theme
|
|
||||||
|
|
||||||
import frobar.common
|
CDLL("libgtk4-layer-shell.so")
|
||||||
import frobar.providers
|
|
||||||
from frobar.common import Alignment
|
import gi
|
||||||
|
|
||||||
|
gi.require_version("Gtk", "4.0")
|
||||||
|
gi.require_version("Gdk", "4.0")
|
||||||
|
gi.require_version("Gtk4LayerShell", "1.0")
|
||||||
|
|
||||||
|
from gi.repository import Gtk, Gdk
|
||||||
|
from gi.repository import Gtk4LayerShell as LayerShell
|
||||||
|
|
||||||
|
WIDTH = 1920
|
||||||
|
HEIGHT = 20
|
||||||
|
BLOCK = 8
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def draw_event(widget, ctx, w, h, data):
|
||||||
# TODO Configurable
|
text = " Nyan Cat Nyan cat "
|
||||||
frogarized = (
|
# Not tailored for surrounding spaces
|
||||||
"#092c0e",
|
|
||||||
"#143718",
|
|
||||||
"#5a7058",
|
|
||||||
"#677d64",
|
|
||||||
"#89947f",
|
|
||||||
"#99a08d",
|
|
||||||
"#fae2e3",
|
|
||||||
"#fff0f1",
|
|
||||||
"#e0332e",
|
|
||||||
"#cf4b15",
|
|
||||||
"#bb8801",
|
|
||||||
"#8d9800",
|
|
||||||
"#1fa198",
|
|
||||||
"#008dd1",
|
|
||||||
"#5c73c4",
|
|
||||||
"#d43982",
|
|
||||||
)
|
|
||||||
# TODO Not super happy with the color management,
|
|
||||||
# while using an existing library is great, it's limited to ANSI colors
|
|
||||||
|
|
||||||
def base16_color(color: int) -> tuple[int, int, int]:
|
ctx.select_font_face("DejaVuSansM Nerd Font")
|
||||||
hexa = frogarized[color]
|
ctx.set_font_size(14)
|
||||||
return tuple(rich.color.parse_rgb_hex(hexa[1:]))
|
(x, y, width, height, dx, dy) = ctx.text_extents(text)
|
||||||
|
|
||||||
theme = rich.terminal_theme.TerminalTheme(
|
ctx.translate(100, 0) # → ↓
|
||||||
base16_color(0x0),
|
print(x, y, width, height, dx, dy)
|
||||||
base16_color(0x0), # TODO Should be 0x7 but otherwise spacer is white
|
|
||||||
[
|
|
||||||
base16_color(0x0), # black
|
|
||||||
base16_color(0x8), # red
|
|
||||||
base16_color(0xB), # green
|
|
||||||
base16_color(0xA), # yellow
|
|
||||||
base16_color(0xD), # blue
|
|
||||||
base16_color(0xE), # magenta
|
|
||||||
base16_color(0xC), # cyan
|
|
||||||
base16_color(0x5), # white
|
|
||||||
],
|
|
||||||
[
|
|
||||||
base16_color(0x3), # bright black
|
|
||||||
base16_color(0x8), # bright red
|
|
||||||
base16_color(0xB), # bright green
|
|
||||||
base16_color(0xA), # bright yellow
|
|
||||||
base16_color(0xD), # bright blue
|
|
||||||
base16_color(0xE), # bright magenta
|
|
||||||
base16_color(0xC), # bright cyan
|
|
||||||
base16_color(0x7), # bright white
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
bar = frobar.common.Bar(theme=theme)
|
ctx.new_path()
|
||||||
dual_screen = len(bar.children) > 1
|
ctx.move_to(0, 0)
|
||||||
left_preferred = 0 if dual_screen else None
|
ctx.rel_line_to(width, 0)
|
||||||
right_preferred = 1 if dual_screen else None
|
ctx.rel_line_to(BLOCK, HEIGHT/2)
|
||||||
|
ctx.rel_line_to(-BLOCK, HEIGHT/2)
|
||||||
|
ctx.rel_line_to(-width, 0)
|
||||||
|
ctx.close_path()
|
||||||
|
ctx.set_source_rgb(1, 1, 1)
|
||||||
|
ctx.fill()
|
||||||
|
|
||||||
workspaces_suffixes = "▲■"
|
ctx.move_to(0, height)
|
||||||
workspaces_names = {
|
ctx.set_source_rgb(0, 0, 0)
|
||||||
str(i + 1): f"{i + 1} {c}" for i, c in enumerate(workspaces_suffixes)
|
ctx.show_text(text)
|
||||||
}
|
|
||||||
|
|
||||||
color = rich.color.Color.parse
|
|
||||||
|
|
||||||
bar.add_provider(
|
|
||||||
frobar.providers.I3ModeProvider(color=color("red")),
|
|
||||||
alignment=Alignment.LEFT,
|
|
||||||
)
|
|
||||||
bar.add_provider(
|
|
||||||
frobar.providers.I3WorkspacesProvider(custom_names=workspaces_names),
|
|
||||||
alignment=Alignment.LEFT,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if dual_screen:
|
def on_activate(app):
|
||||||
bar.add_provider(
|
|
||||||
frobar.providers.I3WindowTitleProvider(color=color("white")),
|
|
||||||
screen_num=0,
|
|
||||||
alignment=Alignment.CENTER,
|
|
||||||
)
|
|
||||||
bar.add_provider(
|
|
||||||
frobar.providers.MprisProvider(color=color("bright_white")),
|
|
||||||
screen_num=right_preferred,
|
|
||||||
alignment=Alignment.CENTER,
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
bar.add_provider(
|
|
||||||
frobar.common.SpacerProvider(),
|
|
||||||
alignment=Alignment.LEFT,
|
|
||||||
)
|
|
||||||
bar.add_provider(
|
|
||||||
frobar.providers.MprisProvider(color=color("bright_white")),
|
|
||||||
alignment=Alignment.LEFT,
|
|
||||||
)
|
|
||||||
|
|
||||||
bar.add_provider(
|
# monitors = Gdk.get_monitors()
|
||||||
frobar.providers.CpuProvider(),
|
|
||||||
screen_num=left_preferred,
|
|
||||||
alignment=Alignment.RIGHT,
|
|
||||||
)
|
|
||||||
bar.add_provider(
|
|
||||||
frobar.providers.LoadProvider(),
|
|
||||||
screen_num=left_preferred,
|
|
||||||
alignment=Alignment.RIGHT,
|
|
||||||
)
|
|
||||||
bar.add_provider(
|
|
||||||
frobar.providers.RamProvider(),
|
|
||||||
screen_num=left_preferred,
|
|
||||||
alignment=Alignment.RIGHT,
|
|
||||||
)
|
|
||||||
bar.add_provider(
|
|
||||||
frobar.providers.TemperatureProvider(),
|
|
||||||
screen_num=left_preferred,
|
|
||||||
alignment=Alignment.RIGHT,
|
|
||||||
)
|
|
||||||
bar.add_provider(
|
|
||||||
frobar.providers.BatteryProvider(),
|
|
||||||
screen_num=left_preferred,
|
|
||||||
alignment=Alignment.RIGHT,
|
|
||||||
)
|
|
||||||
bar.add_provider(
|
|
||||||
frobar.providers.PulseaudioProvider(color=color("magenta")),
|
|
||||||
screen_num=right_preferred,
|
|
||||||
alignment=Alignment.RIGHT,
|
|
||||||
)
|
|
||||||
bar.add_provider(
|
|
||||||
frobar.providers.NetworkProvider(color=color("blue")),
|
|
||||||
screen_num=left_preferred,
|
|
||||||
alignment=Alignment.RIGHT,
|
|
||||||
)
|
|
||||||
bar.add_provider(
|
|
||||||
frobar.providers.TimeProvider(color=color("cyan")),
|
|
||||||
alignment=Alignment.RIGHT,
|
|
||||||
)
|
|
||||||
|
|
||||||
bar.launch()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
window = Gtk.Window(application=app, title="frobar")
|
||||||
main()
|
window.set_default_size(WIDTH, HEIGHT)
|
||||||
|
|
||||||
|
LayerShell.init_for_window(window)
|
||||||
|
LayerShell.set_layer(window, LayerShell.Layer.TOP)
|
||||||
|
LayerShell.set_anchor(window, LayerShell.Edge.BOTTOM, True)
|
||||||
|
LayerShell.auto_exclusive_zone_enable(window)
|
||||||
|
|
||||||
|
drawingarea = Gtk.DrawingArea()
|
||||||
|
drawingarea.set_draw_func(draw_event, None)
|
||||||
|
|
||||||
|
window.set_child(drawingarea)
|
||||||
|
window.present()
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
app = Gtk.Application(application_id="fr.frogeye.frobar")
|
||||||
|
app.connect("activate", on_activate)
|
||||||
|
app.run(None)
|
||||||
|
|
|
@ -2,7 +2,7 @@ from setuptools import setup
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="frobar",
|
name="frobar",
|
||||||
version="3.1",
|
version="4.0",
|
||||||
install_requires=[
|
install_requires=[
|
||||||
"i3ipc",
|
"i3ipc",
|
||||||
"psutil",
|
"psutil",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue