neopunk.nvim.git - README

neopunk

A Neovim addon for browsing Gemini content using the openk.py command.

It will support others, too, but openk is the one I started with.

Features

Requirements

Optionally, ansi.nvim can add color to the page content by converting escape sequences.

What about netrw/gf?

Neovim/Vim support reading and writing remote files over the network, but I dont know how to add additional protocols. For example, if you want to make gf use openk.py instead of the default for http/https you could do that with the following:

vim.g.netrw_http_cmd="openk.py %s >"

Put that in your init.lua and using gf on http/https links would call openk.py on https links.

However, I don't know how to make that work for new schemes like gemini.

Installation

Place this plugin in your Neovim plugin directory.

Add the following to your init.lua:

require('neopunk').setup()

Or, the lazy way:

{
    "https://thatit.be/neopunk.nvim.git",
}

Or using an example of the default config:

{
  "https://git.thatit.be/neopunk.nvim.git",
  config = function()
    require("neopunk").setup({
      key = "<Leader>.",
      execute_command = "openk.py --linkmode=end %s",
    })
  end
}

Usage

:Go [URL]

Fetches a Gemini page using opnk --linkmode=end and appends the content to the current buffer.

<Leader>. in Normal Mode

In text files (which includes Gemini content), pressing <Leader>. will automatically use the :Go command to fetch and display the link content.

Example

How you might use it

  1. Create or open a text file in Neovim
  2. Navigate to or insert a Gemini link (e.g., gemini://thatit.be)
  3. Press <Leader>.

The content from opnk --linkmode=end will be appended to your buffer.

What that might look like

Before navigation:

gemini://thatit.be

After navigation (escape sequences preserved, highly recommend :AnsiEnable with ansi.nvim):

# gemini://thatit.be
2026-02-19 21:14: Fetched gemini://thatit.be

    thatit.be (14 links)   (last accessed on Tue Feb 17 11:01:27 2026)
    THAT IT BE
    
    > “Yes, it is,” not “That it be.” And you don’t have to talk in that
    > stupid voice to me, I’m not a tourist!
    
    – Blackadder
    
    Among other content here is a collection of miscellaneous notes. They’re
    not as clear and coherent as the entry-points below. They’re more ZK-
    style notes that I’ve tagged as publishable so that I can review or
    reference them later. They can be found by browsing the tags or cross
    linked from other notes, or from the massive page of all notes.
    
    Posts
    
    [1] 2026-02-09 - launch email from offpunk
    [2] 2026-02-07 - Doing Not Much Tweaking
    [3] 2026-02-05 - Git and Email Patches
    [4] 2026-02-04 - NixOS Books
    [5] 2026-02-03 - added a pipeline
    [6] 2026-01-30 - AI so far
    [7] 2026-01-28 - git repos on thatit.be
    [8] 2026-01-11 - Epy for Epub
    [9] 2026-01-10 - AI in Neovim
    [10] 2026-01-01 - making yogurt
    
    Navigation
    
    [11] all notes
    [12] tags
    [13] atom
    [14] contact me
    
    (re)generated: 2026-02-16
[1] gemini://thatit.be/2026-02-09-15-31-46.gmi
[2] gemini://thatit.be/2026-02-07-18-54-20.gmi
[3] gemini://thatit.be/2026-02-05-22-03-16.gmi
[4] gemini://thatit.be/2026-02-04-22-16-06.gmi
[5] gemini://thatit.be/2026-02-03-08-38-56.gmi
[6] gemini://thatit.be/2026-01-30-16-14-51.gmi
[7] gemini://thatit.be/2026-01-28-06-37-54.gmi
[8] gemini://thatit.be/2026-01-11-09-50-48.gmi
[9] gemini://thatit.be/2026-01-10-11-01-40.gmi
[10] gemini://thatit.be/2026-01-01-09-10-40.gmi
[11] gemini://thatit.be/notes-all.gmi
[12] gemini://thatit.be/tags-all.gmi
[13] gemini://thatit.be/atom.xml
[14] gemini://thatit.be/contact.gmi

Further pages can be fetched by invoking over a numbered link. If it's from a numbered link in the page body it has the added bonus of using that link label in the heading it creates upon fetching the next page.


Last updated: 2026-02-21 11:05:30