New Jolla Phone and new users - how to make life easy for daily users?

Il try again later think there is somthing i have missed its just tell me when i try to copy that part (kdeglobal) its not exist

Also in the Chum Store (shameless self-promotion)

5 Likes

VSCodium_Nq2L2kusC9

Now i did what u writed agian but the folder is not existing i cant be the only one with this issue

typo, missing s in kdeglobals

Try to use tab to complete words in the terminal as a way to avoid this kind of thing

2 Likes

Oh dident see that thx alot just copy pasted from his post/guide but yes should have seen that and not just copy paste like a headless

Sorry about the typo, I corrected it. You had also used a “\” which shouldn’t be there, when you first ran into problems.

Update:

I got SÀÀstöpankki Mobile now working on Jolla phone, as Tunnistus application was replaced by SP Mobile application itself.

First updated SP Mobile in my Android phone and set it up using Androids SP Tunnistus app. (Needed several trials for some unknown reason).

Uninstalled existing SP Mobile from Jolla phone and reinstalled it from Aurora store. Set it up using new Android phone’s SP Mobiili for “tunnistus”. This managed without problems.

3 Likes

This was super useful, thank you!!

It’s the first time in this forum i see some hints on how to make some banking apps work.

Could you elaborate a bit more on that topic?

Not which apps or banks work (there’s a post for that already), but what are the tools and how to use them, things like AAS-install-patcher, microg, i read zygisk somewhere but have no clue what it does.

What they do and how to use them, or if this info is somewhere and you can direct us that would also be really nice.

1 Like

So in short: microG is an open-source reimplementation of parts of Google Play Services. With the Jolla phone 2, you can install it while setting up the device. Otherwise, you have to use a specific F-droid repo. Just search the forum for microg and you’ll find instructions


AAS-Patcher:

  1. Install AAS-Patcher from storeman
  2. Install your banking app from aurora store.
  3. Deactivate AAS form system settings.
  4. Open the AAS-Installer patcher and look for your banking app. Change “Installer” from “aurora” to “play store”. Exit and restart AAS and try your banking app now. Some apps need to believe that their source is the play store. After an update, you might have to do this again, if I remember correctly.

Zygisk: no idea.

7 Likes

Thoughts on installing Obtainium on the J2, if it works?

Why not? Obtanium will work, I suppose. Personally I switch off AAS 99% of the time


2 Likes

hanswf
The list that Wintertijd created looks pretty basic. Much of it was already on Jolla 1. There was no messenger app on Jolla1 but lateron messenger apps became common everywhere , so it seems reasonable calling them basic too.

But e.g. what is with the people who don’t using messengers? Maybe you say those people doesn’t exist. That’s a personal view for me. Same e.g. with banking apps.

It’s hard to talk for all users here. In my world maybe other apps are basic as in your world. And that’s a good thing. A world with different views, ideas, people are better as an uniform one.

2 Likes

Guys, please. On topic.

Thanks to the author of this topic for stating the obvious and to @dopi04 for coming up with these steps on setting up the Jolla Phone.

As an IT person myself, I hate todo alot of manual work behind the screen, automation my goal in everything I do where ever possible.

The physical part comes with the hardware, the part I enjoy the most that for sure I don’t want any automaton/robots to take away from humans.

Anyways back on topic, using claude I decided to automate the steps laid out by @dopi04 post here and I will try to see how I get on now that my Jolla phone arrived in the post.

Moderators: Sharing the bash script below and if this is against forums TOS/TOC policy, I will remove or you can remove yourselves.

https://claude.ai/chat/ae97ba83-b643-447f-842d-70b4440cb466

2 Likes

That link is asking me to register with an email address.

Surely you could just share the script itself?

But that’s the rpoblem with all this AI bs: people don’t know what they’re doing anymore. They have no idea if what they were given works, what exactly it does, or if it’s even legitimate.

sigh

4 Likes

Of course I can, but dont want to get in trouble here if its not allowed?

Please wait for a Mod to advise and will save code here


