Linux-first command snippet manager for markdown notes
Project description
OpIndex
OpIndex is a Linux-first command memory tool for markdown notes. It parses reusable command blocks from your notes, lets you search them from a launcher, and copies the selected command to the clipboard.
The current UI is optimized for rofi on X11, but the note format and CLI are useful independently of the launcher.
What it does
- searches reusable commands from markdown files
- organizes sources into named workspaces
- supports quick workspace switching from a launcher
- shows source-document context while browsing
- lints notes against the OpIndex authoring standard
- copies selected commands to the clipboard
Platform
OpIndex currently targets Linux. It expects one of:
rofifor the interactive launcher flowxclip,xsel, orwl-copyfor clipboard access
Installation
System dependencies
Debian or Ubuntu:
sudo apt install rofi xclip
Wayland clipboard support:
sudo apt install wl-clipboard
Python package
pipx install opindex
This installs the opindex command.
For local development from this repository:
pipx install .
Quick start
Create a config:
opindex --create-config
Run the selector in the default workspace:
opindex
Open the workspace picker first:
opindex --workspace-menu
Search a specific workspace:
opindex --workspace notes
Search all workspaces:
opindex --all
Browse by workspace, then document:
opindex --browse
Configuration
The config file lives at:
~/.config/opindex/config.yaml
Example:
default_workspace: notes
workspaces:
notes:
directories:
- "~/notes/commands"
files: []
recursive: true
file_patterns:
- "*.md"
- "*.markdown"
cheatsheets:
directories:
- "~/notes/reference"
files: []
recursive: true
file_patterns:
- "*.md"
- "*.markdown"
rofi:
max_lines: 15
prompt: "Commands"
window_width: 60
element_height: 2
cache:
enabled: true
directory: null
substitute_variables: false
variables: {}
Markdown format
Minimal parseable format:
# Azure CLI
## Login with device code
```bash
az login --use-device-code
```
OpIndex parses:
#as the category##as the searchable task heading- fenced code blocks as command content
Supported command block languages:
- empty language
bashshshellpowershellps1cmdbatbatch
For the stricter durable-note format, see:
Linting
Lint a specific note:
opindex --lint-files path/to/file.md
Lint the selected workspace sources:
opindex --lint-files
CLI
Common commands:
opindex --help
opindex --list-workspaces
opindex --list-files
opindex --list-commands
opindex --clear-cache
opindex --config-path
Development
Enter the dev shell:
direnv allow
Or without direnv:
nix develop
Run tests:
pytest -q
Run the parser against a file:
python -m cmd_manager.parser test_data/sample.md
Lint a note during development:
./opindex --lint-files test_data/sample.md
Publishing
Release notes for maintainers:
Releases publish to PyPI from pushed tags in the form v<semver>.
License
MIT
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file opindex-0.1.3.tar.gz.
File metadata
- Download URL: opindex-0.1.3.tar.gz
- Upload date:
- Size: 24.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
134b836035d110fc875251bfd68e91487cd16d975f97283ec1364fce9318b897
|
|
| MD5 |
7642a3836beddaa615017d49f4a4b2d8
|
|
| BLAKE2b-256 |
1f8b1165e9221121744c1494c6a5805eb1d96f4bdc212db825bc5238413cf760
|
Provenance
The following attestation bundles were made for opindex-0.1.3.tar.gz:
Publisher:
publish-pypi.yml on CameronCandau/OpIndex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
opindex-0.1.3.tar.gz -
Subject digest:
134b836035d110fc875251bfd68e91487cd16d975f97283ec1364fce9318b897 - Sigstore transparency entry: 1921206219
- Sigstore integration time:
-
Permalink:
CameronCandau/OpIndex@de77bc141a73e921159c77eec8d33dc80eee07fd -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/CameronCandau
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@de77bc141a73e921159c77eec8d33dc80eee07fd -
Trigger Event:
push
-
Statement type:
File details
Details for the file opindex-0.1.3-py3-none-any.whl.
File metadata
- Download URL: opindex-0.1.3-py3-none-any.whl
- Upload date:
- Size: 21.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd4f170e0ce00bb300a4cd34c27d59aef9c860e082bdb62a6f7fe74dd8204243
|
|
| MD5 |
286d0f3b5027de65a37726234e5e10fc
|
|
| BLAKE2b-256 |
b0b1f4e6d1ea66c78da1eb6e10a0835fe294f7a9cde99b87e44a805b95cccf82
|
Provenance
The following attestation bundles were made for opindex-0.1.3-py3-none-any.whl:
Publisher:
publish-pypi.yml on CameronCandau/OpIndex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
opindex-0.1.3-py3-none-any.whl -
Subject digest:
dd4f170e0ce00bb300a4cd34c27d59aef9c860e082bdb62a6f7fe74dd8204243 - Sigstore transparency entry: 1921206372
- Sigstore integration time:
-
Permalink:
CameronCandau/OpIndex@de77bc141a73e921159c77eec8d33dc80eee07fd -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/CameronCandau
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@de77bc141a73e921159c77eec8d33dc80eee07fd -
Trigger Event:
push
-
Statement type: