106 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {
 | |
|     Gtk
 | |
| } from 'astal/gtk4';
 | |
| import {
 | |
|     execAsync
 | |
| } from 'astal';
 | |
| import sysinfo from '../sysinfo';
 | |
| 
 | |
| const info = () => {
 | |
|     return (
 | |
|         <box vertical>
 | |
|             <label
 | |
|                 label={'System Information'}
 | |
|                 cssClasses={[ 'title-2' ]}
 | |
|             ></label>
 | |
|             <Gtk.Separator marginTop={5} marginBottom={10}></Gtk.Separator>
 | |
|             <label
 | |
|                 vexpand
 | |
|                 halign={Gtk.Align.START}
 | |
|                 hexpand
 | |
|                 label={sysinfo.ramUsed( used => {
 | |
|                     return 'RAM: ' + used + ` (${ sysinfo.ramUtil.get() }%)`;
 | |
|                 } )}
 | |
|             ></label>
 | |
|             <label
 | |
|                 label={sysinfo.systemStats( stats => {
 | |
|                     return `CPU: ${ stats.cpuTemp }, ${ stats.cpuClk }
 | |
| GPU: ${ stats.gpuTemp }, ${ stats.gpuClk } (${ stats.vram } / ${ stats.availableVRAM })
 | |
| Kernel: ${ stats.kernel }`;
 | |
|                 } )}
 | |
|             ></label>
 | |
|             <Gtk.Separator marginTop={10}></Gtk.Separator>
 | |
|             <button
 | |
|                 onClicked={() => execAsync( '/bin/sh -c "kitty --hold fish -c \'fastfetch\'"' )}
 | |
|                 child={
 | |
|                     <label label={'View FastFetch'}></label>
 | |
|                 }></button>
 | |
|         </box>
 | |
|     );
 | |
| };
 | |
| 
 | |
| const SystemInformationPanel = () => {
 | |
|     const popover = new Gtk.Popover();
 | |
| 
 | |
|     popover.set_child( info() );
 | |
| 
 | |
|     return popover;
 | |
| };
 | |
| 
 | |
| 
 | |
| const panel = SystemInformationPanel();
 | |
| 
 | |
| const SystemInfo = () => {
 | |
|     sysinfo.startSysInfoFetcher();
 | |
| 
 | |
|     const openSysInfo = async () => {
 | |
|         panel.popup();
 | |
|         sysinfo.refreshStats();
 | |
|     };
 | |
| 
 | |
|     if ( sysinfo.enabled ) {
 | |
|         return (
 | |
|             <button
 | |
|                 onClicked={() => openSysInfo()}
 | |
|                 child={
 | |
|                     <box tooltipText={sysinfo.ramUsed( v => v )}>
 | |
|                         <box
 | |
|                             cssClasses={[ 'quick-view-symbol' ]}
 | |
|                         >
 | |
|                             <image
 | |
|                                 iconName={'power-profile-performance-symbolic'}
 | |
|                                 marginEnd={1}
 | |
|                             ></image>
 | |
|                             <label
 | |
|                                 label={sysinfo.cpuUtil( util => util )}
 | |
|                                 marginEnd={5}
 | |
|                             ></label>
 | |
|                         </box>
 | |
|                         <box
 | |
|                             cssClasses={[ 'quick-view-symbol' ]}
 | |
|                         >
 | |
|                             <image iconName={'memory'}></image>
 | |
|                             <label label={sysinfo.ramUtil( util => util )}></label>
 | |
|                         </box>
 | |
|                         <box
 | |
|                             cssClasses={[ 'quick-view-symbol' ]}
 | |
|                         >
 | |
|                             <image iconName={'show-gpu-effects-symbolic'}></image>
 | |
|                             <label label={sysinfo.gpuUtil( util => util )}></label>
 | |
|                         </box>
 | |
|                         {panel}
 | |
|                     </box>
 | |
|                 }
 | |
|                 cssClasses={[ 'bar-button' ]}
 | |
|             ></button>
 | |
|         );
 | |
|     } else {
 | |
|         return <image iconName={'action-unavailable-symbolic'}></image>;
 | |
|     }
 | |
| };
 | |
| 
 | |
| export default {
 | |
|     SystemInfo,
 | |
|     panel,
 | |
| };
 |