refine gruvbox-95

This commit is contained in:
thomasabishop 2024-04-07 19:22:01 +01:00
parent 51ec884532
commit 13016d4098
42 changed files with 558 additions and 624 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 757 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

BIN
gruvbox-95/icons/cpu-98.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 794 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="3440"
height="1440"
viewBox="0 0 3439.9999 1440"
version="1.1"
id="svg622"
sodipodi:docname="plain_gruv_dell.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
inkscape:export-filename="blue_gruv_dell.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs622" />
<sodipodi:namedview
id="namedview622"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="0.59993751"
inkscape:cx="1871.0282"
inkscape:cy="834.25355"
inkscape:window-width="1715"
inkscape:window-height="1392"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg622" />
<title
id="title1">Green No Grid</title>
<rect
fill="#000e07"
x="0"
y="0"
width="3440"
height="1440"
id="rect1"
style="fill:#458588;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5456" />
<metadata
id="metadata1">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>Green No Grid</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="1920"
height="1080"
viewBox="0 0 1920 1080"
version="1.1"
id="svg622"
sodipodi:docname="blue_gruv_thinkpad.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
inkscape:export-filename="blue_gruv_thinkpad.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="0.31666667"
inkscape:cx="958.42105"
inkscape:cy="1223.6842"
inkscape:window-width="1715"
inkscape:window-height="1392"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg622" />
<defs
id="defs622" />
<title
id="title1">Green No Grid</title>
<rect
fill="#000e07"
x="0"
y="0"
width="1920"
height="1080"
id="rect3"
style="fill:#458588;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1" />
<metadata
id="metadata3">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>Green No Grid</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="2560"
height="1440"
viewBox="0 0 2559.9999 1440"
version="1.1"
id="svg622"
sodipodi:docname="plain_gruv_aoc.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
inkscape:export-filename="blue_gruv_aoc.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="0.2796875"
inkscape:cx="1278.2123"
inkscape:cy="720.44693"
inkscape:window-width="1715"
inkscape:window-height="1392"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg622" />
<defs
id="defs622" />
<title
id="title1">Green No Grid</title>
<rect
fill="#000e07"
x="0"
y="0"
width="2560"
height="1440"
id="rect1"
style="fill:#458588;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.33333" />
<metadata
id="metadata1">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>Green No Grid</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -52,8 +52,8 @@ input {
general {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
gaps_in = 1
gaps_out = 0
gaps_in = 3
gaps_out = 6
border_size = 2
# col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
# col.inactive_border = rgba(595959aa)
@ -87,7 +87,7 @@ decoration {
}
animations {
enabled = no
enabled = yes
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more

View file

@ -1,9 +1,9 @@
preload = ~/Pictures/Wallpapers/plain_gruv_thinkpad.png
preload = ~/Pictures/Wallpapers/plain_gruv_aoc.png
preload = ~/Pictures/Wallpapers/plain_gruv_dell.png
preload = ~/dotfiles/gruvbox-95/wallpapers/blue_gruv_thinkpad.png
preload = ~/dotfiles/gruvbox-95/wallpapers/blue_gruv_dell.png
preload = ~/dotfiles/gruvbox-95/wallpapers/blue_gruv_aoc.png
wallpaper = HDMI-A-1,~/Pictures/Wallpapers/plain_gruv_dell.png
wallpaper = DP-2,~/Pictures/Wallpapers/plain_gruv_aoc.png
wallpaper = eDP-1,~/Pictures/Wallpapers/plain_gruv_thinkpad.png
wallpaper = HDMI-A-1,~/dotfiles/gruvbox-95/wallpapers/blue_gruv_dell.png
wallpaper = DP-2,~/dotfiles/gruvbox-95/wallpapers/blue_gruv_aoc.png
wallpaper = eDP-1,~/dotfiles/gruvbox-95/wallpapers/blue_gruv_thinkpad.png
splash = false

View file

@ -1,7 +1,7 @@
configuration {
/* modes: "window,drun,run,ssh";*/
font: "Sys TT 12";
location: 1;
location: 7;
kb-row-up: "Up,Control+k";
kb-row-down: "Down,Control+j";
kb-cancel: "Escape,Control+c";
@ -22,7 +22,7 @@ cycle: false;
/* run-shell-command: "{terminal} -e {cmd}";*/
/* window-command: "wmctrl -i -R {window}";*/
/* window-match-fields: "all";*/
/* icon-theme: ;*/
icon-theme: 'Raleigh' ;
/* drun-match-fields: "name,generic,exec,categories,keywords";*/
/* drun-categories: ;*/
/* drun-show-actions: false;*/

View file

@ -17,7 +17,7 @@
selected-urgent-background: var(red);
alternate-active-background: var(lightbg);
spacing: 2;
blue: rgba ( 152, 151, 26 , 100 % );
blue: rgba (69, 133, 136, 80 % );
alternate-normal-foreground: var(foreground);
urgent-background: var(background);
selected-normal-foreground: var(foreground);
@ -26,7 +26,7 @@
selected-active-background: var(blue);
active-background: var(background);
selected-normal-background: var(lightfg);
alternate-normal-background: var(lightbg);
alternate-normal-background: var(background);
foreground: rgba ( 40, 40, 40, 100 % );
selected-urgent-foreground: var(background);
normal-foreground: var(foreground);
@ -34,9 +34,9 @@
alternate-active-foreground: var(blue);
}
element {
padding: 2px ;
padding: 8px 2px 0px 2px;
cursor: pointer;
spacing: 5px ;
spacing: 8px ;
border: 0;
}
element normal.normal {
@ -52,8 +52,8 @@ element normal.active {
text-color: var(active-foreground);
}
element selected.normal {
background-color: var(selected-normal-background);
text-color: var(selected-normal-foreground);
background-color: var(selected-normal-background);
text-color: #ebdbb2;
}
element selected.urgent {
@ -83,8 +83,9 @@ element-text {
text-color: inherit;
}
element-icon {
padding: 0 0 6px 0;
background-color: transparent;
size: 1.0000em ;
size: 1.00000em ;
cursor: inherit;
text-color: inherit;
}
@ -92,9 +93,12 @@ window {
padding: 5;
background-color: var(background);
width: 20%;
border: 2;
border-color: #ebdbb2;
margin: 1 10;
}
mainbox {
padding: 0;
padding: 4;
border: 0;
}
message {
@ -103,7 +107,7 @@ message {
border: 2px dash 0px 0px ;
}
textbox {
text-color: var(foreground);
text-color: #f9f5d7;
}
listview {
padding: 2px 0px 0px ;
@ -116,9 +120,9 @@ listview {
scrollbar {
width: 2px ;
padding: 0;
handle-width: 7px ;
handle-width: 6px ;
border: 0;
handle-color: rgba ( 102, 92, 84, 100% );
handle-color: #665c54;
}
sidebar {
border-color: var(separatorcolor);
@ -147,11 +151,11 @@ textbox-num-sep {
text-color: var(grey);
}
inputbar {
background-color: rgba ( 251, 241, 199, 100% ) ;
padding: 2px ;
spacing: 2px ;
background-color: #f9f5d7;
padding: 8px 2px 6px 2px;
spacing: 5px ;
text-color: var(normal-foreground);
border: 1;
border: 2px;
border-color: rgba ( 102, 92, 84, 100% );
children: [ "prompt","textbox-prompt-colon","entry","num-filtered-rows","textbox-num-sep","num-rows","case-indicator" ];
}

1
scripts/screenshot.sh Executable file
View file

@ -0,0 +1 @@
grim -g "$(slurp)" - | swappy -f -

View file

@ -1,37 +0,0 @@
# Source = https://github.com/hyprwm/Hyprland/discussions/830
#!/usr/bin/env bash
# rofi -show window for Hyprland, basically
state="$(hyprctl -j clients)"
active_window="$(hyprctl -j activewindow)"
current_addr="$(echo "$active_window" | gojq -r '.address')"
window="$(echo "$state" |
gojq -r '.[] | select(.monitor != -1 ) | "\(.address) \(.workspace.name) \(.title)"' |
sed "s|$current_addr|focused ->|" |
sort -r |
tofi --fuzzy-match true)"
addr="$(echo "$window" | awk '{print $1}')"
ws="$(echo "$window" | awk '{print $2}')"
if [[ "$addr" =~ focused* ]]; then
echo 'already focused, exiting'
exit 0
fi
fullscreen_on_same_ws="$(echo "$state" | gojq -r ".[] | select(.fullscreen == true) | select(.workspace.name == \"$ws\") | .address")"
if [[ "$window" != "" ]]; then
if [[ "$fullscreen_on_same_ws" == "" ]]; then
hyprctl dispatch focuswindow address:${addr}
else
# If we want to focus app_A and app_B is fullscreen on the same workspace,
# app_A will get focus, but app_B will remain on top.
# This monstrosity is to make sure app_A will end up on top instead.
# XXX: doesn't handle fullscreen 0, but I don't care.
notify-send 'Complex switch' "$window"
hyprctl --batch "dispatch focuswindow address:${fullscreen_on_same_ws}; dispatch fullscreen 1; dispatch focuswindow address:${addr}; dispatch fullscreen 1"
fi
fi

View file

@ -36,10 +36,10 @@ def main():
output = {}
try:
if timer_active():
output["text"] = "󱫐"
output["text"] = "Timer active"
output["class"] = "active"
else:
output["text"] = "󱫦"
output["text"] = "Timer inactive"
output["class"] = "inactive"
except Exception as e:
output["text"] = "Error"

View file

@ -1,166 +0,0 @@
#! /usr/local/bin/python3
import requests
import os
from textwrap import dedent
import logging
import base64
import json
import pytz
from datetime import datetime, timedelta
from tabulate import tabulate # third-party module, must be installed on system
TOGGL_API_URL = "https://api.track.toggl.com/api/v9/"
TOGGL_API_KEY = os.getenv("TOGGL_API_KEY")
TOGGL_WORKSPACE_ID = os.getenv("TOGGL_WORKSPACE_ID")
ENCODED_TOGGL_API_KEY = str(base64.b64encode(TOGGL_API_KEY.encode("utf-8")), "utf-8")
HEADERS = {
"content-type": "application/json",
"Authorization": "Basic %s" % ENCODED_TOGGL_API_KEY,
}
def get_data(endpoint):
response = requests.get(
f"https://api.track.toggl.com/api/v9/{endpoint}",
headers={
"content-type": "application/json",
"Authorization": "Basic %s" % ENCODED_TOGGL_API_KEY,
},
)
if response.status_code == 200:
return response.json()
else:
raise Exception(
f"Failed to fetch data from API. Status code: {response.status_code}"
)
def get_project_name(project_id: int) -> str:
try:
projects = get_data(f"workspaces/{TOGGL_WORKSPACE_ID}/projects")
project = [project for project in projects if project["id"] == project_id][0]
return project["name"]
except Exception as e:
logging.warning(f"Error. Could not retrieve project name: {e}")
def get_human_date(timestamp):
return datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S%z").strftime(
"%a %d %b (%H:%M)"
)
def get_time_difference(start, end):
format = "%Y-%m-%dT%H:%M:%S%z"
datetime1 = datetime.strptime(start, format)
datetime2 = datetime.strptime(end, format)
difference = datetime2 - datetime1
return get_hms(int(difference.total_seconds()))
def get_hms(unix_seconds):
return str(timedelta(seconds=unix_seconds))
def timer_is_running():
active_session = get_data("me/time_entries/current")
if not active_session:
return False
else:
return True
# def get_active_time_entry():
# active_session = get_data("me/time_entries/current")
# if not active_session:
# return "No timer running"
# else:
# current_time = datetime.now(pytz.utc).strftime("%Y-%m-%dT%H:%M:%S%z")
# entry = {
# "project_id": get_project_name(active_session["project_id"]),
# "duration": get_time_difference(active_session["start"], current_time),
# "start": get_human_date(active_session["start"]),
# "description": active_session["description"],
# }
# return print_table([entry])
def process_active_entry(entry):
time_now = datetime.now(pytz.utc).strftime("%Y-%m-%dT%H:%M:%S%z")
return {
"project_id": get_project_name(entry["project_id"]),
"duration": get_time_difference(entry["start"], time_now),
"start": get_human_date(entry["start"]),
"description": entry["description"],
}
def list_recent_time_entries():
try:
recent_entries = get_data("me/time_entries")
properties = ["project_id", "duration", "start", "description"]
transformers = {
"project_id": get_project_name,
"start": get_human_date,
"duration": get_hms,
}
processed_entries = []
first_entry = recent_entries[0]
if not first_entry["stop"]:
active_entry = process_active_entry(first_entry)
print(active_entry)
for entry in recent_entries[:5]:
processed_entry = {}
for prop in properties:
if prop in transformers:
processed_entry[prop] = transformers[prop](entry[prop]) or "null"
else:
processed_entry[prop] = entry[prop] or "null"
processed_entries.append(processed_entry)
processed_entries[0] = active_entry
return dedent(
tabulate(processed_entries, headers="keys", tablefmt="simple_outline")
)
except Exception as e:
return f"Error. Could not retrieve recent time entries: {e}"
def stop_running_timer(entry_id):
patch_url = (
f"{TOGGL_API_URL}workspaces/{TOGGL_WORKSPACE_ID}/time_entries/{entry_id}/stop"
)
response = requests.patch(patch_url, headers=HEADERS)
if response.status_code != 200:
print("Error: timer not stopped")
print(response.content)
else:
return
def main():
output = {}
try:
if timer_is_running():
output["text"] = " Tracker: active"
output["class"] = "active"
else:
output["text"] = " Tracker: inactive"
output["class"] = "inactive"
output["tooltip"] = list_recent_time_entries()
except Exception as e:
output["text"] = "Error"
print(json.dumps(output))
if __name__ == "__main__":
main()
print(list_recent_time_entries())
# print(get_project_name(193325937))
# print(list_recent_time_entries())
# print(get_active_time_entry())
# print(get_active_session())
# stop_running_timer(3318296941)

View file

@ -52,10 +52,15 @@
margin: 0;
border-radius: 0;
color: #282828;
background-color: #a89983;
border: 2px solid;
border-color: #ebdbb2 #665c54 #665c54 #ebdbb2;
padding: 0;
background-color: #bdae93;
border: 2px solid #ebdbb2;
/* border-left: 2px solid #ebdbb2; */
/* border-top: 2px solid #ebdbb2; */
/* border-right: 2px solid #665c54; */
/* border-bottom: 2px solid #665c54; */
padding: 2px 0;
transition: background 0.15s ease-in-out;
}
@ -402,6 +407,12 @@
.control-center {
/* The Control Center which contains the old notifications + widgets */
box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2);
border-left: 2px solid #ebdbb2;
border-top: 2px solid #ebdbb2;
border-right: 2px solid #665c54;
border-bottom: 2px solid #665c54;
background: #bdae93;
border-radius: 0px;
}
@ -411,11 +422,6 @@
opacity: 0.5;
}
.control-center .control-center-list {
/* List of notifications */
background: transparent;
}
.control-center .control-center-list .notification {
box-shadow: none;
/* box-shadow: */

View file

@ -1,106 +1,228 @@
{
"layer": "top",
"position": "bottom",
"margin": "0",
"height": 25,
"spacing": 0,
"modules-left": [
"custom/os",
"hyprland/workspaces",
"wlr/taskbar"
"height": 20,
"spacing": "",
"modules-left": [
"image#os",
"wlr/taskbar"
],
"modules-center": [
],
"modules-right": [
"network",
"bluetooth",
"cpu",
"memory",
"temperature",
"backlight",
"disk",
"custom/diskBackup",
"battery",
"custom/wakatime",
"pulseaudio",
"clock",
"custom/timewarrior",
"custom/lock",
"custom/restart",
"custom/shutdown",
"custom/notification",
],
"group/timeTracker",
"group/workspaceList",
"group/metrics",
"group/clockOutput",
"group/controls",
],
"group/clockOutput": {
"orientation": "horizontal",
"modules": [
"clock",
]
},
"wlr/taskbar": {
"group/workspaceList": {
"orientation": "horizontal",
"modules": [
"hyprland/workspaces",
]
},
"group/timeTracker": {
"orientation": "horizontal",
"modules": [
"custom/timewarrior",
]
},
"group/metrics": {
"orientation": "horizontal",
"modules": [
"image#internet",
"network",
"image#bluetooth",
"bluetooth",
"image#memory",
"memory",
"image#cpu",
"cpu",
"image#harddrive",
"disk",
"image#backup",
"custom/diskBackup",
"image#backlight",
"backlight",
"image#volume",
"pulseaudio",
"image#battery",
"battery",
"image#code",
"custom/wakatime",
]
},
"group/controls": {
"orientation": "horizontal",
"modules": [
"image#timewarrior",
"image#notification",
"image#keys",
"image#restart",
"image#shutdown",
]
},
"hyprland/workspaces": {
"format": "{icon}",
"on-click": "activate",
"sort-by-number": false,
"format-icons": {
"1": "Workspace 1",
"2": "Workspace 2",
"3": "Workspace 3",
"4": "Workspace 4",
"5": "Workspace 5",
},
},
"image#code": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/binary-98.png",
"size": 22,
"interval": 5,
},
"image#battery": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/battery-98.png",
"size": 22,
"interval": 5,
},
"image#backup": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/floppy-98.png",
"size": 22,
"interval": 5,
},
"image#harddrive": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/hardisk-98.png",
"size": 22,
"interval": 5,
},
"image#volume": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/sound-98.png",
"size": 19,
"interval": 5,
},
"image#backlight": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/brightness-98.png",
"size": 18,
"interval": 5,
},
"image#memory": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/memory-98.png",
"size": 22,
"interval": 5,
},
"image#cpu": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/processor-98.png",
"size": 22,
"interval": 5,
},
"image#internet": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/internet-98.png",
"size": 22,
"interval": 5,
},
"image#bluetooth": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/bluetooth.png",
"size": 20,
"interval": 5,
},
"image#os": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/computer-98.png",
"size": 26,
"interval": 5,
},
"image#keys": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/keys-98.png",
"size": 26,
"interval": 5,
"on-click": "sleep 0.1 && hyprlock",
},
"image#restart": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/restart-98.png",
"size": 26,
"interval": 5,
"on-click": "sleep 0.1 && systemctl reboot",
},
"image#shutdown": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/poweroff-98.png",
"size": 26,
"interval": 5,
"on-click": "sleep 0.1 && systemctl poweroff",
},
"image#notification": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/notification-98.png",
"size": 26,
"interval": 5,
"on-click": "sleep 0.2 && swaync-client -t -sw",
},
"image#timewarrior": {
"path": "/home/thomas/dotfiles/gruvbox-95/icons/timewarrior-98.png",
"size": 26,
"interval": 5,
"on-click": "sleep 0.15 && timew stop && notify-send 'Time Warrior' 'Timer stopped'",
"on-click-right": "sleep 0.1 && timew continue && notify-send 'Time Warrior' 'Timer resumed'",
},
"wlr/taskbar": {
"format": "{icon}",
"icon-size": 20,
"icon-theme": "Pop",
"icon-size": 22,
"icon-theme": "Raleigh",
"tooltip-format": "{title}",
"on-click": "activate",
"on-click-middle": "close",
"ignore-list": [
"Alacritty"
],
"app_ids-mapping": {
"firefoxdeveloperedition": "firefox-developer-edition"
},
"rewrite": {
"Firefox Web Browser": "Firefox",
"Foot Server": "Terminal"
}
},
"keyboard-state": {
"numlock": true,
"capslock": true,
"format": "{name} {icon}",
"format-icons": {
"locked": "",
"unlocked": ""
}
},
"mpd": {
"format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ",
"format-disconnected": "Disconnected ",
"format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ",
"unknown-tag": "N/A",
"interval": 2,
"consume-icons": {
"on": " "
},
"random-icons": {
"off": "<span color=\"#f53c3c\"></span> ",
"on": " "
},
"repeat-icons": {
"on": " "
},
"single-icons": {
"on": "1 "
},
"state-icons": {
"paused": "",
"playing": ""
},
"tooltip-format": "MPD (connected)",
"tooltip-format-disconnected": "MPD (disconnected)"
},
"idle_inhibitor": {
"format": "󰖨"
},
"tray": {
"spacing": 10
},
"clock": {
"format": "{:%H:%M}",
"format-alt": "{:%d/%m/%Y}"
},
"cpu": {
"format": "CPU: {usage}%",
"tooltip": false
"format": "{usage}%",
"tooltip": "CPU"
},
"memory": {
"format": "Mem: {}%",
"format": "{}%",
"tooltip": "Memory"
},
"temperature": {
"critical-threshold": 80,
"format": "Temp: {temperatureC}°C",
@ -110,157 +232,86 @@
"󱩅"
]
},
"backlight": {
"device": "acpi_video1",
"format": "Dim: {percent}%",
"format-icons": [
"󰪞 ",
"󰪟 ",
"󰪠 ",
"󰪡 ",
"󰪢 ",
"󰪣 ",
"󰪥 "
]
"format": "{percent}%",
},
"battery": {
"states": {
"warning": 30,
"critical": 15
},
"format": "Bat: {capacity}%",
"format-charging": "Bat: {capacity}%",
"format-plugged": "Bat: {capacity}%",
"format-icons": [
"󰁻",
"󰁼",
"󰁿",
"󰂀",
"󰁹"
]
},
"battery#bat2": {
"bat": "BAT2"
"format": "{capacity}%",
"format-charging": "{capacity}%",
"format-plugged": "{capacity}%",
},
"network": {
"format-wifi": "Net: {essid}",
"format-wifi": "{essid}",
"format-ethernet": "{ipaddr}/{cidr}",
"tooltip-format": "{ifname} via {gwaddr}",
"format-linked": "{ifname} (No IP)",
"format-disconnected": "Net: none",
"format-alt": "Sig: {essid} ({signalStrength}%)"
"format-alt": "{essid} ({signalStrength}%)"
},
"pulseaudio": {
"format": "Vol: {volume}%",
"format-bluetooth": "Vol: {volume}%",
"format": "{volume}%",
"format-bluetooth": "{volume}%",
"format-bluetooth-muted": "",
"format-muted": "Vol: mute",
"format-source": "Vol: {volume}%",
"format-source-muted": "Vole: mute",
"format-icons": {
"headphone": "",
"hands-free": "",
"phone": "",
"portable": "",
"car": "",
"default": [
"",
"",
""
]
},
"format-muted": "Mute",
"format-source": "{volume}%",
"format-source-muted": "Mute",
"on-click": "pavucontrol"
},
"disk": {
"interval": 30,
"format": "Disk: {percentage_used}%",
"format": "{percentage_used}%",
"path": "/home"
},
"bluetooth": {
"controller": "bluetoothctl",
"format": "BT: active",
"format-connected": "BT: connected",
"format-alt": "BT: {device_alias}",
"format-connected-battery": "BT: {device_battery_percentage}%",
"format": "Active",
"format-connected": "Connected",
"format-alt": "{device_alias}",
"format-connected-battery": "{device_battery_percentage}%",
"tooltip-format": "{controller_alias}\t{controller_address}\n\n{num_connections} connected",
"tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}",
"tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
"tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}%"
},
"custom/media": {
"format": "{icon} {}",
"return-type": "json",
"max-length": 40,
"format-icons": {
"spotify": "",
"default": "🎜"
},
"escape": true,
"exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null"
},
"custom/os": {
"format": "",
"tooltip": false
},
},
"custom/wakatime": {
"exec": "source $HOME/.env && python3 $HOME/.config/waybar/resources/custom_modules/wakatime.py",
"format": "Code: {}",
"format": "{}",
"return-type": "json",
"interval": 600
},
"custom/timewarrior": {
"exec": "python3 $HOME/.config/waybar/resources/custom_modules/time_warrior_waybar.py",
"format": "{}",
"on-click": "sleep 0.15 && timew stop && notify-send 'Time Warrior' 'Timer stopped'",
"on-click-right": "sleep 0.1 && timew continue && notify-send 'Time Warrior' 'Timer resumed'",
"return-type": "json",
"interval": 5,
"tooltip": false
},
"custom/logout": {
"format": "󰛂",
"on-click": "sleep 0.1 && wlogout",
"tooltip": false
},
"custom/notification": {
"tooltip": false,
"format": "{icon}",
"format-icons": {
"notification": "<span color=\"#b8bb26\">󰂝</span>",
"none": "󰂚",
"dnd-notification": "󰂛",
"dnd-none": "󰂛",
"inhibited-notification": "󰂛",
"inhibited-none": "󰂚",
"dnd-inhibited-notification": "󰂛",
"dnd-inhibited-none": "󰂚",
},
"return-type": "json",
"exec-if": "which swaync-client",
"exec": "swaync-client -swb",
"on-click": "sleep 0.2 && swaync-client -t -sw",
"on-click-right": "swaync-client -d -sw",
"escape": true
},
"custom/diskBackup": {
"format": "Bak: {}",
"format": "{}",
"exec": "df -h /media/backups | awk 'NR==2{print $5}'",
"interval": 60,
"tooltip": false
},
"custom/lock": {
"format": "󰍁",
"on-click": "hyprlock",
"tooltip": false
},
"custom/shutdown": {
"custom/shutdown": {
"format": "󱠡",
"tooltip": false,
"on-click": "systemctl poweroff"
},
"custom/restart": {
"format": "󰑓",
"tooltip": false,
"on-click": "systemctl reboot"
}
}

