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,
|
|
};
|