nixos/xmonad: move to haskell-ng and make a wrapper

This commit is contained in:
Nikolay Amiantov
2015-02-03 01:05:23 +03:00
parent f8038b0c6c
commit b7bb524f04
6 changed files with 46 additions and 15 deletions

View File

@@ -409,6 +409,9 @@ self: super: {
# https://github.com/seagreen/hjsonschema/issues/4
hjsonschema = dontCheck super.hjsonschema;
# Nix-specific workaround
xmonad = appendPatch super.xmonad ./xmonad-nix.patch;
} // {
# Not on Hackage.

View File

@@ -0,0 +1,44 @@
--- xmonad-0.11/XMonad/Core.hs 2013-01-01 01:31:47.000000000 +0000
+++ new-xmonad/XMonad/Core.hs 2013-12-23 17:36:40.862146910 +0000
@@ -47,6 +47,7 @@
import System.Process
import System.Directory
import System.Exit
+import System.Environment (lookupEnv)
import Graphics.X11.Xlib
import Graphics.X11.Xlib.Extras (Event)
import Data.Typeable
@@ -452,6 +453,7 @@
err = base ++ ".errors"
src = base ++ ".hs"
lib = dir </> "lib"
+ ghc <- fromMaybe "ghc" <$> liftIO (lookupEnv "XMONAD_GHC")
libTs <- mapM getModTime . Prelude.filter isSource =<< allFiles lib
srcT <- getModTime src
binT <- getModTime bin
@@ -460,7 +462,7 @@
-- temporarily disable SIGCHLD ignoring:
uninstallSignalHandlers
status <- bracket (openFile err WriteMode) hClose $ \h ->
- waitForProcess =<< runProcess "ghc" ["--make", "xmonad.hs", "-i", "-ilib", "-fforce-recomp", "-v0", "-o",binn] (Just dir)
+ waitForProcess =<< runProcess ghc ["--make", "xmonad.hs", "-i", "-ilib", "-fforce-recomp", "-v0", "-o",binn] (Just dir)
Nothing Nothing Nothing (Just h)
-- re-enable SIGCHLD:
@@ -469,6 +471,7 @@
-- now, if it fails, run xmessage to let the user know:
when (status /= ExitSuccess) $ do
ghcErr <- readFile err
+ xmessage <- fromMaybe "xmessage" <$> liftIO (lookupEnv "XMONAD_XMESSAGE")
let msg = unlines $
["Error detected while loading xmonad configuration file: " ++ src]
++ lines (if null ghcErr then show status else ghcErr)
@@ -476,7 +479,7 @@
-- nb, the ordering of printing, then forking, is crucial due to
-- lazy evaluation
hPutStrLn stderr msg
- forkProcess $ executeFile "xmessage" True ["-default", "okay", msg] Nothing
+ forkProcess $ executeFile xmessage True ["-default", "okay", msg] Nothing
return ()
return (status == ExitSuccess)
else return True