View file

@ -36,10 +36,10 @@ def main():
output = {}
try:
if timer_active():
output["text"] = "󱫐"
output["text"] = "Timer running"
output["class"] = "active"
else:
output["text"] = "󱫦"
output["text"] = "No timer"
output["class"] = "inactive"
except Exception as e:
output["text"] = "Error"

View file

@ -1,219 +1,117 @@
* {
font-weight: 400;
min-height: 0;
}
window#waybar {
font-family: "Sys TT", "Font Awesome";
background-color: #458588;
border-bottom: 2px solid #282828;
font-size: 16px;
background-color: #bdae93;
padding: 2px 0;
border-left: 2px solid #ebdbb2;
border-top: 2px solid #ebdbb2;
border-right: 2px solid #665c54;
border-bottom: 2px solid #665c54;
}
button {
border-radius: 0;
#workspaces button {
font-size: 14px;
}
#workspaces button.active {
font-style: italic;
}
#workspaces button:hover {
background-color: transparent;
border: none;
opacity: 1;
}
#timeTracker,
#workspaceList,
#clockOutput,
#metrics {
background-color: #bdae93;
border-left: 2px solid #665c54;
border-top: 2px solid #665c54;
border-right: 2px solid #ebdbb2;
border-bottom: 2px solid #ebdbb2;
margin: 5px 3px;
padding: 0 10px;
}
#controls,
#workspaces > *:last-child {
margin-right: 3px;
}
#image.timewarrior,
#image.notification,
#image.os,
#image.keys,
#image.shutdown,
#image.restart,
#taskbar button {
background-color: #bdae93;
color: #282828;
border-top: 2px solid #ebdbb2;
border-left: 2px solid #ebdbb2;
border-bottom: 2px solid #665c54;
border-right: 2px solid #665c54;
margin: 5px 3px;
margin-right: 0;
padding: 3px;
}
#image.code,
#image.battery,
#image.backup,
#image.harddrive,
#image.volume,
#image.backlight,
#image.cpu,
#image.memory,
#image.internet,
#image.bluetooth {
margin-right: 5px;
}
#image.code,
#image.battery,
#image.backup,
#image.harddrive,
#image.volume,
#image.backlight,
#image.cpu,
#image.memory {
margin-left: 10px;
}
#image.backlight,
#image.volume {
padding-bottom: 2px;
}
#image.harddrive,
#image.backup {
padding-bottom: 5px;
}
#network {
margin-right: 10px;
}
tooltip {
color: #282828;
border-width: 0;
border-radius: 0;
font-weight: 400;
background-color: #bdae93;
box-shadow: none;
border-left: 1px solid #ebdbb2;
border-top: 1px solid #ebdbb2;
border-right: 1px solid #665c54;
border-bottom: 1px solid #665c54;
padding: 4px 8px;
box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2);
}
tooltip label {
color: #282828;
}
/* Layout */
#taskbar {
margin-right: 10px;
}
#clock,
#custom-wakatime,
#network,
#bluetooth,
#cpu,
#memory,
#temperature,
#backlight,
#pulseaudio,
#disk,
#custom-diskBackup,
#battery {
padding: 2px 8px 0;
margin: 5px 3px 6px;
}
#taskbar button {
margin: 5px 0 6px;
font-size: 18px;
padding: 0px 4px;
}
#custom-timewarrior,
#custom-notification,
#custom-lock,
#custom-shutdown,
#custom-restart,
#idle_inhibitor,
#custom-logout {
margin: 5px 0 6px;
font-size: 18px;
padding: 0px 8px;
/* margin: 8px 0 10px; */
}
#taskbar button {
background-color: #a89984;
border: 2px solid; /* Base border */
border-color: #ebdbb2 #665c54 #665c54 #ebdbb2;
}
#workspaces button {
margin: 5px 0 6px;
font-size: 18px;
color: #ebdbb2;
padding: 3px 5px 0;
background-color: #665c54;
border: 2px solid; /* Base border */
border-color: #928374 #282828 #282828 #928374;
}
#workspaces > *:last-child {
margin-right: 10px;
}
#custom-notification {
margin-right: 5px;
}
/* Colours */
#taskbar button.active {
background-color: #ebdbb2;
border: 2px solid; /* Base border */
border-color: #fbf1c7 #a89984 #a89984 #fbf1c7;
}
#battery,
#battery.charging,
#battery.plugged {
color: #282828;
background-color: #a89984;
border: 2px solid; /* Base border */
border-color: #ebdbb2 #665c54 #665c54 #ebdbb2;
}
#clock {
color: #282828;
background-color: #a89984;
border: 2px solid; /* Base border */
border-color: #ebdbb2 #665c54 #665c54 #ebdbb2;
}
#cpu,
#memory,
#temperature,
#backlight {
color: #282828;
background-color: #a89984;
border: 2px solid; /* Base border */
border-color: #ebdbb2 #665c54 #665c54 #ebdbb2;
color: #282828;
}
#disk,
#custom-diskBackup {
color: #282828;
background-color: #a89984;
border: 2px solid; /* Base border */
border-color: #ebdbb2 #665c54 #665c54 #ebdbb2;
}
#network,
#bluetooth,
#pulseaudio {
color: #282828;
background-color: #a89984;
border: 2px solid; /* Base border */
border-color: #ebdbb2 #665c54 #665c54 #ebdbb2;
/* background-color: #c0c0c0; */
/* border: 2px solid; /1* Base border *1/ */
/* border-color: #ffffff #808080 #808080 #ffffff; */
/* color: #282828; */
}
#workspaces button.urgent,
#temperature.critical,
#network.disconnected,
#battery.critical:not(.charging) {
color: #ebdbb2;
background-color: #cc241d;
border-color: #fb4924 #9d0006 #9d0006 #fb4924;
}
#custom-wakatime {
color: #282828;
background-color: #a89984;
border: 2px solid; /* Base border */
border-color: #ebdbb2 #665c54 #665c54 #ebdbb2;
}
#workspaces button.active {
color: #282828;
background-color: #ebdbb2;
border: 2px solid; /* Base border */
border-color: #fbf1c7 #a89984 #a89984 #fbf1c7;
}
#custom-timewarrior.active {
color: #282828;
background-color: #98971a;
border: 2px solid; /* Base border */
border-color: #b8bb27 #79740e #79740e #b8bb27;
}
#custom-timewarrior {
margin-left: 10px;
}
/* Specific module styles */
#custom-os {
margin: 5px 15px 5px 5px;
font-size: 18px;
padding: 0 12px 0 5px;
/* padding-right: 14px; */
color: #282828;
background-color: #a89984;
border: 2px solid; /* Base border */
border-color: #ebdbb2 #665c54 #665c54 #ebdbb2;
}
#custom-notification {
margin-left: 10px;
}
#custom-timewarrior {
margin-right: 10px;
}
#custom-timewarrior,
#custom-notification,
#custom-lock,
#custom-shutdown,
#custom-restart,
#idle_inhibitor,
#custom-logout {
background-color: #665c54;
border: 2px solid; /* Base border */
border-color: #928374 #282828 #282828 #928374;
color: #ebdbb2;
}