Initial commit: snap using zen-bin

This commit is contained in:
2025-08-25 13:38:58 +02:00
commit 929ceb523c
6 changed files with 326 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
#!/bin/sh
# Clean up old Firefox snap mount for host hunspell; we now use
# the system-files interface for host hunspell dictionaries.
# TODO: Drop this (along with the host-hunspell mount-control
# declaration in snapcraft.yaml) later in the future once a
# reasonable amount of time has passed and nearly all users
# have an updated version and were migrated to use system-files,
# and just about no new Ubuntu installations start with a
# Firefox snap that has the older mount-control interface.
snapctl umount $SNAP_COMMON/host-hunspell || true
rm -r $SNAP_COMMON/host-hunspell || true

1
snap/hooks/install Normal file
View File

@@ -0,0 +1 @@
post-refresh

64
snap/hooks/post-refresh Normal file
View File

@@ -0,0 +1,64 @@
#!/bin/sh
# Copyright (C) 2022 Canonical Ltd.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3, as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
host_hunspell=/var/lib/snapd/hostfs/usr/share/hunspell
if [ ! -d $host_hunspell ]; then
echo "No host hunspell, skipping"
exit 0
fi
DICPATH=$SNAP_COMMON/snap-hunspell
if [ -d $DICPATH ]; then
# Clean up on each refresh to ensure we have an up-to-date list
# of host dictionaries.
find $DICPATH -type l -name "*.dic" -or -name "*.aff" | xargs rm
else
mkdir -p $DICPATH
fi
# We deliberately don't directly use the host dictionary files.
# Instead, we use their names to know which ones the user has
# installed on their system, and we use the corresponding ones
# we primed in '$SNAP/usr/share/hunspell' in our 'hunspell' part.
#
# - We don't set DICPATH=/var/lib/snapd/hostfs/usr/share/hunspell
# to avoid potential incompatibility due to different hunspell
# versions inside the snap and outside on the host. See:
# https://github.com/snapcore/snapd/pull/11025
#
# - We don't set DICPATH="$SNAP/usr/share/hunspell" because that
# would result in all available dictionaries we primed in our
# 'hunspell' part being displayed in Firefox's interface,
# presenting an overwhelming number of options to the user.
# So instead we only use those that were installed on the host.
# This way, the user could affect the dictionaries available to
# Firefox snap similarly to how they could for non-snap Firefox.
for dic in $(find $host_hunspell/ -name "*.dic"); do
dic_file=$(basename $dic)
aff_file="${dic_file%%.dic}.aff"
# Some dic,aff files in hunspell are themselves symlinks to other files,
# e.g. /usr/share/hunspell/fr_CH.dic -> fr.dic.
# That extra level of indirection somehow breaks spell checking.
# We therefore use readlink to link to the "real" file, not to a symlink.
if [ -e "$SNAP/usr/share/hunspell/${dic_file}" ]; then
ln -s "$(readlink -e $SNAP/usr/share/hunspell/${dic_file})" $DICPATH/${dic_file}
fi
if [ -e "$SNAP/usr/share/hunspell/${aff_file}" ]; then
ln -s "$(readlink -e $SNAP/usr/share/hunspell/${aff_file})" $DICPATH/${aff_file}
fi
done

221
snapcraft.yaml Normal file
View File

