diff options
| author | Enrico Maria De Angelis <enricomaria.dean6elis@gmail.com> | 2024-04-17 18:25:45 +0100 | 
|---|---|---|
| committer | Enrico Maria De Angelis <enricomaria.dean6elis@gmail.com> | 2024-05-18 15:19:42 +0100 | 
| commit | 80be37611711871c6971588873687755103097c0 (patch) | |
| tree | 97eee3f3a26c59bb235124518440b74caec4c82e /src/Xmobar/Plugins | |
| parent | 1e8175d38a9f6048e638dcfa07e76dffbf438774 (diff) | |
| download | xmobar-80be37611711871c6971588873687755103097c0.tar.gz xmobar-80be37611711871c6971588873687755103097c0.tar.bz2 | |
ArchUpdates
Diffstat (limited to 'src/Xmobar/Plugins')
| -rw-r--r-- | src/Xmobar/Plugins/ArchUpdates.hs | 47 | 
1 files changed, 47 insertions, 0 deletions
| diff --git a/src/Xmobar/Plugins/ArchUpdates.hs b/src/Xmobar/Plugins/ArchUpdates.hs new file mode 100644 index 0000000..a8cf3a9 --- /dev/null +++ b/src/Xmobar/Plugins/ArchUpdates.hs @@ -0,0 +1,47 @@ +{-# LANGUAGE CPP #-} + +----------------------------------------------------------------------------- +-- | +-- Module      :  Plugins.Monitors.ArchUpdates +-- Copyright   :  (c) 2024 Enrico Maria De Angelis +-- License     :  BSD-style (see LICENSE) +-- +-- Maintainer  :  Enrico Maria De Angelis <enricomaria.dean6elis@gmail.com> +-- Stability   :  unstable +-- Portability :  unportable +-- +-- An ArchLinux updates availablility plugin for Xmobar +-- +----------------------------------------------------------------------------- + +module Xmobar.Plugins.ArchUpdates (ArchUpdates(..)) where + +import System.Exit (ExitCode(..)) +import System.Process (readProcessWithExitCode) +import Xmobar.Run.Exec +import Xmobar.Plugins.Command (Rate) + +data ArchUpdates = ArchUpdates Rate +                 | ArchUpdates' (String, String, String) Rate +  deriving (Read, Show) + +instance Exec ArchUpdates where +    alias (ArchUpdates _) = "arch" +    alias (ArchUpdates' _ _) = "arch" +    rate (ArchUpdates r) = r +    rate (ArchUpdates' _ r) = r +    run (ArchUpdates r) = run (ArchUpdates' ("up to date", +                                             "1 update available", +                                             "? updates available") r) +    run (ArchUpdates' (z, o, m) _) = do +      (exit, stdout, _) <- readProcessWithExitCode "checkupdates" [] "" +      return $ case exit of +        ExitFailure 2 -> z--ero updates +        ExitFailure 1 -> "pacman: Unknown cause of failure." +        ExitSuccess -> case length $ lines stdout of +          0 -> impossible +          1 -> o +          n -> m >>= \c -> if c == '?' then show n else pure c +        _ -> impossible +        where +          impossible = error "This is impossible based on pacman manpage" | 
