summaryrefslogtreecommitdiff
path: root/build_files/patch-bazzite-deck-identity.sh
blob: 05b6e5f8af97fa1ab11883494325458285ab5074 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/bash

set -euo pipefail

root="${AEROCORE_DECK_COMPAT_ROOT:-}"
root="${root%/}"

target_path() {
  printf '%s%s\n' "$root" "$1"
}

patch_condition() {
  local file="$1"
  local old_condition="$2"
  local new_condition="$3"
  local expected_count="$4"
  local old_count new_count patched_file

  if [[ ! -f "$file" ]]; then
    echo "Unable to locate expected Bazzite Deck file: $file" >&2
    exit 1
  fi

  new_count="$(grep -Foc "$new_condition" "$file" || true)"
  if [[ "$new_count" -eq "$expected_count" ]]; then
    return 0
  fi

  old_count="$(grep -Foc "$old_condition" "$file" || true)"
  if [[ "$old_count" -ne "$expected_count" ]]; then
    echo "Unable to locate the expected Bazzite Deck image check in $file" >&2
    echo "Expected $expected_count occurrence(s), found old=$old_count new=$new_count" >&2
    exit 1
  fi

  patched_file="$(mktemp)"
  awk \
    -v old_condition="$old_condition" \
    -v new_condition="$new_condition" \
    ' {
      position = index($0, old_condition)
      if (position) {
        $0 = substr($0, 1, position - 1) new_condition substr($0, position + length(old_condition))
      }
      print
    }' "$file" > "$patched_file"

  cp "$patched_file" "$file"
  rm -f "$patched_file"

  new_count="$(grep -Foc "$new_condition" "$file" || true)"
  if [[ "$new_count" -ne "$expected_count" ]]; then
    echo "Failed to patch the Bazzite Deck image check in $file" >&2
    exit 1
  fi
}

# Keep AeroCore's public image-name, while restoring the Deck capability checks
# used by Bazzite's runtime scripts. These are literal source lines; variable
# expansion must happen later, when the scripts run on the installed system.
# shellcheck disable=SC2016
patch_condition \
  "${1:-$(target_path /usr/libexec/bazzite-hardware-setup)}" \
  'if [[ "$IMAGE_NAME" != *deck* && "$IMAGE_NAME" != *dx* ]]; then' \
  'if [[ "$IMAGE_NAME" != aerocore-os && "$IMAGE_NAME" != *deck* && "$IMAGE_NAME" != *dx* ]]; then' \
  1

# The hardware setup has a second Deck-only block after the top-level image
# guard. Keep it active for AeroCore as well.
# shellcheck disable=SC2016
patch_condition \
  "${1:-$(target_path /usr/libexec/bazzite-hardware-setup)}" \
  'if [[ $IMAGE_NAME =~ "deck" || $IMAGE_NAME =~ "ally" ]]; then' \
  'if [[ $IMAGE_NAME =~ "deck" || $IMAGE_NAME =~ "ally" || $IMAGE_NAME == aerocore-os ]]; then' \
  1

# bazzite-steam gates the Steam bootstrap archive and -steamdeck flag on the
# image name. The user setup script has the same Deck-only gating in three
# places.
# shellcheck disable=SC2016
patch_condition \
  "$(target_path /usr/bin/bazzite-steam)" \
  'if [[ $IMAGE_NAME =~ "deck" ]]; then' \
  'if [[ $IMAGE_NAME =~ "deck" || $IMAGE_NAME == aerocore-os ]]; then' \
  1

# shellcheck disable=SC2016
patch_condition \
  "$(target_path /usr/libexec/bazzite-user-setup)" \
  'if [[ $IMAGE_NAME =~ "deck" || $IMAGE_NAME =~ "ally" ]]; then' \
  'if [[ $IMAGE_NAME =~ "deck" || $IMAGE_NAME =~ "ally" || $IMAGE_NAME == aerocore-os ]]; then' \
  3