[UPDATE] I have successull run the bash script after a second iteration was revised to work on my phone.

Will paste the console read out so anyone interested can see what has worked and what hasn’t so far!

jolla-setup.sh - Pastebin Service Note this pastebin will expires in 24hours

I recommend that you paste the script and the output in the separate spoilers as plain text here.

Not sure what you mean but I will attach to this post the 3 plain text files named as bash_script_files-09-10-2026-1750.tar.gz (note I had to rename this file to .targz as uploader would not allow any other file extension) unless I am doing something wrong.

I made these files availability more complicated than it is unfortanately.

  1. Readme.txt contains the steps you need carry out
  2. jolla-setup.sh.txt is the actual script, just rename
  3. jolla-setup_sh_6th_Iteration.log.txt - is my log after running the script on its 6th revision

bash_script_files-09-10-2026-1750.targz (13.4 KB)

Below are the 2 files in plain text attached to this post, better way of sharing to how it was done before here: New Jolla Phone and new users - how to make life easy for daily users? - #141 by spuddiver
Thx @filip.k

  1. jolla-setup.sh
#!/usr/bin/env bash
# =============================================================================
# jolla-setup.sh - automate the SSH-able parts of dopi04's Jolla J2 guide
# https://forum.sailfishos.org/t/new-jolla-phone-and-new-users-how-to-make-life-easy-for-daily-users/26070/96
#
# Run from your computer (Linux/macOS/WSL). Needs: ssh, scp, curl (+ jq only if
# you use ANDROID_PKGS). The phone must already have:
#   - Settings > System > Untrusted software > Allow untrusted software  (step 4a)
#   - Settings > System > Developer tools: Developer mode + Remote connection,
#     with a password set                                                (step 4b)
#
# Usage:
#   PHONE_IP=192.168.1.50 ./jolla-setup.sh            # full setup
#   PHONE_IP=... OLD_IP=192.168.1.40 ./jolla-setup.sh migrate-angelfish
#
# Tip: over USB cable in developer mode the phone is normally 192.168.2.15.
# For a stable Wi-Fi address (step 4c) a DHCP reservation on your router is
# safer than editing connman on the phone, which would drop your SSH session.
#
# You will be asked for the SSH password once, and the devel-su (root)
# password once (it is the same password you set in Developer tools).
# =============================================================================
set -uo pipefail

# ------------------------------- CONFIG --------------------------------------
PHONE_IP="${PHONE_IP:-192.168.??.??}"
PHONE_USER="${PHONE_USER:-defaultuser}"
PHONE_HOME="/home/${PHONE_USER}"

# Toggle sections (1 = do it, 0 = skip)
DO_SYSTEM_REFRESH="${DO_SYSTEM_REFRESH:-1}"       # step 7-8: pkcon refresh + wget/zypper/nano
DO_CHUM="${DO_CHUM:-1}"                 # step 5:   Chum GUI installer (checksum verified)
DO_STOREMAN="${DO_STOREMAN:-1}"             # step 9:   Storeman installer
DO_HOSTS_BLOCK="${DO_HOSTS_BLOCK:-1}"          # step 12:  system-wide ad blocking (needs Chum)
DO_AAS_PATCHER="${DO_AAS_PATCHER:-1}"          # step 14:  AAS installer patcher (OpenRepos)
DO_BITSAILOR="${DO_BITSAILOR:-1}"            # step 18:  Bitwarden client (OpenRepos)
DO_PATCHMANAGER="${DO_PATCHMANAGER:-1}"         # step 15A: patchmanager
INSTALL_ANGELFISH="${INSTALL_ANGELFISH:-0}"       # step 10:  Angelfish browser + qt-runner (+ dark theme)
INSTALL_ATLANTIC="${INSTALL_ATLANTIC:-0}"        # step 10:  alternative: Atlantic browser
DARK_ANGELFISH="${DARK_ANGELFISH:-0}"          # step 10:  BreezeDark colors for Angelfish
DO_PARTNERSPACE="${DO_PARTNERSPACE:-0}"         # step 15C/D: dconf write + lipstick restart (UI restarts!)
PARTNERSPACE_DESKTOP="/usr/share/applications/harbour-sfos-forum-viewer.desktop"
DO_BROWSER_PREFS="${DO_BROWSER_PREFS:-0}"        # step 11:  EXPERIMENTAL - writes user.js for stock browser

