92 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import Audio from './modules/Audio/Audio';
 | 
						|
import {
 | 
						|
    BatteryBox
 | 
						|
} from './modules/Battery';
 | 
						|
import Bluetooth from './modules/Bluetooth/Bluetooth';
 | 
						|
import Brightness from './modules/Brightness/Brightness';
 | 
						|
import {
 | 
						|
    Gtk
 | 
						|
} from 'astal/gtk4';
 | 
						|
import Network from './modules/Networking/Network';
 | 
						|
import Player from './modules/Player/Player';
 | 
						|
import Power from './modules/Power';
 | 
						|
import SysTray from './modules/SysTray';
 | 
						|
import {
 | 
						|
    exec
 | 
						|
} from 'astal';
 | 
						|
 | 
						|
const QuickActions = () => {
 | 
						|
    const popover = new Gtk.Popover( {
 | 
						|
        'cssClasses': [ 'quick-actions-wrapper' ]
 | 
						|
    } );
 | 
						|
 | 
						|
    popover.set_child( renderQuickActions() );
 | 
						|
 | 
						|
    return popover;
 | 
						|
};
 | 
						|
 | 
						|
const renderQuickActions = () => {
 | 
						|
    const user = exec( '/bin/sh -c whoami' );
 | 
						|
    const profile = exec( '/bin/fish -c get-profile-picture' );
 | 
						|
    const cwd = exec( 'pwd' );
 | 
						|
    const um = Power.UserMenu();
 | 
						|
 | 
						|
    return (
 | 
						|
        <box visible cssClasses={[
 | 
						|
            'quick-actions',
 | 
						|
            'popover-box'
 | 
						|
        ]} vertical>
 | 
						|
            <centerbox
 | 
						|
                startWidget={
 | 
						|
                    <button
 | 
						|
                        onClicked={() => um.popup()}
 | 
						|
                        cssClasses={[ 'stealthy-button' ]}
 | 
						|
                        child={
 | 
						|
                            <box>
 | 
						|
                                {um}
 | 
						|
                                <Gtk.Frame
 | 
						|
                                    cssClasses={[ 'avatar-icon' ]}
 | 
						|
                                    child={
 | 
						|
                                        <image
 | 
						|
                                            file={
 | 
						|
                                                profile !== ''
 | 
						|
                                                    ? profile
 | 
						|
                                                    : cwd
 | 
						|
                                                    + '/no-avatar-icon.jpg'
 | 
						|
                                            }
 | 
						|
                                        ></image>
 | 
						|
                                    }
 | 
						|
                                ></Gtk.Frame>
 | 
						|
                                <label label={user}></label>
 | 
						|
                            </box>
 | 
						|
                        }
 | 
						|
                    ></button>
 | 
						|
                }
 | 
						|
                endWidget={
 | 
						|
                    <box
 | 
						|
                        hexpand={false}
 | 
						|
                    >
 | 
						|
                        <BatteryBox></BatteryBox>
 | 
						|
                        <SysTray.SystemTray></SysTray.SystemTray>
 | 
						|
                        <Power.Power></Power.Power>
 | 
						|
                    </box>
 | 
						|
                }
 | 
						|
            ></centerbox>
 | 
						|
            <Gtk.Separator marginTop={10} marginBottom={20}></Gtk.Separator>
 | 
						|
            <box>
 | 
						|
                <Bluetooth.BluetoothModule></Bluetooth.BluetoothModule>
 | 
						|
                <Network.Network></Network.Network>
 | 
						|
            </box>
 | 
						|
            <Gtk.Separator marginTop={10} marginBottom={10}></Gtk.Separator>
 | 
						|
            <Brightness.BrightnessModule></Brightness.BrightnessModule>
 | 
						|
            <Audio.AudioModule></Audio.AudioModule>
 | 
						|
            <Player.PlayerModule></Player.PlayerModule>
 | 
						|
        </box>
 | 
						|
    );
 | 
						|
};
 | 
						|
 | 
						|
// TODO: Expose additional functions to be usable through CLI
 | 
						|
export default {
 | 
						|
    QuickActions,
 | 
						|
};
 |