2026-08-08 14:31:15 -04:00
#!/bin/bash
# Run this as root to install system-level config from dotfiles.
# Usage: sudo ./install-system.sh
set -e
DOTFILES = " $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd ) "
if [ " $EUID " -ne 0 ] ; then
echo "please run as root"
exit 1
fi
backup_and_link( ) {
local src = " $1 "
local dst = " $2 "
mkdir -p " $( dirname " $dst " ) "
if [ -L " $dst " ] ; then
echo " already a symlink, skipping: $dst "
return
fi
if [ -e " $dst " ] ; then
echo " backing up: $dst -> $dst .bak "
mv " $dst " " $dst .bak "
fi
echo " linking: $dst -> $src "
ln -s " $src " " $dst "
}
# Touchpad palm detection
backup_and_link " $DOTFILES /config/xorg.conf.d/70-touchpad.conf " "/etc/X11/xorg.conf.d/70-touchpad.conf"
# Kanata key remapper
backup_and_link " $DOTFILES /config/kanata/rc.kanata " "/etc/rc.d/rc.kanata"
chmod +x /etc/rc.d/rc.kanata
2026-08-09 14:31:49 -04:00
# Tailscale daemon
backup_and_link " $DOTFILES /config/tailscale/rc.tailscale " "/etc/rc.d/rc.tailscale"
chmod +x /etc/rc.d/rc.tailscale
mkdir -p /var/lib/tailscale
mkdir -p /var/run/tailscale
# autofs config
backup_and_link " $DOTFILES /config/autofs/auto.master " "/etc/auto.master"
backup_and_link " $DOTFILES /config/autofs/auto.mnt " "/etc/auto.mnt"
# MPD rc script
chmod +x /etc/rc.d/rc.autofs
backup_and_link " $DOTFILES /config/mpd/rc.mpd " "/etc/rc.d/rc.mpd"
chmod +x /etc/rc.d/rc.mpd
2026-08-09 14:59:47 -04:00
backup_and_link " $DOTFILES /config/syncthing/rc.syncthing " "/etc/rc.d/rc.syncthing"
chmod +x /etc/rc.d/rc.syncthing
2026-08-09 14:31:49 -04:00
mkdir -p /mnt
2026-08-08 14:31:15 -04:00
# NetworkManager wifi power saving fix
backup_and_link " $DOTFILES /config/NetworkManager/wifi-powersave-off.conf " "/etc/NetworkManager/conf.d/wifi-powersave-off.conf"
if ! grep -q "rc.kanata" /etc/rc.d/rc.local; then
echo "" >> /etc/rc.d/rc.local
echo "# Start kanata key remapper" >> /etc/rc.d/rc.local
echo "if [ -x /etc/rc.d/rc.kanata ]; then" >> /etc/rc.d/rc.local
echo " /etc/rc.d/rc.kanata start" >> /etc/rc.d/rc.local
echo "fi" >> /etc/rc.d/rc.local
echo "added kanata to rc.local"
else
echo "rc.local already has kanata entry, skipping"
fi
2026-08-09 14:31:49 -04:00
# Add boot output logging if not present
if ! grep -q "tee /var/log/rc.local.log" /etc/rc.d/rc.local; then
# Insert logging line after the shebang/header
sed -i '/^#.*Local system/a\\n# Log all boot output to file while still showing on console\nexec > >(tee /var/log/rc.local.log) 2>&1' /etc/rc.d/rc.local
echo "added boot logging to rc.local"
else
echo "rc.local already has boot logging, skipping"
fi
# Add tailscale, autofs, mpd to rc.local if not present
if ! grep -q "rc.tailscale" /etc/rc.d/rc.local; then
cat >> /etc/rc.d/rc.local << 'RCEOF'
# Start tailscale daemon
if [ -x /etc/rc.d/rc.tailscale ] ; then
/etc/rc.d/rc.tailscale start
fi
# Start autofs (handles NFS mounts on demand)
if [ -x /etc/rc.d/rc.autofs ] ; then
/etc/rc.d/rc.autofs start
fi
# Start MPD (autofs will mount /mnt/media on first access)
if [ -x /etc/rc.d/rc.mpd ] ; then
/etc/rc.d/rc.mpd start
fi
2026-08-09 14:59:47 -04:00
# Start syncthing
if [ -x /etc/rc.d/rc.syncthing ] ; then
/etc/rc.d/rc.syncthing start
fi
2026-08-09 14:31:49 -04:00
RCEOF
echo "added tailscale/autofs/mpd to rc.local"
else
echo "rc.local already has tailscale entry, skipping"
fi
2026-08-08 14:31:15 -04:00
echo ""
echo "done. reboot or restart X for xorg changes to take effect."