-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | A desktop bar similar to xmobar, but with more GUI
--   
--   A desktop bar similar to xmobar, but with more GUI
@package taffybar
@version 4.0.2

module System.Taffybar.Information.CPU

-- | Return a pair with (user time, system time, total time) (read from
--   <i>proc</i>stat). The function waits for 50 ms between samples.
cpuLoad :: IO (Double, Double, Double)


module System.Taffybar.Information.MPRIS2
data NowPlaying
NowPlaying :: String -> [String] -> String -> BusName -> NowPlaying
[npTitle] :: NowPlaying -> String
[npArtists] :: NowPlaying -> [String]
[npStatus] :: NowPlaying -> String
[npBusName] :: NowPlaying -> BusName
eitherToMaybeWithLog :: (MonadIO m, Show a1) => Either a1 a2 -> m (Maybe a2)
getNowPlayingInfo :: MonadIO m => Client -> m [NowPlaying]
getSongInfo :: Map String Variant -> Maybe (String, [String])
instance GHC.Classes.Eq System.Taffybar.Information.MPRIS2.NowPlaying
instance GHC.Show.Show System.Taffybar.Information.MPRIS2.NowPlaying

module System.Taffybar.Information.Memory
data MemoryInfo
MemoryInfo :: Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> MemoryInfo
[memoryTotal] :: MemoryInfo -> Double
[memoryFree] :: MemoryInfo -> Double
[memoryBuffer] :: MemoryInfo -> Double
[memoryCache] :: MemoryInfo -> Double
[memorySwapTotal] :: MemoryInfo -> Double
[memorySwapFree] :: MemoryInfo -> Double
[memorySwapUsed] :: MemoryInfo -> Double
[memorySwapUsedRatio] :: MemoryInfo -> Double
[memoryAvailable] :: MemoryInfo -> Double
[memoryRest] :: MemoryInfo -> Double
[memoryUsed] :: MemoryInfo -> Double
[memoryUsedRatio] :: MemoryInfo -> Double
parseMeminfo :: IO MemoryInfo


module System.Taffybar.Information.SafeX11
data () => ErrorEvent
ErrorEvent :: !CInt -> Display -> !CULong -> !CUChar -> !CUChar -> !CUChar -> !XID -> ErrorEvent
[ev_type] :: ErrorEvent -> !CInt
[ev_display] :: ErrorEvent -> Display
[ev_serialnum] :: ErrorEvent -> !CULong
[ev_error_code] :: ErrorEvent -> !CUChar
[ev_request_code] :: ErrorEvent -> !CUChar
[ev_minor_code] :: ErrorEvent -> !CUChar
[ev_resourceid] :: ErrorEvent -> !XID
type XErrorHandler = Display -> XErrorEventPtr -> IO ()
type CXErrorHandler = Display -> XErrorEventPtr -> IO CInt
type XErrorEventPtr = Ptr ()
data () => WMHints
WMHints :: CLong -> Bool -> CInt -> Pixmap -> Window -> CInt -> CInt -> Pixmap -> XID -> WMHints
[wmh_flags] :: WMHints -> CLong
[wmh_input] :: WMHints -> Bool
[wmh_initial_state] :: WMHints -> CInt
[wmh_icon_pixmap] :: WMHints -> Pixmap
[wmh_icon_window] :: WMHints -> Window
[wmh_icon_x] :: WMHints -> CInt
[wmh_icon_y] :: WMHints -> CInt
[wmh_icon_mask] :: WMHints -> Pixmap
[wmh_window_group] :: WMHints -> XID
data () => ClassHint
ClassHint :: String -> String -> ClassHint
[resName] :: ClassHint -> String
[resClass] :: ClassHint -> String
data () => SizeHints
SizeHints :: Maybe (Dimension, Dimension) -> Maybe (Dimension, Dimension) -> Maybe (Dimension, Dimension) -> Maybe ((Dimension, Dimension), (Dimension, Dimension)) -> Maybe (Dimension, Dimension) -> Maybe BitGravity -> SizeHints
[sh_min_size] :: SizeHints -> Maybe (Dimension, Dimension)
[sh_max_size] :: SizeHints -> Maybe (Dimension, Dimension)
[sh_resize_inc] :: SizeHints -> Maybe (Dimension, Dimension)
[sh_aspect] :: SizeHints -> Maybe ((Dimension, Dimension), (Dimension, Dimension))
[sh_base_size] :: SizeHints -> Maybe (Dimension, Dimension)
[sh_win_gravity] :: SizeHints -> Maybe BitGravity
newtype () => FontSet
FontSet :: Ptr FontSet -> FontSet
data () => TextProperty
TextProperty :: CString -> Atom -> CInt -> Word64 -> TextProperty
[tp_value] :: TextProperty -> CString
[tp_encoding] :: TextProperty -> Atom
[tp_format] :: TextProperty -> CInt
[tp_nitems] :: TextProperty -> Word64
data () => WindowAttributes
WindowAttributes :: CInt -> CInt -> CInt -> CInt -> CInt -> Colormap -> Bool -> CInt -> EventMask -> EventMask -> EventMask -> Bool -> WindowAttributes
[wa_x] :: WindowAttributes -> CInt
[wa_y] :: WindowAttributes -> CInt
[wa_width] :: WindowAttributes -> CInt
[wa_height] :: WindowAttributes -> CInt
[wa_border_width] :: WindowAttributes -> CInt
[wa_colormap] :: WindowAttributes -> Colormap
[wa_map_installed] :: WindowAttributes -> Bool
[wa_map_state] :: WindowAttributes -> CInt
[wa_all_event_masks] :: WindowAttributes -> EventMask
[wa_your_event_mask] :: WindowAttributes -> EventMask
[wa_do_not_propagate_mask] :: WindowAttributes -> EventMask
[wa_override_redirect] :: WindowAttributes -> Bool
data () => WindowChanges
WindowChanges :: CInt -> CInt -> CInt -> CInt -> CInt -> Window -> CInt -> WindowChanges
[wc_x] :: WindowChanges -> CInt
[wc_y] :: WindowChanges -> CInt
[wc_width] :: WindowChanges -> CInt
[wc_height] :: WindowChanges -> CInt
[wc_border_width] :: WindowChanges -> CInt
[wc_sibling] :: WindowChanges -> Window
[wc_stack_mode] :: WindowChanges -> CInt
data () => Event
AnyEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
ConfigureRequestEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Window -> !CInt -> !CInt -> !CInt -> !CInt -> !CInt -> !Window -> !NotifyDetail -> !CULong -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_parent] :: Event -> !Window
[ev_window] :: Event -> !Window
[ev_x] :: Event -> !CInt
[ev_y] :: Event -> !CInt
[ev_width] :: Event -> !CInt
[ev_height] :: Event -> !CInt
[ev_border_width] :: Event -> !CInt
[ev_above] :: Event -> !Window
[ev_detail] :: Event -> !NotifyDetail
[ev_value_mask] :: Event -> !CULong
ConfigureEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Window -> !CInt -> !CInt -> !CInt -> !CInt -> !CInt -> !Window -> !Bool -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_event] :: Event -> !Window
[ev_window] :: Event -> !Window
[ev_x] :: Event -> !CInt
[ev_y] :: Event -> !CInt
[ev_width] :: Event -> !CInt
[ev_height] :: Event -> !CInt
[ev_border_width] :: Event -> !CInt
[ev_above] :: Event -> !Window
[ev_override_redirect] :: Event -> !Bool
MapRequestEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Window -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_parent] :: Event -> !Window
[ev_window] :: Event -> !Window
KeyEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Window -> !Window -> !Time -> !CInt -> !CInt -> !CInt -> !CInt -> !KeyMask -> !KeyCode -> !Bool -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_root] :: Event -> !Window
[ev_subwindow] :: Event -> !Window
[ev_time] :: Event -> !Time
[ev_x] :: Event -> !CInt
[ev_y] :: Event -> !CInt
[ev_x_root] :: Event -> !CInt
[ev_y_root] :: Event -> !CInt
[ev_state] :: Event -> !KeyMask
[ev_keycode] :: Event -> !KeyCode
[ev_same_screen] :: Event -> !Bool
ButtonEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Window -> !Window -> !Time -> !CInt -> !CInt -> !CInt -> !CInt -> !KeyMask -> !Button -> !Bool -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_root] :: Event -> !Window
[ev_subwindow] :: Event -> !Window
[ev_time] :: Event -> !Time
[ev_x] :: Event -> !CInt
[ev_y] :: Event -> !CInt
[ev_x_root] :: Event -> !CInt
[ev_y_root] :: Event -> !CInt
[ev_state] :: Event -> !KeyMask
[ev_button] :: Event -> !Button
[ev_same_screen] :: Event -> !Bool
MotionEvent :: !EventType -> !CULong -> !Bool -> Display -> !CInt -> !CInt -> !Window -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_x] :: Event -> !CInt
[ev_y] :: Event -> !CInt
[ev_window] :: Event -> !Window
DestroyWindowEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Window -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_event] :: Event -> !Window
[ev_window] :: Event -> !Window
UnmapEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Window -> !Bool -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_event] :: Event -> !Window
[ev_window] :: Event -> !Window
[ev_from_configure] :: Event -> !Bool
MapNotifyEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Window -> !Bool -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_event] :: Event -> !Window
[ev_window] :: Event -> !Window
[ev_override_redirect] :: Event -> !Bool
MappingNotifyEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !MappingRequest -> !KeyCode -> !CInt -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_request] :: Event -> !MappingRequest
[ev_first_keycode] :: Event -> !KeyCode
[ev_count] :: Event -> !CInt
CrossingEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Window -> !Window -> !Time -> !CInt -> !CInt -> !CInt -> !CInt -> !NotifyMode -> !NotifyDetail -> !Bool -> !Bool -> !Modifier -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_root] :: Event -> !Window
[ev_subwindow] :: Event -> !Window
[ev_time] :: Event -> !Time
[ev_x] :: Event -> !CInt
[ev_y] :: Event -> !CInt
[ev_x_root] :: Event -> !CInt
[ev_y_root] :: Event -> !CInt
[ev_mode] :: Event -> !NotifyMode
[ev_detail] :: Event -> !NotifyDetail
[ev_same_screen] :: Event -> !Bool
[ev_focus] :: Event -> !Bool
[ev_state] :: Event -> !Modifier
SelectionRequest :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Window -> !Atom -> !Atom -> !Atom -> !Time -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_owner] :: Event -> !Window
[ev_requestor] :: Event -> !Window
[ev_selection] :: Event -> !Atom
[ev_target] :: Event -> !Atom
[ev_property] :: Event -> !Atom
[ev_time] :: Event -> !Time
SelectionClear :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Atom -> !Time -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_selection] :: Event -> !Atom
[ev_time] :: Event -> !Time
PropertyEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Atom -> !Time -> !CInt -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_atom] :: Event -> !Atom
[ev_time] :: Event -> !Time
[ev_propstate] :: Event -> !CInt
ExposeEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !CInt -> !CInt -> !CInt -> !CInt -> !CInt -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_x] :: Event -> !CInt
[ev_y] :: Event -> !CInt
[ev_width] :: Event -> !CInt
[ev_height] :: Event -> !CInt
[ev_count] :: Event -> !CInt
FocusChangeEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !NotifyMode -> !NotifyDetail -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_mode] :: Event -> !NotifyMode
[ev_detail] :: Event -> !NotifyDetail
ClientMessageEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Atom -> ![CInt] -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_message_type] :: Event -> !Atom
[ev_data] :: Event -> ![CInt]
RRScreenChangeNotifyEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Window -> !Time -> !Time -> !SizeID -> !SubpixelOrder -> !Rotation -> !CInt -> !CInt -> !CInt -> !CInt -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_root] :: Event -> !Window
[ev_timestamp] :: Event -> !Time
[ev_config_timestamp] :: Event -> !Time
[ev_size_index] :: Event -> !SizeID
[ev_subpixel_order] :: Event -> !SubpixelOrder
[ev_rotation] :: Event -> !Rotation
[ev_width] :: Event -> !CInt
[ev_height] :: Event -> !CInt
[ev_mwidth] :: Event -> !CInt
[ev_mheight] :: Event -> !CInt
RRNotifyEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !CInt -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_subtype] :: Event -> !CInt
RRCrtcChangeNotifyEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !CInt -> !RRCrtc -> !RRMode -> !Rotation -> !CInt -> !CInt -> !CUInt -> !CUInt -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_subtype] :: Event -> !CInt
[ev_crtc] :: Event -> !RRCrtc
[ev_rr_mode] :: Event -> !RRMode
[ev_rotation] :: Event -> !Rotation
[ev_x] :: Event -> !CInt
[ev_y] :: Event -> !CInt
[ev_rr_width] :: Event -> !CUInt
[ev_rr_height] :: Event -> !CUInt
RROutputChangeNotifyEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !CInt -> !RROutput -> !RRCrtc -> !RRMode -> !Rotation -> !Connection -> !SubpixelOrder -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_subtype] :: Event -> !CInt
[ev_output] :: Event -> !RROutput
[ev_crtc] :: Event -> !RRCrtc
[ev_rr_mode] :: Event -> !RRMode
[ev_rotation] :: Event -> !Rotation
[ev_connection] :: Event -> !Connection
[ev_subpixel_order] :: Event -> !SubpixelOrder
RROutputPropertyNotifyEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !CInt -> !RROutput -> !Atom -> !Time -> !CInt -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_subtype] :: Event -> !CInt
[ev_output] :: Event -> !RROutput
[ev_property] :: Event -> !Atom
[ev_timestamp] :: Event -> !Time
[ev_rr_state] :: Event -> !CInt
ScreenSaverNotifyEvent :: !EventType -> !CULong -> !Bool -> Display -> !Window -> !Window -> !XScreenSaverState -> !XScreenSaverKind -> !Bool -> !Time -> Event
[ev_event_type] :: Event -> !EventType
[ev_serial] :: Event -> !CULong
[ev_send_event] :: Event -> !Bool
[ev_event_display] :: Event -> Display
[ev_window] :: Event -> !Window
[ev_root] :: Event -> !Window
[ev_ss_state] :: Event -> !XScreenSaverState
[ev_ss_kind] :: Event -> !XScreenSaverKind
[ev_forced] :: Event -> !Bool
[ev_time] :: Event -> !Time
xFree :: Ptr a -> IO CInt
xFreeModifiermap :: Ptr () -> IO (Ptr CInt)
xGetModifierMapping :: Display -> IO (Ptr ())
xGetCommand :: Display -> Window -> Ptr (Ptr CWString) -> Ptr CInt -> IO Status

-- | A binding to XMapRaised.
mapRaised :: Display -> Window -> IO CInt
_xSetErrorHandler :: FunPtr CXErrorHandler -> IO (FunPtr CXErrorHandler)
getXErrorHandler :: FunPtr CXErrorHandler -> CXErrorHandler
mkXErrorHandler :: CXErrorHandler -> IO (FunPtr CXErrorHandler)
xConvertSelection :: Display -> Atom -> Atom -> Atom -> Window -> Time -> IO ()
xGetSelectionOwner :: Display -> Atom -> IO Window
xSetSelectionOwner :: Display -> Atom -> Window -> Time -> IO ()
isPrivateKeypadKey :: KeySym -> Bool
isPFKey :: KeySym -> Bool
isModifierKey :: KeySym -> Bool
isMiscFunctionKey :: KeySym -> Bool
isKeypadKey :: KeySym -> Bool
isFunctionKey :: KeySym -> Bool
isCursorKey :: KeySym -> Bool
xSetWMHints :: Display -> Window -> Ptr WMHints -> IO Status
xAllocWMHints :: IO (Ptr WMHints)
xSetClassHint :: Display -> Window -> Ptr ClassHint -> IO ()
xGetClassHint :: Display -> Window -> Ptr ClassHint -> IO Status
xSetWMNormalHints :: Display -> Window -> Ptr SizeHints -> IO ()
xAllocSizeHints :: IO (Ptr SizeHints)
xGetWMNormalHints :: Display -> Window -> Ptr SizeHints -> Ptr CLong -> IO Status
xUnmapWindow :: Display -> Window -> IO CInt
xGetWindowProperty :: Display -> Window -> Atom -> CLong -> CLong -> Bool -> Atom -> Ptr Atom -> Ptr CInt -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CUChar) -> IO Status
xDeleteProperty :: Display -> Window -> Atom -> IO Status
xChangeProperty :: Display -> Window -> Atom -> Atom -> CInt -> CInt -> Ptr CUChar -> CInt -> IO Status
xRefreshKeyboardMapping :: Ptr () -> IO CInt
xSetErrorHandler :: IO ()
xGetWMProtocols :: Display -> Window -> Ptr (Ptr Atom) -> Ptr CInt -> IO Status
xGetTransientForHint :: Display -> Window -> Ptr Window -> IO Status
xFetchName :: Display -> Window -> Ptr CString -> IO Status
xwcTextEscapement :: FontSet -> CWString -> CInt -> IO Int32
xwcDrawImageString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> CWString -> CInt -> IO ()
xwcDrawString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> CWString -> CInt -> IO ()
xwcTextExtents :: FontSet -> CWString -> CInt -> Ptr Rectangle -> Ptr Rectangle -> IO CInt
freeFontSet :: Display -> FontSet -> IO ()
freeStringList :: Ptr CString -> IO ()
xCreateFontSet :: Display -> CString -> Ptr (Ptr CString) -> Ptr CInt -> Ptr CString -> IO (Ptr FontSet)
wcFreeStringList :: Ptr CWString -> IO ()
xwcTextPropertyToTextList :: Display -> Ptr TextProperty -> Ptr (Ptr CWString) -> Ptr CInt -> IO CInt
xGetTextProperty :: Display -> Window -> Ptr TextProperty -> Atom -> IO Status

