feat(ags): add razer mouse battery indicator
All checks were successful
Discord / discord commits (push) Has been skipped
All checks were successful
Discord / discord commits (push) Has been skipped
This commit is contained in:
parent
6f5d7b1e4c
commit
a246a86d4d
7 changed files with 124 additions and 3 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -5,3 +5,4 @@
|
||||||
*build/
|
*build/
|
||||||
result*
|
result*
|
||||||
*config.js
|
*config.js
|
||||||
|
*icons
|
||||||
|
|
|
@ -12,6 +12,8 @@ export default {
|
||||||
globalThis.Pointers = Pointers;
|
globalThis.Pointers = Pointers;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
icons: './icons',
|
||||||
|
|
||||||
windows: [
|
windows: [
|
||||||
AppLauncher(),
|
AppLauncher(),
|
||||||
NotifCenter(),
|
NotifCenter(),
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.sys-tray {
|
.sys-tray {
|
||||||
|
|
||||||
menubar {
|
menubar {
|
||||||
background-color: $bgfull;
|
background-color: $bgfull;
|
||||||
padding: 2.5px;
|
padding: 2.5px;
|
||||||
|
@ -21,3 +20,49 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.razer {
|
||||||
|
padding: 0 5px;
|
||||||
|
background: $bgfull;
|
||||||
|
|
||||||
|
.low progress {
|
||||||
|
background: $red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.medium progress {
|
||||||
|
background: $yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
.high progress {
|
||||||
|
background: $green;
|
||||||
|
}
|
||||||
|
|
||||||
|
progressbar:disabled {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
progressbar {
|
||||||
|
min-height: 6px;
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
|
||||||
|
trough {
|
||||||
|
background: #363847;
|
||||||
|
min-height: inherit;
|
||||||
|
border-radius: inherit;
|
||||||
|
border: 0.3px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress {
|
||||||
|
min-height: inherit;
|
||||||
|
border-radius: inherit;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
image {
|
||||||
|
padding-right: 5px;
|
||||||
|
font-size: 22px;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
const { Box, CenterBox, Window } = Widget;
|
const { Box, CenterBox, Window } = Widget;
|
||||||
|
|
||||||
import SysTray from './items/systray.ts';
|
|
||||||
import Separator from '../misc/separator.ts';
|
import Separator from '../misc/separator.ts';
|
||||||
import NotifButton from './items/notif-button.ts';
|
|
||||||
import Clock from './items/clock.ts';
|
import Clock from './items/clock.ts';
|
||||||
|
import NotifButton from './items/notif-button.ts';
|
||||||
|
import RazerStats from './items/razer-stats.ts';
|
||||||
|
import SysTray from './items/systray.ts';
|
||||||
|
|
||||||
const PADDING = 20;
|
const PADDING = 20;
|
||||||
|
|
||||||
|
@ -26,6 +28,10 @@ export default () => Window({
|
||||||
Separator(PADDING),
|
Separator(PADDING),
|
||||||
|
|
||||||
SysTray(),
|
SysTray(),
|
||||||
|
|
||||||
|
Separator(PADDING / 2 / 2),
|
||||||
|
|
||||||
|
RazerStats(),
|
||||||
],
|
],
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
|
61
modules/ags/config/ts/bar/items/razer-stats.ts
Normal file
61
modules/ags/config/ts/bar/items/razer-stats.ts
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
const { Box, Icon, ProgressBar } = Widget;
|
||||||
|
|
||||||
|
const RAZER_POLL = 30000;
|
||||||
|
const LOW_BATT = 20;
|
||||||
|
|
||||||
|
|
||||||
|
const RazerBat = Variable(-1, {
|
||||||
|
poll: [
|
||||||
|
RAZER_POLL,
|
||||||
|
[
|
||||||
|
'bash',
|
||||||
|
'-c',
|
||||||
|
"polychromatic-cli -n 'Razer Naga Pro (Wired)' -k" +
|
||||||
|
' || ' +
|
||||||
|
"polychromatic-cli -n 'Razer Naga Pro (Wireless)' -k",
|
||||||
|
],
|
||||||
|
(out) => {
|
||||||
|
const battery = out.split('\n')
|
||||||
|
.filter((i) => i.includes('Battery'))[0]
|
||||||
|
.match(/[0-9]+/);
|
||||||
|
|
||||||
|
return battery !== null ? parseInt(battery[0]) : -1;
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
export default () => Box({
|
||||||
|
class_name: 'razer',
|
||||||
|
children: [
|
||||||
|
Icon({
|
||||||
|
hpack: 'start',
|
||||||
|
icon: RazerBat.bind().transform((v) => {
|
||||||
|
return v > -1 ?
|
||||||
|
'mouse-razer-symbolic' :
|
||||||
|
'content-loading-symbolic';
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
|
||||||
|
ProgressBar({
|
||||||
|
vpack: 'center',
|
||||||
|
value: RazerBat.bind().transform((v) => v >= 0 ? v / 100 : 0),
|
||||||
|
setup: (self) => {
|
||||||
|
self.hook(RazerBat, () => {
|
||||||
|
self.toggleClassName(
|
||||||
|
'high',
|
||||||
|
RazerBat.value > 66,
|
||||||
|
);
|
||||||
|
self.toggleClassName(
|
||||||
|
'medium',
|
||||||
|
RazerBat.value > LOW_BATT && RazerBat.value <= 66,
|
||||||
|
);
|
||||||
|
self.toggleClassName(
|
||||||
|
'low',
|
||||||
|
RazerBat.value <= LOW_BATT,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
|
||||||
|
],
|
||||||
|
});
|
|
@ -14,6 +14,8 @@ Setup();
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
icons: './icons',
|
||||||
|
|
||||||
windows: [
|
windows: [
|
||||||
...Corners(),
|
...Corners(),
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,10 @@ in {
|
||||||
home = {
|
home = {
|
||||||
file = {
|
file = {
|
||||||
".config/ags".source = symlink /home/${mainUser}/.nix/modules/ags/config;
|
".config/ags".source = symlink /home/${mainUser}/.nix/modules/ags/config;
|
||||||
|
".nix/modules/ags/config/icons/mouse-razer-symbolic.svg".source = pkgs.fetchurl {
|
||||||
|
url = "https://raw.githubusercontent.com/bithatch/razer-icon-font/main/src/devices/mouse.svg";
|
||||||
|
hash = "sha256-A1+eIp2VEFDyY23GIHKhbnByHXrnVS3QgIJ9sjjtuZw=";
|
||||||
|
};
|
||||||
".nix/modules/ags/config/types".source = agsTypes.source;
|
".nix/modules/ags/config/types".source = agsTypes.source;
|
||||||
".nix/modules/ags/config/config.js".text =
|
".nix/modules/ags/config/config.js".text =
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue