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.0.tar.gz (36.5 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.0-py3-none-any.whl (29.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: lazylens-0.2.0.tar.gz
  • Upload date:
  • Size: 36.5 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.0.tar.gz
Algorithm Hash digest
SHA256 8c11c8356aac241a8c5174682dd34235c6fcfc8cc5373d9e18afeb94728b4739
MD5 6738b29bb2b947fda97ebca7312d642b
BLAKE2b-256 253957bbc1c657343d868fc7eb5157395cbd3c714f3161b70c5ded4e9aac25a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for lazylens-0.2.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: lazylens-0.2.0-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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2f9c1172e623260ab48795ed3367790d009d09a632b9528f1fe4cb499508aa3e
MD5 0884c804d0377a1f308f2b4c59b063c0
BLAKE2b-256 a199472cad9a091cbace34276fd334ddf6e8ee2bbfad9d8aafe618add57a999d

See more details on using hashes here.

Provenance

The following attestation bundles were made for lazylens-0.2.0-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