# Extra native packages to try (step 27). Names are best guesses; failures are
# reported but not fatal. Check names with: pkcon search name <term>
EXTRA_PKGS=()             # e.g. (pure-maps harbour-osmscout-server)

# Android apps from the official F-Droid repo, installed through AAS (step 24).
# Needs jq on this computer and Android App Support running on the phone.
ANDROID_PKGS=()           # e.g. (com.looker.droidify org.mozilla.fennec_fdroid)

# Web apps (step 13): "Name|URL|/path/to/icon.png" (requires INSTALL_ANGELFISH=1)
WEBAPPS=()                # e.g. ("YouTube|https://m.youtube.com/|$HOME/icons/youtube.png")

# URLs taken from the forum post / Chum site (check for newer versions!)
CHUM_RPM_URL="https://repo.sailfishos.org/obs/sailfishos:/chum/5.1_aarch64/noarch/sailfishos-chum-gui-installer-0.6.9-1.7.1.bso.noarch.rpm"
# The Chum web page lists 1bc5c216... but the repo serves a different build. The hash below
# is the build whose install scriptlets were read and checked (it only adds the Chum repo
# and starts the Chum GUI installer). Override with CHUM_RPM_SHA256=... if the file changes.
CHUM_RPM_SHA256="${CHUM_RPM_SHA256:-8ea4381c398800c7d17061191aebcc3ca65fb4ee4c1d02556c7395338f7b6962}"
STOREMAN_RPM_URL="https://openrepos.net/sites/default/files/packages/5928/harbour-storeman-installer-2.3.0-release10.noarch.rpm"
# -----------------------------------------------------------------------------

TARGET="${PHONE_USER}@${PHONE_IP}"
SSH_OPTS=(-o ControlMaster=auto -o "ControlPath=/tmp/jolla-ssh-%C"
          -o ControlPersist=20m -o StrictHostKeyChecking=accept-new)
REMOTE_WORK="/tmp/jolla-setup"

log()  { printf '\n\033[1;34m==> %s\033[0m\n' "$*"; }
warn() { printf '\033[1;33m!!  %s\033[0m\n' "$*" >&2; }
die()  { printf '\033[1;31mXX  %s\033[0m\n' "$*" >&2; exit 1; }
rssh() { ssh "${SSH_OPTS[@]}" "$TARGET" "$@"; }
rscp() { scp "${SSH_OPTS[@]}" "$@"; }

need() { command -v "$1" >/dev/null 2>&1 || die "Missing required tool on this computer: $1"; }

