blob: fd86536fb9a8aabac8c474622d492f6ba8a866cb (
plain) (
blame)
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
#!/usr/bin/env bash
################################################################################
usage() {
cat <<EOF
Usage: run-in-xephyr.sh [options]
-d NxN Set the screen size to NxN
-h This message
-n NUM Set the internal DISPLAY to NUM
-s NUM Set the number of screens to NUM
EOF
}
################################################################################
ARCH=$(uname -m)
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
SCREENS=1
SCREEN_SIZE="800x600"
DISPLAY_NUMBER=5
################################################################################
while getopts "hs:" o; do
case "${o}" in
d)
SCREEN_SIZE=$OPTARG
;;
h)
usage
exit
;;
n)
DISPLAY_NUMBER=$OPTARG
;;
s)
SCREENS=$OPTARG
;;
*)
echo
usage
exit 1
;;
esac
done
shift $((OPTIND - 1))
################################################################################
if [ -d .stack-work ]; then
echo "stack build detected"
options=""
[ "${NIX_PATH:-NO}" = "NO" ] || options="--nix"
BIN_PATH=$(stack path $options --dist-dir)/build/xmonad-ng
elif [ -d dist-newstyle ]; then
echo "cabal build detected"
BIN_PATH=$(find dist-newstyle/ -type f -executable -name xmonad-ng -printf '%h')
else
echo "you need to build xmonad-ng first, see README for instructions"
exit 1
fi
RAW_BIN=$BIN_PATH/xmonad-ng
ARCH_BIN=$BIN_PATH/xmonad-$ARCH-$OS
################################################################################
cp -p "$RAW_BIN" "$ARCH_BIN"
################################################################################
XMONAD_CONFIG_DIR=$(pwd)/state/config
XMONAD_CACHE_DIR=$(pwd)/state/cache
XMONAD_DATA_DIR=$(pwd)/state/data
export XMONAD_CONFIG_DIR XMONAD_CACHE_DIR XMONAD_DATA_DIR
mkdir -p "$XMONAD_CONFIG_DIR" "$XMONAD_CACHE_DIR" "$XMONAD_DATA_DIR"
echo "xmonad will store state files in $(pwd)/state"
################################################################################
SCREEN_COUNTER=0
SCREEN_OPTS=""
X_OFFSET_CURRENT="0"
X_OFFSET_ADD=$(echo "$SCREEN_SIZE" | cut -dx -f1)
while expr "$SCREEN_COUNTER" "<" "$SCREENS"; do
SCREEN_OPTS="$SCREEN_OPTS -origin ${X_OFFSET_CURRENT},0 -screen ${SCREEN_SIZE}+${X_OFFSET_CURRENT}"
SCREEN_COUNTER=$(("$SCREEN_COUNTER" + 1))
X_OFFSET_CURRENT=$(("$X_OFFSET_CURRENT" + "$X_OFFSET_ADD"))
done
(
# shellcheck disable=SC2086
Xephyr $SCREEN_OPTS +xinerama +extension RANDR \
-ac -br -reset -terminate -verbosity 10 \
-softCursor ":$DISPLAY_NUMBER" &
export DISPLAY=":$DISPLAY_NUMBER"
echo "Waiting for windows to appear..." && sleep 2
$ARCH_BIN
)
|