#!/bin/bash

# firmware
extra_firmware(){
echo ""
echo "Adding firmware ..."
mkdir -p /lib/firmware/brcm
mkdir -p /lib/firmware/updates
git clone https://github.com/pyavitz/firmware.git /lib/firmware/updates/brcm
mv fw-0a5c_21e8.hcd /lib/firmware/brcm/BCM20702A0-0a5c-21e8.hcd
cp /lib/firmware/brcm/BCM20702A0-0a5c-21e8.hcd /lib/firmware/brcm/BCM20702A1-0a5c-21e8.hcd
chown root:root /lib/firmware/brcm/BCM20702A1-0a5c-21e8.hcd
chown root:root /lib/firmware/brcm/BCM20702A0-0a5c-21e8.hcd
install -Dm644 UPDATE.mem /lib/firmware/updates/renesas_usb_fw.mem
rm -f UPDATE.mem
ln -sr /lib/firmware /etc/firmware
# realtek firmware
if [[ `wget -S --spider https://kernel.googlesource.com/pub/scm/linux/kernel/git/firmware/linux-firmware.git/+archive/refs/heads/main/rtl_nic.tar.gz 2>&1 | grep 'HTTP/1.1 200 OK'` ]]; then
	mkdir -p /lib/firmware/updates/rtl_nic;
	cd /lib/firmware/updates/rtl_nic;
	wget -cq https://kernel.googlesource.com/pub/scm/linux/kernel/git/firmware/linux-firmware.git/+archive/refs/heads/main/rtl_nic.tar.gz
	if [ -f rtl_nic.tar.gz ]; then
		tar xf rtl_nic.tar.gz
		rm -f rtl_nic.tar.gz
	fi
fi
cd ~
git clone -q -b realtek https://github.com/pyavitz/firmware.git
if [[ -d "firmware" ]]; then
	cp -fr firmware/* /lib/firmware/updates/
	rm -fdr firmware
fi
}

# regulatory db
wireless_regdb(){
echo ""
echo "Adding wireless regulatory db ..."
git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/sforshee/wireless-regdb
sleep 1s
cd wireless-regdb
cp -f regulatory.db /lib/firmware/regulatory.db
cp -f regulatory.db.p7s /lib/firmware/regulatory.db.p7s
cd ~
rm -fdr wireless-regdb
if [ $NETWORKMANAGER -eq 1 ]; then
	echo 'KERNEL=="regulatory*", ACTION=="change", SUBSYSTEM=="platform", RUN+="/sbin/crda"' > /etc/udev/rules.d/60-regdb.rules
fi
}

eth_udev-rule(){
tee /etc/udev/rules.d/80-net-setup-link.rules <<EOF
# raspberry pi 3b eth interface
SUBSYSTEM!="net", GOTO="net_setup_link_end"

IMPORT{builtin}="path_id"

ACTION!="add", GOTO="net_setup_link_end"

# IMPORT{builtin}="net_setup_link"

NAME=="", ENV{ID_NET_NAME}!="", NAME="eth0"

LABEL="net_setup_link_end"
EOF
}

ifupdown-setup(){
rm -f /etc/network/interfaces
if [[ "$DISTRO" == "devuan" ]]; then if [[ "$BOARD" =~ ^(bcm2709|bcm2710)$ ]]; then eth_udev-rule; fi; fi
if [[ "$DISTRO" == "ubuntu" ]]; then
	if [[ "$DISTRO_VERSION" == "jammy" ]]; then
		# /etc/network/if-down.d/resolved: 12: mystatedir: not found
		# /etc/network/if-up.d/resolved: 12: mystatedir: not found
		if [[ -f "/etc/network/if-down.d/resolved" ]]; then
			sed -i 's/mystatedir statedir ifindex interface/#mystatedir statedir ifindex interface/g' /etc/network/if-down.d/resolved
			sed -i 's/return/exit 0/g' /etc/network/if-down.d/resolved
		fi
		if [[ -f "/etc/network/if-up.d/resolved" ]]; then
			sed -i 's/mystatedir statedir ifindex interface/#mystatedir statedir ifindex interface/g' /etc/network/if-up.d/resolved
			sed -i 's/return/exit 0/g' /etc/network/if-up.d/resolved
		fi
	fi
fi

# ifupdown interfaces and wpa_supplicant files
tee /etc/network/interfaces <<EOF
# Interfaces
source /etc/network/interfaces.d/*

# Loopback network interface
auto lo
iface lo inet loopback

# Ethernet
allow-hotplug eth0
iface eth0 inet dhcp
	#address 10.0.0.10
	#netmask 255.255.255.0
	#gateway 10.0.0.1
	#dns-nameservers 8.8.8.8 8.8.4.4

# Mobile tether
#allow-hotplug usb0
#iface usb0 inet dhcp

# Wireless
allow-hotplug wlan0
iface wlan0 inet dhcp
	wireless-power off
	#address 10.0.0.10
	#netmask 255.255.255.0
	#gateway 10.0.0.1
	#dns-nameservers 8.8.8.8 8.8.4.4
	wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
EOF

tee /etc/wpa_supplicant/wpa_supplicant.conf <<EOF
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US

network={
	ssid="mywifissid"
	scan_ssid=1
	key_mgmt=WPA-PSK
	psk="wifipasskey"
}
EOF
}

networkmanager-setup(){
rm -f /etc/network/interfaces
tee /etc/network/interfaces <<EOF
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback
EOF
echo "ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev" > /etc/wpa_supplicant/wpa_supplicant.conf
chown root:root /etc/network/interfaces
chown root:root /etc/wpa_supplicant/wpa_supplicant.conf
if [[ -f "/usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf" ]]; then
	rm -f /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf
fi
if [[ -f "/etc/NetworkManager/conf.d/default-wifi-powersave-on.conf" ]]; then
	sed -i 's/wifi.powersave = 3/wifi.powersave = 2/g' /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
else
	echo "[connection]" > /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
	echo "wifi.powersave = 2" >> /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
fi
if [[ "$DISTRO" == "devuan" ]]; then if [[ "$BOARD" =~ ^(bcm2709|bcm2710)$ ]]; then eth_udev-rule; fi; fi
}

ifupdown-credentials(){
if [[ -f "/root/ifupdown.credentials" ]]; then
	CURRENT_HOSTNAME=`cat /etc/hostname | sed -n '1p'`
	mv -f /root/ifupdown.credentials /usr/local/bin/credentials
	chmod +x /usr/local/bin/credentials
	chown root:root /usr/local/bin/credentials
	rm -f /root/networkmanager.credentials
	echo "# activate service" > /boot/broadcom/credentials.txt
	echo 'ENABLE="false"' >> /boot/broadcom/credentials.txt
	echo "" >> /boot/broadcom/credentials.txt
	echo "# input wifi credentials" >> /boot/broadcom/credentials.txt
	echo 'SSID=""' >> /boot/broadcom/credentials.txt
	echo 'PASSKEY=""' >> /boot/broadcom/credentials.txt
	echo 'COUNTRYCODE=""' >> /boot/broadcom/credentials.txt
	echo "# set static ip address" >> /boot/broadcom/credentials.txt
	echo 'MANUAL="false"' >> /boot/broadcom/credentials.txt
	echo 'IPADDR=""' >> /boot/broadcom/credentials.txt
	echo 'NETMASK=""' >> /boot/broadcom/credentials.txt
	echo 'GATEWAY=""' >> /boot/broadcom/credentials.txt
	echo 'NAMESERVERS=""' >> /boot/broadcom/credentials.txt
	echo "" >> /boot/broadcom/credentials.txt
	echo "# change hostname" >> /boot/broadcom/credentials.txt
	echo HOSTNAME='"'$CURRENT_HOSTNAME'"' >> /boot/broadcom/credentials.txt
fi
}

networkmanager-credentials(){
if [[ -f "/root/networkmanager.credentials" ]]; then
	CURRENT_HOSTNAME=`cat /etc/hostname | sed -n '1p'`
	mv -f /root/networkmanager.credentials /usr/local/bin/credentials
	chmod +x /usr/local/bin/credentials
	chown root:root /usr/local/bin/credentials
	rm -f /root/ifupdown.credentials
	echo "# activate service" > /boot/broadcom/credentials.txt
	echo 'ENABLE="false"' >> /boot/broadcom/credentials.txt
	echo "" >> /boot/broadcom/credentials.txt
	echo "# input wifi credentials" >> /boot/broadcom/credentials.txt
	echo 'SSID=""' >> /boot/broadcom/credentials.txt
	echo 'PASSKEY=""' >> /boot/broadcom/credentials.txt
	echo 'COUNTRYCODE=""' >> /boot/broadcom/credentials.txt
	echo "# set static ip address" >> /boot/broadcom/credentials.txt
	echo 'MANUAL="false"' >> /boot/broadcom/credentials.txt
	echo 'IPADDR=""' >> /boot/broadcom/credentials.txt
	echo 'GATEWAY=""' >> /boot/broadcom/credentials.txt
	echo 'DNS=""' >> /boot/broadcom/credentials.txt
	echo "" >> /boot/broadcom/credentials.txt
	echo "# change hostname" >> /boot/broadcom/credentials.txt
	echo HOSTNAME='"'$CURRENT_HOSTNAME'"' >> /boot/broadcom/credentials.txt
fi
}
