diff options
Diffstat (limited to 'lass/5pkgs/xephyrify/default.nix')
-rw-r--r-- | lass/5pkgs/xephyrify/default.nix | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/lass/5pkgs/xephyrify/default.nix b/lass/5pkgs/xephyrify/default.nix new file mode 100644 index 000000000..8d6036843 --- /dev/null +++ b/lass/5pkgs/xephyrify/default.nix @@ -0,0 +1,62 @@ +{ 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 +'' |