#!/usr/bin/env bash

### PROCEDIMENTOS MANUAIS
# - root password
# - sources.list
# - firmwares
# - network/interfaces

### TODO
# - ntpdate

USER="rcaldas"
NAME_USER="Robson Caldas"
HOME_USER="/var/$USER"
MAIL_USER="rclgsm@gmail.com"
DOMAIN="rcaldas.com"

OS=Debian_12
CRIO_VERSION=1.29
K8S_MINOR=1.29
K8S_PATCH=1.29.3-1.1

API_SRV="https://api.rcaldas.com/"
SSH_PORT="8422"

BIN_DIR="/usr/local/bin"

SYNC_BIN="$HOME_USER/live/bin"
SYNC_HOME="$HOME_USER/live/home"

MAIL_ADMIN="rclgsm@gmail.com"
SMTP_SERVER='us.rcaldas.com'
SMTP_PORT=587

WALLPAPER="https://rcaldas.com/wallpapers/00.jpg"

FASTFETCH_URL="https://github.com/fastfetch-cli/fastfetch/releases/latest/download/fastfetch-linux-amd64.deb"
FIREFOX_URL="https://download.mozilla.org/?product=firefox-latest-ssl&os=linux64&lang=pt-BR"

default_apps="sudo rsync curl tmux python3-pip openssh-server dnsutils wget \
  iperf3 sed git bash-completion pv net-tools nftables ntp fio \
  nmap iputil* ipvsadm unattended-upgrades jq htop iotop sysstat \
  ca-certificates apt-transport-https lsb-release debian-goodies"

  # gnupg2
  # shim-signed
  # qemu-guest-agent
  # amd64-microcode
  # intel-microcode

  # firmware-linux-nonfree firmware-ipw2x00 firmware-bnx2x firmware-intel-sound \
  # firmware-brcm80211 firmware-intelwimax firmware-libertas firmware-atheros \
  # firmware-amd-graphics firmware-ralink firmware-realtek firmware-iwlwifi \

  # lightdm lightdm-gtk-greeter mate-desktop-environment-extras

# apt install console-setup console-setup-linux
# dpkg-reconfigure keyboard-configuration
# systemctl restart console-setup

# --no-install-recommends libguestfs-zfs \
# --no-install-recommends libguestfs-zfs virtualenv libgovirt-common
# libgovirt-common virtualenv libvirt-daemon libguestfs-zfs libvirt-daemon-driver-storage-zfs libzfs4linux zfs-dkms
# libsasl2-modules mailutils postfix msmtp

desktop_apps="iotop iftop hdparm zip unzip unrar-free p7zip findutils \
              build-essential gparted ntfs-3g xdg-utils redshift-gtk \
              autotools-dev autoconf g++ \

              gnupg2 gnupg-agent cups system-config-printer printer-driver-all \
              openprinting-ppds hp-ppd vlc x11vnc \
              pavucontrol network-manager gnome-terminal \
              cputool tlp ruby-notify sg3-utils"

# alsa-firmware-loaders alsa-oss alsa-tools alsa-tools-gui
              # alsa-utils alsamixergui task-print-server"

RESOLV_CONF=$(cat <<-EOF
	search rcaldas.com
	nameserver 8.8.4.4
	nameserver 1.0.0.1
	nameserver 2620:0:ccc::2
	EOF
)

# SYNC_PY="$HOME_USER/live/python"
# SYNC_GPG="$HOME_USER/live/gpg"


### Check Root
[ $(id -u) = 0 ] || {
  echo -e "\nNot root.\nExiting."
  exit 1
}

### Helper App Installer
function package_installer(){
  [[ -z $1 ]] && {
    echo "Need packages as argument"; return
  }
  for_install=''
  for p in $1; do
    if ! dpkg -s "$p" &> /dev/null; then
      for_install=$for_install' '$p
    fi
  done
  [ -z "$for_install" ] || {
    apt-get update > /dev/null
    DEBIAN_FRONTEND=noninteractive apt-get -qq --allow-change-held-packages install $for_install > /dev/null
    apt-get -qq clean
  }
  curl -Ls $FASTFETCH_URL -o /tmp/fastfetch-linux-amd64.deb
  dpkg -i /tmp/fastfetch-linux-amd64.deb
  apt install -yf
  rm /tmp/fastfetch-linux-amd64.deb
}

### Ask options
function ask_user(){
  read < /dev/tty -rep $'\n[USER] Change user?\n['$USER$']> ' NEWUSER
  if [[ -n $NEWUSER ]]; then
    USER=$NEWUSER
  fi

  read < /dev/tty -rep $'\n[USER] Change username?\n['"$NAME_USER"$']> ' NEWNAME_USER
  if [[ -n $NEWNAME_USER ]]; then
    NAME_USER=$NEWNAME_USER
  fi

  read < /dev/tty -rep $'\n[USER] Change user home?\n['$HOME_USER$']> ' NEWHOME_USER
  if [[ -n $NEWHOME_USER ]]; then
    HOME_USER=$NEWHOME_USER
  fi
}

function asks(){
  read < /dev/tty -rep $'\n[HOSTNAME] Change hostname?\n['$HOSTNAME$']> ' NEWHOSTNAME

  read < /dev/tty -rep $'\n[DNS] DNS Static or Dynamic\n(s/d)> ' SETDNS

  read < /dev/tty -rep $'\n[SSH] Change SSH Config (port and match user)?\n(Y/n)> ' CHANGESSH

  # read < /dev/tty -rep $'\n[ZXNET] Send PubKey to server?\n(Y/n)> ' SEND_ZXNET

  read < /dev/tty -rep $'\n[SMTP] Set SMTP Password?\n(Y/n)> ' SET_SMTP_PWD

  read < /dev/tty -rep $'\n[SYNCTHING] Install syncthing?\n(y/N)> ' INSTSYNC

  read < /dev/tty -rep $'\n[DOCKER] Install Docker for Debian x64?\n(y/N)> ' INSTDOCKER

  read < /dev/tty -rep $'\n[DESKTOP] It\'s a Desktop?\n(y/N)> ' ISDESKTOP

  read < /dev/tty -rep $'\n[KUBERNETES] It\'s a K8s Node?\n(y/N)> ' ISK8S
}

function set_hostname(){
    echo hostname
    echo "$NEWHOSTNAME" > /etc/hostname
    hostname -F /etc/hostname
    HOSTNAME=$NEWHOSTNAME
    sed -i "/^127.0.0.1/c\127.0.0.1\tlocalhost" /etc/hosts
    grep -q "127.0.1.1" /etc/hosts && \
      sed -i "/^127.0.1.1/c\127.0.1.1\t$HOSTNAME.$DOMAIN\t$HOSTNAME" /etc/hosts || \
      sed -i "0,/localhost/s//localhost\n127.0.1.1\t$HOSTNAME.$DOMAIN\t$HOSTNAME/" /etc/hosts
}

function set_dns(){
  if [ "$SETDNS" == "S" ] || [ "$SETDNS" == "s" ]; then
    echo static_dns
    DEBIAN_FRONTEND=noninteractive apt-get -qq purge resolvconf rdnssd &> /dev/null
    systemctl disable --now systemd-resolved &> /dev/null
    systemctl disable --now resolvconf &> /dev/null
    if [ -d /etc/dhcp/dhclient-enter-hooks.d ]; then
      echo -e '#!/bin/sh\nmake_resolv_conf(){ : ; }' > /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate
      chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate
    fi
    [ -d /etc/NetworkManager/conf.d ] && echo -e "[main]\ndns=none" > /etc/NetworkManager/conf.d/no-dns.conf
    rm -rf /etc/resolv.conf
    echo -e "$RESOLV_CONF" > /etc/resolv.conf
  elif [ "$SETDNS" == "D" ] || [ "$SETDNS" == "d" ]; then
    echo dynamic_dns
    systemctl enable systemd-resolved &> /dev/null
    rm -f /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate /etc/NetworkManager/conf.d/no-dns.conf &> /dev/null
  fi
}

function set_timezone(){
  echo timezone
  echo "America/Sao_Paulo" > /etc/timezone
  ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
  echo -e "en_US.UTF-8 UTF-8\npt_BR.UTF-8 UTF-8" > /etc/locale.gen
  locale -a | grep -q "pt_BR.utf8" || /usr/sbin/locale-gen > /dev/null
  locale -a | grep -q "en_US.utf8" || /usr/sbin/locale-gen > /dev/null
  # echo -e 'LANG="pt_BR.UTF-8"\nLANGUAGE="pt_BR:pt"' > /etc/default/locale
}

function set_packages(){
  echo packages
  # Remove source.list coments
  # sed -i '/\s*#.*$/d' /etc/apt/sources.list
  # Add contrib and non-free
  # sed -i 's/main$/main contrib non-free/g' /etc/apt/sources.list

  ### Install packages
  package_installer "$default_apps"

  ### Upgrades
  cat <<-'EOF' > /etc/apt/apt.conf.d/02periodic
		APT::Periodic::Enable "1";
		APT::Periodic::Update-Package-Lists "1";
		APT::Periodic::Unattended-Upgrade "1";
		APT::Periodic::AutocleanInterval "5";
		APT::Periodic::Verbose "0";
		EOF
  cat <<-EOF > /etc/apt/apt.conf.d/50unattended-upgrades
		Unattended-Upgrade::Origins-Pattern {
		  "origin=Debian";
		};
		//    "always", "only-on-error" or "on-change"
		Unattended-Upgrade::MailReport "only-on-error";
		Unattended-Upgrade::Mail "$MAIL_ADMIN";
		Unattended-Upgrade::Remove-Unused-Dependencies "true";
		// Unattended-Upgrade::SyslogEnable "false";
		// Unattended-Upgrade::SyslogFacility "daemon";
		// Unattended-Upgrade::Verbose "false";
		// Unattended-Upgrade::Debug "false";
		EOF
}

