Skip to main content

A fast TUI lens over work knowledge

Project description

lazylens

Tests

A fast terminal lens over work knowledge.

lazylens builds a local SQLite/FTS index for project documents, then gives you a keyboard-first Textual TUI for search, structure navigation, previews, and document relationships. It currently supports local folders and Confluence Cloud. SharePoint is planned next.

It is useful when you want to explore work documents quickly without waiting on browser search, full sync clients, or heavyweight document UIs.

Screenshot

lazylens TUI showing sources, structure, page navigation, outgoing links, and incoming links

Features

  • Local SQLite index with FTS5 search.
  • Local folder indexing for Markdown, text, and other readable project files.
  • Confluence Cloud indexing with page hierarchy, folders, snippets, and links.
  • TUI structure navigation: source, top-level pages, folders, and child pages.
  • Relationship navigation: outgoing and incoming document links remain global.
  • Browser/file opening from the selected page.
  • Optional Nerd Font icon mode for richer terminal presentation.

Install

From PyPI, once published:

pipx install lazylens
lazylens --help

From a checkout:

git clone https://github.com/richlee/lazylens.git
cd lazylens
python3 -m venv .venv
.venv/bin/python -m pip install -e ".[dev]"
.venv/bin/lazylens --help

On Windows PowerShell:

git clone https://github.com/richlee/lazylens.git
cd lazylens
py -m venv .venv
.\.venv\Scripts\python -m pip install -e ".[dev]"
.\.venv\Scripts\lazylens --help

Quick Start

Create a local demo source and open the TUI:

lazylens demo
lazylens

For your own local folder:

lazylens init --root ~/Documents/notes --name Notes --key notes
lazylens index
lazylens

Useful commands:

lazylens doctor
lazylens index
lazylens search architecture
lazylens

Confluence Setup

lazylens uses Atlassian API-token basic auth for Confluence Cloud. Search in the TUI remains local; the Confluence API is used only to refresh the SQLite index.

Generate config and an env-file skeleton:

lazylens init confluence \
  --base-url "https://example.atlassian.net" \
  --email "you@example.com" \
  --space-key ARCH

Edit the generated env file and paste an Atlassian API token:

${EDITOR:-vi} ~/.config/lazylens/atlassian.env
source ~/.config/lazylens/atlassian.env
lazylens doctor
lazylens index personal-confluence
lazylens

The token should stay in ~/.config/lazylens/atlassian.env or your shell environment, not in config.toml.

For personal or non-client testing, create a small Atlassian Cloud site, add a dedicated space, create an API token from your Atlassian account security settings, then run lazylens doctor before indexing.

Configuration

Default config path:

  • macOS/Linux: ~/.config/lazylens/config.toml
  • Windows: %APPDATA%\lazylens\config.toml

Default database path:

  • macOS/Linux: ~/.local/share/lazylens/index.sqlite3
  • Windows: %LOCALAPPDATA%\lazylens\index.sqlite3

Example:

database = "~/.local/share/lazylens/index.sqlite3"

[ui]
icon_style = "ascii" # ascii, unicode, or nerd

[sources."notes"]
name = "Notes"
type = "local"
root = "~/Documents/notes"

[sources."personal-confluence"]
name = "Personal Confluence"
type = "confluence"
space_keys = ["ARCH"]
page_limit = 100
max_pages = 5

For Confluence, space_keys is usually the friendliest scope to configure. You can also configure space_ids if you already know them. page_limit controls API page size, and max_pages limits how many API result pages are fetched per space.

If needed, base_url, email, or api_token_env can be set on a source. The token value itself should stay out of TOML. CONFLUENCE_BASE_URL may be either the Atlassian site root or the /wiki URL.

TUI Keys

  • 1-9: switch source
  • /: focus search
  • c: clear search
  • r: refresh configured sources
  • Enter: select structure, open pages, or drill into folders
  • Right / Space: drill into page/folder children or follow selected links
  • Left / Backspace: go back from a drilled view
  • q: quit

Icons

The TUI defaults to portable ASCII labels. For richer icons:

[ui]
icon_style = "nerd" # ascii, unicode, or nerd

nerd mode expects a Nerd Font in your terminal, for example FiraCode Nerd Font. On macOS with Homebrew:

brew install --cask font-fira-code-nerd-font

Development

python3 -m venv .venv
.venv/bin/python -m pip install -e ".[dev]"
.venv/bin/python -m pytest

The project is intentionally local-first: remote APIs refresh the index, while interactive search/navigation reads from SQLite.

See docs/plan.md for the broader direction.

References

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

lazylens-0.2.1.tar.gz (36.8 kB view details)

Uploaded Source

Built Distribution

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

lazylens-0.2.1-py3-none-any.whl (29.9 kB view details)

Uploaded Python 3

File details

Details for the file lazylens-0.2.1.tar.gz.

File metadata

  • Download URL: lazylens-0.2.1.tar.gz
  • Upload date:
  • Size: 36.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for lazylens-0.2.1.tar.gz
Algorithm Hash digest
SHA256 7052dbffd5bb74aeefbba517da4ce040a423ddbac220ee507e2d447df373534b
MD5 0c9920477b67d20b55633112334c2c95
BLAKE2b-256 99703e363ea722322caf89ad3a9a87ec4fee104c89109f22b017795045e452cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for lazylens-0.2.1.tar.gz:

Publisher: publish.yml on richlee/lazylens

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lazylens-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: lazylens-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 29.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for lazylens-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8e7a8ca098f37cbdf58198d0e1f2a93f0b5cc2a0f2b50de306833ca1c662d827
MD5 50846054d83b375a959d4b50cec69773
BLAKE2b-256 e2752461773fa870a8189aeb394665929da8e2044242a3618052fc9e02f8430a

See more details on using hashes here.

Provenance

The following attestation bundles were made for lazylens-0.2.1-py3-none-any.whl:

Publisher: publish.yml on richlee/lazylens

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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