Skip to main content

Installation

This guide walks you through installing the Lovelace Neovim extension using various plugin managers.

Quick Install (Automated)

Run the automated installer for guided setup:

bash
cd apps/neovim-extension
./install.sh

The installer will:

  • ✅ Verify Neovim 0.9+ is installed
  • ✅ Check for lattice-ctl availability
  • ✅ Detect your plugin manager (lazy.nvim, packer, vim-plug)
  • ✅ Provide installation instructions
  • ✅ Generate example configuration
  • ✅ Guide you through setup

Manual Installation

Step 1: Start Lattice Daemon

Ensure the Lattice daemon is running:

bash
# Start the daemon
lattice-ctl daemon start

# Verify it's running
lattice-ctl daemon status

Step 2: Install Plugin

Using lazy.nvim (recommended)

lua
{
  "lovelace-ai/lovelace.nvim",
  config = function()
    require("lovelace").setup({
      -- Optional configuration (see below)
    })
  end,
}

Using packer.nvim

lua
use {
  "lovelace-ai/lovelace.nvim",
  config = function()
    require("lovelace").setup()
  end
}

Using vim-plug

vim
Plug 'lovelace-ai/lovelace.nvim'

" In your init.vim
lua require("lovelace").setup()

Step 3: Verify Installation

After restarting Neovim, run the health check:

vim
:LovelaceHealth

Expected Output:

✓ Connected to Lattice daemon
  Socket: ~/.lovelace/lattice/daemon.sock

## Pairing / Trust
✗ Device not set up
ℹ Run :LovelaceAuth to pair this Neovim client

If you see errors, see Troubleshooting below.

Step 4: Pair Device (First Time Only)

If your device is not set up, run:

vim
:LovelaceAuth

Follow the pairing flow:

  1. Press c to copy the pairing code
  2. Approve the code on a trusted device (for example: ada pair approve <code>)
  3. Press r to refresh (optional)
  4. Press x to cancel (optional)

Configuration

Minimal Configuration (Default)

lua
require("lovelace").setup()

This uses sensible defaults that work for most users.

Custom Configuration

lua
require("lovelace").setup({
  -- Daemon connection
  daemon = {
    socket_path = nil,      -- Auto-discover (default: ~/.lovelace/lattice/daemon.sock)
    auto_start = true,      -- Start daemon if not running
    retry_count = 3,        -- Connection retry attempts
  },

  -- UI preferences
  ui = {
    result_window = "split",     -- "split", "vsplit", "float", "tab"
    progress_style = "notify",   -- "notify", "statusline", "both"
    float_width = 0.8,           -- Floating window width (0.0-1.0)
    float_height = 0.8,          -- Floating window height (0.0-1.0)
    float_border = "rounded",    -- Window border style
  },

  -- Task defaults
  tasks = {
    auto_collect_context = true,  -- Include file/selection automatically
    default_workspace = nil,      -- Use current workspace if nil
  },

  -- Keybindings
  keymaps = {
    enabled = true,          -- Enable default keybindings
    prefix = "<leader>l",    -- Key prefix
  },

  -- Logging
  log_level = "info",  -- "debug", "info", "warn", "error"
})

For complete configuration options and detailed explanations, see the Configuration Guide.

Troubleshooting

Daemon Not Connected

Symptom: :LovelaceHealth shows "Disconnected"

Solution:

bash
# Check daemon status
lattice-ctl daemon status

# Start if not running
lattice-ctl daemon start

Device Not Set Up

Symptom: :LovelaceHealth shows "Device not set up"

Solution:

vim
:LovelaceAuth
" Press 'c' to copy pairing code, then approve it on a trusted device

Command Not Found

Symptom: E492: Not an editor command: LovelaceTask

Solution:

  1. Ensure plugin is loaded:
    vim
    :echo has('nvim-0.9')  " Should return 1
    
  2. Verify plugin installation:
    vim
    :Lazy  " If using lazy.nvim
    " Check that lovelace.nvim is installed
    
  3. Restart Neovim

Verbose Logging

For debugging issues, enable verbose logging:

lua
require("lovelace").setup({
  log_level = "debug"
})

Then check :messages for detailed information.

For complete troubleshooting guide, see Troubleshooting.

Next Steps