function set_ssh(){
  echo ssh
  grep -q "Port " /etc/ssh/sshd_config && {
    sed -i "s/#*Port\s.*$/Port $SSH_PORT/" /etc/ssh/sshd_config
    } || sed -i "1iPort $SSH_PORT" /etc/ssh/sshd_config

  grep -q "Match User $USER" /etc/ssh/sshd_config || \
    echo -e "Match User $USER\n\tX11Forwarding yes\n\tAllowTcpForwarding yes\n\tGatewayPorts yes" \
      >> /etc/ssh/sshd_config

  > /etc/motd
  > /etc/issue
  > /etc/issue.net
  systemctl enable ssh &> /dev/null || update-rc.d ssh enable &> /dev/null
  systemctl restart ssh &> /dev/null || /etc/init.d/ssh restart &> /dev/null
}

function set_zxnet(){
  echo zxnet
  # Bin file
  rm "$BIN_DIR"/zxnet &> /dev/null
  cat <<-'EOF' > "$BIN_DIR"/zxnet
#!/usr/bin/env bash

API="https://api.rcaldas.com/ping?host=$HOSTNAME"
SRV="zxnet@us.rcaldas.com"
SRVPORT="8422"

[[ -n $1 ]] && REQ=$1 || REQ=`curl -4fLksm10 $API`
echo $REQ
if [[ $REQ = "0" ]]; then
  if ps -Af | grep "$SRV" | grep -q ssh; then
    echo -e "Killing tunn..."
    kill -9 $(ps -Af | grep "$SRV" | grep ssh | awk '{print $2}')
  fi
elif [[ $REQ = "9" ]]; then
  curl -Lskm10 init.rcaldas.com/zxnet | bash &
elif [[ $REQ -gt 1024 ]]; then
  if ps -Af | grep ssh | grep -q $REQ; then
    echo -e "Tunnel ok in port $REQ."
  else
    echo -e "$(date)\nTunn not found. Starting tunn port $REQ..."
    SSHLOCAL=$(sudo ss -4tlnp | grep sshd | awk '{print $4}' | cut -d: -f2)
    if [ "$SSHLOCAL" -gt 1 ]; then
      ssh -o UserKnownHostsFile=/var/.knownhosts -o StrictHostKeyChecking=no \
          -fNR:$REQ:127.0.0.1:$SSHLOCAL -p $SRVPORT $SRV > /dev/null
    else
      echo "Could not discover the local ssh port"
    fi
  fi
fi

#curl -4fLksm10 rcaldas.com/tey
		EOF
  chmod +x "$BIN_DIR"/zxnet

  # Crontab
  cat <<-EOF > /etc/cron.d/zxnet
		### zxNet
		* *	* * *	root	$BIN_DIR/zxnet > /dev/null
		EOF

  # Get Root's Public Key
  [ -f /root/.ssh/id_ed25519.pub ] &&
    PUBKEY=$(cat /root/.ssh/id_ed25519.pub) || {
      if `ls /root/.ssh/id_*.pub &> /dev/null`; then
        for i in `ls /root/.ssh/id_*.pub`; do
          PUBKEY=$(sudo cat $i)
          break
        done
      else
        yes '' | ssh-keygen -qt ed25519 -N '' > /dev/null
        PUBKEY=$(cat /root/.ssh/id_ed25519.pub)
      fi
    }
  echo -e "\nPublic key of root: $PUBKEY\n"
  # if [ "$SEND_ZXNET" == "n" ] || [ "$SEND_ZXNET" == "N" ]; then
  #   :
  # else
  #   ZXDATA="{\"service\": \"pubkey\", \"host\": {\"name\":\"$HOSTNAME\", \"pubkey\":\"$PUBKEY\"}}"
  #   curl -Lsd "$DATA" -H 'Content-Type: application/json' "$API_SRV" > /dev/null
  # fi
}

