Fix theme swatches, bar sizing, and show 9 workspaces

Claude-Session: https://claude.ai/code/session_014ADhvRXuiTvrXSbConxUey
This commit is contained in:
2026-08-19 14:22:21 -04:00
parent 7eabe8bb1f
commit 85652bd0b3
9 changed files with 161 additions and 14 deletions
+11 -9
View File
@@ -51,9 +51,11 @@ const EMPTY_USAGE: AgentUsage = {
const WEEKDAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
const MARK_PATH = "/usr/share/omarchy/shell/plugins/agents/assets/claude.svg"
function formatTokens(tokens: number) {
if (tokens >= 1000000000) return `${(tokens / 1000000000).toFixed(2)}B`
if (tokens >= 1000000) return `${(tokens / 1000000).toFixed(2)}M`
if (tokens >= 1000000000) return `${(tokens / 1000000000).toFixed(1)}B`
if (tokens >= 1000000) return `${(tokens / 1000000).toFixed(1)}M`
if (tokens >= 1000) return `${(tokens / 1000).toFixed(1)}K`
return `${Math.round(tokens)}`
}
@@ -87,20 +89,20 @@ function formatModelName(model: string) {
.replace(/(^| )(\w)/g, (_match, space, letter) => `${space}${letter.toUpperCase()}`)
}
function formatPercent(percent: number) {
if (percent > 0 && percent < 1) return "<1%"
return `${Math.round(percent)}%`
function formatPercent(usedFraction: number) {
if (usedFraction > 0 && usedFraction < 0.01) return "<1%"
return `${Math.round(usedFraction * 100)}%`
}
function parseLimits(record: any): Limit[] {
if (!Array.isArray(record.limits)) return []
return record.limits.map((limit: any) => {
const percent = Number(limit.percent) || 0
const usedFraction = Number(limit.percent) || 0
return {
label: String(limit.label ?? "").replace(/\s*\(.*\)$/, ""),
percent,
fraction: Math.min(1, Math.max(0, percent / 100)),
percent: usedFraction,
fraction: Math.min(1, Math.max(0, usedFraction)),
resetsIn: formatResetsIn(String(limit.resetsAt ?? "")),
}
})
@@ -253,7 +255,7 @@ export function ClaudeUsageCard() {
return (
<box class="panel widget-card" vertical spacing={10}>
<box spacing={10}>
<label class="agent-mark" label={""} valign={Gtk.Align.CENTER} />
<box class="agent-mark" valign={Gtk.Align.CENTER} css={`background-image: url('${MARK_PATH}');`} />
<box vertical valign={Gtk.Align.CENTER}>
<label
class="agent-name"
+10 -1
View File
@@ -10,6 +10,15 @@ const COLUMNS = 3
type Theme = { slug: string; name: string; swatches: string[] }
const swatchProgram =
"{ key=$1; value=$2; gsub(/[ \\t]/, \"\", key); gsub(/[ \"\\t]/, \"\", value); " +
"if (value ~ /^#/) palette[key] = value } " +
"END { split(\"color1 color2 color3 color4 color5 color6\", legacy, \" \"); " +
"split(\"red green yellow blue magenta cyan\", named, \" \"); " +
"for (i = 1; i <= 6; i++) { " +
"value = (legacy[i] in palette) ? palette[legacy[i]] : ((named[i] in palette) ? palette[named[i]] : \"\"); " +
"if (value != \"\") out = (out == \"\" ? value : out \",\" value) } print out }"
const listCommand =
"{ find \"$HOME/.config/omarchy/themes\" -mindepth 1 -maxdepth 1 -type d 2>/dev/null; " +
"find \"$OMARCHY_PATH/themes\" -mindepth 1 -maxdepth 1 -type d 2>/dev/null; } | " +
@@ -17,7 +26,7 @@ const listCommand =
"[ -f \"$d/colors.toml\" ] || continue; " +
"n=$(basename \"$d\"); " +
"[ \"$n\" = blob-dynamic ] && continue; " +
"c=$(grep -E '^color[1-6] *=' \"$d/colors.toml\" | sed -E 's/^color[0-9]+ *= *\"?([^\"]*)\"?.*/\\1/' | paste -sd,); " +
"c=$(awk -F'=' '" + swatchProgram + "' \"$d/colors.toml\"); " +
"p=$(echo \"$n\" | sed -E 's/(^|-)([a-z])/\\1\\u\\2/g; s/-/ /g'); " +
"echo \"$n|$p|$c\"; " +
"done | awk -F'|' '!seen[$1]++' | sort -t'|' -k2,2"