Fix theme swatches, bar sizing, and show 9 workspaces
Claude-Session: https://claude.ai/code/session_014ADhvRXuiTvrXSbConxUey
This commit is contained in:
@@ -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,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"
|
||||
|
||||
Reference in New Issue
Block a user