summaryrefslogtreecommitdiffstats
path: root/lass/5pkgs/xephyrify/default.nix
blob: 20c546dbb333147f3f9a6ac3e9ae629398c36931 (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
56
57
58
59
60
61
62
{ writeDashBin, writeHaskellPackage, coreutils, xorg, virtualgl, ... }:

let

  xephyrify-xmonad = writeHaskellPackage "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=''${NDISPLAY:-$(${coreutils}/bin/shuf -i 100-65536 -n 1)}
  echo "using DISPLAY $NDISPLAY"
  ${xorg.xorgserver}/bin/Xephyr -br -ac -reset -terminate -resizeable -dpi 60 -nolisten local :$NDISPLAY &
  if test -n $DROP_TO_USER; then
    sleep 1
    ls /tmp/.X11-unix/
    id
    ${coreutils}/bin/chgrp "$DROP_TO_USER" "/tmp/.X11-unix/X$NDISPLAY"
    ${coreutils}/bin/chmod 770 "/tmp/.X11-unix/X$NDISPLAY"
  fi
  XEPHYR_PID=$!
  DISPLAY=:$NDISPLAY ${xephyrify-xmonad}/bin/xmonad &
  XMONAD_PID=$!
  DISPLAY=:$NDISPLAY ${virtualgl}/bin/vglrun "$@"
  kill $XMONAD_PID
  kill $XEPHYR_PID
''