From 54654d56b149dde2beaa71de35dde549424c1985 Mon Sep 17 00:00:00 2001 From: Artur Manuel Date: Mon, 24 Feb 2025 07:32:35 +0000 Subject: [PATCH] feat(display): add separator --- app/Main.hs | 67 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/app/Main.hs b/app/Main.hs index 8f8a809..4ffbbf4 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -4,11 +4,19 @@ import Data.List (isPrefixOf) import Data.Maybe (fromMaybe) import System.Environment (lookupEnv) import System.IO (readFile') +import Control.Monad.IO.Class (MonadIO) + +fromIOMaybe :: (MonadIO m) => a -> m (Maybe a) -> m a +fromIOMaybe failsafe maybeVal = do + res <- maybeVal + case res of + Nothing -> return failsafe + (Just val) -> return val readUptime :: String -> Int readUptime "" = 0 readUptime uptime - | length (words uptime) > 1 = floor (read . head . words $ uptime :: Float) + | length (words uptime) > 1 = floor (read . head $ words uptime :: Float) | otherwise = floor (read uptime :: Float) getUptime :: Int -> String @@ -18,36 +26,36 @@ getUptime uptime | otherwise = unwords [remH, remM, remS] where totalM = uptime `div` 60 - remS = show (uptime `mod` 60) ++ "s" - remM = show (totalM `mod` 60) ++ "m" - remH = show (totalM `div` 60) ++ "h" + remS = show (uptime `mod` 60) <> "s" + remM = show (totalM `mod` 60) <> "m" + remH = show (totalM `div` 60) <> "h" getKVer :: String -> String getKVer "" = "" getKVer info | length (words info) < 3 = head (words info) - | otherwise = (\(k : ks) -> k ++ " " ++ (head . tail) ks) . words $ info + | otherwise = (\(k : ks) -> unwords [k, (!! 1) ks]) (words info) findPrettyName :: [String] -> String +findPrettyName [] = "Unknown" findPrettyName (o : os) - | "PRETTY_NAME" `isPrefixOf` o = (reverse . tail . init . takeWhile (/= '=') . reverse) o + | "PRETTY_NAME" `isPrefixOf` o = tail . init $ dropWhile (/='"') o | otherwise = findPrettyName os -parseKBFromMeminfo :: String -> Int -parseKBFromMeminfo "" = 0 -parseKBFromMeminfo line = read (head . tail . words $ line) :: Int +parseKB :: String -> Int +parseKB "" = 0 +parseKB line = read (head . tail $ words line) :: Int getMemory :: String -> String -getMemory meminfo - | length (lines meminfo) < 2 = "N/A" - | otherwise = memAvail ++ "/" ++ memTotal +getMemory memInfo + | length (lines memInfo) < 2 = "N/A" + | otherwise = memAvail <> "/" <> memTotal where - memTotal = show (parseKBFromMeminfo (head $ lines meminfo) `div` 1000) ++ "MB" - memAvail = show (parseKBFromMeminfo (head . tail . tail $ lines meminfo) `div` 1000) ++ "MB" + memAvail = show ((parseKB . (!! 2) $ lines memInfo) `div` 1000) <> "MB" + memTotal = show ((parseKB . head $ lines memInfo) `div` 1000) <> "MB" -getWM :: Maybe String -> Maybe String -> String -getWM (Just desktop) (Just session) = desktop ++ " (" ++ session ++ ")" -getWM _ _ = "Unknown" +getWM :: String -> String -> String +getWM desktop session = unwords [desktop, "(" <> session <> ")"] main :: IO () main = do @@ -56,19 +64,20 @@ main = do osRelease <- readFile' "/etc/os-release" hostname <- readFile' "/proc/sys/kernel/hostname" meminfo <- readFile' "/proc/meminfo" - username <- lookupEnv "USER" - currentDesktop <- lookupEnv "XDG_CURRENT_DESKTOP" - sessionType <- lookupEnv "XDG_SESSION_TYPE" - locale <- lookupEnv "LANG" + username <- fromIOMaybe "username" (lookupEnv "USER") + currentDesktop <- fromIOMaybe "Unknown" (lookupEnv "XDG_CURRENT_DESKTOP") + sessionType <- fromIOMaybe "Unkown" (lookupEnv "XDG_SESSION_TYPE") + locale <- fromIOMaybe "un_KN.own" (lookupEnv "LANG") + let userandhost = username <> "@" <> init hostname putStr ( unlines - [ "\x1b[1;35m █ \x1b[1;34m" ++ fromMaybe "username" username ++ "@" ++ init hostname - , "\x1b[1;35m █ \x1b[1;34m" - , "\x1b[1;35m █ \x1b[1;34m" ++ "up\t" ++ (getUptime . readUptime) uptime - , "\x1b[1;35m █ \x1b[1;34m" ++ "wm\t" ++ getWM currentDesktop sessionType - , "\x1b[1;35m ███ \x1b[1;34m" ++ "krl\t" ++ getKVer version - , "\x1b[1;35m █ ██ \x1b[1;34m" ++ "os\t" ++ (findPrettyName . lines) osRelease - , "\x1b[1;35m █ ██ \x1b[1;34m" ++ "lcl\t" ++ fromMaybe "??_??" locale - , "\x1b[1;35m █ ██ \x1b[1;34m" ++ "mem\t" ++ getMemory meminfo + [ "\x1b[1;35m █ \x1b[1;34m" <> userandhost + , "\x1b[1;35m █ \x1b[1;34m" <> take (length userandhost) (repeat '-') + , "\x1b[1;35m █ \x1b[1;34m" <> "up\t" <> getUptime (readUptime uptime) + , "\x1b[1;35m █ \x1b[1;34m" <> "wm\t" <> getWM currentDesktop sessionType + , "\x1b[1;35m ███ \x1b[1;34m" <> "krl\t" <> getKVer version + , "\x1b[1;35m █ ██ \x1b[1;34m" <> "os\t" <> findPrettyName (lines osRelease) + , "\x1b[1;35m █ ██ \x1b[1;34m" <> "lcl\t" <> locale + , "\x1b[1;35m █ ██ \x1b[1;34m" <> "mem\t" <> getMemory meminfo ] )