#!/usr/bin/env bash

# set -euo pipefail

set -x

# The basics
sudo systemctl start sshd
# sudo passwd --stdin nixos <<< nixos
# sudo passwd --stdin root <<< nixos

sudo mkdir -p /root/.ssh ~/.ssh
curl -fsSL https://github.com/pschmitt.keys | sudo tee -a /root/.ssh/authorized_keys ~/.ssh/authorized_keys
sudo chmod 0600 /root/.ssh/authorized_keys ~/.ssh/authorized_keys
sudo chown -R root /root/.ssh
sudo chown -R nixos /home/nixos/.ssh

BIN_DIR="$HOME/.local/state/nix/profile/bin"

rm -rf "$BIN_DIR"
mkdir -p "$BIN_DIR"

cat << 'EOM' > "${BIN_DIR}/nsetup"
#!/usr/bin/env bash

set -x

if [[ "${BASH_SOURCE[0]}" == "${0}" ]]
then
  curl -fSsL blobs.brkn.lol/x13 | bash -s -- "$@"
else
  eval "$(curl -fSsL blobs.brkn.lol/x13)"
  set +x
fi
EOM

cat << 'EOM' > "${BIN_DIR}/mount-disk"
#!/usr/bin/env bash

set -euo pipefail -x

NVME=/dev/nvme0n1

sudo cryptsetup luksOpen ${NVME}p3 x13-root
sudo mount -o subvol=@root /dev/mapper/x13-root /mnt
sudo mount -o subvol=@nix /dev/mapper/x13-root /mnt/nix
sudo mount ${NVME}p1 /mnt/boot
EOM

GIT_BRANCH=${GIT_BRANCH:-x13-new-disk}
if [[ ! -e ~/disk-config.nix ]]
then
  curl -fsSL -o ~/disk-config.nix \
    https://raw.githubusercontent.com/pschmitt/nixos-config/refs/heads/${GIT_BRANCH}/hosts/x13/disko-config.nix
fi

cat << 'EOM' > "${BIN_DIR}/disko-format-x13"
#!/usr/bin/env bash

set -x

sudo nix --experimental-features "nix-command flakes" run \
  github:nix-community/disko/latest -- \
  --mode destroy,format,mount ~nixos/disk-config.nix
EOM

cat << EOM > "${BIN_DIR}/disko-install-x13"
#!/usr/bin/env bash

set -x
sudo nix --experimental-features "nix-command flakes" run \
  'github:nix-community/disko/latest#disko-install' -- \
  --flake github:pschmitt/nixos-config/${GIT_BRANCH}#x13 \
  --disk main '/dev/disk/by-id/nvme-Samsung_SSD_990_PRO_2TB_S7HENU0Y622582M'
EOM


chmod +x "${BIN_DIR}"/*

# add a symlink in the home dir
find "$BIN_DIR" -type f -executable -exec ln -sfv {} "$HOME" \;

mkdir -p ~/.ssh
cat << 'EOM' > ~/.ssh/config
Host *
  ControlMaster auto
  ControlPersist 3600
  ControlPath ~/.ssh/control-%h_%p_%r
  User pschmitt
  LogLevel QUIET

Host fnuc f
  HostName fnuc.lan

Host ge2 ge g
  HostName ge2.lan

# ssh *via* fnuc
Host r rofl rofl-10
  HostName fnuc.lan
  RequestTTY force
  RemoteCommand ssh -tt pschmitt@rofl-10.brkn.lol
  
EOM

# nix-cache setup
sudo_ssh_cat() {
  ssh f ssh r sudo cat "$1"

}

ssh_tx() {
  local p="$1"
  sudo mkdir -p "$(dirname "$p")"
  sudo_ssh_cat "$p" | sudo tee "$p" >/dev/null
}

nix_cache_password() {
  sudo_ssh_cat /run/secrets/nix/credentials/password
}

# NOTE The OG nix.conf is a symlink to /etc/static/nix/nix.conf
sudo rm -f /etc/nix/nix.conf

ssh_tx /run/secrets/rendered/nix-cache-netrc
ssh_tx /etc/nix/nix.conf
sudo sed -i '/\!include/d' /etc/nix/nix.conf
sudo systemctl restart nix-daemon.service

# bash setup
cat << 'EOM' > ~/.inputrc
"\C-h": backward-kill-word
"\e[3;5~": kill-word
EOM

cat << 'EOM' > ~/.bashrc
rbw::get() {
  ssh -tt fnuc rbw::get "$@"
}
EOM

# GNOME
gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'de')]"
gsettings set org.gnome.desktop.peripherals.touchpad natural-scroll false
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'

# Console shortcut: SUPER + Enter
# define gpath
gpath=/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/

# register the new gpath in the list of custom keybindings
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['${gpath}']"

# set the command, name, and shortcut
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${gpath} name 'Open Console'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${gpath} command 'kgx'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${gpath} binding '<Super>Return'

# close windows with super-shift-c
gsettings set org.gnome.desktop.wm.keybindings close "['<Super><Shift>c']"

# switch workspace with super-{1,2}
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-1 "['<Super>1']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-2 "['<Super>2']"

set +x

if [[ $- != *i* ]]
then
  # Non-interactive! -> Human output
  BLUE="\e[1;34m"
  MAGENTA="\e[1;35m"
  RESET="\e[0m"

  echo_info() {
    echo -e "${BLUE}INF${RESET} $*"
  }

  echo_info "don't forget to: ${BLUE}source ~/.bashrc && bind -f ~/.inputrc${RESET}"
  echo_info "to re-run this script: ${MAGENTA}source ${BIN_DIR}/nsetup${RESET}"
else
  # Below will only work if run through eval
  source ~/.bashrc
  bind -f ~/.inputrc
fi

# vim: set ft=bash :
