Persistindo Saves de Jogos com Repositórios GitHub

Um guia prático mostrando como automatizar o backup dos saves e save states do RetroArch no R36S usando Git e GitHub. Inclui passos para configurar SSH, criar repositórios, e agendar commits automáticos com cron.


r36s, shell, git, github

R36S – Persistindo Saves de Jogos com Repositórios GitHub

Recentemente comprei um emulador portátil R36S e, depois de apagar tudo e instalar uma nova distro do zero, minha primeira ação foi garantir que os saves dos jogos fossem persistidos.

Por quê?
Porque, ao longo dos anos, perder saves de jogos foi uma das experiências mais frustrantes para mim. Analisei algumas formas de implementar soluções de armazenamento em nuvem — como Dropbox, Google Drive e OneDrive — mas, depois de um tempo, percebi que repositórios Git pareciam ser a melhor opção.

Um repositório Git permite que esses pequenos arquivos sejam armazenados com seus diferentes históricos de versões ao longo do tempo.
Não acredito que o repositório vá crescer muito, e não pretendo abusar dele, então vou usar o GitHub como repositório remoto.
Se ele ficar muito grande, posso trocar o remoto ou ajustar minha estratégia mais tarde.


Configurando as Pastas de Save do RetroArch

A primeira coisa que fiz foi alterar o diretório dos arquivos de save, saindo das pastas individuais de cada ROM e apontando para a pasta global /home/ark/.config/retroarch/saves/

Tela de settings do RetroArch

Abra o RetroArch e vá até o menu Settings > Directory > Save Files

Tela de settings do RetroArch

Faça o mesmo para Save States

Tela de settings do RetroArch

Não se esqueça de salvar suas configurações antes de sair.

Em seguida, criei dois repositórios privados no GitHub:
k36-saves e k36-states.

Repositório GitHub

Criando as Chaves SSH

Depois de ativar o Wi-Fi ou LAN no seu R36S, faça login por SSH usando o método que preferir (SSH, SSH via WSL, PuTTY etc.).

No meu caso, usei o seguinte comando:

ssh -o PreferredAuthentications=password ark@192.168.0.12

Quando solicitado, usei a senha padrão: ark

Agora podemos criar as chaves SSH:

ssh-keygen -t rsa

Isso vai criar um par de chaves pública/privada na pasta home do usuário.
Copie o conteúdo do arquivo /home/ark/.ssh/id_rsa.pub e cole em Settings > SSH and GPG Keys da sua conta no GitHub.

Se você tiver outros repositórios, recomendo criar uma conta separada, já que essa chave dá acesso total de escrita aos seus repositórios.

Criando os Repositórios Locais

Agora, vamos até a pasta de saves mencionada e inicializar o repositório lá:

cd /home/ark/.config/retroarch/saves/
git init
git remote add origin git@github.com:viniciusrezende/k36-saves.git
git checkout -b main

Substitua a URL remota pela do seu próprio repositório.
Repita o mesmo processo para a pasta states.

Enquanto estamos aqui, vamos configurar as informações globais do usuário Git:

git config --global user.email "ark@viniciusrezende.com.br"
git config --global user.name "ArkOS k36"

Criando o Script de Auto-Commit / Auto-Push

Agora, vamos criar o script na pasta home:

touch ~/pushgit.sh
chmod +x ~/pushgit.sh
nano ~/pushgit.sh

Em seguida, cole o conteúdo abaixo:

set -e
timestamp=$(date +"%Y-%m-%d %H:%M:%S")

cd /home/ark/.config/retroarch/saves
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
  exit 1
fi
if [[ -n "$(git status --porcelain)" ]]; then
  git add -A
  git commit -m "Auto commit: $timestamp"
fi
git push origin main

cd /home/ark/.config/retroarch/states
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
  exit 1
fi
if [[ -n "$(git status --porcelain)" ]]; then
  git add -A
  git commit -m "Auto commit: $timestamp"
fi
git push origin main

Adicionando o Evento no Cron

Por fim, abra o crontab com o comando crontab -e e adicione a seguinte linha:

*/5 * * * * bash /home/ark/pushgit.sh

Isso fará com que o script seja executado a cada 5 minutos, enviando automaticamente as alterações para o GitHub.

Extra

Enquanto escrevia este tutorial, tive alguns problemas para tirar screenshots do R36S.
Para quem tiver curiosidade, usei o seguinte comando:

sudo ffmpeg -f kmsgrab -i - -frames:v 1 -vf "hwdownload,format=bgr0" screenshot.png