63 lines
1.7 KiB
Nix
63 lines
1.7 KiB
Nix
{ 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=''${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
|
|
''
|