diff options
Diffstat (limited to '')
-rwxr-xr-x | fmurphy/.glzr/zebar/bar/index.html | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/fmurphy/.glzr/zebar/bar/index.html b/fmurphy/.glzr/zebar/bar/index.html new file mode 100755 index 0000000..a100410 --- /dev/null +++ b/fmurphy/.glzr/zebar/bar/index.html @@ -0,0 +1,100 @@ +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + + <!-- Custom styles. --> + <link rel="stylesheet" type="text/css" href="./styles.css" /> + + <!-- Allows React to be run buildless via "text/babel" script below. --> + <script + src="https://unpkg.com/@babel/standalone@7.25.6/babel.min.js" + integrity="sha256-aS0B0wnsaDByLfE16h4MDCP1fQFccysd1YWOcV+gbBo=" + crossorigin="anonymous" + ></script> + </head> + <body> + <div id="root"></div> + + <script type="text/babel" data-type="module"> + import React, { + useState, + useEffect, + } from 'https://esm.sh/react@18?dev'; + import { createRoot } from 'https://esm.sh/react-dom@18/client?dev'; + import * as zebar from 'https://esm.sh/zebar@2'; + + const providers = zebar.createProviderGroup({ + glazewm: { type: 'glazewm' }, + cpu: { type: 'cpu' }, + memory: { type: 'memory' }, + date: { type: 'date', formatting: 'yyyy-LL-dd HH:mm:ss' }, + }); + + createRoot(document.getElementById('root')).render(<App />); + + function App() { + const [output, setOutput] = useState(providers.outputMap); + + useEffect(() => { + providers.onOutput(() => setOutput(providers.outputMap)); + }, []); + + return ( + <div className="app"> + <div className="left"> + {output.glazewm && ( + <div className="workspaces"> + {output.glazewm.currentWorkspaces.map(workspace => ( + <button + className={`workspace ${workspace.hasFocus && 'focused'} ${workspace.isDisplayed && 'displayed'}`} + onClick={() => + output.glazewm.runCommand( + `focus --workspace ${workspace.name}`, + ) + } + key={workspace.name} + > + {workspace.displayName ?? workspace.name} + </button> + ))} + </div> + )} + </div> + + <div className="center"> + {output.date && ( + <div className="date"> + {output.date.formatted} + </div> + )} + </div> + + <div className="right"> + {output.memory && ( + <div className="memory"> + <i className="nf nf-fae-chip"></i> + {Math.round(output.memory.usage)}% + </div> + )} + + {output.cpu && ( + <div className="cpu"> + <i className="nf nf-oct-cpu"></i> + + {/* Change the text color if the CPU usage is high. */} + <span + className={output.cpu.usage > 85 ? 'high-usage' : ''} + > + {Math.round(output.cpu.usage)}% + </span> + </div> + )} + </div> + </div> + ); + } + </script> + </body> +</html> |