taffybar 7.2.2 → 7.2.3
raw patch · 3 files changed
+56/−4 lines, 3 files
Files
- CHANGELOG.md +8/−0
- src/System/Taffybar/Information/Audio.hs +36/−0
- taffybar.cabal +12/−4
CHANGELOG.md view
@@ -1,3 +1,11 @@+# 7.2.3++## Packaging++* Add a `wireplumber` flag, enabled by default, so package sets without+ WirePlumber 0.5 development libraries can disable the WirePlumber-backed+ audio modules and still build taffybar.+ # 7.2.2 ## Packaging
src/System/Taffybar/Information/Audio.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE OverloadedStrings #-}@@ -44,11 +45,15 @@ import Control.Monad.IO.Class (liftIO) import Control.Monad.STM (atomically) import Data.Proxy (Proxy (..))+#ifdef WITH_WIREPLUMBER import qualified Data.Text as T+#endif import GHC.TypeLits (KnownSymbol, SomeSymbol (..), Symbol, someSymbolVal, symbolVal) import System.Taffybar.Context (TaffyIO) import qualified System.Taffybar.Information.PulseAudio as PulseAudio+#ifdef WITH_WIREPLUMBER import qualified System.Taffybar.Information.WirePlumber as WirePlumber+#endif data AudioBackend = PulseAudioBackend@@ -74,18 +79,26 @@ audioBackendAvailable :: IO AudioBackend audioBackendAvailable = do+#ifdef WITH_WIREPLUMBER pulseAvailable <- PulseAudio.pulseAudioAvailable pure $ if pulseAvailable then PulseAudioBackend else WirePlumberBackend+#else+ pure PulseAudioBackend+#endif getAudioInfo :: String -> String -> IO (Maybe AudioInfo) getAudioInfo pulseSink wirePlumberNode = do backend <- audioBackendAvailable case backend of PulseAudioBackend -> fmap fromPulseAudioInfo <$> PulseAudio.getPulseAudioInfo pulseSink+#ifdef WITH_WIREPLUMBER WirePlumberBackend -> fmap fromWirePlumberInfo <$> WirePlumber.getWirePlumberInfo wirePlumberNode+#else+ WirePlumberBackend -> wirePlumberNode `seq` pure Nothing+#endif getAudioInfoChan :: String -> String -> TaffyIO (TChan (Maybe AudioInfo)) getAudioInfoChan pulseSink wirePlumberNode =@@ -122,23 +135,35 @@ PulseAudioBackend -> do (pulseChan, pulseVar) <- PulseAudio.getPulseAudioInfoChanAndVar pulseSink buildMappedChanVar fromPulseAudioInfo pulseChan pulseVar+#ifdef WITH_WIREPLUMBER WirePlumberBackend -> do (wireChan, wireVar) <- WirePlumber.getWirePlumberInfoChanAndVar wirePlumberNode buildMappedChanVar fromWirePlumberInfo wireChan wireVar+#else+ WirePlumberBackend -> liftIO $ wirePlumberNode `seq` buildUnavailableChanVar+#endif toggleAudioMute :: String -> String -> IO Bool toggleAudioMute pulseSink wirePlumberNode = do backend <- audioBackendAvailable case backend of PulseAudioBackend -> PulseAudio.togglePulseAudioMute pulseSink+#ifdef WITH_WIREPLUMBER WirePlumberBackend -> WirePlumber.toggleWirePlumberMute wirePlumberNode+#else+ WirePlumberBackend -> wirePlumberNode `seq` pure False+#endif adjustAudioVolume :: String -> String -> Int -> IO Bool adjustAudioVolume pulseSink wirePlumberNode deltaPercent = do backend <- audioBackendAvailable case backend of PulseAudioBackend -> PulseAudio.adjustPulseAudioVolume pulseSink deltaPercent+#ifdef WITH_WIREPLUMBER WirePlumberBackend -> WirePlumber.adjustWirePlumberVolume wirePlumberNode deltaPercent+#else+ WirePlumberBackend -> wirePlumberNode `seq` pure False+#endif pulseSinkToWirePlumberNode :: String -> String pulseSinkToWirePlumberNode "" = defaultAudioWirePlumberNode@@ -167,6 +192,15 @@ writeTChan chan info pure $ AudioInfoChanVar (chan, var) +#ifndef WITH_WIREPLUMBER+buildUnavailableChanVar :: IO (AudioInfoChanVar a)+buildUnavailableChanVar = do+ chan <- newBroadcastTChanIO+ var <- newMVar Nothing+ atomically $ writeTChan chan Nothing+ pure $ AudioInfoChanVar (chan, var)+#endif+ fromPulseAudioInfo :: PulseAudio.PulseAudioInfo -> AudioInfo fromPulseAudioInfo info = AudioInfo@@ -176,6 +210,7 @@ audioBackend = PulseAudioBackend } +#ifdef WITH_WIREPLUMBER fromWirePlumberInfo :: WirePlumber.WirePlumberInfo -> AudioInfo fromWirePlumberInfo info = AudioInfo@@ -184,6 +219,7 @@ audioNodeName = T.unpack $ WirePlumber.wirePlumberNodeName info, audioBackend = WirePlumberBackend }+#endif encodeAudioSpecs :: String -> String -> String encodeAudioSpecs pulseSink wirePlumberNode = pulseSink ++ "\n" ++ wirePlumberNode
taffybar.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.4 name: taffybar-version: 7.2.2+version: 7.2.3 synopsis: A desktop bar similar to xmobar, but with more GUI description: Taffybar is a desktop status bar with GTK widgets for window manager state, system information, tray icons, and custom user modules.@@ -39,6 +39,11 @@ flag Deprecated-Pager-Hints description: Enables the deprecated System.Taffybar.Support.PagerHints module, which has been moved to xmonad-contrib. +flag wireplumber+ description: Enables WirePlumber/PipeWire audio support.+ default: True+ manual: True+ common haskell default-extensions: DeriveGeneric@@ -90,7 +95,6 @@ , gi-gtk3 >= 3.0.44 && < 4 , gi-gtk-hs >= 0.3.17 && < 0.4 , gi-pango >= 1.0 && < 1.1- , gi-wireplumber >= 0.5.14.2 && < 0.6 , gtk-scaling-image >= 0.1.0.1 && < 0.2 , gtk-sni-tray >= 0.2.1.2 && < 0.3 , gtk-strut >= 0.1.4.1 && < 0.2@@ -143,7 +147,6 @@ , System.Taffybar.Information.Hyprland , System.Taffybar.Information.HyprlandWorkspaceHistory , System.Taffybar.Information.PulseAudio- , System.Taffybar.Information.WirePlumber , System.Taffybar.Information.AnthropicUsage , System.Taffybar.Information.Backlight , System.Taffybar.Information.ASUS@@ -243,7 +246,6 @@ , System.Taffybar.Widget.Weather , System.Taffybar.Widget.Windows , System.Taffybar.Widget.Workspaces- , System.Taffybar.Widget.WirePlumber , System.Taffybar.Widget.Wlsunset , System.Taffybar.Widget.WttrIn , System.Taffybar.Widget.XDGMenu.Menu@@ -253,6 +255,12 @@ if flag(Deprecated-Pager-Hints) build-depends: xmonad >= 0.17 && < 0.19 exposed-modules: System.Taffybar.Support.PagerHints++ if flag(wireplumber)+ build-depends: gi-wireplumber >= 0.5.14.2 && < 0.6+ cpp-options: -DWITH_WIREPLUMBER+ exposed-modules: System.Taffybar.Information.WirePlumber+ , System.Taffybar.Widget.WirePlumber other-modules: Paths_taffybar , System.Taffybar.DBus.Client.ChromeWindowInfo