summaryrefslogtreecommitdiffhomepage
path: root/src/Xmobar
diff options
context:
space:
mode:
authorEnrico Maria De Angelis <enricomaria.dean6elis@gmail.com>2024-04-17 18:25:45 +0100
committerEnrico Maria De Angelis <enricomaria.dean6elis@gmail.com>2024-05-18 15:19:42 +0100
commit80be37611711871c6971588873687755103097c0 (patch)
tree97eee3f3a26c59bb235124518440b74caec4c82e /src/Xmobar
parent1e8175d38a9f6048e638dcfa07e76dffbf438774 (diff)
downloadxmobar-80be37611711871c6971588873687755103097c0.tar.gz
xmobar-80be37611711871c6971588873687755103097c0.tar.bz2
ArchUpdates
Diffstat (limited to 'src/Xmobar')
-rw-r--r--src/Xmobar/Plugins/ArchUpdates.hs47
-rw-r--r--src/Xmobar/Run/Types.hs2
2 files changed, 49 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"
diff --git a/src/Xmobar/Run/Types.hs b/src/Xmobar/Run/Types.hs
index 69406bb..bb573c8 100644
--- a/src/Xmobar/Run/Types.hs
+++ b/src/Xmobar/Run/Types.hs
@@ -19,6 +19,7 @@
module Xmobar.Run.Types(runnableTypes) where
import {-# SOURCE #-} Xmobar.Run.Runnable()
+import Xmobar.Plugins.ArchUpdates
import Xmobar.Plugins.Command
import Xmobar.Plugins.Monitors
import Xmobar.Plugins.Date
@@ -59,6 +60,7 @@ infixr :*:
runnableTypes :: Command :*: Monitors :*: Date :*: PipeReader :*:
BufferedPipeReader :*: CommandReader :*: StdinReader :*:
XMonadLog :*: EWMH :*: Kbd :*: Locks :*: NotmuchMail :*:
+ ArchUpdates :*:
#ifdef INOTIFY
Mail :*: MBox :*:
#endif