Crates.io | learner |
lib.rs | learner |
version | |
source | src |
created_at | 2024-11-03 01:30:23.243904 |
updated_at | 2024-11-29 14:41:26.240524 |
description | A simple library for learning stuff |
homepage | |
repository | https://github.com/autoparallel/learner |
max_upload_size | |
id | 1433311 |
Cargo.toml error: | TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
Features Installation Usage Configuration Roadmap Contributing Development License Acknowledgements
Paper Metadata Management
Local Database
Interactive Interfaces
[dependencies]
learner = { version = "*" } # Uses latest version
cargo +nightly install learnerd --features tui
This installs both the CLI tool and TUI interface, accessible via the learner
command.
To obtain shell completions for learner
:
# replace fish with your shell: bash, zsh or whatever
# then, move completions to somewhere reasonable, and source them from your shell setup config.
learner -g fish > learner_completions.fish
source learner_completions.fish
use learner::{Paper, Database};
#[tokio::main]
async fn main() -> Result> {
let db = Database::open(Database::default_path()).await?;
// Add papers from various sources
let paper = Paper::new("https://arxiv.org/abs/2301.07041").await?;
paper.save(&db).await?;
// Download associated document
let storage = Database::default_storage_path();
paper.download_pdf(&storage).await?;
Ok(())
}
# Initialize database
learner init --default-retrievers
# Add papers
learner add 2301.07041
learner add "https://arxiv.org/abs/2301.07041" --pdf
learner add "10.1145/1327452.1327492" --no-pdf
# Search papers
learner search "quantum computing"
learner search "quantum" --author "Feynman" --detailed
learner search "neural" --source arxiv --before 2023
# Remove papers
learner remove "outdated paper"
learner remove "temp" --force --remove-pdf
If you install with
cargo install learnerd --features tui
you can get access to a Terminal User Interface (TUI). To launch the interactive TUI just do:
learner
TUI navigation:
↑
/k
, ↓
/j
: Navigate papers←
/h
, →
/l
: Switch panes:
: Enter command modeo
: Open selected PDFq
: QuitTUI commands:
:add # Add a paper
:remove # Remove paper(s)
:search # Search papers
(TODO:) Search within TUI supports all filters:
:search "quantum" --author "Feynman"
:search "neural" --source arxiv --before 2023
learnerd
can run as a background service for paper monitoring and updates.
Currently, there are no distinct processes it runs but there is a tracking issue: issue #83.
# Install and start
sudo learnerd daemon install
sudo systemctl enable --now learnerd # Linux
sudo launchctl load /Library/LaunchDaemons/learnerd.daemon.plist # macOS
# Remove
sudo learnerd daemon uninstall
Files: learnerd.log
(main, rotated daily), stdout.log
, stderr.log
The learner
system uses a flexible configuration system that allows customization of paper sources, storage paths, and retrieval behavior.
Config:
~/.config/learner/config.toml
~/Library/Application Support/learner/config.toml
%APPDATA%\learner\config.toml
Database:
~/.local/share/learner/learner.db
~/Library/Application Support/learner/learner.db
%APPDATA%\learner\learner.db
Papers:
~/Documents/learner/papers
Documents\learner\papers
The configuration file (config.toml
) allows you to customize:
# Base configuration
[config]
database_path = "/custom/path/to/db.sqlite" # Where the datbase itself is stored
storage_path = "/custom/path/to/papers" # Where the documents are stored
retrievers_path = "/custom/path/to/papers" # Where configuration for retrievers are stored
[sources.new_source]
name = "New Paper Source"
base_url = "https://api.example.com"
pattern = "^PREFIX-\\d+$" # Regex for identifier validation
endpoint_template = "/api/v1/papers/{identifier}"
headers = { "API-Key" = "your-key" } # Optional headers
# For JSON responses
response_format = { type = "json" }
field_maps.title = { path = "data.title" }
field_maps.abstract = { path = "data.description" }
field_maps.pdf_url = {
path = "data.files.pdf",
transform = { type = "url", base = "https://cdn.example.com", suffix = ".pdf" }
}
# For XML responses
response_format = { type = "xml" }
field_maps.title = { path = "paper/title" }
field_maps.authors = { path = "paper/authors/author" }
Put this TOML configuration file in your ~/.learner/retrievers/
(or equivalent) directory.
Examples can be found in crates/learner/config/retrievers/
.
Custom sources must provide:
JSON:
XML:
learner
- Core library
learnerd
- CLI application
Retriever
abstraction)learner
can be a plugin with/for other apps (e.g., Raycast, Syncthing)Contributions welcome! Please open an issue before making major changes.
Our automated pipeline ensures:
Code Quality
Testing
All checks must pass before merging pull requests.
This project uses just as a command runner.
# Setup
cargo install just
just setup
# Common commands
just test # run tests
just fmt # format code
just ci # run all checks
just build-all # build all targets
[!TIP] Running
just setup
andjust ci
locally is a quick way to get up to speed and see that the repo is working on your system!
This project is licensed under the MIT License - see the LICENSE file for details.