Skip to content

HarmfulBreeze/bazaar

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bazaar

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.

Image Image Image Image

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-service

You 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

Supporting

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

Instructions for Distributors

If you are a user, this section should be irrelevant to you, but it still may be interesting.

Configuring the Browser

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/config

The 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.krita

Your window should now look something like this:

Image

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:

Image

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

About

New App Store for GNOME

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 95.9%
  • Shell 2.5%
  • Meson 1.1%
  • Other 0.5%