A new app store for GNOME with a focus on discovering and installing applications and add-ons from Flatpak remotes, particularly Flathub. It emphasizes supporting the developers who make the Linux desktop possible. Bazaar features a "curated" tab that can be configured by distributors to allow for a more locallized experience.
Bazaar is fast and highly multi-threaded, guaranteeing a smooth experience in the user interface. You can queue as many downloads as you wish and run them while perusing Flathub's latest releases. This is due to the UI being completely decoupled from all backend operations.
It runs as a service, meaning state will be maintained even if you close all windows, and implements the gnome-shell search provider dbus interface. A krunner plugin is available for use on the KDE Plasma desktop.
Thanks to everyone in the GNOME development community for creating such an awesome desktop environment!
If you would like to try this project on your local machine, clone it on the cli and type these commands inside the project root:
meson setup build --prefix=/usr/local
ninja -C build
sudo ninja -C build install
bazaar window --auto-serviceYou will need the following dependencies installed, along with a C compiler, meson, and ninja:
| Dep Name | pkg-config Name |
Min Version | Justification |
|---|---|---|---|
| gtk4 | gtk4 |
enforced by libadwaita | GUI |
| libadwaita | libadwaita-1 |
1.7 |
GNOME styling |
| libdex | libdex-1 |
0.9 |
Async helpers |
| flatpak | flatpak |
1.9 |
Flatpak installation management |
| appstream | appstream |
1.0 |
Download application metadata |
| xmlb | xmlb |
0.3.4 |
Handle binary xml appstream bundles/Parse plain xml |
| glycin | glycin-1 |
1.0 |
Retrieve and decode image uris |
| glycin-gtk4 | glycin-gtk4-1 |
1.0 |
Convert glycin frames to GdkTextures |
| libyaml | yaml-0.1 |
0.2.5 |
Parse YAML configs |
| libsoup | libsoup-3.0 |
3.6.0 |
HTTP operations |
| json-glib | json-glib-1.0 |
1.10.0 |
Parse HTTP replies from Flathub |
If you would like to support me and the development of this application (Thank you!), I have a ko-fi here! https://ko-fi.com/kolunmi
If you are a user, this section should be irrelevant to you, but it still may be interesting.
Note: the screenshots below are extremely outdated.
As of writing, the browser does not show anything unless you customize it by detailing "sections" inside any number of YAML configuration files at locations of your choosing. I will walk you through how to create one of these YAML files, but first Bazaar needs to know where to look for them.
Inside meson_options.txt you will see an option named
hardcoded_content_config_path. This compile time option optionally
specifies a filepath from which to load the "default" configuration at
runtime. This file is NOT embedded into the binary. In case you are
unfamiliar with meson options, simply add the following to your setup
command:
meson setup build -Dhardcoded_content_config_path=/path/to/configThe other way to specify configuration files is with the
--extra-content-config cli argument. It takes a single filepath
argument, and you can use this option multiple times.
By the way, every configuration is independently and continuously monitored for filesystem events throughout the lifetime of the process. So, in the following tutorial, you can simply save the configuration whenever you want to see your changes; Bazaar will automatically reload the relevant parts of the browser.
Once you are set up, copy and paste this snippet into the configuration and save it:
sections:
- title: "Section #1"
subtitle: "The first section"
description: "These are some of my favorite apps!"
rows: 3
# use the file:// prefix for a local file
banner: https://pixls.us/articles/processing-a-nightscape-in-siril/resultat_03_final.jpg
# can be "fill", "contain", "cover", or "scale-down"
banner-fit: cover
appids:
- com.usebottles.bottles
- io.mgba.mGBA
- net.pcsx2.PCSX2
- org.blender.Blender
- org.desmume.DeSmuME
- org.duckstation.DuckStation
- org.freecad.FreeCAD
- org.gimp.GIMP
- org.gnome.Builder
- org.gnome.Loupe
- org.inkscape.Inkscape
- org.kde.kritaYour window should now look something like this:
You can play around with this a bit and customize it to fit your needs, or even add new sections (There is no limit!). Unfortunately, it may still seem a little visually bland. That's where custom css comes in!
Delete the contents of your configuration and paste this snippet instead:
sections:
- title: "Section #1"
subtitle: "The first section"
description: "These are some of my favorite apps!"
rows: 3
# use the file:// prefix for a local file
banner: https://pixls.us/articles/processing-a-nightscape-in-siril/resultat_03_final.jpg
# can be "fill", "contain", "cover", or "scale-down"
banner-fit: cover
appids:
- com.usebottles.bottles
- io.mgba.mGBA
- net.pcsx2.PCSX2
- org.blender.Blender
- org.desmume.DeSmuME
- org.duckstation.DuckStation
- org.freecad.FreeCAD
- org.gimp.GIMP
- org.gnome.Builder
- org.gnome.Loupe
- org.inkscape.Inkscape
- org.kde.krita
classes:
- my-section
css: |
.my-section {
border: 5px solid var(--accent-fg-color);
background: linear-gradient(#ff7788, #553377);
}
.my-section entry {
background-color: alpha(var(--accent-bg-color), 0.05);
}
.my-section banner {
opacity: 0.8;
}
.my-section title {
border-bottom: 2px solid var(--accent-fg-color);
}Now Bazaar should look like this:
Feel free to modify this to your liking. You can even add animations, etc. These are the current custom css names at your disposal:
- banner
- banner-text
- banners
- description
- entry
- entry-grid
- subtitle
- title
To learn more about how to use css in gtk, see the following resources:
To be continued