💾 Archived View for gemini.mcgillij.dev › neovim_and_copilot_on_arch.gmi captured on 2024-02-05 at 09:37:11. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2021-12-03)

-=-=-=-=-=-=-

Neovim and Github Copilot

:author:

mcgillij

:category:

Linux

:date:

2021-10-27 21:49

:tags:

Linux, Neovim, Github, Copilot, Arch, #100DaysToOffload

:slug:

neovim-github-copilot

:summary:

Getting up and running with Neovim and Github Copilot on Arch Linux

:cover_image:

battery.jpg

Contents

With the announcement today of Github Copilot’s availability in

Neovim

.

I wanted to give it a spin.

Outlined below are the pre-requisites, for getting a minimalistic Neovim and Copilot setup up and running.

And while I don’t totally agree with code **~~stealing~~^H^H^H^H^H^H** "generation" from peoples repositories.

I was interested in seeing it in action but not enough to install an IDE.

However being available in neovim now makes the proposition way more attractive.

For more information about this:

https://github.com/github/copilot.vim

Prerequisites:

That’s it to get the basics up and running, I’ll provide some extra plugins and setup along the way that is totally optional to get up and running with Copilot.

You can install the main dependencies with:

$ sudo pacman -S nodejs git

Neovim nightly

You have a couple options here, either an appImage, creating a package (the nightly build AUR is currently broken as the package it references is not available since it links to a nightly build job on github that gets pruned), or manually installing it yourself.

Creating a package

I went the route of creating a package and in trying to use **pacman** to manage all my packages, I found better than trying to maintain a manual installation of neovim.

You will need to grab the PKGBUILD file either from cloning this

AUR

or pasting the below contents into a file named **PKGBUILD**.

_pkgname=neovim
_pkgver=0.6.0
pkgname=neovim-nightly-bin
# I HAD TO CHANGE THE LINE BELOW
pkgver=0.6.0+dev+498+gd0f10a7ad
pkgrel=1
pkgdesc='Fork of Vim aiming to improve user experience, plugins, and GUIs - Nightly Builds'
arch=('x86_64')
url='https://neovim.io'
backup=('etc/xdg/nvim/sysinit.vim')
license=('custom:neovim')
provides=("${_pkgname}=${_pkgver}" 'vim-plugin-runtime')
conflicts=("${_pkgname}")
optdepends=('python2-neovim: for Python 2 plugin support, see :help python'
            'python-neovim: for Python 3 plugin support, see :help python'
            'xclip: for clipboard support, see :help clipboard'
            'xsel: for clipboard support, see :help clipboard')

_date="$(date -u +%Y%m%d)"
# CHANGE THIS LINE AS WELL TO THE NIGHTLY VERSION
source=("nvim-linux64.tar.gz")
sha512sums=(SKIP)
install=neovim.install

pkgver() {
  cd "${srcdir}/nvim-linux64"
  ./bin/nvim --version | head -1 | awk '{ printf $2 }' | sed 's/-/+/g' | sed 's/v//'
}

check() {
  cd "${srcdir}/nvim-linux64"
  ./bin/nvim --version
  ./bin/nvim --headless -u NONE -i NONE -c ':quit'
}

package() {
  cd "${srcdir}/nvim-linux64"

  mkdir -p "${pkgdir}/usr/bin"
  cp -r lib "${pkgdir}/usr/"
  cp -r share "${pkgdir}/usr/"
  install bin/nvim "${pkgdir}/usr/bin"

  # Make Arch vim packages work
  mkdir -p "${pkgdir}"/etc/xdg/nvim
  echo "\" This line makes pacman-installed global Arch Linux vim packages work." > "${pkgdir}"/etc/xdg/nvim/sysinit.vim
  echo "source /usr/share/nvim/archlinux.vim" >> "${pkgdir}"/etc/xdg/nvim/sysinit.vim

  mkdir -p "${pkgdir}"/usr/share/nvim
  echo "set runtimepath+=/usr/share/vim/vimfiles" > "${pkgdir}"/usr/share/nvim/archlinux.vim
}

With the **PKGBUILD** downloaded you will need to also download the nightly build from

https://github.com/github/copilot.vim/releases/download/neovim-nightlies/nvim-linux64.zip

Place it in the same folder as your **PKGBUILD** and "unzip" it (For some reason it’s a zipped up tarball).

$ unzip nvim-linux64.zip

This should leave you with a "nvim-linux64.tar.gz" which corresponds with the above PKGBUILD file **source** section allowing us to build a package from this.

Building the package

Thankfully building packages in Arch is amazingly easy. And it’s one of the features I most enjoy about this distribution.

If you don’t have a **chroot** setup for building packages you can find more info about it

here

.

$ makechrootpkg -c -r $HOME/chroot

This will build the package for you and plop out a "zst" file in the current directory.

Once the package is built you can install it with:

$ sudo pacman -U --asdeps neovim-nightly-bin-0.6.0+dev+498+gd0f10a7ad-1-x86_64.pkg.tar.zst

This will prompt you that it will remove your previous **neovim** as it conflicts with it. And this is great, since we aren’t hosing our system now by actually creating a package vs installing a random binaries.

Checking the version

Checking if the correct version is present now with:

$ nvim --version

NVIM v0.6.0-dev+498-gd0f10a7ad
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Compilation: /usr/bin/gcc-11 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DNVIM_TS_HAS_SET_MATCH_LIMIT -O2 -g -Og -g -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fno-common -fdiagnostics-color=always -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -DMIN_LOG_LEVEL=3 -I/home/runner/work/neovim/neovim/build/config -I/home/runner/work/neovim/neovim/src -I/home/runner/work/neovim/neovim/.deps/usr/include -I/usr/include -I/home/runner/work/neovim/neovim/build/src/nvim/auto -I/home/runner/work/neovim/neovim/build/include
Compiled by runner@fv-az139-646

Features: +acl +iconv +tui
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/share/nvim"

Run :checkhealth for more info

Something along those lines should work (anything 6+).

Assuming you didn’t have **nvim** installed prior you will also want to create a configuration for yourself in **~/.config/nvim/init.vim** (or .lua if you want to configure it with lua).

However for this example setup I’ll just use the regular *init.vim*

Installing Vim-Plug

You can install it in a number of ways, here’s the easiest:

sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

This installs the plugin in the default location (.local/share/nvim/site/autoload/plug.vim).

From here "source" (":source ~/.config/nvim/init.vim") your configuration or quit and open nvim again.

To allow it to autoload vim-plug (since that’s where the above command plopped it).

Installing Copilot.vim

Add the following lines to your **~/.config/nvim/init.vim** file:

call plug#begin()
Plug 'github/copilot.vim'
call plug#end()

And from inside nvim issue the command ":PlugInstall" This will go download the plugin for you and install it.

You will also need to issue ":Copilot setup" to setup the plugin. Which will prompt you to accept some conditions and allow the use of Copilot.

That’s it!

Now just start typing.

[image: copilot suggestion]

Copilot will **try** to help.

All you need is to stop typing for a second, and you should see some suggestions. Similar to how you would usually get autocomplete suggestions.

Now you can take part in all the Copilot Meemz! It’s usefulness seems to range from wanting to paste giant blocks of random text to somewhat meaningful suggestions.

YMMV, however I’m excited to see what it comes up with when I stop typing.

Let me know if it generates anything halfway usable for you!