-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathinstall.sh
More file actions
executable file
·167 lines (150 loc) · 4.68 KB
/
install.sh
File metadata and controls
executable file
·167 lines (150 loc) · 4.68 KB
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#!/bin/bash
set -e
# void, alpine, arch, and suse have packages
# need to build on fedora (without terra) and debian/ubuntu
ROOT=$(pwd)
# fancy color
printf "\033[94m"
if [ -f /usr/bin/apt ]; then
distro="deb"
elif [ -f /usr/bin/zypper ]; then
distro="suse"
elif [ -f /usr/bin/pacman ]; then
distro="arch"
elif [ -f /usr/bin/dnf4 ]; then
distro="fedora"
elif [ -f /sbin/apk ]; then
distro="alpine"
elif [ -f /bin/xbps-install ]; then
distro="void"
elif grep 'ID=nixos' /etc/os-release &>> pkg.log; then
echo "WARNING: This script will not install keyd on NixOS, but can install the configuration for you."
printf "Continue? (y/N) "
read -r NIXINSTALL
[[ $NIXINSTALL =~ ^[Yy]$ ]] || exit 1
distro="nixos"
fi
if which sudo &>/dev/null; then
privesc="sudo"
elif which doas &>/dev/null; then
privesc="doas"
elif which run0 &>/dev/null; then
privesc="run0"
fi
echo "Installing, this may take some time...."
# Fedora with the terra repo (Ultramarine) has keyd packaged
[ "$distro" = "fedora" ] && dnf4 info keyd -y&>> pkg.log && FEDORA_HAS_KEYD=1
if ! which keyd &>/dev/null && [ "$distro" != "nixos" ] ; then
build_keyd=1
# if keyd isnt installed
# Debian-based distros and Fedora don't have keyd in the repos, ask the user to compile it from source.
if [ "distro" = "fedora" ] && [ ! "$FEDORA_HAS_KEYD" = "1" ] || [ "$distro" = "deb" ]; then
echo "This script can compile keyd for you or you can choose to get it from another source."
printf "Compile keyd? (Y/n) "
read -r COMPKEYD
[[ $COMPKEYD =~ ^[Nn]$ ]] && build_keyd=0
fi
if [ "$build_keyd" = "1" ]; then
echo "Installing keyd dependencies"
case $distro in
deb)
$privesc apt install -y build-essential git &>> pkg.log
;;
fedora)
[ ! "$FEDORA_HAS_KEYD" = "1" ] && $privesc dnf4 install -y kernel-headers gcc make &>> pkg.log
;;
esac
fi
if ( [ "distro" = "fedora" ] && [ ! "$FEDORA_HAS_KEYD" = "1" ] || [ "$distro" = "deb" ] ) && [ "$build_keyd" = "1" ]; then
echo "Compiling keyd"
git clone https://github.com/rvaiya/keyd &>> pkg.log
cd keyd
make &>> pkg.log
$privesc make install
cd ..
else
echo "Installing keyd"
case $distro in
suse)
$privesc zypper --non-interactive install keyd &>> pkg.log
;;
arch)
$privesc pacman -S --noconfirm keyd &>> pkg.log
;;
alpine)
$privesc apk add --no-interactive keyd &>> pkg.log
;;
void)
$privesc xbps-install -S keyd -y &>> pkg.log
;;
fedora)
$privesc dnf4 install -y keyd &>> pkg.log
;;
esac
fi
fi
echo "Generating config"
# Handle any special cases
if (grep -E "^(Nocturne|Atlas|Eve)$" /sys/class/dmi/id/product_name &> /dev/null)
then
cp -f configs/cros-pixel.conf cros.conf
$privesc mkdir -p /etc/udev/hwdb.d/
$privesc cp -f configs/61-pixel-keyboard.hwdb /etc/udev/hwdb.d/
$privesc udevadm hwdb --update
$privesc udevadm trigger
elif (grep -E "^(Sarien|Arcada)$" /sys/class/dmi/id/product_name &> /dev/null)
then
cp -f configs/cros-sarien.conf cros.conf
else
printf "By default, the top row keys will do their special function (brightness, volume, browser control, etc).\n"
printf "Holding the search key will make the top row keys act like fn keys (f1, f2, f3, etc).\n"
printf "Would you like to invert this? (y/N) "
read -r INVERT
if [ "$distro" == "nixos" ] && ! which python3 &>/dev/null; then
[[ $INVERT =~ ^[Yy]$ ]] && nix-shell -p python3 --run "python3 cros-keyboard-map.py -i" ||
nix-shell -p python3 --run "python3 cros-keyboard-map.py"
else
[[ $INVERT =~ ^[Yy]$ ]] && python3 cros-keyboard-map.py -i || python3 cros-keyboard-map.py
fi
fi
echo "Installing config"
$privesc mkdir -p /etc/keyd
$privesc cp -f cros.conf /etc/keyd
echo "Enabling keyd"
case $distro in
alpine)
# Chimera uses apk like alpine but uses dinit instead of openrc
if [ -f /usr/bin/dinitctl ]; then
$privesc dinitctl start keyd
$privesc dinitctl enable keyd
else
$privesc rc-update add keyd
$privesc rc-service keyd restart
fi
;;
void)
if [ -f /usr/bin/sv ]; then
$privesc ln -s /etc/sv/keyd /var/service
$privesc sv enable keyd
$privesc sv start keyd
else
echo "This script can only be used for Void Linux using 'runit' init system. Other init system on Void Linux are currently unsupported."
echo "I'M OUTTA HERE!"
exit 1
fi
;;
*)
$privesc systemctl enable keyd
$privesc systemctl restart keyd
;;
esac
echo "Installing libinput configuration"
$privesc mkdir -p /etc/libinput
if [ -f /etc/libinput/local-overrides.quirks ]; then
cat $ROOT/local-overrides.quirks | $privesc tee -a /etc/libinput/local-overrides.quirks > /dev/null
else
$privesc cp -f $ROOT/local-overrides.quirks /etc/libinput/local-overrides.quirks
fi
echo "Done"
# reset color
printf "\033[0m"