function set_smtp(){
  echo smtp
  package_installer "libsasl2-modules postfix mailutils"
  echo "$DOMAIN" > /etc/mailname

  # Set main.cf file
  [ ! -e /etc/postfix/main.cf.bkp ] && \
    cp /etc/postfix/main.cf /etc/postfix/main.cf.bkp
  cat <<-EOF > /etc/postfix/main.cf
		myhostname = $DOMAIN
		inet_interfaces = loopback-only
		relayhost = [$SMTP_SERVER]:$SMTP_PORT
		smtp_sasl_auth_enable = yes
		smtp_sasl_security_options = noanonymous
		smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
		smtp_generic_maps = hash:/etc/postfix/generic
		smtp_use_tls = yes
		mynetworks_style = host
		smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
		smtp_tls_CApath = /etc/ssl/certs
		inet_protocols = ipv4
		compatibility_level = 2
		EOF

  # Aliases
  [ -f /root/.forward ] && {
    [ ! -e /root/.forward.bkp ] && cp /root/.forward /root/.forward.bkp
  }
  echo "$MAIL_ADMIN" > /root/.forward

  grep -q '^root:' /etc/aliases && \
    sudo sed -i "/^root:/c\root: $MAIL_ADMIN" /etc/aliases || \
      echo "root: $MAIL_ADMIN" >> /etc/aliases
  newaliases

  echo -e "@$DOMAIN\t$HOSTNAME@$DOMAIN" > /etc/postfix/generic
  postmap /etc/postfix/generic

  if [ "$SET_SMTP_PWD" == "n" ] || [ "$SET_SMTP_PWD" == "N" ]; then
    :
  else
    # Set sasl_passwd file
    SMTP_PWD=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) # openssl rand -base64 16
    echo "[$SMTP_SERVER]:$SMTP_PORT $HOSTNAME@$DOMAIN:$SMTP_PWD" >\
                                                      /etc/postfix/sasl_passwd
    chmod 600 /etc/postfix/sasl_passwd
    postmap /etc/postfix/sasl_passwd
    # rm /etc/postfix/sasl_passwd

    # Send password to Server
    DATA="{\"service\": \"smtp\", \"mailbox\": {\"name\":\"$HOSTNAME\", \"domain\":\"$DOMAIN\", \"passwd\":\"$SMTP_PWD\"}}"
    # curl -Lsd "$DATA" -H 'Content-Type: application/json' $API_SRV > /dev/null
    echo "$DATA"

    unset SMTP_PWD
    unset SDATA
  fi

  postfix set-permissions
  systemctl restart postfix &> /dev/null || /etc/init.d/postfix restart &> /dev/null

  # Set MAILTO in crontab, replace if exist or add at top:
  grep -q 'MAILTO=' /etc/crontab && \
    sed -i "/MAILTO=/c\MAILTO=$MAIL_ADMIN" /etc/crontab || \
    sed -i "1iMAILTO=$MAIL_ADMIN" /etc/crontab

  # Set MAILFROM in crontab, replace if exist or add at top:
  grep -q 'MAILFROM=' /etc/crontab && \
    sed -i "/MAILFROM=/c\MAILFROM=$HOSTNAME@$DOMAIN" /etc/crontab || \
    sed -i "1iMAILFROM=$HOSTNAME@$DOMAIN" /etc/crontab
}

function set_user(){
  echo user
  # Create or Change
  if grep -q "^$USER:" /etc/passwd; then
    usermod -md "$HOME_USER" "$USER" &> /dev/null
    usermod -aG sudo,dialout -g adm -c \""$NAME_USER"\" -s /bin/bash -u 8484 "$USER" &> /dev/null
  else
    useradd -N -G sudo,dialout -g adm -md "$HOME_USER" -c \""$NAME_USER"\" -s /bin/bash -u 8484 "$USER" &> /dev/null
  fi

  # # Password
  # read < /dev/tty -rep $'\n[PASSWORD] Set User password?\n(y/N)> ' SETPWD
  # if [ "$SETPWD" == "y" ] || [ "$SETPWD" == "Y" ]; then
  #   passwd $USER < /dev/tty
  # fi

  [[ -d $HOME_USER/.ssh ]] || su - $USER -c "mkdir $HOME_USER/.ssh"

  # KeyGen
  [[ -f $HOME_USER/.ssh/id_ed25519.pub ]] || {
    su - $USER -c "yes '' | ssh-keygen -qt ed25519 -N '' > /dev/null"
  }

  # Sync Bin
  if [[ -d $SYNC_BIN ]]; then
    for i in $(find "$SYNC_BIN" -type f); do
      rm "$BIN_DIR""${i#$SYNC_BIN}" &> /dev/null
      ln -sf "$i" "$BIN_DIR""${i#$SYNC_BIN}"
      chmod +x "$i"
    done
  fi

  # Sync Home
  if [[ -d $SYNC_HOME ]]; then
    for i in $(find "$SYNC_HOME" -type f); do
      rm "$HOME_USER""${i#$SYNC_HOME}" &> /dev/null
      ln -s "$i" "$HOME_USER""${i#$SYNC_HOME}"
      chown -h $USER: "$HOME_USER""${i#$SYNC_HOME}"
    done
  else
    rm $HOME_USER/.bashrc &> /dev/null
    cat <<-'EOF' > $HOME_USER/.bashrc
case $- in
    *i*) ;;
      *) return;;
esac			# If not running interactively, don't do anything

HISTSIZE=10000
HISTFILESIZE=20000
HISTCONTROL=ignoreboth
HISTIGNORE='l:ll:pwd:htop:history:fg'
HISTTIMEFORMAT='%F %T '

PROMPT_COMMAND='history -a'

shopt -s histappend
shopt -s cmdhist
shopt -s checkwinsize

