215 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			215 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| . /first-boot.env
 | |
| 
 | |
| function run(){
 | |
|     if [ "$1" = "root" ]
 | |
|     then
 | |
|         prefix=""
 | |
|     else
 | |
|         prefix="sudo -u $1"
 | |
|     fi
 | |
|     echo "[    ] $1: $2"
 | |
|     echo "# $2" >>"$LOG_FILE"
 | |
|     echo "$1> $3" >>"$LOG_FILE"
 | |
|     bash -c "$prefix $3" &>>"$LOG_FILE" \
 | |
|         && echo -e "[ \e[32mOK\e[0m ] $1: $2" \
 | |
|         || { 
 | |
|             echo -e "[\e[31mFAIL\e[0m] $1: $2"
 | |
|             bash -c "$4"
 | |
|             exit
 | |
|         }
 | |
|     echo >>"$LOG_FILE"
 | |
| }
 | |
| 
 | |
| run root        "disable first boot service"  "systemctl disable first_boot.service"
 | |
| 
 | |
| echo
 | |
| echo === install tools
 | |
| echo
 | |
| 
 | |
| run root        "enable NetworkMaanger"       "systemctl enable NetworkManager.service"
 | |
| run root        "start NetworkMaanger"        "systemctl start NetworkManager.service"
 | |
| run root        "wait for network"            "while [[ 1 ]] ; do ping -c1 1.1.1.1 && break ; done"
 | |
| run root        "install base tools"          "pacman -Sy --noconfirm \
 | |
|    usbutils dosfstools exfat-utils net-tools bind nmap libfido2 \
 | |
|    base-devel vim curl ncdu neofetch btop git flatpak screen"
 | |
| run root        "install dev tools"           "pacman -S --noconfirm \
 | |
|     ansible python3 gcc make cmake nodejs npm clang \
 | |
|     arm-none-eabi-gcc arm-none-eabi-newlib"
 | |
| run root        "install gnome"               "pacman -S --noconfirm gnome"
 | |
| run root        "enable gnome"                "systemctl enable gdm.service"
 | |
| run root        "install distrobox"           "pacman -S --noconfirm docker distrobox"
 | |
| run root        "add $USERNAME to docker group" "usermod -aG docker $USERNAME"
 | |
| HOME_IP="$(dig +short home.freenen.nl)"
 | |
| run root        "update hosts file"           "cat >>/etc/hosts <<EOF
 | |
| 
 | |
| ${HOME_IP}    myadmin.cool.freenen.nl
 | |
| ${HOME_IP}    grafana.cool.freenen.nl
 | |
| ${HOME_IP}     zigbee.cool.freenen.nl
 | |
| ${HOME_IP}    nodered.cool.freenen.nl
 | |
| EOF
 | |
| "
 | |
| 
 | |
| run "$USERNAME" "create home dirs"            "mkdir -p \
 | |
|     /home/$USERNAME/.local/python-env \
 | |
|     /home/$USERNAME/.ssh \
 | |
|     /home/$USERNAME/projects \
 | |
|     /home/$USERNAME/.local/share/flatpak/overrides/"
 | |
| # run ubuntu "create python env"           "python3 -m venv /home/$USERNAME/.local/python-env"
 | |
| run "$USERNAME" "copy ssh config"             "cp $CONFIG_DIR/sshConfig /home/$USERNAME/.ssh/config"
 | |
| run "$USERNAME" "copy git config"             "cp $CONFIG_DIR/gitconfig /home/$USERNAME/.gitconfig"
 | |
| run "$USERNAME" "copy vim config"             "cp $CONFIG_DIR/vimrc /home/$USERNAME/.vimrc"
 | |
| run "$USERNAME" "copy vim config"             "cp $CONFIG_DIR/auto_clone.sh /home/$USERNAME/projects/auto_clone.sh"
 | |
| run root        "update polkit"               "sed --in-place -e 's/wheel/admin/g' /usr/share/polkit-1/rules.d/50-default.rules"
 | |
| run root        "update fail lock"            "sed --in-place -e 's/^deny = .*$/deny = 10/' -e 's/^unlock_time = .*$/unlock_time = 60/' /etc/security/faillock.conf"
 | |
| 
 | |
| echo
 | |
| echo === setup blutooth
 | |
| echo
 | |
| 
 | |
| run root      "install bluez"               "pacman -S --noconfirm bluez bluez-tools"
 | |
| run root      "enable bluez"                "systemctl enable bluetooth"
 | |
| 
 | |
| # echo 
 | |
| # echo === create distrobox for ubuntu
 | |
| # echo
 | |
| 
 | |
| # run root        "setup distrobox ubuntu"      "distrobox create --image ubuntu:latest --name ubuntu"
 | |
