Groovyarcade is a Linux distribution for using your PC as a games station. It comes with batteries included so you can use your system on a CRT display, which are famously finicky when you’re trying to hook them up to a computer.

Its installation is outside of the scope of this blog post, although I did consider writing about my experience during it. Suffice to say that… it’s really easy. You may or may not need a second monitor during the process, but just stick to the recommended hardware. Or, if you’re feeling adventurous, look for AMD cards on craigslist or facebook marketplace with analog output (VGA or DVI-I). I’m using an OEM HD8450, which is not listed in the hardware suggestions page, but it did work regardless. Groovyarcade even told me, after finishing installation, that my GPU was ideal. How d’ya like that huh.

Groovyarcade works seamlessly with both attract mode and retroarch; with retroarch specifically you can leverage its CRT Switchres feature to change modesets on the fly, depending on the game you’re playing (for example, a 240p modeset for a NES game and a 480i one for a Dreamcast game).

Suffice to say, this is one of the coziest gaming setups known to man. But it began to show its cracks when I wanted to play other things besides emulators.

Let’s say you want to play crispy doom and appreciate the crisp 480 resolution on your CRT TV, or maybe you want to play Melty Blood via lutris. Well, you certainly can, (after installing everything of course), but you’d have to click desktop on the menu (which requires a keyboard, I asked on the discord, it seems they can’t make gamepads play nicely with the TUI menu groovyarcade uses, so you’d usually boot directly to a “frontend”, like retroarch or attract mode), burn your retinas with the image of a PC desktop in glorious 480i resolution, and fight constantly with that small real estate so you can boot up your non-retroarch, non-mame games.

Enter pegasus.

What is pegasus?

Pegasus is just a launcher for your games. That’s it. What’s interesting is that you can set it up as a frontend for groovyarcade. And that it can run any game, as long as you configure it. In the case of retroarch, you’d have to configure metadata collections so pegasus can detect your games. In the case of lutris, it detects them automatically.

Installing pegasus on groovyarcade

To install pegasus, simply head to the frontend setup inside the system configuration, present in groovyarcade’s TUI menu. It’ll ask you to install it if you haven’t. After that, you can set it up as your main frontend.

Configuring pegasus

Yes, manually creating those metadata files seems like no fun. That’s why we’ll use skyscraper. Install the prerequisites and run:

$ cd
$ mkdir skysource
$ cd skysource
$ wget -q -O - https://raw.githubusercontent.com/muldjord/skyscraper/master/update_skyscraper.sh | bash


After installing it, go to the .skyscraper directory inside your home directory. We will edit two files: artwork.xml and config.ini. Paste this into config.ini:

; --------------------------------------------------------------------
; Skyscraper by Lars Muldjord (https://github.com/Gemba/skyscraper)
; --------------------------------------------------------------------

[main]
frontend="pegasus"
inputFolder="/home/arcade/shared/roms"
videos="true"
symlink="true"

[esgamelist]
cacheRefresh="true"
cacheScreenshots="false"


The input folder is groovyarcade specific, and, for what I know, universal, unless you changed the user’s name from arcade to any other, in that case, modify it to suit your user.

And for artwork.xml:

<?xml version="1.0" encoding="UTF-8"?>
<artwork>
  <output type="screenshot" width="640"/>
  <output type="cover" width="640" height="480">
    <layer resource="cover" height="480" align="center" valign="middle">
      <gamebox side="wheel" rotate="90"/>
    </layer>
  </output>
  <output type="wheel" height="200"/>
</artwork>


The side attribute of gamebox corresponds to the filename of the artwork that skyscraper will download, don’t confuse it with how it will be shown.

That’s all for installing and setting up skyscraper.

Running skyscraper to generate the pegasus metadata files

For this, head to the directory skyscraper is installed (or, if it’s in the path, change ./Skyscraper for Skyscraper) and you will execute the following for each of your systems:

$ ./Skyscraper -s screenscraper -p $YOUR_SYSTEM
$ ./Skyscraper -p $YOUR_SYSTEM


I hacked a quick and dirty bash script to automate this, if you’re interested:

#!/bin/bash

# Modify with your systems of choice.
# If you're not sure how it is named, check the name of its directory
# in ~/shared/roms
systems=(dreamcast mame mastersystem megadrive n64 naomi2 neogeo nes pcengine psx)
# Modify with the path you downloaded skyscraper to. Or if it's in the path, delete this and
# use Skyscraper instead.
skyscraper=/opt/skyscraper-3.17.3/Skyscraper

for system in "${systems[@]}"; do
  $skyscraper -s screenscraper -p $system
  $skyscraper -p $system 
done

# Skyscraper will output everything to a RetroPie directory in your home folder,
# so let's just use rsync to copy that where it should really go.
rsync -av /home/arcade/RetroPie/ /home/arcade/shared/


Actually telling pegasus how to launch your games

Here comes the boring part. In each of your rom directories there’ll be a metadata.pegasus.txt file. Inside, it will have a line like this:

launch: something-other-than retroarch "{file.path}"


Well, for each and every metadata.pegasus.txt we’ll have to modify this line to something like this:

launch: retroarch -L /home/arcade/.config/retroarch/cores/your-core-of-choice.so "{file.path}"


I did consider writing another hacky bash script but quickly realized I am not really good at that: the script should check the directory it’s currently in (for example, if it’s scanning the dreamcast metadata file, it should know it’s inside the dreamcast directory) and, according to user input (perhaps a CLI argument) know with which core replace the launch command. Sounds easy but I’m not paying openAI for a subscription to generate sloppy scripts so I realized it’d be faster for me to edit these files manually. If a bash guru is reading this, I accept suggestions.

Anyways: you’ll have to edit that launch line for every metadata file. If you don’t know which core you’d like to use, you can check the emugen wiki. Every core, if you installed retroarch via groovyarcade and used advanced mode, should be installed in /home/arcade/.config/retroarch/cores. For example,for dreamcast games, you’d like to use flycast, whose core file is called flycast_libretro.so.

After this, launch pegasus, set up your source directories, and your collection should be ready.

Acknowledgements

YouCanTouCan for their pegasus tutorial on which this post is based. Thanks!