{ stdenv, writeTextFile , ghcWithPackages , user ? "gkleen" , libnotify }: stdenv.mkDerivation { name = ''notify-${user}''; src = writeTextFile { name = ''notify-${user}.hs''; text = '' import System.FilePath.Glob (glob) import System.Environment (setEnv, getArgs) import System.Process (callProcess) import Data.List (isPrefixOf, dropWhileEnd) import Data.Char (isSpace) import Control.Monad (forM_) main = do envFiles <- glob "/home/${user}/.dbus/session-bus/*" forM_ envFiles $ \envFile -> do sessionAddr <- tail . snd . break (== '=') . head . filter ("DBUS_SESSION_BUS_ADDRESS=" `isPrefixOf`) . lines <$> readFile envFile setEnv "DBUS_SESSION_BUS_ADDRESS" sessionAddr callProcess "${libnotify}/bin/notify-send" =<< (++) <$> getArgs <*> (pure . concatMap escape . dropWhileEnd isSpace <$> getContents) where escape '\\' = "\\\\" escape x = pure x ''; }; phases = [ "buildPhase" "installPhase" ]; buildPhase = '' ${ghcWithPackages (p: with p; [ Glob process ])}/bin/ghc -odir . -hidir . $src -o notify-${user} ''; installPhase = '' mkdir -p $out/bin cp notify-${user} $out/bin chmod +x $out/bin/notify-${user} ''; }