Code Monkey home page Code Monkey logo

cobalt's Introduction

Cobalt

Chromium Bootstrap for Flatpaks

Cobalt is a unified "launcher" for the various Chromium/Chrome-based Flatpaks, in order to avoid code duplication in their launcher scripts.

Cobalt follows a "convention over configuration" approach, and in most cases no configuration file at all, or a very short one, is needed for usage.

Flags

Cobalt also supports reading flags to pass to the browser on startup from ~/.var/app/APP_ID/config/NAME-flags.conf, where NAME is the value of the Name= key in the config file (see below).

Each line of NAME-flags.conf is a single flag to be passed to the browser, and lines starting with a # are treated as comments and skipped:

# This is a comment.

# Our first flag:
--disable-gpu
# Our second flag:
--ozone-backend=wayland

In addition, to enable and disable features, a special syntax is supported: features+=FEATURE and features-=FEATURE. Unlike --enable-features= and --disable-features, features+= and features-= are cumulative and thus do not clear out all the previous values. In other words, this will only enable UseOzonePlatform, as the second value overwrites the first:

--enable-features=VaapiVideoEncoder,VaapiVideoDecoder
--enable-features=UseOzonePlatform

Whereas this results in all three features enabled:

features+=VaapiVideoEncoder
features+=VaapiVideoDecoder
features+=UseOzonePlatform

Debugging

If you're not sure why your configuration isn't working, setting the variable G_MESSAGES_DEBUG=cobalt will print debugging information on:

  • Default values inferred when not present in the config file.
  • Environment variables set.
  • The full command line of the browser being started.

Configuration file

The file, if needed, should go into /app/etc/cobalt.ini.

[Application]
# The application's name, defaults to the last component of the app ID,
# lowercased. For instance, given org.chromium.Chromium, the name will be set to
# 'chromium'.
Name=brave

# The actual entry point binary for the browser. This should point to the "true"
# main executable binary, and not any wrapper scripts. If omitted, defaults to
# whichever exists of "/app/Name/Name" or "/app/extra/Name", where "Name" is
EntryPoint=/app/brave/brave

# The "wrapper script" that the Flatpak uses. In other words, this is the
# script that is run when the user clicks on the application icon, and then that
# script is what starts Cobalt. If omitted, Cobalt will check your desktop file
# and pull the script from there.
WrapperScript=/app/bin/brave

# The subdirectory under XDG_CONFIG_HOME that the browser stores its files in.
# This has no default, and it only needs to be set if "ExposeWidevine" is set
# below.
ConfigDir=BraveSoftware/Brave-Browser

# A semicolon-separated list of URLs to show the first time the browser is
# opened.
FirstRunUrls=file:///app/share/flatpak-chrome/first_run.html

# If your browser was previously using a flags file other than NAME-flags.conf,
# you can set this to the old name to automatically migrate the flags within.
MigrateFlagsFile=chrome-flags.conf

# Flatpak 1.8+ comes with a feature known as 'expose-pids', which is used by
# Zypak to run more efficiently. (Chromium Flatpaks that don't use Zypak, like
# Chromium itself and Ungoogled Chromium, generally require this and won't start
# without it.) The feature also depends on unprivileged user namespaces being
# enabled on the host system. This option determines what to do if expose-pids
# is not available:
# - If "required", then an error dialog is shown to the user, and the
#   application will not start.
# - If "recommended", then a warning dialog will be shown to the user, and they
#   can elect to never show it again.
# - If "optional", then this will not be checked at all.
# If omitted, this option will default to "recommended" if Zypak.Enabled is true
# (see blow) and "required" if not.
ExposePids=recommended

[Zypak]
# If true, then zypak-wrapper.sh will be prepended to the command. If omitted,
# it will be set to 'true' of zypak-wrapper.sh is present in the Flatpak.
Enabled=true

# Some Flatpaks have a different name for their sandbox binary. If so, you can
# set it here. If omitted, the sandbox name will try to automatically be
# detected by checking for either a 'chrome-sandbox', or 'NAME-sandbox', or
# 'ENTRYPOINT-sandbox' (where NAME is the value of Application.Name, and
# ENTRYPOINT is the last path component of Application.EntryPoint), all in the
# EntryPoint's directory.
# For more info, see: https://github.com/refi64/zypak#alternate-sandbox-binary-names
SandboxFilename=chrome-sandbox

# If true, then the directory at CONFIG_DIR/WIDEVINE_PATH will be exposed into
# the sandbox so that Widevine can be loaded.
ExposeWidevine=true

# Always defaults to WidevineCdm.
WidevinePath=WidevineCdm

[Flextop]
# If true, 'flextop-init' will be called before starting the Flatpak. If omitted,
# it will be set to 'true' if flextop-init is present in the Flatpak.
Enabled=true

# This lets you enable or disable some Chromium features by default. Each value
# is a semicolon-separated list of features to enable/disable.
[DefaultFeatures]
Enabled=EnablePipeWireRTCCapturer
Disabled=EnablePipeWireRTCCapturer

cobalt's People

Contributors

refi64 avatar rany2 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.