Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {-# LANGUAGE PackageImports #-}
- {-# LANGUAGE OverloadedStrings #-}
- module Main where
- import Control.Exception.Base
- import Control.Monad
- import Control.Monad.IO.Class
- import Control.Monad.Trans.Class
- import Control.Monad.Trans.Reader
- import qualified Data.ByteString.Char8 as BS
- import Data.List
- import Data.List.Split
- import qualified Data.Map as M
- import Data.Maybe
- --import qualified GitHub.Auth as Auth
- import StatusNotifier.Tray
- import System.Directory
- import System.Environment
- import System.FilePath.Posix
- import System.IO
- import System.Log.Handler.Simple
- import System.Log.Logger
- import System.Process
- import System.Taffybar
- import System.Taffybar.Auth
- import System.Taffybar.Context (appendHook)
- import System.Taffybar.DBus
- import System.Taffybar.DBus.Toggle
- --import System.Taffybar.TaffyPager
- import System.Taffybar.Hooks
- import System.Taffybar.Information.CPU
- import System.Taffybar.Information.EWMHDesktopInfo
- import System.Taffybar.Information.Memory
- import System.Taffybar.Information.X11DesktopInfo
- import System.Taffybar.SimpleConfig
- import System.Taffybar.Util
- import System.Taffybar.Widget
- import System.Taffybar.Widget.Generic.PollingGraph
- import System.Taffybar.Widget.Generic.PollingLabel
- import System.Taffybar.Widget.Util
- import System.Taffybar.Widget.Workspaces
- import System.Taffybar.Widget.Volume
- import System.Taffybar.Widget.XDGMenu.MenuWidget
- import Text.Printf
- import Text.Read hiding (lift)
- mkRGBA (r, g, b, a) = (r/256, g/256, b/256, a/256)
- blue = mkRGBA (42, 99, 140, 256)
- yellow1 = mkRGBA (242, 163, 54, 256)
- yellow2 = mkRGBA (254, 204, 83, 256)
- yellow3 = mkRGBA (227, 134, 18, 256)
- red = mkRGBA (210, 77, 37, 256)
- myGraphConfig =
- defaultGraphConfig
- { graphPadding = 0
- , graphBorderWidth = 0
- , graphWidth = 75
- , graphBackgroundColor = (0.0, 0.0, 0.0, 0.0)
- }
- netCfg = myGraphConfig
- { graphDataColors = [yellow1, yellow2]
- , graphLabel = Just "net"
- }
- memCfg = myGraphConfig
- { graphDataColors = [(0.129, 0.588, 0.953, 1)]
- , graphLabel = Just "mem"
- }
- cpuCfg = myGraphConfig
- { graphDataColors = [(0, 1, 0, 1), (1, 0, 1, 0.5)]
- , graphLabel = Just "cpu"
- }
- memCallback :: IO [Double]
- memCallback = do
- mi <- parseMeminfo
- return [memoryUsedRatio mi]
- cpuCallback = do
- (_, systemLoad, totalLoad) <- cpuLoad
- return [totalLoad, systemLoad]
- getFullWorkspaceNames :: X11Property [(WorkspaceIdx, String)]
- getFullWorkspaceNames = go <$> readAsListOfString Nothing "_NET_DESKTOP_FULL_NAMES"
- where go = zip [WSIdx i | i <- [0..]]
- workspaceNamesLabelSetter workspace =
- fromMaybe "" . lookup (workspaceIdx workspace) <$>
- liftX11Def [] getFullWorkspaceNames
- enableLogger logger level = do
- logger <- getLogger logger
- saveGlobalLogger $ setLevel level logger
- logDebug = do
- logger <- getLogger "System.Taffybar.Widget.Generic.AutoSizeImage"
- saveGlobalLogger $ setLevel DEBUG logger
- logger2 <- getLogger "StatusNotifier.Tray"
- saveGlobalLogger $ setLevel DEBUG logger2
- workspacesLogger <- getLogger "System.Taffybar.Widget.Workspaces"
- saveGlobalLogger $ setLevel WARNING workspacesLogger
- -- github = do
- -- Right (token, _) <- passGet "github-token"
- -- githubNotificationsNew $ defaultGithubConfig $ Auth.OAuth $ BS.pack token
- main = do
- homeDirectory <- getHomeDirectory
- -- logDebug
- -- logM "What" WARNING "Why"
- -- enableLogger "System.Taffybar.Widget.Util" DEBUG
- -- enableLogger "System.Taffybar.Information.XDG.DesktopEntry" DEBUG
- -- enableLogger "System.Taffybar.WindowIcon" DEBUG
- let resourcesDirectory = homeDirectory </> ".lib" </> "resources"
- inResourcesDirectory file = resourcesDirectory </> file
- highContrastDirectory =
- "/" </> "usr" </> "share" </> "icons" </> "HighContrast" </> "256x256"
- inHighContrastDirectory file = highContrastDirectory </> file
- getIconFileName w@WindowData {windowTitle = title, windowClass = klass}
- -- | "URxvt" `isInfixOf` klass = Just "urxvt.png"
- -- | "Termite" `isInfixOf` klass = Just "urxvt.png"
- -- | "Kodi" `isInfixOf` klass = Just "kodi.png"
- | "@gmail.com" `isInfixOf` title &&
- "chrome" `isInfixOf` klass && "Gmail" `isInfixOf` title =
- Just "gmail.png"
- | otherwise = Nothing
- myIcons = scaledWindowIconPixbufGetter $
- unscaledDefaultGetWindowIconPixbuf <|||>
- (\size _ -> lift $ loadPixbufByName size "application-default-icon")
- cpu = pollingGraphNew cpuCfg 0.5 cpuCallback
- mem = pollingGraphNew memCfg 1 memCallback
- layout = layoutNew defaultLayoutConfig
- -- pager = taffyPagerNew defaultPagerConfig
- windows = windowsNew defaultWindowsConfig
- menu = menuWidgetNew $ Just "GNOME-"
- notifySystemD = void $ runCommandFromPath ["systemd-notify", "--ready"]
- myWorkspacesConfig =
- defaultWorkspacesConfig
- { underlineHeight = 3
- , underlinePadding = 1
- , minIcons = 0
- , maxIcons = Nothing
- , getWindowIconPixbuf = myIcons
- , windowIconSize = 20
- , widgetGap = 0
- , showWorkspaceFn = showEmpty
- , updateRateLimitMicroseconds = 100000
- , urgentWorkspaceState = True
- , labelSetter = workspaceNamesLabelSetter
- }
- workspaces = workspacesNew myWorkspacesConfig
- myPagerConfig :: PagerConfig
- myPagerConfig = defaultPagerConfig { activeWorkspace =
- colorize "yellow" "" . wrap " [" "] " . escape
- , hiddenWorkspace = wrap " " " " . escape
- }
- baseConfig =
- defaultSimpleTaffyConfig
- { startWidgets =
- workspaces : map (>>= buildContentsBox) [windows, menu ,layout]
- , endWidgets =
- map
- (>>= buildContentsBox)
- [ textBatteryNew "$percentage$%"
- , batteryIconNew
- , textClockNew Nothing "%a %b %_d %r" 1
- , sniTrayNew
- -- , github
- , cpu
- , mem
- , networkGraphNew netCfg Nothing
- , volumeControlNew
- -- , networkMonitorNew defaultNetFormat Nothing >>= setMinWidth 200
- -- , fsMonitorNew 60 ["/dev/sdd2"]
- , mpris2New
- ]
- , barPosition = Right
- , barPadding = 0
- , barHeight = 24
- }
- simpleTaffyConfig = baseConfig
- -- { endWidgets = []
- -- , startWidgets = [flip widgetSetClass "Workspaces" =<< workspaces]
- -- }
- startTaffybar $
- appendHook notifySystemD $
- appendHook (void $ getHost False) $
- withBatteryRefresh $
- withLogServer $
- withToggleServer $
- toTaffyConfig simpleTaffyConfig
- -- Local Variables:
- -- flycheck-ghc-args: ("-Wno-missing-signatures")
- -- End:
Add Comment
Please, Sign In to add comment