Bazaar App Visibility and Filtering#
Overview#
Bazaar's visible app catalog is controlled by two complementary YAML files shipped in projectbluefin/common under /etc/bazaar/:
| File | Purpose | Runtime Path |
|---|---|---|
blocklist.yaml | Hard-blocks specific app IDs from appearing or installing | /run/host/etc/bazaar/blocklist.yaml |
curated.yaml | Defines the curated sections, layout, styling, and app lists shown in Bazaar | /run/host/etc/bazaar/curated.yaml |
These paths are declared in bazaar.yaml as yaml-blocklist-paths and curated-config-paths respectively.
Tier 1: blocklist.yaml#
blocklist.yaml enumerates app IDs that Bazaar will never show or allow to install. The current blocklist covers:
- Terminal-based editors:
com.visualstudio.code-oss,com.vscodium.codium-insiders,io.neovim.nvim,org.vim.Vim,io.github.zyedidia.micro,com.helix_editor.Helix,org.gnu.emacs - System tools already handled elsewhere:
app.devsuite.Ptyxis,org.freedesktop.fwupd - The Bazaar app itself:
io.github.kolunmi.Bazaar
Note: The Flatpak versions of VS Code (
com.visualstudio.code) and VSCodium (com.vscodium.codium) are not in the blocklist — they are handled by the hook system instead (see below).
Tier 2: curated.yaml#
curated.yaml defines the entire curated storefront — sectioned rows with custom CSS, banner images, and explicit appids lists. Sections currently include :
| Section | Example Apps |
|---|---|
| Bluefin Recommends | Gradia, Fotema, Damask |
| Browsers | Firefox, Chrome, Brave, Edge |
| Media | Spotify, VLC, EasyEffects |
| Office & Productivity | LibreOffice, Blender, GIMP, Obsidian |
| Games | Steam, Lutris, Heroic, Discord |
| Utilities | Warp, PikaBackup, Cryptomator |
| Developers | Podman Desktop, GNOME Builder, DBeaver |
| Sustainability & Education | TurboWarp, EndlessOS Key |
| AI and Machine Learning | Alpaca, Jan |
Each section specifies separate light-banner / dark-banner images and custom CSS class names for theming. To feature a new app, add its Flathub app ID to the appropriate section's appids list and verify it is not present in blocklist.yaml .
Before-Transaction Hooks#
Two before-transaction hooks are declared in bazaar.yaml and executed via hooks.py at /run/host/etc/bazaar/hooks.py. These intercept install transactions before they complete, show a dialog, and either deny the Flatpak install or launch an alternative installer.
Hook: jetbrains-toolbox#
Triggers on: any com.jetbrains.* app ID, plus com.google.AndroidStudio
Dialog: "JetBrains IDEs are not supported in this format" — offers Cancel or Download JetBrains Toolbox
Outcome:
- If user clicks "Download JetBrains Toolbox" → runs
ujust install-jetbrains-toolboxviaflatpak-spawn --host - Regardless of user choice, the Flatpak install is always denied (
teardownreturnsdeny)
Hook: code#
Triggers on: com.visualstudio.code and com.vscodium.codium
Dialog: "VS Code like IDEs are not supported in this format" — offers Cancel or Download from Homebrew
Outcome:
- If user clicks "Download from Homebrew":
com.vscodium.codium→ installsublue-os/tap/vscodium-linuxvia Homebrewcom.visualstudio.code→ installsublue-os/tap/visual-studio-code-linuxvia Homebrew
- Flatpak install is always denied
Hook Execution Flow#
User clicks Install in Bazaar
│
▼
before-transaction hook fires
│
├─ setup: does this appid match? → pass (skip) or ok (proceed)
├─ setup-dialog: show warning dialog
├─ teardown-dialog: user chose action or cancel
├─ action: spawn alternative installer (detached)
└─ teardown: return 'deny' → Flatpak install blocked
Both scripts share the same logic. /usr/libexec/bazaar-hook is the system-installed copy; hooks.py is the etc-side copy invoked by Bazaar as exec python3 /run/host/etc/bazaar/hooks.py . The alternative installer is spawned as a detached process via flatpak-spawn --host so it escapes the Flatpak sandbox .
Key Files#
| File | Description |
|---|---|
system_files/bluefin/etc/bazaar/bazaar.yaml | Main Bazaar config: blocklist path, curated config path, hook definitions |
system_files/bluefin/etc/bazaar/blocklist.yaml | Hard-blocked app IDs |
system_files/bluefin/etc/bazaar/curated.yaml | Curated sections, app lists, CSS, and banner config |
system_files/bluefin/etc/bazaar/hooks.py | Hook handler: JetBrains → ujust, VS Code → Homebrew |
system_files/bluefin/usr/libexec/bazaar-hook | Hook runner binary (mirrors hooks.py) |
This system was introduced in PR #254 ("Hooks for bazaar"), which added the before-transaction hook infrastructure and VS Code/JetBrains redirect logic.
Contributing#
To add an app to a curated section, follow the contributing guide : add the Flathub app ID to the desired section in curated.yaml and confirm it is absent from blocklist.yaml. Blocked apps should never be added to curated sections .
For upstream Bazaar hook documentation, see the Bazaar hooks overview.