# --------------------------- root-side script --------------------------------
# Runs on the phone under ONE devel-su session. Failures are collected and
# summarised instead of aborting the whole run.
write_root_script() {
cat > "$1" <<'ROOT_EOF'
#!/bin/sh
# POSIX sh only: the phone's devel-su shell is not bash.
. /tmp/jolla-setup/env
cd /tmp/jolla-setup || exit 1
NFAIL=0
FAILED=""

fail()   { NFAIL=$((NFAIL+1)); FAILED="$FAILED
  - $*"; }
run()    { echo "+ $*"; "$@" || { echo "!! FAILED: $*"; fail "$*"; return 1; }; }
zi()     { run zypper --non-interactive --gpg-auto-import-keys install "$@"; }
zlocal() { run zypper --non-interactive --no-gpg-checks install "$@"; }   # unsigned local rpm
dl()     { run curl -fL --retry 3 -o "$2" "$1"; }
add_repo() { # name url
  if ssu lr 2>/dev/null | grep -qF "$1"; then echo "repo $1 already present"
  else run ssu ar "$1" "$2"; fi
}
have_chum() { ssu lr 2>/dev/null | grep -qi chum; }
TEMP_CHUM=0
# The Chum GUI installer removes itself (and with it the repo) once the Chum GUI app is
# installed; the GUI app then manages the repo itself. So add the repo directly, with the
# same command the installer uses, when it is missing.
ensure_chum() {
  have_chum && return 0
  echo "Chum repo not present - adding it directly"
  run ssu ar sailfishos-chum 'https://repo.sailfishos.org/obs/sailfishos:/chum/%(releaseMajorMinor)_%(arch)/'
  run ssu ur
  run zypper --non-interactive --gpg-auto-import-keys refresh
  TEMP_CHUM=1
  have_chum
}
step()   { printf '\n--- %s ---\n' "$*"; }

if [ "$DO_SYSTEM_REFRESH" = 1 ]; then
  step "Refresh + base tools (steps 7-8)"
  run pkcon refresh
  for p in zypper nano; do rpm -q "$p" >/dev/null 2>&1 && echo "$p already installed" || run pkcon install -y "$p"; done
fi

if [ "$DO_CHUM" = 1 ] && { have_chum || rpm -q sailfishos-chum-gui >/dev/null 2>&1; }; then
  step "Chum GUI installer (step 5)"; echo "Chum GUI app / repo already present - skipping installer"
elif [ "$DO_CHUM" = 1 ]; then
  step "Chum GUI installer (step 5)"
  if dl "$CHUM_RPM_URL" chum.rpm; then
    ACTUAL=$(sha256sum chum.rpm | cut -d' ' -f1)
    if [ "$ACTUAL" = "$CHUM_RPM_SHA256" ]; then
      zlocal chum.rpm
      echo "Waiting for the Chum GUI installer to finish (up to 3 min)..."
      i=0; while pgrep -f sailfishos-chum-gui-installer >/dev/null 2>&1 && [ "$i" -lt 36 ]; do sleep 5; i=$((i+1)); done
      run pkcon refresh
    else
      echo "!! Chum rpm checksum mismatch - NOT installing"
      echo "   expected: $CHUM_RPM_SHA256"
      echo "   actual:   $ACTUAL"
      echo "   If you have verified the actual hash (see Chum page / GitHub), re-run with:"
      echo "   CHUM_RPM_SHA256=$ACTUAL ./jolla-setup.sh"
      fail "chum checksum"
    fi
  fi
fi
need_chum() { # label
  if ensure_chum; then return 0; fi
  echo "-- skipping $1: could not set up the Chum repo"
  fail "$1 skipped (no Chum repo)"; return 1
}

if [ "$DO_STOREMAN" = 1 ]; then
  step "Storeman installer (step 9)"
  if rpm -q harbour-storeman >/dev/null 2>&1; then echo "Storeman already installed - skipping installer"
  else dl "$STOREMAN_RPM_URL" storeman.rpm && zlocal storeman.rpm; fi
fi

if [ "$DO_HOSTS_BLOCK" = 1 ]; then
  step "hosts-block (step 12)"
  if rpm -q hosts-block >/dev/null 2>&1; then echo "hosts-block already installed"; else need_chum hosts-block && zi hosts-block; fi   # zypper: pkcon cannot install this package
fi

if [ "$DO_AAS_PATCHER" = 1 ] || [ "$DO_BITSAILOR" = 1 ] || [ "$DO_PATCHMANAGER" = 1 ]; then
  step "OpenRepos: Rikudou_Sennin repo (steps 14, 18)"
  add_repo openrepos-Rikudou_Sennin https://sailfish.openrepos.net/Rikudou_Sennin/personal/main
  run zypper --non-interactive --gpg-auto-import-keys refresh
fi
[ "$DO_AAS_PATCHER" = 1 ]  && zi harbour-aas-installer-patcher
[ "$DO_BITSAILOR" = 1 ]    && zi harbour-bitsailor
if [ "$DO_PATCHMANAGER" = 1 ]; then step "patchmanager (step 15A)"; if rpm -q patchmanager >/dev/null 2>&1; then echo "patchmanager already installed"; else need_chum patchmanager && zi patchmanager; fi; fi

if [ "$INSTALL_ANGELFISH" = 1 ]; then
  step "Angelfish + qt-runner (step 10)"
  add_repo piggz-qt6-apps  https://repo.sailfishos.org/obs/home:/piggz:/qt6apps/sailfish_5.1_aarch64/
  add_repo piggz-qt6sb2    https://repo.sailfishos.org/obs/home:/piggz:/qt6sb2/sailfish_51_aarch64/
  run zypper --non-interactive --gpg-auto-import-keys refresh
  dl https://repo.sailfishos.org/obs/sailfishos:/chum/5.0_aarch64/aarch64/qt-runner-0.4.6-1.9.1.bso.aarch64.rpm qt-runner.rpm
  dl https://repo.sailfishos.org/obs/sailfishos:/chum/5.0_i486/noarch/qt-runner-qt6-0.4.6-1.9.1.bso.noarch.rpm qt-runner-qt6.rpm
  zlocal qt-runner.rpm
  zlocal qt-runner-qt6.rpm
  zi angelfish
fi

if [ "$INSTALL_ATLANTIC" = 1 ]; then
  step "Atlantic browser (step 10, alternative)"
  add_repo openrepos-mrbn100ful https://sailfish.openrepos.net/mrbn100ful/personal/main
  run zypper --non-interactive --gpg-auto-import-keys refresh
  zi atlantic-browser
fi

if [ -n "$EXTRA_PKGS" ]; then
  step "Extra packages (step 27)"
  need_chum "extra packages" && for p in $EXTRA_PKGS; do zi "$p"; done
fi

if [ "$TEMP_CHUM" = 1 ] && rpm -q sailfishos-chum-gui >/dev/null 2>&1; then
  echo "Chum GUI app is installed: removing the temporary repo entry (the Chum app enables it itself)"
  run ssu rr sailfishos-chum; run ssu ur
  echo "NOTE: open the Chum app once and enable the repo there for future updates."
fi
echo
if [ "$NFAIL" -eq 0 ]; then echo "ROOT PHASE: all steps OK"
else echo "ROOT PHASE: $NFAIL problem(s):$FAILED"; fi
ROOT_EOF
}

# ------------------------------ user-side steps ------------------------------
dark_angelfish() {
  log "Angelfish dark colours (step 10)"
  # NOTE: the post wgets the github /blob/ URL, which returns an HTML page.
  # The raw URL is needed to get the actual colour scheme.
  local tmp; tmp="$(mktemp)"
  curl -fsSL -o "$tmp" https://raw.githubusercontent.com/KDE/qqc2-breeze-style/master/style/BreezeDark.colors \
    || { warn "could not download BreezeDark.colors"; return; }
  rssh "mkdir -p ${PHONE_HOME}/.config"
  rscp "$tmp" "${TARGET}:${PHONE_HOME}/.config/kdeglobals" && echo "installed ~/.config/kdeglobals"
  rm -f "$tmp"
  echo "On the phone: QT Runner > default settings > Override DPI (~300), then start Angelfish."
}

webapps() {
  log "Web apps (step 13)"
  local entry name url icon dest tmp
  for entry in "${WEBAPPS[@]}"; do
    IFS='|' read -r name url icon <<<"$entry"
    [ -f "$icon" ] || { warn "icon not found for $name: $icon"; continue; }
    dest="${PHONE_HOME}/Downloads/Icons/$(basename "$icon")"
    rssh "mkdir -p ${PHONE_HOME}/Downloads/Icons ${PHONE_HOME}/.local/share/applications"
    rscp "$icon" "${TARGET}:${dest}"
    tmp="$(mktemp)"
    cat > "$tmp" <<EOF
[Desktop Entry]
Type=Application
Name=${name}
Icon=${dest}
URL=${url}
Exec=qt-runner angelfish-webapp sailfish-browser-${name}-0.desktop
Comment=${name}
X-Nemo-Single-Instance=no
EOF
    rscp "$tmp" "${TARGET}:${PHONE_HOME}/.local/share/applications/sailfish-browser-${name}-0.desktop" \
      && echo "created web app: $name"
    rm -f "$tmp"
  done
}

browser_prefs() {
  log "Stock browser prefs (step 11) - EXPERIMENTAL"
  rssh 'bash -s' <<'EOF'
prefs=$(find "$HOME/.local/share" "$HOME/.mozilla" -name prefs.js 2>/dev/null | head -n1)
if [ -z "$prefs" ]; then
  echo "No browser profile found - open the stock browser once, close it, and re-run."
  exit 0
fi
dir=$(dirname "$prefs")
cat >> "$dir/user.js" <<'PREFS'
user_pref("layout.css.devPixelsPerPx", "3");
user_pref("network.trr.default_provider_uri", "https://dns.adguard-dns.com/dns-query");
user_pref("network.trr.mode", 3);
PREFS
echo "Wrote $dir/user.js (close and reopen the browser; verify in about:config)"
EOF
}

partnerspace() {
  log "Partnerspace (step 15C/D)"
  rssh "rpm -q patchmanager >/dev/null 2>&1" || { warn "patchmanager is not installed - skipping Partnerspace"; return; }
  rssh "test -f '$PARTNERSPACE_DESKTOP'" || { warn "$PARTNERSPACE_DESKTOP not found on the phone (install the forum viewer app first) - skipping Partnerspace"; return; }
  warn "Activate the 'Blur Partnerspace Background' patch in Patchmanager FIRST (manual, step 15B)."
  rssh 'bash -s' "$PARTNERSPACE_DESKTOP" <<'EOF'
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/dbus/user_bus_socket"
dconf write /desktop/lipstick-jolla-home/partnerspace/applications "['$1']"
echo "partnerspace set to $1"
systemctl --user restart lipstick && echo "lipstick restarted"
EOF
}

android_apps() {
  log "Android apps via F-Droid + AAS (step 24)"
  need jq
  local pkg code apk url
  for pkg in "${ANDROID_PKGS[@]}"; do
    code="$(curl -fsS "https://f-droid.org/api/v1/packages/${pkg}" | jq -r '.suggestedVersionCode // empty')"
    [ -n "$code" ] || { warn "$pkg: not found on F-Droid"; continue; }
    apk="${pkg}_${code}.apk"; url="https://f-droid.org/repo/${apk}"
    curl -fsSL -o "/tmp/${apk}" "$url" || { warn "$pkg: download failed"; continue; }
    rscp "/tmp/${apk}" "${TARGET}:${PHONE_HOME}/Downloads/${apk}"
    rssh "apkd-install ${PHONE_HOME}/Downloads/${apk}" || warn "$pkg: apkd-install failed (is Android App Support running?)"
    rm -f "/tmp/${apk}"
  done
}

migrate_angelfish() {
  # Fixed version of step 19B: streams the config from the old phone straight
  # into the new one, preserving paths (the post's scp lines contain typos).
  [ -n "${OLD_IP:-}" ] || die "Set OLD_IP=<old phone address>"
  local old="${PHONE_USER}@${OLD_IP}"
  log "Migrating Angelfish config ${OLD_IP} -> ${PHONE_IP}"
  ssh "${SSH_OPTS[@]}" "$old" true || die "cannot reach old phone"
  rssh true || die "cannot reach new phone"
  ssh "${SSH_OPTS[@]}" "$old" "cd ${PHONE_HOME} && tar -cf - .config/angelfishrc .config/angelfish .local/share/KDE/angelfish .local/state/angelfishstaterc" \
    | rssh "cd ${PHONE_HOME} && mkdir -p .config .local/share/KDE .local/state && tar -xf -" \
    && echo "done" || warn "transfer reported errors (a missing file on the old phone makes tar complain)"
}

# ----------------------------------- main ------------------------------------
main() {
  need ssh; need scp; need curl
  case "${1:-all}" in
    migrate-angelfish) migrate_angelfish; exit 0 ;;
    all) ;;
    *) die "Unknown command: $1" ;;
  esac

  log "Connecting to ${TARGET} (enter the SSH password once)"
  rssh true || die "SSH failed. Is Remote connection enabled and ${PHONE_IP} correct?"

  log "Uploading setup files"
  local tmp; tmp="$(mktemp -d)"
  write_root_script "$tmp/root.sh"
  { for v in DO_SYSTEM_REFRESH DO_CHUM DO_STOREMAN DO_HOSTS_BLOCK DO_AAS_PATCHER DO_BITSAILOR \
             DO_PATCHMANAGER INSTALL_ANGELFISH INSTALL_ATLANTIC CHUM_RPM_URL CHUM_RPM_SHA256 STOREMAN_RPM_URL; do
      printf "%s='%s'\n" "$v" "${!v}"
    done
    printf "EXTRA_PKGS='%s'\n" "${EXTRA_PKGS[*]-}"
  } > "$tmp/env"
  rssh "mkdir -p ${REMOTE_WORK}"
  rscp "$tmp/root.sh" "$tmp/env" "${TARGET}:${REMOTE_WORK}/"
  rm -rf "$tmp"

  log "Root phase (enter the devel-su password once)"
  ssh -t "${SSH_OPTS[@]}" "$TARGET" "devel-su sh ${REMOTE_WORK}/root.sh"

  [ "$DARK_ANGELFISH" = 1 ]        && dark_angelfish
  [ "${#WEBAPPS[@]}" -gt 0 ]       && webapps
  [ "$DO_BROWSER_PREFS" = 1 ]      && browser_prefs
  [ "${#ANDROID_PKGS[@]}" -gt 0 ]  && android_apps
  [ "$DO_PARTNERSPACE" = 1 ]       && partnerspace

  rssh "rm -rf ${REMOTE_WORK}" 2>/dev/null || true

  cat <<'EOF'

