{ compiler ? "default" }: let inherit (import ~/sync/src/hrm) lib mylib; krops.lib = import ~/sync/src/krops/lib; hrm = import ~/sync/src/hrm/legacy.nix {}; hostName = krops.lib.maybeHostName (builtins.throw "no hostname found"); inherit (hrm.nixosConfigurations.${hostName}) config pkgs; haskellPackages = if compiler == "default" then pkgs.haskellPackages else pkgs.haskell.packages.${compiler}; xmonadDrv = haskellPackages.callPackage (import ./.) {}; in lib.overrideDerivation xmonadDrv.env (oldAttrs: { shellHook = '' display=$(echo "$DISPLAY" | sed -rn 's/^:([0-9]+)(\.[0-9]+)?$/\1/p') if test -z "$display"; then echo "Error: unsupported display name “$DISPLAY”" >&2 exit -1 fi pkg_name=${mylib.shell.escape (builtins.baseNameOf (toString ./.))} WORKDIR=${toString ./src} CACHEDIR=$HOME/tmp/$pkg_name HISTFILE=$CACHEDIR/bash_history mkdir -p "$CACHEDIR" service=xmonad@$display.service xmonad=$CACHEDIR/xmonad-${builtins.currentSystem} service_XMONAD_CACHE_DIR=$( systemctl show "$service" --property=Environment | tr \ \\n | sed -rn 's/^XMONAD_CACHE_DIR=//p' ) xmonad_build() {( set -efu cd "$WORKDIR" options=$( ${pkgs.cabal-read}/bin/ghc-options "$WORKDIR/$pkg_name.cabal" xmonad ) ghc $options \ -odir "$CACHEDIR" \ -hidir "$CACHEDIR" \ -o "$xmonad" \ main.hs )} xmonad_restart() {( set -efu cd "$WORKDIR" if systemctl --quiet is-active "$service"; then systemctl stop "$service" cp -b "$service_XMONAD_CACHE_DIR"/xmonad.state "$CACHEDIR"/ echo "xmonad.state: $(cat "$CACHEDIR"/xmonad.state)" else "$xmonad" --shutdown || : fi "$xmonad" & echo xmonad pid: $! >&2 )} xmonad_yield() {( set -efu if ! systemctl --quiet is-active "$service"; then "$xmonad" --shutdown cp -b "$CACHEDIR"/xmonad.state "$service_XMONAD_CACHE_DIR"/ systemctl start "$service" else echo "$service is already running" >&2 exit -1 fi )} export PATH=${lib.makeBinPath (config.systemd.services."xmonad@".path)}:$PATH export SHELL=/run/current-system/sw/bin/bash export XMONAD_CACHE_DIR="$CACHEDIR" export XMONAD_DATA_DIR="$CACHEDIR" export XMONAD_CONFIG_DIR=/var/empty unset XMONAD_STARTUP_HOOK cd "$WORKDIR" ''; })