Build A Neovim Qt AppImage from Source
Introduction
We have Debian installed on our
machine and would like to run Neovim
with the latest version of the Neovim Qt GUI. While a
Debian neovim-qt
package exists, it is not the latest
version. To solve this problem, we will build Neovim Qt from source and
package it as an AppImage.
Requirements
We will assume Neovim is already installed. Neovim AppImages are available from the Neovim GitHub repo.
1. Install Toolbox
We will have to install all the Neovim Qt build dependencies, so we will use Toolbox to build in a container, keeping our system clean.
$ sudo apt-get update
$ sudo apt-get install podman-toolbox
2. Download Neovim Qt
We start by downloading the latest *.tar.gz
source code
asset from the Neovim Qt GitHub
repository.
Then, we unpack and unzip it and cd
into the
directory.
$ tar -xzvf neovim-qt-0.2.18.tar.gz
$ cd neovim-qt-0.2.18
3. Create and enter a new Toolbox container
$ toolbox create --distro debian neovim-qt
$ toolbox enter neovim-qt
4. Add deb-src
to
the sources list
Toolbox’s base Debian image only lists binary archive types in the sources list. We will have to add the archive type for source packages, as well.
$ sudo nano /etc/apt/sources.list.d/debian.sources
We change the two lines that read Types: deb
to
Types: deb deb-src
and save the changes.
Types: deb deb-src
...
Types: deb deb-src
...
5. Install build dependencies
We can install all the build dependencies we will need to build
Neovim Qt with the build-dep
option. fuse
will
be needed to build the AppImage package.
$ sudo apt-get update
$ sudo apt-get build-dep neovim-qt
$ sudo apt-get install fuse
6. Add a build script
We copy a sample cmake
build-script from the appimage.org
online documentation into a file called
build-with-cmake.sh
.
Alternatively, we can download it directly from their GitHub repository with
$ wget https://raw.githubusercontent.com/linuxdeploy/QtQuickApp/master/travis/build-with-cmake.sh
We need to make two changes.
On the line that contains
cmake "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX=/usr
we add the variable
DCMAKE_BUILD_TYPE
and set it toRelease
(per the Neovim Qt build instructions):cmake "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release
On the very last line,
mv QtQuickApp*.AppImage "$OLD_CWD"
we remove the sample app name,
QtQuickApp
.mv *.AppImage "$OLD_CWD"
(We could, optionally, set it to
mv Neovim-Qt*.AppImage "$OLD_CWD"
, but for our case, it’s not necessary).
7. Run the build script
We make the script runnable and then run it.
$ chmod +x build-with-cmake.sh
$ ./build-with-cmake.sh
8. Test-run the AppImage
We should now have an AppImage package in our directory that we can run.
$ ./Neovim-Qt-x86_64.AppImage
When we run it we should see Neovim open in a new GUI window.
9. Exit the Toolbox container
$ exit
logout
The Toolbox container is still running. We can stop it with
$ podman stop neovim-qt
10. Add the package to our user-specific executable directory
According to the XDG
Base Directory Specification, user-specific executables belong in
$HOME/.local/bin
. We will place our AppImage in its own
directory in ~/.local/neovim-qt
and create a symlink to it
in ~/.local/bin
.
$ mkdir ~/.local/neovim-qt
$ mv ./Neovim-Qt-x86_64.AppImage ~/.local/neovim-qt
$ ln -s ~/.local/neovim-qt/Neovim-Qt-x86_64.AppImage ~/.local/bin/nvim-qt
We can now run it by calling nvim-qt
directly from the
command line.
$ nvim-qt --version
NVIM-QT v0.2.18.0
Build type: Release
Compilation: -Wall -Wextra -Wno-unused-parameter -Wunused-variable
Qt Version: 5.15.8
...
11. Add Neovim Qt to the applications menu
We simply need to copy the .desktop
file from the source
directory.
$ cp src/gui/nvim-qt.desktop ~/.local/share/applications/
12. Add an icon
And finally, we copy over the icon from the source directory as well.
$ mkdir ~/.local/neovim-qt/icons
$ cp third-party/neovim.png ~/.local/neovim-qt/icons/nvim-qt.png
$ mkdir -p ~/.local/share/icons/hicolor/192x192/apps
$ ln -s ~/.local/neovim-qt/icons/nvim-qt.png ~/.local/share/icons/hicolor/192x192/apps/
$ xdg-icon-resource forceupdate --mode user
Conclusion
When we search for neovim
in our applications menu, we
should now see an entry we can use to start our new Neovim Qt
AppImage.