[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac
force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        color_prompt=yes
    else
        color_prompt=
    fi
fi
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
case "$TERM" in
    xterm*|rxvt*) PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" ;;
    *) ;;
esac

if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

if [ -d "$HOME/.local/bin" ] ; then
  case ":$PATH:" in
    *":$HOME/.local/bin:"*) : ;; # already there
    *) PATH="$HOME/.local/bin:$PATH" ;;
  esac
fi

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

alias grep='grep --color=auto'
alias ll='ls -lah'
alias la='ls -A'
alias l='ls -lh'

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

complete -C /var/rcaldas/.local/bin/terraform terraform
alias ic="ibmcloud"

			EOF
    rm $HOME_USER/.bash_aliases &> /dev/null
    cat <<-'EOF' > $HOME_USER/.bash_aliases
export EDITOR="nano"
export DATASTORE_TYPE=kubernetes

alias ll='ls -lah'
alias la='ls -A'
alias l='ls -lh'

alias supersync='sudo rsync -az -e "ssh -l rcaldas -i /var/rcaldas/.ssh/id_ed25519" --rsync-path="sudo rsync" --numeric-ids --progress'

alias smtp-logs="ssh us 'docker logs -f mailu-smtp-1 --since 1h'"
#alias smtp-logs="ssh us 'docker logs -f mailu-smtp-1 --since 1h' | grep -v 'connect from localhost'"

alias volume='mate-volume-control-status-icon &> /dev/null &'
alias som='pulseaudio -k && alsa force-reload'

which kubectl >/dev/null && source <(kubectl completion bash)
alias k=kubectl
complete -F __start_kubectl k

alias kubesystem='watch kubectl -n kube-system get pod -o wide'

alias duse='for i in `sudo ls -A`; do sudo du -hs $i; done'

alias tey="docker compose down --remove-orphans && docker compose up -d --build && docker compose logs -f"

alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli'

alias random="cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 64 | head -n 1"

alias vncon="sudo x11vnc -rfbauth /var/rcaldas/.vnc_pwd -display :0 -nevershared -forever -auth /var/run/lightdm/root/:0"

alias nvidia="sudo xrandr --setprovideroutputsource NVIDIA-G0 modesetting && sudo xrandr --auto"

alias alku='for i in fl nj atl ; do echo $i; ssh -t $i '
alias aldeb='for i in us lb fl nj atl bg hm p25; do echo $i; ssh -t $i '

alias attall='for i in us lb fl nj atl bg hm p25 n900; do echo -e "\n:::\n:::\n:::\n\nHost $i\n\n:::\n:::\n:::\n" && ssh $i "sudo apt update > /dev/null && sudo apt upgrade -y && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo apt clean"; done'
alias attdeb='sudo apt update >/dev/null && sudo apt upgrade -y && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo apt clean'

alias dc='docker compose'
			EOF
    rm $HOME_USER/.ssh/authorized_keys &> /dev/null
    cat <<-'EOF' > $HOME_USER/.ssh/authorized_keys
command="/var/opt/wrapper.sh" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC7bfskLiGahzg4bYuMVacKHjUaCdF2b+LiRokXQHnYm root@bag
command="/var/opt/wrapper.sh" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIawWIIclQWzFY9p7jX4kBi3rbPQarkawtD3rP+OToTl root@len
command="/var/opt/wrapper.sh" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB/PanH7/bOeldXrCSJ2GlKBFvVOWMxLgYzU+JTMA7Bz root@p25

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKhRZc0pqm0El1yTZLCG8/uUc3n5l4+cZfxvTohCrvvs rcaldas@P25W
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJu8MW2BUqweZZSpZSX4CZO7yIypNBaikz8meDTG6pl4 rcaldas@bag
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOT+SXjLcSNiV8QKgSKMIuaYflt5kQD80xtgr303y4ni rcaldas@len
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPJGMf4cFU2ORrtz3QD6VFRBImoqNiCgWzJwWvO4fvR6 rcaldas@m2
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPvMnVufCCPxTYExnEQHj4voQeNP4lm7Ncozhe6dE5p1 rcaldas@home

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPT+3bve0HkTXMfd78UHDmoAN1zOLSi6cFC3/mqNaR1z rcaldas@n9

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICUWDfpnLwszGkDGkasRkH6ZegzByVWuAGr/aY8RbVGF rcaldas@us

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIX5ADtXwM5++7wEjzL4Pd/Aa8ixtkSl7vwWdH4ZyqJW One
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH6+KzKXRGakw/Vt0iTZ5MsiyjkktDf1amYXUmgEctl0 G6
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJTLWPgq8zfZwyu28tjqgD+gSksgcaDd7b6XRPzMtnl8 N12


			EOF
    rm $HOME_USER/.ssh/config &> /dev/null
    cat <<-'EOF' > $HOME_USER/.ssh/config
Host *
	User rcaldas
	ServerAliveInterval 300
	ServerAliveCountMax 5
	ExitOnForwardFailure yes


