No Nonsense Neovim Client in Rust
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Oliver Breitwieser 4b58dfcc3f
Fix underscores not displayed on every line (#316)
With certain font-configurations, underscores are not drawn on every
line.

Locally, setting `set guifont=Deja\ for\ Powerline\ Medium:h11` caused
underscores to be hidden on two lines and then displayed on the
following three.

Fixing the line height to the nearest integer seems to alleviate the
issue.
4 years ago
.github/workflows Update github actions config (#265) 5 years ago
.vscode optional LLDB/VSDBG debuggers 5 years ago
assets these two have the missing symbols (Ln etc) 5 years ago
src Fix underscores not displayed on every line (#316) 4 years ago
.gitignore set buffer frames to 1 and add extra buffer startup command. Fix bug where mouse position is improperly scaled 5 years ago
.ok debugging support 5 years ago
Cargo.lock Solved the pathing issue with a bit less hacking [OSX] (#309) 4 years ago
Cargo.toml Solved the pathing issue with a bit less hacking [OSX] (#309) 4 years ago
LICENSE Create LICENSE 5 years ago
README.md Add tip for installing amdvlk 5 years ago
build.rs Build deps (#292) 5 years ago

README.md

Neovide Gitter

This is a simple graphical user interface for Neovim. Where possible there are some graphical improvements, but it should act functionally like the terminal UI.

Basic Screen Cap

I've been using this as my daily driver since November 2019. It should be relatively stable, but I'm still working out some kinks and ironing out some cross platform issues. In general it should be usable at this point, and if it isn't I consider that a bug and appreciate a report in the issues! Any help and ideas are also greatly appreciated.

I'm also very interested in suggestions code quality/style wise when it comes to Rust. I'm pretty new to the language and appreciate any critiques that you might have to offer. I won't take all of them, but I promise to consider anything you might have to offer.

Features

Should be a standard full features Neovim GUI. Beyond that there are some visual niceties:

Ligatures

Supports ligatures and full HarfBuzz backed font shaping.

Ligatures

Animated Cursor

Cursor animates into position with a smear effect to improve tracking of cursor position.

Animated Cursor

Emoji Support

Font fallback supports rendering of emoji not contained in the configured font.

Emoji

Some Nonsense ;)

let g:neovide_cursor_vfx_mode = "railgun"

Railgun

More to Come

I've got more ideas for simple unobtrusive improvements. More to come.

Configuration

Configuration is done almost completely via global neovide variables in your vim config and can be manipulated live at runtime. Details can be found here.

Install

Relatively recent binaries can be found in the project releases. But if you want the latest and greatest you should clone it and build yourself.

Installing should be as simple as downloading the binary, making sure nvim.exe with version 0.4 or greater is on your path, and running it. Everything should be self contained.

Building

Building instructions are somewhat limited at the moment. All the libraries I use are cross platform and should have support for Windows, Mac, and Linux. The rendering however is Vulkan-based, so driver support for Vulkan will be necessary. On Windows this should be enabled by default if you have a relatively recent system.

Note: Neovide requires neovim version 0.4 or greater.

Windows

  1. Install the latest version of Rust. I recommend https://rustup.rs/
  2. Install CMake. I use chocolatey: choco install cmake --installargs '"ADD_CMAKE_TO_PATH=System"' -y
  3. Install LLVM. I use chocolatey: choco install llvm -y
  4. Ensure graphics libraries are up to date.
  5. git clone https://github.com/Kethku/neovide
  6. cd neovide
  7. cargo build --release
  8. Copy ./target/release/neovide.exe to a known location and enjoy.

Mac

  1. Install the latest version of Rust. I recommend https://rustup.rs/
  2. Install CMake. Using homebrew: brew install cmake
  3. Install the Vulkan SDK. I'm told brew cask install apenngrace/vulkan/vulkan-sdk works, but I can't test locally to find out.
  4. git clone https://github.com/Kethku/neovide
  5. cd neovide
  6. cargo build --release
  7. Copy ./target/release/neovide to a known location and enjoy.

Note: If you run into issues with the vulkan libraries being reported as not verified, this issue thread may help: https://github.com/Kethku/neovide/issues/167#issuecomment-593314579

Linux

Arch Linux

There is an AUR package for neovide.

git clone https://aur.archlinux.org/neovide-git.git
cd neovide
makepkg -si

Debian/Ubuntu

Note: Neovide has been successfully built on other destros but this reportedly works on ubuntu.

  1. Install necessary dependencies

    sudo apt-get install -y curl \
        gnupg ca-certificates git \
        gcc-multilib g++-multilib cmake libssl-dev pkg-config \
        libfreetype6-dev libasound2-dev libexpat1-dev libxcb-composite0-dev \
        libbz2-dev libsndio-dev freeglut3-dev libxmu-dev libxi-dev
    
  2. Install Vulkan SDK

    curl -sL "http://packages.lunarg.com/lunarg-signing-key-pub.asc" | sudo apt-key add -
    sudo curl -sLo "/etc/apt/sources.list.d/lunarg-vulkan-1.2.131-bionic.list" "http://packages.lunarg.com/vulkan/1.2.131/lunarg-vulkan-1.2.131-bionic.list"
    sudo apt-get update -y
    sudo apt-get install -y vulkan-sdk
    

    Alternatively if you are running an amd graphics card you may have more success by installing amdvlk. https://github.com/Kethku/neovide/issues/209

  3. Install Rust

    curl --proto '=https' --tlsv1.2 -sSf "https://sh.rustup.rs" | sh

  4. Clone the repository

    git clone "https://github.com/Kethku/neovide"

  5. Build

    cd neovide && ~/.cargo/bin/cargo build --release

  6. Copy ./target/release/neovide to a known location and enjoy.

If you see an error complaining about DRI3 settings, links in this issue may help: https://github.com/Kethku/neovide/issues/44#issuecomment-578618052.

Note: If you run into libsndio errors, try building without default features which will disable static linking of the SDL library.