| # run root        "install sudo for ubuntu box" "docker exec ubuntu apt install sudo"
 | |
| # run root        "setup sudo for ubuntu box"   "usermod -aG sudo $USERNAME"
 | |
| # run ubuntu      "apt udpate"                  "sudo apt update"
 | |
| 
 | |
| echo
 | |
| echo === install flatpaks
 | |
| echo
 | |
| 
 | |
| function install_flatpak() {
 | |
|     run root  "install $1"  "flatpak install -y $1"
 | |
| }
 | |
| 
 | |
| run root        "copy flatpak overrides"      "cp $CONFIG_DIR/flatpak/* /home/$USERNAME/.local/share/flatpak/overrides/"
 | |
| install_flatpak org.mozilla.firefox
 | |
| install_flatpak dev.qwery.AddWater
 | |
| install_flatpak md.obsidian.Obsidian
 | |
| install_flatpak org.mozilla.Thunderbird
 | |
| install_flatpak com.discordapp.Discord
 | |
| install_flatpak com.github.tchx84.Flatseal
 | |
| install_flatpak com.yubico.yubioath
 | |
| install_flatpak org.filezillaproject.Filezilla
 | |
| # install_flatpak org.gnome.moserial
 | |
| install_flatpak com.gitlab.cutecom.cutecom
 | |
| install_flatpak org.raspberrypi.rpi-imager
 | |
| # install_flatpak org.sdrangel.SDRangel
 | |
| install_flatpak fr.handbrake.ghb
 | |
| install_flatpak org.inkscape.Inkscape
 | |
| install_flatpak org.gnome.Rhythmbox3
 | |
| install_flatpak com.prusa3d.PrusaSlicer
 | |
| install_flatpak org.freecadweb.FreeCAD #TODO: install nightly instad
 | |
| install_flatpak org.kicad.KiCad
 | |
| install_flatpak org.openscad.OpenSCAD
 | |
| install_flatpak org.videolan.VLC
 | |
| 
 | |
| echo
 | |
| echo === install vscodium
 | |
| echo
 | |
| 
 | |
| run root        "vscodium: install libxss"    "pacman -S --noconfirm libxss"
 | |
| run "$USERNAME" "vscodium: clone from AUR"    "git clone https://aur.archlinux.org/vscodium-bin.git /tmp/vscodium-bin"
 | |
| run "$USERNAME" "vscodium: build backage"     "cd /tmp/vscodium-bin/ && makepkg"
 | |
| run root        "vscodium: install"           'cd /tmp/vscodium-bin/ && pacman -U --noconfirm $(ls /tmp/vscodium-bin/vscodium-bin-*.pkg.tar.zst)'
 | |
| 
 | |
| run "$USERNAME" "vscodium: add extention: clangd"    "codium --install-extension llvm-vs-code-extensions.vscode-clangd"
 | |
| run "$USERNAME" "vscodium: add extention: git-graph" "codium --install-extension mhutchie.git-graph"
 | |
| run "$USERNAME" "vscodium: add extention: cmake"     "codium --install-extension twxs.cmake"
 | |
| # run root        "install theros deps"         "/home/$USERNAME/.local/python-env/bin/python3 -m pip teroshdl"
 | |
| # run root        "vscodium: add theros"        "codium --install-extension teros-technology.teroshdl"
 | |
| 
 | |
| echo
 | |
| echo === install rustup
 | |
| echo
 | |
| 
 | |
| run "$USERNAME" "set install dirs"            "cat >>/home/$USERNAME/.bashrc <EOF
 | |
| 
 | |
| # rust
 | |
| export RUSTUP_HOME=\"/home/$USERNAME/.local/rust/rustup\"
 | |
| export CARGO_HOME=\"/home/$USERNAME/.local/rust/cargo\"
 | |
| EOF"
 | |
| run "$USERNAME" "download install script"     "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs >/tmp/rustup.sh"
 | |
| run "$USERNAME" "run install script"          "bash /tmp/rustup.sh -y"
 | |
| run "$USERNAME" "set envierment vars"         "cat >>/home/$USERNAME/.bashrc <EOF
 | |
| . /home/$USERNAME/.local/rust/cargo
 | |
| EOF"
 | |
| 
 | |
| echo
 | |
| echo === install esp-idf
 | |
| echo
 | |
| 
 | |
| run root        "install esp-idf deps"        "pacman -S --noconfirm flex bison gperf ninja ccache libffi dfu-util libusb"
 | |
| run "$USERNAME" "create folder for esp-idf"   "mkdir /home/$USERNAME/.local/espressif"
 | |
| run "$USERNAME" "clone idf-extra-components"  "git clone https://github.com/espressif/esp-idf.git /home/$USERNAME/.local/espressif/esp-idf"
 | |