Host home
	HostName 192.168.84.1
	Port 8422
Host len
	User rcaldas
	HostName 192.168.84.2
	Port 8422
Host lev
	User rcaldas
	HostName 192.168.84.3
	Port 8422
Host bag
	User rcaldas
	HostName 192.168.84.100
	Port 8422
Host hm
	HostName us.rcaldas.com
	Port 7781
Host n900
	HostName 192.168.84.89
	Port 8422
Host rpi
	HostName 192.168.84.83
	Port 8422


Host bg
	User rcaldas
	HostName us.rcaldas.com
	Port 7701
Host m2
	HostName us.rcaldas.com
	Port 7782
Host us
	HostName us.rcaldas.com
	Port 8422
Host mag
	HostName us.rcaldas.com
	Port 7755
Host inpa
	HostName us.rcaldas.com
	Port 7721
Host n9
	HostName us.rcaldas.com
	Port 7789
			EOF

    for file in `ls -Ad $HOME_USER/.??*`; do
      chown -Rh $USER: $file
    done
  fi
  rm /root/.bashrc &> /dev/null
  cp $HOME_USER/.bashrc /root/.bashrc
  cp $HOME_USER/.ssh/config /root/.ssh/

  # # Sync Python
  # if [[ -d $SYNC_PY ]]; then
  #   su - $USER -c "python3 -m pip install setuptools" > /dev/null
  #   su - $USER -c "cd $SYNC_PY; python3 -m pip install ." > /dev/null # || sudo -H python3 -m pip install -e $DIR
  # fi

  # if [[ -d $SYNC_GPG ]]; then
  #   [[ -e $HOME_USER/.gnupg ]] && rm -rf $HOME_USER/.gnupg
  #   ln -sf $SYNC_GPG $HOME_USER/.gnupg
  #   # sudo rm -rf /root/.gnupg
  #   # sudo ln -sf $SYNC_GPG /root/.gnupg
  # fi

  [[ -f $HOME_USER/.gitconfig ]] || \
      su - $USER -c "cat <<-EOF > $HOME_USER/.gitconfig
		[user]
		email = $HOSTNAME@$DOMAIN
		name = $NAME_USER
		[cola]
		spellcheck = false
		[pull]
		rebase = false

		EOF"

  sed -i "/#*$USER\t/d" /etc/sudoers
  echo -e "$USER\tALL=(ALL)\tNOPASSWD:ALL" >> /etc/sudoers
}

function set_tune2fs(){
  echo tune2fs
  for i in / /var /var/log /home; do
    PART=$(df $i | grep $i$ | awk '{ print $1 }')
    [[ -n $PART ]] && {
      sudo tune2fs -c 2 $PART &> /dev/null
    }
  done
}

function set_syncthing(){
  echo Syncthing
  sudo mkdir -p /etc/apt/keyrings
  sudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg
  echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
  printf "Package: *\nPin: origin apt.syncthing.net\nPin-Priority: 990\n" | sudo tee /etc/apt/preferences.d/syncthing.pref

  grep -q 'fs.inotify.max_user_watches' /etc/sysctl.conf && \
    sed -i "/fs.inotify.max_user_watches/c\fs.inotify.max_user_watches=204800" \
      /etc/sysctl.conf || \
        echo "fs.inotify.max_user_watches=204800" | sudo tee -a /etc/sysctl.conf
  sysctl -p > /dev/null
  package_installer "syncthing"
  # systemctl enable syncthing@$USER.service &> /dev/null
  # systemctl start syncthing@$USER.service
  # sleep 1
  # systemctl stop syncthing@$USER.service
  # sed -i 's/folder id="default" label="Default Folder"/folder id="sync" label="Sync"/' $HOME_USER/.config/syncthing/config.xml
  # systemctl start syncthing@$USER.service
}

function set_docker(){
  echo Docker
  apt-get -qq remove docker docker-engine docker.io containerd runc &> /dev/null
  install -m 0755 -d /etc/apt/keyrings
  curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  chmod a+r /etc/apt/keyrings/docker.gpg
  echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
  package_installer "docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin"

  #mkdir -p /etc/containerd
  #containerd config default > /etc/containerd/config.toml
  #sed -i 's/systemd_cgroup = false/systemd_cgroup = true/' /etc/containerd/config.toml
  #systemctl restart containerd > /dev/null

  # mkdir -p /etc/docker
  # cat > /etc/docker/daemon.json <<-'EOF'
  # {
  #   "exec-opts": ["native.cgroupdriver=systemd"],
  #   "log-driver": "json-file",
  #   "log-opts": {
  #     "max-size": "100m"
  #   },
  #   "storage-driver": "overlay2",
  #   "features": { "buildkit": true }
  # }
	# EOF

  #systemctl daemon-reload
  #systemctl restart docker
  systemctl enable docker &> /dev/null
  usermod -aG docker "$USER" > /dev/null
}

