summaryrefslogtreecommitdiff
path: root/custom/notify-user.nix
diff options
context:
space:
mode:
Diffstat (limited to 'custom/notify-user.nix')
-rw-r--r--custom/notify-user.nix69
1 files changed, 0 insertions, 69 deletions
diff --git a/custom/notify-user.nix b/custom/notify-user.nix
deleted file mode 100644
index e9e98ddc..00000000
--- a/custom/notify-user.nix
+++ /dev/null
@@ -1,69 +0,0 @@
1{ stdenv, writeTextFile
2, ghcWithPackages
3, user ? "gkleen"
4# , libnotify
5}:
6
7stdenv.mkDerivation {
8 name = ''notify-${user}'';
9 src = writeTextFile { name = ''notify-${user}.hs''; text = ''
10 {-# LANGUAGE ViewPatterns, StandaloneDeriving #-}
11
12 import System.FilePath.Glob (glob)
13 import System.Environment (setEnv, getArgs)
14 import System.Process (spawnProcess, waitForProcess)
15 import System.Exit (exitWith, ExitCode(..))
16
17 import Data.List (isPrefixOf, dropWhile, dropWhileEnd, init)
18 import Data.Char (isSpace, toLower, toUpper)
19
20 import Control.Monad (forM_, void)
21
22 import qualified Libnotify as Notify
23 import Data.Monoid
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
32 deriving instance Read Notify.Urgency
33
34 main = do
35 envFiles <- glob "/home/${user}/.dbus/session-bus/*"
36 forM_ envFiles $ \envFile -> do
37 sessionAddr <- unQuote . tail . snd . break (== '=') . head . filter ("DBUS_SESSION_BUS_ADDRESS=" `isPrefixOf`) . lines <$> readFile envFile
38 setEnv "DBUS_SESSION_BUS_ADDRESS" sessionAddr
39 lines <- lines <$> getContents
40 case lines of
41 ((trim -> summary):(trim . unlines -> contents)) -> do
42 (opts, _) <- flip getUsingConf [] [ (arg, "urgency", Optional, "")
43 , (arg, "app-name", Optional, "")
44 , (arg, "category", Optional, "")
45 ]
46 let
47 urgency = fromMaybe Notify.Normal $ readMaybe . caseForRead =<< Map.lookup "urgency" opts
48 appName = fromMaybe "notify-${user}" $ Map.lookup "app-name" opts
49 category = fromMaybe "" $ Map.lookup "category" opts
50 Notify.display_ $ Notify.summary summary <> Notify.body contents <> Notify.appName appName <> Notify.urgency urgency <> Notify.category category
51 _ -> exitWith $ ExitFailure 2
52 where
53 trim = dropWhileEnd isSpace . dropWhile isSpace
54 unQuote ('\''':xs) = init xs
55 unQuote ('"':xs) = init xs
56 unQuote xs = xs
57 caseForRead [] = []
58 caseForRead (x:xs) = toUpper x : map toLower xs
59 ''; };
60 phases = [ "buildPhase" "installPhase" ];
61 buildPhase = ''
62 ${ghcWithPackages (p: with p; [ Glob process libnotify getopt-simple containers ])}/bin/ghc -odir . -hidir . $src -o notify-${user}
63 '';
64 installPhase = ''
65 mkdir -p $out/bin
66 cp notify-${user} $out/bin
67 chmod +x $out/bin/notify-${user}
68 '';
69}