summaryrefslogtreecommitdiffstats
path: root/lass/5pkgs/xephyrify/default.nix
blob: f1711891cd838a0a98fe24bbbfc1be98e4d00e16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
{ writeDashBin, writeHaskell, coreutils, xorg, virtualgl, ... }:

let

  xephyrify-xmonad = writeHaskell "xephyrify-xmonad" {
    executables.xmonad = {
      extra-depends = [
        "containers"
        "unix"
        "xmonad"
      ];
      text = /* haskell */ ''
        module Main where
        import XMonad
        import Data.Monoid
        import System.Posix.Process (executeFile)
        import qualified Data.Map as Map

        main :: IO ()
        main = do
          xmonad def
            { workspaces = [ "1" ]
            , layoutHook = myLayoutHook
            , keys = myKeys
            , normalBorderColor  = "#000000"
            , focusedBorderColor = "#000000"
            , handleEventHook = myEventHook
            }

        myEventHook :: Event -> X All

        myEventHook (ConfigureEvent { ev_event_type = 22 }) = do
          spawn "${xorg.xrandr}/bin/xrandr >/dev/null 2>&1"
          return (All True)

        myEventHook _ = do
          return (All True)

        myLayoutHook = Full
        myKeys _ = Map.fromList []
      '';
    };
  };

in writeDashBin "xephyrify" ''
  NDISPLAY=:$(${coreutils}/bin/shuf -i 100-65536 -n 1)
  echo "using DISPLAY $NDISPLAY"
  ${xorg.xorgserver}/bin/Xephyr -br -ac -reset -terminate -resizeable $NDISPLAY &
  XEPHYR_PID=$!
  DISPLAY=$NDISPLAY ${minimalXmonad}/bin/xmonad &
  XMONAD_PID=$!
  DISPLAY=$NDISPLAY ${virtualgl}/bin/vglrun "$@"
  kill $XMONAD_PID
  kill $XEPHYR_PID
''