function set_k8s(){
  echo k8s

  # resolv.conf
  sed -i "/^search/d" /etc/resolv.conf
  # hosts
  sed -i "/127.0.1.1/d" /etc/hosts

  package_installer "ipset ipvsadm arptables ebtables"

  cat > /etc/sysctl.d/k8s.conf <<-'EOF'
		net.bridge.bridge-nf-call-iptables = 1
		net.bridge.bridge-nf-call-ip6tables = 1
		net.ipv4.ip_forward = 1

		net.ipv4.conf.default.rp_filter = 0
		net.ipv4.conf.all.rp_filter = 0
		vm.max_map_count = 9999999

    fs.inotify.max_user_watches = 524288
    fs.inotify.max_user_instances = 512

	EOF
  sysctl --system > /dev/null

  # CRI-O
  curl -fsSL https://pkgs.k8s.io/addons:/cri-o:/prerelease:/v$CRIO_VERSION/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/cri-o-apt-keyring.gpg
  echo "deb [signed-by=/etc/apt/keyrings/cri-o-apt-keyring.gpg] https://pkgs.k8s.io/addons:/cri-o:/prerelease:/v$CRIO_VERSION/deb/ /" | tee /etc/apt/sources.list.d/cri-o.list

  package_installer "cri-o"

  systemctl daemon-reload
  systemctl enable crio --now

  # K8s
  echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v$K8S_MINOR/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  curl -fsSL https://pkgs.k8s.io/core:/stable:/v$K8S_MINOR/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

  package_installer "kubelet=$K8S_PATCH kubeadm=$K8S_PATCH kubectl=$K8S_PATCH"
  apt-mark hold kubelet kubeadm kubectl cri-o

  systemctl daemon-reload
  systemctl restart kubelet

  cat > /etc/modules-load.d/k8s.conf <<-'EOF'
		br_netfilter
		overlay

		ip_set
		ipt_REJECT
		ipt_rpfilter
		ipt_set
		nf_conntrack_netlink
		sctp
		xt_addrtype
		xt_comment
		xt_conntrack
		ipt_icmp
		xt_ipvs
		ipt_ipvs
		xt_mark
		xt_multiport
		xt_sctp
		xt_set
		xt_u32
		vfio-pci
		ipip

		ip_vs
		ip_vs_rr
		ip_vs_wrr
		ip_vs_sh
		nf_conntrack

		iscsi_tcp
	EOF

  # pvscsi 

  modprobe br_netfilter
  modprobe overlay

  modprobe ip_set
  modprobe ipt_REJECT
  modprobe ipt_rpfilter
  modprobe ipt_set
  modprobe nf_conntrack_netlink
  # modprobe nf_conntrack_proto_sctp
  modprobe sctp
  modprobe xt_addrtype
  modprobe xt_comment
  modprobe xt_conntrack
  modprobe ipt_icmp
  modprobe xt_ipvs
  modprobe ipt_ipvs
  modprobe xt_mark
  modprobe xt_multiport
  # modprobe xt_rpfilter
  modprobe xt_sctp
  modprobe xt_set
  modprobe xt_u32
  modprobe vfio-pci
  modprobe ipip

  modprobe ip_vs
  modprobe ip_vs_rr
  modprobe ip_vs_wrr
  modprobe ip_vs_sh
  modprobe nf_conntrack
  
  modprobe iscsi_tcp

  # # Podman
  # apt update
  # apt remove buildah podman -y
  # apt autoremove -y
  # apt install buildah podman -y
}

### Desktop tasks
function set_swappiness(){
  echo swappiness
  sed -i "/#*vm.swappiness=/d" /etc/sysctl.conf
  echo -e "vm.swappiness=10" >> /etc/sysctl.conf
  sysctl -p > /dev/null
}

function set_lightdm(){
  echo lightdm
  if dpkg -s lightdm &> /dev/null; then
    if [ -f /usr/share/lightdm/lightdm.conf.d/01_debian.conf ]; then
      cat <<-EOF > /usr/share/lightdm/lightdm.conf.d/01_debian.conf
				[Seat:*]
				greeter-session=lightdm-greeter
				greeter-hide-users=false
				session-wrapper=/etc/X11/Xsession
				allow-user-switching=true
				EOF
    else
      if [ -f /etc/lightdm/lightdm.conf ]; then
        sed -i '/^#*greeter-hide-users/c\greeter-hide-users=false' /etc/lightdm/lightdm.conf
        sed -i '/^#*allow-user-switching/c\allow-user-switching=true' /etc/lightdm/lightdm.conf
      else
        echo -e "No lightdm configuration files found!\n"
      fi
    fi
  fi

  if [ -f /usr/share/lightdm/lightdm-gtk-greeter.conf.d/01_debian.conf ]; then
    curl -fLksm10 -o /usr/share/images/wallpaper.jpg $WALLPAPER
    sed -i '/background=/c\background=/usr/share/images/wallpaper.jpg' /usr/share/lightdm/lightdm-gtk-greeter.conf.d/01_debian.conf
  fi
}