-- | interface to the X11 library function
--   <tt>XChangeWindowAttributes()</tt>.
changeWindowAttributes :: Display -> Window -> AttributeMask -> Ptr SetWindowAttributes -> IO ()
xGetWindowAttributes :: Display -> Window -> Ptr WindowAttributes -> IO Status
xQueryTree :: Display -> Window -> Ptr Window -> Ptr Window -> Ptr (Ptr Window) -> Ptr CInt -> IO Status
killClient :: Display -> Window -> IO CInt
xConfigureWindow :: Display -> Window -> CULong -> Ptr WindowChanges -> IO CInt
eventTable :: [(EventType, String)]
eventName :: Event -> String
getEvent :: XEventPtr -> IO Event
none :: XID
anyButton :: Button
anyKey :: KeyCode
currentTime :: Time
configureWindow :: Display -> Window -> CULong -> WindowChanges -> IO ()
queryTree :: Display -> Window -> IO (Window, Window, [Window])
waIsUnmapped :: CInt
waIsUnviewable :: CInt
waIsViewable :: CInt
getWindowAttributes :: Display -> Window -> IO WindowAttributes

-- | Run an action with the server
withServer :: Display -> IO () -> IO ()
getTextProperty :: Display -> Window -> Atom -> IO TextProperty
wcTextPropertyToTextList :: Display -> TextProperty -> IO [String]
createFontSet :: Display -> String -> IO ([String], String, FontSet)
wcTextExtents :: FontSet -> String -> (Rectangle, Rectangle)
wcDrawString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> String -> IO ()
wcDrawImageString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> String -> IO ()
wcTextEscapement :: FontSet -> String -> Int32
fetchName :: Display -> Window -> IO (Maybe String)
getTransientForHint :: Display -> Window -> IO (Maybe Window)

-- | The XGetWMProtocols function returns the list of atoms stored in the
--   WM_PROTOCOLS property on the specified window. These atoms describe
--   window manager protocols in which the owner of this window is willing
--   to participate. If the property exists, is of type ATOM, is of format
--   32, and the atom WM_PROTOCOLS can be interned, XGetWMProtocols sets
--   the protocols_return argument to a list of atoms, sets the
--   count_return argument to the number of elements in the list, and
--   returns a nonzero status. Otherwise, it sets neither of the return
--   arguments and returns a zero status. To release the list of atoms, use
--   XFree.
getWMProtocols :: Display -> Window -> IO [Atom]
setEventType :: XEventPtr -> EventType -> IO ()
setSelectionNotify :: XEventPtr -> Window -> Atom -> Atom -> Atom -> Time -> IO ()
setClientMessageEvent :: XEventPtr -> Window -> Atom -> CInt -> Atom -> Time -> IO ()
setClientMessageEvent' :: XEventPtr -> Window -> Atom -> CInt -> [CInt] -> IO ()
setConfigureEvent :: XEventPtr -> Window -> Window -> CInt -> CInt -> CInt -> CInt -> CInt -> Window -> Bool -> IO ()
setKeyEvent :: XEventPtr -> Window -> Window -> Window -> KeyMask -> KeyCode -> Bool -> IO ()
anyPropertyType :: Atom
changeProperty8 :: Display -> Window -> Atom -> Atom -> CInt -> [CChar] -> IO ()
changeProperty16 :: Display -> Window -> Atom -> Atom -> CInt -> [CShort] -> IO ()
changeProperty32 :: Display -> Window -> Atom -> Atom -> CInt -> [CLong] -> IO ()
propModeReplace :: CInt
propModePrepend :: CInt
propModeAppend :: CInt
deleteProperty :: Display -> Window -> Atom -> IO ()
unmapWindow :: Display -> Window -> IO ()
pMinSizeBit :: Int
pMaxSizeBit :: Int
pResizeIncBit :: Int
pAspectBit :: Int
pBaseSizeBit :: Int
pWinGravityBit :: Int
getWMNormalHints :: Display -> Window -> IO SizeHints
setWMNormalHints :: Display -> Window -> SizeHints -> IO ()
getClassHint :: Display -> Window -> IO ClassHint

-- | Set the <tt>WM_CLASS</tt> property for the given window.
setClassHint :: Display -> Window -> ClassHint -> IO ()
withdrawnState :: Int
normalState :: Int
iconicState :: Int
inputHintBit :: Int
stateHintBit :: Int
iconPixmapHintBit :: Int
iconWindowHintBit :: Int
iconPositionHintBit :: Int
iconMaskHintBit :: Int
windowGroupHintBit :: Int
urgencyHintBit :: Int
allHintsBitmask :: CLong
setWMHints :: Display -> Window -> WMHints -> IO Status

-- | A binding to XSetErrorHandler. NOTE: This is pretty experimental
--   because of safe vs. unsafe calls. I changed sync to a safe call, but
--   there *might* be other calls that cause a problem
setErrorHandler :: XErrorHandler -> IO ()

-- | Retrieves error event data from a pointer to an XErrorEvent and puts
--   it into an ErrorEvent.
getErrorEvent :: XErrorEventPtr -> IO ErrorEvent
getCommand :: Display -> Window -> IO [String]
getModifierMapping :: Display -> IO [(Modifier, [KeyCode])]
data SafeX11Exception
SafeX11Exception :: SafeX11Exception
data IORequest
IORequest :: IO a -> Chan (Either SafeX11Exception a) -> IORequest
[ioAction] :: IORequest -> IO a
[ioResponse] :: IORequest -> Chan (Either SafeX11Exception a)
rawGetWindowProperty :: Storable a => Int -> Display -> Atom -> Window -> IO (Maybe [a])
getWindowProperty8 :: Display -> Atom -> Window -> IO (Maybe [CChar])
getWindowProperty16 :: Display -> Atom -> Window -> IO (Maybe [CShort])
getWindowProperty32 :: Display -> Atom -> Window -> IO (Maybe [CLong])
getWMHints :: Display -> Window -> IO WMHints
logHere :: Priority -> String -> IO ()
safeXGetWMHints :: Display -> Window -> IO (Ptr WMHints)
safeXGetWindowProperty :: Display -> Window -> Atom -> CLong -> CLong -> Bool -> Atom -> Ptr Atom -> Ptr CInt -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CUChar) -> IO Status
rawGetWindowPropertyBytes :: Storable a => Int -> Display -> Atom -> Window -> IO (Maybe (ForeignPtr a, Int))
postX11RequestSync :: IO a -> IO (Either SafeX11Exception a)
requestQueue :: Chan IORequest
x11Thread :: ThreadId
startHandlingX11Requests :: IO ()
withErrorHandler :: XErrorHandler -> IO a -> IO a
handleX11Requests :: IO ()
postX11RequestSyncDef :: a -> IO a -> IO a
safeGetGeometry :: Display -> Drawable -> IO (Window, Position, Position, Dimension, Dimension, Dimension, CInt)
outParameters7 :: (Storable a, Storable b, Storable c, Storable d, Storable e, Storable f, Storable g) => (IO r -> IO ()) -> (Ptr a -> Ptr b -> Ptr c -> Ptr d -> Ptr e -> Ptr f -> Ptr g -> IO r) -> IO (a, b, c, d, e, f, g)
xGetGeometry :: Display -> Drawable -> Ptr Window -> Ptr Position -> Ptr Position -> Ptr Dimension -> Ptr Dimension -> Ptr Dimension -> Ptr CInt -> IO Status
instance GHC.Classes.Eq System.Taffybar.Information.SafeX11.SafeX11Exception
instance GHC.Show.Show System.Taffybar.Information.SafeX11.SafeX11Exception
instance GHC.Show.Show Graphics.X11.Xlib.Extras.ErrorEvent
instance GHC.Exception.Type.Exception System.Taffybar.Information.SafeX11.SafeX11Exception


-- | Generic code to poll any of the many data files maintained by the
--   kernel in POSIX systems. Provides methods for applying a custom
--   parsing function to the contents of the file and to calculate
--   differentials across one or more values provided via the file.
module System.Taffybar.Information.StreamInfo

-- | Apply the given parser function to the file under the given path to
--   produce a lookup map, then use the given selector as key to extract
--   from it the desired value.
getParsedInfo :: FilePath -> (String -> [(String, [a])]) -> String -> IO [a]

-- | Probe the given action and return the relative variation of each of
--   the obtained values against the whole, where the whole is calculated
--   as the sum of all the values in the probe.
getLoad :: (Integral a, RealFloat b) => b -> IO [a] -> IO [b]

-- | Similar to getLoad, but execute the given action only once and use the
--   given IORef to calculate the result and to save the current value, so
--   it can be reused in the next call.
getAccLoad :: (Integral a, RealFloat b) => IORef [a] -> IO [a] -> IO [b]

-- | Probe the given action and, interpreting the result as a variation in
--   time, return the speed of change of its values.
getTransfer :: (Integral a, RealFloat b) => b -> IO [a] -> IO [b]


-- | Provides information about read/write operations in a given disk or
--   partition, obtained from parsing the <tt>/proc/diskstats</tt> file
--   with some of the facilities included in the
--   <a>System.Taffybar.Information.StreamInfo</a> module.
module System.Taffybar.Information.DiskIO

-- | Returns a two-element list containing the speed of transfer for read
--   and write operations performed in the given disk/partition (e.g.
--   "sda", "sda1").
getDiskTransfer :: String -> IO [Double]


-- | Provides information about used CPU times, obtained from parsing the
--   <tt>/proc/stat</tt> file using some of the facilities included in the
--   <a>System.Taffybar.Information.StreamInfo</a> module. And also
--   provides information about the temperature of cores. (Now supports
--   only physical cpu).
module System.Taffybar.Information.CPU2

-- | Returns a list of 5 to 7 elements containing all the values available
--   for the given core (or all of them aggregated, if "cpu" is passed).
getCPUInfo :: String -> IO [Int]
parse :: String -> [(String, [Int])]
tuplize :: [String] -> Maybe (String, [Int])

-- | Returns a two-element list containing relative system and user times
--   calculated using two almost simultaneous samples of the
--   <tt>/proc/stat</tt> file for the given core (or all of them
--   aggregated, if "cpu" is passed).
getCPULoad :: String -> IO [Double]

-- | Get the directory in which core temperature files are kept.
getCPUTemperatureDirectory :: IO FilePath
readCPUTempFile :: FilePath -> IO Double
getAllTemperatureFiles :: FilePath -> IO [FilePath]
getCPUTemperatures :: IO [(String, Double)]


-- | Low-level functions to access data provided by the X11 desktop via
--   window properties. One of them (<a>getVisibleTags</a>) depends on the
--   PagerHints hook being installed in your <tt>~/.xmonad/xmonad.hs</tt>
--   configuration:
--   
--   <pre>
--   import System.Taffybar.Support.PagerHints (pagerHints)
--   
--   main = xmonad $ ewmh $ pagerHints $ ...
--   </pre>
module System.Taffybar.Information.X11DesktopInfo
data X11Context
X11Context :: Display -> Window -> MVar [(String, Atom)] -> X11Context
[contextDisplay] :: X11Context -> Display
[_contextRoot] :: X11Context -> Window
[atomCache] :: X11Context -> MVar [(String, Atom)]
type X11Property a = ReaderT X11Context IO a
type X11Window = Window

-- | Move the X11Windows to the bottom of the X11 window stack.
doLowerWindow :: X11Window -> X11Property ()

-- | Spawn a new thread and listen inside it to all incoming events,
--   invoking the given function to every event of type
--   <tt>MapNotifyEvent</tt> that arrives, and subscribing to all events of
--   this type emitted by newly created windows.
eventLoop :: (Event -> IO ()) -> X11Property ()

-- | Apply the given function to the given window in order to obtain the
--   X11 property with the given name, or Nothing if no such property can
--   be read.
fetch :: Integral a => PropertyFetcher a -> Maybe X11Window -> String -> X11Property (Maybe [a])

-- | Return the Atom with the given name.
getAtom :: String -> X11Property Atom

-- | Build a new <tt>X11Context</tt> containing the current X11 display and
--   its root window.
getDefaultCtx :: IO X11Context

-- | An X11Property that returns the <tt>Display</tt> object stored in the
--   X11Context.
getDisplay :: X11Property Display

-- | Get the index of the primary monitor as set and ordered by Xrandr.
getPrimaryOutputNumber :: X11Property (Maybe Int)

-- | Retrieve the value of the special _XMONAD_VISIBLE_WORKSPACES hint set
--   by the PagerHints hook provided by Taffybar (see module documentation
--   for instructions on how to do this), or an empty list of strings if
--   the PagerHints hook is not available.
getVisibleTags :: X11Property [String]

-- | Determine whether the "urgent" flag is set in the WM_HINTS of the
--   given window.
isWindowUrgent :: X11Window -> X11Property Bool

-- | Post the provided X11Property to taffybar's dedicated X11 thread, and
--   wait for the result. The provided default value will be returned in
--   the case of an error.
postX11RequestSyncProp :: X11Property a -> a -> X11Property a

-- | Retrieve the property of the given window (or the root window, if
--   Nothing) with the given name as a value of type Int. If that property
--   hasn't been set, then return -1.
readAsInt :: Maybe X11Window -> String -> X11Property Int

-- | Retrieve the property of the given window (or the root window, if
--   Nothing) with the given name as a list of Ints. If that property
--   hasn't been set, then return an empty list.
readAsListOfInt :: Maybe X11Window -> String -> X11Property [Int]

-- | Retrieve the property of the given window (or the root window, if
--   Nothing) with the given name as a list of Strings. If the property
--   hasn't been set, then return an empty list.
readAsListOfString :: Maybe X11Window -> String -> X11Property [String]

-- | Retrieve the property of the given window (or the root window, if
--   Nothing) with the given name as a list of X11 Window IDs. If the
--   property hasn't been set, then return an empty list.
readAsListOfWindow :: Maybe X11Window -> String -> X11Property [X11Window]

-- | Retrieve the property of the given window (or the root window, if
--   Nothing) with the given name as a String. If the property hasn't been
--   set, then return an empty string.
readAsString :: Maybe X11Window -> String -> X11Property String

-- | Emit a "command" event with one argument for the X server. This is
--   used to send events that can be received by event hooks in the XMonad
--   process and acted upon in that context.
sendCommandEvent :: Atom -> Atom -> X11Property ()

-- | Similar to <a>sendCommandEvent</a>, but with an argument of type
--   Window.
sendWindowEvent :: Atom -> X11Window -> X11Property ()

-- | Put the current display and root window objects inside a Reader
--   transformer for further computation.
withDefaultCtx :: X11Property a -> IO a


