diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml
new file mode 100644
index 0000000..7795493
--- /dev/null
+++ b/.github/workflows/website.yml
@@ -0,0 +1,38 @@
+name: Website
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ if: github.ref != 'refs/heads/main'
+ steps:
+ - name: 'Checkout'
+ uses: actions/checkout@master
+ - name: 'Content update'
+ run: |
+ make -C website content_update
+ - name: 'Build only'
+ uses: shalzz/zola-deploy-action@master
+ env:
+ BUILD_DIR: website
+ BUILD_ONLY: true
+ build_and_deploy:
+ runs-on: ubuntu-latest
+ if: github.ref == 'refs/heads/main'
+ steps:
+ - name: 'Checkout'
+ uses: actions/checkout@master
+ - name: 'Content update'
+ run: |
+ make -C website content_update
+ - name: 'Build and deploy'
+ uses: shalzz/zola-deploy-action@master
+ env:
+ PAGES_BRANCH: gh-pages
+ BUILD_DIR: website
+ # See https://github.com/marketplace/actions/zola-deploy-to-pages#secrets for details
+ TOKEN: ${{ secrets.TOKEN }}
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..4c5850e
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "website/themes/juice"]
+ path = website/themes/juice
+ url = https://github.com/huhu/juice
diff --git a/README.md b/README.md
index 858e8a6..b73d8cb 100644
--- a/README.md
+++ b/README.md
@@ -1,249 +1,258 @@
-# Neovide [![Discord](https://badgen.net/badge/icon/discord?icon=discord&label)](https://discord.gg/SjFpZdQys6) [![Chat on Matrix](https://matrix.to/img/matrix-badge.svg)](https://matrix.to/#/#neovide_community:gitter.im) [![Discussions](https://img.shields.io/badge/GitHub-Discussions-green?logo=github)](https://github.com/Kethku/neovide/discussions)
-
-This is a simple graphical user interface for [Neovim](https://github.com/neovim/neovim) (an aggressively refactored and updated
-Vim editor). Where possible there are some graphical improvements, but functionally it should act like the terminal UI.
-
-![Basic Screen Cap](./assets/BasicScreenCap.png)
-
-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 fully featured Neovim GUI. Beyond that there are some visual niceties:
-
-### Ligatures
-
-Supports ligatures and font shaping.
-
-![Ligatures](./assets/Ligatures.png)
-
-### Animated Cursor
-
-Cursor animates into position with a smear effect to improve tracking of cursor position.
-
-![Animated Cursor](./assets/AnimatedCursor.gif)
-
-### Smooth Scrolling
-
-Scroll operations on buffers in neovim will be animated smoothly pixel wise rather than line by line at a time. Note, multigrid must be
-enabled for this to work.
-https://github.com/Kethku/neovide/wiki/Configuration#multigrid
-
-![Smooth Scrolling](./assets/SmoothScrolling.gif)
-
-### Animated Windows
-
-Windows animate into position when they are moved making it easier to see how layout changes happen. Note, multigrid must be enabled for
-this to work.
-https://github.com/Kethku/neovide/wiki/Configuration#multigrid
-
-![Animated Windows](./assets/AnimatedWindows.gif)
-
-### Blurred Floating Windows
-
-The backgrounds of floating windows are blurred improving the visual separation between foreground and background from
-built in window transparency. Note, multigrid must be enabled for this to work.
-https://github.com/Kethku/neovide/wiki/Configuration#multigrid
-
-![Blurred Floating Windows](./assets/BlurredFloatingWindows.png)
-
-### Emoji Support
-
-Font fallback supports rendering of emoji not contained in the configured font.
-
-![Emoji](./assets/Emoji.png)
-
-### WSL Support
-
-Neovide supports displaying a full gui window from inside wsl via the `--wsl` command argument. Communication is passed via standard io into the wsl copy of neovim providing identical experience similar to visual studio code's remote editing https://code.visualstudio.com/docs/remote/remote-overview.
-
-### Remote TCP Support
-
-Neovide supports connecting to a remote instance of Neovim over a TCP socket via the `--remote-tcp` command argument. This would allow you to run Neovim on a remote machine and use the GUI on your local machine, connecting over the network.
-
-Launch Neovim as a TCP server (on port 6666) by running:
-
-```sh
-nvim --headless --listen localhost:6666
-```
-
-And then connect to it using:
-
-```sh
-/path/to/neovide --remote-tcp=localhost:6666
-```
-
-By specifying to listen on localhost, you only allow connections from your local computer. If you are actually doing this over a network you will want to use SSH port forwarding for security, and then connect as before.
-
-```sh
-ssh -L 6666:localhost:6666 ip.of.other.machine nvim --headless --listen localhost:6666
-```
-
-Finally, if you would like to leave the neovim server running, close the neovide application window instead of issuing a `:q` command.
-
-### Some Nonsense ;)
-
-```vim
-let g:neovide_cursor_vfx_mode = "railgun"
-```
-
-![Railgun](./assets/Railgun.gif)
-
-### 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](https://github.com/Kethku/neovide/wiki/Configuration).
-
-## Install
-
-**Note**: 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. On Windows this should be enabled by default if you have a relatively recent system.
-
-**Note**: Neovide requires neovim version 0.6 or greater if built from main, or 0.4 if downloaded from releases.
-
-### From binary
-
-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 is based on opengl, so a good gpu driver will be
-necessary. On Windows this should be enabled by default if you have a relatively recent system.
-
-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.
-
-### Windows
-
-#### Package manager
-
-[Scoop](https://scoop.sh/) has Neovide in the `extras` bucket. Ensure you have the `extras` bucket, and install:
-
-```
-$ scoop bucket list
-main
-extras
-$ scoop install neovide
-```
-
-#### From source
-
-1. Install the latest version of Rust. I recommend
-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. Build and install Neovide:
-
- ```sh
- git clone https://github.com/Kethku/neovide
- cd neovide
- cargo build --release
- ```
-
-6. Copy `./target/release/neovide.exe` to a known location and enjoy.
-
-### Mac (from source)
-
-1. Install the latest version of Rust. Using homebrew: `brew install rustup-init`
-2. Configure rust by running `rustup-init`
-3. Install CMake. Using homebrew: `brew install cmake`
-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.
-8. `cargo install cargo-bundle`
-9. `cargo bundle --release`
-10. Copy `./target/release/bundle/osx/neovide.app` to `~/Applications` and enjoy.
-
-### Linux
-
-#### Arch Linux
-
-There is an [AUR package for neovide](https://aur.archlinux.org/packages/neovide-git/).
-
-##### With Paru (or your preferred AUR helper)
-
-```sh
-paru -S neovide-git
-```
-
-##### Without helper
-
-```sh
-git clone https://aur.archlinux.org/neovide-git.git
-cd neovide-git
-makepkg -si
-```
-
-To install a non-default branch:
-
-```sh
-git clone https://aur.archlinux.org/neovide-git.git
-cd neovide-git
-nvim PKGBUILD
-:%s/l}/l}#branch=branch-name-here/
-:wq
-makepkg -si
-```
-
-Note: Neovide requires that a font be set in `init.vim` otherwise errors might be encountered.
-See [#527](https://github.com/Kethku/neovide/issues/527)
-
-##### With non-default branch
-
-```sh
-git clone https://aur.archlinux.org/neovide-git.git
-cd neovide-git
-REGEX=$(printf 's/{url}/&\#branch=%s/g' '')
-sed "$REGEX" PKGBUILD
-makepkg -si
-```
-#### With Snap
-Neovide is also available in the Snap Store. You can install it
-using the command below.
-
-```
-snap install neovide
-```
-[![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-white.svg)](https://snapcraft.io/neovide)
-
-
-#### From source
-1. Install necessary dependencies (adjust for your preferred package manager)
-
- ```sh
- sudo apt 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 libfontconfig1-dev
- ```
-
-2. Install Rust
-
- ```sh
- curl --proto '=https' --tlsv1.2 -sSf "https://sh.rustup.rs" | sh
- ```
-
-3. Clone the repository
-
- ```sh
- git clone "https://github.com/Kethku/neovide"
- ```
-
-4. Build
-
- ```sh
- cd neovide && ~/.cargo/bin/cargo build --release
- ```
-
-5. Copy `./target/release/neovide` to a known location and enjoy.
-
-## Troubleshooting
-- Neovide requires that a font be set in `init.vim` otherwise errors might be encountered. This can be fixed by adding `set guifont=Your\ Font\ Name:h15` in init.vim file. Reference issue [#527](https://github.com/Kethku/neovide/issues/527).
-
-### Linux-specific
-- If you recieve errors complaining about DRI3 settings, please reference issue [#44](https://github.com/Kethku/neovide/issues/44#issuecomment-578618052).
+
+
+# Neovide [![Discord](https://badgen.net/badge/icon/discord?icon=discord&label)](https://discord.gg/SjFpZdQys6) [![Chat on Matrix](https://matrix.to/img/matrix-badge.svg)](https://matrix.to/#/#neovide_community:gitter.im) [![Discussions](https://img.shields.io/badge/GitHub-Discussions-green?logo=github)](https://github.com/Kethku/neovide/discussions)
+
+
+
+This is a simple graphical user interface for [Neovim](https://github.com/neovim/neovim) (an aggressively refactored and updated
+Vim editor). Where possible there are some graphical improvements, but functionally it should act like the terminal UI.
+
+![Basic Screen Cap](./assets/BasicScreenCap.png)
+
+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 fully featured Neovim GUI. Beyond that there are some visual niceties:
+
+### Ligatures
+
+Supports ligatures and font shaping.
+
+![Ligatures](./assets/Ligatures.png)
+
+### Animated Cursor
+
+Cursor animates into position with a smear effect to improve tracking of cursor position.
+
+![Animated Cursor](./assets/AnimatedCursor.gif)
+
+### Smooth Scrolling
+
+Scroll operations on buffers in neovim will be animated smoothly pixel wise rather than line by line at a time. Note, multigrid must be
+enabled for this to work.
+https://github.com/Kethku/neovide/wiki/Configuration#multigrid
+
+![Smooth Scrolling](./assets/SmoothScrolling.gif)
+
+### Animated Windows
+
+Windows animate into position when they are moved making it easier to see how layout changes happen. Note, multigrid must be enabled for
+this to work.
+https://github.com/Kethku/neovide/wiki/Configuration#multigrid
+
+![Animated Windows](./assets/AnimatedWindows.gif)
+
+### Blurred Floating Windows
+
+The backgrounds of floating windows are blurred improving the visual separation between foreground and background from
+built in window transparency. Note, multigrid must be enabled for this to work.
+https://github.com/Kethku/neovide/wiki/Configuration#multigrid
+
+![Blurred Floating Windows](./assets/BlurredFloatingWindows.png)
+
+### Emoji Support
+
+Font fallback supports rendering of emoji not contained in the configured font.
+
+![Emoji](./assets/Emoji.png)
+
+### WSL Support
+
+Neovide supports displaying a full gui window from inside wsl via the `--wsl` command argument. Communication is passed via standard io into the wsl copy of neovim providing identical experience similar to visual studio code's remote editing https://code.visualstudio.com/docs/remote/remote-overview.
+
+### Remote TCP Support
+
+Neovide supports connecting to a remote instance of Neovim over a TCP socket via the `--remote-tcp` command argument. This would allow you to run Neovim on a remote machine and use the GUI on your local machine, connecting over the network.
+
+Launch Neovim as a TCP server (on port 6666) by running:
+
+```sh
+nvim --headless --listen localhost:6666
+```
+
+And then connect to it using:
+
+```sh
+/path/to/neovide --remote-tcp=localhost:6666
+```
+
+By specifying to listen on localhost, you only allow connections from your local computer. If you are actually doing this over a network you will want to use SSH port forwarding for security, and then connect as before.
+
+```sh
+ssh -L 6666:localhost:6666 ip.of.other.machine nvim --headless --listen localhost:6666
+```
+
+Finally, if you would like to leave the neovim server running, close the neovide application window instead of issuing a `:q` command.
+
+### Some Nonsense ;)
+
+```vim
+let g:neovide_cursor_vfx_mode = "railgun"
+```
+
+![Railgun](./assets/Railgun.gif)
+
+### 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](https://github.com/Kethku/neovide/wiki/Configuration).
+
+## Install
+
+**Note**: 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. On Windows this should be enabled by default if you have a relatively recent system.
+
+**Note**: Neovide requires neovim version 0.6 or greater if built from main, or 0.4 if downloaded from releases.
+
+### From binary
+
+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 is based on opengl, so a good gpu driver will be
+necessary. On Windows this should be enabled by default if you have a relatively recent system.
+
+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.
+
+### Windows
+
+#### Package manager
+
+[Scoop](https://scoop.sh/) has Neovide in the `extras` bucket. Ensure you have the `extras` bucket, and install:
+
+```
+$ scoop bucket list
+main
+extras
+$ scoop install neovide
+```
+
+#### From source
+
+1. Install the latest version of Rust. I recommend
+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. Build and install Neovide:
+
+ ```sh
+ git clone https://github.com/Kethku/neovide
+ cd neovide
+ cargo build --release
+ ```
+
+6. Copy `./target/release/neovide.exe` to a known location and enjoy.
+
+### Mac (from source)
+
+1. Install the latest version of Rust. Using homebrew: `brew install rustup-init`
+2. Configure rust by running `rustup-init`
+3. Install CMake. Using homebrew: `brew install cmake`
+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.
+8. `cargo install cargo-bundle`
+9. `cargo bundle --release`
+10. Copy `./target/release/bundle/osx/neovide.app` to `~/Applications` and enjoy.
+
+### Linux
+
+#### Arch Linux
+
+There is an [AUR package for neovide](https://aur.archlinux.org/packages/neovide-git/).
+
+##### With Paru (or your preferred AUR helper)
+
+```sh
+paru -S neovide-git
+```
+
+##### Without helper
+
+```sh
+git clone https://aur.archlinux.org/neovide-git.git
+cd neovide-git
+makepkg -si
+```
+
+To install a non-default branch:
+
+```sh
+git clone https://aur.archlinux.org/neovide-git.git
+cd neovide-git
+nvim PKGBUILD
+:%s/l}/l}#branch=branch-name-here/
+:wq
+makepkg -si
+```
+
+Note: Neovide requires that a font be set in `init.vim` otherwise errors might be encountered.
+See [#527](https://github.com/Kethku/neovide/issues/527)
+
+##### With non-default branch
+
+```sh
+git clone https://aur.archlinux.org/neovide-git.git
+cd neovide-git
+REGEX=$(printf 's/{url}/&\#branch=%s/g' '')
+sed "$REGEX" PKGBUILD
+makepkg -si
+```
+#### With Snap
+Neovide is also available in the Snap Store. You can install it
+using the command below.
+
+```
+snap install neovide
+```
+[![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-white.svg)](https://snapcraft.io/neovide)
+
+
+#### From source
+1. Install necessary dependencies (adjust for your preferred package manager)
+
+ ```sh
+ sudo apt 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 libfontconfig1-dev
+ ```
+
+2. Install Rust
+
+ ```sh
+ curl --proto '=https' --tlsv1.2 -sSf "https://sh.rustup.rs" | sh
+ ```
+
+3. Clone the repository
+
+ ```sh
+ git clone "https://github.com/Kethku/neovide"
+ ```
+
+4. Build
+
+ ```sh
+ cd neovide && ~/.cargo/bin/cargo build --release
+ ```
+
+5. Copy `./target/release/neovide` to a known location and enjoy.
+
+## Troubleshooting
+- Neovide requires that a font be set in `init.vim` otherwise errors might be encountered. This can be fixed by adding `set guifont=Your\ Font\ Name:h15` in init.vim file. Reference issue [#527](https://github.com/Kethku/neovide/issues/527).
+
+### Linux-specific
+- If you recieve errors complaining about DRI3 settings, please reference issue [#44](https://github.com/Kethku/neovide/issues/44#issuecomment-578618052).
diff --git a/website/.gitignore b/website/.gitignore
new file mode 100644
index 0000000..bcb80c0
--- /dev/null
+++ b/website/.gitignore
@@ -0,0 +1,6 @@
+# Zola output
+public
+# Will be copied during the build process
+static/assets
+# Most md files are created by RISS on the fly, updated during the build process
+content/*.md
diff --git a/website/Makefile b/website/Makefile
new file mode 100644
index 0000000..defdd31
--- /dev/null
+++ b/website/Makefile
@@ -0,0 +1,16 @@
+.PHONY: md_update
+md_update:
+ @awk -f ./riss.awk < ../README.md >content/_index.md
+
+.PHONY: content_update
+content_update: md_update
+ @mkdir -p static/assets
+ @cp -r ../assets static/
+
+.PHONY: all
+all: content_update
+ @zola build
+
+.PHONY: serve
+serve: content_update
+ @zola serve
diff --git a/website/README.md b/website/README.md
new file mode 100644
index 0000000..d26c2c1
--- /dev/null
+++ b/website/README.md
@@ -0,0 +1,18 @@
+## Build
+
+To build neovide’s website, ensure you have [zola](https://getzola.org/) and `awk` installed.
+
+Then, in this directory, run:
+```sh
+git submodule update --init
+make serve
+```
+
+## Edit
+
+To ease maintenance, markdown files in [`content`](./content/) are often sourced from other parts of the repository, thanks to [RISS](https://cj.rs/riss). RISS allows to change the files slightly, see the [transformation reference](https://cj.rs/readme-in-static-site/#transformations-reference) for the syntax.
+
+For instance, `content/_index.md` is sourced from the [`README`](/README.md). Thus to make changes to `content/_index.md`, edit the [`README`](/README.md) and run:
+```
+make md_update
+```
diff --git a/website/config.toml b/website/config.toml
new file mode 100644
index 0000000..2b3ffdf
--- /dev/null
+++ b/website/config.toml
@@ -0,0 +1,23 @@
+# The URL the site will be built for
+base_url = "https://neovide.github.io/neovide"
+theme = "juice"
+
+# Whether to automatically compile all Sass files in the sass directory
+compile_sass = true
+
+# Whether to build a search index to be used later on by a JavaScript library
+build_search_index = false
+
+[markdown]
+# Whether to do syntax highlighting
+# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
+highlight_code = true
+
+[extra]
+# Put all your custom variables here
+juice_logo_name = "Neovide"
+juice_logo_path = "assets/neovide.svg"
+juice_extra_menu = [
+ { title = "Github", link = "https://github.com/neovide/neovide"}
+]
+repository_url = "https://github.com/neovide/neovide"
diff --git a/website/content/.gitkeep b/website/content/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/website/riss.awk b/website/riss.awk
new file mode 100644
index 0000000..956a9bb
--- /dev/null
+++ b/website/riss.awk
@@ -0,0 +1,41 @@
+#!/usr/bin/awk -f
+#
+# Copyright 2021 Clément Joly
+# https://cj.rs/riss
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Divide the input file into these types of sections:
+# * inserting: the current line is copied to the output, verbatim
+# * removing: the line is not copied to the output
+# To distinguish between these sections, the script interprets special
+# comments. These comments are removed from the output.
+BEGIN {
+ # Section identifier
+ removing = 0
+}
+
+/^