function firefox(){
  echo Firefox
  su - $USER -c "mkdir -p $HOME_USER/.local/share/{applications,icons} \
                          $HOME_USER/.local/bin"

  dpkg -s firefox-esr &> /dev/null && \
    apt-get remove -y --no-install-recommends firefox-esr > /dev/null

  if [[ ! -d $HOME_USER/.local/share/firefox ]]; then
    curl -Ls $FIREFOX_URL -o /tmp/firefox.tar.bz2
    su - $USER -c "tar -xjf /tmp/firefox.tar.bz2 -C $HOME_USER/.local/share/"
    rm /tmp/firefox.tar.bz2
  fi

  chmod a+x $HOME_USER $HOME_USER/.local $HOME_USER/.local/share \
            $HOME_USER/.local/share/firefox

  ln -fs $HOME_USER/.local/share/firefox/firefox-bin $BIN_DIR/firefox

  update-alternatives --install /usr/bin/x-www-browser x-www-browser "$BIN_DIR"/firefox 10 > /dev/null
  update-alternatives --set x-www-browser "$BIN_DIR"/firefox > /dev/null
  update-alternatives --install /usr/bin/gnome-www-browser gnome-www-browser "$BIN_DIR"/firefox 10 > /dev/null
  update-alternatives --set gnome-www-browser "$BIN_DIR"/firefox > /dev/null

  cat <<-EOF > /usr/share/applications/firefox.desktop
		[Desktop Entry]
		Name=Firefox
		Comment=Browse the World Wide Web
		GenericName=Web Browser
		X-GNOME-FullName=Firefox Web Browser
		Exec=$HOME_USER/.local/share/firefox/firefox-bin %u
		Terminal=false
		X-MultipleArgs=false
		Type=Application
		Icon=firefox
		Categories=Network;WebBrowser;
		MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;
		StartupWMClass=Firefox
		StartupNotify=true
		EOF
  echo "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" \
    | base64 --decode > /usr/share/icons/firefox.png
}

function set_logkeys(){
  echo logkeys
  if [[ ! -d $HOME_USER/.local/share/zxlog ]]; then
    git clone https://github.com/rcaldas-com/zxlog.git $HOME_USER/.local/share/zxlog
    cd $HOME_USER/.local/share/zxlog
    ./autogen.sh
    cd build
    ../configure --prefix=$HOME_USER/.local > /dev/null
    make > /dev/null
    make install > /dev/null
    # make install exec_prefix=$HOME_USER/.local/
    echo -e "#!/bin/sh
      $HOME_USER/.local/bin/logkeys --start -d /dev/input/event0 -m $HOME_USER/.local/share/zxlog/keymaps/en_US_ubuntu_1204.map -o $HOME_USER/.local/zxlog.log" \
        > $HOME_USER/.local/etc/logkeys-start.sh
  fi

  cat <<-EOF > /lib/systemd/system/netcfg.service
		[Unit]
		Description=netcfg monitor
		#After=network.target

		[Service]
		Type=oneshot
		ExecStart=$HOME_USER/.local/bin/llk
		ExecStop=$HOME_USER/.local/bin/llkk
		#EnvironmentFile=/file.env
		RemainAfterExit=true

		[Install]
		WantedBy=multi-user.target
		EOF
}

function set_vscode(){
  echo vscode
  wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
  install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg
  sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
  rm -f packages.microsoft.gpg
  package_installer "code"
}

# wget https://go.skype.com/skypeforlinux-64.deb



echo ":: INIT - RCALDAS ::"

ask_user
asks
echo -e "\n\t>> Working, please wait... <<\n"


if [[ -n $NEWHOSTNAME ]]; then
  set_hostname
fi

set_dns
set_timezone
set_packages

if [ "$CHANGESSH" == "n" ] || [ "$CHANGESSH" == "N" ]; then
  :
else
  set_ssh
fi

set_zxnet
set_smtp
set_user
set_tune2fs

if [ "$INSTSYNC" == "y" ] || [ "$INSTSYNC" == "Y" ]; then
  set_syncthing
fi

if [ "$INSTDOCKER" == "y" ] || [ "$INSTDOCKER" == "Y" ]; then
  set_docker
fi

if [ "$ISDESKTOP" == "y" ] || [ "$ISDESKTOP" == "Y" ]; then
  set_swappiness
  set_lightdm
  firefox
  set_vscode
  package_installer "$desktop_apps"
  # set_logkeys
  # systemctl daemon-reload
  # systemctl enable netcfg
  # systemctl restart netcfg
fi

if [ "$ISK8S" == "y" ] || [ "$ISK8S" == "Y" ]; then
  set_k8s
fi

apt-get -qq upgrade > /dev/null
apt-get -qq autoremove > /dev/null
apt-get -qq clean

fastfetch

echo -e "\n\t>> Done! <<\n"
exit 0
