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.1.0.tar.gz (34.2 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.1.0-py3-none-any.whl (27.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for lazylens-0.1.0.tar.gz
Algorithm Hash digest
SHA256 29a9a49a2229d8bafffb65615b36ce836ff84e5bae6f1641e4efd65517404e8a
MD5 e5d04cbc1d39b2f50c3b9460f87b0887
BLAKE2b-256 0e90948d1a9736ccf41b11f23e574e27b920433111a6b0676bae84e63b00214b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: lazylens-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 27.8 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 549966222a3970623a83b06875a2ef5f87ab1d358007c8813cf4d59ec56180eb
MD5 91dc6c7992d7de8c03019fbf5575b4a8
BLAKE2b-256 712371a1837910aea1f2f16cbe703387e80098f9c9c6162469989e46aa916663

See more details on using hashes here.

Provenance

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