Skip to main content

A simple LSP server for your bibliographies

Project description

Logo

Bibli Language Server

A Language Server that brings bibliographies into your notes.

image-version image-license image-python-versions

Supported LSP capabilities

LSP Features Behavior
textDocument/definition Go to the first definition found in the .bib files.
textDocument/references Find appearance of prefix + ID with ripgrep.
textDocument/hover Show metadata from .bib files based on configurations.
textDocument/completion Triggered by the cite_prefix configuration. Show completion of citation ID for bibtex entries and their documentation.
textDocument/diagnoistic Find citations without a proper entry in the bibfile.
textDocument/implementation (Non-standard) Open the bibtex url/attachment.

Configuration

Create a configuration file .bibli.toml at the root of your note directory. Here is a sample configuration. For the complete list of configurations, refer to the documentation and the default config.

[backends] # Specifying backends for bibtex libraries
# Backends can be of any names, e.g.,
[backends.mylib]
backend_type = "bibfile" # Available backends: "bibfile", "zotero_api"
bibfiles = ["references.bib"]

[backends.my_lab_lib]
backend_type = "zotero_api"
library_id = "5123456" # Your library ID
library_type = "user" # "user"" or "group"
api_key = "XXXXXXXXXXXXXXXXXXXXXXXX"

[cite] # How to cite bibtex entires, e.g., "[@john2024paper]"
trigger = "@"

[view] # How to display your document externally
viewer = "browser" # Available viewer: `zotero`, `zotero_bbt` and `browser`

[hover.doc_format] # How to display hover documentation
show_fields = ["abstract", "year", "booktitle", "url"]
format = "table" # Available formats: "table"  and "list" (markdown)

[completion.doc_format] # How to display hover documentation
show_fields = ["abstract", "year", "booktitle"]
format = "list"

Backends

Currently, Bibli supports bibfile and zotero_api backends.

  • bibfile backend loads the library from a local bibtex file.
  • zotero_api backend connects directly to your Zotero web library, removing the need for maintaining separated bibfiles. It cache the results in a bibfile named .{backend name}_{library type}_{library id}.bib. Run the command LSP library.reload_all to refetch the online content.

Viewers

We support openning the url in browser, or openning PDF attachment (for zotero-based backends). TODO: support custom PDF viewer. The current viewers are:

  • browser: opens the url field in the bibtx entry in your default browser
  • zotero_bbt shows the document in Zotero's PDF viewer (require better bibtex to be installed and Zotero to be running)
  • zotero shows the entry in Zotero.

Neovim configuration

Automatic configuration through lspconfig has yet to be supported. To enable bibli-ls, put the following code in your Neovim config.

local lspconfig = require("lspconfig")
local configs = require("lspconfig.configs")

if not configs.bibli_ls then
  configs.bibli_ls = {
    default_config = {
      cmd = { "bibli_ls" },
      filetypes = { "markdown" },
      root_dir = lspconfig.util.root_pattern(".bibli.toml"),
      -- Optional: visit the URL of the citation with LSP DocumentImplementation
      on_attach = function(client, bufnr)
        vim.keymap.set({ "n" }, "<cr>", function()
          vim.lsp.buf.implementation()
        end)
      end,
    },
  }
end

lspconfig.bibli_ls.setup({})

Helix configuration

To enable bibli-ls, put the following code in your Helix config (.config/helix/languages.toml):

  [language-server.bibli-ls]
  command = "bibli_ls"
  required-root-patterns = [".bibli.toml"]

  [[language]]
  name = "markdown"
  language-servers = ["bibli-ls"]  # Add other md lsps like zk, marksman, ...
  roots = [".bibli.toml"]

Installation

Install the latest release of bibli-ls through pip:

pip install bibli-ls

# Alternatively, on Arch:
pipx install bibli-ls

Using Nix

Installation via Flakes

In your flake.nix:

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";

    bibli-ls = {
      url = "github:kha-dinh/bibli-ls";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  # ...
  outputs =
    {
      self,
      bibli-ls,
      nixpkgs,
      ...
    }@inputs:
    let
      pkgs-flake = {
        bibli-ls = bibli-ls.packages.${system}.default;
      };

      customOverlays = [
        (final: prev: {
          flake = pkgs-flake;
        })
      ];
    in
      nixosConfigurations = {
        yourMachine = nixpkgs.lib.nixosSystem {
          inherit system;
          modules = [
            { nixpkgs.overlays = customOverlays; }
            # ...
          ];
        };
      };
}

Then you can use it in your configuration:

{
  environment.systemPackages = [ pkgs.flake.bibli-ls ];
}

Home Manager Configuration

Add bibli-ls to your home-manager configuration:

{ config, pkgs, ... }:
{
  home.packages = [ pkgs.flake.bibli-ls ];

  home.file."Sync/Notes/zk/permanent/.bibli.toml".text = ''
    [backends]
    [backends.library]
    backend_type = "bibfile"
    bibfiles = ["${config.home.homeDirectory}/Sync/Bibliography/library.bib"]
  '';
}

Building from source

From the root directory:

pip install . # --force-reinstall if needed
# Or for Arch
pipx install . # --force-reinstall if needed
# And Nix
nix build # The built package will be available in `./result`. You can also use `nix run`

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bibli_ls-0.1.7.2.tar.gz (18.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bibli_ls-0.1.7.2-py3-none-any.whl (18.1 kB view details)

Uploaded Python 3

File details

Details for the file bibli_ls-0.1.7.2.tar.gz.

File metadata

  • Download URL: bibli_ls-0.1.7.2.tar.gz
  • Upload date:
  • Size: 18.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for bibli_ls-0.1.7.2.tar.gz
Algorithm Hash digest
SHA256 d14986ebe2116690fd6bb49669e71155a13a7aa27241c8ad44bdec36072d730c
MD5 ca7368e7d680a7c4f3a5a79c9a7275ce
BLAKE2b-256 6c5b698da1f704c1fc07d876db2a8dbc6187fb5826a0e341e1e093d502f1ea10

See more details on using hashes here.

File details

Details for the file bibli_ls-0.1.7.2-py3-none-any.whl.

File metadata

  • Download URL: bibli_ls-0.1.7.2-py3-none-any.whl
  • Upload date:
  • Size: 18.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for bibli_ls-0.1.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f59c9333f4a02ac83541a570f6ee14e15161d4b1e17d702e31e7204f5fcc5901
MD5 44eca2ff43e9612d26d81fefa4f11479
BLAKE2b-256 b956e4cc5c6eff6c0f102ec00df403bc0939b6aa731f77b11103bc5e4e40f4fc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page