PortValhalla/ManuSurface/ManuSurfaceSetup.md

7.3 KiB

ManuSurface Setup

The steps described here allow the creation of a linux system on a Surface Book 2.

  • Rename host
  • Install Brave
    • sudo apt install -y wget unzip jq apt-transport-https curl
      
      sudo curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg
      echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg arch=amd64] https://brave-browser-apt-release.s3.brave.com/ stable main" | sudo tee /etc/apt/sources.list.d/brave-browser-release.list
      sudo apt update
      sudo apt install -y brave-browser
      
      archiveName=$(mktemp)
      wget https://github.com/dougppaz/youtube-music-dl/releases/download/v1.2.1/youtube-music-dl.zip -O $archiveName
      
      extensionName=youtube-music-dl
      contextRoot=$(mktemp -d)
      extensionDir=$contextRoot/$extensionName
      keyFile=$extensionDir.pem
      extensionFile=$extensionDir.crx
      manifestFile=$extensionDir/manifest.json
      
      extensionRoot=/usr/share/brave-extensions
      destination=$extensionRoot/$extensionName.crx
      sudo mkdir -p $extensionRoot
      
      unzip $archiveName -d $extensionDir
      brave-browser --pack-extension=$extensionDir
      manifest="$(cat $manifestFile | jq ". + {key: "'"'"$(openssl rsa -in $keyFile -pubout -outform DER | openssl base64 -A)"'"'"}")"
      manifest="$(echo $manifest | jq ".background.persistent = false")"
      echo $manifest > $manifestFile
      
      extensionID=$(openssl rsa -in $keyFile -pubout -outform DER | shasum -a 256 | head -c32 | tr 0-9a-f a-p)
      extensionVersion=$(cat $manifestFile | jq -r '.version')
      brave-browser --pack-extension=$extensionDir --pack-extension-key=$keyFile
      
      sudo cp $extensionFile $extensionRoot
      
      configRoot=/opt/brave.com/brave/extensions/
      
      sudo rm -rf $contextRoot
      sudo chmod -R a+rx $extensionRoot
      sudo chmod -R u+w $extensionRoot
      sudo mkdir -p $configRoot
      {
          echo "{"
          echo '    "external_crx": "'"$destination"'",'
          echo '    "external_version": "'"$extensionVersion"'"'
          echo "}"
      } | sudo tee $configRoot/$extensionID.json
      
  • Install Bitwarden
  • Install Xournal++
  • Install Signal
  • Install Steam
  • Install Bottles
  • Install codium:
    wget -qO - https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg \
        | gpg --dearmor \
        | sudo dd of=/usr/share/keyrings/vscodium-archive-keyring.gpg
    
    echo 'deb [ signed-by=/usr/share/keyrings/vscodium-archive-keyring.gpg ] https://download.vscodium.com/debs vscodium main'
        | sudo tee /etc/apt/sources.list.d/vscodium.list
    
    sudo apt update
    sudo apt install codium
    
  • Generate SSH-key
  • Install linux-surface
    See: https://github.com/linux-surface/linux-surface/wiki/Installation-and-Setup
    • wget -qO - https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/keys/surface.asc \
          | gpg --dearmor | sudo dd of=/etc/apt/trusted.gpg.d/linux-surface.gpg
      
    • echo "deb [arch=amd64] https://pkg.surfacelinux.com/debian release main" \
          | sudo tee /etc/apt/sources.list.d/linux-surface.list
      
    • sudo apt update
      
    • sudo apt install linux-image-surface linux-headers-surface iptsd libwacom-surface
      
    • sudo systemctl enable iptsd
      
    • wget https://github.com/linux-surface/surface-dtx-daemon/releases/download/v0.3.3-2/surface-dtx-daemon_0.3.3-2_amd64.deb -O dtx.deb
      sudo dpkg -i dtx.deb
      rm dtx.deb
      
  • Enable Secure Boot
    As seen here: https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Set_up_shim
    • Implement Secure Boot
      • Copy signed Bootloader to UEFI partition:
        wget https://blog.hansenpartnership.com/wp-uploads/2013/HashTool.efi
        wget https://blog.hansenpartnership.com/wp-uploads/2013/PreLoader.efi
        cp {HashTool,PreLoader}.efi /boot/efi/EFI/systemd/
        cp /boot/efi/EFI/systemd/systemd-bootx64.efi /boot/efi/EFI/systemd/loader.efi
        
      • Add boot entry
        efibootmgr --unicode --disk /dev/nvme0n1 --part 0 --create --label "PreLoader" --loader /EFI/systemd/PreLoader.efi
        
      • Add fallbacks
        cp ./HashTool.efi /boot/efi/EFI/BOOT/
        cp /boot/efi/EFI/systemd/systemd-bootx64.efi /boot/efi/EFI/BOOT/loader.efi
        cp ./PreLoader.efi /boot/efi/EFI/BOOT/BOOTx64.EFI
        
      • Ensure support for Microsoft infected devices
        mkdir -p /boot/efi/EFI/Microsoft/Boot
        cp ./PreLoader.efi /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
        cp ./HashTool.efi /boot/efi/EFI/Microsoft/Boot/
        cp /boot/efi/EFI/systemd/systemd-bootx64.efi /boot/efi/EFI/Microsoft/Boot/loader.efi
        
  • Install tea
    wget https://dl.gitea.io/tea/0.9.0/tea-0.9.0-linux-amd64 -O tea
    sudo install tea /usr/local/bin
    rm tea
    