| run "$USERNAME" "clone esp-idf"               "git clone https://github.com/espressif/idf-extra-components.git /home/$USERNAME/.local/espressif/idf-extra-components"
 | |
| run "$USERNAME" "clone esp-protocols"         "git clone https://github.com/espressif/esp-protocols.git /home/$USERNAME/.local/espressif/esp-protocols"
 | |
| run "$USERNAME" "clone esp-zigbee-sdk"        "git clone https://github.com/espressif/esp-zigbee-sdk.git /home/$USERNAME/.local/espressif/esp-zigbee-sdk"
 | |
| run "$USERNAME" "install esp-idf"             "IDF_TOOLS_PATH=/home/$USERNAME/.local/espressif /home/$USERNAME/.local/espressif/esp-idf/install.sh all"
 | |
| 
 | |
| echo
 | |
| echo === install other software
 | |
| echo
 | |
| 
 | |
| run root        "install pulseview"           "pacman -S --noconfirm pulseview sigrok-firmware-fx2lafw"
 | |
| run root        "install texlive"             "pacman -S --noconfirm texlive"
 | |
| run root        "install deps for quartus"    "pacman -S --noconfirm libfibo2 libpng12"
 | |
| run "$USERNAME" "add ssh-agent to bashrc"     "echo >>/home/$USERNAME/.bashrc <<EOF
 | |
| 
 | |
| # start ssh-agent
 | |
| if [[ ! -f \"\$HOME/.ssh/agent.env\" ]]
 | |
| then
 | |
|     ssh-agent >\"\$HOME/.ssh/agent.env\"
 | |
| fi
 | |
| . \"\$HOME/.ssh/agent.env\" >/dev/null
 | |
| ps -p \$SSH_AGENT_PID >/dev/null || ssh-agent >\"\$HOME/.ssh/agent.env\"
 | |
| . \"\$HOME/.ssh/agent.env\"
 | |
| export SSH_AGENT_PID;
 | |
| export SSH_AUTH_SOCK;
 | |
| EOF"
 | |
| 
 | |
| if [[ $HOSTNAME == "elfDesktop" ]]
 | |
| then
 | |
| 
 | |
| run root        "install amd-ucode"          "pacman -S --noconfirm amd-ucode"
 | |
| 
 | |
| echo
 | |
| echo === install Jellyfin Server
 | |
| echo
 | |
| 
 | |
| run root        "install Jellifin-server"     "pacman -S --noconfirm jellifin-server jellifin-web"
 | |
| run root        "add media disk to fstab"     "cat >>/etc/fstab <<EOF
 | |
| 
 | |
| # data disk
 | |
| UUID=6ef4ad46-163f-435f-8522-3bacaeee39a8  /mnt/media   auto  subvol=/@media,nosuid,nodev,nofail,x-gvfs-show   0  0
 | |
| UUID=6ef4ad46-163f-435f-8522-3bacaeee39a8  /mnt/backup  auto  subvol=/@backup,nosuid,nodev,nofail,x-gvfs-show  0  0
 | |
| EOF"
 | |
| 
 | |
| echo
 | |
| echo === install rclone
 | |
| echo
 | |
| 
 | |
| run root        "install rclone"              "pacman -S --noconfirm rclone"
 | |
| run "$USERNAME" "rclone: make config dir"     "mkdir -p \"/home/$USERNAME/.config/rclone/\""
 | |
| run root        "rclone: copy filters"        "cp $CONFIG_DIR/rclone/*.filter \"/home/$USERNAME/.config/rclone/\""
 | |
| run root        "rclone: copy scripts"        "cp $CONFIG_DIR/rclone/*.sh \"/home/$USERNAME/.config/rclone/\""
 | |
| run root        "rclone: set mode to filters" "chmod 664 /home/$USERNAME/.config/rclone/*.filter"
 | |
| run root        "rclone: set mode to scripts" "chmod 775 /home/$USERNAME/.local/bin/bisync_*"
 | |
| run root        "rclone: set owner to files"  "chown -R $USERNAME:$USERNAME /home/$USERNAME/.config/rclone /home/$USERNAME/.local/bin/bisync_*"
 | |
| 
 | |
| fi # $HOSTNAME == "elfDesktop"
 | |
| 
 | |
| echo
 | |
| echo === clean and reboot
 | |
| echo
 | |
| 
 | |
| run root        "remove config sources"       "rm -r \"$CONFIG_DIR\""
 | |
| run root        "remove first boot script"    "rm /first-boot.sh /first-boot.env /etc/systemd/system/first-boot.service"
 | |
| run root        "reboot"                      "shutdown -r now"
 |