You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

153 lines
5.4 KiB

# Observations:
#
# - This package is expected to work normally, like any other packaging format (e.g. Flatpak, AppImage).
# - Native Wayland support, albeit doable, is currently not done on purpose, for a few reasons:
#
# 1. It's currently awkward to package/configure properly:
# - Due to 'strict' confinement, we have create a wrapper script and configure the Wayland socket to be visible in $XDG_RUNTIME_DIR:
# - https://forum.snapcraft.io/t/wayland-dconf-and-xdg-runtime-dir/186
# - https://github.com/MirServer/graphics-core22/issues/6#issuecomment-1558815412
#
# 2. It currently has some UI inconsistencies (these were tested on Ubuntu 22.04 with GNOME 42):
# - The mouse cursor theme is chosen incorrectly
# - The mouse cursor itself is way larger than normal
# - Modal windows don't have their initial position on the screen set correctly
# - Windows don't have shadows
#
# I'm sure these issues can be worked around somehow, but since the 'X11 build' works reasonably well on Wayland through XWayland,
# they can be dealt with some other time.
# But if you're interested in Wayland support right now, here's what you have to do to get an initial, working build:
#
# - Add the 'qt6-wayland-dev' package to 'build-packages'
# - Add the 'qt6-wayland' package to 'stage-packages'
# - Either add a Wayland launcher script (mentioned in reason number 1), OR run the app like this (for quick testing):
# $ snap run --shell notes
# $ export XDG_RUNTIME_DIR=(dirname "$XDG_RUNTIME_DIR")
# $ export QT_QPA_PLATFORM=wayland
# $ notes
#
# Useful links:
# - https://snapcraft.io/docs/snapcraft-yaml-reference
# - https://github.com/MirServer/iot-example-graphical-snap/tree/Qt6-example
name: notes
adopt-info: notes
icon: packaging/linux/common/icons/512x512/notes.png
base: core22
compression: lzo
confinement: strict
# The s390x architecture is not included on purpose, because it currently fails at the graphics-core22 step.
architectures:
- build-on: amd64
- build-on: arm64
- build-on: armhf
- build-on: ppc64el
apps:
notes:
common-id: io.github.nuttyartist.notes
command-chain:
- bin/graphics-core22-wrapper # https://mir-server.io/docs/the-graphics-core22-snap-interface
command: usr/bin/notes
plugs: # https://snapcraft.io/docs/supported-interfaces
- desktop
- desktop-legacy
- gsettings
- home
- network
- opengl
- unity7
- x11
- wayland
environment:
QML2_IMPORT_PATH: $SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/qt6/qml
QT_PLUGIN_PATH: $SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/qt6/plugins
QT_QPA_PLATFORM_PLUGIN_PATH: $SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/qt6/plugins/platforms
XCURSOR_PATH: $SNAP/share/icons # Fixes missing mouse cursor theme in X11 sessions - assuming the current theme exists in the gtk-common-themes snap.
XDG_CACHE_HOME: $SNAP_USER_COMMON/.cache
XDG_CONFIG_HOME: $SNAP_USER_DATA/.config
XDG_CONFIG_DIRS: $SNAP/etc/xdg
XKB_CONFIG_ROOT: $SNAP/usr/share/X11/xkb
layout:
/usr/share/libdrm:
bind: $SNAP/graphics/libdrm
/usr/share/drirc.d:
symlink: $SNAP/graphics/drirc.d
/usr/share/X11/XErrorDB:
symlink: $SNAP/graphics/X11/XErrorDB
/usr/share/X11/locale:
symlink: $SNAP/graphics/X11/locale
/usr/share/X11/xkb:
bind: $SNAP/usr/share/X11/xkb
plugs:
graphics-core22:
interface: content
target: $SNAP/graphics
default-provider: mesa-core22
# https://forum.snapcraft.io/t/how-to-use-the-system-gtk-theme-via-the-gtk-common-themes-snap/6235
gtk-3-themes:
interface: content
target: $SNAP/share/themes
default-provider: gtk-common-themes
icon-themes:
interface: content
target: $SNAP/share/icons
default-provider: gtk-common-themes
sound-themes:
interface: content
target: $SNAP/share/sounds
default-provider: gtk-common-themes
parts:
notes:
source: .
source-type: git
plugin: cmake
cmake-generator: Ninja
cmake-parameters:
- -DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_PREFIX=/usr
- -DGIT_REVISION=ON
- -DPRO_VERSION=OFF # Note: You may want to remove this option if you're building the snap yourself.
- -DUPDATE_CHECKER=OFF
- -DUSE_QT_VERSION=6
parse-info:
- usr/share/metainfo/io.github.nuttyartist.notes.metainfo.xml
build-packages:
- libgl-dev
- libqt6opengl6-dev
- qt6-base-private-dev
- qt6-declarative-dev
stage-packages:
- libqt6network6
- libqt6sql6-sqlite
- libqt6widgets6
- libxcursor1 # For some reason this isn't present in core22, but Qt dlopen()'s it to set up the mouse cursor theme, so we have to include it.
- qml6-module-qtqml-workerscript
- qml6-module-qtquick-controls
- qml6-module-qtquick-layouts
- qml6-module-qtquick-particles
- qml6-module-qtquick-templates
- qml6-module-qtquick-window
- qt6-qpa-plugins
override-prime: |
craftctl default
if [ -d "${SNAPCRAFT_PART_SRC}/.git" ]
then
craftctl set version="$(grep -oPm1 '\bAPP_VERSION +\K[^)]+' "${SNAPCRAFT_PART_SRC}/CMakeLists.txt")+g$(git -C "${SNAPCRAFT_PART_SRC}" rev-parse --short HEAD)"
fi
graphics-core22:
after:
- notes
source: https://github.com/MirServer/graphics-core22.git
plugin: dump
override-prime: |
craftctl default
${CRAFT_PART_SRC}/bin/graphics-core22-cleanup mesa-core22 nvidia-core22
prime:
- bin/graphics-core22-wrapper