nixos-configs/modules/ags/config/ts/osd/osds.ts

105 lines
2.4 KiB
TypeScript
Raw Normal View History

import Audio from 'resource:///com/github/Aylur/ags/service/audio.js';
import Variable from 'resource:///com/github/Aylur/ags/variable.js';
import { Label } from 'resource:///com/github/Aylur/ags/widget.js';
import OSD from './ctor.ts';
import Brightness from '../../services/brightness.ts';
import { SpeakerIcon } from '../misc/audio-icons.ts';
import { MicIcon } from '../misc/audio-icons.ts';
const AUDIO_MAX = 1.5;
const ShowSpeaker = Variable(true);
globalThis.showSpeaker = () => {
ShowSpeaker.value = !ShowSpeaker.value;
};
2024-01-13 11:15:08 -05:00
// Types
2024-01-29 20:56:56 -05:00
import { OSDStack } from 'global-types';
2023-12-21 01:25:59 -05:00
2024-01-29 20:56:56 -05:00
export const SpeakerOSD = (stack: OSDStack) => OSD({
stack,
2023-12-21 01:25:59 -05:00
icon: { icon: SpeakerIcon.bind() },
info: {
mod: ShowSpeaker,
2023-12-21 01:25:59 -05:00
logic: (self) => {
if (!Audio.speaker) {
return;
}
self.value = Audio.speaker ?
Audio.speaker.volume / AUDIO_MAX :
0;
2024-01-29 20:56:56 -05:00
self.sensitive = !Audio.speaker.stream?.is_muted;
},
},
});
2024-01-29 20:56:56 -05:00
export const ScreenBrightnessOSD = (stack: OSDStack) => OSD({
stack,
2023-12-21 01:25:59 -05:00
icon: { icon: Brightness.bind('screenIcon') },
info: {
mod: Brightness,
signal: 'screen',
2023-12-21 01:25:59 -05:00
logic: (self) => {
self.value = Brightness.screen;
},
},
});
2024-01-29 20:56:56 -05:00
export const KbdBrightnessOSD = (stack: OSDStack) => OSD({
stack,
icon: 'keyboard-brightness-symbolic',
info: {
mod: Brightness,
signal: 'kbd',
2023-12-21 01:25:59 -05:00
logic: (self) => {
if (!self.value) {
self.value = Brightness.kbd / 2;
return;
}
self.value = Brightness.kbd / 2;
self.sensitive = Brightness.kbd !== 0;
},
},
});
2024-01-29 20:56:56 -05:00
export const MicOSD = (stack: OSDStack) => OSD({
stack,
2023-12-21 01:25:59 -05:00
icon: { icon: MicIcon.bind() },
info: {
mod: Audio,
signal: 'microphone-changed',
2023-12-21 01:25:59 -05:00
logic: (self) => {
if (!Audio.microphone) {
return;
}
self.value = Audio.microphone ? Audio.microphone.volume : 0;
2024-01-29 20:56:56 -05:00
self.sensitive = !Audio.microphone.stream?.is_muted;
},
},
});
2024-01-29 20:56:56 -05:00
export const CapsLockOSD = (stack: OSDStack) => OSD({
stack,
2023-12-21 01:25:59 -05:00
icon: { icon: Brightness.bind('capsIcon') },
info: {
mod: Brightness,
signal: 'caps',
widget: Label({
vpack: 'center',
label: 'Caps Lock',
}),
},
});