-- | Functions to access data provided by the X11 desktop via EWHM hints.
--   This module requires that the EwmhDesktops hook from the XMonadContrib
--   project be installed in your <tt>~/.xmonad/xmonad.hs</tt>
--   configuration:
--   
--   <pre>
--   import XMonad
--   import XMonad.Hooks.EwmhDesktops (ewmh)
--   
--   main = xmonad $ ewmh $ ...
--   </pre>
module System.Taffybar.Information.EWMHDesktopInfo
data EWMHIcon
EWMHIcon :: Int -> Int -> Ptr PixelsWordType -> EWMHIcon
[ewmhWidth] :: EWMHIcon -> Int
[ewmhHeight] :: EWMHIcon -> Int
[ewmhPixelsARGB] :: EWMHIcon -> Ptr PixelsWordType
type EWMHIconData = (ForeignPtr PixelsWordType, Int)
newtype WorkspaceId
WorkspaceId :: Int -> WorkspaceId
type X11Window = Window
allEWMHProperties :: [EWMHProperty]
ewmhActiveWindow :: EWMHProperty
ewmhClientList :: EWMHProperty
ewmhClientListStacking :: EWMHProperty
ewmhCurrentDesktop :: EWMHProperty
ewmhDesktopNames :: EWMHProperty
ewmhNumberOfDesktops :: EWMHProperty
ewmhStateHidden :: EWMHProperty
ewmhWMClass :: EWMHProperty
ewmhWMDesktop :: EWMHProperty
ewmhWMIcon :: EWMHProperty
ewmhWMName :: EWMHProperty
ewmhWMName2 :: EWMHProperty
ewmhWMState :: EWMHProperty
ewmhWMStateHidden :: EWMHProperty

-- | Ask the window manager to give focus to the given window.
focusWindow :: X11Window -> X11Property ()

-- | Get the window that currently has focus if such a window exists.
getActiveWindow :: X11Property (Maybe X11Window)

-- | Retrieve the index of the current workspace in the desktop, starting
--   from 0.
getCurrentWorkspace :: X11Property WorkspaceId

-- | Retrieve the indexes of all currently visible workspaces with the
--   active workspace at the head of the list.
getVisibleWorkspaces :: X11Property [WorkspaceId]

-- | Get the class of the given X11 window.
getWindowClass :: X11Window -> X11Property String

-- | Get EWMHIconData for the given X11Window
getWindowIconsData :: X11Window -> X11Property (Maybe EWMHIconData)

-- | Get a bool reflecting whether window with provided X11Window is
--   minimized or not.
getWindowMinimized :: X11Window -> X11Property Bool
getWindowState :: X11Window -> [String] -> X11Property [String]
getWindowStateProperty :: String -> X11Window -> X11Property Bool

-- | Get the title of the given X11 window.
getWindowTitle :: X11Window -> X11Property String

-- | Return a list of all <tt>X11Window</tt>s, sorted by initial mapping
--   order, oldest to newest.
getWindows :: X11Property [X11Window]

-- | Return a list of all <tt>X11Window</tt>s, sorted in stacking order,
--   bottom-to-top.
getWindowsStacking :: X11Property [X11Window]

-- | Return the index (starting from 0) of the workspace on which the given
--   window is being displayed.
getWorkspace :: X11Window -> X11Property WorkspaceId

-- | Return a list with the names of all the workspaces currently
--   available.
getWorkspaceNames :: X11Property [(WorkspaceId, String)]

-- | Determine whether the "urgent" flag is set in the WM_HINTS of the
--   given window.
isWindowUrgent :: X11Window -> X11Property Bool
parseWindowClasses :: String -> [String]

-- | Move one workspace up or down from the current workspace
switchOneWorkspace :: Bool -> Int -> X11Property ()

-- | Ask the window manager to switch to the workspace with the given
--   index, starting from 0.
switchToWorkspace :: WorkspaceId -> X11Property ()

-- | Put the current display and root window objects inside a Reader
--   transformer for further computation.
withDefaultCtx :: X11Property a -> IO a

-- | Operate on the data contained in <a>EWMHIconData</a> in the easier to
--   interact with format offered by <a>EWMHIcon</a>. This function is much
--   like <a>withForeignPtr</a> in that the <a>EWMHIcon</a> values that are
--   provided to the callable argument should not be kept around in any
--   way, because it can not be guaranteed that the finalizer for the
--   memory to which those icon objects point will not be executed, after
--   the call to <a>withEWMHIcons</a> completes.
withEWMHIcons :: EWMHIconData -> ([EWMHIcon] -> IO a) -> IO a
instance GHC.Classes.Eq System.Taffybar.Information.EWMHDesktopInfo.WorkspaceId
instance GHC.Classes.Ord System.Taffybar.Information.EWMHDesktopInfo.WorkspaceId
instance GHC.Read.Read System.Taffybar.Information.EWMHDesktopInfo.WorkspaceId
instance GHC.Show.Show System.Taffybar.Information.EWMHDesktopInfo.WorkspaceId
instance GHC.Classes.Eq System.Taffybar.Information.EWMHDesktopInfo.EWMHIcon
instance GHC.Show.Show System.Taffybar.Information.EWMHDesktopInfo.EWMHIcon


module System.Taffybar.LogFormatter
setColor :: Color -> String
priorityToColor :: Priority -> Color
reset :: String
colorize :: Color -> String -> String
taffyLogFormatter :: LogFormatter a
taffyLogHandler :: IO (GenericHandler Handle)


-- | Complements the <a>XMonad.Hooks.EwmhDesktops</a> with two additional
--   hints not contemplated by the EWMH standard:
--   
--   <ul>
--   <li><i><tt>_XMONAD_CURRENT_LAYOUT</tt></i> Contains a UTF-8 string
--   with the name of the windows layout currently used in the active
--   workspace.</li>
--   <li><i><tt>_XMONAD_VISIBLE_WORKSPACES</tt></i> Contains a list of
--   UTF-8 strings with the names of all the workspaces that are currently
--   showed in a secondary display, or an empty list if in the current
--   installation there's only one monitor.</li>
--   </ul>
--   
--   The first hint can be set directly on the root window of the default
--   display, or indirectly via X11 events with an atom of the same name.
--   This allows both to track any changes that occur in the layout of the
--   current workspace, as well as to have it changed automatically by just
--   sending a custom event to the hook.
--   
--   The second one should be considered read-only, and is set every time
--   XMonad calls its log hooks.
module System.Taffybar.Support.PagerHints

-- | Add support for the "Current Layout" and "Visible Workspaces" custom
--   hints to the given config.
pagerHints :: XConfig a -> XConfig a


module System.Taffybar.Util
taffyStateDir :: IO FilePath
liftReader :: Monad m => (m1 a -> m b) -> ReaderT r m1 a -> ReaderT r m b
logPrintF :: (MonadIO m, Show t) => String -> Priority -> String -> t -> m ()
logPrintFDebug :: (MonadIO m, Show t) => String -> String -> t -> m ()
(??) :: Functor f => f (a -> b) -> a -> f b
infixl 4 ??
ifM :: Monad m => m Bool -> m a -> m a -> m a
forkM :: Monad m => (c -> m a) -> (c -> m b) -> c -> m (a, b)
maybeToEither :: b -> Maybe a -> Either b a
truncateString :: Int -> String -> String
truncateText :: Int -> Text -> Text
runCommandFromPath :: MonadIO m => [String] -> m (Either String String)

-- | Run the provided command with the provided arguments.
runCommand :: MonadIO m => FilePath -> [String] -> m (Either String String)

-- | Execute the provided IO action at the provided interval.
foreverWithDelay :: (MonadIO m, RealFrac d) => d -> IO () -> m ThreadId

-- | Execute the provided IO action, and use the value it returns to decide
--   how long to wait until executing it again. The value returned by the
--   action is interpreted as a number of seconds.
foreverWithVariableDelay :: (MonadIO m, RealFrac d) => IO d -> m ThreadId
liftActionTaker :: Monad m => ((a -> m a) -> m b) -> (a -> ReaderT c m a) -> ReaderT c m b
maybeTCombine :: Monad m => m (Maybe a) -> m (Maybe a) -> m (Maybe a)
(<||>) :: Monad m => (t -> m (Maybe a)) -> (t -> m (Maybe a)) -> t -> m (Maybe a)
infixl 3 <||>
(<|||>) :: Monad m => (t -> t1 -> m (Maybe a)) -> (t -> t1 -> m (Maybe a)) -> t -> t1 -> m (Maybe a)
infixl 3 <|||>
catchGErrorsAsLeft :: IO a -> IO (Either GError a)
catchGErrorsAsNothing :: IO a -> IO (Maybe a)
safePixbufNewFromFile :: FilePath -> IO (Maybe Pixbuf)
getPixbufFromFilePath :: FilePath -> IO (Maybe Pixbuf)
downloadURIToPath :: Request -> FilePath -> IO ()
postGUIASync :: IO () -> IO ()
postGUISync :: IO () -> IO ()
anyM :: Monad m => (a -> m Bool) -> [a] -> m Bool


-- | Implementation of version 1.1 of the XDG "Desktop Menu Specification",
--   see
--   <a>https://specifications.freedesktop.org/menu-spec/menu-spec-1.1.html</a>
module System.Taffybar.Information.XDG.Protocol

-- | XDG Menu, cf. "Desktop Menu Specification".
data XDGMenu
XDGMenu :: Maybe String -> Bool -> Maybe String -> Bool -> [String] -> String -> String -> Bool -> Bool -> Maybe DesktopEntryCondition -> Maybe DesktopEntryCondition -> [XDGMenu] -> [XDGLayoutItem] -> XDGMenu
[xmAppDir] :: XDGMenu -> Maybe String
[xmDefaultAppDirs] :: XDGMenu -> Bool
[xmDirectoryDir] :: XDGMenu -> Maybe String
[xmDefaultDirectoryDirs] :: XDGMenu -> Bool
[xmLegacyDirs] :: XDGMenu -> [String]
[xmName] :: XDGMenu -> String
[xmDirectory] :: XDGMenu -> String
[xmOnlyUnallocated] :: XDGMenu -> Bool
[xmDeleted] :: XDGMenu -> Bool
[xmInclude] :: XDGMenu -> Maybe DesktopEntryCondition
[xmExclude] :: XDGMenu -> Maybe DesktopEntryCondition
[xmSubmenus] :: XDGMenu -> [XDGMenu]
[xmLayout] :: XDGMenu -> [XDGLayoutItem]

-- | Combinable conditions for Include and Exclude statements.
data DesktopEntryCondition
Category :: String -> DesktopEntryCondition
Filename :: String -> DesktopEntryCondition
Not :: DesktopEntryCondition -> DesktopEntryCondition
And :: [DesktopEntryCondition] -> DesktopEntryCondition
Or :: [DesktopEntryCondition] -> DesktopEntryCondition
All :: DesktopEntryCondition
None :: DesktopEntryCondition

-- | Return a list of all available desktop entries for a given xdg menu.
getApplicationEntries :: [String] -> XDGMenu -> IO [DesktopEntry]

-- | Return desktop directories
getDirectoryDirs :: IO [FilePath]

-- | Determine locale language settings
getPreferredLanguages :: IO [String]

-- | Determine current Desktop
getXDGDesktop :: IO String

-- | Find filename(s) of the application menu(s).
getXDGMenuFilenames :: Maybe String -> IO [FilePath]

-- | Determine whether a desktop entry fulfils a condition.
matchesCondition :: DesktopEntry -> DesktopEntryCondition -> Bool

-- | Fetch menus and desktop entries and assemble the XDG menu.
readXDGMenu :: Maybe String -> IO (Maybe (XDGMenu, [DesktopEntry]))
instance GHC.Show.Show System.Taffybar.Information.XDG.Protocol.XDGLayoutItem
instance GHC.Classes.Eq System.Taffybar.Information.XDG.Protocol.DesktopEntryCondition
instance GHC.Show.Show System.Taffybar.Information.XDG.Protocol.DesktopEntryCondition
instance GHC.Read.Read System.Taffybar.Information.XDG.Protocol.DesktopEntryCondition
instance GHC.Show.Show System.Taffybar.Information.XDG.Protocol.XDGMenu


-- | Provides information about network traffic over selected interfaces,
--   obtained from parsing the <tt>/proc/net/dev</tt> file using some of
--   the facilities provided by the
--   <a>System.Taffybar.Information.StreamInfo</a> module.
module System.Taffybar.Information.Network
networkInfoFile :: FilePath

-- | Returns a two-element list containing the current number of bytes
--   received and transmitted via the given network interface (e.g.
--   "wlan0"), according to the contents of the <tt>/proc/dev/net</tt>
--   file.
getNetInfo :: String -> IO (Maybe [Int])
parseDevNet' :: String -> [(String, [Int])]
parseDevNet :: String -> [(String, (Int, Int))]
getDeviceUpDown :: [String] -> Maybe (String, (Int, Int))
isInterfaceUp :: String -> MaybeT IO ()
handleFailure :: IO a -> MaybeT IO a
getDeviceSamples :: IO (Maybe [TxSample])
data TxSample
TxSample :: Int -> Int -> SystemTime -> String -> TxSample
[sampleUp] :: TxSample -> Int
[sampleDown] :: TxSample -> Int
[sampleTime] :: TxSample -> SystemTime
[sampleDevice] :: TxSample -> String
monitorNetworkInterfaces :: RealFrac a1 => a1 -> ([(String, (Rational, Rational))] -> IO ()) -> IO ()
updateSamples :: [(String, (TxSample, TxSample))] -> IO [(String, (TxSample, TxSample))]
getSpeed :: TxSample -> TxSample -> (Rational, Rational)
sumSpeeds :: [(Rational, Rational)] -> (Rational, Rational)
instance GHC.Classes.Eq System.Taffybar.Information.Network.TxSample
instance GHC.Show.Show System.Taffybar.Information.Network.TxSample

module System.Taffybar.Auth
fieldRegex :: Regex
passGet :: MonadIO m => String -> m (Either String (String, [(String, String)]))


