summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregor Kleen <pngwjpgh@users.noreply.github.com>2016-10-02 16:52:58 +0200
committerGregor Kleen <pngwjpgh@users.noreply.github.com>2016-10-02 16:52:58 +0200
commit6bee5a3331cf7fadab2aa30b6fbe43dd9ef7be24 (patch)
tree49d8b0c56e6a9471b7d355dc58cb251aba0a5f08
parent48d0530fdff0e753f0dbce5b1da68aacc72cf0b8 (diff)
downloadnixos-6bee5a3331cf7fadab2aa30b6fbe43dd9ef7be24.tar
nixos-6bee5a3331cf7fadab2aa30b6fbe43dd9ef7be24.tar.gz
nixos-6bee5a3331cf7fadab2aa30b6fbe43dd9ef7be24.tar.bz2
nixos-6bee5a3331cf7fadab2aa30b6fbe43dd9ef7be24.tar.xz
nixos-6bee5a3331cf7fadab2aa30b6fbe43dd9ef7be24.zip
options!
-rw-r--r--custom/notify-user.nix25
1 files changed, 21 insertions, 4 deletions
diff --git a/custom/notify-user.nix b/custom/notify-user.nix
index 17123e47..c2ad3472 100644
--- a/custom/notify-user.nix
+++ b/custom/notify-user.nix
@@ -15,13 +15,20 @@ stdenv.mkDerivation {
15 import System.Exit (exitWith, ExitCode(..)) 15 import System.Exit (exitWith, ExitCode(..))
16 16
17 import Data.List (isPrefixOf, dropWhile, dropWhileEnd, init) 17 import Data.List (isPrefixOf, dropWhile, dropWhileEnd, init)
18 import Data.Char (isSpace) 18 import Data.Char (isSpace, toLower, toUpper)
19 19
20 import Control.Monad (forM_, void) 20 import Control.Monad (forM_, void)
21 21
22 import qualified Libnotify as Notify 22 import qualified Libnotify as Notify
23 import Data.Monoid 23 import Data.Monoid
24 24
25 import System.Console.GetOpt.Simple
26
27 import qualified Data.Map as Map
28
29 import Data.Maybe
30 import Text.Read (readMaybe)
31
25 main = do 32 main = do
26 envFiles <- glob "/home/${user}/.dbus/session-bus/*" 33 envFiles <- glob "/home/${user}/.dbus/session-bus/*"
27 forM_ envFiles $ \envFile -> do 34 forM_ envFiles $ \envFile -> do
@@ -29,18 +36,28 @@ stdenv.mkDerivation {
29 setEnv "DBUS_SESSION_BUS_ADDRESS" sessionAddr 36 setEnv "DBUS_SESSION_BUS_ADDRESS" sessionAddr
30 lines <- lines <$> getContents 37 lines <- lines <$> getContents
31 case lines of 38 case lines of
32 ((trim -> app):(trim -> summary):(trim . unlines -> contents)) -> do 39 ((trim -> summary):(trim . unlines -> contents)) -> do
33 Notify.display_ $ Notify.appName app <> Notify.summary summary <> Notify.body contents 40 (opts, _) <- flip getUsingConf [] [ (arg, "urgency", Optional, "")
41 , (arg, "app-name", Optional, "")
42 , (arg, "category", Optional, "")
43 ]
44 let
45 urgency = fromMaybe Notify.Normal $ readMaybe . caseForRead =<< Map.lookup "urgency" opts
46 appName = fromMaybe "notify-${user}" $ Map.lookup "app-name" opts
47 category = fromMaybe "" $ Map.lookup "category" opts
48 Notify.display_ $ Notify.summary summary <> Notify.body contents <> Notify.appName appName <> Notify.urgency urgency <> Notify.category category
34 _ -> exitWith $ ExitFailure 2 49 _ -> exitWith $ ExitFailure 2
35 where 50 where
36 trim = dropWhileEnd isSpace . dropWhile isSpace 51 trim = dropWhileEnd isSpace . dropWhile isSpace
37 unQuote ('\''':xs) = init xs 52 unQuote ('\''':xs) = init xs
38 unQuote ('"':xs) = init xs 53 unQuote ('"':xs) = init xs
39 unQuote xs = xs 54 unQuote xs = xs
55 caseForRead [] = []
56 caseForRead (x:xs) = toUpper x : map toLower xs
40 ''; }; 57 ''; };
41 phases = [ "buildPhase" "installPhase" ]; 58 phases = [ "buildPhase" "installPhase" ];
42 buildPhase = '' 59 buildPhase = ''
43 ${ghcWithPackages (p: with p; [ Glob process libnotify ])}/bin/ghc -odir . -hidir . $src -o notify-${user} 60 ${ghcWithPackages (p: with p; [ Glob process libnotify getopt-simple containers ])}/bin/ghc -odir . -hidir . $src -o notify-${user}
44 ''; 61 '';
45 installPhase = '' 62 installPhase = ''
46 mkdir -p $out/bin 63 mkdir -p $out/bin