mirror of
https://github.com/morgan9e/gnome-shell-extension-freon
synced 2026-04-14 00:14:14 +09:00
229 lines
8.8 KiB
JavaScript
229 lines
8.8 KiB
JavaScript
import Gio from 'gi://Gio'
|
|
import Gtk from 'gi://Gtk'
|
|
import Adw from 'gi://Adw'
|
|
|
|
import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
|
|
|
|
|
|
export default class FreonPreferences extends ExtensionPreferences {
|
|
|
|
fillPreferencesWindow(window) {
|
|
window.set_default_size(1010, 800);
|
|
|
|
const grid = new Gtk.Grid({
|
|
column_homogeneous: true,
|
|
column_spacing: 10,
|
|
row_homogeneous: false,
|
|
});
|
|
|
|
this._settings = this.getSettings()
|
|
const page = new Adw.PreferencesPage({
|
|
title: _('General'),
|
|
icon_name: 'dialog-information-symbolic',
|
|
|
|
});
|
|
|
|
const display_options = this._create_display_options();
|
|
const generic_sensor_providers = this._create_generic_sensor_providers();
|
|
const gpu_sensor_providers = this._create_gpu_sensor_providers();
|
|
const drive_sensor_providers = this._create_drive_sensor_providers();
|
|
const show_sensors = this._create_show_sensors();
|
|
const item_group = this._create_item_grouping();
|
|
|
|
grid.attach(display_options, 0, 0, 1, 12);
|
|
grid.attach(generic_sensor_providers, 1, 0, 1, 4);
|
|
grid.attach(gpu_sensor_providers, 1, 4, 1, 4);
|
|
grid.attach(drive_sensor_providers, 1, 8, 1, 4);
|
|
grid.attach(show_sensors, 2, 0, 1, 6);
|
|
grid.attach(item_group, 2, 6, 1, 4);
|
|
|
|
const widget = new Adw.PreferencesGroup({
|
|
hexpand: true,
|
|
vexpand: true,
|
|
})
|
|
widget.add(grid);
|
|
|
|
page.add(widget);
|
|
|
|
window.add(page);
|
|
}
|
|
|
|
|
|
_create_display_options() {
|
|
const group = new Adw.PreferencesGroup({
|
|
title: _('Display Options'),
|
|
width_request: 320,
|
|
})
|
|
|
|
const sensor_poll_intervall = new Adw.SpinRow({
|
|
title: _('Sensor Polling Interval'),
|
|
adjustment: new Gtk.Adjustment({
|
|
lower: 1,
|
|
upper: 60,
|
|
value: 5,
|
|
step_increment: 1,
|
|
})
|
|
})
|
|
this._settings.bind('update-time', sensor_poll_intervall, 'value', Gio.SettingsBindFlags.DEFAULT)
|
|
group.add(sensor_poll_intervall)
|
|
|
|
const position_in_panel = new Adw.ComboRow({
|
|
title: _('Panel Position'),
|
|
model: new Gtk.StringList({strings: ["Left", "Center", "Right"] }),
|
|
})
|
|
this._settings.bind("position-in-panel", position_in_panel, "selected", Gio.SettingsBindFlags.NO_SENSETIVITY);
|
|
group.add(position_in_panel)
|
|
|
|
|
|
const index_on_panel = new Adw.SpinRow({
|
|
title: _('Index on Panel'),
|
|
adjustment: new Gtk.Adjustment({
|
|
lower: -1,
|
|
upper: 25,
|
|
value: 1,
|
|
step_increment: 1,
|
|
})
|
|
});
|
|
group.add(index_on_panel);
|
|
this._settings.bind('panel-box-index', index_on_panel, 'value', Gio.SettingsBindFlags.DEFAULT);
|
|
|
|
group.add(this._addSwitch("Show Icon on Panel", "show-icon-on-panel"));
|
|
|
|
const unit_setting = new Adw.ComboRow({
|
|
title: _('Temperature Unit'),
|
|
model: new Gtk.StringList({strings: ["\u00b0C", "\u00b0F"]}),
|
|
});
|
|
this._settings.bind("unit", unit_setting, "selected", Gio.SettingsBindFlags.NO_SENSETIVITY);
|
|
group.add(unit_setting);
|
|
|
|
group.add(this._addSwitch("Show Temperature Unit", "show-temperature-unit"));
|
|
group.add(this._addSwitch("Show Rotation Rate Unit", "show-rotationrate-unit"));
|
|
group.add(this._addSwitch("Show Voltage Unit", "show-voltage-unit"));
|
|
group.add(this._addSwitch("Show Power Unit", "show-power-unit"));
|
|
group.add(this._addSwitch("Show Decimal Values", "show-decimal-value", "Show additional digits after decimal point"));
|
|
return group;
|
|
}
|
|
|
|
_create_generic_sensor_providers() {
|
|
const group = new Adw.PreferencesGroup({
|
|
title: _('Generic Sensor Providers'),
|
|
width_request: 320,
|
|
});
|
|
|
|
const cpuUsageSwitch = this._addSwitch("CPU Usage", "use-cpu-usage", "Read CPU usage from /proc/stat");
|
|
group.add(cpuUsageSwitch);
|
|
|
|
const cpuUsageInterval = new Adw.SpinRow({
|
|
title: _('CPU Usage Polling Interval'),
|
|
subtitle: _('Seconds between CPU usage updates'),
|
|
adjustment: new Gtk.Adjustment({
|
|
lower: 1,
|
|
upper: 60,
|
|
value: this._settings.get_int('cpu-usage-update-time'),
|
|
step_increment: 1,
|
|
}),
|
|
});
|
|
this._settings.bind('cpu-usage-update-time', cpuUsageInterval, 'value', Gio.SettingsBindFlags.DEFAULT);
|
|
cpuUsageInterval.sensitive = this._settings.get_boolean('use-cpu-usage');
|
|
this._settings.connect('changed::use-cpu-usage', () => {
|
|
cpuUsageInterval.sensitive = this._settings.get_boolean('use-cpu-usage');
|
|
});
|
|
group.add(cpuUsageInterval);
|
|
|
|
group.add(this._addSwitch("lm-sensors", "use-generic-lmsensors", "Read sensors from lm-sensors"));
|
|
group.add(this._addSwitch("liquidctl", "use-generic-liquidctl", "Read sensors from liquidctl (v1.7.0+)"));
|
|
const wattdSwitch = this._addSwitch("wattd", "use-generic-wattd", "Read power data from wattd");
|
|
group.add(wattdSwitch);
|
|
|
|
const wattdInterval = new Adw.SpinRow({
|
|
title: _('Wattd Polling Interval'),
|
|
subtitle: _('Seconds between wattd updates'),
|
|
adjustment: new Gtk.Adjustment({
|
|
lower: 1,
|
|
upper: 300,
|
|
value: this._settings.get_int('wattd-update-time'),
|
|
step_increment: 1,
|
|
}),
|
|
});
|
|
this._settings.bind('wattd-update-time', wattdInterval, 'value', Gio.SettingsBindFlags.DEFAULT);
|
|
wattdInterval.sensitive = this._settings.get_boolean('use-generic-wattd');
|
|
this._settings.connect('changed::use-generic-wattd', () => {
|
|
wattdInterval.sensitive = this._settings.get_boolean('use-generic-wattd');
|
|
});
|
|
group.add(wattdInterval);
|
|
|
|
const freeimpi = new Adw.ComboRow({
|
|
title: _('FreeIMPI'),
|
|
model: new Gtk.StringList({strings: ["Disabled", "Direct", "pkexec"] }),
|
|
selected: this._settings.get_int("freeimpi-selected"),
|
|
subtitle: "Read sensors using ipmi-sensors from FreeIPMI"
|
|
});
|
|
this._settings.bind("freeimpi-selected", freeimpi, "selected", Gio.SettingsBindFlags.NO_SENSETIVITY);
|
|
group.add(freeimpi);
|
|
|
|
return group;
|
|
}
|
|
|
|
_create_gpu_sensor_providers() {
|
|
const group = new Adw.PreferencesGroup({
|
|
title: _('GPU Sensor Providers'),
|
|
width_request: 320,
|
|
});
|
|
group.add(this._addSwitch("Nvidia", "use-gpu-nvidia"));
|
|
group.add(this._addSwitch("Bumblebee + Nvidia", "use-gpu-bumblebeenvidia"));
|
|
group.add(this._addSwitch("Catalyst", "use-gpu-aticonfig"));
|
|
|
|
return group;
|
|
}
|
|
|
|
_create_drive_sensor_providers() {
|
|
const group = new Adw.PreferencesGroup({
|
|
title: _('Drive Sensor Providers'),
|
|
width_request: 320,
|
|
});
|
|
group.add(this._addSwitch("Udisks2", "use-drive-udisks2"));
|
|
group.add(this._addSwitch("Hddtemp", "use-drive-hddtemp"));
|
|
group.add(this._addSwitch("smartctl", "use-drive-smartctl", "Read drive sensors using smartctl from smartmontools"));
|
|
group.add(this._addSwitch("nvme-cli", "use-drive-nvmecli"));
|
|
|
|
return group;
|
|
}
|
|
|
|
_create_show_sensors() {
|
|
const group = new Adw.PreferencesGroup({
|
|
title: _('Show Sensors'),
|
|
width_request: 320,
|
|
})
|
|
|
|
group.add(this._addSwitch("Temperature", "show-temperature"));
|
|
group.add(this._addSwitch("Rotation Rate", "show-rotationrate"));
|
|
group.add(this._addSwitch("Voltage", "show-voltage"));
|
|
group.add(this._addSwitch("Power", "show-power"));
|
|
group.add(this._addSwitch("Battery", "show-battery-stats"));
|
|
group.add(this._addSwitch("CPU Usage", "show-cpu-usage"));
|
|
return group
|
|
}
|
|
|
|
_create_item_grouping() {
|
|
const group = new Adw.PreferencesGroup({
|
|
title: _('Group Items'),
|
|
width_request: 320,
|
|
description: "Group three or more sensor of the same type",
|
|
})
|
|
group.add(this._addSwitch("Temperature", "group-temperature"));
|
|
group.add(this._addSwitch("Rotation Rate", "group-rotationrate"));
|
|
group.add(this._addSwitch("Voltage", "group-voltage"));
|
|
return group;
|
|
}
|
|
|
|
_addSwitch(title, key, help = "") {
|
|
const sw = new Adw.SwitchRow({
|
|
title: _(title),
|
|
active: this._settings.get_boolean(key),
|
|
subtitle: help
|
|
});
|
|
this._settings.bind(key, sw, 'active', Gio.SettingsBindFlags.DEFAULT);
|
|
return sw;
|
|
}
|
|
}
|