-- | This widget listens on DBus for freedesktop notifications
--   (<a>http://developer.gnome.org/notification-spec/</a>). Currently it
--   is somewhat ugly, but the format is somewhat configurable.
--   
--   The widget only displays one notification at a time and notifications
--   are cancellable.
--   
--   The notificationDaemon thread handles new notifications and
--   cancellation requests, adding or removing the notification to or from
--   the queue. It additionally starts a timeout thread for each
--   notification added to queue.
--   
--   The display thread blocks idling until it is awakened to refresh the
--   GUI
--   
--   A timeout thread is associated with a notification id. It sleeps until
--   the specific timeout and then removes every notification with that id
--   from the queue
module System.Taffybar.Widget.FreedesktopNotifications

-- | A simple structure representing a Freedesktop notification
data Notification
Notification :: Text -> Word32 -> Text -> Text -> Maybe Int32 -> Word32 -> Notification
[noteAppName] :: Notification -> Text
[noteReplaceId] :: Notification -> Word32
[noteSummary] :: Notification -> Text
[noteBody] :: Notification -> Text
[noteExpireTimeout] :: Notification -> Maybe Int32
[noteId] :: Notification -> Word32
data NotificationConfig
NotificationConfig :: Maybe Int32 -> Int -> ([Notification] -> Text) -> NotificationConfig

-- | Maximum time that a notification will be displayed (in seconds).
--   Default: None
[notificationMaxTimeout] :: NotificationConfig -> Maybe Int32

-- | Maximum length displayed, in characters. Default: 100
[notificationMaxLength] :: NotificationConfig -> Int

-- | Function used to format notifications, takes the notifications from
--   first to last
[notificationFormatter] :: NotificationConfig -> [Notification] -> Text

-- | The default formatter is one of * Summary : Body * Summary * (N)
--   Summary : Body * (N) Summary depending on the presence of a
--   notification body, and where N is the number of queued notifications.
defaultNotificationConfig :: NotificationConfig

-- | Create a new notification area with the given configuration.
notifyAreaNew :: MonadIO m => NotificationConfig -> m Widget
instance GHC.Classes.Eq System.Taffybar.Widget.FreedesktopNotifications.Notification
instance GHC.Show.Show System.Taffybar.Widget.FreedesktopNotifications.Notification
instance Data.Default.Class.Default System.Taffybar.Widget.FreedesktopNotifications.NotificationConfig

module System.Taffybar.Widget.Generic.ChannelWidget

-- | Given a widget, a <a>BroadcastChan</a> and a function that consumes
--   the values yielded by the channel that is in <a>IO</a>, connect the
--   function to the <a>BroadcastChan</a> on a dedicated haskell thread.
channelWidgetNew :: (MonadIO m, IsWidget w) => w -> BroadcastChan In a -> (a -> IO ()) -> m w

module System.Taffybar.Widget.Generic.DynamicMenu
data DynamicMenuConfig
DynamicMenuConfig :: Widget -> (Menu -> IO ()) -> DynamicMenuConfig
[dmClickWidget] :: DynamicMenuConfig -> Widget
[dmPopulateMenu] :: DynamicMenuConfig -> Menu -> IO ()
dynamicMenuNew :: MonadIO m => DynamicMenuConfig -> m Widget
emptyMenu :: (IsContainer a, MonadIO m) => a -> m ()


-- | This is a simple static image widget, and a polling image widget that
--   updates its contents by calling a callback at a set interval.
module System.Taffybar.Widget.Generic.Icon

-- | Create a new widget that displays a static image
--   
--   <pre>
--   iconImageWidgetNew path
--   </pre>
--   
--   returns a widget with icon at <tt>path</tt>.
iconImageWidgetNew :: MonadIO m => FilePath -> m Widget

-- | Create a new widget that displays a static image
--   
--   <pre>
--   iconWidgetNewFromName name
--   </pre>
--   
--   returns a widget with the icon named <tt>name</tt>. Icon names are
--   sourced from the current GTK theme.
iconImageWidgetNewFromName :: MonadIO m => Text -> m Widget

-- | Create a new widget that updates itself at regular intervals. The
--   function
--   
--   <pre>
--   pollingIconImageWidgetNew path interval cmd
--   </pre>
--   
--   returns a widget with initial icon at <tt>path</tt>. The widget forks
--   a thread to update its contents every <tt>interval</tt> seconds. The
--   command should return a FilePath of a valid icon.
--   
--   If the IO action throws an exception, it will be swallowed and the
--   label will not update until the update interval expires.
pollingIconImageWidgetNew :: MonadIO m => FilePath -> Double -> IO FilePath -> m Widget

-- | Create a new widget that updates itself at regular intervals. The
--   function
--   
--   <pre>
--   pollingIconImageWidgetNewFromName name interval cmd
--   </pre>
--   
--   returns a widget with initial icon whose name is <tt>name</tt>. The
--   widget forks a thread to update its contents every <tt>interval</tt>
--   seconds. The command should return the name of a valid icon.
--   
--   If the IO action throws an exception, it will be swallowed and the
--   label will not update until the update interval expires.
pollingIconImageWidgetNewFromName :: MonadIO m => Text -> Double -> IO Text -> m Widget


-- | Simple button which runs a user defined command when being clicked
module System.Taffybar.Widget.SimpleCommandButton

-- | Creates a new simple command button.
simpleCommandButtonNew :: MonadIO m => Text -> Text -> m Widget


-- | Utility functions to facilitate building GTK interfaces.
module System.Taffybar.Widget.Util

-- | Execute the given action as a response to any of the given types of
--   mouse button clicks.
onClick :: [EventType] -> IO a -> EventButton -> IO Bool

-- | Attach the given widget as a popup with the given title to the given
--   window. The newly attached popup is not shown initially. Use the
--   <a>displayPopup</a> function to display it.
attachPopup :: (IsWidget w, IsWindow wnd) => w -> Text -> wnd -> IO ()

-- | Display the given popup widget (previously prepared using the
--   <a>attachPopup</a> function) immediately beneath (or above) the given
--   window.
displayPopup :: (IsWidget w, IsWidget wnd, IsWindow wnd) => w -> wnd -> IO ()
widgetGetAllocatedSize :: (IsWidget self, MonadIO m) => self -> m (Int, Int)

-- | Creates markup with the given foreground and background colors and the
--   given contents.
colorize :: String -> String -> String -> String
backgroundLoop :: IO a -> IO ()
drawOn :: IsWidget object => object -> IO () -> IO object
widgetSetClassGI :: (IsWidget b, MonadIO m) => b -> Text -> m b
themeLoadFlags :: [IconLookupFlags]
getImageForDesktopEntry :: Int32 -> DesktopEntry -> IO (Maybe Pixbuf)
getImageForMaybeIconName :: Maybe Text -> Int32 -> IO (Maybe Pixbuf)
getImageForIconName :: Text -> Int32 -> IO (Maybe Pixbuf)
loadPixbufByName :: Int32 -> Text -> IO (Maybe Pixbuf)
alignCenter :: (IsWidget o, MonadIO m) => o -> m ()
vFillCenter :: (IsWidget o, MonadIO m) => o -> m ()
pixbufNewFromFileAtScaleByHeight :: Int32 -> String -> IO (Either String Pixbuf)
loadIcon :: Int32 -> String -> IO (Either String Pixbuf)
setMinWidth :: (IsWidget w, MonadIO m) => Int -> w -> m w
addClassIfMissing :: (IsDescendantOf Widget a, MonadIO m, GObject a) => Text -> a -> m ()
removeClassIfPresent :: (IsDescendantOf Widget a, MonadIO m, GObject a) => Text -> a -> m ()

-- | Wrap a widget with two container boxes. The inner box will have the
--   class "inner-pad", and the outer box will have the class "outer-pad".
--   These boxes can be used to add padding between the outline of the
--   widget and its contents, or for the purpose of displaying a different
--   background behind the widget.
buildPadBox :: MonadIO m => Widget -> m Widget
buildContentsBox :: MonadIO m => Widget -> m Widget


-- | A vertical bar that can plot data in the range [0, 1]. The colors are
--   configurable.
module System.Taffybar.Widget.Generic.VerticalBar
data VerticalBarHandle
data BarConfig
BarConfig :: (Double, Double, Double) -> (Double -> (Double, Double, Double)) -> (Double -> (Double, Double, Double)) -> Int -> Int -> BarDirection -> BarConfig

-- | Color of the border drawn around the widget
[barBorderColor] :: BarConfig -> (Double, Double, Double)

-- | The background color of the widget
[barBackgroundColor] :: BarConfig -> Double -> (Double, Double, Double)

-- | A function to determine the color of the widget for the current data
--   point
[barColor] :: BarConfig -> Double -> (Double, Double, Double)

-- | Number of pixels of padding around the widget
[barPadding] :: BarConfig -> Int
[barWidth] :: BarConfig -> Int
[barDirection] :: BarConfig -> BarDirection
BarConfigIO :: IO (Double, Double, Double) -> (Double -> IO (Double, Double, Double)) -> (Double -> IO (Double, Double, Double)) -> Int -> Int -> BarDirection -> BarConfig
[barBorderColorIO] :: BarConfig -> IO (Double, Double, Double)
[barBackgroundColorIO] :: BarConfig -> Double -> IO (Double, Double, Double)
[barColorIO] :: BarConfig -> Double -> IO (Double, Double, Double)

-- | Number of pixels of padding around the widget
[barPadding] :: BarConfig -> Int
[barWidth] :: BarConfig -> Int
[barDirection] :: BarConfig -> BarDirection
data BarDirection
HORIZONTAL :: BarDirection
VERTICAL :: BarDirection
verticalBarNew :: MonadIO m => BarConfig -> m (Widget, VerticalBarHandle)
verticalBarSetPercent :: VerticalBarHandle -> Double -> IO ()

-- | A default bar configuration. The color of the active portion of the
--   bar must be specified.
defaultBarConfig :: (Double -> (Double, Double, Double)) -> BarConfig
defaultBarConfigIO :: (Double -> IO (Double, Double, Double)) -> BarConfig


-- | This is a simple text widget that updates its contents by calling a
--   callback at a set interval.
module System.Taffybar.Widget.Generic.PollingLabel

-- | Create a new widget that updates itself at regular intervals. The
--   function
--   
--   <pre>
--   pollingLabelNew initialString cmd interval
--   </pre>
--   
--   returns a widget with initial text <tt>initialString</tt>. The widget
--   forks a thread to update its contents every <tt>interval</tt> seconds.
--   The command should return a string with any HTML entities escaped.
--   This is not checked by the function, since Pango markup shouldn't be
--   escaped. Proper input sanitization is up to the caller.
--   
--   If the IO action throws an exception, it will be swallowed and the
--   label will not update until the update interval expires.
pollingLabelNew :: MonadIO m => Double -> IO Text -> m Widget
pollingLabelNewWithTooltip :: MonadIO m => Double -> IO (Text, Maybe Text) -> m Widget
pollingLabelWithVariableDelay :: MonadIO m => IO (Text, Maybe Text, Double) -> m Widget

module System.Taffybar.Widget.Text.MemoryMonitor

-- | Creates a simple textual memory monitor. It updates once every polling
--   period (in seconds).
textMemoryMonitorNew :: MonadIO m => String -> Double -> m Widget
showMemoryInfo :: String -> Int -> MemoryInfo -> Text

module System.Taffybar.Widget.Text.CPUMonitor

-- | Creates a simple textual CPU monitor. It updates once every polling
--   period (in seconds).
textCpuMonitorNew :: MonadIO m => String -> Double -> m Widget

module System.Taffybar.Widget.SimpleClock

-- | Create the widget. I recommend passing <tt>Nothing</tt> for the
--   TimeLocale parameter. The format string can include Pango markup
--   (<a>http://developer.gnome.org/pango/stable/PangoMarkupFormat.html</a>).
textClockNew :: MonadIO m => Maybe TimeLocale -> String -> Double -> m Widget

-- | A configurable text-based clock widget. It currently allows for a
--   configurable time zone through the <a>ClockConfig</a>.
--   
--   See also <a>textClockNew</a>.
textClockNewWith :: MonadIO m => ClockConfig -> m Widget

-- | A clock configuration that defaults to the current locale
defaultClockConfig :: ClockConfig
data ClockConfig
ClockConfig :: Maybe TimeZone -> Maybe TimeLocale -> String -> ClockUpdateStrategy -> ClockConfig
[clockTimeZone] :: ClockConfig -> Maybe TimeZone
[clockTimeLocale] :: ClockConfig -> Maybe TimeLocale
[clockFormatString] :: ClockConfig -> String
[clockUpdateStrategy] :: ClockConfig -> ClockUpdateStrategy
data ClockUpdateStrategy
ConstantInterval :: Double -> ClockUpdateStrategy
RoundedTargetInterval :: Int -> Double -> ClockUpdateStrategy
instance GHC.Show.Show System.Taffybar.Widget.SimpleClock.ClockUpdateStrategy
instance GHC.Classes.Ord System.Taffybar.Widget.SimpleClock.ClockUpdateStrategy
instance GHC.Classes.Eq System.Taffybar.Widget.SimpleClock.ClockUpdateStrategy
instance GHC.Show.Show System.Taffybar.Widget.SimpleClock.ClockConfig
instance GHC.Classes.Ord System.Taffybar.Widget.SimpleClock.ClockConfig
instance GHC.Classes.Eq System.Taffybar.Widget.SimpleClock.ClockConfig
instance Data.Default.Class.Default System.Taffybar.Widget.SimpleClock.ClockConfig


-- | Simple text widget that monitors the current usage of selected disk
--   partitions by regularly parsing the output of the df command in Linux
--   systems.
module System.Taffybar.Widget.FSMonitor

-- | Creates a new filesystem monitor widget. It contains one
--   <tt>PollingLabel</tt> that displays the data returned by the df
--   command. The usage level of all requested partitions is extracted in
--   one single operation.
fsMonitorNew :: MonadIO m => Double -> [String] -> m Widget


-- | Simple function which runs user defined command and returns it's
--   output in PollingLabel widget
module System.Taffybar.Widget.CommandRunner

-- | Creates a new command runner widget. This is a <tt>PollingLabel</tt>
--   fed by regular calls to command given by argument. The results of
--   calling this function are displayed as string.
commandRunnerNew :: MonadIO m => Double -> String -> [String] -> Text -> m Widget


-- | Like the vertical bar, but this widget automatically updates itself
--   with a callback at fixed intervals.
module System.Taffybar.Widget.Generic.PollingBar
data VerticalBarHandle
data BarConfig
BarConfig :: (Double, Double, Double) -> (Double -> (Double, Double, Double)) -> (Double -> (Double, Double, Double)) -> Int -> Int -> BarDirection -> BarConfig

-- | Color of the border drawn around the widget
[barBorderColor] :: BarConfig -> (Double, Double, Double)

-- | The background color of the widget
[barBackgroundColor] :: BarConfig -> Double -> (Double, Double, Double)

-- | A function to determine the color of the widget for the current data
--   point
[barColor] :: BarConfig -> Double -> (Double, Double, Double)

-- | Number of pixels of padding around the widget
[barPadding] :: BarConfig -> Int
[barWidth] :: BarConfig -> Int
[barDirection] :: BarConfig -> BarDirection
BarConfigIO :: IO (Double, Double, Double) -> (Double -> IO (Double, Double, Double)) -> (Double -> IO (Double, Double, Double)) -> Int -> Int -> BarDirection -> BarConfig
[barBorderColorIO] :: BarConfig -> IO (Double, Double, Double)
[barBackgroundColorIO] :: BarConfig -> Double -> IO (Double, Double, Double)
[barColorIO] :: BarConfig -> Double -> IO (Double, Double, Double)

-- | Number of pixels of padding around the widget
[barPadding] :: BarConfig -> Int
[barWidth] :: BarConfig -> Int
[barDirection] :: BarConfig -> BarDirection
data BarDirection
HORIZONTAL :: BarDirection
VERTICAL :: BarDirection
pollingBarNew :: MonadIO m => BarConfig -> Double -> IO Double -> m Widget
verticalBarFromCallback :: MonadIO m => BarConfig -> IO Double -> m Widget

-- | A default bar configuration. The color of the active portion of the
--   bar must be specified.
defaultBarConfig :: (Double -> (Double, Double, Double)) -> BarConfig


-- | This is a graph widget inspired by the widget of the same name in
--   Awesome (the window manager). It plots a series of data points
--   similarly to a bar graph. This version must be explicitly fed data
--   with <a>graphAddSample</a>. For a more automated version, see
--   <a>System.Taffybar.Widgets.Generic.PollingGraph</a>.
--   
--   Like Awesome, this graph can plot multiple data sets in one widget.
--   The data sets are plotted in the order provided by the caller.
--   
--   Note: all of the data fed to this widget should be in the range [0,1].
module System.Taffybar.Widget.Generic.Graph
data GraphHandle

-- | The configuration options for the graph. The padding is the number of
--   pixels reserved as blank space around the widget in each direction.
data GraphConfig
GraphConfig :: Int -> RGBA -> RGBA -> Int -> [RGBA] -> [GraphStyle] -> Int -> Maybe Text -> Int -> GraphDirection -> GraphConfig

-- | Number of pixels of padding on each side of the graph widget
[graphPadding] :: GraphConfig -> Int

-- | The background color of the graph (default black)
[graphBackgroundColor] :: GraphConfig -> RGBA

-- | The border color drawn around the graph (default gray)
[graphBorderColor] :: GraphConfig -> RGBA

-- | The width of the border (default 1, use 0 to disable the border)
[graphBorderWidth] :: GraphConfig -> Int

-- | Colors for each data set (default cycles between red, green and blue)
[graphDataColors] :: GraphConfig -> [RGBA]

-- | How to draw each data point (default <tt>repeat Area</tt>)
[graphDataStyles] :: GraphConfig -> [GraphStyle]

-- | The number of data points to retain for each data set (default 20)
[graphHistorySize] :: GraphConfig -> Int

-- | May contain Pango markup (default <tt>Nothing</tt>)
[graphLabel] :: GraphConfig -> Maybe Text

-- | The width (in pixels) of the graph widget (default 50)
[graphWidth] :: GraphConfig -> Int

-- | The direction in which the graph will move as time passes (default
--   LEFT_TO_RIGHT)
[graphDirection] :: GraphConfig -> GraphDirection
data GraphDirection
LEFT_TO_RIGHT :: GraphDirection
RIGHT_TO_LEFT :: GraphDirection

-- | The style of the graph. Generally, you will want to draw all
--   <a>Area</a> graphs first, and then all <a>Line</a> graphs.
data GraphStyle

-- | Thea area below the value is filled
Area :: GraphStyle

-- | The values are connected by a line (one pixel wide)
Line :: GraphStyle
graphNew :: MonadIO m => GraphConfig -> m (Widget, GraphHandle)

-- | Add a data point to the graph for each of the tracked data sets. There
--   should be as many values in the list as there are data sets.
graphAddSample :: GraphHandle -> [Double] -> IO ()
defaultGraphConfig :: GraphConfig
instance GHC.Classes.Eq System.Taffybar.Widget.Generic.Graph.GraphDirection
instance Data.Default.Class.Default System.Taffybar.Widget.Generic.Graph.GraphConfig


-- | A variant of the Graph widget that automatically updates itself with a
--   callback at a fixed interval.
module System.Taffybar.Widget.Generic.PollingGraph
data GraphHandle

-- | The configuration options for the graph. The padding is the number of
--   pixels reserved as blank space around the widget in each direction.
data GraphConfig
GraphConfig :: Int -> RGBA -> RGBA -> Int -> [RGBA] -> [GraphStyle] -> Int -> Maybe Text -> Int -> GraphDirection -> GraphConfig

-- | Number of pixels of padding on each side of the graph widget
[graphPadding] :: GraphConfig -> Int

-- | The background color of the graph (default black)
[graphBackgroundColor] :: GraphConfig -> RGBA

-- | The border color drawn around the graph (default gray)
[graphBorderColor] :: GraphConfig -> RGBA

-- | The width of the border (default 1, use 0 to disable the border)
[graphBorderWidth] :: GraphConfig -> Int

-- | Colors for each data set (default cycles between red, green and blue)
[graphDataColors] :: GraphConfig -> [RGBA]

-- | How to draw each data point (default <tt>repeat Area</tt>)
[graphDataStyles] :: GraphConfig -> [GraphStyle]

-- | The number of data points to retain for each data set (default 20)
[graphHistorySize] :: GraphConfig -> Int

-- | May contain Pango markup (default <tt>Nothing</tt>)
[graphLabel] :: GraphConfig -> Maybe Text

-- | The width (in pixels) of the graph widget (default 50)
[graphWidth] :: GraphConfig -> Int

-- | The direction in which the graph will move as time passes (default
--   LEFT_TO_RIGHT)
[graphDirection] :: GraphConfig -> GraphDirection
data GraphDirection
LEFT_TO_RIGHT :: GraphDirection
RIGHT_TO_LEFT :: GraphDirection

-- | The style of the graph. Generally, you will want to draw all
--   <a>Area</a> graphs first, and then all <a>Line</a> graphs.
data GraphStyle

-- | Thea area below the value is filled
Area :: GraphStyle

-- | The values are connected by a line (one pixel wide)
Line :: GraphStyle
pollingGraphNew :: MonadIO m => GraphConfig -> Double -> IO [Double] -> m Widget
pollingGraphNewWithTooltip :: MonadIO m => GraphConfig -> Double -> IO ([Double], Maybe Text) -> m Widget
defaultGraphConfig :: GraphConfig


-- | Simple Disk IO monitor that uses a PollingGraph to visualize the speed
--   of read/write operations in one selected disk or partition.
module System.Taffybar.Widget.DiskIOMonitor

-- | Creates a new disk IO monitor widget. This is a <tt>PollingGraph</tt>
--   fed by regular calls to <a>getDiskTransfer</a>. The results of calling
--   this function are normalized to the maximum value of the obtained
--   probe (either read or write transfer).
dioMonitorNew :: MonadIO m => GraphConfig -> Double -> String -> m Widget


-- | Simple CPU monitor that uses a PollingGraph to visualize variations in
--   the user and system CPU times in one selected core, or in all cores
--   available.
module System.Taffybar.Widget.CPUMonitor

-- | Creates a new CPU monitor. This is a PollingGraph fed by regular calls
--   to getCPUInfo, associated to an IORef used to remember the values
--   yielded by the last call to this function.
cpuMonitorNew :: MonadIO m => GraphConfig -> Double -> String -> m Widget
probe :: IORef [Int] -> String -> IO [Double]

module System.Taffybar.Widget.Generic.ChannelGraph

-- | Given a <a>BroadcastChan</a> and an action to consume that broadcast
--   chan and turn it into graphable values, build a graph that will update
--   as values are broadcast over the channel.
channelGraphNew :: MonadIO m => GraphConfig -> BroadcastChan In a -> (a -> IO [Double]) -> m Widget

module System.Taffybar.Widget.Generic.AutoSizeImage
imageLog :: Priority -> String -> IO ()
borderFunctions :: [StyleContext -> [StateFlags] -> IO Border]
data BorderInfo
BorderInfo :: Int16 -> Int16 -> Int16 -> Int16 -> BorderInfo
[borderTop] :: BorderInfo -> Int16
[borderBottom] :: BorderInfo -> Int16
[borderLeft] :: BorderInfo -> Int16
[borderRight] :: BorderInfo -> Int16
borderInfoZero :: BorderInfo
borderWidth :: BorderInfo -> Int16
borderHeight :: BorderInfo -> Int16
toBorderInfo :: MonadIO m => Border -> m BorderInfo
addBorderInfo :: BorderInfo -> BorderInfo -> BorderInfo

-- | Get the total size of the border (the sum of its assigned margin,
--   border and padding values) that will be drawn for a widget as a
--   <a>BorderInfo</a> record.
getBorderInfo :: (MonadIO m, IsWidget a) => a -> m BorderInfo

-- | Get the actual allocation for a <a>Gtk.Widget</a>, accounting for the
--   size of its CSS assined margin, border and padding values.
getContentAllocation :: (MonadIO m, IsWidget a) => a -> BorderInfo -> m Rectangle

-- | Automatically update the <a>Gdk.Pixbuf</a> of a <a>Gtk.Image</a> using
--   the provided action whenever the <a>Gtk.Image</a> is allocated.
--   Returns an action that forces a refresh of the image through the
--   provided action.
autoSizeImage :: MonadIO m => Image -> (Int32 -> IO (Maybe Pixbuf)) -> Orientation -> m (IO ())

-- | Make a new <a>Gtk.Image</a> and call "autoSizeImage" on it.
--   Automatically scale the <a>Gdk.Pixbuf</a> returned from the provided
--   getter to the appropriate size using "scalePixbufToSize".
autoSizeImageNew :: MonadIO m => (Int32 -> IO Pixbuf) -> Orientation -> m Image

-- | Make a new <a>Gtk.MenuItem</a> that has both a label and an icon.
imageMenuItemNew :: MonadIO m => Text -> (Int32 -> IO (Maybe Pixbuf)) -> m MenuItem
instance GHC.Classes.Eq System.Taffybar.Widget.Generic.AutoSizeImage.BorderInfo
instance GHC.Show.Show System.Taffybar.Widget.Generic.AutoSizeImage.BorderInfo


-- | The <a>System.Taffybar.Context</a> module provides the core
--   functionality of the taffybar library. It gets its name from the
--   <a>Context</a> record, which stores runtime information and objects,
--   which are used by many of the widgets that taffybar provides.
--   <a>Context</a> is typically accessed through the <a>Reader</a>
--   interface of <a>TaffyIO</a>.
module System.Taffybar.Context

-- | A <a>Context</a> value holds all of the state associated with a single
--   running instance of taffybar. It is typically accessed from a widget
--   constructor through the <a>TaffyIO</a> monad transformer stack.
data Context
Context :: MVar X11Context -> MVar SubscriptionList -> MVar (Map TypeRep Value) -> MVar [(BarConfig, Window)] -> Client -> Client -> BarConfigGetter -> Maybe BarConfig -> Context

-- | The X11Context that will be used to service X11Property requests.
[x11ContextVar] :: Context -> MVar X11Context

-- | The handlers which will be evaluated against incoming X11 events.
[listeners] :: Context -> MVar SubscriptionList

-- | A collection of miscellaneous pieces of state which are keyed by their
--   types. Most new pieces of state should go here, rather than in a new
--   field in <a>Context</a>. State stored here is typically accessed
--   through <a>getStateDefault</a>.
[contextState] :: Context -> MVar (Map TypeRep Value)

-- | Used to track the windows that taffybar is currently controlling, and
--   which <a>BarConfig</a> objects they are associated with.
[existingWindows] :: Context -> MVar [(BarConfig, Window)]

-- | The shared user session <a>Client</a>.
[sessionDBusClient] :: Context -> Client

-- | The shared system session <a>Client</a>.
[systemDBusClient] :: Context -> Client

-- | The action that will be evaluated to get the bar configs associated
--   with each active monitor taffybar should run on.
[getBarConfigs] :: Context -> BarConfigGetter

-- | Populated with the BarConfig that resulted in the creation of a given
--   widget, when its constructor is called. This lets widgets access thing
--   like who their neighbors are. Note that the value of
--   <a>contextBarConfig</a> is different for widgets belonging to bar
--   windows on different monitors.
[contextBarConfig] :: Context -> Maybe BarConfig

-- | <a>TaffybarConfig</a> provides an advanced interface for configuring
--   taffybar. Through the <a>getBarConfigsParam</a>, it is possible to
--   specify different taffybar configurations depending on the number of
--   monitors present, and even to specify different taffybar
--   configurations for each monitor.
data TaffybarConfig
TaffybarConfig :: Maybe Client -> TaffyIO () -> BarConfigGetter -> [FilePath] -> Maybe String -> TaffybarConfig

-- | An optional dbus client to use.
[dbusClientParam] :: TaffybarConfig -> Maybe Client

-- | Hooks that should be executed at taffybar startup.
[startupHook] :: TaffybarConfig -> TaffyIO ()

-- | A <a>TaffyIO</a> action that returns a list of <a>BarConfig</a> where
--   each element describes a taffybar window that should be spawned.
[getBarConfigsParam] :: TaffybarConfig -> BarConfigGetter

-- | A list of <a>FilePath</a> each of which should be loaded as css files
--   at startup.
[cssPaths] :: TaffybarConfig -> [FilePath]

-- | A field used (only) by dyre to provide an error message.
[errorMsg] :: TaffybarConfig -> Maybe String

-- | <a>Taffy</a> is a monad transformer that provides <a>Reader</a> for
--   <a>Context</a>.
type Taffy m v = ReaderT Context m v

-- | <a>TaffyIO</a> is <a>IO</a> wrapped with a <a>ReaderT</a> providing
--   <a>Context</a>. This is the type of most widgets and callback in
--   taffybar.
type TaffyIO v = ReaderT Context IO v

-- | <a>BarConfig</a> specifies the configuration for a single taffybar
--   window.
data BarConfig
BarConfig :: StrutConfig -> Int32 -> [TaffyIO Widget] -> [TaffyIO Widget] -> [TaffyIO Widget] -> Unique -> BarConfig

-- | The strut configuration to use for the bar
[strutConfig] :: BarConfig -> StrutConfig

-- | The amount of spacing in pixels between bar widgets
[widgetSpacing] :: BarConfig -> Int32

-- | Constructors for widgets that should be placed at the beginning of the
--   bar.
[startWidgets] :: BarConfig -> [TaffyIO Widget]

-- | Constructors for widgets that should be placed in the center of the
--   bar.
[centerWidgets] :: BarConfig -> [TaffyIO Widget]

-- | Constructors for widgets that should be placed at the end of the bar.
[endWidgets] :: BarConfig -> [TaffyIO Widget]

-- | A unique identifier for the bar, that can be used e.g. when toggling.
[barId] :: BarConfig -> Unique
type BarConfigGetter = TaffyIO [BarConfig]

-- | Append the provided <a>TaffyIO</a> hook to the <a>startupHook</a> of
--   the given <a>TaffybarConfig</a>.
appendHook :: TaffyIO () -> TaffybarConfig -> TaffybarConfig

-- | Build the <a>Context</a> for a taffybar process.
buildContext :: TaffybarConfig -> IO Context

-- | Build an empty taffybar context. This function is mostly useful for
--   invoking functions that yield <a>TaffyIO</a> values in a testing
--   setting (e.g. in a repl).
buildEmptyContext :: IO Context

-- | Default values for a <a>TaffybarConfig</a>. Not usuable without at
--   least properly setting <a>getBarConfigsParam</a>.
defaultTaffybarConfig :: TaffybarConfig

-- | Get a state value by type from the <a>contextState</a> field of
--   <a>Context</a>.
getState :: forall t. Typeable t => Taffy IO (Maybe t)

-- | Like "putState", but avoids aquiring a lock if the value is already in
--   the map.
getStateDefault :: Typeable t => Taffy IO t -> Taffy IO t

-- | Get a value of the type returned by the provided action from the the
--   current taffybar state, unless the state does not exist, in which case
--   the action will be called to populate the state map.
putState :: forall t. Typeable t => Taffy IO t -> Taffy IO t

-- | Forcibly refresh taffybar windows, even if there are existing windows
--   that correspond to the uniques in the bar configs yielded by
--   <tt>barConfigGetter</tt>.
forceRefreshTaffyWindows :: TaffyIO ()

-- | Use the "barConfigGetter" field of <a>Context</a> to get the set of
--   taffybar windows that should active. Will avoid recreating windows if
--   there is already a window with the appropriate geometry and
--   <a>BarConfig</a>.
refreshTaffyWindows :: TaffyIO ()

-- | Run a function needing an X11 connection in <a>TaffyIO</a>.
runX11 :: X11Property a -> TaffyIO a

-- | Use <a>runX11</a> together with <a>postX11RequestSyncProp</a> on the
--   provided property. Return the provided default if <a>Nothing</a> is
--   returned <a>postX11RequestSyncProp</a>.
runX11Def :: a -> X11Property a -> TaffyIO a

-- | Subscribe to all incoming events on the X11 event loop. The returned
--   <a>Unique</a> value can be used to unregister the listener using
--   "unsuscribe".
subscribeToAll :: Listener -> Taffy IO Unique

-- | Subscribe to X11 <a>PropertyEvent</a>s where the property changed is
--   in the provided list.
subscribeToPropertyEvents :: [String] -> Listener -> Taffy IO Unique

-- | A version of "forkIO" in <a>TaffyIO</a>.
taffyFork :: ReaderT r IO () -> ReaderT r IO ()

-- | Remove the listener associated with the provided <a>Unique</a> from
--   the collection of listeners.
unsubscribe :: Unique -> Taffy IO ()
instance Data.Default.Class.Default System.Taffybar.Context.TaffybarConfig
instance GHC.Classes.Eq System.Taffybar.Context.BarConfig


-- | This module exports functions for the construction of
--   StatusNotifierItem/AppIndicator tray widgets, supplied by the
--   <a>StatusNotifier.Tray</a> module from the gtk-sni-tray library. These
--   widgets do not support the older XEMBED protocol, although bridges
--   like xembed-sni-proxy do allow sni trays to provide limited support
--   for XEMBED tray icons.
--   
--   Unless <a>sniTrayThatStartsWatcherEvenThoughThisIsABadWayToDoIt</a> is
--   used it is necessary to run status-notifier-watcher from the
--   <a>status-notifier-item</a> package before starting taffybar when
--   using the functions defined in this module. Using
--   <a>sniTrayThatStartsWatcherEvenThoughThisIsABadWayToDoIt</a> is
--   generally not recommended, because it can lead to issues with the
--   registration of tray icons if taffybar crashes/restarts, or if tray
--   icon providing applications are ever started before taffybar.
module System.Taffybar.Widget.SNITray
data () => TrayParams

-- | Build a new StatusNotifierItem tray that will share a host with any
--   other trays that are constructed automatically
sniTrayNew :: TaffyIO Widget

-- | Build a new StatusNotifierItem tray from the provided
--   <a>TrayParams</a>.
sniTrayNewFromParams :: TrayParams -> TaffyIO Widget

-- | Get a <a>Host</a> from <a>TaffyIO</a> internal state, that can be used
--   to construct SNI tray widgets. The boolean parameter determines
--   whether or not a watcher will be started the first time
--   <a>getTrayHost</a> is invoked.
getTrayHost :: Bool -> TaffyIO Host

-- | Build a new StatusNotifierItem tray from the provided
--   <a>TrayParams</a> and <a>Host</a>.
sniTrayNewFromHostParams :: TrayParams -> Host -> TaffyIO Widget

-- | Build a new StatusNotifierItem tray that also starts its own watcher,
--   without depending on status-notifier-icon. This will not register
--   applets started before the watcher is started.
sniTrayThatStartsWatcherEvenThoughThisIsABadWayToDoIt :: TaffyIO Widget


-- | Simple text widget that shows the XMonad layout used in the currently
--   active workspace, and that allows to change it by clicking with the
--   mouse: left-click to switch to the next layout in the list,
--   right-click to switch to the first one (as configured in
--   <tt>xmonad.hs</tt>)
module System.Taffybar.Widget.Layout
newtype LayoutConfig
LayoutConfig :: (Text -> TaffyIO Text) -> LayoutConfig
[formatLayout] :: LayoutConfig -> Text -> TaffyIO Text
defaultLayoutConfig :: LayoutConfig

-- | Create a new Layout widget that will use the given Pager as its source
--   of events.
layoutNew :: LayoutConfig -> TaffyIO Widget
instance Data.Default.Class.Default System.Taffybar.Widget.Layout.LayoutConfig


-- | This module provides utility functions for retrieving data about
--   crypto assets.
module System.Taffybar.Information.Crypto
getSymbolToCoinGeckoId :: MonadIO m => m (Map Text Text)
newtype SymbolToCoinGeckoId
SymbolToCoinGeckoId :: Map Text Text -> SymbolToCoinGeckoId
newtype CryptoPriceInfo
CryptoPriceInfo :: Double -> CryptoPriceInfo
[lastPrice] :: CryptoPriceInfo -> Double
newtype CryptoPriceChannel (a :: Symbol)
CryptoPriceChannel :: (BroadcastChan In CryptoPriceInfo, MVar CryptoPriceInfo) -> CryptoPriceChannel (a :: Symbol)
getCryptoPriceChannel :: KnownSymbol a => TaffyIO (CryptoPriceChannel a)
data CoinGeckoInfo
CoinGeckoInfo :: Text -> Text -> CoinGeckoInfo
[identifier] :: CoinGeckoInfo -> Text
[symbol] :: CoinGeckoInfo -> Text
buildCryptoPriceChannel :: forall a. KnownSymbol a => Double -> SymbolToCoinGeckoId -> TaffyIO (CryptoPriceChannel a)
getLatestPrice :: MonadIO m => Text -> Text -> m (Maybe Double)
getCryptoMeta :: MonadIO m => String -> String -> m ByteString
instance GHC.Show.Show System.Taffybar.Information.Crypto.CoinGeckoInfo
instance Data.Aeson.Types.FromJSON.FromJSON System.Taffybar.Information.Crypto.CoinGeckoInfo

module System.Taffybar.Information.Chrome
logIO :: Priority -> String -> IO ()
data ChromeTabImageData
ChromeTabImageData :: Pixbuf -> Int -> ChromeTabImageData
[tabImageData] :: ChromeTabImageData -> Pixbuf
[tabImageDataId] :: ChromeTabImageData -> Int
newtype ChromeTabImageDataState
ChromeTabImageDataState :: (MVar (Map Int ChromeTabImageData), BroadcastChan Out ChromeTabImageData) -> ChromeTabImageDataState
getChromeTabImageDataState :: TaffyIO ChromeTabImageDataState
getChromeTabImageDataChannel :: TaffyIO (BroadcastChan Out ChromeTabImageData)
getChromeTabImageDataTable :: TaffyIO (MVar (Map Int ChromeTabImageData))
newtype ChromeFaviconServerPort
ChromeFaviconServerPort :: Int -> ChromeFaviconServerPort
listenForChromeFaviconUpdates :: Int -> TaffyIO ChromeTabImageDataState
newtype X11WindowToChromeTabId
X11WindowToChromeTabId :: MVar (Map X11Window Int) -> X11WindowToChromeTabId
getX11WindowToChromeTabId :: TaffyIO X11WindowToChromeTabId
maintainX11WindowToChromeTabId :: TaffyIO (MVar (Map X11Window Int))
tabIDRegex :: Regex
getTabIdFromTitle :: String -> Maybe Int
addTabIdEntry :: Map X11Window Int -> (X11Window, String) -> Map X11Window Int
updateTabMap :: Map X11Window Int -> TaffyIO (Map X11Window Int)


-- | This module provides functions for querying battery information using
--   the UPower dbus, as well as a <a>BroadcastChan</a> system for allowing
--   multiple readers to receive <a>BatteryState</a> updates without
--   duplicating requests.
module System.Taffybar.Information.Battery
data BatteryInfo
BatteryInfo :: String -> String -> String -> String -> Word64 -> BatteryType -> Bool -> Bool -> Bool -> Bool -> Double -> Double -> Double -> Double -> Double -> Double -> Double -> Int64 -> Int64 -> Double -> Double -> Bool -> BatteryState -> Bool -> Double -> BatteryTechnology -> Word32 -> Word32 -> String -> BatteryInfo
[batteryNativePath] :: BatteryInfo -> String
[batteryVendor] :: BatteryInfo -> String
[batteryModel] :: BatteryInfo -> String
[batterySerial] :: BatteryInfo -> String
[batteryUpdateTime] :: BatteryInfo -> Word64
[batteryType] :: BatteryInfo -> BatteryType
[batteryPowerSupply] :: BatteryInfo -> Bool
[batteryHasHistory] :: BatteryInfo -> Bool
[batteryHasStatistics] :: BatteryInfo -> Bool
[batteryOnline] :: BatteryInfo -> Bool
[batteryEnergy] :: BatteryInfo -> Double
[batteryEnergyEmpty] :: BatteryInfo -> Double
[batteryEnergyFull] :: BatteryInfo -> Double
[batteryEnergyFullDesign] :: BatteryInfo -> Double
[batteryEnergyRate] :: BatteryInfo -> Double
[batteryVoltage] :: BatteryInfo -> Double
[batteryLuminosity] :: BatteryInfo -> Double
[batteryTimeToEmpty] :: BatteryInfo -> Int64
[batteryTimeToFull] :: BatteryInfo -> Int64
[batteryPercentage] :: BatteryInfo -> Double
[batteryTemperature] :: BatteryInfo -> Double
[batteryIsPresent] :: BatteryInfo -> Bool
[batteryState] :: BatteryInfo -> BatteryState
[batteryIsRechargeable] :: BatteryInfo -> Bool
[batteryCapacity] :: BatteryInfo -> Double
[batteryTechnology] :: BatteryInfo -> BatteryTechnology
[batteryWarningLevel] :: BatteryInfo -> Word32
[batteryBatteryLevel] :: BatteryInfo -> Word32
[batteryIconName] :: BatteryInfo -> String
data BatteryState
BatteryStateUnknown :: BatteryState
BatteryStateCharging :: BatteryState
BatteryStateDischarging :: BatteryState
BatteryStateEmpty :: BatteryState
BatteryStateFullyCharged :: BatteryState
BatteryStatePendingCharge :: BatteryState
BatteryStatePendingDischarge :: BatteryState
data BatteryTechnology
BatteryTechnologyUnknown :: BatteryTechnology
BatteryTechnologyLithiumIon :: BatteryTechnology
BatteryTechnologyLithiumPolymer :: BatteryTechnology
BatteryTechnologyLithiumIronPhosphate :: BatteryTechnology
BatteryTechnologyLeadAcid :: BatteryTechnology
BatteryTechnologyNickelCadmium :: BatteryTechnology
BatteryTechnologyNickelMetalHydride :: BatteryTechnology
data BatteryType
BatteryTypeUnknown :: BatteryType
BatteryTypeLinePower :: BatteryType
BatteryTypeBatteryType :: BatteryType
BatteryTypeUps :: BatteryType
BatteryTypeMonitor :: BatteryType
BatteryTypeMouse :: BatteryType
BatteryTypeKeyboard :: BatteryType
BatteryTypePda :: BatteryType
BatteryTypePhone :: BatteryType
newtype DisplayBatteryChanVar
DisplayBatteryChanVar :: (BroadcastChan In BatteryInfo, MVar BatteryInfo) -> DisplayBatteryChanVar

-- | Call "refreshAllBatteries" whenever the BatteryInfo for the
--   DisplayDevice is updated. This handles cases where there is a race
--   between the signal that something is updated and the update actually
--   being visible. See
--   <a>https://github.com/taffybar/taffybar/issues/330</a> for more
--   details.
refreshBatteriesOnPropChange :: TaffyIO ()
batteryLogPath :: String
dummyMethodError :: MethodError
batteryLog :: MonadIO m => Priority -> String -> m ()
batteryLogF :: (MonadIO m, Show t) => Priority -> String -> t -> m ()

-- | The prefix of name of battery devices path. UPower generates the
--   object path as "battery" + "_" + basename of the sysfs object.
batteryPrefix :: String

-- | Determine if a power source is a battery.
isBattery :: ObjectPath -> Bool

-- | A helper to read the variant contents of a dict with a default value.
readDict :: IsVariant a => Map Text Variant -> Text -> a -> a

-- | Read the variant contents of a dict which is of an unknown integral
--   type.
readDictIntegral :: Map Text Variant -> Text -> Int32 -> Int

-- | Query the UPower daemon about information on a specific battery. If
--   some fields are not actually present, they may have bogus values here.
--   Don't bet anything critical on it.
getBatteryInfo :: ObjectPath -> TaffyIO (Either MethodError BatteryInfo)
infoMapToBatteryInfo :: Map Text Variant -> BatteryInfo
getBatteryPaths :: TaffyIO (Either MethodError [ObjectPath])
getDisplayBatteryInfo :: TaffyIO BatteryInfo
getDisplayBatteryChanVar :: TaffyIO DisplayBatteryChanVar
defaultMonitorDisplayBatteryProperties :: [String]

-- | Start the monitoring of the display battery, and setup the associated
--   channel and mvar for the current state.
setupDisplayBatteryChanVar :: [String] -> TaffyIO DisplayBatteryChanVar

-- | Monitor the DisplayDevice for changes, writing a new
--   <a>BatteryInfo</a> object to returned <a>MVar</a> and <a>Chan</a>
--   objects
monitorDisplayBattery :: [String] -> TaffyIO (BroadcastChan In BatteryInfo, MVar BatteryInfo)
getDisplayBatteryChan :: TaffyIO (BroadcastChan In BatteryInfo)
updateBatteryInfo :: BroadcastChan In BatteryInfo -> MVar BatteryInfo -> ObjectPath -> TaffyIO ()
registerForAnyUPowerPropertiesChanged :: (Signal -> String -> Map String Variant -> [String] -> IO ()) -> ReaderT Context IO SignalHandler
registerForUPowerPropertyChanges :: [String] -> (Signal -> String -> Map String Variant -> [String] -> IO ()) -> ReaderT Context IO SignalHandler

-- | Request a refresh of all UPower batteries. This is only needed if
--   UPower's refresh mechanism is not working properly.
refreshAllBatteries :: TaffyIO ()


-- | This module provides battery widgets that are queried using the UPower
--   dbus service. To avoid duplicating all information requests for each
--   battery widget displayed (if using a multi-head configuration or
--   multiple battery widgets), these widgets use the <a>BroadcastChan</a>
--   based system for receiving updates defined in
--   <a>System.Taffybar.Information.Battery</a>.
module System.Taffybar.Widget.Battery
batteryIconNew :: TaffyIO Widget

-- | A simple textual battery widget. The displayed format is specified
--   format string where $percentage$ is replaced with the percentage of
--   battery remaining and $time$ is replaced with the time until the
--   battery is fully charged/discharged.
textBatteryNew :: String -> TaffyIO Widget

-- | Like <a>textBatteryNew</a> but provides a more general way to update
--   the label widget. The argument provided is an action that is used to
--   update the text label given a <a>BatteryInfo</a> object describing the
--   state of the battery.
textBatteryNewWithLabelAction :: (Label -> BatteryInfo -> TaffyIO ()) -> TaffyIO Widget
instance GHC.Show.Show System.Taffybar.Widget.Battery.BatteryWidgetInfo
instance GHC.Classes.Eq System.Taffybar.Widget.Battery.BatteryWidgetInfo
instance Data.Default.Class.Default System.Taffybar.Widget.Battery.BatteryClassesConfig


-- | This module provides a dbus interface that allows users to toggle the
--   display of taffybar on each monitor while it is running.
module System.Taffybar.DBus.Toggle
handleDBusToggles :: TaffybarConfig -> TaffybarConfig

module System.Taffybar.DBus

-- | Append the provided <a>TaffyIO</a> hook to the <a>startupHook</a> of
--   the given <a>TaffybarConfig</a>.
appendHook :: TaffyIO () -> TaffybarConfig -> TaffybarConfig
startTaffyLogServer :: TaffyIO ()
withLogServer :: TaffybarConfig -> TaffybarConfig
withToggleServer :: TaffybarConfig -> TaffybarConfig


-- | This module provides various startup hooks that can be added to
--   <tt>TaffyConfig</tt>.
module System.Taffybar.Hooks

-- | The type of the channel that provides network information in taffybar.
newtype NetworkInfoChan
NetworkInfoChan :: BroadcastChan In [(String, (Rational, Rational))] -> NetworkInfoChan

-- | Build a <a>NetworkInfoChan</a> that refreshes at the provided
--   interval.
buildNetworkInfoChan :: Double -> IO NetworkInfoChan

-- | Get the <a>NetworkInfoChan</a> from <a>Context</a>, creating it if it
--   does not exist.
getNetworkChan :: TaffyIO NetworkInfoChan

-- | Set the log formatter used in the taffybar process
setTaffyLogFormatter :: String -> IO ()

-- | Add <tt>refreshrefreshBatteriesOnPropChange</tt> to the
--   <a>startupHook</a> of the provided <a>TaffybarConfig</a>.
withBatteryRefresh :: TaffybarConfig -> TaffybarConfig

-- | Load the <a>DesktopEntry</a> cache from <a>Context</a> state.
getDirectoryEntriesByClassName :: TaffyIO (MultiMap String DesktopEntry)

-- | Read <a>DesktopEntry</a> values into a <a>Multimap</a>, where they are
--   indexed by the class name specified in the <a>DesktopEntry</a>.
readDirectoryEntriesDefault :: TaffyIO (MultiMap String DesktopEntry)

-- | Update the <a>DesktopEntry</a> cache every 60 seconds.
updateDirectoryEntriesCache :: TaffyIO ()
data ChromeTabImageData
ChromeTabImageData :: Pixbuf -> Int -> ChromeTabImageData
[tabImageData] :: ChromeTabImageData -> Pixbuf
[tabImageDataId] :: ChromeTabImageData -> Int
getChromeTabImageDataChannel :: TaffyIO (BroadcastChan Out ChromeTabImageData)
getChromeTabImageDataTable :: TaffyIO (MVar (Map Int ChromeTabImageData))
getX11WindowToChromeTabId :: TaffyIO X11WindowToChromeTabId

-- | Call "refreshAllBatteries" whenever the BatteryInfo for the
--   DisplayDevice is updated. This handles cases where there is a race
--   between the signal that something is updated and the update actually
--   being visible. See
--   <a>https://github.com/taffybar/taffybar/issues/330</a> for more
--   details.
refreshBatteriesOnPropChange :: TaffyIO ()

module System.Taffybar.Widget.Text.NetworkMonitor
defaultNetFormat :: String
showInfo :: String -> Int -> (Double, Double) -> Text
toKB :: Int -> Double -> String
toMB :: Int -> Double -> String
setDigits :: Int -> Double -> String
toAuto :: Int -> Double -> String
networkMonitorNew :: String -> Maybe [String] -> TaffyIO Widget


-- | This module provides a channel based network graph widget.
module System.Taffybar.Widget.NetworkGraph

-- | <a>NetworkGraphConfig</a> configures the network graph widget.
data NetworkGraphConfig
NetworkGraphConfig :: GraphConfig -> Maybe (String, Int) -> (Double -> Double) -> (String -> Bool) -> NetworkGraphConfig

-- | The configuration of the graph itself. | A tooltip format string,
--   together with the precision that should be used for numbers in the
--   string.
[networkGraphGraphConfig] :: NetworkGraphConfig -> GraphConfig
[networkGraphTooltipFormat] :: NetworkGraphConfig -> Maybe (String, Int)

-- | A function to scale the y axis of the network config. The default is
--   `logBase $ 2 ** 32`.
[networkGraphScale] :: NetworkGraphConfig -> Double -> Double

-- | A filter function that determines whether a given interface will be
--   included in the network stats.
[interfacesFilter] :: NetworkGraphConfig -> String -> Bool

-- | Default configuration paramters for the network graph.
defaultNetworkGraphConfig :: NetworkGraphConfig

-- | <a>networkGraphNew</a> instantiates a network graph widget from a
--   <a>GraphConfig</a> and a list of interfaces.
networkGraphNew :: GraphConfig -> Maybe [String] -> TaffyIO Widget

-- | <a>networkGraphNewWith</a> instantiates a network graph widget from a
--   <a>NetworkGraphConfig</a>.
networkGraphNewWith :: NetworkGraphConfig -> TaffyIO Widget
instance Data.Default.Class.Default System.Taffybar.Widget.NetworkGraph.NetworkGraphConfig


module System.Taffybar

-- | Use Dyre to configure and start taffybar. This will automatically
--   recompile taffybar whenever there are changes to your taffybar.hs
--   configuration file.
dyreTaffybar :: TaffybarConfig -> IO ()

-- | The main function that should be run by dyre given a TaffybarConfig.
dyreTaffybarMain :: TaffybarConfig -> IO ()
getTaffyFile :: String -> IO FilePath

-- | Start taffybar with the provided <a>TaffybarConfig</a>. This function
--   will not handle recompiling taffybar automatically when taffybar.hs is
--   updated. If you would like this feature, use <a>dyreTaffybar</a>
--   instead. If automatic recompilation is handled by another mechanism
--   such as stack or a custom user script or not desired for some reason,
--   it is perfectly fine (and probably better) to use this function.
startTaffybar :: TaffybarConfig -> IO ()

-- | The parameters that are passed to Dyre when taffybar is invoked with
--   <a>dyreTaffybar</a>.
taffybarDyreParams :: Params TaffybarConfig ()


-- | This module defines a simpler, but less flexible config system than
--   the one offered in <a>System.Taffybar.Context</a>.
module System.Taffybar.SimpleConfig

-- | A configuration object whose interface is simpler than that of
--   <tt>TaffybarConfig</tt>. Unless you have a good reason to use
--   taffybar's more advanced interface, you should stick to using this
--   one.
data SimpleTaffyConfig
SimpleTaffyConfig :: TaffyIO [Int] -> StrutSize -> Int -> Position -> Int -> [TaffyIO Widget] -> [TaffyIO Widget] -> [TaffyIO Widget] -> [FilePath] -> TaffyIO () -> SimpleTaffyConfig

-- | The monitor number to put the bar on (default:
--   <a>usePrimaryMonitor</a>)
[monitorsAction] :: SimpleTaffyConfig -> TaffyIO [Int]

-- | Number of pixels to reserve for the bar (default: 30)
[barHeight] :: SimpleTaffyConfig -> StrutSize

-- | Number of additional pixels to reserve for the bar strut (default: 0)
[barPadding] :: SimpleTaffyConfig -> Int

-- | The position of the bar on the screen (default: <a>Top</a>)
[barPosition] :: SimpleTaffyConfig -> Position

-- | The number of pixels between widgets (default: 5)
[widgetSpacing] :: SimpleTaffyConfig -> Int

-- | Widget constructors whose outputs are placed at the beginning of the
--   bar
[startWidgets] :: SimpleTaffyConfig -> [TaffyIO Widget]

-- | Widget constructors whose outputs are placed in the center of the bar
[centerWidgets] :: SimpleTaffyConfig -> [TaffyIO Widget]

-- | Widget constructors whose outputs are placed at the end of the bar
[endWidgets] :: SimpleTaffyConfig -> [TaffyIO Widget]

-- | List of paths to CSS stylesheets that should be loaded at startup.
[cssPaths] :: SimpleTaffyConfig -> [FilePath]

-- | Hook to run at taffybar startup.
[startupHook] :: SimpleTaffyConfig -> TaffyIO ()

-- | An ADT representing the edge of the monitor along which taffybar
--   should be displayed.
data Position
Top :: Position
Bottom :: Position

-- | Sensible defaults for most of the fields of <a>SimpleTaffyConfig</a>.
--   You'll need to specify the widgets you want in the bar with
--   <a>startWidgets</a>, <a>centerWidgets</a> and <a>endWidgets</a>.
defaultSimpleTaffyConfig :: SimpleTaffyConfig

-- | Start taffybar using dyre with a <tt>SimpleTaffybarConfig</tt>.
simpleDyreTaffybar :: SimpleTaffyConfig -> IO ()

-- | Start taffybar with a <tt>SimpleTaffybarConfig</tt>.
simpleTaffybar :: SimpleTaffyConfig -> IO ()

-- | Convert a <a>SimpleTaffyConfig</a> into a <a>TaffybarConfig</a> that
--   can be used with <a>startTaffybar</a> or <a>dyreTaffybar</a>.
toTaffyConfig :: SimpleTaffyConfig -> TaffybarConfig

-- | Supply this value for <a>monitorsAction</a> to display the taffybar
--   window on all monitors.
useAllMonitors :: TaffyIO [Int]

-- | Supply this value for <a>monitorsAction</a> to display the taffybar
--   window only on the primary monitor.
usePrimaryMonitor :: TaffyIO [Int]
data () => StrutSize
ExactSize :: Int32 -> StrutSize
ScreenRatio :: Rational -> StrutSize
instance GHC.Classes.Eq System.Taffybar.SimpleConfig.Position
instance GHC.Show.Show System.Taffybar.SimpleConfig.Position
instance Data.Default.Class.Default System.Taffybar.SimpleConfig.SimpleTaffyConfig


-- | This module defines a simple textual weather widget that polls NOAA
--   for weather data. To find your weather station, you can use either of
--   the following:
--   
--   <a>https://www.weather.gov/tg/siteloc</a>
--   <a>https://cnrfc.noaa.gov/metar.php</a>
--   
--   For example, Madison, WI is KMSN.
--   
--   NOAA provides several pieces of information in each request; you can
--   control which pieces end up in your weather widget by providing a
--   _template_ that is filled in with the current information. The
--   template is just a <a>String</a> with variables between dollar signs.
--   The variables will be substituted with real data by the widget.
--   Example:
--   
--   <pre>
--   let wcfg = (defaultWeatherConfig "KMSN") { weatherTemplate = "$tempC$ C @ $humidity$" }
--       weatherWidget = weatherNew wcfg 10
--   </pre>
--   
--   This example makes a new weather widget that checks the weather at
--   KMSN (Madison, WI) every 10 minutes, and displays the results in
--   Celcius.
--   
--   Available variables:
--   
--   <ul>
--   <li><i><tt>stationPlace</tt></i> The name of the weather station</li>
--   <li><i><tt>stationState</tt></i> The state that the weather station is
--   in</li>
--   <li><i><tt>year</tt></i> The year the report was generated</li>
--   <li><i><tt>month</tt></i> The month the report was generated</li>
--   <li><i><tt>day</tt></i> The day the report was generated</li>
--   <li><i><tt>hour</tt></i> The hour the report was generated</li>
--   <li><i><tt>wind</tt></i> The direction and strength of the wind</li>
--   <li><i><tt>visibility</tt></i> Description of current visibility
--   conditions</li>
--   <li><i><tt>skyCondition</tt></i> ?</li>
--   <li><i><tt>tempC</tt></i> The temperature in Celsius</li>
--   <li><i><tt>tempF</tt></i> The temperature in Farenheit</li>
--   <li><i><tt>dewPoint</tt></i> The current dew point</li>
--   <li><i><tt>humidity</tt></i> The current relative humidity</li>
--   <li><i><tt>pressure</tt></i> The current pressure</li>
--   </ul>
--   
--   As an example, a template like
--   
--   <pre>
--   "$tempF$ °F"
--   </pre>
--   
--   would yield a widget displaying the temperature in Farenheit with a
--   small label after it.
--   
--   Implementation Note: the weather data parsing code is taken from
--   xmobar. This version of the code makes direct HTTP requests instead of
--   invoking a separate cURL process.
module System.Taffybar.Widget.Weather

-- | The configuration for the weather widget. You can provide a custom
--   format string through <a>weatherTemplate</a> as described above, or
--   you can provide a custom function to turn a <a>WeatherInfo</a> into a
--   String via the <a>weatherFormatter</a> field.
data WeatherConfig
WeatherConfig :: String -> String -> String -> WeatherFormatter -> Maybe String -> WeatherConfig

-- | The weather station to poll. No default
[weatherStation] :: WeatherConfig -> String

-- | Template string, as described above. Default: $tempF$ °F
[weatherTemplate] :: WeatherConfig -> String

-- | Template string, as described above. Default: $tempF$ °F
[weatherTemplateTooltip] :: WeatherConfig -> String

-- | Default: substitute in all interpolated variables (above)
[weatherFormatter] :: WeatherConfig -> WeatherFormatter

-- | The proxy server, e.g. "<a>http://proxy:port"</a>. Default: Nothing
[weatherProxy] :: WeatherConfig -> Maybe String
data WeatherInfo
WI :: String -> String -> String -> String -> String -> String -> String -> String -> String -> Int -> Int -> String -> Int -> Int -> WeatherInfo
[stationPlace] :: WeatherInfo -> String
[stationState] :: WeatherInfo -> String
[year] :: WeatherInfo -> String
[month] :: WeatherInfo -> String
[day] :: WeatherInfo -> String
[hour] :: WeatherInfo -> String
[wind] :: WeatherInfo -> String
[visibility] :: WeatherInfo -> String
[skyCondition] :: WeatherInfo -> String
[tempC] :: WeatherInfo -> Int
[tempF] :: WeatherInfo -> Int
[dewPoint] :: WeatherInfo -> String
[humidity] :: WeatherInfo -> Int
[pressure] :: WeatherInfo -> Int

-- | A wrapper to allow users to specify a custom weather formatter. The
--   default interpolates variables into a string as described above.
--   Custom formatters can do basically anything.
data WeatherFormatter

-- | Specify a custom formatter for <a>WeatherInfo</a>
WeatherFormatter :: (WeatherInfo -> String) -> WeatherFormatter

-- | Create a periodically-updating weather widget that polls NOAA.
weatherNew :: MonadIO m => WeatherConfig -> Double -> m Widget

-- | Create a periodically-updating weather widget using custom weather
--   getter
weatherCustomNew :: MonadIO m => IO (Either String WeatherInfo) -> String -> String -> WeatherFormatter -> Double -> m Widget

-- | A sensible default configuration for the weather widget that just
--   renders the temperature.
defaultWeatherConfig :: String -> WeatherConfig
instance GHC.Show.Show System.Taffybar.Widget.Weather.WeatherInfo


-- | Menu widget that shows the title of the currently focused window and
--   that, when clicked, displays a menu from which the user may select a
--   window to which to switch the focus.
module System.Taffybar.Widget.Windows
data WindowsConfig
WindowsConfig :: (X11Window -> TaffyIO Text) -> TaffyIO Text -> WindowsConfig

-- | A monadic function that will be used to make a label for the window in
--   the window menu.
[getMenuLabel] :: WindowsConfig -> X11Window -> TaffyIO Text

-- | Action to build the label text for the active window.
[getActiveLabel] :: WindowsConfig -> TaffyIO Text
defaultGetMenuLabel :: X11Window -> TaffyIO Text
defaultGetActiveLabel :: TaffyIO Text
truncatedGetActiveLabel :: Int -> TaffyIO Text
truncatedGetMenuLabel :: Int -> X11Window -> TaffyIO Text
defaultWindowsConfig :: WindowsConfig

-- | Create a new Windows widget that will use the given Pager as its
--   source of events.
windowsNew :: WindowsConfig -> TaffyIO Widget

-- | Populate the given menu widget with the list of all currently open
--   windows.
fillMenu :: IsMenuShell a => WindowsConfig -> a -> ReaderT Context IO ()
instance Data.Default.Class.Default System.Taffybar.Widget.Windows.WindowsConfig


-- | This is a simple weather widget that polls wttr.in to retrieve the
--   weather, instead of relying on noaa data.
--   
--   Useful if NOAA data doesn't cover your needs, or if you just like
--   wttr.in better.
--   
--   For more information on how to use wttr.in, see
--   <a>https://wttr.in/:help</a>.
module System.Taffybar.Widget.WttrIn

-- | Creates a GTK Label widget that polls the requested wttr.in url for
--   weather information.
--   
--   Not compatible with image endpoints and binary data, such as the
--   %.png% endpoints.
--   
--   <pre>
--   -- Yields a label with the text "London: ⛅️  +72°F". Updates every 60
--   -- seconds.
--   textWttrNew "http://wttr.in/London?format=3" 60
--   </pre>
textWttrNew :: MonadIO m => String -> Double -> m Widget


-- | Implementation of version 1.1 of the freedesktop "Desktop Menu
--   Specification", see
--   <a>https://specifications.freedesktop.org/menu-spec/menu-spec-1.1.html</a>
--   
--   See also <tt>MenuWidget</tt>.
module System.Taffybar.Widget.XDGMenu.Menu

-- | Displayable menu
data Menu
Menu :: String -> String -> Maybe String -> [Menu] -> [MenuEntry] -> Bool -> Menu
[fmName] :: Menu -> String
[fmComment] :: Menu -> String
[fmIcon] :: Menu -> Maybe String
[fmSubmenus] :: Menu -> [Menu]
[fmEntries] :: Menu -> [MenuEntry]
[fmOnlyUnallocated] :: Menu -> Bool

-- | Displayable menu entry
data MenuEntry
MenuEntry :: Text -> Text -> String -> Maybe Text -> MenuEntry
[feName] :: MenuEntry -> Text
[feComment] :: MenuEntry -> Text
[feCommand] :: MenuEntry -> String
[feIcon] :: MenuEntry -> Maybe Text

-- | Fetch menus and desktop entries and assemble the menu.
buildMenu :: Maybe String -> IO Menu

-- | Return a list of all available desktop entries for a given xdg menu.
getApplicationEntries :: [String] -> XDGMenu -> IO [DesktopEntry]
instance GHC.Show.Show System.Taffybar.Widget.XDGMenu.Menu.MenuEntry
instance GHC.Classes.Eq System.Taffybar.Widget.XDGMenu.Menu.MenuEntry
instance GHC.Show.Show System.Taffybar.Widget.XDGMenu.Menu.Menu
instance GHC.Classes.Eq System.Taffybar.Widget.XDGMenu.Menu.Menu


-- | MenuWidget provides a hierachical GTK menu containing all applicable
--   desktop entries found on the system. The menu is built according to
--   the version 1.1 of the XDG "Desktop Menu Specification", see
--   <a>https://specifications.freedesktop.org/menu-spec/menu-spec-1.1.html</a>
module System.Taffybar.Widget.XDGMenu.MenuWidget

-- | Create a new XDG Menu Widget.
menuWidgetNew :: MonadIO m => Maybe String -> m Widget

module System.Taffybar.WindowIcon
type ColorRGBA = Word32

-- | Convert a C array of integer pixels in the ARGB format to the ABGR
--   format. Returns an unmanged Ptr that points to a block of memory that
--   must be freed manually.
pixelsARGBToBytesABGR :: (Storable a, Bits a, Num a, Integral a) => Ptr a -> Int -> IO (Ptr Word8)
selectEWMHIcon :: Int32 -> [EWMHIcon] -> Maybe EWMHIcon
getPixbufFromEWMHIcons :: Int32 -> [EWMHIcon] -> IO (Maybe Pixbuf)

-- | Create a pixbuf from the pixel data in an EWMHIcon.
pixBufFromEWMHIcon :: EWMHIcon -> IO Pixbuf
getIconPixBufFromEWMH :: Int32 -> X11Window -> X11Property (Maybe Pixbuf)

-- | Create a pixbuf with the indicated RGBA color.
pixBufFromColor :: MonadIO m => Int32 -> Word32 -> m Pixbuf
getDirectoryEntryByClass :: String -> TaffyIO (Maybe DesktopEntry)
getWindowIconForAllClasses :: Monad m => (p -> String -> m (Maybe a)) -> p -> String -> m (Maybe a)
getWindowIconFromDesktopEntryByClasses :: Int32 -> String -> TaffyIO (Maybe Pixbuf)
getWindowIconFromClasses :: Int32 -> String -> IO (Maybe Pixbuf)
getPixBufFromChromeData :: X11Window -> TaffyIO (Maybe Pixbuf)


module System.Taffybar.Widget.Workspaces
data WorkspaceState
Active :: WorkspaceState
Visible :: WorkspaceState
Hidden :: WorkspaceState
Empty :: WorkspaceState
Urgent :: WorkspaceState
getCSSClass :: Show s => s -> Text
cssWorkspaceStates :: [Text]
data WindowData
WindowData :: X11Window -> String -> String -> Bool -> Bool -> Bool -> WindowData
[windowId] :: WindowData -> X11Window
[windowTitle] :: WindowData -> String
[windowClass] :: WindowData -> String
[windowUrgent] :: WindowData -> Bool
[windowActive] :: WindowData -> Bool
[windowMinimized] :: WindowData -> Bool
data WidgetUpdate
WorkspaceUpdate :: Workspace -> WidgetUpdate
IconUpdate :: [X11Window] -> WidgetUpdate
data Workspace
Workspace :: WorkspaceId -> String -> WorkspaceState -> [WindowData] -> Workspace
[workspaceIdx] :: Workspace -> WorkspaceId
[workspaceName] :: Workspace -> String
[workspaceState] :: Workspace -> WorkspaceState
[windows] :: Workspace -> [WindowData]
data WorkspacesContext
WorkspacesContext :: MVar (Map WorkspaceId WWC) -> MVar (Map WorkspaceId Workspace) -> Box -> WorkspacesConfig -> Context -> WorkspacesContext
[controllersVar] :: WorkspacesContext -> MVar (Map WorkspaceId WWC)
[workspacesVar] :: WorkspacesContext -> MVar (Map WorkspaceId Workspace)
[workspacesWidget] :: WorkspacesContext -> Box
[workspacesConfig] :: WorkspacesContext -> WorkspacesConfig
[taffyContext] :: WorkspacesContext -> Context
type WorkspacesIO a = ReaderT WorkspacesContext IO a
liftContext :: TaffyIO a -> WorkspacesIO a
liftX11Def :: a -> X11Property a -> WorkspacesIO a
setWorkspaceWidgetStatusClass :: (MonadIO m, IsWidget a) => Workspace -> a -> m ()
updateWidgetClasses :: (Foldable t1, Foldable t, IsWidget a, MonadIO m) => a -> t1 Text -> t Text -> m ()
class WorkspaceWidgetController wc
getWidget :: WorkspaceWidgetController wc => wc -> WorkspacesIO Widget
updateWidget :: WorkspaceWidgetController wc => wc -> WidgetUpdate -> WorkspacesIO wc
updateWidgetX11 :: WorkspaceWidgetController wc => wc -> WidgetUpdate -> WorkspacesIO wc
data WWC
WWC :: a -> WWC
type ControllerConstructor = Workspace -> WorkspacesIO WWC
type ParentControllerConstructor = ControllerConstructor -> ControllerConstructor
type WindowIconPixbufGetter = Int32 -> WindowData -> TaffyIO (Maybe Pixbuf)
data WorkspacesConfig
WorkspacesConfig :: ControllerConstructor -> Int -> Maybe Int -> Int -> WindowIconPixbufGetter -> (Workspace -> WorkspacesIO String) -> (Workspace -> Bool) -> Int -> [String] -> Integer -> ([WindowData] -> WorkspacesIO [WindowData]) -> Bool -> WorkspacesConfig
[widgetBuilder] :: WorkspacesConfig -> ControllerConstructor
[widgetGap] :: WorkspacesConfig -> Int
[maxIcons] :: WorkspacesConfig -> Maybe Int
[minIcons] :: WorkspacesConfig -> Int
[getWindowIconPixbuf] :: WorkspacesConfig -> WindowIconPixbufGetter
[labelSetter] :: WorkspacesConfig -> Workspace -> WorkspacesIO String
[showWorkspaceFn] :: WorkspacesConfig -> Workspace -> Bool
[borderWidth] :: WorkspacesConfig -> Int
[updateEvents] :: WorkspacesConfig -> [String]
[updateRateLimitMicroseconds] :: WorkspacesConfig -> Integer
[iconSort] :: WorkspacesConfig -> [WindowData] -> WorkspacesIO [WindowData]
[urgentWorkspaceState] :: WorkspacesConfig -> Bool
defaultWorkspacesConfig :: WorkspacesConfig
hideEmpty :: Workspace -> Bool
wLog :: MonadIO m => Priority -> String -> m ()
updateVar :: MVar a -> (a -> WorkspacesIO a) -> WorkspacesIO a
updateWorkspacesVar :: WorkspacesIO (Map WorkspaceId Workspace)
getWorkspaceToWindows :: [X11Window] -> X11Property (MultiMap WorkspaceId X11Window)
getWindowData :: Maybe X11Window -> [X11Window] -> X11Window -> X11Property WindowData
buildWorkspaceData :: Map WorkspaceId Workspace -> WorkspacesIO (Map WorkspaceId Workspace)
addWidgetsToTopLevel :: WorkspacesIO ()
addWidget :: WWC -> WorkspacesIO ()
workspacesNew :: WorkspacesConfig -> TaffyIO Widget
updateAllWorkspaceWidgets :: WorkspacesIO ()
setControllerWidgetVisibility :: WorkspacesIO ()
doWidgetUpdate :: (WorkspaceId -> WWC -> WorkspacesIO WWC) -> WorkspacesIO ()
updateWorkspaceControllers :: WorkspacesIO ()
rateLimitFn :: forall req resp. WorkspacesContext -> (req -> IO resp) -> ResultsCombiner req resp -> IO (req -> IO resp)
onWorkspaceUpdate :: WorkspacesContext -> IO (Event -> IO ())
onIconChanged :: (Set X11Window -> IO ()) -> Event -> IO ()
onIconsChanged :: WorkspacesContext -> IO (Set X11Window -> IO ())
initializeWWC :: WorkspaceWidgetController a => a -> Workspace -> ReaderT WorkspacesContext IO WWC

-- | A WrappingController can be used to wrap some child widget with
--   another abitrary widget.
data WrappingController
WrappingController :: Widget -> WWC -> WrappingController
[wrappedWidget] :: WrappingController -> Widget
[wrappedController] :: WrappingController -> WWC
data WorkspaceContentsController
WorkspaceContentsController :: Widget -> [WWC] -> WorkspaceContentsController
[containerWidget] :: WorkspaceContentsController -> Widget
[contentsControllers] :: WorkspaceContentsController -> [WWC]
buildContentsController :: [ControllerConstructor] -> ControllerConstructor
defaultBuildContentsController :: ControllerConstructor
bottomLeftAlignedBoxWrapper :: Text -> ControllerConstructor -> ControllerConstructor
buildLabelOverlayController :: ControllerConstructor
buildOverlayContentsController :: [ControllerConstructor] -> [ControllerConstructor] -> ControllerConstructor
newtype LabelController
LabelController :: Label -> LabelController
[label] :: LabelController -> Label
buildLabelController :: ControllerConstructor
data IconWidget
IconWidget :: EventBox -> Image -> MVar (Maybe WindowData) -> IO () -> IconWidget
[iconContainer] :: IconWidget -> EventBox
[iconImage] :: IconWidget -> Image
[iconWindow] :: IconWidget -> MVar (Maybe WindowData)
[iconForceUpdate] :: IconWidget -> IO ()
getPixbufForIconWidget :: Bool -> MVar (Maybe WindowData) -> Int32 -> WorkspacesIO (Maybe Pixbuf)
buildIconWidget :: Bool -> Workspace -> WorkspacesIO IconWidget
data IconController
IconController :: Box -> [IconWidget] -> Workspace -> IconController
[iconsContainer] :: IconController -> Box
[iconImages] :: IconController -> [IconWidget]
[iconWorkspace] :: IconController -> Workspace
buildIconController :: ControllerConstructor
updateWindowIconsById :: IconController -> [X11Window] -> WorkspacesIO ()
scaledWindowIconPixbufGetter :: WindowIconPixbufGetter -> WindowIconPixbufGetter
constantScaleWindowIconPixbufGetter :: Int32 -> WindowIconPixbufGetter -> WindowIconPixbufGetter
handleIconGetterException :: WindowIconPixbufGetter -> WindowIconPixbufGetter
getWindowIconPixbufFromEWMH :: WindowIconPixbufGetter
getWindowIconPixbufFromClass :: WindowIconPixbufGetter
getWindowIconPixbufFromDesktopEntry :: WindowIconPixbufGetter
getWindowIconPixbufFromChrome :: WindowIconPixbufGetter
defaultGetWindowIconPixbuf :: WindowIconPixbufGetter
unscaledDefaultGetWindowIconPixbuf :: WindowIconPixbufGetter
addCustomIconsToDefaultWithFallbackByPath :: (WindowData -> Maybe FilePath) -> FilePath -> WindowIconPixbufGetter
addCustomIconsAndFallback :: (WindowData -> Maybe FilePath) -> (Int32 -> TaffyIO (Maybe Pixbuf)) -> WindowIconPixbufGetter -> WindowIconPixbufGetter

-- | Sort windows by top-left corner position.
sortWindowsByPosition :: [WindowData] -> WorkspacesIO [WindowData]

-- | Sort windows in reverse _NET_CLIENT_LIST_STACKING order. Starting in
--   xmonad-contrib 0.17.0, this is effectively focus history, active
--   first. Previous versions erroneously stored focus-sort-order in
--   _NET_CLIENT_LIST.
sortWindowsByStackIndex :: [WindowData] -> WorkspacesIO [WindowData]
updateImages :: IconController -> Workspace -> WorkspacesIO [IconWidget]
getWindowStatusString :: WindowData -> Text
possibleStatusStrings :: [Text]
updateIconWidget :: IconController -> IconWidget -> Maybe WindowData -> WorkspacesIO ()
data WorkspaceButtonController
WorkspaceButtonController :: EventBox -> Workspace -> WWC -> WorkspaceButtonController
[button] :: WorkspaceButtonController -> EventBox
[buttonWorkspace] :: WorkspaceButtonController -> Workspace
[contentsController] :: WorkspaceButtonController -> WWC
buildButtonController :: ParentControllerConstructor
switch :: MonadIO m => WorkspacesContext -> WorkspaceId -> m Bool
instance GHC.Classes.Eq System.Taffybar.Widget.Workspaces.WorkspaceState
instance GHC.Show.Show System.Taffybar.Widget.Workspaces.WorkspaceState
instance GHC.Classes.Eq System.Taffybar.Widget.Workspaces.WindowData
instance GHC.Show.Show System.Taffybar.Widget.Workspaces.WindowData
instance GHC.Classes.Eq System.Taffybar.Widget.Workspaces.Workspace
instance GHC.Show.Show System.Taffybar.Widget.Workspaces.Workspace
instance System.Taffybar.Widget.Workspaces.WorkspaceWidgetController System.Taffybar.Widget.Workspaces.WorkspaceButtonController
instance System.Taffybar.Widget.Workspaces.WorkspaceWidgetController System.Taffybar.Widget.Workspaces.IconController
instance System.Taffybar.Widget.Workspaces.WorkspaceWidgetController System.Taffybar.Widget.Workspaces.LabelController
instance System.Taffybar.Widget.Workspaces.WorkspaceWidgetController System.Taffybar.Widget.Workspaces.WorkspaceContentsController
instance System.Taffybar.Widget.Workspaces.WorkspaceWidgetController System.Taffybar.Widget.Workspaces.WrappingController
instance System.Taffybar.Widget.Workspaces.WorkspaceWidgetController System.Taffybar.Widget.Workspaces.WWC
instance Data.Default.Class.Default System.Taffybar.Widget.Workspaces.WorkspacesConfig


-- | This is a "Now Playing" widget that listens for MPRIS2 events on DBus.
--   You can find the MPRIS2 specification here at
--   (<a>https://specifications.freedesktop.org/mpris-spec/latest/</a>).
module System.Taffybar.Widget.MPRIS2
mprisLog :: (MonadIO m, Show t) => Priority -> String -> t -> m ()

-- | A type representing a function that produces an IO action that adds
--   the provided widget to some container.
type WidgetAdder a m = (IsDescendantOf Widget a, MonadIO m, GObject a) => a -> m ()

-- | The type of a customization function that is used to update a widget
--   with the provided now playing info. The type a should be the internal
--   state used for the widget (typically just references to the child
--   widgets that may need to be updated ). When the provided value is
--   nothing, it means that the widget does not exist yet and it should be
--   instantiated. When the provided NowPlaying value is Nothing, the dbus
--   client is no longer, and typically the widget should be hidden.
type UpdateMPRIS2PlayerWidget a = (forall w. WidgetAdder w IO) -> Maybe a -> Maybe NowPlaying -> TaffyIO a

-- | Configuration for an MPRIS2 Widget
data MPRIS2Config a
MPRIS2Config :: (Widget -> IO Widget) -> UpdateMPRIS2PlayerWidget a -> MPRIS2Config a

-- | A function that will be used to wrap the outer MPRIS2 grid widget
[mprisWidgetWrapper] :: MPRIS2Config a -> Widget -> IO Widget

-- | This function will be called to instantiate and update the player
--   widgets of each dbus player client. See the docstring for
--   <a>UpdateMPRIS2PlayerWidget</a> for more details.
[updatePlayerWidget] :: MPRIS2Config a -> UpdateMPRIS2PlayerWidget a
defaultMPRIS2Config :: MPRIS2Config MPRIS2PlayerWidget
data MPRIS2PlayerWidget
MPRIS2PlayerWidget :: Label -> Widget -> MPRIS2PlayerWidget
[playerLabel] :: MPRIS2PlayerWidget -> Label
[playerWidget] :: MPRIS2PlayerWidget -> Widget
data SimpleMPRIS2PlayerConfig
SimpleMPRIS2PlayerConfig :: (NowPlaying -> IO Text) -> (NowPlaying -> IO Bool) -> SimpleMPRIS2PlayerConfig
[setNowPlayingLabel] :: SimpleMPRIS2PlayerConfig -> NowPlaying -> IO Text
[showPlayerWidgetFn] :: SimpleMPRIS2PlayerConfig -> NowPlaying -> IO Bool
defaultPlayerConfig :: SimpleMPRIS2PlayerConfig
makeExcept :: String -> (a -> IO (Maybe b)) -> a -> ExceptT String IO b
loadIconAtSize :: Client -> BusName -> Int32 -> IO Pixbuf

-- | This is the default player widget constructor that is used to build
--   mpris widgets. It provides only an icon and NowPlaying text.
simplePlayerWidget :: SimpleMPRIS2PlayerConfig -> UpdateMPRIS2PlayerWidget MPRIS2PlayerWidget

-- | Construct a new MPRIS2 widget using the <a>simplePlayerWidget</a>
--   constructor.
mpris2New :: TaffyIO Widget

-- | Construct a new MPRIS2 widget with the provided configuration.
mpris2NewWithConfig :: MPRIS2Config a -> TaffyIO Widget

-- | Generate now playing text with the artist truncated to a maximum given
--   by the first provided int, and the song title truncated to a maximum
--   given by the second provided int.
playingText :: MonadIO m => Int -> Int -> NowPlaying -> m Text
instance Data.Default.Class.Default System.Taffybar.Widget.MPRIS2.SimpleMPRIS2PlayerConfig

module System.Taffybar.Widget


module System.Taffybar.Example
transparent :: (Double, Double, Double, Double)
yellow1 :: (Double, Double, Double, Double)
yellow2 :: (Double, Double, Double, Double)
green1 :: (Double, Double, Double, Double)
green2 :: (Double, Double, Double, Double)
taffyBlue :: (Double, Double, Double, Double)
myGraphConfig :: GraphConfig
netCfg :: GraphConfig
memCfg :: GraphConfig
cpuCfg :: GraphConfig
memCallback :: IO [Double]
cpuCallback :: IO [Double]
exampleTaffybarConfig :: TaffybarConfig


-- | This module provides widgets for tracking the price of crypto currency
--   assets.
module System.Taffybar.Widget.Crypto

-- | Extends <a>cryptoPriceLabel</a> with an icon corresponding to the
--   symbol of the purchase crypto that will appear to the left of the
--   price label. See the docstring for <a>getCryptoPixbuf</a> for details
--   about how this icon is retrieved. Note that automatic icon retrieval
--   requires a coinmarketcap api key to be set at taffybar startup. As
--   with <a>cryptoPriceLabel</a>, this function must be invoked with a
--   type application with the type string that expresses the symbol of the
--   relevant token and the underlying currency in which its price should
--   be expressed. See the docstring of <a>cryptoPriceLabel</a> for details
--   about the exact format that this string should take.
cryptoPriceLabelWithIcon :: forall a. KnownSymbol a => TaffyIO Widget
newtype CMCAPIKey
CMCAPIKey :: String -> CMCAPIKey

-- | Set the coinmarketcap.com api key that will be used for retrieving
--   crypto icons that are not cached. This should occur before any
--   attempts to retrieve crypto icons happen. The easiest way to call this
--   appropriately is to set it as a <a>startupHook</a>.
setCMCAPIKey :: String -> TaffyIO CMCAPIKey

-- | Build a label that will reflect the price of some token in some
--   currency in the coingecko API. This function accepts these valuesas a
--   type parameter with kind <a>Value</a> of the form `(symbol for asset
--   being purchased)-(currency the price should be expressed in)`. For
--   example, the product string for the price of bitcoin quoted in U.S.
--   dollars is "BTC-USD". You can invoke this function by enabling the
--   TypeApplications language extension and passing the string associated
--   with the asset that you want to track as follows:
--   
--   <pre>
--   cryptoPriceLabel @"BTC-USD"
--   </pre>
cryptoPriceLabel :: forall a. KnownSymbol a => TaffyIO Widget
cryptoPriceLabel' :: CryptoPriceChannel a -> TaffyIO Widget
cryptoIconsDir :: IO FilePath
pathForCryptoSymbol :: String -> IO FilePath

-- | Retrieve a pixbuf image corresponding to the provided crypto symbol.
--   The image used will be retrieved from the file with the name
--   `(pricesymbol).png` from the directory defined by
--   <a>cryptoIconsDir</a>. If a file is not found there and an an api key
--   for coinmarketcap.com has been set using <a>setCMCAPIKey</a>, an icon
--   will be automatically be retrieved from coinmarketcap.com.
getCryptoPixbuf :: String -> TaffyIO (Maybe Pixbuf)
getCryptoIconFromCache :: MonadIO m => String -> m (Maybe Pixbuf)
getCryptoIconFromCMC :: String -> TaffyIO (Maybe Pixbuf)
getCryptoIconFromCMC' :: String -> String -> IO (Maybe Pixbuf)
getIconURIFromJSON :: String -> ByteString -> Maybe Text
