Skip to content

Get software

On a Frostyard image, the image owns /usr. It is read-only, and an update replaces it. Add your software on top, with the tool that fits.

You want Use Go to
A desktop app Flatpak Flatpak
A command-line tool Homebrew Homebrew
A service, a daemon, or a tool that needs /usr or root A system extension System extensions
A Debian package, or another distribution Distrobox Distrobox

Do not install APT packages into /usr: an image update does not keep them.

Use Flatpak for desktop apps. Snow, Snowfield, and Sundog include Flatpak and the Flathub remote. Floe has no Flatpak: use another tool on it.

Find and install an app:

Terminal window
flatpak search NAME
flatpak install flathub APP_ID

Check that it is there:

Terminal window
flatpak list --app

The app is in the list.

Flatpak apps do not update by themselves unless you turn that on. Update them with flatpak update, ChairLift, Bazaar (Snow, Snowfield), or Discover (Sundog). Bazaar and Discover each have an automatic update setting, which is off by default.

  • Snow, Snowfield, and Sundog carry Bazaar, an app store, in their core Flatpak set. Firn installs the set only if your install recipe includes it. On Sundog, the app store is Discover: Sundog turns off Bazaar’s background service.
  • Frostyard’s own Flatpak remote has 3 apps: Igloo, Frostnotes, and Frostmail. Add it as a user remote. Each page has the steps. Their runtimes come from Flathub.
  • A desktop app for frostread is planned. Frostnotes and Frostmail work on their own, without lodge. You opt into lodge for each app.
  • Some desktop apps are system extensions in the catalog instead, for example Visual Studio Code and 1Password. See the catalog.

Use Homebrew for command-line tools. Snow, Snowfield, Sundog, and Floe include it. At first boot, brew-setup.service unpacks it into /var/home/linuxbrew. The service runs only while /var/home/linuxbrew/.linuxbrew does not exist, and it gives Homebrew to UID 1000. That is the first user you create.

Check that your shell finds it:

Terminal window
brew --version

You see a version. If the shell says the command is not found, you are probably in bash: fish loads Homebrew on its own. Add this line to ~/.bashrc, then open a new terminal:

Terminal window
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

Install a tool, then list what you have:

Terminal window
brew install NAME
brew list

Homebrew updates itself. brew update runs 10 minutes after boot, then about every 6 hours. brew upgrade runs 30 minutes after boot, then about every 8 hours. On Snow, Snowfield, and Sundog, ChairLift updates Homebrew too.

The images ship Brewfile bundles of recommended tools:

  • Snow and Snowfield: /usr/share/snow/bundles/cli.Brewfile and /usr/share/snow/bundles/fonts.Brewfile.
  • Floe: /usr/share/floe/bundles/cli.Brewfile.

Sundog has no bundle file.

Install one with brew bundle --file=PATH. On Snow and Snowfield, ChairLift can also install curated bundles.

Frostyard’s Homebrew tap, frostyard/tap, has 2 casks: nsl and chairlift. The nsl page uses it to install the nsl CLI.

Use a system extension for a service, a daemon, or a tool that must be in /usr or run as root. Docker, Incus, and Tailscale are examples. Every image carries a definition for each extension in the catalog, switched off. The extension itself is not in the image: Updex turns it on and downloads it. An enabled extension updates on its own: a new version is staged and starts at the next boot. See Automatic updates.

Start with Manage extensions. The catalog lists every extension.

Use Distrobox for a mutable Debian, or another distribution where apt works. Snow, Snowfield, Sundog, and Floe ship Podman and Distrobox.

Terminal window
distrobox create --name NAME --image IMAGE
distrobox enter NAME

You are now in the container, and its package manager works there. Read distrobox.it for the rest.

For a whole Linux machine, use nsl. Images are built from the Frostyard APT repository and update as a whole: you do not add it to an image.