@@ -0,0 +1,221 @@
# zen-browser snap, (c) Valentin HAUDIQUET
# inspired from https://github.com/canonical/firefox-snap
# GNU General Public License version 3
name: zen-browser
version: 1.14.11b
license: MPL-2.0
summary: Zen Browser - Welcome to a calmer internet
description: |
Zen is a firefox-based browser with the aim of pushing your productivity to a new level!
confinement: strict
grade: stable
base: core24
source-code: https://github.com/zen-browser/desktop
compression: lzo
apps:
zen-browser:
command: zen-browser.launcher
desktop: usr/share/applications/zen-browser.desktop
extensions: [gnome]
environment:
DICPATH: "$SNAP_COMMON/snap-hunspell"
GTK_USE_PORTAL: 1
HOME: "$SNAP_USER_COMMON"
PIPEWIRE_CONFIG_NAME: "$SNAP/usr/share/pipewire/pipewire.conf"
PIPEWIRE_MODULE_DIR: "$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/pipewire-0.3"
SPA_PLUGIN_DIR: "$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/spa-0.2"
SPEECHD_ADDRESS: "unix_socket:/run/user/$SNAP_UID/speech-dispatcher/speechd.sock"
LD_LIBRARY_PATH: $LD_LIBRARY_PATH:$SNAP/usr/lib:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libproxy
slots:
- mpris
- dbus-daemon
plugs:
- alsa
- audio-playback
- audio-record
- avahi-observe
- browser-sandbox
- camera
- cups-control
- gsettings
- hardware-observe
- home
- host-hunspell
- host-usr-share-hunspell
- joystick
- login-session-observe
- mount-observe
- network
- network-observe
- opengl
- pcscd
- removable-media
- screen-inhibits-control
- system-packages-doc
- u2f-devices
- unity7
- upower-observe
platforms:
amd64:
plugs:
browser-sandbox:
interface: browser-support
allow-sandbox: true
dot-zen:
interface: personal-files
read: [$HOME/.zen]
etc-zen:
interface: system-files
read: [/etc/zen]
host-hunspell:
interface: mount-control
mount:
- what: /usr/share/hunspell
where: $SNAP_COMMON/host-hunspell
persistent: true
options: [ro, bind, noatime, noexec]
host-usr-share-hunspell:
interface: system-files
read:
- /var/lib/snapd/hostfs/usr/share/hunspell
layout:
/usr/share/libdrm:
bind: $SNAP/gnome-platform/usr/share/libdrm
/usr/share/alsa:
bind: $SNAP/usr/share/alsa
/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/opensc-pkcs11.so:
bind-file: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/opensc-pkcs11.so
parts:
# This is a temporary workaround to including the hunspell content
# snap, which would cause breakage in the Ubuntu desktop image build
# because of the Ubuntu policy. See:
# https://bugzilla.mozilla.org/show_bug.cgi?id=1792006
#
# The definition of this part is essentially a copy of the
# corresponding part in hunspell-dictionaries-1-7-2004 by
# Buo-ren, Lin.
hunspell:
plugin: nil
override-build: |
craftctl default
set -eu
apt download $(apt-cache search '^hunspell-.*$' |
awk '!/myspell|dbgsym|tools|transitional|dependency/{printf "%s ", $1}')
find . -name "*.deb" -exec dpkg-deb -x {} "$CRAFT_PART_INSTALL" \;
prime:
- usr/share/hunspell
zen-browser:
plugin: nil
after:
- launcher
- desktop
- icons
build-packages:
- curl
- tar
override-build: |
mkdir -p "$CRAFT_PART_INSTALL/usr/lib"
curl -L -O https://github.com/zen-browser/desktop/releases/download/$SNAPCRAFT_PROJECT_VERSION/zen.linux-x86_64.tar.xz
tar xf zen.linux-x86_64.tar.xz -C "$CRAFT_PART_INSTALL/usr/lib"
prime:
- usr/lib/zen
- usr/lib/*/libproxy
- usr/lib/*/opensc-pkcs11.so
- usr/lib/*/pkcs11/opensc-pkcs11.so
- usr/lib/*/libasn1.so.*
- usr/lib/*/libcurl.so.*
- usr/lib/*/libgssapi.so.*
- usr/lib/*/libhcrypto.so.*
- usr/lib/*/libheimbase.so.*
- usr/lib/*/libheimntlm.so.*
- usr/lib/*/libhogweed.so.*
- usr/lib/*/libhx509.so.*
- usr/lib/*/libkrb5.so.*
- usr/lib/*/liblber-2.4.so.*
- usr/lib/*/libldap_r-2.4.so.*
- usr/lib/*/libnettle.so.*
- usr/lib/*/libnghttp2.so.*
- usr/lib/*/libpci.so.*
- usr/lib/*/libpipewire*.so*
- usr/lib/*/libroken.so.*
- usr/lib/*/librtmp.so.*
- usr/lib/*/libsasl2.so.*
- usr/lib/*/libspeechd.so.*
- usr/lib/*/libssh.so.*
- usr/lib/*/libssl.so.*
- usr/lib/*/libvulkan*
- usr/lib/*/libVkLayer*
- usr/lib/*/libwind.so.*
- usr/lib/*/libXt.so.*
- usr/lib/*/pipewire-*
- usr/lib/*/spa-*
# alsa does not seem to be found
# - usr/share/alsa
- usr/share/pipewire
- usr/share/vulkan
stage-packages:
- libproxy1v5
- glib-networking
- libasound2
- libcurl4
- libpci3
- libpipewire-0.3-0
- libpipewire-0.3-modules
- libspa-0.2-modules
- libspeechd2
- libvulkan1
- libxt6
- mesa-vulkan-drivers
- pipewire-bin
- pipewire-pulse
- opensc-pkcs11
desktop:
plugin: dump
source: .
organize:
zen-browser.desktop: usr/share/applications/zen-browser.desktop
launcher:
plugin: nil
override-prime: |
cp "$CRAFT_PROJECT_DIR/zen-browser.launcher" "$CRAFT_PRIME/"
chmod a+rwx "$CRAFT_PRIME/zen-browser.launcher"
icons:
plugin: nil
build-packages:
- inkscape
- curl
override-build: |
curl -L -O https://raw.githubusercontent.com/zen-browser/desktop/refs/heads/dev/docs/assets/zen-dark.svg
inkscape -w 16 -h 16 "$SNAPCRAFT_PART_BUILD/zen-dark.svg" -o "$CRAFT_PART_INSTALL/16.png"
inkscape -w 32 -h 32 "$SNAPCRAFT_PART_BUILD/zen-dark.svg" -o "$CRAFT_PART_INSTALL/32.png"
inkscape -w 48 -h 48 "$SNAPCRAFT_PART_BUILD/zen-dark.svg" -o "$CRAFT_PART_INSTALL/48.png"
inkscape -w 64 -h 64 "$SNAPCRAFT_PART_BUILD/zen-dark.svg" -o "$CRAFT_PART_INSTALL/64.png"
inkscape -w 128 -h 128 "$SNAPCRAFT_PART_BUILD/zen-dark.svg" -o "$CRAFT_PART_INSTALL/128.png"
organize:
16.png: usr/share/icons/hicolor/16x16/apps/zen-browser.png
32.png: usr/share/icons/hicolor/32x32/apps/zen-browser.png
48.png: usr/share/icons/hicolor/48x48/apps/zen-browser.png
64.png: usr/share/icons/hicolor/64x64/apps/zen-browser.png
128.png: usr/share/icons/hicolor/128x128/apps/zen-browser.png
prime:
- usr/share/icons/*
slots:
dbus-daemon:
interface: dbus
bus: session
name: zen.desktop
hooks:
post-refresh:
plugs: [host-usr-share-hunspell]

26
zen-browser.desktop Normal file
View File

@@ -0,0 +1,26 @@
[Desktop Entry]
Version=1.14.11b
Name=Zen Browser
GenericName=Web Browser
Comment=Welcome to a calmer internet
Keywords=Internet;WWW;Browser;Web;Explorer
Exec=/usr/lib/zen/zen-bin %U
Icon=/usr/share/icons/hicolor/128x128/apps/zen-browser.png
Terminal=false
Type=Application
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;application/x-xpinstall;application/pdf;application/json;
StartupWMClass=Zen Browser
Categories=Network;WebBrowser;
Actions=new-window;new-private-window;profile-manager-window;
[Desktop Action new-window]
Name=Open a New Window
Exec=/usr/lib/zen/zen-bin --new-window %u
[Desktop Action new-private-window]
Name=Open a New Private Window
Exec=/usr/lib/zen/zen-bin --private-window %u
[Desktop Action profile-manager-window]
Name=Open the Profile Manager
Exec=/usr/lib/zen/zen-bin --ProfileManager %u

1
zen-browser.launcher Normal file
View File

@@ -0,0 +1 @@
exec "$SNAP/usr/lib/zen/zen-bin" "$@"