Skip to content
jing2uoPublic

About

declarative Wine prefix manager with GUI and CLI.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

cellar

A Wine prefix manager for Linux, in the spirit of Bottles, where each prefix is described by one declarative file, cellar.toml. The GUI, the command line and anything scripted (an AI agent included) all edit that same file, and cellar reconciles the prefix to match it.

The same engine doubles as the launcher inside Wine apps packaged for FlatPark: a package ships a cellar.toml and the vendor's installer, and cellar builds and maintains each user's prefix from it.

Features

  • Declarative prefixes: runner, locale, fonts, Windows version, virtual desktop, DPI, drives, winetricks verbs and apps, all in cellar.toml. plan shows what would change, apply makes it so, and run applies first whenever the file changed. Registry values cellar did not set are left alone.
  • Runners: the system Wine (in the Flatpak: org.winehq.Wine as flatpak installed it), or community builds downloaded on demand (Kron4ek vanilla / proton, Bottles' vaniglia). WoW64 builds run 32-bit programs with no 32-bit host libraries. Wine Gecko / Mono are off per prefix until turned on ([addons], or the create and settings dialogs); on, a prefix uses the runner's version unpacked where found (the runner's own, or in the Flatpak the org.winehq.Wine.gecko / .mono extensions), else Wine offers the download.
  • Fonts: core and CJK font sets copied into the prefix and wired up with font links and substitutes, so CJK text renders without manual registry work.
  • Dependencies: every winetricks verb, searchable, with the common ones described.
  • Apps: finds installed programs from Start menu shortcuts and drive_c, extracts their icons and adds desktop launchers.
  • Logs: every run is recorded (the last 20 per prefix), console output in the prefix's code page decoded for reading.
  • Import: brings over existing bottles, their DLL overrides and settings included, and prefixes of another cellar (the system-installed one's into the Flatpak, or the other way round).

Install

Releases carry two x86_64 binaries, with their SHA256SUMS:

  • cellar-x86_64: the GUI (Wails v3, GTK 4 / WebKitGTK 6) plus the full CLI
  • cellar-cli-x86_64: a static, GUI-less build of the CLI

Both want 7-Zip (7zz, or 7z from Debian's 7zip or p7zip) and cabextract on PATH: 7-Zip unpacks installers and Microsoft's core fonts (cabextract does those too), winetricks verbs need cabextract. The Flatpak brings both.

Builds of every commit are attached to the CI runs.

The Flatpak, org.flatpark.Cellar, is on FlatPark. It brings no Wine of its own: it uses org.winehq.Wine from Flathub when installed, or downloads a runner.

flatpak --user remote-add --if-not-exists flatpark https://dl.flatpark.org/flatpark.flatpakrepo
flatpak --user install flatpark org.flatpark.Cellar
flatpak --user install flathub org.winehq.Wine//stable-26.08   # optional

Usage

Run cellar with no arguments for the GUI, or use the CLI:

cellar new office --locale zh_CN        # create a prefix and apply it
cellar run office --exe ~/Downloads/setup.exe
cellar app discover office              # programs installed but not added yet
cellar app add office 'C:\Program Files\App\app.exe'
cellar run office/app

cellar config office winver=win10 dpi=144
cellar deps office add vcrun2022
cellar edit office                      # edit cellar.toml, then apply

cellar help lists every command. All of them accept --json. Data lives in $CELLAR_HOME, by default $XDG_DATA_HOME/cellar:

prefixes/<name>/cellar.toml   the declaration
prefixes/<name>/pfx/          the WINEPREFIX
prefixes/<name>/runs/         a log per run
runners/                      downloaded Wine builds

A minimal cellar.toml:

locale = "zh_CN"
font_sets = ["core", "cjk"]

[[apps]]
id = "notepadpp"
name = "Notepad++"
exe = 'C:\Program Files\Notepad++\notepad++.exe'

cellar inspect <prefix> prints the effective configuration, with the built-in defaults merged in.

Packaging Wine apps

packaging/examples holds FlatPark package examples (7-Zip, foobar2000, Notepad++). Each ships the vendor's installer unmodified as extra-data, and its cellar.toml says how to install it:

[install]
source = "7zip-setup.exe"
method = "run"      # run the installer in the user's prefix on first launch
args = ["/S"]

Inside a package, cellar with no arguments starts the default app, and the user's settings are changed the same way:

flatpak run --command=cellar org._7_zip.SevenZip config locale=ja_JP

Building

Requires Go (see go.mod).

make cli              # dist/cellar-cli: static, no cgo
make image && make gui  # dist/cellar: built in a podman container with the
                        # GTK 4 / WebKitGTK 6 dev packages
make test
make flatpak          # build and install the local Flatpak

Versions come from the vX.Y.Z tags (scripts/version.sh): a build after a release reports e.g. 0.1.0-3-gabc1234. To cut a release, run the release workflow and pick patch, minor or major; it tags the next version, builds and publishes it. Pushing a vX.Y.Z tag does the same.

License

GPL-3.0-or-later

About

declarative Wine prefix manager with GUI and CLI.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages