import AstalBattery from 'gi://AstalBattery'; import AstalBluetooth from 'gi://AstalBluetooth'; import AstalNetwork from 'gi://AstalNetwork'; import AstalWp from 'gi://AstalWp'; import Brightness from '../../../util/brightness'; import { Gtk } from 'astal/gtk4'; import QuickActions from '../../QuickActions/QuickActions'; import { bind } from 'astal'; import { execAsync } from 'astal'; const STATE = AstalNetwork.DeviceState; const QuickView = () => { const qa = QuickActions.QuickActions(); const showQuickActions = () => { qa.popup(); }; return ( ); }; const NetworkWidget = () => { const network = AstalNetwork.get_default(); return ( { if ( state === AstalNetwork.State.CONNECTING ) { return 'chronometer-reset-symbolic'; } else if ( state === AstalNetwork.State.CONNECTED_LOCAL || state === AstalNetwork.State.CONNECTED_SITE || state === AstalNetwork.State.CONNECTED_GLOBAL ) { return 'network-wired-activated-symbolic'; } else { return 'paint-unknown-symbolic'; } } )} cssClasses={[ 'network-widget', 'quick-view-symbol' ]} visible={bind( network.wifi, 'state' ).as( state => state !== STATE.ACTIVATED, )} > { if ( state === STATE.ACTIVATED ) { return network.wifi.iconName; } else { return ''; } } )} tooltipText={bind( network.wifi, 'ssid' )} cssClasses={[ 'network-widget', 'quick-view-symbol' ]} visible={bind( network.wifi, 'state' ).as( state => state === STATE.ACTIVATED, )} > ); }; const BluetoothWidget = () => { const bluetooth = AstalBluetooth.get_default(); const enabled = bind( bluetooth, 'isPowered' ); const connected = bind( bluetooth, 'isConnected' ); // For each connected BT device, render status return ( e )}> c )} > !c )} > !e )} > {bind( bluetooth, 'devices' ).as( devices => { return devices.map( device => { return ( icon, )} visible={bind( device, 'connected' )} tooltipText={bind( device, 'batteryPercentage' ).as( n => { return device.get_name() + ': ' + n + '%'; }, )} > ); } ); } )} ); }; let hasSentNotification = false; const BatteryWidget = () => { const battery = AstalBattery.get_default(); if ( battery.get_is_present() ) { return ( icon )} cssClasses={[ 'quick-view-symbol' ]} tooltipText={bind( battery, 'percentage' ).as( p => { const level = Math.round( p * 100 ); if ( level < 20 && !hasSentNotification ) { hasSentNotification = true; execAsync( 'bash -c "notify-send \'Battery level below 20%\'"' ); } return `Battery Level: ${ level }%`; } )} > ); } else { return ; } // Else, no battery available -> Don't show the widget }; const BrightnessWidget = () => { const brightness = Brightness.get_default(); const screen_brightness = bind( brightness, 'screen' ); return ( ); }; const Audio = () => { const wireplumber = AstalWp.get_default(); if ( wireplumber ) { return ( icon, )} cssClasses={[ 'quick-view-symbol' ]} tooltipText={bind( wireplumber.defaultSpeaker, 'volume' ).as( v => Math.round( 100 * v ) + '%' )} > icon )} cssClasses={[ 'quick-view-symbol' ]} tooltipText={bind( wireplumber.defaultMicrophone, 'volume' ).as( v => Math.round( 100 * v ) + '%' )} > ); } else { print( '[ WirePlumber ] Could not connect, Audio support in bar will be missing', ); return ; } }; // cssClasses={[ 'quick-view-symbol' ]} export default { QuickView, BrightnessWidget };