==> Still manual (needs the phone UI or your private data):
  1-2  Wi-Fi, Jolla account, initial AAS/microG/F-Droid/Aurora choices
  3    Settings > Sailfish OS updates
  4c   Static IP (or use a DHCP reservation on your router)
  15B  Patchmanager > Web Catalog > Blur Partnerspace Background, enable daemon + patch
  16   WireGuard: Settings > System > VPN > Import file
  17-18 Accounts, Bitwarden API key in BitSailor
  19   Backup restore / contacts.vcf import
  20-22 Android dark theme, emoji keyboard, APN/MMS settings
  23   Test calls/SMS/MMS/data
  24F  AAS Installer Patcher per-app switch (needs AAS stopped)
  25-27 Remaining settings, Pure Maps / OSM Scout offline maps, HERE API key
EOF
}

main "$@"
  1. Readme.txt
Readme.txt
  1. Ensure a static IP address is assigned on your router so your phone wifi connection is always assigned same IP
  2. Run from your computer (Linux/macOS/WSL). Needs: ssh, scp, curl (+ jq only if

you use ANDROID_PKGS). The phone must already have:

  • Settings > System > Untrusted software > Allow untrusted software (step 4a)

- Settings > System > Developer tools: Developer mode + Remote connection,

with a password set

  1. Rename jolla-setup.sh.txt to jolla-setup.sh & Copy to the box you will use a terminal console session from.
    Ensure the .sh file is set to “execute permission” aka “sudo chmod +x jolla-setup.sh”

  2. Open terminal prompt, run the following ssh command ssh from sam location you saved the .sh file - to securely connect to JollaPhone & send commands from:
    sudo PHONE_IP=192.168.1.181 ./jolla-setup.sh

NOTE: ensure you set ssh pass as discussed in Step 2
Ensure you tab the ‘orb’ to enable remote ssh connection