Enhancement

  • Install Gnome Extension Manager

    • Install Extensions Clipboard Indicator
  • Sync NextCloud

    sudo -v ; curl https://rclone.org/install.sh | sudo bash
    rclone config # add remote
    cp ./services/rclone@.service ~/.config/systemd/user/
    systemctl --user daemon-reload
    systemctl --user enable rclone@nextcloud:Nextcloud
    systemctl --user start rclone@nextcloud:Nextcloud
    
  • Install oh-my-posh

    sudo wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/posh-linux-amd64 -O /usr/local/bin/oh-my-posh
    sudo chmod +x /usr/local/bin/oh-my-posh
    echo 'eval "$(oh-my-posh init bash --config ~/Nextcloud/.omp/manuel.omp.json)"' >> ~/.bashrc
    
  • Install logo-ls

    sudo wget https://github.com/Yash-Handa/logo-ls/releases/download/v1.3.7/logo-ls_amd64.deb -O logo-ls.deb
    sudo dpkg -i logo-ls.deb
    {
        echo "alias ls='logo-ls -D'"
        echo "alias ll='ls -al'"
        echo "alias l='ls'"
    } >> ~/.bashrc
    
  • Improve audio quality

    cp ./equalizer/Default.json ~/.var/app/com.github.wwmm.easyeffects/config/easyeffects/output/
    
  • Install python

    sudo apt install python3 python-is-python3 python3-pip
    
  • Install pyenv

    curl https://pyenv.run | bash
    {
      echo ""
      echo "# pyenv"
      echo 'export PYENV_ROOT="$HOME/.pyenv"'
      echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"'
      echo 'eval "$(pyenv init -)"'
      echo 'eval "$(pyenv virtualenv-init -)"'
    } >> ~/.bashrc
    

Post-Install

  • Add SSH-key to GitHub/Gitea websites
  • Add Caskaydia Cove Nerd Font Regular to /usr/share/font/opentype

Configuration

  • Desktop
    • Desktop Options
      • Super Key Action: Applications
  • Power
    • Power Saving Options
      • Disable "Automatic Screen Brightness"
    • Suspend & Power Button
      • Power Button Behavior: "Suspend"
      • Enable "Show Battery Percentage"
  • Mouse & Touchpad
    • Touchpad Scroll & Zoom Options
      • Enable "Natural Scrolling"
  • Date & Time
    • Time Format: 24-hour
  • OS Upgrade & Recovery
    • Update Recovery Partition