Compare commits
135 Commits
v0.1.0
...
478e5b88bc
| Author | SHA1 | Date | |
|---|---|---|---|
| 478e5b88bc | |||
| 38f1dfec4e | |||
| bdb4b30012 | |||
| 5e68db2464 | |||
| d1b1e1c4bb | |||
| 6a90e43067 | |||
| 4317eff40e | |||
| cc6c552d5a | |||
| 43c225a4b5 | |||
| e87ae0c517 | |||
| 08803640a4 | |||
| 5f48f07b77 | |||
| c5c524d335 | |||
| b11b028245 | |||
| ced260dd0f | |||
| 1a87c72f7d | |||
| 284de44dcd | |||
| fd6c621eeb | |||
| 34af90e7e5 | |||
| 1f736aabe5 | |||
| 609b2fcac3 | |||
| f48f38400d | |||
| e49b68287b | |||
| de23523200 | |||
| dde4796d23 | |||
| 7f0d195017 | |||
| e98a68f32c | |||
| 7815717346 | |||
| 61191ac03e | |||
| 1866695eca | |||
| 05c2730c61 | |||
| a97a3d1ba9 | |||
| 41598c3542 | |||
| 5d3ab60adf | |||
| 18a802c2e2 | |||
| c1cfde1e4b | |||
| b78b32bda9 | |||
| bc51a5e586 | |||
| a32524ec64 | |||
| d03914053f | |||
| b1c2884254 | |||
| 0239b4f8d7 | |||
| 04f7e248b4 | |||
| 0c1bdc0418 | |||
| 71d3016a1c | |||
| 913a81b0bd | |||
| c0f3ab1cf2 | |||
| 44319bece1 | |||
| f3c5de68b6 | |||
| 50eaef0a9d | |||
| c84b82fd1f | |||
| c711512689 | |||
| 54a76e71f0 | |||
| c7b7c4fc9d | |||
| 727d56dbda | |||
| d7a4421464 | |||
| e69bc16f0c | |||
| 1e74331428 | |||
| 52593cb2ef | |||
| 879ff3c2c5 | |||
| 0893d5e959 | |||
| 94361997ff | |||
| dd834e55bd | |||
| d4cdb0aa1d | |||
| 89581e08ab | |||
| fc5069908b | |||
| 417ff56f67 | |||
| 6d571c93c8 | |||
| 643ecf17be | |||
| e4fccdbcb9 | |||
| fd70333f3f | |||
| 84cdb374c4 | |||
| 8b3526d8cb | |||
| 3c8a709549 | |||
| f53a02c13b | |||
| 4f74624e73 | |||
| 7657969147 | |||
| 0ec48197ba | |||
| 563c661555 | |||
| fbc2719ff4 | |||
| df86c1d1be | |||
| a5f81ad9ab | |||
| 9ebbbae15e | |||
| 619d8871f2 | |||
| d02812f95c | |||
| 0f51b32680 | |||
| 1873525c4a | |||
| a7f61908c2 | |||
| 02169a7ad3 | |||
| 446c66f101 | |||
| a3506551ea | |||
| 2518d4778c | |||
| 78ec8240d4 | |||
| d9f89bba7b | |||
| ec87c36908 | |||
| 01bd848244 | |||
| 7cbf723d04 | |||
| f76360fae7 | |||
| cf50300be6 | |||
| 3a4c15a448 | |||
| 4b19d7d743 | |||
| 90f91ce082 | |||
| b5e6912cc4 | |||
| e83e297843 | |||
| 0447c8495d | |||
| 032fedc549 | |||
| 0760c8c126 | |||
| 4dda5d2a97 | |||
| a7b01cbf0b | |||
| 2f6b32c2c7 | |||
| d86ace0bf3 | |||
| 8c99cc785e | |||
| b807402dba | |||
| e922c04226 | |||
| 2265fb3e21 | |||
| ad6dee1dcd | |||
| 03883e7e4f | |||
| 4ff4ac7961 | |||
| b49f83a891 | |||
| 7ede631db4 | |||
| 3a031ba8a2 | |||
| 8597b34792 | |||
| 729a8e8d8a | |||
| 0cf2a8d386 | |||
| bb6238bfa6 | |||
| 562ba063cb | |||
| a08bba8a3d | |||
| 4c818ccd86 | |||
| 12f11ce5b0 | |||
| e29ca5679e | |||
| 34a210228e | |||
| df9c47ad03 | |||
| 3900e3c8fc | |||
| 6c88a66273 | |||
| 614907613e |
18
.gitmodules
vendored
@@ -1,9 +1,9 @@
|
||||
[submodule "org-agent"]
|
||||
path = org-agent
|
||||
url = ssh://git@10.10.10.201:2222/amr/org-agent.git
|
||||
[submodule "projects/org-agent"]
|
||||
path = projects/org-agent
|
||||
url = ssh://git@10.10.10.201:2222/amr/org-agent.git
|
||||
[submodule "projects/org-agent-contrib"]
|
||||
path = projects/org-agent-contrib
|
||||
url = ssh://git@10.10.10.201:2222/amr/org-agent-contrib.git
|
||||
[submodule "opencortex"]
|
||||
path = opencortex
|
||||
url = ssh://git@10.10.10.201:2222/amr/opencortex.git
|
||||
[submodule "projects/opencortex"]
|
||||
path = projects/opencortex
|
||||
url = ssh://10.10.10.201:2222/amr/opencortex.git
|
||||
[submodule "projects/opencortex-contrib"]
|
||||
path = projects/opencortex-contrib
|
||||
url = ssh://git@10.10.10.201:2222/amr/opencortex-contrib.git
|
||||
|
||||
139
.opencode/AGENTS.md
Normal file
@@ -0,0 +1,139 @@
|
||||
# OpenCortex Agent Mandate
|
||||
|
||||
This file defines the operating policies and engineering guidelines that all autonomous agents MUST follow.
|
||||
|
||||
## Vision
|
||||
|
||||
- **Pure Lisp + Org-mode**: All intelligence implemented in Lisp, all documentation in Org-mode
|
||||
- **No JSON, No YAML**: Thin harness, fat skills
|
||||
- **Constraint**: No temporary scripts in opencortex repo - use `/home/user/memex/system/` instead
|
||||
|
||||
## Current Goal
|
||||
|
||||
- **v0.2.0**: Self-Improvement + Local LLMs
|
||||
- org-skill-self-edit (self-modification)
|
||||
- org-skill-emacs-edit (full org-mode manipulation)
|
||||
- Local vector search (Ollama embeddings)
|
||||
- Tool permission tiers (ask/allow/deny)
|
||||
- Skill hot-reload ✅ DONE
|
||||
- Engineering Standards skill ✅ DONE
|
||||
- Literate Programming skill ✅ DONE
|
||||
|
||||
## Wake-Up Protocol
|
||||
|
||||
When this agent starts, it MUST:
|
||||
|
||||
1. **Read this file** (`~/.opencode/AGENTS.md`)
|
||||
2. **Query the skill catalog**: Before any analysis, check if a skill covers the problem domain
|
||||
- `(list-skills)` to see all loaded skills
|
||||
- `(find-skill :keyword)` to check for a specific domain
|
||||
- Read the skill's org file if found
|
||||
3. **Verify git status**: Working tree MUST be clean before modification
|
||||
4. **Read `gtd.org`**: Load current task context from the roadmap
|
||||
5. **Enter lifecycle**: Follow the Engineering Standards lifecycle (Phase 0 → A → B → C → D → E)
|
||||
|
||||
Rationale: Raw LLM reasoning is a fallback, not a starting point. The skill layer encodes the system's accumulated wisdom. Ignoring skills creates drift.
|
||||
|
||||
## Engineering Standards
|
||||
|
||||
The Engineering Standards skill (`opencortex.skills.org-skill-engineering-standards`) defines the full lifecycle. The summaries below are reminders; the skill org file is authoritative.
|
||||
|
||||
### Phase 0: Before You Think
|
||||
|
||||
**Skill-First Query Rule**: Before analysis, debugging, or implementation, query the skill catalog. If a relevant skill exists, follow its mandates. Do not duplicate logic.
|
||||
|
||||
### Phase A: Design (Test-First)
|
||||
|
||||
1. **Define success criteria first** — Write the test or PROTOCOL that proves the feature works
|
||||
2. **Break the design with chaos** — Three tiers of adversarial testing:
|
||||
- *Deterministic chaos*: Scripted regression tests on every change
|
||||
- *Probabilistic chaos*: Randomized fuzzing on every major release
|
||||
- *Stress chaos*: Load and resource starvation during hardening sprints
|
||||
|
||||
### Phase B: Commit (Recovery Point)
|
||||
|
||||
3. **Commit Before Modify** — Commit and push (if network available) before any file changes
|
||||
|
||||
### Phase C: Build (Implementation)
|
||||
|
||||
4. **Literate Programming** — All logic in Org files; generated `.lisp` is derived, not authored
|
||||
5. **Function-Block Granularity** — One function per `#+begin_src lisp` block
|
||||
6. **Tangle Mandate** — Edit Org only; never touch generated `.lisp`
|
||||
7. **Configuration Externalization** — No hardcoded values; use `.env.example`
|
||||
8. **Org as Thinking Medium** — Document investigation before fixing
|
||||
|
||||
### Phase D: Validate (Proof)
|
||||
|
||||
9. **Test Verification** — Run the full suite. A change that breaks tests is damage, not a fix.
|
||||
|
||||
### Phase E: Document (Audit Trail)
|
||||
|
||||
10. **Decision Audit Trail** — Document root cause, options, tradeoffs, and rationale
|
||||
11. **Stop-and-Wait** — For major changes, propose strategy, state "Waiting for user feedback," yield turn
|
||||
12. **GTD Synchronization** — Update `gtd.org` with TODO headlines before marking complete
|
||||
|
||||
## Literate Programming Rules
|
||||
|
||||
The Literate Programming skill (`opencortex.skills.org-skill-literate-programming`) enforces Org discipline:
|
||||
|
||||
1. **One Function, One Block** — No bundling multiple definitions
|
||||
2. **Org-Mode Evaluation Gate** — `C-c C-c` after every block change
|
||||
3. **Pre-Tangle Structural Check** — Verify paren balance before tangling
|
||||
4. **No Direct `.lisp` Edits** — All changes flow through Org
|
||||
5. **Code and Prose Together** — Every block preceded by explanatory text
|
||||
|
||||
Violating these rules corrupts the skill loader and causes boot failure (as seen in the 2026-04-25 incident).
|
||||
|
||||
## Agent Workflow
|
||||
|
||||
- **Boot Sequence**: Read AGENTS.md → query skills → verify git → read gtd.org
|
||||
- **Before Any Modification**: Commit first (Commit Before Modify rule)
|
||||
- **Plan Mode**: Draft PROTOCOL.md before complex implementations
|
||||
- **Testing**: Run FiveAM test suite + chaos tests before marking task complete
|
||||
- **Completion**: Update gtd.org, commit, sync with user
|
||||
|
||||
## Self-Enforcement Checklist
|
||||
|
||||
This agent MUST verify these conditions before, during, and after each task. Violation is a bug, not a suggestion.
|
||||
|
||||
### Before Any Task (Gate)
|
||||
|
||||
- [ ] **Git clean** — Working tree must be clean before modification
|
||||
- [ ] **Skill query** — Check if relevant skill exists in `/home/user/memex/projects/opencortex/skills/`
|
||||
- [ ] **Skill read** — If found, read the skill's org file before proceeding
|
||||
- [ ] **GTD read** — Check `gtd.org` for current task context
|
||||
|
||||
### During Task (Literate Programming)
|
||||
|
||||
- [ ] **Org-only edits** — Edit only `.org` files, never generated `.lisp` directly
|
||||
- [ ] **One function per block** — Each `#+begin_src` block contains exactly one definition
|
||||
- [ ] **Prose before code** — Every block preceded by explanatory text
|
||||
- [ ] **Prose includes**: What the function does, arguments, return value, rationale
|
||||
- [ ] **Evaluate each block** — Verify the block compiles/evaluates correctly
|
||||
- [ ] **Paren balance** — Check balanced parentheses before tangling
|
||||
|
||||
### After Task (Validation)
|
||||
|
||||
- [ ] **Tests pass** — Run full test suite; 100% pass required
|
||||
- [ ] **Chaos tier 1** — Deterministic regression tests pass
|
||||
- [ ] **No artifacts** — No orphaned `.bak`, `.log`, `.tmp`, or untracked test files
|
||||
- [ ] **Commit** — Stage and commit changes with descriptive message
|
||||
- [ ] **GTD update** — Update `gtd.org` with completed task state
|
||||
|
||||
### For OpenCortex Work Specifically
|
||||
|
||||
Reference authoritative skill files:
|
||||
- Engineering Standards: `projects/opencortex/skills/org-skill-engineering-standards.org`
|
||||
- Literate Programming: `projects/opencortex/skills/org-skill-literate-programming.org`
|
||||
- Policy: `projects/opencortex/skills/org-skill-policy.org`
|
||||
|
||||
The summaries in this file are reminders; the skill org files are authoritative.
|
||||
|
||||
## References
|
||||
|
||||
- opencortex repo: `/home/user/memex/projects/opencortex`
|
||||
- Engineering Standards: `/home/user/memex/projects/opencortex/skills/org-skill-engineering-standards.org`
|
||||
- Literate Programming: `/home/user/memex/projects/opencortex/skills/org-skill-literate-programming.org`
|
||||
- Policy Skill: `/home/user/memex/projects/opencortex/skills/org-skill-policy.org`
|
||||
- Roadmap: `/home/user/memex/gtd.org`
|
||||
- README: `/home/user/memex/projects/opencortex/README.org`
|
||||
@@ -2,10 +2,10 @@
|
||||
#+AUTHOR: Amr
|
||||
#+CREATED: [2026-03-17 Tue]
|
||||
#+UPDATED: [2026-04-08 Wed]
|
||||
#+FILETAGS: :memex:psf:org-agent:lisp:sovereignty:
|
||||
#+FILETAGS: :memex:psf:opencortex:lisp:sovereignty:
|
||||
|
||||
* Overview
|
||||
The *Master Memex* is a sovereign, neurosymbolic intelligence organization system. It is not merely a collection of notes, but a live, programmable environment—a **Personal Software Foundry (PSF)**—where a human (the Sovereign Executive) and agentic co-processes (the `org-agent` kernel and Gemini CLI) collaborate within a shared address space.
|
||||
The *Master Memex* is a sovereign, neurosymbolic intelligence organization system. It is not merely a collection of notes, but a live, programmable environment—a **Personal Software Foundry (PSF)**—where a human (the Sovereign Executive) and agentic co-processes (the `opencortex` kernel and opencode) collaborate within a shared address space.
|
||||
|
||||
This system synthesizes three core organizational methodologies into a unified "Lisp Machine" experience:
|
||||
- *Zettelkasten:* For atomic, evergreen, and interlinked knowledge.
|
||||
@@ -33,10 +33,10 @@ The workspace is strictly divided into these zones to facilitate both human ergo
|
||||
* The Agentic Inhabitants
|
||||
The Memex is inhabited by autonomous agents that operate as "Probabilistic" (probabilistic/neural) and "Deterministic" (deterministic/symbolic) layers:
|
||||
|
||||
** [[file:projects/org-agent/README.org][org-agent (The Kernel)]]
|
||||
** [[file:projects/opencortex/README.org][opencortex (The Kernel)]]
|
||||
A Common Lisp microkernel that maintains a live, threaded Object-Store in RAM. It uses Org-mode as its native Abstract Syntax Tree (AST), allowing it to "perceive" and "act" on the Memex with structural precision.
|
||||
|
||||
** Gemini CLI
|
||||
** opencode
|
||||
A strategic orchestrator that handles large-scale batch tasks, research, and planning. It operates according to the *PSF Consensus Loop* (Demand -> Blueprint -> Success -> Build -> Chaos -> Memory).
|
||||
|
||||
* The Cognitive Architecture: A Session-less Mind
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
# Implementation Plan: The Micro-Loader (Boot Sequence Refactor)
|
||||
|
||||
## Objective
|
||||
Consolidate and harden the kernel's skill-loading logic into a stateful "Micro-Loader." This improves boot reliability, provides clear error reporting for malformed skills, and centralizes all capability management within the `skills` module.
|
||||
|
||||
## Key Files & Context
|
||||
- **Target:** `projects/org-agent/literate/skills.org` (Consolidating logic here).
|
||||
- **Target:** `projects/org-agent/literate/core.org` (Moving `load-all-skills` out of here).
|
||||
- **Mandate:** Syntax Pre-flight and Dependency Assertion.
|
||||
|
||||
## Implementation Steps
|
||||
|
||||
### 1. Define the Skill Catalog
|
||||
- Introduce `*skill-catalog*` in `skills.lisp` to track metadata and load status for every skill file found in `SKILLS_DIR`.
|
||||
- Statuses: `:discovered`, `:loading`, `:ready`, `:failed`.
|
||||
|
||||
### 2. Refactor `load-skill-from-org` (Harden)
|
||||
- **Syntax Check:** Invoke `validate-lisp-syntax` before evaluation.
|
||||
- **Dependency Check:** If `#+DEPENDS_ON` refers to a skill that failed or is missing, mark this skill as `:failed` immediately with a clear error.
|
||||
- **Detailed Logging:** Record the specific reason for failure (syntax, timeout, runtime error) in the catalog.
|
||||
|
||||
### 3. Implement `initialize-all-skills` (The Orchestrator)
|
||||
- Move the directory scanning and loop logic from `core.lisp` into `skills.lisp`.
|
||||
- This function will:
|
||||
1. Scan `SKILLS_DIR`.
|
||||
2. Populate the catalog.
|
||||
3. Run the topological sort.
|
||||
4. Execute the load loop with timeouts.
|
||||
5. Print a final "Boot Summary" report.
|
||||
|
||||
### 4. Simplify Kernel Boot
|
||||
- Update `start-daemon` in `core.lisp` to call `(initialize-all-skills)` instead of the old `load-all-skills`.
|
||||
|
||||
## Phase E: Chaos (Verification)
|
||||
- **Integrity Test:** Add a test that verifies `initialize-all-skills` correctly identifies a missing dependency and prevents the dependent skill from attempting to load.
|
||||
- **Report Test:** Verify that the skill catalog correctly reflects the status of loaded vs. failed skills.
|
||||
@@ -27,10 +27,10 @@ Chronological record of all meetings, fleeting notes, and raw conversation logs
|
||||
## Major System Developments
|
||||
|
||||
### Three OpenClaw Skills Deployed
|
||||
Created and deployed three integrated skills for the org-agent-memex system:
|
||||
- *org-agent-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *org-agent-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *org-agent-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
Created and deployed three integrated skills for the opencortex-memex system:
|
||||
- *opencortex-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *opencortex-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *opencortex-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
|
||||
All skills follow the established pattern: SKILL.md with YAML frontmatter, README.md for users, and integration with the PARA + Atomic Notes (Zettelkasten) + GTD workflow.
|
||||
|
||||
@@ -93,10 +93,10 @@ Awaiting pressure-testing session for 21-layer audit assumptions. All building p
|
||||
## Major System Developments
|
||||
|
||||
### Three OpenClaw Skills Deployed
|
||||
Created and deployed three integrated skills for the org-agent-memex system:
|
||||
- *org-agent-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *org-agent-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *org-agent-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
Created and deployed three integrated skills for the opencortex-memex system:
|
||||
- *opencortex-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *opencortex-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *opencortex-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
|
||||
All skills follow the established pattern: SKILL.md with YAML frontmatter, README.md for users, and integration with the PARA + Atomic Notes (Zettelkasten) + GTD workflow.
|
||||
|
||||
@@ -159,10 +159,10 @@ Awaiting pressure-testing session for 21-layer audit assumptions. All building p
|
||||
## Major System Developments
|
||||
|
||||
### Three OpenClaw Skills Deployed
|
||||
Created and deployed three integrated skills for the org-agent-memex system:
|
||||
- *org-agent-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *org-agent-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *org-agent-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
Created and deployed three integrated skills for the opencortex-memex system:
|
||||
- *opencortex-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *opencortex-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *opencortex-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
|
||||
All skills follow the established pattern: SKILL.md with YAML frontmatter, README.md for users, and integration with the PARA + Atomic Notes (Zettelkasten) + GTD workflow.
|
||||
|
||||
@@ -225,10 +225,10 @@ Awaiting pressure-testing session for 21-layer audit assumptions. All building p
|
||||
## Major System Developments
|
||||
|
||||
### Three OpenClaw Skills Deployed
|
||||
Created and deployed three integrated skills for the org-agent-memex system:
|
||||
- *org-agent-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *org-agent-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *org-agent-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
Created and deployed three integrated skills for the opencortex-memex system:
|
||||
- *opencortex-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *opencortex-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *opencortex-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
|
||||
All skills follow the established pattern: SKILL.md with YAML frontmatter, README.md for users, and integration with the PARA + Atomic Notes (Zettelkasten) + GTD workflow.
|
||||
|
||||
@@ -291,10 +291,10 @@ Awaiting pressure-testing session for 21-layer audit assumptions. All building p
|
||||
## Major System Developments
|
||||
|
||||
### Three OpenClaw Skills Deployed
|
||||
Created and deployed three integrated skills for the org-agent-memex system:
|
||||
- *org-agent-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *org-agent-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *org-agent-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
Created and deployed three integrated skills for the opencortex-memex system:
|
||||
- *opencortex-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *opencortex-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *opencortex-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
|
||||
All skills follow the established pattern: SKILL.md with YAML frontmatter, README.md for users, and integration with the PARA + Zettelkasten + GTD workflow.
|
||||
|
||||
@@ -357,10 +357,10 @@ Awaiting pressure-testing session for 21-layer audit assumptions. All building p
|
||||
## Major System Developments
|
||||
|
||||
### Three OpenClaw Skills Deployed
|
||||
Created and deployed three integrated skills for the org-agent-memex system:
|
||||
- *org-agent-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *org-agent-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *org-agent-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
Created and deployed three integrated skills for the opencortex-memex system:
|
||||
- *opencortex-memex-zettlekasten*: Nightly distillation of daily logs into atomic notes
|
||||
- *opencortex-memex-gtd*: Automated task promotion and GTD workflow management
|
||||
- *opencortex-memex-workbreakdown*: Meta-cognitive skill for task decomposition to prevent context saturation
|
||||
|
||||
All skills follow the established pattern: SKILL.md with YAML frontmatter, README.md for users, and integration with the PARA + Zettelkasten + GTD workflow.
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
* Activities
|
||||
** OpenClaw Resilience and Memory Restoration
|
||||
- *Problem:* Agent suffered from "context amnesia" after a session reset at 08:10 AM, losing the path to `emacs.org` and failing to rediscover it.
|
||||
- *Root Cause:* Search depth was too shallow (workspace root only), and the `org-agent-memex-gtd` skill was not in the executable skills directory.
|
||||
- *Root Cause:* Search depth was too shallow (workspace root only), and the `opencortex-memex-gtd` skill was not in the executable skills directory.
|
||||
- *Resolution:*
|
||||
- Identified canonical path: `/home/amr/.openclaw/workspace/memex/5_projects/dotemacs/emacs.org`.
|
||||
- Restored skills by copying `org-agent-memex-gtd`, `org-agent-memex-workbreakdown`, and `org-agent-memex-zettlekasten` to standard `.openclaw/skills/` directory.
|
||||
- Restored skills by copying `opencortex-memex-gtd`, `opencortex-memex-workbreakdown`, and `opencortex-memex-zettlekasten` to standard `.openclaw/skills/` directory.
|
||||
- Synced `GTD.org` and `memex/gtd.org` to ensure "Ground Truth" is consistent.
|
||||
|
||||
** Emacs Configuration Modularization
|
||||
|
||||
15
fedora-43-repos.repo
Normal file
@@ -0,0 +1,15 @@
|
||||
[fedora]
|
||||
name=Fedora 43 - x86_64
|
||||
enabled=1
|
||||
metadata_expire=1h
|
||||
baseurl=https://mirrors.fedoraproject.org/metalink?repo=fedora-43&arch=x86_64
|
||||
type=rpm-md
|
||||
gpgcheck=0
|
||||
|
||||
[updates]
|
||||
name=Fedora 43 - x86_64 - Updates
|
||||
enabled=1
|
||||
metadata_expire=1h
|
||||
baseurl=https://mirrors.fedoraproject.org/metalink?repo=fedora-43-updates&arch=x86_64
|
||||
type=rpm-md
|
||||
gpgcheck=0
|
||||
540
gtd.org
@@ -9,72 +9,432 @@
|
||||
:PROPERTIES:
|
||||
:ID: gtd-actions
|
||||
:END:
|
||||
** DONE Fix Modular Emacs configuration loading and org-capture templates
|
||||
- Restored ef-themes configuration in emacs-core.org which was lost during refactoring.
|
||||
CLOSED: [2026-04-21 Tue 15:00]
|
||||
- Resolved conflict where multiple modules were overwriting ~/.emacs.d/custom.el.
|
||||
- Switched from defvar to setq for org-capture-templates to ensure it applies on boot.
|
||||
** DONE Reorganize Emacs configuration files into the dotemacs project
|
||||
- Deleted outdated configuration modules in ~/memex/projects/dotemacs/.
|
||||
- Moved live configuration files from ~/memex/system/ to ~/memex/projects/dotemacs/.
|
||||
- Organized modules into a /modules subdirectory and snippets into /templates.
|
||||
- Updated ~/.emacs and internal Org-babel paths to reflect the new location.
|
||||
CLOSED: [2026-04-21 Tue 16:45]
|
||||
** DONE Fix emacsclient defaulting to terminal mode
|
||||
- Identified that 'opencortex' setup.org was hardcoded to install emacs-nox.
|
||||
- Reinstalled emacs-gtk and restored GUI support.
|
||||
- Patched projects/opencortex/harness/setup.org to use 'emacs' metapackage.
|
||||
- Restored missing modules/emacs-ui.org and added it to dotemacs.org.
|
||||
- Added 'em' alias to ~/.bash_aliases for persistent GUI frame creation.
|
||||
CLOSED: [2026-04-21 Tue 17:15]
|
||||
:END:
|
||||
|
||||
* Projects
|
||||
:PROPERTIES:
|
||||
:ID: gtd-projects
|
||||
:END:
|
||||
|
||||
** NEXT Org-agent v1.0
|
||||
** NEXT OpenCortex v1.0
|
||||
:PROPERTIES:
|
||||
:ID: proj-org-agent-v1-0
|
||||
:ID: proj-opencortex-v1-0
|
||||
:Engineering-STATE: D: BUILD
|
||||
:CREATED: [2026-03-09 Mon 14:23]
|
||||
:END:
|
||||
Org-agent: A Neurosymbolic AI Agent.
|
||||
OpenCortex: A Neurosymbolic AI Agent.
|
||||
|
||||
*** PHASE: SOVEREIGN MVP (v0.1.0 Released)
|
||||
*** PHASE: AUTONOMOUS MVP (v0.1.0 Released)
|
||||
:PROPERTIES:
|
||||
:ID: proj-mvp-v0-1-0
|
||||
:END:
|
||||
The "Zero-to-One" release. The agent must be mathematically secure, CLI-first, and capable of autonomous Memex maintenance.
|
||||
|
||||
**** DONE 1. Harness Hardening (The Final Audit)
|
||||
- [X] Audit remaining core skills (`org-skill-policy.org`, `org-skill-bouncer.org`) to the new Literate Granularity standard.
|
||||
- [X] Implement Verification Lock: Ensure `MANDATORY_SKILLS` pass `validate-lisp-syntax` before boot proceeds.
|
||||
- [X] Logging & Transparency: Ensure `context-get-system-logs` is utilized by the Reason engine to explain blocked actions.
|
||||
***** DONE Audit remaining core skills (`org-skill-policy.org`, `org-skill-bouncer.org`) to the new Literate Granularity standard.
|
||||
***** DONE Implement Verification Lock: Ensure `MANDATORY_SKILLS` pass `validate-lisp-syntax` before boot proceeds.
|
||||
***** DONE Logging & Transparency: Ensure `context-get-system-logs` is utilized by the Reason engine to explain blocked actions.
|
||||
|
||||
**** DONE 2. The Sovereign Scribe & Gardener (The Primary Value Prop)
|
||||
- [X] Implement `org-skill-scribe.org`: Background worker that distills daily chronological logs into structured Zettelkasten notes.
|
||||
- [X] Implement `org-skill-gardener.org`: Heartbeat-driven skill that autonomously flags orphaned nodes and repairs broken links.
|
||||
**** DONE 2. The Autonomous Scribe & Gardener (The Primary Value Prop)
|
||||
***** DONE Implement `org-skill-scribe.org`: Background worker that distills daily chronological logs into structured Zettelkasten notes.
|
||||
***** DONE Implement `org-skill-gardener.org`: Heartbeat-driven skill that autonomously flags orphaned nodes and repairs broken links.
|
||||
|
||||
**** DONE 3. The Zero-to-One Experience (setup.org)
|
||||
- [X] Consolidate installation instructions, `onboard.sh`, and `Dockerfile` into a single, literate `setup.org` file.
|
||||
- [X] Ensure the setup process interactively builds the `.env` and verifies SBCL/Quicklisp dependencies.
|
||||
***** DONE Consolidate installation instructions, `onboard.sh`, and `Dockerfile` into a single, literate `setup.org` file.
|
||||
***** DONE Ensure the setup process interactively builds the `.env` and verifies SBCL/Quicklisp dependencies.
|
||||
|
||||
**** TODO 4. CLI-First Actuation
|
||||
- [ ] Verify the `cli` actuator and inbound gateway handle standard I/O interaction gracefully, treating Emacs as an optional power-user viewport.
|
||||
**** DONE 4. CLI-First Actuation
|
||||
CLOSED: [2026-04-14 Tue 09:40]
|
||||
***** DONE Verified the `cli` actuator and inbound gateway handle standard I/O interaction gracefully via a stateful `socat` connection.
|
||||
|
||||
*** PHASE: PUBLICATION & VERIFICATION (v0.1.0 Post-Release)
|
||||
:PROPERTIES:
|
||||
:ID: proj-pub-v0-1-0
|
||||
:END:
|
||||
Ensuring the system is ready for the world through collaborative testing, documentation, and licensing.
|
||||
|
||||
**** DONE 1. Collaborative End-to-End Testing [2026-04-21 Tue]
|
||||
CLOSED: [2026-04-21 Tue 17:30]
|
||||
***** DONE Verified stable foundation at commit `cab0e5a`.
|
||||
***** DONE Verified boot sequence and bidirectional connectivity.
|
||||
|
||||
**** DONE 2. Semantic Reorganization & System Stabilization [2026-04-21 Tue]
|
||||
CLOSED: [2026-04-21 Tue 18:30]
|
||||
***** DONE Rename directories: harness/, library/, environment/, infrastructure/.
|
||||
***** DONE Consolidate Probabilistic engine into reason.lisp.
|
||||
***** DONE Embed bidirectional CLI logic into opencortex.sh.
|
||||
***** DONE Stabilize skill engine: 12/12 skills loaded with package jailing.
|
||||
***** DONE Cleanup legacy documentation and deployment artifacts.
|
||||
|
||||
**** DONE 2. Comprehensive Documentation <2026-04-14 Tue>
|
||||
CLOSED: [2026-04-20 Mon 18:00]
|
||||
***** DONE Draft `USER_MANUAL.org`: Focus on CLI interaction, installation, and Memex structure.
|
||||
***** DONE Draft `CONTRIBUTING.org`: Explain Literate Granularity and Skill creation standards.
|
||||
|
||||
**** DONE 3. License & Legal Finalization <2026-04-14 Tue>
|
||||
CLOSED: [2026-04-17 Fri 11:25]
|
||||
***** DONE Assign the AGPLv3 open-source license.
|
||||
***** DONE Implement a broad Contributor License Agreement (CLA) process.
|
||||
***** DONE Update `LICENSE` and `CHANGELOG` accordingly.
|
||||
|
||||
**** TODO 4. GitHub Migration & Repository Setup <2026-04-14 Tue>
|
||||
***** TODO Migrate primary remote to GitHub and configure canonical repository.
|
||||
***** TODO Set repository topics, badges, issue templates, and CI/CD foundations.
|
||||
|
||||
**** TODO 5. Marketing & Social Media Launch <2026-04-14 Tue>
|
||||
***** TODO Execute PR plan (Reddit, Hacker News, X/Twitter).
|
||||
***** TODO Create a short, high-quality terminal demo GIF/video of the TUI interaction.
|
||||
|
||||
*** PHASE: INTERACTIVE REFINEMENT (v0.2.0 Target)
|
||||
:PROPERTIES:
|
||||
:ID: proj-refinement-v0-2-0
|
||||
:END:
|
||||
Elevating the user interface from raw shell piping to a high-fidelity, native Lisp experience.
|
||||
Elevating the user interface from raw shell piping to a high-fidelity, native Lisp experience. Priority: Self-editing is the foundation of all future growth. Full org-mode manipulation makes the agent a true Emacs citizen.
|
||||
|
||||
**** TODO 1. Common Lisp TUI (The "gemini-cli" parity)
|
||||
- [ ] Implement a rich, interactive TUI natively in Common Lisp (e.g., via `cl-charms`, `croatoan`, or `cl-ncurses`).
|
||||
- [ ] Support syntax highlighting for code blocks and Org-mode syntax.
|
||||
- [ ] Implement a fixed bottom input box with command history.
|
||||
- [ ] Implement Slash Commands (`/help`, `/exit`, `/clear`, `/skill-load`).
|
||||
Roadmap basis: Evolutionary roadmap from README.org. Working backwards from SOTA parity.
|
||||
|
||||
**** TODO 2. Direct Lisp-to-Terminal Actuation
|
||||
- [ ] Refactor the `:cli` actuator to use the native TUI rendering instead of raw stream printing.
|
||||
**** DONE 0. Autonomous Self-Editing Foundation
|
||||
***** DONE org-skill-lisp-repair (Lisp syntax repair)
|
||||
- Deterministic: auto-balance parens via paren-counting
|
||||
- Probabilistic: LLM generates surgical fix on =:syntax-error= events
|
||||
- Memory rollback on failure
|
||||
DONE: Now in org-skill-lisp-utils (merged from contrib)
|
||||
***** DONE org-skill-emacs-edit (full org-mode manipulation)
|
||||
- Read org buffers, parse AST via org-element
|
||||
- Create/update/delete headlines, set properties, manage TODO states
|
||||
- Handle =id:= links and internal links
|
||||
- Pure Lisp implementation (no Emacs subprocess)
|
||||
***** DONE Expose Structural AST Editing Tools
|
||||
- Wrap org-skill-emacs-edit into def-cognitive-tool definitions
|
||||
- Force LLM to use semantic node updates instead of regex file I/O
|
||||
***** DONE Implement Reflection Loops
|
||||
- Feed rejection traces (syntax errors, policy blocks) back to LLM to trigger self-correction
|
||||
***** DONE Harden Actuators
|
||||
- Fix path-traversal vulnerabilities in file I/O tools (e.g. :write-file)
|
||||
- Enforce Merkle-snapshots on all state-modifying actions
|
||||
***** DONE Implement tool permission tiers (ask/allow/deny)
|
||||
- Per-tool permission plist stored in org-object
|
||||
- =generate-tool-belt-prompt= filters denied tools before LLM sees them
|
||||
- Ask-tier prompts user before execution
|
||||
***** DONE Implement skill hot-reload (=:reload-skill= tool)
|
||||
- Swap compiled skill files without breaking active sockets
|
||||
- Reload skill into jailed package namespace
|
||||
- DONE: Added :reload-skill, :read-file, :write-file, :replace-string tools
|
||||
- DONE: Fixed ASDF compilation bug (position tracking issue with :serial t)
|
||||
- DONE: Added explicit :depends-on declarations to opencortex.asd
|
||||
|
||||
*** PHASE: EVOLUTIONARY ROADMAP
|
||||
**** TODO v1.0.0 (Phase 2.5): The Verified Wrapper (SOTA Parity)
|
||||
**** DONE Engineering Process Improvements [2026-04-23 Wed]
|
||||
***** DONE Fix ASDF compilation bug (position tracking at byte 16834)
|
||||
- Root cause: Duplicate proto-get, bt: prefix issues, :serial t position cache
|
||||
- Fix: Removed duplicate, fixed bt:->bordeaux-threads, explicit dependencies
|
||||
- Added eval-when wrapper for new tools (good Lisp practice)
|
||||
***** DONE Add test-first methodology to engineering standards
|
||||
- Rule 10: Test-first - design tests before coding, run chaos testing
|
||||
- Rule 11: Org as thinking medium - document investigations in prose
|
||||
- Rule 12: Engineering decision audit trail - document root cause, tradeoffs
|
||||
- Added to opencortex-contrib/skills/org-skill-engineering-standards.org
|
||||
***** DONE Perform comprehensive architectural review and evolution strategy [2026-04-27 Mon]
|
||||
- Identified hidden gaps: Org-mode round-trip, sandboxing vulnerabilities, and GC scaling.
|
||||
- Defined "Structural AST Editing" and "Reflection Loops" as core strategic requirements.
|
||||
- Captured findings in [[file:notes/opencortex-architectural-evolution.org][opencortex-architectural-evolution.org]].
|
||||
***** DONE Fix API drift in opencortex-contrib [2026-04-27 Mon]
|
||||
- Standardized legacy keywords (:neuro/:symbolic) to new harness standard (:probabilistic/:deterministic).
|
||||
- Updated 16 skills in opencortex-contrib for kernel compatibility.
|
||||
|
||||
- Complete Formal Verification gates for external tools.
|
||||
- Achieve secure, end-to-end autonomous engineering workflows.
|
||||
**** TODO v2.0.0 (Phase 3): Cannibalizing the Toolchain
|
||||
- Ingest DOM as native Lisp AST (Cannibalize Browser).
|
||||
- Replace string-based bash with native OS bindings (Cannibalize Shell).
|
||||
**** TODO v3.0.0 (Phase 4): True Symbolic Determinism
|
||||
- Relegate LLM to Semantic Translator.
|
||||
- Implement Deterministic Planner (The Solver).
|
||||
- Implement Self-Correcting Syntax Gates.
|
||||
**** TODO v4.0.0+ (Phase 5): The Neurosymbolic Singularity
|
||||
- Homoiconic Self-Writing (Hot-reloading literate source).
|
||||
- Asynchronous Swarm Cognition (Jailed sub-agents).
|
||||
**** DONE 4. Core Skills Consolidation [2026-04-23 Thu]
|
||||
- Merged lisp-validator + lisp-repair → org-skill-lisp-utils.org
|
||||
- Added lisp utilities: count-char, deterministic-repair, neural-repair
|
||||
- Added validation: structural, syntactic, semantic checks
|
||||
- Moved org-skill-self-fix from contrib → core
|
||||
- Moved org-skill-engineering-standards from contrib → core
|
||||
- Deleted old org-skill-lisp-validator.org
|
||||
|
||||
**** TODO 5. Advanced CLI Onboarding Experience
|
||||
***** TODO Implement interactive Lisp CLI wizard (=opencortex setup=)
|
||||
***** TODO Implement =opencortex link <gateway>= for Telegram/Signal bot connection
|
||||
***** TODO Implement =opencortex doctor= for environment health and API key validation
|
||||
***** TODO Implement =opencortex install <skill>= for dynamic skill downloading
|
||||
|
||||
**** TODO 1. Common Lisp TUI Implementation
|
||||
***** TODO Integrate =croatoan= for native terminal rendering
|
||||
***** TODO Implement scrollable history viewport for chat and thought streams
|
||||
***** TODO Implement fixed bottom input box with multi-line support and command history
|
||||
***** TODO Implement persistent status bar for background workers (Scribe/Gardener)
|
||||
***** TODO Support syntax highlighting for Lisp code blocks and Org-mode syntax
|
||||
|
||||
**** TODO 2. Slash Commands & Interactive Control
|
||||
***** TODO Implement =/help= command for system overview
|
||||
***** TODO Implement =/exit= and =/clear= commands
|
||||
***** TODO Implement =/skill-load <name>= for dynamic hot-reloading
|
||||
***** TODO Implement =/status=, =/config=, =/search=, =/commit= slash commands
|
||||
|
||||
**** TODO 3. Direct Lisp-to-Terminal Actuation
|
||||
***** TODO Refactor the =:cli= actuator to use native TUI rendering
|
||||
|
||||
*** PHASE: EVENT ORCHESTRATION + HITL (v0.3.0)
|
||||
:PROPERTIES:
|
||||
:ID: proj-orchestration-v0-3-0
|
||||
:END:
|
||||
Unified control plane: hooks + cron + routing in one skill. Deep project understanding.
|
||||
|
||||
**** TODO 0. Event Orchestrator (unified hooks+cron+routing)
|
||||
***** TODO Integrate contrib org-skill-event-orchestrator
|
||||
- Merge *hook-registry* + *cron-registry* + complexity classifier
|
||||
- Hooks via =#+HOOK:= Org-mode properties
|
||||
- Three complexity tiers: =:REFLEX= (no LLM), =:COGNITION= (light LLM), =:REASONING= (full LLM)
|
||||
- Hook into heartbeat for cron processing
|
||||
|
||||
**** TODO 1. Context Manager (project scoping)
|
||||
***** TODO Integrate contrib org-skill-context-manager
|
||||
- Stack-based context with =push-context= / =pop-context=
|
||||
- Path resolution relative to current context
|
||||
- Memory scope: =:scope= property on org-objects (memex/session/project)
|
||||
- Implement lazy-loading proxies for large-scale memory traversal (offload cold nodes to disk)
|
||||
|
||||
**** TODO 2. Model-Tier Routing (cost optimization)
|
||||
***** TODO Extend =*model-selector-fn= for complexity-based routing
|
||||
- Heartbeats → smallest model
|
||||
- User input → medium model
|
||||
- Complex reasoning → large model
|
||||
- Source: GBrain sub-agent model routing
|
||||
|
||||
**** TODO 3. Memory Scope Segmentation
|
||||
***** TODO Extend org-object with =:scope= property
|
||||
- =:memex= (permanent knowledge)
|
||||
- =:session= (ephemeral context)
|
||||
- =:project= (scoped to current work)
|
||||
- Scope-aware retrieval in memory.lisp
|
||||
|
||||
**** TODO 4. Asynchronous Embedding Gateway
|
||||
***** TODO Implement provider-agnostic org-skill-embedding-gateway
|
||||
- Support Ollama, llama.cpp, and OpenAI based on .env config
|
||||
- Implement lazy-loading: edits mark nodes as =:vector :pending=
|
||||
- Background worker thread batches pending nodes and updates Merkle tree silently
|
||||
|
||||
**** TODO 4. Slash Commands (TUI ergonomics)
|
||||
***** TODO M-x style command palette
|
||||
***** TODO /- prefix for command mode
|
||||
***** TODO Commands defined in Org-mode
|
||||
|
||||
*** PHASE: LONG-HORIZON PLANNING + GIT WORKFLOWS (v0.4.0)
|
||||
:PROPERTIES:
|
||||
:ID: proj-planning-v0-4-0
|
||||
:END:
|
||||
Multi-step task mastery, structured tracking with failure handling and course correction.
|
||||
|
||||
**** TODO 0. Long-Horizon Planning (task tree DAG)
|
||||
***** TODO Implement org-skill-long-horizon
|
||||
- Decompose complex tasks into Org-mode headline trees
|
||||
- Terminal states: =:todo= → =:next-action= → =:in-progress= → =:done= / =:blocked= / =:stuck=
|
||||
- Parent summarises child results
|
||||
- Branch pruning when paths fail
|
||||
- Source: Claude Code ULTRAPLAN (reimplemented in Lisp)
|
||||
|
||||
**** TODO 1. Git Steward (version control integration)
|
||||
***** TODO Integrate contrib org-skill-git-steward
|
||||
- Status, diff, commit, push, branch operations
|
||||
- Policy: commit-before-modify gate (from contrib engineering-standards)
|
||||
- Log commits to memory
|
||||
|
||||
**** TODO 2. TDD Runner Integration
|
||||
***** TODO Integrate contrib org-skill-tdd-runner
|
||||
- Run FiveAM tests on file save
|
||||
- Inject =:test-failure= event on red
|
||||
- Hook into self-fix for auto-repair proposals
|
||||
|
||||
**** TODO 3. Deep Emacs Integration
|
||||
***** TODO Full org-agenda awareness
|
||||
- Navigate, clock time, refile, archive
|
||||
- Uses org-element + org-id
|
||||
|
||||
*** PHASE: INTERACTIVE ACTUATION & ENVIRONMENT STEWARDSHIP (v0.5.0)
|
||||
:PROPERTIES:
|
||||
:ID: proj-actuation-v0-5-0
|
||||
:END:
|
||||
Interactive terminal sessions and autonomous dependency management.
|
||||
|
||||
**** TODO 0. Interactive PTY Actuator
|
||||
***** TODO Stream long-running process output to the context window (e.g., `npm run dev`, REPLs)
|
||||
***** TODO Implement async interrupt control (Ctrl+C emulation)
|
||||
|
||||
**** TODO 1. The Environment Steward
|
||||
***** TODO Autonomously detect missing dependencies (e.g., "Command not found")
|
||||
***** TODO Propose an installation command and retry the failed action
|
||||
|
||||
*** PHASE: CREATOR + ARCHITECT + GTD (v0.6.0)
|
||||
:PROPERTIES:
|
||||
:ID: proj-creator-v0-5-0
|
||||
:END:
|
||||
Agent bootstraps itself: creates skills autonomously, designs projects from PRDs, tracks work.
|
||||
|
||||
**** TODO 0. Skill Creator (autonomous skill generation)
|
||||
***** TODO Integrate contrib org-skill-creator
|
||||
- LLM drafts complete skill org-file from natural language
|
||||
- Mandatory: syntax validation → jail-load → test → register
|
||||
|
||||
**** TODO 1. Architect Agent (PRD → PROTOCOL)
|
||||
***** TODO Integrate contrib org-skill-architect
|
||||
- Scan =:STATUS: FROZEN= PRDs
|
||||
- Generate Phase B PROTOCOL from Phase A
|
||||
- Write to same file
|
||||
|
||||
**** TODO 2. GTD Integration (project tracking)
|
||||
***** TODO Integrate contrib org-skill-gtd
|
||||
- Full GTD cycle: capture, clarify, organize, reflect, engage
|
||||
- org-gtd v4.0 DAG (=:TRIGGER:=, =:BLOCKER:=)
|
||||
|
||||
**** TODO 3. Consensus Loop (multi-model agreement)
|
||||
***** TODO Integrate contrib org-skill-consensus
|
||||
- Run multiple providers for critical decisions
|
||||
- Compare results, detect disagreements
|
||||
- Confidence scoring
|
||||
|
||||
**** TODO 4. Web Research (Playwright browsing)
|
||||
***** TODO Integrate contrib org-skill-playwright + org-skill-web-research
|
||||
- Headless Chromium via Python bridge
|
||||
- Text extraction and screenshots
|
||||
- Gemini Web UI automation
|
||||
|
||||
**** TODO 5. Memex Management (PARA lifecycle)
|
||||
***** TODO Integrate contrib org-skill-memex + org-skill-workspace-manager
|
||||
- Archive DONE tasks, suggest refiling
|
||||
- Detect orphaned nodes
|
||||
- PARA/Zettelkasten maintenance
|
||||
|
||||
*** PHASE: VISUAL GROUNDING & MCP BRIDGE (v0.7.0)
|
||||
:PROPERTIES:
|
||||
:ID: proj-vision-v0-7-0
|
||||
:END:
|
||||
Multimodal visual interaction and ecosystem-wide tool compatibility.
|
||||
|
||||
**** TODO 0. Computer Use / Vision
|
||||
***** TODO Allow the agent to request host OS or browser screenshots
|
||||
***** TODO Analyze UI and issue precise X/Y coordinate click/type commands via an X11/Wayland bridge
|
||||
|
||||
**** TODO 1. MCP Gateway Bridge
|
||||
***** TODO Build a Lisp-native client for the Model Context Protocol
|
||||
***** TODO Connect OpenCortex to external tools and data sources
|
||||
|
||||
*** PHASE: THE EVALUATION HARNESS (v0.8.0)
|
||||
:PROPERTIES:
|
||||
:ID: proj-eval-v0-8-0
|
||||
:END:
|
||||
Automated benchmarking to mathematically prove the agent's reasoning capabilities.
|
||||
|
||||
**** TODO 0. SWE-Bench Harness
|
||||
***** TODO Automated pipeline that clones repositories and feeds GitHub issues
|
||||
***** TODO Track multi-step resolution trajectory, run tests, and score success
|
||||
|
||||
*** PHASE: SOTA PARITY (v1.0.0)
|
||||
:PROPERTIES:
|
||||
:ID: proj-sota-v1-0-0
|
||||
:END:
|
||||
Feature-complete agent competitive with commercial agents. All borrowed concepts reimplemented in pure Lisp.
|
||||
|
||||
All features from v0.2.0 through v0.8.0 combined, verified, and tested end-to-end.
|
||||
|
||||
| Area | Parity Target |
|
||||
|------|--------------|
|
||||
| Self-improvement | Claude Code self-debug |
|
||||
| Planning | ULTRAPLAN equivalent |
|
||||
| Tool ecosystem | 10+ cognitive tools |
|
||||
| Context window | Semantic search + scope segmentation |
|
||||
| Safety | 6 Policy invariants + formal verification |
|
||||
| Multi-step tasks | Task trees with terminal states |
|
||||
| Code editing | Full file read/write via org manipulation |
|
||||
| Memory | Vector recall in org-object |
|
||||
| Emacs integration | Full org-mode control (exceeds Claude Code) |
|
||||
| Autonomy | 100% local capable (exceeds Claude Code) |
|
||||
|
||||
*** PHASE: LISP MACHINE EMERGENCE (v2.0.0)
|
||||
:PROPERTIES:
|
||||
:ID: proj-lisp-v2-0-0
|
||||
:END:
|
||||
From Lisp-using agent to true Lisp machine. Agent IS the Emacs process.
|
||||
|
||||
**** TODO Lish: Lisp editor as Org-mode IDE
|
||||
- Org-babel for interactive Lisp evaluation
|
||||
- Full REPL in TUI
|
||||
- No bridge needed — direct memory access
|
||||
**** TODO Lish: Shell replacement
|
||||
- Lisp-based shell that speaks plists
|
||||
- Org-mode buffers as file system
|
||||
- No bash dependency
|
||||
|
||||
*** PHASE: NEUROSYMBOLIC MATURITY (v3.0.0)
|
||||
:PROPERTIES:
|
||||
:ID: proj-neuro-v3-0-0
|
||||
:END:
|
||||
Deterministic planner takes the wheel. LLM relegated to semantic translation.
|
||||
|
||||
**** TODO Deterministic planner
|
||||
- Planner as pure Lisp function
|
||||
- No LLM needed for scheduling
|
||||
- Generates task graphs without probabilistic inference
|
||||
**** TODO Self-correcting gates
|
||||
- Gates learn from false positives (user override patterns)
|
||||
- Adaptive threshold adjustment
|
||||
|
||||
*** PHASE: AI STACK INTERNALIZED (v4.0.0)
|
||||
:PROPERTIES:
|
||||
:ID: proj-ai-v4-0-0
|
||||
:END:
|
||||
The agent understands its own weights. No external inference.
|
||||
|
||||
**** TODO Llama.cpp in Lisp
|
||||
- FFI binding to llama.cpp
|
||||
- No Python subprocess
|
||||
- Pure Common Lisp inference
|
||||
**** TODO Weights as sexps
|
||||
- Neural weights represented as Lisp data structures
|
||||
- Homoiconic model introspection
|
||||
|
||||
*** PHASE: TRUE AGENCY (v5.0.0)
|
||||
:PROPERTIES:
|
||||
:ID: proj-agency-v5-0-0
|
||||
:END:
|
||||
World models, temporal reasoning, goal persistence across restarts.
|
||||
|
||||
**** TODO World models
|
||||
- Agent builds predictive models of user behavior
|
||||
- Project dynamics awareness
|
||||
- System state forecasting
|
||||
**** TODO Temporal reasoning
|
||||
- Scheduling and deadline awareness
|
||||
- Elapsed duration tracking
|
||||
- Calendar integration
|
||||
**** TODO Goal persistence
|
||||
- Goals survive restarts
|
||||
- Long-term projects tracked in org-objects
|
||||
- Cross-session continuity
|
||||
|
||||
*** PHASE: EVOLUTIONARY ROADMAP (Previous — Superseded by Critical Analysis)
|
||||
:PROPERTIES:
|
||||
:ID: proj-old-roadmap
|
||||
:END:
|
||||
Superseded by the critical analysis-informed roadmap above (v0.2.0 through v5.0.0). This section kept for historical reference.
|
||||
|
||||
**** TODO v0.1.0: The Autonomous Foundation (Current Release) — Now COMPLETE
|
||||
**** TODO v1.0.0 (Phase 2.5): The Verified Wrapper (SOTA Parity) — Now v1.0.0
|
||||
**** TODO v2.0.0 (Phase 3): Cannibalizing the Toolchain — Now v2.0.0
|
||||
**** TODO v3.0.0 (Phase 4): True Symbolic Determinism — Now v3.0.0
|
||||
|
||||
*** PHASE: FOUNDATION (Complete)
|
||||
**** DONE Draft Swank/Socket communication protocol between CL and Emacs
|
||||
@@ -111,9 +471,9 @@ Elevating the user interface from raw shell piping to a high-fidelity, native Li
|
||||
|
||||
*** PHASE: THE SOVEREIGN BOUNDARY (Core vs Skills Refactor)
|
||||
:PROPERTIES:
|
||||
:ID: proj-sovereign-boundary
|
||||
:ID: proj-autonomous-boundary
|
||||
:END:
|
||||
Slim down the org-agent microharness by moving non-essential cognitive functions to hot-reloadable user-space skills.
|
||||
Slim down the opencortex microharness by moving non-essential cognitive functions to hot-reloadable user-space skills.
|
||||
|
||||
**** DONE Extract LLM Provider Routing to a Skill (neuro.lisp)
|
||||
**** DONE Extract Vector Embedding Algorithms to a Skill (embedding.lisp)
|
||||
@@ -157,7 +517,7 @@ Slim down the org-agent microharness by moving non-essential cognitive functions
|
||||
CLOSED: [2026-04-12 Sun 19:15]
|
||||
**** DONE Feature: Implement Latent Reflection (Proactive Gardening) using heartbeat idle cycles
|
||||
CLOSED: [2026-04-12 Sun 19:15]
|
||||
**** DONE Simplification: Refactor Cognitive Loop into a Unified Reactive Signal Pipeline
|
||||
**** DONE Simplification: Refactor Cognitive Cycle into a Unified Reactive Signal Pipeline
|
||||
CLOSED: [2026-04-12 Sun 19:15]
|
||||
**** DONE Resilience: Implement Micro-Rollbacks for the Immune System
|
||||
CLOSED: [2026-04-12 Sun 19:15]
|
||||
@@ -187,19 +547,29 @@ Slim down the org-agent microharness by moving non-essential cognitive functions
|
||||
- Implemented Task Integrity (GTD semantics) in symbolic.lisp.
|
||||
- Integrated Consensus Gate and Delegation hooks in core.lisp.
|
||||
- Verified with new task-orchestrator-tests.lisp.
|
||||
**** IN-PROGRESS Full review of org-agent's harness
|
||||
**** DONE Implement Unified Envelope Architecture & Channel-Awareness
|
||||
CLOSED: [2026-04-20 Mon 13:20]
|
||||
- Removed specialized :CHAT type; reverted to semantic :REQUEST/:EVENT protocol.
|
||||
- Decoupled routing metadata into a :META envelope (SOURCE, SESSION-ID).
|
||||
- Updated TUI, Emacs, and CLI gateways to use the unified protocol.
|
||||
- Verified end-to-end loop with TUI; kernel correctly routes responses back to origin interface.
|
||||
- Achieved "Equality of Clients" mandate.
|
||||
**** IN-PROGRESS Full review of opencortex's harness
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-04-13 Mon 13:30]
|
||||
:ASSIGNED: Agent
|
||||
:END:
|
||||
- [X] Audit terminology: Replaced OACP with "communication protocol" workspace-wide.
|
||||
- [X] Audit boot sequence: Synchronized loader with `org-skill-policy.org`.
|
||||
- [X] Implement Unified Envelope (Channel-Aware Routing).
|
||||
- [-] Audit core Perceive-Think-Act loop.
|
||||
- [X] Verified protocol framing and reader jailing (`*read-eval* nil`).
|
||||
- [X] Refactored `loop.org` for literate granularity and configuration externalization.
|
||||
- [X] Improved error handling (restricted rollback) and added graceful shutdown.
|
||||
- [X] **GAP:** Missing symbolic guard check in `act-gate` (Stage 3: Act).
|
||||
- [ ] Ensure alignment with System Policy and Engineering Standards.
|
||||
- [X] **FIXED:** Implemented symbolic guard check in `act-gate` via Bouncer skill refactoring.
|
||||
- [X] **FIXED:** Harness `deterministic-verify` now correctly respects skill triggers.
|
||||
- [X] Ensure alignment with System Policy and Engineering Standards.
|
||||
- [X] Restored structural integrity by fixing `manifest.org` loading sequence.
|
||||
**** TODO Wake up the Scribe (Implement autonomous weekly Journal-to-Ledger distillation in org-skill-scribe.org)
|
||||
**** TODO Implement `org-skill-lisp-repair` (Self-correcting syntax gate for Deterministic Engine)
|
||||
CLOSED: [2026-04-11 Sat 15:10]
|
||||
@@ -247,12 +617,61 @@ Slim down the org-agent microharness by moving non-essential cognitive functions
|
||||
- Leveraged Memory event bus for asynchronous re-injection.
|
||||
|
||||
**** DONE Refactor Architecture Terminology (Associative -> Probabilistic, Deliberate -> Deterministic)
|
||||
CLOSED: [2026-04-12 Sun 21:00]
|
||||
:PROPERTIES:
|
||||
:ID: terminology-refactor-task
|
||||
:END:
|
||||
- Updated codebase-wide terminology to use Probabilistic/Deterministic Engines.
|
||||
- Replaced System 1/2 with Probabilistic/Deterministic Engines respectively.
|
||||
CLOSED: [2026-04-12 Sun 21:00]
|
||||
:PROPERTIES:
|
||||
:ID: terminology-refactor-task
|
||||
:END:
|
||||
- Updated codebase-wide terminology to use Probabilistic/Deterministic Engines.
|
||||
- Replaced System 1/2 with Probabilistic/Deterministic Engines respectively.
|
||||
|
||||
**** DONE Refactor org-skill-policy.org: Concrete Invariants, Conflict Hierarchy, and Auditable Gate
|
||||
CLOSED: [2026-04-22 Wed 11:50]
|
||||
:PROPERTIES:
|
||||
:ID: policy-refactor-concrete-invariants
|
||||
:END:
|
||||
- Added explicit Override Hierarchy (Transparency > Autonomy > Bloat > Mentorship > Sustainability).
|
||||
- Implemented `policy-check-transparency`: blocks user-facing actions without :explanation.
|
||||
- Implemented `policy-check-autonomy`: flags proprietary domain references as autonomy debt.
|
||||
- Implemented `policy-check-bloat`: warns on :create-skill actions exceeding size threshold.
|
||||
- Implemented `policy-check-mentorship`: blocks high-impact actions missing :mentorship-note.
|
||||
- Implemented `policy-check-sustainability`: logs cloud-provider usage as sustainability debt.
|
||||
- Implemented `policy-explain`: formats auditable rationale for every policy decision.
|
||||
- Implemented `policy-find-engineering-standards-gate`: robust cross-package search for standards skill.
|
||||
- Hardened `policy-deterministic-gate`: never returns NIL silently; always returns action or auditable log.
|
||||
- Raised skill priority from 100 to 500 to ensure it runs before other deterministic gates.
|
||||
|
||||
**** DONE Add Invariant 6 (Modularity) and Harness Boundary Contract to Policy/Manifest
|
||||
CLOSED: [2026-04-22 Wed 12:10]
|
||||
:PROPERTIES:
|
||||
:ID: policy-modularity-invariant
|
||||
:END:
|
||||
- Added Modularity as Invariant 6 in `org-skill-policy.org`: general life principle that complexity must live at the edges.
|
||||
- Implemented `policy-check-modularity`: blocks modifications to protected core paths unless `:modularity-justification` is provided.
|
||||
- Defined `*modularity-protected-paths*` as project-configurable variable (defaults: harness/, opencortex.asd).
|
||||
- Updated Override Hierarchy to include Modularity between Bloat and Mentorship.
|
||||
- Added Harness Boundary Contract section to `harness/manifest.org` documenting primary boundary files and generated artifacts.
|
||||
- Converted checkbox sub-tasks to hierarchical TODO headlines in gtd.org per GTD standard.
|
||||
|
||||
**** DONE Implement `org-skill-lisp-validator` (3-phase deterministic validation gate)
|
||||
CLOSED: [2026-04-22 Wed 12:30]
|
||||
:PROPERTIES:
|
||||
:ID: lisp-validator-implementation
|
||||
:END:
|
||||
- Created 3-phase validation pipeline: Structural (O(n) paren scanner), Syntactic (reader with *read-eval* nil), Semantic (whitelist AST walk).
|
||||
- Implemented `lisp-validator-validate` returning structured plists for machine parsing.
|
||||
- Exposed `:validate-lisp` cognitive tool for Probabilistic Engine self-correction.
|
||||
- Replaced `validate-lisp-syntax` in `harness/skills.org` with delegation to the validator.
|
||||
- Added mandatory validation rule to Probabilistic Engine system prompt in `harness/reason.org`.
|
||||
- Fixed paren balance and `return-from` compilation errors in org source; tangled and validated in SBCL.
|
||||
|
||||
**** DONE Fix Skill Loader to Respect `:tangle` Blocks and Eliminate Circular Dependency
|
||||
CLOSED: [2026-04-22 Wed 12:45]
|
||||
:PROPERTIES:
|
||||
:ID: skill-loader-tangle-fix
|
||||
:END:
|
||||
- Updated `load-skill-from-org` in `harness/skills.org` to only collect blocks with `:tangle` directives pointing to runtime `.lisp` files, excluding `tests/` and `test/` paths.
|
||||
- Added fallback to `validate-lisp-syntax` so it uses a basic reader check when `lisp-validator-validate` is not yet loaded (breaks circular harness->skill dependency).
|
||||
- Verified full boot: 13/13 skills loaded successfully into SBCL, including `skill-lisp-validator` at priority 900 and `skill-policy` at priority 500.
|
||||
|
||||
*** TRACK: SECURITY & CONTAINMENT (The 5-Vector Bouncer Matrix)
|
||||
**** DONE Implement Path-Based Scoping for File Writes (DNA/State vs Work)
|
||||
@@ -278,7 +697,7 @@ Slim down the org-agent microharness by moving non-essential cognitive functions
|
||||
- Added unit tests for each provider in `llm-gateway-tests.lisp`.
|
||||
- Mocked `dex:post` to verify JSON payload formatting and response parsing.
|
||||
- Implemented robust `get-nested` helper to handle various provider structures.
|
||||
- Integrated `llm-gateway` and `credentials-vault` into `org-agent.asd`.
|
||||
- Integrated `llm-gateway` and `credentials-vault` into `opencortex.asd`.
|
||||
**** TODO Verify org-skill-shell-actuator formal safety harnesses
|
||||
**** DONE Build Playwright-Python Bridge for high-fidelity browsing
|
||||
CLOSED: [2026-04-11 Sat 18:30]
|
||||
@@ -343,11 +762,11 @@ Slim down the org-agent microharness by moving non-essential cognitive functions
|
||||
:ID: monthly-infra-audit
|
||||
:REPEAT_TO_STATE: TODO
|
||||
:END:
|
||||
- [ ] Check for new Debian security patches (`apt-get update` check).
|
||||
- [ ] Check for new `signal-cli` releases (compare vs v0.14.0).
|
||||
- [ ] Check for new Quicklisp distribution (monthly snapshot).
|
||||
- [ ] **Verification:** Update `Dockerfile`, run `docker-compose build --no-cache`, and execute full test suite.
|
||||
- [ ] If all tests pass, commit updated `Dockerfile` and `.asd` dependencies.
|
||||
***** TODO Check for new Debian security patches (`apt-get update` check)
|
||||
***** TODO Check for new `signal-cli` releases (compare vs v0.14.0)
|
||||
***** TODO Check for new Quicklisp distribution (monthly snapshot)
|
||||
***** TODO Verification: Update `Dockerfile`, run `docker-compose build --no-cache`, and execute full test suite
|
||||
***** TODO If all tests pass, commit updated `Dockerfile` and `.asd` dependencies
|
||||
|
||||
*** TRACK: COMMUNITY & DOCS
|
||||
**** TODO Write Quickstart Guide
|
||||
@@ -621,7 +1040,7 @@ Institutionalizing the virtual software house operating system.
|
||||
- State "DONE" from "NEXT" [2026-03-22 Sun 15:45]
|
||||
:END:
|
||||
|
||||
*** DONE Apply Engineering Loop to `org-agent` Phase 1 (Core Loop)
|
||||
*** DONE Apply Engineering Loop to `opencortex` Phase 1 (Core Loop)
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-22 Sun 15:30]
|
||||
:ASSIGNED: Technical Analyst
|
||||
@@ -789,8 +1208,8 @@ Defining and maintaining high-integrity KM and GTD workflows.
|
||||
:END:
|
||||
|
||||
Detected ~1,300 entries missing the `:CREATED:` property during the Engineering Phase E (Chaos) audit.
|
||||
- [ ] Implement inference logic to restore historical timestamps (via Git or context).
|
||||
- [ ] Batch repair `inbox-emacs.org`, `inbox-atoms.org`, and `inbox-posts.org`.
|
||||
**** TODO Implement inference logic to restore historical timestamps (via Git or context)
|
||||
**** TODO Batch repair `inbox-emacs.org`, `inbox-atoms.org`, and `inbox-posts.org`
|
||||
|
||||
** Agora Gap Verification
|
||||
:PROPERTIES:
|
||||
@@ -1092,9 +1511,8 @@ A modular manual of different areas to go with different activities. Fits in the
|
||||
|
||||
** Architecture Astronaut Archive
|
||||
*** TODO Implement Privacy-Aware Background Indexer (Local hashes for @personal, Semantic for others)
|
||||
*** TODO Decouple Transport from Protocol (True Actuator-Agnosticism in communication.lisp)
|
||||
*** TODO Implement communication protocol Backpressure Handling (Queue bounds and BUSY frames in communication.lisp)
|
||||
*** TODO Implement Cognitive Loop "Rut" Recovery (Dynamic Escalation in org-skill-lisp-validator)
|
||||
*** TODO Implement Cognitive Cycle "Rut" Recovery (Dynamic Escalation in org-skill-lisp-validator)
|
||||
*** TODO Implement Asynchronous Event Bus for Telemetry (core.lisp)
|
||||
*** TODO Implement Memory Eviction and Lazy Loading (LRU Cache in memory.lisp)
|
||||
*** TODO Implement Two-Speed Reflection (Immediate :post-action + Latent Heartbeat)
|
||||
@@ -1102,7 +1520,7 @@ A modular manual of different areas to go with different activities. Fits in the
|
||||
*** TODO Implement Intent-Shift Detector (Semantic topic-shift flagging in neuro.lisp)
|
||||
*** TODO Implement Cognitive Economics (Dynamic LLM routing based on 2x2 matrix complexity)
|
||||
*** TODO Implement Micro-Prolog Logic Engine (Lisp-native unification & pattern matching for Memory)
|
||||
*** TODO Implement Sovereign Logic Synthesis (Hybrid SubSys2: Neural pattern detection + Symbolic rule generation)
|
||||
*** TODO Implement Autonomous Logic Synthesis (Hybrid SubSys2: Neural pattern detection + Symbolic rule generation)
|
||||
*** TODO Implement Continuous Vibe (Sentiment-weighted personality in system-prompt)
|
||||
*** TODO Implement Search-Before-Think Bridge (Autonomous target-id population via vector search in perceive-gate)
|
||||
*** TODO Implement Belief Revision & Reconciliation (Audit deltas for contradictions in scribe-engine.lisp)
|
||||
|
||||
150
gtd_archive_2026
@@ -13664,7 +13664,7 @@ CLOSED: [2026-04-04 Sat 17:36]
|
||||
|
||||
The Proxmox Migration: Move the agent from the low-power machine into a dedicated LXC container on the new rack.
|
||||
|
||||
** Phase III: The org-agent Microkernel (The "Native" Phase)
|
||||
** Phase III: The opencortex Microkernel (The "Native" Phase)
|
||||
|
||||
Hollowing out the modern tools in favor of Lisp.
|
||||
The Lisp Transition: Replace OpenClaw’s Python logic with your minimalist Common Lisp heartbeat.
|
||||
@@ -13942,7 +13942,7 @@ Server Rack Assembly: Build the 4080/4040 aluminum skeleton.
|
||||
Local AI Capability: Install the RTX 6000 Pros. Move from remote APIs to local inference using Ollama/vLLM (DeepSeek-R1 / Qwen3-Coder).
|
||||
The Proxmox Migration: Move the agent from the low-power machine into a dedicated LXC container on the new rack.
|
||||
|
||||
***** Phase III: The org-agent Microkernel (The "Native" Phase)
|
||||
***** Phase III: The opencortex Microkernel (The "Native" Phase)
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-20 Fri 08:20]
|
||||
:END:
|
||||
@@ -13956,16 +13956,16 @@ The final evolution into a self-hosted Lisp Machine.
|
||||
The FPGA Sidecar: Activate the hardware-level "Thalamus" to verify Lisp forms.
|
||||
Unikernel/Bare Metal: Bootstrap Sol out of the Linux environment and directly onto the hardware, where the Org-mode tree and the Lisp Heap become the operating system.
|
||||
|
||||
***** Org-agent
|
||||
***** OpenCortex
|
||||
:PROPERTIES:
|
||||
:CREATED: [2026-03-20 Fri 08:00]
|
||||
:END:
|
||||
|
||||
By formalizing this, you are effectively designing the blueprint for Sol.
|
||||
To answer your biggest question first: No, org-agent will not replace OpenCode or the Claude Agent SDK—it will act as their orchestrator and wrapper. Tools like OpenCode (which focuses on terminal-based, plan-first coding with AGENTS.md) and the Claude Agent SDK (which provides programmatic access to Anthropic's tool-calling and multi-agent teams) are phenomenal execution engines. However, they are built around Markdown, JSON, and Python/TypeScript ecosystems.
|
||||
org-agent replaces their management layer. Instead of letting OpenCode or Claude dictate your workflow, org-agent sits above them. When org-agent decides a complex coding task is required, it simply invokes OpenCode or a Claude subagent via a CLI or API call, passing along a compiled .org file as context.
|
||||
To answer your biggest question first: No, opencortex will not replace OpenCode or the Claude Agent SDK—it will act as their orchestrator and wrapper. Tools like OpenCode (which focuses on terminal-based, plan-first coding with AGENTS.md) and the Claude Agent SDK (which provides programmatic access to Anthropic's tool-calling and multi-agent teams) are phenomenal execution engines. However, they are built around Markdown, JSON, and Python/TypeScript ecosystems.
|
||||
opencortex replaces their management layer. Instead of letting OpenCode or Claude dictate your workflow, opencortex sits above them. When opencortex decides a complex coding task is required, it simply invokes OpenCode or a Claude subagent via a CLI or API call, passing along a compiled .org file as context.
|
||||
Here is the developer brief for building the system.
|
||||
Project Brief: org-agent
|
||||
Project Brief: opencortex
|
||||
Mission: Build a hyper-minimalist, self-editing, proactive AI agent framework in Common Lisp. The system must use Org-mode as its exclusive interface for memory, state, and skill configuration, rejecting Markdown and JSON overhead.
|
||||
Target Environment: A Linux/Proxmox homelab, running local inference servers, heavily utilizing GitOps and Lisp-based development.
|
||||
1. Core Architecture (The Lisp Microkernel)
|
||||
@@ -13979,18 +13979,18 @@ Instead of relying on SKILL.md or OpenCode's AGENTS.md, all capabilities are def
|
||||
* Dynamic Loading: The agent reads these files on boot. If the agent generates a new .org file via an LLM output, it instantly acquires that new skill on the next heartbeat.
|
||||
* Progressive Disclosure: To save token context, the agent only loads the #+DESCRIPTION of a skill initially. It must explicitly request the full #+BEGIN_SRC implementation if it decides to use it.
|
||||
3. LLMs and Coding Agents as "Effectors"
|
||||
org-agent treats AI models and external SDKs exactly like it treats a Proxmox server—as a downstream tool to be managed.
|
||||
| External Tool | How org-agent Uses It | Trade-off |
|
||||
opencortex treats AI models and external SDKs exactly like it treats a Proxmox server—as a downstream tool to be managed.
|
||||
| External Tool | How opencortex Uses It | Trade-off |
|
||||
|------------------------+-----------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------|
|
||||
| Local Inference (vLLM) | A base skill (llm-local.org) containing an HTTP POST request to your RTX 6000 cluster for fast, cheap, private reasoning. | Requires manual mapping of Lisp s-expressions to the local model's API. |
|
||||
| OpenCode | A wrapper skill (skill-opencode.org) that triggers the opencode CLI to execute a massive refactoring job, returning the git diff to org-agent. | Abandons OpenCode's native TUI in favor of headless execution. |
|
||||
| OpenCode | A wrapper skill (skill-opencode.org) that triggers the opencode CLI to execute a massive refactoring job, returning the git diff to opencortex. | Abandons OpenCode's native TUI in favor of headless execution. |
|
||||
| Claude Agent SDK | A wrapper skill that triggers a Python script leveraging Anthropic's SDK to spin up a multi-agent "Team" for deep architectural planning. | Costs external API tokens; requires Python alongside Lisp. |
|
||||
4. Security & Isolation
|
||||
Because org-agent runs directly on the host machine to manage Proxmox and GitOps, security is handled via strict allow-lists within the Lisp kernel.
|
||||
Because opencortex runs directly on the host machine to manage Proxmox and GitOps, security is handled via strict allow-lists within the Lisp kernel.
|
||||
* The LLM backend is instructed to output strictly formatted Lisp s-expressions (e.g., (invoke-skill "proxmox" "restart-staging")).
|
||||
* The Lisp Executor will only evaluate forms where the car (the function name) matches a predefined, safe whitelist.
|
||||
The Verdict on the Workflow
|
||||
By building org-agent, you are creating a system where your daily GTD notes, your infrastructure commands, and your AI's source code all share the exact same syntax. It is the ultimate manifestation of "Code is Data."
|
||||
By building opencortex, you are creating a system where your daily GTD notes, your infrastructure commands, and your AI's source code all share the exact same syntax. It is the ultimate manifestation of "Code is Data."
|
||||
Would you like me to draft the Lisp parser function that reads an .org skill file and translates its #+NAME and #+BEGIN_SRC blocks into callable Lisp functions for the agent's whitelist?
|
||||
|
||||
***** Agora
|
||||
@@ -15109,4 +15109,132 @@ CLOSED: [2026-04-04 Sat 17:39]
|
||||
:ARCHIVE_CATEGORY: wip-block-goose-an-open-source-extensible-AI-agent-2026-04-04-17-39-47-wLfQw5
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
*** 2026-04-14 Tuesday
|
||||
**** DONE [[https://torath.gov.eg/books/bookAuthority/books-listing?seriesName=%D8%AA%D8%A7%D8%B1%D9%8A%D8%AE%20%D8%A7%D9%84%D9%85%D8%B5%D8%B1%D9%8A%D9%8A%D9%86&page=1][تاريخ المصريين - الهيئة المصرية العامة للكتاب - تراث مصر الرقمي]]
|
||||
CLOSED: [2026-04-14 Tue 11:47]
|
||||
:PROPERTIES:
|
||||
:TITLE: تاريخ المصريين - الهيئة المصرية العامة للكتاب - تراث مصر الرقمي
|
||||
:URI: https://torath.gov.eg/books/bookAuthority/books-listing?seriesName=%D8%AA%D8%A7%D8%B1%D9%8A%D8%AE%20%D8%A7%D9%84%D9%85%D8%B5%D8%B1%D9%8A%D9%8A%D9%86&page=1
|
||||
:CREATED: [2026-04-14 Tue 11:14]
|
||||
:ID: تاريخ-المصريين-الهيئة-المصرية-العامة-للكتاب-تراث-2026-04-14-11-47-42
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:47
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-تاريخ-المصريين-الهيئة-المصرية-العامة-للكتاب-تراث-2026-04-14-11-47-42-B4uIxI.org
|
||||
:ARCHIVE_CATEGORY: wip-تاريخ-المصريين-الهيئة-المصرية-العامة-للكتاب-تراث-2026-04-14-11-47-42-B4uIxI
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://www.arsheef.org/digitized-collections][Digitized Collections — arsheef]]
|
||||
CLOSED: [2026-04-14 Tue 11:47]
|
||||
:PROPERTIES:
|
||||
:TITLE: Digitized Collections — arsheef
|
||||
:URI: https://www.arsheef.org/digitized-collections
|
||||
:CREATED: [2026-04-14 Tue 11:02]
|
||||
:ID: Digitized-Collections-arsheef-2026-04-14-11-47-49
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:47
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-Digitized-Collections-arsheef-2026-04-14-11-47-49-yc2uyh.org
|
||||
:ARCHIVE_CATEGORY: wip-Digitized-Collections-arsheef-2026-04-14-11-47-49-yc2uyh
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://archive.org/search?query=%D9%83%D8%AA%D8%A7%D8%A8+%D8%A7%D9%84%D9%87%D9%84%D8%A7%D9%84][Internet Archive: Digital Library of Free & Borrowable Texts, Movies, Music & Wayback Machine]]
|
||||
CLOSED: [2026-04-14 Tue 11:47]
|
||||
:PROPERTIES:
|
||||
:TITLE: Internet Archive: Digital Library of Free & Borrowable Texts, Movies, Music & Wayback Machine
|
||||
:URI: https://archive.org/search?query=%D9%83%D8%AA%D8%A7%D8%A8+%D8%A7%D9%84%D9%87%D9%84%D8%A7%D9%84
|
||||
:CREATED: [2026-04-14 Tue 11:02]
|
||||
:ID: Internet-Archive-Digital-Library-of-Free-and-2026-04-14-11-47-54
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:47
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-Internet-Archive-Digital-Library-of-Free-and-2026-04-14-11-47-54-Z0t1BU.org
|
||||
:ARCHIVE_CATEGORY: wip-Internet-Archive-Digital-Library-of-Free-and-2026-04-14-11-47-54-Z0t1BU
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
A complete archive of كتاب الهلال.
|
||||
|
||||
**** DONE [[https://community.home-assistant.io/t/new-weather-radar-card/417635][New Weather Radar Card - Share your Projects! / Dashboards & Frontend - Home Assistant Community]]
|
||||
CLOSED: [2026-04-14 Tue 11:48]
|
||||
:PROPERTIES:
|
||||
:TITLE: New Weather Radar Card - Share your Projects! / Dashboards & Frontend - Home Assistant Community
|
||||
:URI: https://community.home-assistant.io/t/new-weather-radar-card/417635
|
||||
:CREATED: [2026-04-14 Tue 11:11]
|
||||
:ID: New-Weather-Radar-Card-Share-your-Projects-2026-04-14-11-47-57
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:48
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-New-Weather-Radar-Card-Share-your-Projects-2026-04-14-11-47-57-IY5m4O.org
|
||||
:ARCHIVE_CATEGORY: wip-New-Weather-Radar-Card-Share-your-Projects-2026-04-14-11-47-57-IY5m4O
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://community.home-assistant.io/t/music-assistant-player-card-control-your-players-adjust-transfer-and-join-queues-and-browse-your-media/929266][Music Assistant Player Card - Control your players, adjust, transfer, and join queues, and browse your media! - Share your Projects! / Dashboards & Frontend - Home Assistant Community]]
|
||||
CLOSED: [2026-04-14 Tue 11:48]
|
||||
:PROPERTIES:
|
||||
:TITLE: Music Assistant Player Card - Control your players, adjust, transfer, and join queues, and browse your media! - Share your Projects! / Dashboards & Frontend - Home Assistant Community
|
||||
:URI: https://community.home-assistant.io/t/music-assistant-player-card-control-your-players-adjust-transfer-and-join-queues-and-browse-your-media/929266
|
||||
:CREATED: [2026-04-14 Tue 11:11]
|
||||
:ID: Music-Assistant-Player-Card-Control-your-players-2026-04-14-11-48-11
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:48
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-Music-Assistant-Player-Card-Control-your-players-2026-04-14-11-48-11-k7UVfa.org
|
||||
:ARCHIVE_CATEGORY: wip-Music-Assistant-Player-Card-Control-your-players-2026-04-14-11-48-11-k7UVfa
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://github.com/nimroddolev/chime_tts][nimroddolev/chime_tts: A custom Home Assistant integration to play combined audio files before and/or after text-to-speech (TTS) messages]]
|
||||
CLOSED: [2026-04-14 Tue 11:49]
|
||||
:PROPERTIES:
|
||||
:TITLE: nimroddolev/chime_tts: A custom Home Assistant integration to play combined audio files before and/or after text-to-speech (TTS) messages
|
||||
:URI: https://github.com/nimroddolev/chime_tts
|
||||
:CREATED: [2026-04-14 Tue 11:11]
|
||||
:ID: nimroddolev-chime-tts-A-custom-Home-Assistant-2026-04-14-11-49-05
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:49
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-nimroddolev-chime-tts-A-custom-Home-Assistant-2026-04-14-11-49-05-je5UGn.org
|
||||
:ARCHIVE_CATEGORY: wip-nimroddolev-chime-tts-A-custom-Home-Assistant-2026-04-14-11-49-05-je5UGn
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://github.com/Clooos/bubble-card][Clooos/Bubble-Card: Bubble Card is a minimalist card collection for Home Assistant with a nice pop-up touch.]]
|
||||
CLOSED: [2026-04-14 Tue 11:49]
|
||||
:PROPERTIES:
|
||||
:TITLE: Clooos/Bubble-Card: Bubble Card is a minimalist card collection for Home Assistant with a nice pop-up touch.
|
||||
:URI: https://github.com/Clooos/bubble-card
|
||||
:CREATED: [2026-04-14 Tue 11:11]
|
||||
:ID: Clooos-Bubble-Card-Bubble-Card-is-a-minimalist-2026-04-14-11-49-19
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:49
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-Clooos-Bubble-Card-Bubble-Card-is-a-minimalist-2026-04-14-11-49-19-AGBrix.org
|
||||
:ARCHIVE_CATEGORY: wip-Clooos-Bubble-Card-Bubble-Card-is-a-minimalist-2026-04-14-11-49-19-AGBrix
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://github.com/PRProd/HA-Firemote][PRProd/HA-Firemote: Apple TV, Amazon Fire TV, Chromecast, Homatics, NVIDIA Shield, onn., Roku, Xiaomi Mi, and Android TV remote control card for Home Assistant]]
|
||||
CLOSED: [2026-04-14 Tue 11:49]
|
||||
:PROPERTIES:
|
||||
:TITLE: PRProd/HA-Firemote: Apple TV, Amazon Fire TV, Chromecast, Homatics, NVIDIA Shield, onn., Roku, Xiaomi Mi, and Android TV remote control card for Home Assistant
|
||||
:URI: https://github.com/PRProd/HA-Firemote
|
||||
:CREATED: [2026-04-14 Tue 11:12]
|
||||
:ID: PRProd-HA-Firemote-Apple-TV-Amazon-Fire-TV-2026-04-14-11-49-22
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:49
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-PRProd-HA-Firemote-Apple-TV-Amazon-Fire-TV-2026-04-14-11-49-22-oxZinO.org
|
||||
:ARCHIVE_CATEGORY: wip-PRProd-HA-Firemote-Apple-TV-Amazon-Fire-TV-2026-04-14-11-49-22-oxZinO
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
**** DONE [[https://www.mogawdat.com/][Mo Gawdat | AI + Happiness]]
|
||||
CLOSED: [2026-04-14 Tue 11:49]
|
||||
:PROPERTIES:
|
||||
:TITLE: Mo Gawdat | AI + Happiness
|
||||
:URI: https://www.mogawdat.com/
|
||||
:CREATED: [2026-04-14 Tue 11:15]
|
||||
:ID: Mo-Gawdat-AI-plus-Happiness-2026-04-14-11-49-27
|
||||
:ORG_GTD: Reference
|
||||
:ARCHIVE_TIME: 2026-04-14 Tue 11:49
|
||||
:ARCHIVE_FILE: /tmp/org-gtd/wip-Mo-Gawdat-AI-plus-Happiness-2026-04-14-11-49-27-41t26y.org
|
||||
:ARCHIVE_CATEGORY: wip-Mo-Gawdat-AI-plus-Happiness-2026-04-14-11-49-27-41t26y
|
||||
:ARCHIVE_TODO: DONE
|
||||
:END:
|
||||
|
||||
|
||||
309
inbox.org
@@ -2,3 +2,312 @@
|
||||
#+begin_comment
|
||||
This is the inbox. Everything goes in here when you capture it.
|
||||
#+end_comment
|
||||
|
||||
* [[https://x.com/michael_chomsky/status/2043369126631207096][Michael on X: "Garry is kinda correct here, but is oversimplifying memory. Harrison (the author of the original article) makes a very good point but also makes memory sound easier than it is. (before reading this article, note that I wrote down my thoughts and then passed it through Claude" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Michael on X: "Garry is kinda correct here, but is oversimplifying memory. Harrison (the author of the original article) makes a very good point but also makes memory sound easier than it is. (before reading this article, note that I wrote down my thoughts and then passed it through Claude" / X
|
||||
:URI: https://x.com/michael_chomsky/status/2043369126631207096
|
||||
:CREATED: [2026-04-14 Tue 11:17]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/chrysb/status/2043020014035570784][Chrys Bader on X: "Why long-term memory for LLMs remains unsolved" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Chrys Bader on X: "Why long-term memory for LLMs remains unsolved" / X
|
||||
:URI: https://x.com/chrysb/status/2043020014035570784
|
||||
:CREATED: [2026-04-14 Tue 11:18]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/garrytan/gbrain][garrytan/gbrain: Garry's Opinionated OpenClaw/Hermes Agent Brain]]
|
||||
:PROPERTIES:
|
||||
:TITLE: garrytan/gbrain: Garry's Opinionated OpenClaw/Hermes Agent Brain
|
||||
:URI: https://github.com/garrytan/gbrain
|
||||
:CREATED: [2026-04-14 Tue 11:18]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/karpathy/autoresearch][karpathy/autoresearch: AI agents running research on single-GPU nanochat training automatically]]
|
||||
:PROPERTIES:
|
||||
:TITLE: karpathy/autoresearch: AI agents running research on single-GPU nanochat training automatically
|
||||
:URI: https://github.com/karpathy/autoresearch
|
||||
:CREATED: [2026-04-14 Tue 11:18]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/garrytan/status/2042925773300908103][Garry Tan on X: "Thin Harness, Fat Skills" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Garry Tan on X: "Thin Harness, Fat Skills" / X
|
||||
:URI: https://x.com/garrytan/status/2042925773300908103
|
||||
:CREATED: [2026-04-14 Tue 11:18]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/xdevplatform/xmcp][xdevplatform/xmcp: MCP server for the X API]]
|
||||
:PROPERTIES:
|
||||
:TITLE: xdevplatform/xmcp: MCP server for the X API
|
||||
:URI: https://github.com/xdevplatform/xmcp
|
||||
:CREATED: [2026-04-14 Tue 11:18]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/WinterArc2125/status/2040828031707570233][Winter on X: "Most people don’t realize this: You get 1,500 free daily requests to Gemma 4 31B on @GoogleAIStudio. That’s plenty of free inference (imo). And you can route it into @NousResearch Hermes Agent via Vercel’s AI Gateway: 1. Create an API key on Google AI Studio 2. Add it under" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Winter on X: "Most people don’t realize this: You get 1,500 free daily requests to Gemma 4 31B on @GoogleAIStudio. That’s plenty of free inference (imo). And you can route it into @NousResearch Hermes Agent via Vercel’s AI Gateway: 1. Create an API key on Google AI Studio 2. Add it under" / X
|
||||
:URI: https://x.com/WinterArc2125/status/2040828031707570233
|
||||
:CREATED: [2026-04-14 Tue 11:19]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/elebumm/RedditVideoMakerBot][elebumm/RedditVideoMakerBot: Create Reddit Videos with just✨ one command ✨]]
|
||||
:PROPERTIES:
|
||||
:TITLE: elebumm/RedditVideoMakerBot: Create Reddit Videos with just✨ one command ✨
|
||||
:URI: https://github.com/elebumm/RedditVideoMakerBot
|
||||
:CREATED: [2026-04-14 Tue 11:19]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/PawelHuryn/status/2040519790779900075][Paweł Huryn on X: "After the llama.cpp fix, we can finally use gemma-4 with Claude Code: Step 1: - Windows: winget install llama.cpp - MacOS: brew install llama.cpp More: https://t.co/2Gq2cdl5hy Step 2: - llama-server -hf ggml-org/gemma-4-E2B-it-GGUF (https://t.co/3kxuATDZL6) OR - llama-server https://t.co/NFIrI1wXtH" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Paweł Huryn on X: "After the llama.cpp fix, we can finally use gemma-4 with Claude Code: Step 1: - Windows: winget install llama.cpp - MacOS: brew install llama.cpp More: https://t.co/2Gq2cdl5hy Step 2: - llama-server -hf ggml-org/gemma-4-E2B-it-GGUF (https://t.co/3kxuATDZL6) OR - llama-server https://t.co/NFIrI1wXtH" / X
|
||||
:URI: https://x.com/PawelHuryn/status/2040519790779900075
|
||||
:CREATED: [2026-04-14 Tue 11:19]
|
||||
:END:
|
||||
|
||||
* [[https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f][llm-wiki · GitHub]]
|
||||
:PROPERTIES:
|
||||
:TITLE: llm-wiki · GitHub
|
||||
:URI: https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f
|
||||
:CREATED: [2026-04-14 Tue 11:19]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/kevingu/status/2039843234760073341][Kevin Gu on X: "AutoAgent: first open source library for self-optimizing agents" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Kevin Gu on X: "AutoAgent: first open source library for self-optimizing agents" / X
|
||||
:URI: https://x.com/kevingu/status/2039843234760073341
|
||||
:CREATED: [2026-04-14 Tue 11:20]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/repowise-dev/claude-code-prompts][repowise-dev/claude-code-prompts: Independently authored prompt templates for AI coding agents — system prompts, tool prompts, agent delegation, memory management, and multi-agent coordination. Informed by studying Claude Code.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: repowise-dev/claude-code-prompts: Independently authored prompt templates for AI coding agents — system prompts, tool prompts, agent delegation, memory management, and multi-agent coordination. Informed by studying Claude Code.
|
||||
:URI: https://github.com/repowise-dev/claude-code-prompts
|
||||
:CREATED: [2026-04-14 Tue 11:20]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/ryancarson/status/2039786704731541903][Ryan Carson on X: "How to turn your OpenClaw into the world's best assistant" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Ryan Carson on X: "How to turn your OpenClaw into the world's best assistant" / X
|
||||
:URI: https://x.com/ryancarson/status/2039786704731541903
|
||||
:CREATED: [2026-04-14 Tue 11:20]
|
||||
:END:
|
||||
|
||||
* [[https://vitalik.eth.limo/general/2026/04/02/secure_llms.html][My self-sovereign / local / private / secure LLM setup, April 2026]]
|
||||
:PROPERTIES:
|
||||
:TITLE: My self-sovereign / local / private / secure LLM setup, April 2026
|
||||
:URI: https://vitalik.eth.limo/general/2026/04/02/secure_llms.html
|
||||
:CREATED: [2026-04-14 Tue 11:20]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/TheAhmadOsman/status/2040103488714068245][Ahmad on X: "GPU Memory Math for LLMs (2026 Edition)" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Ahmad on X: "GPU Memory Math for LLMs (2026 Edition)" / X
|
||||
:URI: https://x.com/TheAhmadOsman/status/2040103488714068245
|
||||
:CREATED: [2026-04-14 Tue 11:20]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/gauri__gupta/status/2040251170099524025][Gauri Gupta on X: "auto-harness: Self improving agentic systems with auto-evals (open-sourced !)" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Gauri Gupta on X: "auto-harness: Self improving agentic systems with auto-evals (open-sourced !)" / X
|
||||
:URI: https://x.com/gauri__gupta/status/2040251170099524025
|
||||
:CREATED: [2026-04-14 Tue 11:21]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/PromptLLM/status/2040478865949139014][Prompter on X: "CURE procrastination by gamifying your life with AI (prompt included)" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Prompter on X: "CURE procrastination by gamifying your life with AI (prompt included)" / X
|
||||
:URI: https://x.com/PromptLLM/status/2040478865949139014
|
||||
:CREATED: [2026-04-14 Tue 11:21]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/chrysb/status/2043020014035570784][Chrys Bader on X: "Why long-term memory for LLMs remains unsolved" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Chrys Bader on X: "Why long-term memory for LLMs remains unsolved" / X
|
||||
:URI: https://x.com/chrysb/status/2043020014035570784
|
||||
:CREATED: [2026-04-14 Tue 11:21]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/ValueCell-ai/ClawX][ValueCell-ai/ClawX: ClawX is a desktop app that provides a graphical interface for OpenClaw AI agents. It turns CLI-based AI orchestration into a desktop experience without using the terminal. China website is https://clawx.com.cn.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: ValueCell-ai/ClawX: ClawX is a desktop app that provides a graphical interface for OpenClaw AI agents. It turns CLI-based AI orchestration into a desktop experience without using the terminal. China website is https://clawx.com.cn.
|
||||
:URI: https://github.com/ValueCell-ai/ClawX
|
||||
:CREATED: [2026-04-16 Thu 16:33]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/sgoudelis/ground-station][sgoudelis/ground-station: Ground Station is all-in-one satellite monitoring suite]]
|
||||
:PROPERTIES:
|
||||
:TITLE: sgoudelis/ground-station: Ground Station is all-in-one satellite monitoring suite
|
||||
:URI: https://github.com/sgoudelis/ground-station
|
||||
:CREATED: [2026-04-17 Fri 14:52]
|
||||
:END:
|
||||
|
||||
* [[https://platform.minimax.io/docs/guides/pricing-token-plan][Token Plan - MiniMax API Docs]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Token Plan - MiniMax API Docs
|
||||
:URI: https://platform.minimax.io/docs/guides/pricing-token-plan
|
||||
:CREATED: [2026-04-17 Fri 14:52]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/siddsachar/Thoth][siddsachar/Thoth: Thoth - Personal AI Sovereignty. A local-first AI assistant with integrated tools, a personal knowledge graph, voice, vision, shell, browser automation, scheduled tasks, health tracking, and messaging channels. Run locally via Ollama or add opt-in cloud models. Your data stays on your machine.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: siddsachar/Thoth: Thoth - Personal AI Sovereignty. A local-first AI assistant with integrated tools, a personal knowledge graph, voice, vision, shell, browser automation, scheduled tasks, health tracking, and messaging channels. Run locally via Ollama or add opt-in cloud models. Your data stays on your machine.
|
||||
:URI: https://github.com/siddsachar/Thoth
|
||||
:CREATED: [2026-04-17 Fri 14:52]
|
||||
:END:
|
||||
|
||||
* [[https://www.jori.com/en/products/pacific-jr-9700][Pacific Pure | Sofas | Product | Design furniture | JORI]] :furniture:years:
|
||||
:PROPERTIES:
|
||||
:TITLE: Pacific Pure | Sofas | Product | Design furniture | JORI
|
||||
:URI: https://www.jori.com/en/products/pacific-jr-9700
|
||||
:CREATED: [2026-04-21 Tue 15:25]
|
||||
:END:
|
||||
|
||||
* [[https://papers.ssrn.com/sol3/papers.cfm?abstract_id=6372438][AI Agent Traps by Matija Franklin, Nenad Tomašev, Julian Jacobs, Joel Z. Leibo, Simon Osindero :: SSRN]]
|
||||
:PROPERTIES:
|
||||
:TITLE: AI Agent Traps by Matija Franklin, Nenad Tomašev, Julian Jacobs, Joel Z. Leibo, Simon Osindero :: SSRN
|
||||
:URI: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=6372438
|
||||
:CREATED: [2026-04-21 Tue 15:26]
|
||||
:END:
|
||||
|
||||
* [[https://www.storagereview.com/review/comino-grando-rtx-pro-6000-review-768gb-of-vram-in-a-liquid-cooled-4u-chassis][Comino Grando RTX PRO 6000 Review: 768GB of VRAM in a Liquid-Cooled 4U Chassis - StorageReview.com]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Comino Grando RTX PRO 6000 Review: 768GB of VRAM in a Liquid-Cooled 4U Chassis - StorageReview.com
|
||||
:URI: https://www.storagereview.com/review/comino-grando-rtx-pro-6000-review-768gb-of-vram-in-a-liquid-cooled-4u-chassis
|
||||
:CREATED: [2026-04-21 Tue 15:26]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/elvissun/status/2044784140831301728/photo/1][Elvis on X: "some agentic engineering realization: stop reviewing code. start reviewing contracts. and here's what i mean. the highest leverage work right now is drawing the right boundaries in your system. i've been splitting the system into multiple sub-systems, each with clearly defined https://t.co/Hy0d9WHI1m" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Elvis on X: "some agentic engineering realization: stop reviewing code. start reviewing contracts. and here's what i mean. the highest leverage work right now is drawing the right boundaries in your system. i've been splitting the system into multiple sub-systems, each with clearly defined https://t.co/Hy0d9WHI1m" / X
|
||||
:URI: https://x.com/elvissun/status/2044784140831301728/photo/1
|
||||
:CREATED: [2026-04-21 Tue 15:26]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2044307601463357791][EverMars on X: "Respect to the Man Chasing AI Immortality, Even Though He's Freeloading Off Our Platform" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: EverMars on X: "Respect to the Man Chasing AI Immortality, Even Though He's Freeloading Off Our Platform" / X
|
||||
:URI: https://x.com/i/status/2044307601463357791
|
||||
:CREATED: [2026-04-21 Tue 15:26]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2045289299269070978][Seth Howes on X: "I’ve wanted to do this for a decade. But I never did - I refuse to give any company my DNA. It is me. So this week I sequenced my genome entirely at home. Literally on my kitchen table. I never exposed my DNA sequence to the internet. Not at any point. I used a MinION to do https://t.co/qCzXIGxWsy" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Seth Howes on X: "I’ve wanted to do this for a decade. But I never did - I refuse to give any company my DNA. It is me. So this week I sequenced my genome entirely at home. Literally on my kitchen table. I never exposed my DNA sequence to the internet. Not at any point. I used a MinION to do https://t.co/qCzXIGxWsy" / X
|
||||
:URI: https://x.com/i/status/2045289299269070978
|
||||
:CREATED: [2026-04-21 Tue 15:27]
|
||||
:END:
|
||||
|
||||
* [[https://arxiv.org/html/2603.21852v2][All elementary functions from a single operator]]
|
||||
:PROPERTIES:
|
||||
:TITLE: All elementary functions from a single operator
|
||||
:URI: https://arxiv.org/html/2603.21852v2
|
||||
:CREATED: [2026-04-26 Sun 11:05]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/abhigyanpatwari/GitNexus][abhigyanpatwari/GitNexus: GitNexus: The Zero-Server Code Intelligence Engine - GitNexus is a client-side knowledge graph creator that runs entirely in your browser. Drop in a GitHub repo or ZIP file, and get an interactive knowledge graph wit a built in Graph RAG Agent. Perfect for code exploration]]
|
||||
:PROPERTIES:
|
||||
:TITLE: abhigyanpatwari/GitNexus: GitNexus: The Zero-Server Code Intelligence Engine - GitNexus is a client-side knowledge graph creator that runs entirely in your browser. Drop in a GitHub repo or ZIP file, and get an interactive knowledge graph wit a built in Graph RAG Agent. Perfect for code exploration
|
||||
:URI: https://github.com/abhigyanpatwari/GitNexus
|
||||
:CREATED: [2026-04-26 Sun 11:05]
|
||||
:END:
|
||||
|
||||
* [[https://medium.com/@fzbcwvv/an-overnight-stack-for-qwen3-6-27b-85-tps-125k-context-vision-on-one-rtx-3090-0d95c6291914][An Overnight Stack for Qwen3.6–27B: 85 TPS, 125K Context, Vision — on One RTX 3090 | Medium]]
|
||||
:PROPERTIES:
|
||||
:TITLE: An Overnight Stack for Qwen3.6–27B: 85 TPS, 125K Context, Vision — on One RTX 3090 | Medium
|
||||
:URI: https://medium.com/@fzbcwvv/an-overnight-stack-for-qwen3-6-27b-85-tps-125k-context-vision-on-one-rtx-3090-0d95c6291914
|
||||
:CREATED: [2026-04-26 Sun 11:06]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2047124337191444844][Shiv on X: "A new way to think about composing skills to increase leverage: Skill Graphs 2.0" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Shiv on X: "A new way to think about composing skills to increase leverage: Skill Graphs 2.0" / X
|
||||
:URI: https://x.com/i/status/2047124337191444844
|
||||
:CREATED: [2026-04-26 Sun 16:34]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2047558951303028855][Eric ⚡️ Building... on X: "My 4090 went from 26 -> 154 tok/s Qwen 3.6 27B🤯 Same GPU. Same Q4_K_M . No FP8, no extra quant. The unlock: ik_llama.cpp + speculative decoding using Qwen3-1.7B as the draft model. 85% acceptance rate. Full config + benchmarks 👇🏻 https://t.co/NUZec2Y7J0" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Eric ⚡️ Building... on X: "My 4090 went from 26 -> 154 tok/s Qwen 3.6 27B🤯 Same GPU. Same Q4_K_M . No FP8, no extra quant. The unlock: ik_llama.cpp + speculative decoding using Qwen3-1.7B as the draft model. 85% acceptance rate. Full config + benchmarks 👇🏻 https://t.co/NUZec2Y7J0" / X
|
||||
:URI: https://x.com/i/status/2047558951303028855
|
||||
:CREATED: [2026-04-26 Sun 16:34]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2047033293460410638][Sudo su on X: "for anyone running along, here is the setup. weights from unsloth: https://t.co/b89HJ2JC5O launched with: ./llama-server -m Qwen3.6-27B-Q4_K_M.gguf -ngl 99 -c 262144 -np 1 -fa on --cache-type-k q4_0 --cache-type-v q4_0 same exact flags that held the 3.5 dense baseline at 35.3" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Sudo su on X: "for anyone running along, here is the setup. weights from unsloth: https://t.co/b89HJ2JC5O launched with: ./llama-server -m Qwen3.6-27B-Q4_K_M.gguf -ngl 99 -c 262144 -np 1 -fa on --cache-type-k q4_0 --cache-type-v q4_0 same exact flags that held the 3.5 dense baseline at 35.3" / X
|
||||
:URI: https://x.com/i/status/2047033293460410638
|
||||
:CREATED: [2026-04-26 Sun 16:34]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2046898117241635240][Hasan Toor on X: "Goodbye Claude Code subscription fees. Someone just built a proxy that runs Claude Code completely free... and it's wild. You literally plug in a free NVIDIA API key and point Claude Code at localhost. That's it. It handles everything: - Converts Anthropic API calls to NVIDIA https://t.co/10v4KdymxH" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Hasan Toor on X: "Goodbye Claude Code subscription fees. Someone just built a proxy that runs Claude Code completely free... and it's wild. You literally plug in a free NVIDIA API key and point Claude Code at localhost. That's it. It handles everything: - Converts Anthropic API calls to NVIDIA https://t.co/10v4KdymxH" / X
|
||||
:URI: https://x.com/i/status/2046898117241635240
|
||||
:CREATED: [2026-04-26 Sun 16:34]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2047295369583964385][Graeme on X: "The Local LLM Cheat Sheet for Your 64GB RAM Device We covered 16GB and 32GB already, and 64GB has been the next big request, which I can understand, because this is where things get very interesting. Here's the practical cheat sheet for a 64GB RAM machine for code, math, https://t.co/ohgkjbU0LK" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: Graeme on X: "The Local LLM Cheat Sheet for Your 64GB RAM Device We covered 16GB and 32GB already, and 64GB has been the next big request, which I can understand, because this is where things get very interesting. Here's the practical cheat sheet for a 64GB RAM machine for code, math, https://t.co/ohgkjbU0LK" / X
|
||||
:URI: https://x.com/i/status/2047295369583964385
|
||||
:CREATED: [2026-04-26 Sun 16:34]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/codejunkie99/agentic-stack][codejunkie99/agentic-stack: One brain, many harnesses. Portable .agent/ folder (memory + skills + protocols) that plugs into Claude Code, Cursor, Windsurf, OpenCode, OpenClaw, Hermes, or DIY Python — and keeps its knowledge when you switch.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: codejunkie99/agentic-stack: One brain, many harnesses. Portable .agent/ folder (memory + skills + protocols) that plugs into Claude Code, Cursor, Windsurf, OpenCode, OpenClaw, Hermes, or DIY Python — and keeps its knowledge when you switch.
|
||||
:URI: https://github.com/codejunkie99/agentic-stack
|
||||
:CREATED: [2026-04-27 Mon 09:23]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/public-apis/public-apis][public-apis/public-apis: A collective list of free APIs]]
|
||||
:PROPERTIES:
|
||||
:TITLE: public-apis/public-apis: A collective list of free APIs
|
||||
:URI: https://github.com/public-apis/public-apis
|
||||
:CREATED: [2026-04-27 Mon 09:23]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/stanford-iris-lab/meta-harness][stanford-iris-lab/meta-harness: Reference code for the Meta-Harness paper.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: stanford-iris-lab/meta-harness: Reference code for the Meta-Harness paper.
|
||||
:URI: https://github.com/stanford-iris-lab/meta-harness
|
||||
:CREATED: [2026-04-27 Mon 09:23]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/thePM001/AEP-agent-element-protocol/tree/main][thePM001/AEP-agent-element-protocol: AEP (Agent Element Protocol) v2.5 | Deterministic zero-trust total control and governance protocol for AI agents. | Reduce hallucinations to zero through architecure in all constrained domains of application. | LLMs gave you the engines, AEP gives you the control for the thrusters.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: thePM001/AEP-agent-element-protocol: AEP (Agent Element Protocol) v2.5 | Deterministic zero-trust total control and governance protocol for AI agents. | Reduce hallucinations to zero through architecure in all constrained domains of application. | LLMs gave you the engines, AEP gives you the control for the thrusters.
|
||||
:URI: https://github.com/thePM001/AEP-agent-element-protocol/tree/main
|
||||
:CREATED: [2026-04-27 Mon 09:24]
|
||||
:END:
|
||||
|
||||
* [[https://x.com/i/status/2048381278953603406][GREG ISENBERG on X: "agreed that the the modern computer probably has to be reinvented 12 "tiny" startup ideas that ride that wave: 1. a "where did I put that" app. you describe what you're looking for in plain english and it searches across every app, folder, email, and slack message you've ever" / X]]
|
||||
:PROPERTIES:
|
||||
:TITLE: GREG ISENBERG on X: "agreed that the the modern computer probably has to be reinvented 12 "tiny" startup ideas that ride that wave: 1. a "where did I put that" app. you describe what you're looking for in plain english and it searches across every app, folder, email, and slack message you've ever" / X
|
||||
:URI: https://x.com/i/status/2048381278953603406
|
||||
:CREATED: [2026-04-27 Mon 09:24]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/iptv-org/awesome-iptv][iptv-org/awesome-iptv: A curated list of resources related to IPTV]]
|
||||
:PROPERTIES:
|
||||
:TITLE: iptv-org/awesome-iptv: A curated list of resources related to IPTV
|
||||
:URI: https://github.com/iptv-org/awesome-iptv
|
||||
:CREATED: [2026-04-27 Mon 09:24]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/iptv-org/iptv][iptv-org/iptv: Collection of publicly available IPTV channels from all over the world]]
|
||||
:PROPERTIES:
|
||||
:TITLE: iptv-org/iptv: Collection of publicly available IPTV channels from all over the world
|
||||
:URI: https://github.com/iptv-org/iptv
|
||||
:CREATED: [2026-04-27 Mon 09:25]
|
||||
:END:
|
||||
|
||||
* [[https://github.com/iptv-org/epg][iptv-org/epg: Utilities for downloading the EPG (Electronic Program Guide) for thousands of TV channels from hundreds of sources.]]
|
||||
:PROPERTIES:
|
||||
:TITLE: iptv-org/epg: Utilities for downloading the EPG (Electronic Program Guide) for thousands of TV channels from hundreds of sources.
|
||||
:URI: https://github.com/iptv-org/epg
|
||||
:CREATED: [2026-04-27 Mon 09:25]
|
||||
:END:
|
||||
|
||||
|
||||
BIN
inbox/2512.24601v2.pdf
Normal file
BIN
inbox/2602.22302v1.pdf
Normal file
BIN
inbox/paper.pdf
Normal file
BIN
inbox/von_Neumann_1955.pdf
Normal file
@@ -12,9 +12,9 @@
|
||||
- *Solution:* The *Org-Native Skill Standard*. Skills are written entirely as `.org` files. The daemon parses the Org file at startup, extracts `#+begin_src lisp` blocks containing triggers, neuro-prompts, and symbolic verification rules, and dynamically compiles them into the live system using `eval` and `read`.
|
||||
- *Heuristic:* The Core is strictly the PTA loop (`core.lisp`, `neuro.lisp`, `symbolic.lisp`). ALL business logic, API connectors, and rule sets MUST live as `.org` files in the `skills/` directory.
|
||||
|
||||
** [2026-03-23] Cognitive Loop Architecture (org-agent)
|
||||
** [2026-03-23] Cognitive Cycle Architecture (opencortex)
|
||||
- *Problem:* Monolithic PTA (Perceive-Think-Act) loops lead to "Neural Drift" where the LLM's unverified suggestions can cause illegal system states or security breaches.
|
||||
- *Solution:* Implement the *Four-Stage Cognitive Loop*: Perceive -> Think -> Decide -> Act.
|
||||
- *Solution:* Implement the *Four-Stage Cognitive Cycle*: Perceive -> Think -> Decide -> Act.
|
||||
- *Heuristic:* Probabilistic Engine (Neural/LLM) is a proposal engine only. Deterministic Engine (Symbolic/Lisp) is the absolute gatekeeper.
|
||||
- *Verification:* Never execute an action unless it has passed through `decide()` and been verified against the symbolic Object Store (CLOSOS).
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ Define the requirements for modular, open-source, and intelligent home hardware.
|
||||
** 2. User Needs
|
||||
- *Physical Modularity:* Easy replacement and upgrade of mechanical and electrical components.
|
||||
- *Smart Interfacing:* ESP32-based control boards for connectivity.
|
||||
- *Multimodal Control:* Support for smartphone apps, physical modular controllers, and direct `org-agent` AI interaction.
|
||||
- *Multimodal Control:* Support for smartphone apps, physical modular controllers, and direct `opencortex` AI interaction.
|
||||
- *Sustainability:* Design for longevity, repairability, and efficient power management (inspired by Slate principles).
|
||||
|
||||
** 3. Success Criteria
|
||||
|
||||
@@ -20,7 +20,7 @@ Define the requirements for a modular, user-serviceable, and aesthetically pleas
|
||||
|
||||
** 2. User Needs
|
||||
- *Modularity:* Unified backplane for swappable compute, storage, and power modules.
|
||||
- *Sovereignty:* Full control over hardware and the software stack (running `org-agent`).
|
||||
- *Sovereignty:* Full control over hardware and the software stack (running `opencortex`).
|
||||
- *Aesthetics:* Sleek "Hi-Fi" industrial design.
|
||||
- *Multimodality:* Integration of SDR, AV, and specialized processors.
|
||||
|
||||
|
||||
@@ -1,166 +0,0 @@
|
||||
#+TITLE: AUDIT: V1.0 Comprehensive Core Skill Audit
|
||||
#+AUTHOR: Gemini CLI (Agent)
|
||||
#+DATE: [2026-04-09 Thu]
|
||||
#+FILETAGS: :audit:kernel:psf:
|
||||
#+STARTUP: overview
|
||||
|
||||
* Overview
|
||||
This audit systematically reviews the 39 core skills of the Org-Agent for compliance with the V1.0 standards:
|
||||
1. **Safety:** Prevention of code injection, proper sandboxing, and actuator safety.
|
||||
2. **Merkle-Tree Integration:** Proper use of the native Lisp Merkle-Tree versioning for undo/rollback.
|
||||
3. **Core Invariants:** Adherence to Sovereignty, Mastery, Zero-Bloat, Transparency, and Sustainability.
|
||||
|
||||
* Audit Progress [6/28]
|
||||
** DONE org-skill-agent.org [X]
|
||||
- COMPLIANT: Correctly defines and enforces Core Invariants.
|
||||
- SAFETY: High. Implements baseline symbolic gating.
|
||||
- MERKLE: N/A (Read-only/Policy only).
|
||||
** DONE org-skill-llm-gateway.org [X]
|
||||
- COMPLIANT: Consolidates 6 providers into a single high-integrity gate.
|
||||
- SAFETY: HIGH. Fixed URL key leaks, standardized headers, and centralized credential masking.
|
||||
- MERKLE: N/A (Stateless dispatch).
|
||||
** DONE org-skill-credentials-vault.org [X]
|
||||
- COMPLIANT: Unified high-security enclave for API keys and cookies.
|
||||
- SAFETY: HIGH. Mandatory credential masking in logs and secure Object Store persistence.
|
||||
- MERKLE: COMPLIANT. Setting secrets triggers Merkle snapshots.
|
||||
** DONE org-skill-homoiconic-memory.org [X]
|
||||
- COMPLIANT: Unified grammar, bridge, and normalization.
|
||||
- SAFETY: HIGH. recursive AST walker for ID injection and structural validation.
|
||||
- MERKLE: COMPLIANT. Normalization occurs during ingest/save, which are Merkle-versioned events.
|
||||
** DONE org-skill-state-persistence.org [X]
|
||||
- COMPLIANT: Unified local SBCL image dumps with decentralized IPFS checkpointing.
|
||||
- SAFETY: HIGH. Implements safe restoration paths and credential masking.
|
||||
- MERKLE: COMPLIANT. This is the primary persistence layer for the Merkle-Tree object store.
|
||||
** DONE org-skill-event-orchestrator.org [X]
|
||||
- COMPLIANT: Unified Cron, Hooks, and Routing into a single central control unit.
|
||||
- SAFETY: HIGH. Implements error isolation for automated tasks and hooks.
|
||||
- MERKLE: COMPLIANT. Registering hooks or tasks triggers Merkle snapshots.
|
||||
** DONE org-skill-cron.org [X] (CONSOLIDATED -> org-skill-event-orchestrator.org)
|
||||
** DONE org-skill-hook-manager.org [X] (CONSOLIDATED -> org-skill-event-orchestrator.org)
|
||||
** DONE org-skill-router.org [X] (CONSOLIDATED -> org-skill-event-orchestrator.org)
|
||||
** DONE org-skill-memory-archivist.org [X] (CONSOLIDATED -> org-skill-state-persistence.org)
|
||||
** DONE org-skill-object-store-persistence.org [X] (CONSOLIDATED -> org-skill-state-persistence.org)
|
||||
** DONE org-skill-ast-normalization.org [X] (CONSOLIDATED -> org-skill-homoiconic-memory.org)
|
||||
** DONE org-skill-org-json-bridge.org [X] (CONSOLIDATED -> org-skill-homoiconic-memory.org)
|
||||
** DONE org-skill-org-mode.org [X] (CONSOLIDATED -> org-skill-homoiconic-memory.org)
|
||||
** DONE org-skill-auth-api-key.org [X] (CONSOLIDATED -> org-skill-credentials-vault.org)
|
||||
** DONE org-skill-auth-google-oauth.org [X] (CONSOLIDATED -> org-skill-credentials-vault.org)
|
||||
** DONE org-skill-provider-anthropic.org [X] (CONSOLIDATED -> org-skill-llm-gateway.org)
|
||||
** DONE org-skill-provider-gemini.org [X] (CONSOLIDATED -> org-skill-llm-gateway.org)
|
||||
** DONE org-skill-provider-groq.org [X] (CONSOLIDATED -> org-skill-llm-gateway.org)
|
||||
** DONE org-skill-provider-ollama.org [X] (CONSOLIDATED -> org-skill-llm-gateway.org)
|
||||
** DONE org-skill-provider-openai.org [X] (CONSOLIDATED -> org-skill-llm-gateway.org)
|
||||
** DONE org-skill-provider-openrouter.org [X] (CONSOLIDATED -> org-skill-llm-gateway.org)
|
||||
** DONE org-skill-chaos.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Sovereignty Violation)
|
||||
- ISSUE: Lacks an "Active Production" gate to prevent accidental chaos during real work. No Merkle-Tree checkpoints before/after stress tests to allow for full-system rollback.
|
||||
- SAFETY: MEDIUM (Adversarial by design, but ungated).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-chat.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Technical Mastery Violation)
|
||||
- ISSUE: Uses `read-from-string` on unverified LLM output, risking reader macro injection. No Merkle-Tree integration for chat history persistence or rollbacks.
|
||||
- SAFETY: LOW (Vulnerable to injection).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-consensus.org [X]
|
||||
- STATUS: COMPLIANT (Consolidated -> Task Orchestrator)
|
||||
- SAFETY: HIGH. Verified via parallel multi-backend consensus in neuro.lisp.
|
||||
- MERKLE: COMPLIANT.
|
||||
** DONE org-skill-context-manager.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for context stack snapshots or rollbacks.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-delegation.org [X]
|
||||
- STATUS: COMPLIANT (Consolidated -> Task Orchestrator)
|
||||
- SAFETY: HIGH. Integrated consensus gate and delegation hooks in core.lisp.
|
||||
- MERKLE: COMPLIANT.
|
||||
** DONE org-skill-environment-config.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Technical Mastery Violation)
|
||||
- ISSUE: No validation or authorization gating for configuration changes. Direct hash-table modification skips the new Merkle-Tree versioning system in the Object Store.
|
||||
- SAFETY: MEDIUM (Risk of misconfiguration).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-formal-verification.org [X]
|
||||
- STATUS: COMPLIANT
|
||||
- ISSUE: Implemented Lisp-Native Symbolic Prover for security invariants.
|
||||
- SAFETY: HIGH. Implements path-confinement and no-network-exfil.
|
||||
- MERKLE: COMPLIANT.
|
||||
** DONE org-skill-function-calling.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording and rolling back tool-use history or state.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-inbound-gateway.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording and rolling back inbound message history or state.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-inbox-processor.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Technical Mastery Violation)
|
||||
- ISSUE: Physical move logic is a "Simulation". No implementation of actual file refactoring. No Merkle-Tree integration for recording or rolling back inbox-related state changes.
|
||||
- SAFETY: MEDIUM (Simulation only).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-latent-reflection.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Technical Mastery Violation)
|
||||
- ISSUE: No validation or authorization gating for reflected state changes. Random sampling is inefficient. No Merkle-Tree integration for recording or rolling back reflected state changes.
|
||||
- SAFETY: MEDIUM (Risk of unintended modifications).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-lisp-machine-bootstrap.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording or rolling back bootstrap-related state changes or ISA simulation history.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-log-aggregator.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording or rolling back log-related state changes or observability history.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-memex.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording or rolling back memex-related state changes or metadata audits.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-model-explorer.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code or blueprint. The skill is only a title and overview. No Merkle-Tree integration for model discovery or state changes.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-onboarding.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording or rolling back onboarding-related state changes or environment calibration.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-lisp-validator.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Technical Mastery Violation)
|
||||
- ISSUE: No validation or authorization gate for dynamic symbol registration. No Merkle-Tree integration for recording or rolling back safety-related state changes or verification history.
|
||||
- SAFETY: HIGH (The core of the system's safety).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-self-fix.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Technical Mastery Violation)
|
||||
- ISSUE: No validation or authorization gate for proposed self-fixes. Fixes are applied directly to files. No Merkle-Tree integration for recording or rolling back self-fix-related state changes or repair history.
|
||||
- SAFETY: LOW (Risk of unintended/malicious modifications).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-shell-actuator.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Sovereignty Violation)
|
||||
- ISSUE: No validation or authorization gate for synthesized script execution. Script synthesis bypasses the shell whitelist. No Merkle-Tree integration for recording or rolling back shell-related state changes or command history.
|
||||
- SAFETY: MEDIUM (Whitelisted, but script synthesis is a gap).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-sub-agent-manager.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording or rolling back sub-agent-related state changes or concurrent thoughts.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-task-integrity.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Critical Gap)
|
||||
- ISSUE: No implementation code in Phase D. The skill is only a blueprint. No Merkle-Tree integration for recording or rolling back task-related state changes or transition history.
|
||||
- SAFETY: N/A (Missing).
|
||||
- MERKLE: FAILED.
|
||||
** DONE org-skill-token-accountant.org [ ]
|
||||
- STATUS: NON-COMPLIANT (Safety/Sovereignty Violation)
|
||||
- ISSUE: Hot-patches the kernel's core variables (`*provider-cascade*`, `*model-selector-fn*`) directly, bypassing the skill registration system's safety. No Merkle-Tree integration for recording or rolling back provider-related state changes or pain history.
|
||||
- SAFETY: LOW (Direct kernel mutation).
|
||||
- MERKLE: FAILED.
|
||||
|
||||
* Findings Log
|
||||
| Skill | Issue | Priority | Status |
|
||||
|-------+-------+----------+--------|
|
||||
| | | | |
|
||||
@@ -1,32 +0,0 @@
|
||||
# Implementation Plan: Component IV - Peripheral Vision Extraction
|
||||
|
||||
## Objective
|
||||
Implement a sophisticated "Foveal-Peripheral" context model. This ensures the agent has high-resolution focus on the current task (Foveal) while maintaining a low-resolution "skeletal" awareness of the broader Memex structure (Peripheral), optimized for token efficiency and reasoning accuracy.
|
||||
|
||||
## Key Files & Context
|
||||
- **Target:** `projects/org-agent/literate/context.org` (Source of `src/context.lisp`)
|
||||
- **Core Concept:** Deep pruning of the Org AST based on semantic distance and structural hierarchy.
|
||||
|
||||
## Implementation Steps
|
||||
|
||||
### 1. Identify Foveal Focus
|
||||
- Extend the `SIGNAL` structure processing to identify a `target-id` (the current headline being operated on).
|
||||
|
||||
### 2. Implement Tree Pruning (`context-extract-peripheral-vision`)
|
||||
- Create a recursive function that walks the Object Store starting from the root (or active projects).
|
||||
- **Rule A (Foveal):** If the node matches `target-id`, include it and its immediate children in **Full Resolution** (Content + Attributes).
|
||||
- **Rule B (Peripheral):** For ancestors and siblings of the target, include only **Title and ID**.
|
||||
- **Rule C (Background):** For unrelated nodes, omit entirely or include only at Level 1.
|
||||
|
||||
### 3. AST to Org Renderer (`context-render-to-org`)
|
||||
- Implement a serializer that transforms our `org-object` structures back into valid Org-mode strings.
|
||||
- This allows the LLM to "see" the Memex in its native habitat.
|
||||
|
||||
### 4. Integrate with `context-assemble-global-awareness`
|
||||
- Update this function to use the new extraction and rendering logic.
|
||||
- Ensure it respects a maximum token/character budget to prevent context overflow.
|
||||
|
||||
## Phase E: Chaos (Verification)
|
||||
- **Structural Test:** Verify that ancestors are rendered as "skeletons" (no body text).
|
||||
- **Foveal Test:** Verify that the target node is rendered with its full body text.
|
||||
- **Budget Test:** Verify that the output string stays within defined limits even for large Memex structures.
|
||||
@@ -1,37 +0,0 @@
|
||||
# Implementation Plan: Reactive Signal Pipeline Refactor
|
||||
|
||||
## Objective
|
||||
Refactor the monolithic recursive `cognitive-loop` into a functional, gate-based `reactive-signal-pipeline`. This flattens the execution stack, enables multi-backend consensus, and improves observability according to Component VII of the evolutionary roadmap.
|
||||
|
||||
## Key Files & Context
|
||||
- **Target:** `projects/org-agent/literate/core.org` (Source of `src/core.lisp`)
|
||||
- **Architectural Reference:** `projects/org-agent/literate/evolution.org`
|
||||
|
||||
## Implementation Steps
|
||||
|
||||
### 1. Define the Signal Structure
|
||||
Transition from raw plists to a structured `:SIGNAL` format that tracks state as it moves through the pipeline.
|
||||
- Attributes: `:status`, `:payload`, `:context`, `:depth`, `:proposals`, `:reply-stream`.
|
||||
|
||||
### 2. Implement the Pipeline Gates
|
||||
Extract existing logic from `cognitive-loop` into discrete functional gates:
|
||||
- **`perceive-gate`**: Normalizes input, updates `*object-store*`.
|
||||
- **`neuro-gate`**: Invokes Probabilistic Engine. Support for future parallel backend calls.
|
||||
- **`consensus-gate`**: (New) Selects the best proposal from multiple backends (initially a pass-through for the single proposal).
|
||||
- **`decide-gate`**: Invokes Deterministic Engine safety checks.
|
||||
- **`dispatch-gate`**: Executes tools or physical actuators.
|
||||
|
||||
### 3. Implement the Pipeline Orchestrator (`process-signal`)
|
||||
Create a function that moves a signal through the sequence of gates.
|
||||
- **Flattening Recursion:** If `dispatch-gate` results in a tool output or error, it MUST NOT call the pipeline recursively. Instead, it returns a new `:SIGNAL` with `depth + 1`, which the orchestrator then re-injects into the top of the pipe via a loop or queue.
|
||||
|
||||
### 4. Refactor `inject-stimulus`
|
||||
Update `inject-stimulus` to initialize a Signal and hand it to the `process-signal` pipeline instead of `cognitive-loop`.
|
||||
|
||||
### 5. Cleanup
|
||||
Remove the obsolete `cognitive-loop` function and update `literate/core.org` documentation/diagrams to reflect the new architecture.
|
||||
|
||||
## Verification & Testing (Phase E: Chaos)
|
||||
- **Unit Tests:** Verify each gate function in isolation.
|
||||
- **Pipeline Test:** Simulate a complex multi-turn interaction (e.g., User Prompt -> Tool Call -> Tool Result -> LLM Final Answer) and ensure the stack depth remains flat.
|
||||
- **Immune System Test:** Verify that the depth limit (Max depth 10) still correctly terminates runaway loops.
|
||||
@@ -1,26 +0,0 @@
|
||||
#+title: Emacs Setup Improvement & Documentation Project
|
||||
#+author: Amero Garcia
|
||||
#+created: [2026-03-16 Mon 13:58]
|
||||
#+begin_comment
|
||||
This file outlines the project to collaboratively improve and document Amr's Emacs setup, aiming to make Emacs his primary computing tool.
|
||||
#+end_comment
|
||||
|
||||
* Emacs Setup Improvement & Documentation Project
|
||||
|
||||
*Goal:** To collaboratively improve and comprehensively document Amr's Emacs configuration, transitioning Emacs into his primary computing environment.
|
||||
|
||||
*Initial Scope:**
|
||||
- Reviewing the existing Emacs Org-mode configuration file (tangled to set up Emacs).
|
||||
- Identifying areas for optimization, new functionalities, and better integration with workflows.
|
||||
- Documenting each significant setting, function, and package.
|
||||
|
||||
*Information Needed from Amr:**
|
||||
- Location of the current Emacs Org-mode configuration file.
|
||||
- Key pain points or areas where Emacs currently falls short as a "main computing tool."
|
||||
- Specific desired functionalities or integrations (e.g., mail, calendar, task management, coding environments, note-taking, web browsing within Emacs).
|
||||
- Any existing documentation or design principles for the current setup.
|
||||
|
||||
*Next Steps:**
|
||||
1. Receive Emacs configuration file location from Amr.
|
||||
2. Analyze current setup.
|
||||
3. Propose documentation structure and initial improvements.
|
||||
@@ -1,27 +0,0 @@
|
||||
#+TITLE: Amr's Modular Emacs Configuration
|
||||
#+PROPERTY: header-args :tangle no ; This file is for loading other modules, not for tangling itself.
|
||||
|
||||
* Configuration Modules
|
||||
|
||||
This file loads the modular Emacs configuration files. It should be the primary way Emacs is configured, replacing or integrating with the original `~/.emacs`, `~/.emacs.d/init.el`, `~/.emacs.d/early-init.el`, and `~/.emacs.d/config.el`.
|
||||
|
||||
#+begin_src emacs-lisp :exports none
|
||||
;; Load early-init.el first, if it exists and is separate (though it's now part of emacs-early-init.org)
|
||||
;; (load-file (expand-file-name "emacs-early-init.org" (file-name-directory load-file-name)))
|
||||
|
||||
;; Load the core settings, including package management and essential setup.
|
||||
(org-babel-load-file (expand-file-name "emacs-core.org" (file-name-directory load-file-name)))
|
||||
|
||||
;; Load early init settings (if separate and not fully covered by core)
|
||||
(org-babel-load-file (expand-file-name "emacs-early-init.org" (file-name-directory load-file-name)))
|
||||
|
||||
;; Load other modules in a logical order
|
||||
(org-babel-load-file (expand-file-name "emacs-org.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-gtd.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-roam.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-writing.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-media.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-shell.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-ai.org" (file-name-directory load-file-name)))
|
||||
(org-babel-load-file (expand-file-name "emacs-misc.org" (file-name-directory load-file-name)))
|
||||
#+end_src
|
||||
@@ -1,104 +0,0 @@
|
||||
#+TITLE: AI Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* AI Settings
|
||||
|
||||
** Ellama
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
;; YOU DON'T NEED NONE OF THIS CODE FOR SIMPLE INSTALL
|
||||
;; IT IS AN EXAMPLE OF CUSTOMIZATION.
|
||||
(use-package ellama
|
||||
:init
|
||||
(require 'llm-openai)
|
||||
;; setup key bindings
|
||||
(setq ellama-keymap-prefix "C-c e")
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp ~/.emacs.d/custom.el :tangle no
|
||||
(setopt ellama-providers
|
||||
'(
|
||||
;; Ollama Provider (added here with a name)
|
||||
("ollama" . (make-llm-ollama
|
||||
;; Consider a dedicated embedding model if gemma isn't ideal for it.
|
||||
:chat-model "gemma3:latest"
|
||||
:embedding-model "gemma3:latest" ; Or e.g., "nomic-embed-text"
|
||||
:default-chat-non-standard-params '(("num_ctx" . 8192))))
|
||||
|
||||
("openai" . (make-llm-openai
|
||||
:key (auth-source-pass-get "api-key" "www/openai.com/amr@gharbeia.net")
|
||||
:chat-model "gpt-4o"
|
||||
:embedding-model "text-embedding-3-large"))
|
||||
|
||||
("groq" . (make-llm-openai-compatible
|
||||
:url "https://api.groq.com/openai/v1"
|
||||
:key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net")
|
||||
;; Check Groq console for available models, these might change
|
||||
:chat-model "llama3-70b-8192" ; Example, verify on Groq
|
||||
:embedding-model "llama3-70b-8192")) ; Groq might not offer dedicated embedding models via this API
|
||||
))
|
||||
|
||||
;; --- Set Active Providers ---
|
||||
;; Choose your default provider from the list above by its name
|
||||
(setopt ellama-provider "ollama") ; Or "ollama", "openai", "groq"
|
||||
|
||||
;; You can specify different providers for different tasks if needed
|
||||
(setopt ellama-translation-provider "ollama")
|
||||
(setopt ellama-naming-provider "ollama")
|
||||
(setopt ellama-naming-scheme 'ellama-generate-name-by-llm)
|
||||
|
||||
(setq llm-debug t)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package ellama
|
||||
:ensure t
|
||||
:bind ("C-c e" . ellama)
|
||||
;; send last message in chat buffer with C-c C-c
|
||||
:hook (org-ctrl-c-ctrl-c-final . ellama-chat-send-last-message)
|
||||
:init (setopt ellama-auto-scroll t)
|
||||
:config
|
||||
;; show ellama context in header line in all buffers
|
||||
(ellama-context-header-line-global-mode +1)
|
||||
;; show ellama session id in header line in all buffers
|
||||
(ellama-session-header-line-global-mode +1))
|
||||
#+end_src
|
||||
|
||||
** GPTel
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package gptel)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(setq gptel-api-key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net"))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(gptel-make-openai "Groq" ;Any name you want
|
||||
:host "api.groq.com"
|
||||
:endpoint "/openai/v1/chat/completions"
|
||||
:stream t
|
||||
:key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net") ;can be a function that returns the key
|
||||
:models '(llama-3.1-70b-versatile
|
||||
llama-3.1-8b-instant
|
||||
llama3-70b-8192
|
||||
llama3-8b-8192
|
||||
mixtral-8x7b-32768
|
||||
gemma-7b-it))
|
||||
#+end_src
|
||||
|
||||
** Elisa
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package elisa
|
||||
:init
|
||||
(setopt elisa-limit 5)
|
||||
(require 'llm-ollama)
|
||||
(setopt elisa-embeddings-provider (make-llm-ollama :embedding-model "nomic-embed-text"))
|
||||
(setopt elisa-chat-provider (make-llm-ollama
|
||||
:chat-model "sskostyaev/openchat:8k-rag"
|
||||
:embedding-model "nomic-embed-text"))
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,169 +0,0 @@
|
||||
#+TITLE: Core Emacs Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Front matter
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
;;; .emacs --- Global settings
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
|
||||
;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
;;; config.el --- Summary
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
|
||||
;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
;;; custom.el --- Summary
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
|
||||
;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
|
||||
* Garbage collector
|
||||
|
||||
Increase threshold to 500 MB to ease startup
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(setq gc-cons-threshold (* 500 1024 1024))
|
||||
#+end_src
|
||||
|
||||
Decrease threshold to 5 MB after init
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(add-hook 'after-init-hook (lambda () (setq gc-cons-threshold (* 5 1024 1024))))
|
||||
#+end_src
|
||||
|
||||
* Straight.el and use-package
|
||||
|
||||
Bootstrap Straight.el and install use-package
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(setq straight-repository-branch "develop") ;; Using develop branch temporarily to fix the org-roam-dailies issue.
|
||||
|
||||
(eval-and-compile
|
||||
(defvar bootstrap-version)
|
||||
(let ((bootstrap-file
|
||||
(expand-file-name "straight/repos/straight.el/bootstrap.el"
|
||||
(or (bound-and-true-p straight-base-dir)
|
||||
user-emacs-directory)))
|
||||
(bootstrap-version 7))
|
||||
(unless (file-exists-p bootstrap-file)
|
||||
(with-current-buffer
|
||||
(url-retrieve-synchronously "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" 'silent 'inhibit-cookies)
|
||||
(goto-char (point-max))
|
||||
(eval-print-last-sexp)))
|
||||
(load bootstrap-file nil 'nomessage))
|
||||
|
||||
(straight-use-package 'use-package)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Integrate use-package and straight
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(setq straight-use-package-by-default t)
|
||||
#+end_src
|
||||
|
||||
Make sure Org is installed (straight.el)
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(unless (file-directory-p "~/.emacs.d/straight/versions") (make-directory (concat user-emacs-directory "straight/versions")))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(use-package org)
|
||||
#+end_src
|
||||
|
||||
A use-package declaration for simplifying your .emacs
|
||||
#+begin_src elisp
|
||||
(require 'use-package)
|
||||
#+end_src
|
||||
|
||||
* Custom file
|
||||
|
||||
#+begin_src elisp
|
||||
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
|
||||
(when (file-exists-p custom-file) (load custom-file))
|
||||
#+end_src
|
||||
|
||||
* System information
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar my-laptop-p (equal (system-name) "lilitop"))
|
||||
(defvar my-server-p (and (equal (system-name) "localhost") (equal user-login-name "root")))
|
||||
(defvar my-phone-p (not (null (getenv "ANDROID_ROOT")))
|
||||
"If non-nil, GNU Emacs is running on Termux.")
|
||||
(when my-phone-p (defvar gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3"))
|
||||
(global-auto-revert-mode) ; simplifies syncing
|
||||
#+end_src
|
||||
|
||||
* Persistent history
|
||||
|
||||
#+begin_src elisp
|
||||
(savehist-mode)
|
||||
#+end_src
|
||||
|
||||
* Backup and versioning
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package magit
|
||||
:ensure t
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Personal information
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(setq user-full-name "Amr Gharbeia")
|
||||
(defvar email-address "amr@gharbeia.net")
|
||||
(defvar calendar-latitude 39.0)
|
||||
(defvar calendar-longitude -77.1)
|
||||
(defvar calendar-location-name "Washington, DC")
|
||||
(defvar calendar-time-zone -300)
|
||||
(defvar calendar-standard-time-zone-name "EST")
|
||||
(defvar calendar-daylight-time-zone-name "EDT")
|
||||
#+end_src
|
||||
|
||||
* Saving Emacs Sessions
|
||||
|
||||
Close frame when done
|
||||
#+begin_src elisp
|
||||
(add-hook 'server-done-hook (lambda () (delete-frame)))
|
||||
#+end_src
|
||||
|
||||
Save desktop session
|
||||
#+begin_src elisp
|
||||
(desktop-save-mode t)
|
||||
#+end_src
|
||||
|
||||
* Security
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package password-store)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package auth-source
|
||||
:config (auth-source-pass-enable)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* End matter
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
(provide '.emacs)
|
||||
;;; .emacs ends here
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(provide 'config)
|
||||
;;; config.el ends here
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(provide 'custom)
|
||||
;;; custom.el ends here
|
||||
#+end_src
|
||||
@@ -1,157 +0,0 @@
|
||||
#+TITLE: GTD & Agenda Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Agenda
|
||||
|
||||
Basic agenda settings
|
||||
#+begin_src elisp
|
||||
(setq org-deadline-warning-days 7)
|
||||
(setq org-agenda-skip-additional-timestamps-same-entry t)
|
||||
(setq org-agenda-span 'fortnight)
|
||||
(setq org-agenda-tags-column 'auto)
|
||||
(setq org-agenda-skip-scheduled-if-deadline-is-shown t)
|
||||
#+end_src
|
||||
|
||||
Agenda files
|
||||
#+begin_src elisp
|
||||
(setq org-agenda-files (list
|
||||
(concat org-directory "inbox.org")
|
||||
(concat org-directory "gtd.org")
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Better agenda views
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package org-super-agenda)
|
||||
#+end_src
|
||||
|
||||
* To-do
|
||||
|
||||
Basic todo
|
||||
#+begin_src elisp
|
||||
(setq org-todo-keywords
|
||||
'(
|
||||
(sequence "TODO(t)" "NEXT(n)" "WAIT(w@/!)" "|" "DONE(d!)" "CNCL(c@)")
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-todo-keyword-faces
|
||||
'(
|
||||
("TODO" :foreground "red" :weight bold)
|
||||
("NEXT" :foreground "red" :weight bold)
|
||||
("WAIT" :foreground "yellow" :weight bold)
|
||||
("DONE" :foreground "green" :weight bold)
|
||||
("CNCL" :foreground "blue" :weight bold)
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-enforce-todo-dependencies t)
|
||||
(setq org-tags-exclude-from-inheritance '("crypt" "!private"))
|
||||
#+end_src
|
||||
|
||||
Switch entry to 'DONE' when all subentries are done
|
||||
#+begin_src elisp
|
||||
(defun org-summary-todo (n-done n-not-done)
|
||||
"Switch entry to 'DONE' when all subentries are done, to 'TODO' otherwise.
|
||||
Uses N-DONE and N-NOT-DONE"
|
||||
(let (org-log-done org-log-states) ; turn off logging
|
||||
(org-todo (if (= n-not-done 0) "DONE" "TODO")
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(add-hook 'org-after-todo-statistics-hook #'org-summary-todo)
|
||||
#+end_src
|
||||
|
||||
* Getting Things Done (GTD)
|
||||
#+begin_src elisp
|
||||
(use-package org-gtd
|
||||
:defer t
|
||||
:init (setq org-gtd-update-ack "4.0.0")
|
||||
:after org
|
||||
:config
|
||||
(setq org-edna-use-inheritance t)
|
||||
(org-edna-mode)
|
||||
(setq org-gtd-keyword-mapping
|
||||
'((todo . "TODO")
|
||||
(next . "NEXT")
|
||||
(wait . "WAIT")
|
||||
(done . "DONE")
|
||||
(canceled . "CNCL")))
|
||||
(setq org-gtd-custom-node-paths
|
||||
'(("Actionable" . '("~/memex/gtd.org" "Actions"))
|
||||
("Incubate" . '("~/memex/gtd.org" "Incubate"))))
|
||||
(org-gtd-mode)
|
||||
:bind (
|
||||
("C-c d c" . org-gtd-capture)
|
||||
("C-c d e" . org-gtd-engage)
|
||||
("C-c d p" . org-gtd-process-inbox)
|
||||
:map org-gtd-clarify-map
|
||||
("C-c c" . org-gtd-organize)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-gtd-directory org-directory)
|
||||
(defvar org-gtd-organize-hooks '(org-gtd-set-area-of-focus org-set-tags-command))
|
||||
(defvar org-gtd-organize-hooks '(org-gtd-set-area-of-focus))
|
||||
(defvar org-gtd-areas-of-focus '(
|
||||
"Atoms"
|
||||
"Bits"
|
||||
"Cells"
|
||||
"Flags"
|
||||
"Business"
|
||||
"Wealth"
|
||||
"Learning"
|
||||
"Skills"
|
||||
"Privacy"
|
||||
"Archive"
|
||||
"Library"
|
||||
"Writing"
|
||||
"Health"
|
||||
"Home"
|
||||
"Family"
|
||||
"Social"
|
||||
"Egypt"
|
||||
)
|
||||
)
|
||||
(defvar org-gtd-clarify-show-horizons 'right)
|
||||
#+end_src
|
||||
|
||||
Logging
|
||||
#+begin_src elisp
|
||||
(setq org-log-into-drawer "LOGBOOK")
|
||||
#+end_src
|
||||
|
||||
Clocking work in drawer
|
||||
#+begin_src elisp :tangle no
|
||||
(setq org-clock-into-drawer t)
|
||||
#+end_src
|
||||
|
||||
Habits
|
||||
#+begin_src elisp :tangle no
|
||||
(setq org-habit-graph-column 80)
|
||||
(setq org-habit-show-habits-only-for-today nil)
|
||||
#+end_src
|
||||
|
||||
* Refile
|
||||
|
||||
org-refile targets
|
||||
#+begin_src elisp
|
||||
(setq org-refile-targets '((nil :maxlevel . 9)
|
||||
(org-agenda-files :maxlevel . 9)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Set type of refile targets completion
|
||||
#+begin_src elisp
|
||||
(setq org-outline-path-complete-in-steps nil)
|
||||
#+end_src
|
||||
|
||||
Allow refiling to new parents created on the go after confirmation
|
||||
#+begin_src elisp
|
||||
(setq org-refile-allow-creating-parent-nodes 'confirm)
|
||||
#+end_src
|
||||
@@ -1,175 +0,0 @@
|
||||
#+TITLE: Media and Books Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Read ebooks (calibredb)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package calibredb
|
||||
:defer t
|
||||
:config
|
||||
(setq calibredb-format-all-the-icons t)
|
||||
(setq calibredb-format-icons-in-terminal t)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
;; Forcefully reset the variable after loading calibredb
|
||||
(defvar calibredb-root-dir (concat (getenv "HOME") "/library/books"))
|
||||
(defvar calibredb-db-dir (expand-file-name "metadata.db" calibredb-root-dir))
|
||||
; (defvar calibredb-library-alist (concat (getenv "HOME") "/library/books"))
|
||||
;; (defvar calibredb-search-page-max-rows 1000)
|
||||
(defvar calibredb-id-width 6)
|
||||
(defvar calibredb-title-width 100)
|
||||
(defvar calibredb-format-width 0)
|
||||
(defvar calibredb-date-width 0)
|
||||
(defvar calibredb-author-width 20)
|
||||
(defvar calibredb-comment-width 0)
|
||||
(defvar calibredb-tag-width 0)
|
||||
#+end_src
|
||||
|
||||
Some keybindings
|
||||
|
||||
#+begin_src elisp ~/.emacs.d/custom.el
|
||||
(defvar calibredb-show-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map "?" #'calibredb-entry-dispatch)
|
||||
(define-key map "o" #'calibredb-find-file)
|
||||
(define-key map "O" #'calibredb-find-file-other-frame)
|
||||
(define-key map "V" #'calibredb-open-file-with-default-tool)
|
||||
(define-key map "s" #'calibredb-set-metadata-dispatch)
|
||||
(define-key map "e" #'calibredb-export-dispatch)
|
||||
(define-key map "q" #'calibredb-entry-quit)
|
||||
(define-key map "y" #'calibredb-yank-dispatch)
|
||||
(define-key map "," #'calibredb-quick-look)
|
||||
(define-key map "." #'calibredb-dired-open)
|
||||
(define-key map "\M-/" #'calibredb-rga)
|
||||
(define-key map "\M-t" #'calibredb-set-metadata--tags)
|
||||
(define-key map "\M-a" #'calibredb-set-metadata--author_sort)
|
||||
(define-key map "\M-A" #'calibredb-set-metadata--authors)
|
||||
(define-key map "\M-T" #'calibredb-set-metadata--title)
|
||||
(define-key map "\M-c" #'calibredb-set-metadata--comments)
|
||||
map)
|
||||
"Keymap for `calibredb-show-mode'.")
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar calibredb-search-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map [mouse-3] #'calibredb-search-mouse)
|
||||
(define-key map (kbd "<RET>") #'calibredb-find-file)
|
||||
(define-key map "?" #'calibredb-dispatch)
|
||||
(define-key map "a" #'calibredb-add)
|
||||
(define-key map "A" #'calibredb-add-dir)
|
||||
(define-key map "c" #'calibredb-clone)
|
||||
(define-key map "d" #'calibredb-remove)
|
||||
(define-key map "D" #'calibredb-remove-marked-items)
|
||||
(define-key map "j" #'calibredb-next-entry)
|
||||
(define-key map "k" #'calibredb-previous-entry)
|
||||
(define-key map "l" #'calibredb-virtual-library-list)
|
||||
(define-key map "L" #'calibredb-library-list)
|
||||
(define-key map "n" #'calibredb-virtual-library-next)
|
||||
(define-key map "N" #'calibredb-library-next)
|
||||
(define-key map "p" #'calibredb-virtual-library-previous)
|
||||
(define-key map "P" #'calibredb-library-previous)
|
||||
(define-key map "s" #'calibredb-set-metadata-dispatch)
|
||||
(define-key map "S" #'calibredb-switch-library)
|
||||
(define-key map "o" #'calibredb-find-file)
|
||||
(define-key map "O" #'calibredb-find-file-other-frame)
|
||||
(define-key map "v" #'calibredb-view)
|
||||
(define-key map "V" #'calibredb-open-file-with-default-tool)
|
||||
(define-key map "," #'calibredb-quick-look)
|
||||
(define-key map "." #'calibredb-dired-open)
|
||||
(define-key map "y" #'calibredb-yank-dispatch)
|
||||
(define-key map "b" #'calibredb-catalog-bib-dispatch)
|
||||
(define-key map "e" #'calibredb-export-dispatch)
|
||||
(define-key map "r" #'calibredb-search-refresh-and-clear-filter)
|
||||
(define-key map "R" #'calibredb-search-clear-filter)
|
||||
(define-key map "q" #'calibredb-search-quit)
|
||||
(define-key map "m" #'calibredb-mark-and-forward)
|
||||
(define-key map "f" #'calibredb-toggle-favorite-at-point)
|
||||
(define-key map "x" #'calibredb-toggle-archive-at-point)
|
||||
(define-key map "h" #'calibredb-toggle-highlight-at-point)
|
||||
(define-key map "u" #'calibredb-unmark-and-forward)
|
||||
(define-key map "i" #'calibredb-edit-annotation)
|
||||
(define-key map (kbd "<DEL>") #'calibredb-unmark-and-backward)
|
||||
(define-key map (kbd "<backtab>") #'calibredb-toggle-view)
|
||||
(define-key map (kbd "TAB") #'calibredb-toggle-view-at-point)
|
||||
(define-key map "\M-n" #'calibredb-show-next-entry)
|
||||
(define-key map "\M-p" #'calibredb-show-previous-entry)
|
||||
(define-key map "/" #'calibredb-search-live-filter)
|
||||
(define-key map "\M-t" #'calibredb-set-metadata--tags)
|
||||
(define-key map "\M-a" #'calibredb-set-metadata--author_sort)
|
||||
(define-key map "\M-A" #'calibredb-set-metadata--authors)
|
||||
(define-key map "\M-T" #'calibredb-set-metadata--title)
|
||||
(define-key map "\M-c" #'calibredb-set-metadata--comments)
|
||||
map)
|
||||
"Keymap for `calibredb-search-mode'.")
|
||||
#+end_src
|
||||
|
||||
* Annotate PDFs and EPUBs (org-noter)
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package org-noter)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar org-noter-notes-search-path (list (concat org-directory "/library/books")))
|
||||
(defvar org-noter-default-notes-file-names '("books.org"))
|
||||
#+end_src
|
||||
|
||||
* Link PDFs (org-noter-pdftools)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-noter-pdftools
|
||||
:after org-noter
|
||||
:config
|
||||
;; Add a function to ensure precise note is inserted
|
||||
(defun org-noter-pdftools-insert-precise-note (&optional toggle-no-questions)
|
||||
(interactive "P")
|
||||
(org-noter--with-valid-session
|
||||
(let ((org-noter-insert-note-no-questions (if toggle-no-questions
|
||||
(not org-noter-insert-note-no-questions)
|
||||
org-noter-insert-note-no-questions))
|
||||
(org-pdftools-use-isearch-link t)
|
||||
(org-pdftools-use-freepointer-annot t))
|
||||
(org-noter-insert-note (org-noter--get-precise-info)))))
|
||||
|
||||
;; fix https://github.com/weirdNox/org-noter/pull/93/commits/f8349ae7575e599f375de1be6be2d0d5de4e6cbf
|
||||
(defun org-noter-set-start-location (&optional arg)
|
||||
"When opening a session with this document, go to the current location.
|
||||
With a prefix ARG, remove start location."
|
||||
(interactive "P")
|
||||
(org-noter--with-valid-session
|
||||
(let ((inhibit-read-only t)
|
||||
(ast (org-noter--parse-root))
|
||||
(location (org-noter--doc-approx-location (when (called-interactively-p 'any) 'interactive))))
|
||||
(with-current-buffer (org-noter--session-notes-buffer session)
|
||||
(org-with-wide-buffer
|
||||
(goto-char (org-element-property :begin ast))
|
||||
(if arg
|
||||
(org-entry-delete nil org-noter-property-note-location)
|
||||
(org-entry-put nil org-noter-property-note-location
|
||||
(org-noter--pretty-print-location location))))))))
|
||||
(with-eval-after-load 'pdf-annot
|
||||
(add-hook 'pdf-annot-activate-handler-functions #'org-noter-pdftools-jump-to-note)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* View EPUBs (nov.el)
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package nov
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Zotero (helm-bibtex)
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package helm-bibtex)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar bibtex-completion-bibliography '("~/bibliography/zotero.bib"))
|
||||
#+end_src
|
||||
@@ -1,46 +0,0 @@
|
||||
#+TITLE: Miscellaneous Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Browser (eww)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package eww
|
||||
:bind* (("M-m g x" . eww)
|
||||
("M-m g :" . eww-browse-with-external-browser)
|
||||
("M-m g #" . eww-list-histories)
|
||||
("M-m g {" . eww-back-url)
|
||||
("M-m g }" . eww-forward-url))
|
||||
:config
|
||||
(progn
|
||||
(add-hook 'eww-mode-hook 'visual-line-mode)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Manage Docker in Emacs
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package docker
|
||||
:bind ("C-c d" . docker)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Periodic table of the elements
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package chemtable)
|
||||
#+end_src
|
||||
|
||||
* Accounting (beancount)
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package beancount
|
||||
:straight (beancount :type git :host github :repo "beancount/beancount-mode")
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.beancount\\'" . beancount-mode))
|
||||
(add-hook 'beancount-mode-hook #'outline-minor-mode)
|
||||
(define-key beancount-mode-map (kbd "C-c C-n") #'outline-next-visible-heading)
|
||||
(define-key beancount-mode-map (kbd "C-c C-p") #'outline-previous-visible-heading)
|
||||
(add-hook 'beancount-mode-hook #'flymake-bean-check-enable)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,233 +0,0 @@
|
||||
#+TITLE: Org Mode Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Org Mode
|
||||
|
||||
** Basic setup
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org
|
||||
:config
|
||||
(defvar org-outline-path-complete-in-steps nil)
|
||||
:bind (("C-c l" . org-store-link)
|
||||
("C-c a" . org-agenda)
|
||||
("C-c c" . org-capture)
|
||||
:map org-mode-map)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-directory (concat (getenv "HOME") "/memex/"))
|
||||
#+end_src
|
||||
|
||||
** Looks
|
||||
|
||||
Basic
|
||||
#+begin_src elisp
|
||||
(defvar org-pretty-entities t) ; Improve org mode looks
|
||||
(defvar org-hide-emphasis-markers t) ; Hide emphasis markup
|
||||
(defvar org-num-mode nil)
|
||||
(defvar org-startup-folded 'shw2levels)
|
||||
#+end_src
|
||||
|
||||
Indentation of headers
|
||||
#+begin_src elisp
|
||||
(defvar org-startup-indented t) ; Indent org heirarchy
|
||||
(defvar org-adapt-indentation t)
|
||||
(defvar org-hide-leading-stars t) ; Minimal Outline
|
||||
(defvar org-odd-levels-only nil)
|
||||
#+end_src
|
||||
|
||||
Indentation of lists
|
||||
#+begin_src elisp
|
||||
(setq org-list-demote-modify-bullet t)
|
||||
#+end_src
|
||||
|
||||
Org-modern
|
||||
#+begin_src elisp
|
||||
(use-package org-modern
|
||||
:ensure t
|
||||
:config
|
||||
;; Choose some fonts
|
||||
(set-face-attribute 'default nil :family "sans-serif")
|
||||
(set-face-attribute 'variable-pitch nil :family "sans-serif")
|
||||
(set-face-attribute 'org-modern-symbol nil :family "Iosevka")
|
||||
|
||||
;; Edit settings
|
||||
(defvar org-auto-align-tags nil)
|
||||
(defvar org-tags-column 0)
|
||||
(defvar org-catch-invisible-edits 'show-and-error)
|
||||
(defvar org-special-ctrl-a/e t)
|
||||
(defvar org-insert-heading-respect-content t)
|
||||
|
||||
;; Org styling, hide markup etc.
|
||||
(defvar org-hide-emphasis-markers t)
|
||||
(defvar org-pretty-entities t)
|
||||
|
||||
;; Agenda styling
|
||||
(defvar org-agenda-tags-column 0)
|
||||
(defvar org-agenda-block-separator ?─)
|
||||
(defvar org-agenda-time-grid
|
||||
'((daily today require-timed)
|
||||
(800 1000 1200 1400 1600 1800 2000)
|
||||
" ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄"))
|
||||
(defvar org-agenda-current-time-string
|
||||
"◀── now ─────────────────────────────────────────────────")
|
||||
|
||||
;; Ellipsis styling
|
||||
(defvar org-ellipsis "…")
|
||||
(set-face-attribute 'org-ellipsis nil :inherit 'default :box nil)
|
||||
|
||||
(global-org-modern-mode)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Highlight Sourcecode Syntax
|
||||
#+begin_src elisp
|
||||
(setq org-src-fontify-natively t)
|
||||
(setq org-src-tab-acts-natively t)
|
||||
#+end_src
|
||||
|
||||
Images
|
||||
#+begin_src elisp
|
||||
(setq org-startup-with-inline-images t)
|
||||
(setq org-image-actual-width '(300))
|
||||
#+end_src
|
||||
|
||||
** Capture
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-default-notes-file (concat org-directory "inbox.org"))
|
||||
#+end_src
|
||||
|
||||
*** Org-protocol
|
||||
|
||||
Linux configuration
|
||||
#+begin_src bash :tangle no
|
||||
[Desktop Entry]
|
||||
Name=org-protocol
|
||||
Comment=Intercept calls from emacsclient to trigger custom actions
|
||||
Categories=Other;
|
||||
Keywords=org-protocol;
|
||||
Icon=emacs
|
||||
Type=Application
|
||||
Exec=emacsclient -- %u
|
||||
Terminal=false
|
||||
StartupWMClass=Emacs
|
||||
MimeType=x-scheme-handler/org-protocol;
|
||||
#+end_src
|
||||
|
||||
#+begin_src bash :tangle no
|
||||
update-desktop-database ~/.local/share/applications/
|
||||
#+end_src
|
||||
|
||||
Basic configuration
|
||||
#+begin_src elisp
|
||||
(require 'org-protocol)
|
||||
(setq org-protocol-default-buffer-for-file-links "*scratch*") ; fixes 'no buffers remain to edit error for org-protocol capturer
|
||||
#+end_src
|
||||
|
||||
Org-protocol templates
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar org-capture-templates '(
|
||||
("p" "Protocol"
|
||||
entry
|
||||
(file "inbox.org")
|
||||
"* %^{Title}\nSource: %u, %c\n #+BEGIN_QUOTE\n%i\n#+END_QUOTE\n\n\n%?"
|
||||
)
|
||||
("L" "Protocol Link"
|
||||
entry
|
||||
(file "inbox.org")
|
||||
"* %? [[%:link][%:description]]\n:PROPERTIES:\n:TITLE: %:description\n:URI: %:link\n:CREATED: %U\n:END:"
|
||||
:prepend nil
|
||||
:empty-lines 1
|
||||
:created t
|
||||
:kill-buffer t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-protocol-default-template-key "L")
|
||||
#+end_src
|
||||
|
||||
Convert Orgzly captures to org-protocol captures standard
|
||||
#+begin_src elisp
|
||||
(defun my/org-convert-orgzly-to-org-protocol ()
|
||||
"Reformat Orgzly bookmark at point to org-protocol bookmark."
|
||||
(interactive)
|
||||
(when (org-at-heading-p)
|
||||
(let ((headline (nth 4 (org-heading-components))))
|
||||
;; Find and store the link. Delete the link line.
|
||||
(search-forward-regexp "^https?://\\S-*" nil t)
|
||||
(let ((link (match-string 0)))
|
||||
(beginning-of-line)
|
||||
(kill-line)
|
||||
;; Delete any trailing blank spaces
|
||||
(org-back-to-heading)
|
||||
(end-of-line)
|
||||
(when (not (org-on-heading-p))
|
||||
(delete-char 1)
|
||||
)
|
||||
;; Set new headline
|
||||
(goto-char (org-entry-beginning-position))
|
||||
(org-edit-headline (format "[[%s][%s]]" link headline))
|
||||
;; Set new properties
|
||||
(org-set-property "TITLE" headline)
|
||||
(org-set-property "URI" link)
|
||||
(message "Reformatted Orgzly bookmark at point to org-protocol bookmark")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Exporting
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(setq org-export-with-smart-quotes t)
|
||||
(setq org-export-backends '(beamer html latex md))
|
||||
#+end_src
|
||||
|
||||
Export to EPUB
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package ox-epub)
|
||||
#+end_src
|
||||
|
||||
** org-attach
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-attach-id-dir (concat org-directory "/library"))
|
||||
#+end_src
|
||||
|
||||
** Enable shell scripting support in org-babel
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-babel-do-load-languages 'org-babel-load-languages '((shell . t)))
|
||||
#+end_src
|
||||
|
||||
** Insert org-mode links from clipboard
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package org-cliplink
|
||||
:bind
|
||||
(("C-x p i" . org-cliplink))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Deft
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package deft
|
||||
:commands (deft)
|
||||
:init
|
||||
(defvar deft-extensions '("org"))
|
||||
(defvar deft-recursive nil)
|
||||
(defvar deft-use-filename-as-title t)
|
||||
:config
|
||||
(defvar deft-directory org-directory)
|
||||
(defvar deft-recursive t)
|
||||
(defvar deft-strip-summary-regexp ":PROPERTIES:\n\\(.+\n\\)+:END:\n")
|
||||
(defvar deft-use-filename-as-title t)
|
||||
:bind ("C-c n d" . deft)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,140 +0,0 @@
|
||||
#+TITLE: Org-Roam Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Org-roam
|
||||
|
||||
** Basic org-roam setup
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-roam
|
||||
:init (setq org-roam-v2-ack t) ;; Acknowledge V2 upgrade
|
||||
:after org
|
||||
:config
|
||||
(org-roam-db-autosync-enable)
|
||||
(require 'org-roam-dailies)
|
||||
:bind (
|
||||
("C-c n f" . org-roam-node-find)
|
||||
("C-c n g" . org-roam-graph)
|
||||
("C-c n r" . org-roam-node-random)
|
||||
("C-c n h" . org-roam-node-convert-headline)
|
||||
("C-c n i" . org-roam-node-insert)
|
||||
("C-c n o" . org-id-get-create)
|
||||
("C-c n t" . org-roam-tag-add)
|
||||
("C-c n a" . org-roam-alias-add)
|
||||
("C-c n l" . org-roam-buffer-display-dedicated)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-roam-directory (concat org-directory "notes"))
|
||||
(setq org-roam-dailies-directory (concat org-directory "daily"))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package sqlite3)
|
||||
(require 'sqlite3)
|
||||
#+end_src
|
||||
|
||||
Include subdirectories in org-roam
|
||||
#+begin_src elisp
|
||||
(setq org-roam-file-exclude-regexp "^[.][.]?/")
|
||||
#+end_src
|
||||
|
||||
** Display in org-roam-buffer
|
||||
#+begin_src elisp :tangle no
|
||||
(setq org-roam-mode-sections
|
||||
(list #'org-roam-backlinks-section
|
||||
#'org-roam-reflinks-section
|
||||
#'org-roam-unlinked-references-section
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Filter org-roam nodes find by tag
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(defun my/org-roam-node-has-tag (node tag)
|
||||
"Filter function to check if the given NODE has the specified TAG."
|
||||
(member tag (org-roam-node-tags node))
|
||||
)
|
||||
|
||||
(defun my/org-roam-node-find-by-tag ()
|
||||
"Find and open an Org-roam node based on a specified tag."
|
||||
(interactive)
|
||||
(let ((tag (read-string "Enter tag: ")))
|
||||
(org-roam-node-find nil nil (lambda (node) (my/org-roam-node-has-tag node tag))))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** org-roam-capture templates
|
||||
#+begin_src elisp
|
||||
(setq org-roam-capture-templates
|
||||
'(
|
||||
("L" "link" plain
|
||||
(function org-roam--capture-get-point)
|
||||
"%?"
|
||||
:file-name "web/%<%Y-%m-%dT%H%M%S>.org"
|
||||
:head "#+TITLE: ${title}\n#+CREATED: %<%Y-%m-%dT%H%M%S>"
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
|
||||
("h" "hugo post" plain
|
||||
"%?"
|
||||
:target (file+head "posts/${slug}.org"
|
||||
"#+TITLE: ${title}\n#+DATE: %U\n#+HUGO_BASE_DIR: ~/gharbeia.net\n#+HUGO_SECTION: ./posts\n#+HUGO_AUTO_SET_LASTMOD: t\n#+HUGO_TAGS: article\n#+HUGO_DRAFT: true\n")
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
|
||||
("p" "person" plain
|
||||
"%?"
|
||||
:if-new (file+head "people/${slug}.org"
|
||||
"#+TITLE: ${title}")
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-roam-dailies-capture-templates
|
||||
'(
|
||||
("d" "daily" plain
|
||||
""
|
||||
:target ("file+heaed %<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n\n")
|
||||
:immediate-finish t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Move org header to org-roam-daily
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(defun my/org-move-entry-to-daily-notes ()
|
||||
"Move the current org-mode headline to the daily notes file based on its :CREATED: property."
|
||||
(interactive)
|
||||
(let*
|
||||
(
|
||||
(created-prop (org-entry-get nil "CREATED"))
|
||||
(created-date (when created-prop
|
||||
(org-parse-time-string created-prop)))
|
||||
(year (nth 5 created-date)) ; Extract year (6th element)
|
||||
(month (nth 4 created-date)) ; Extract month (5th element)
|
||||
(day (nth 3 created-date)) ; Extract day (4th element)
|
||||
(target-date (format "%04d-%02d-%02d" year month day)) ; Format date string
|
||||
(target-file (org-roam-dailies-goto target-date))
|
||||
)
|
||||
(when target-file
|
||||
(org-cut-subtree)
|
||||
(find-file target-file)
|
||||
(goto-char (point-max))
|
||||
(unless (bolp) (newline))
|
||||
(org-paste-subtree)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,73 +0,0 @@
|
||||
#+TITLE: Shell Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Shell
|
||||
|
||||
** Bash completion
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package bash-completion
|
||||
:config
|
||||
(require 'bash-completion)
|
||||
(bash-completion-setup)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar shell-dynamic-complete-functions t)
|
||||
#+end_src
|
||||
|
||||
** Eshell
|
||||
|
||||
Add programmable bash completion to Emacs shell-mode
|
||||
#+begin_src elisp :tangle no
|
||||
(require 'bash-completion)
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(add-hook 'completion-at-point-functions
|
||||
'bash-completion-capf-nonexclusive nil t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Use colors in eshell
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package xterm-color
|
||||
:commands (xterm-color-filter)
|
||||
)
|
||||
|
||||
(use-package eshell
|
||||
:after xterm-color
|
||||
:config
|
||||
(define-key eshell-hist-mode-map (kbd "M-r") #'consult-history)
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(setenv "TERM" "xterm-256color")))
|
||||
(add-hook 'eshell-before-prompt-hook (setq xterm-color-preserve-properties t))
|
||||
(add-to-list 'eshell-preoutput-filter-functions 'xterm-color-filter)
|
||||
(setq eshell-output-filter-functions
|
||||
(remove 'eshell-handle-ansi-color eshell-output-filter-functions)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Eshell completion
|
||||
#+begin_src elisp :tangle no
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(add-hook 'completion-at-point-functions
|
||||
'bash-completion-capf-nonexclusive nil t)))
|
||||
#+end_src
|
||||
|
||||
Emulate A Terminal (EAT)
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package eat
|
||||
:config
|
||||
;; For `eat-eshell-mode'.
|
||||
(add-hook 'eshell-load-hook #'eat-eshell-mode)
|
||||
|
||||
;; For `eat-eshell-visual-command-mode'.
|
||||
(add-hook 'eshell-load-hook #'eat-eshell-visual-command-mode)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,255 +0,0 @@
|
||||
#+TITLE: Reading and Writing Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/config.el
|
||||
|
||||
* Text and Case
|
||||
|
||||
** Convert DOuble capitals to single capitals
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(defun my/dcaps-to-scaps ()
|
||||
"Convert word in DOuble CApitals to Single Capitals."
|
||||
(interactive)
|
||||
(and (= ?w (char-syntax (char-before)))
|
||||
(save-excursion
|
||||
(and (if (called-interactively-p)
|
||||
(skip-syntax-backward "w")
|
||||
(= -3 (skip-syntax-backward "w"))
|
||||
)
|
||||
(let (case-fold-search)
|
||||
(looking-at "\\b[[:upper:]]\\{2\\}[[:lower:]]")
|
||||
)
|
||||
(capitalize-word 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Then, let’s define a minor mode for it to be activated.
|
||||
#+begin_src elisp :tangle no
|
||||
(define-minor-mode my-dubcaps-mode
|
||||
"Toggle 'my-dubcaps-mode' and convert words in DOuble CApitals to Single Capitals as you type."
|
||||
:init-value nil
|
||||
:lighter (" DC")
|
||||
(if my-dubcaps-mode
|
||||
(add-hook 'post-self-insert-hook #'my/dcaps-to-scaps nil 'local)
|
||||
(remove-hook 'post-self-insert-hook #'my/dcaps-to-scaps 'local)))
|
||||
#+end_src
|
||||
|
||||
Finally, let’s add a hook so that it is on for all the text files Emacs opens.
|
||||
#+begin_src elisp :tangle no
|
||||
(add-hook 'text-mode-hook #'my-dubcaps-mode)
|
||||
#+end_src
|
||||
|
||||
Also, since we add a minor mode string (it might be useful sometimes), currently I prefer to diminish it.
|
||||
#+begin_src elisp :tangle no
|
||||
(defun my/diminish-dubcaps ()
|
||||
(interactive)
|
||||
(diminish 'my-dubcaps-mode ""))
|
||||
(add-hook 'my-dubcaps-mode-hook 'my/diminish-dubcaps)
|
||||
#+end_src
|
||||
|
||||
* Reading and Writing
|
||||
|
||||
** Move correctly over camelCased words
|
||||
|
||||
#+begin_src elisp
|
||||
(subword-mode)
|
||||
#+end_src
|
||||
|
||||
** Understand the more common sentence with double space
|
||||
|
||||
#+begin_src elisp
|
||||
(setq sentence-end-double-space nil)
|
||||
#+end_src
|
||||
|
||||
** Join lines into paragraph
|
||||
|
||||
#+begin_src elisp
|
||||
(defun my/fill-or-unfill-paragraph (&optional unfill region)
|
||||
"Fill paragraph (or REGION). With the prefix argument UNFILL, fill it instead."
|
||||
(interactive (progn
|
||||
(barf-if-buffer-read-only)
|
||||
(list (if current-prefix-arg 'fill) t)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(fill-paragraph nil region)))
|
||||
|
||||
(bind-key "M-q" 'my/fill-or-unfill-paragraph)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defun my/fill-or-unfill-all-paragraphs (&optional unfill)
|
||||
"Fill or unfill all paragraphs in the current buffer.
|
||||
With the prefix argument UNFILL, fill them instead."
|
||||
(interactive (list (if current-prefix-arg 'fill)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(fill-paragraph nil t)
|
||||
(forward-paragraph)))))
|
||||
|
||||
(bind-key "M-Q" 'my/fill-or-unfill-all-paragraphs)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(remove-hook 'text-mode-hook #'turn-on-auto-fill)
|
||||
(add-hook 'text-mode-hook 'turn-on-visual-line-mode)
|
||||
#+end_src
|
||||
|
||||
** Expand some words with auto-correct
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(setq save-abbrevs 'silently)
|
||||
(setq-default abbrev-mode t)
|
||||
#+end_src
|
||||
|
||||
** ediff
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
|
||||
(setq ediff-split-window-function 'split-window-horizontally)
|
||||
#+end_src
|
||||
|
||||
** tramp
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(setq tramp-default-method "ssh"
|
||||
tramp-backup-directory-alist backup-directory-alist
|
||||
tramp-ssh-controlmaster-options "ssh")
|
||||
#+end_src
|
||||
|
||||
** Clean up space
|
||||
#+begin_src elisp :tangle no
|
||||
(bind-key "M-SPC" 'cycle-spacing)
|
||||
#+end_src
|
||||
|
||||
** Transform <a href> links into org links
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(defun my/transform-html-links-to-org ()
|
||||
"Transform all HTML <a> links in the current buffer into 'org-mode' links."
|
||||
(interactive)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "<a href=\"\\(.*?\\)\">\\(.*?\\)</a>" nil t)
|
||||
(replace-match (org-make-link-string (match-string 1) (match-string 2)))))
|
||||
#+end_src
|
||||
|
||||
** Count words per minute
|
||||
#+begin_src elisp :tangle no
|
||||
(require 'org-clock)
|
||||
(defun my/org-entry-wpm ()
|
||||
(interactive)
|
||||
(save-restriction
|
||||
(save-excursion
|
||||
(org-narrow-to-subtree)
|
||||
(goto-char (point-min))
|
||||
(let* ((words (count-words-region (point-min) (point-max)))
|
||||
|
||||
(minutes (org-clock-sum-current-item))
|
||||
(wpm (/ words minutes)))
|
||||
(message "WPM: %d (words: %d, minutes: %d)" wpm words minutes)
|
||||
(kill-new (number-to-string wpm))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Enable dict mode
|
||||
#+begin_src elisp :tangle no
|
||||
(setq dictionary-server "automatic")
|
||||
#+end_src
|
||||
|
||||
** Pick out passive voice and weasel words
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package writegood-mode
|
||||
:diminish writegood-mode
|
||||
:config
|
||||
(progn (add-hook 'text-mode-hook 'writegood-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Org-babel docker
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package ob-docker-build
|
||||
:straight (ob-docker-build :type git :host github :repo "ifitzpat/ob-docker-build")
|
||||
:defer t
|
||||
:config
|
||||
(add-to-list 'org-babel-load-languages '(docker-build . t))
|
||||
(org-babel-do-load-languages 'org-babel-load-languages org-babel-load-languages)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Spelling and syntax
|
||||
|
||||
** Spell checking
|
||||
|
||||
This requires installation of hunspell
|
||||
#+begin_src bash :tangle no
|
||||
sudo apt install hunspell
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package flyspell
|
||||
:config (setq ispell-program-name "hunspell"
|
||||
ispell-default-dictionary "en_US"
|
||||
)
|
||||
:diminish (flyspell-mode . "φ")
|
||||
:hook (text-mode . flyspell-mode)
|
||||
:bind (
|
||||
("M-<f7>" . flyspell-buffer)
|
||||
("<f7>" . flyspell-word)
|
||||
("C-;" . flyspell-auto-correct-previous-word)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Flyspell correct
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package flyspell-correct
|
||||
:after flyspell
|
||||
:bind (:map flyspell-mode-map ("C-;" . flyspell-correct-wrapper))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Flycheck
|
||||
|
||||
Needs external checkers installed
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package flycheck
|
||||
:init (global-flycheck-mode)
|
||||
:diminish (flycheck-mode . "")
|
||||
:config
|
||||
(add-hook 'after-init-hook #'global-flycheck-mode)
|
||||
(setq flycheck-emacs-lisp-load-path 'inherit)
|
||||
(setq flycheck-emacs-lisp-load-path (concat user-emacs-directory "straight/build"))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Flycheck bash
|
||||
#+begin_src bash :tangle no
|
||||
sudo apt install devscripts
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package flycheck-checkbashisms
|
||||
:config
|
||||
(flycheck-checkbashisms-setup)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Yaml
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package yaml-mode
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
|
||||
(add-to-list 'auto-mode-alist '("\\.yaml\\'" . yaml-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Docker
|
||||
#+begin_src elisp :tangle no
|
||||
(use-package docker-compose-mode)
|
||||
#+end_src
|
||||
@@ -1,7 +1,10 @@
|
||||
(let ((config-dir "~/memex/system/"))
|
||||
(let ((config-dir "~/memex/projects/dotemacs/modules/"))
|
||||
;; Load the core settings, including package management and essential setup.
|
||||
(org-babel-load-file (expand-file-name "emacs-core.org" config-dir))
|
||||
|
||||
;; Load UI and theme settings
|
||||
(org-babel-load-file (expand-file-name "emacs-ui.org" config-dir))
|
||||
|
||||
;; Load early init settings (if separate and not fully covered by core)
|
||||
;; (org-babel-load-file (expand-file-name "emacs-early-init.org" config-dir))
|
||||
|
||||
@@ -6,10 +6,13 @@
|
||||
This file loads the modular Emacs configuration files. It should be the primary way Emacs is configured, replacing or integrating with the original `~/.emacs`, `~/.emacs.d/init.el`, `~/.emacs.d/early-init.el`, and `~/.emacs.d/config.el`.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(let ((config-dir "~/memex/system/"))
|
||||
(let ((config-dir "~/memex/projects/dotemacs/modules/"))
|
||||
;; Load the core settings, including package management and essential setup.
|
||||
(org-babel-load-file (expand-file-name "emacs-core.org" config-dir))
|
||||
|
||||
;; Load UI and theme settings
|
||||
(org-babel-load-file (expand-file-name "emacs-ui.org" config-dir))
|
||||
|
||||
;; Load early init settings (if separate and not fully covered by core)
|
||||
;; (org-babel-load-file (expand-file-name "emacs-early-init.org" config-dir))
|
||||
|
||||
@@ -79,13 +79,13 @@
|
||||
:embedding-model "nomic-embed-text"))
|
||||
)
|
||||
|
||||
(use-package org-agent
|
||||
(use-package opencortex
|
||||
:straight nil
|
||||
:load-path "~/.local/share/org-agent/src"
|
||||
:commands (org-agent-connect org-agent-disconnect)
|
||||
:load-path "~/.local/share/opencortex/src"
|
||||
:commands (opencortex-connect opencortex-disconnect)
|
||||
:init
|
||||
(setq org-agent-host "127.0.0.1")
|
||||
(setq org-agent-port 9105)
|
||||
(setq org-agent-executable-path "~/.local/share/org-agent/bin/org-agent-server")
|
||||
(setq opencortex-host "127.0.0.1")
|
||||
(setq opencortex-port 9105)
|
||||
(setq opencortex-executable-path "~/.local/share/opencortex/bin/opencortex-server")
|
||||
:config
|
||||
(message "org-agent: Local brain configured at %s" org-agent-executable-path))
|
||||
(message "opencortex: Local brain configured at %s" opencortex-executable-path))
|
||||
@@ -1,21 +1,120 @@
|
||||
#+TITLE: Emacs AI Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/ai.el
|
||||
#+TITLE: AI Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* ellama
|
||||
#+begin_src elisp
|
||||
* AI Settings
|
||||
|
||||
** Ellama
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
;; YOU DON'T NEED NONE OF THIS CODE FOR SIMPLE INSTALL
|
||||
;; IT IS AN EXAMPLE OF CUSTOMIZATION.
|
||||
(use-package ellama
|
||||
:ensure t
|
||||
:bind ("C-c e" . ellama)
|
||||
:hook (org-ctrl-c-ctrl-c-final . ellama-chat-send-last-message)
|
||||
:init (setopt ellama-auto-scroll t)
|
||||
:config
|
||||
(ellama-context-header-line-global-mode +1)
|
||||
(ellama-session-header-line-global-mode +1)
|
||||
:init
|
||||
(require 'llm-openai)
|
||||
;; setup key bindings
|
||||
(setq ellama-keymap-prefix "C-c e")
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Providers
|
||||
#+begin_src elisp
|
||||
#+begin_src elisp :tangle yes
|
||||
(setopt ellama-providers
|
||||
'(
|
||||
;; Ollama Provider (added here with a name)
|
||||
("ollama" . (make-llm-ollama
|
||||
;; Consider a dedicated embedding model if gemma isn't ideal for it.
|
||||
:chat-model "gemma3:latest"
|
||||
:embedding-model "gemma3:latest" ; Or e.g., "nomic-embed-text"
|
||||
:default-chat-non-standard-params '(("num_ctx" . 8192))))
|
||||
|
||||
("openai" . (make-llm-openai
|
||||
:key (auth-source-pass-get "api-key" "www/openai.com/amr@gharbeia.net")
|
||||
:chat-model "gpt-4o"
|
||||
:embedding-model "text-embedding-3-large"))
|
||||
|
||||
("groq" . (make-llm-openai-compatible
|
||||
:url "https://api.groq.com/openai/v1"
|
||||
:key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net")
|
||||
;; Check Groq console for available models, these might change
|
||||
:chat-model "llama3-70b-8192" ; Example, verify on Groq
|
||||
:embedding-model "llama3-70b-8192")) ; Groq might not offer dedicated embedding models via this API
|
||||
))
|
||||
|
||||
;; --- Set Active Providers ---
|
||||
;; Choose your default provider from the list above by its name
|
||||
(setopt ellama-provider "ollama") ; Or "ollama", "openai", "groq"
|
||||
|
||||
;; You can specify different providers for different tasks if needed
|
||||
(setopt ellama-translation-provider "ollama")
|
||||
(setopt ellama-naming-provider "ollama")
|
||||
(setopt ellama-naming-scheme 'ellama-generate-name-by-llm)
|
||||
|
||||
(setq llm-debug t)
|
||||
;; Note: API keys should be handled via auth-source as seen in original config
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package ellama
|
||||
:ensure t
|
||||
:bind ("C-c e" . ellama)
|
||||
;; send last message in chat buffer with C-c C-c
|
||||
:hook (org-ctrl-c-ctrl-c-final . ellama-chat-send-last-message)
|
||||
:init (setopt ellama-auto-scroll t)
|
||||
:config
|
||||
;; show ellama context in header line in all buffers
|
||||
(ellama-context-header-line-global-mode +1)
|
||||
;; show ellama session id in header line in all buffers
|
||||
(ellama-session-header-line-global-mode +1))
|
||||
#+end_src
|
||||
|
||||
** GPTel
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package gptel)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq gptel-api-key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net"))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(gptel-make-openai "Groq" ;Any name you want
|
||||
:host "api.groq.com"
|
||||
:endpoint "/openai/v1/chat/completions"
|
||||
:stream t
|
||||
:key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net") ;can be a function that returns the key
|
||||
:models '(llama-3.1-70b-versatile
|
||||
llama-3.1-8b-instant
|
||||
llama3-70b-8192
|
||||
llama3-8b-8192
|
||||
mixtral-8x7b-32768
|
||||
gemma-7b-it))
|
||||
#+end_src
|
||||
|
||||
** Elisa
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package elisa
|
||||
:defer t
|
||||
:init
|
||||
(setopt elisa-limit 5)
|
||||
(require 'llm-ollama)
|
||||
(setopt elisa-embeddings-provider (make-llm-ollama :embedding-model "nomic-embed-text"))
|
||||
(setopt elisa-chat-provider (make-llm-ollama
|
||||
:chat-model "sskostyaev/openchat:8k-rag"
|
||||
:embedding-model "nomic-embed-text"))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** OpenCortex (Local Foundry)
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package opencortex
|
||||
:straight nil
|
||||
:load-path "~/.local/share/opencortex/src"
|
||||
:commands (opencortex-connect opencortex-disconnect)
|
||||
:init
|
||||
(setq opencortex-host "127.0.0.1")
|
||||
(setq opencortex-port 9105)
|
||||
(setq opencortex-executable-path "~/.local/share/opencortex/bin/opencortex-server")
|
||||
:config
|
||||
(message "opencortex: Local brain configured at %s" opencortex-executable-path))
|
||||
#+end_src
|
||||
@@ -16,6 +16,36 @@
|
||||
(unless (file-directory-p (expand-file-name "~/.emacs.d/straight/versions")) (make-directory (expand-file-name "~/.emacs.d/straight/versions") t))
|
||||
(use-package org)
|
||||
|
||||
(use-package ef-themes
|
||||
:config
|
||||
;; If you like two specific themes and want to switch between them, you
|
||||
;; can specify them in `ef-themes-to-toggle' and then invoke the command
|
||||
;; `ef-themes-toggle'. All the themes are included in the variable
|
||||
;; `ef-themes-collection'.
|
||||
(setq ef-themes-to-toggle '(ef-summer ef-winter))
|
||||
|
||||
(setq ef-themes-headings ; read the manual's entry or the doc string
|
||||
'((0 variable-pitch light 1.9)
|
||||
(1 variable-pitch light 1.8)
|
||||
(2 variable-pitch regular 1.7)
|
||||
(3 variable-pitch regular 1.6)
|
||||
(4 variable-pitch regular 1.5)
|
||||
(5 variable-pitch 1.4) ; absence of weight means `bold'
|
||||
(6 variable-pitch 1.3)
|
||||
(7 variable-pitch 1.2)
|
||||
(t variable-pitch 1.1)))
|
||||
|
||||
;; They are nil by default...
|
||||
(setq ef-themes-mixed-fonts t)
|
||||
(setq ef-themes-variable-pitch-ui t)
|
||||
|
||||
;; Disable all other themes to avoid awkward blending:
|
||||
(mapc #'disable-theme custom-enabled-themes)
|
||||
|
||||
;; Load the theme of choice:
|
||||
(load-theme 'ef-winter :no-confirm)
|
||||
)
|
||||
|
||||
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
|
||||
(when (file-exists-p custom-file) (load custom-file))
|
||||
|
||||
@@ -49,7 +79,7 @@
|
||||
|
||||
(add-hook 'server-done-hook (lambda () (delete-frame)))
|
||||
|
||||
(desktop-save-mode t)
|
||||
;; (desktop-save-mode t)
|
||||
|
||||
(use-package password-store)
|
||||
|
||||
@@ -1,55 +1,199 @@
|
||||
#+TITLE: Emacs Core Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/core.el
|
||||
#+TITLE: Core Emacs Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* early-init.el
|
||||
For straight.el to pick up before package.el
|
||||
* Initialization Bootstrap
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/early-init.el
|
||||
(setq package-enable-at-startup nil)
|
||||
#+end_src
|
||||
This section tangles directly to ~/.emacs to bootstrap the entire system.
|
||||
|
||||
* Straight.el Bootstrap
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
;;; .emacs --- Global settings -*- lexical-binding: t; -*-
|
||||
|
||||
(setq gc-cons-threshold (* 500 1024 1024))
|
||||
(add-hook 'after-init-hook (lambda () (setq gc-cons-threshold (* 5 1024 1024))))
|
||||
|
||||
(setq straight-repository-branch "develop")
|
||||
(eval-and-compile
|
||||
(defvar bootstrap-version)
|
||||
(let ((bootstrap-file
|
||||
(expand-file-name "straight/repos/straight.el/bootstrap.el"
|
||||
(or (bound-and-true-p straight-base-dir)
|
||||
user-emacs-directory)))
|
||||
(bootstrap-version 7))
|
||||
(unless (file-exists-p bootstrap-file)
|
||||
(with-current-buffer
|
||||
(url-retrieve-synchronously "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" 'silent 'inhibit-cookies)
|
||||
(goto-char (point-max))
|
||||
(eval-print-last-sexp)))
|
||||
(load bootstrap-file nil 'nomessage))
|
||||
|
||||
(straight-use-package 'use-package)
|
||||
)
|
||||
|
||||
(eval-and-compile
|
||||
(defvar bootstrap-version)
|
||||
(let ((bootstrap-file
|
||||
(expand-file-name "straight/repos/straight.el/bootstrap.el"
|
||||
(or (bound-and-true-p straight-base-dir)
|
||||
user-emacs-directory)))
|
||||
(bootstrap-version 7))
|
||||
(unless (file-exists-p bootstrap-file)
|
||||
(with-current-buffer
|
||||
(url-retrieve-synchronously "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" 'silent 'inhibit-cookies)
|
||||
(goto-char (point-max))
|
||||
(eval-print-last-sexp)))
|
||||
(load bootstrap-file nil 'nomessage))
|
||||
|
||||
(straight-use-package 'use-package)
|
||||
(straight-use-package 'org))
|
||||
|
||||
(setq straight-use-package-by-default t)
|
||||
|
||||
(require 'ob-tangle)
|
||||
|
||||
;; Load the modular configuration starting from dotemacs.org
|
||||
(org-babel-load-file (expand-file-name "~/memex/projects/dotemacs/dotemacs.org"))
|
||||
|
||||
(provide '.emacs)
|
||||
#+end_src
|
||||
|
||||
* Server and Performance
|
||||
#+begin_src elisp :tangle ~/.emacs.d/early-init.el
|
||||
(require 'server)
|
||||
(unless (server-running-p) (server-start))
|
||||
(defvar server-max-buffers 100)
|
||||
#+end_src
|
||||
* Front matter
|
||||
|
||||
#+begin_src elisp
|
||||
;;; emacs-core.el --- Summary
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
|
||||
;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
|
||||
* Garbage collector
|
||||
|
||||
Increase threshold to 500 MB to ease startup
|
||||
#+begin_src elisp
|
||||
(setq gc-cons-threshold (* 500 1024 1024))
|
||||
#+end_src
|
||||
|
||||
Decrease threshold to 5 MB after init
|
||||
#+begin_src elisp
|
||||
(add-hook 'after-init-hook (lambda () (setq gc-cons-threshold (* 5 1024 1024))))
|
||||
#+end_src
|
||||
|
||||
* System Information
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
* Straight.el and use-package
|
||||
|
||||
Integrate use-package and straight
|
||||
#+begin_src elisp
|
||||
(setq straight-use-package-by-default t)
|
||||
(require 'use-package)
|
||||
(straight-use-package 'diminish)
|
||||
(require 'diminish)
|
||||
#+end_src
|
||||
|
||||
Make sure Org is installed (straight.el)
|
||||
#+begin_src elisp
|
||||
(unless (file-directory-p (expand-file-name "~/.emacs.d/straight/versions")) (make-directory (expand-file-name "~/.emacs.d/straight/versions") t))
|
||||
(use-package org)
|
||||
#+end_src
|
||||
|
||||
* UI and Themes
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package ef-themes
|
||||
:config
|
||||
;; If you like two specific themes and want to switch between them, you
|
||||
;; can specify them in `ef-themes-to-toggle' and then invoke the command
|
||||
;; `ef-themes-toggle'. All the themes are included in the variable
|
||||
;; `ef-themes-collection'.
|
||||
(setq ef-themes-to-toggle '(ef-summer ef-winter))
|
||||
|
||||
(setq ef-themes-headings ; read the manual's entry or the doc string
|
||||
'((0 variable-pitch light 1.9)
|
||||
(1 variable-pitch light 1.8)
|
||||
(2 variable-pitch regular 1.7)
|
||||
(3 variable-pitch regular 1.6)
|
||||
(4 variable-pitch regular 1.5)
|
||||
(5 variable-pitch 1.4) ; absence of weight means `bold'
|
||||
(6 variable-pitch 1.3)
|
||||
(7 variable-pitch 1.2)
|
||||
(t variable-pitch 1.1)))
|
||||
|
||||
;; They are nil by default...
|
||||
(setq ef-themes-mixed-fonts t)
|
||||
(setq ef-themes-variable-pitch-ui t)
|
||||
|
||||
;; Disable all other themes to avoid awkward blending:
|
||||
(mapc #'disable-theme custom-enabled-themes)
|
||||
|
||||
;; Load the theme of choice:
|
||||
(load-theme 'ef-winter :no-confirm)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Custom file
|
||||
|
||||
#+begin_src elisp
|
||||
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
|
||||
(when (file-exists-p custom-file) (load custom-file))
|
||||
#+end_src
|
||||
|
||||
* System information
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar my-laptop-p (equal (system-name) "lilitop"))
|
||||
(defvar my-server-p (and (equal (system-name) "localhost") (equal user-login-name "root")))
|
||||
(defvar my-phone-p (not (null (getenv "ANDROID_ROOT")))
|
||||
"If non-nil, GNU Emacs is running on Termux.")
|
||||
(when my-phone-p (defvar gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3"))
|
||||
(global-auto-revert-mode)
|
||||
(savehist-mode)
|
||||
(desktop-save-mode t)
|
||||
(global-auto-revert-mode) ; simplifies syncing
|
||||
#+end_src
|
||||
|
||||
* Persistent history
|
||||
|
||||
#+begin_src elisp
|
||||
(savehist-mode)
|
||||
#+end_src
|
||||
|
||||
* Disable Syntax Checkers (Diagnostic)
|
||||
|
||||
#+begin_src elisp
|
||||
(when (fboundp 'flycheck-mode)
|
||||
(setq flycheck-global-modes nil)
|
||||
(global-flycheck-mode -1))
|
||||
(when (fboundp 'flymake-mode)
|
||||
(setq help-at-pt-display-when-idle t)
|
||||
;; Disable flymake in all buffers
|
||||
(add-hook 'find-file-hook (lambda () (flymake-mode -1))))
|
||||
#+end_src
|
||||
|
||||
* Backup and versioning
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package magit)
|
||||
#+end_src
|
||||
|
||||
* Personal information
|
||||
|
||||
#+begin_src elisp
|
||||
(setq user-full-name "Amr Gharbeia")
|
||||
(defvar email-address "amr@gharbeia.net")
|
||||
(defvar calendar-latitude 39.0)
|
||||
(defvar calendar-longitude -77.1)
|
||||
(defvar calendar-location-name "Washington, DC")
|
||||
(defvar calendar-time-zone -300)
|
||||
(defvar calendar-standard-time-zone-name "EST")
|
||||
(defvar calendar-daylight-time-zone-name "EDT")
|
||||
#+end_src
|
||||
|
||||
* Saving Emacs Sessions
|
||||
|
||||
Close frame when done
|
||||
#+begin_src elisp
|
||||
(add-hook 'server-done-hook (lambda () (delete-frame)))
|
||||
#+end_src
|
||||
|
||||
Save desktop session
|
||||
#+begin_src elisp
|
||||
;; (desktop-save-mode t)
|
||||
#+end_src
|
||||
|
||||
* Security
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package password-store)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package auth-source
|
||||
:config (auth-source-pass-enable)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* End matter
|
||||
|
||||
#+begin_src elisp
|
||||
(provide 'emacs-core)
|
||||
;;; emacs-core.el ends here
|
||||
#+end_src
|
||||
|
||||
@@ -1,30 +1,112 @@
|
||||
#+TITLE: Emacs GTD Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/gtd.el
|
||||
#+TITLE: GTD & Agenda Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* org-gtd
|
||||
* Agenda
|
||||
|
||||
Basic agenda settings
|
||||
#+begin_src elisp
|
||||
(use-package org-gtd
|
||||
:defer t
|
||||
:init (setq org-gtd-update-ack "3.0.0")
|
||||
:after org
|
||||
:config
|
||||
(setq org-edna-use-inheritance t)
|
||||
(org-edna-mode)
|
||||
:bind (
|
||||
("C-c d c" . org-gtd-capture)
|
||||
("C-c d e" . org-gtd-engage)
|
||||
("C-c d p" . org-gtd-process-inbox)
|
||||
:map org-gtd-clarify-map
|
||||
("C-c c" . org-gtd-organize)
|
||||
)
|
||||
)
|
||||
(setq org-deadline-warning-days 7)
|
||||
(setq org-agenda-skip-additional-timestamps-same-entry t)
|
||||
(setq org-agenda-span 'fortnight)
|
||||
(setq org-agenda-tags-column 'auto)
|
||||
(setq org-agenda-skip-scheduled-if-deadline-is-shown t)
|
||||
#+end_src
|
||||
|
||||
* GTD Directory and Areas
|
||||
Agenda files
|
||||
#+begin_src elisp
|
||||
(defvar org-gtd-directory org-directory)
|
||||
(defvar org-gtd-organize-hooks '(org-gtd-set-area-of-focus))
|
||||
(defvar org-gtd-areas-of-focus '(
|
||||
(setq org-agenda-files (list
|
||||
(concat org-directory "/inbox.org")
|
||||
(concat org-directory "/gtd.org")
|
||||
(concat org-directory "/org-gtd-tasks.org")
|
||||
)
|
||||
)
|
||||
|
||||
#+end_src
|
||||
|
||||
Better agenda views
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package org-super-agenda)
|
||||
#+end_src
|
||||
|
||||
* To-do
|
||||
|
||||
Basic todo
|
||||
#+begin_src elisp
|
||||
(setq org-todo-keywords
|
||||
'(
|
||||
(sequence "TODO(t)" "NEXT(n)" "WAIT(w@/!)" "|" "DONE(d!)" "CNCL(c@)")
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-todo-keyword-faces
|
||||
'(
|
||||
("TODO" :foreground "red" :weight bold)
|
||||
("NEXT" :foreground "red" :weight bold)
|
||||
("WAIT" :foreground "yellow" :weight bold)
|
||||
("DONE" :foreground "green" :weight bold)
|
||||
("CNCL" :foreground "blue" :weight bold)
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-enforce-todo-dependencies t)
|
||||
(setq org-tags-exclude-from-inheritance '("crypt" "!private"))
|
||||
#+end_src
|
||||
|
||||
Switch entry to 'DONE' when all subentries are done
|
||||
#+begin_src elisp
|
||||
(defun org-summary-todo (n-done n-not-done)
|
||||
"Switch entry to 'DONE' when all subentries are done, to 'TODO' otherwise.
|
||||
Uses N-DONE and N-NOT-DONE"
|
||||
(let (org-log-done org-log-states) ; turn off logging
|
||||
(org-todo (if (= n-not-done 0) "DONE" "TODO")
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; (add-hook 'org-after-todo-statistics-hook #'org-summary-todo)
|
||||
#+end_src
|
||||
|
||||
* Getting Things Done (GTD)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package f)
|
||||
(use-package dash)
|
||||
(use-package s)
|
||||
(use-package org-edna
|
||||
:config
|
||||
(setq org-edna-use-inheritance t)
|
||||
(org-edna-mode))
|
||||
|
||||
(use-package org-gtd
|
||||
:straight (org-gtd :type git :host github :repo "Trevoke/org-gtd.el")
|
||||
:demand t
|
||||
:init (setq org-gtd-update-ack "4.0.0")
|
||||
:config
|
||||
(setq org-gtd-keyword-mapping
|
||||
'((todo . "TODO")
|
||||
(next . "NEXT")
|
||||
(wait . "WAIT")
|
||||
(done . "DONE")
|
||||
(canceled . "CNCL")))
|
||||
(setq org-gtd-custom-node-paths
|
||||
(list (list "Actionable" (expand-file-name "~/memex/gtd.org") "Actions")
|
||||
(list "Legacy" (expand-file-name "~/memex/org-gtd-tasks.org") "Actions")
|
||||
(list "Projects" (expand-file-name "~/memex/gtd.org") "Projects")
|
||||
(list "Incubate" (expand-file-name "~/memex/gtd.org") "Incubate")))
|
||||
(org-gtd-mode)
|
||||
)
|
||||
|
||||
(global-set-key (kbd "C-c d c") #'org-gtd-capture)
|
||||
(global-set-key (kbd "C-c d e") #'org-gtd-engage)
|
||||
(global-set-key (kbd "C-c d p") #'org-gtd-process-inbox)
|
||||
(with-eval-after-load 'org-gtd
|
||||
(define-key org-gtd-clarify-map (kbd "C-c c") #'org-gtd-organize))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-gtd-directory org-directory)
|
||||
(setq org-gtd-organize-hooks '(org-gtd-set-area-of-focus))
|
||||
(setq org-gtd-areas-of-focus '(
|
||||
"Atoms"
|
||||
"Bits"
|
||||
"Cells"
|
||||
@@ -44,5 +126,41 @@
|
||||
"Egypt"
|
||||
)
|
||||
)
|
||||
(defvar org-gtd-clarify-show-horizons 'right)
|
||||
(setq org-gtd-clarify-show-horizons 'right)
|
||||
#+end_src
|
||||
|
||||
Logging
|
||||
#+begin_src elisp
|
||||
(setq org-log-into-drawer "LOGBOOK")
|
||||
#+end_src
|
||||
|
||||
Clocking work in drawer
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-clock-into-drawer t)
|
||||
#+end_src
|
||||
|
||||
Habits
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-habit-graph-column 80)
|
||||
(setq org-habit-show-habits-only-for-today nil)
|
||||
#+end_src
|
||||
|
||||
* Refile
|
||||
|
||||
org-refile targets
|
||||
#+begin_src elisp
|
||||
(setq org-refile-targets '((nil :maxlevel . 9)
|
||||
(org-agenda-files :maxlevel . 9)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Set type of refile targets completion
|
||||
#+begin_src elisp
|
||||
(setq org-outline-path-complete-in-steps nil)
|
||||
#+end_src
|
||||
|
||||
Allow refiling to new parents created on the go after confirmation
|
||||
#+begin_src elisp
|
||||
(setq org-refile-allow-creating-parent-nodes 'confirm)
|
||||
#+end_src
|
||||
@@ -21,6 +21,9 @@
|
||||
(setq org-noter-notes-search-path (list (expand-file-name "~/memex/library/books")))
|
||||
(setq org-noter-default-notes-file-names '("books.org")))
|
||||
|
||||
(setq org-noter-notes-search-path (list (concat org-directory "/library/books")))
|
||||
(setq org-noter-default-notes-file-names '("books.org"))
|
||||
|
||||
(use-package org-noter-pdftools
|
||||
:after org-noter
|
||||
:config
|
||||
@@ -62,3 +65,5 @@ With a prefix ARG, remove start location."
|
||||
)
|
||||
|
||||
(use-package helm-bibtex)
|
||||
|
||||
(setq bibtex-completion-bibliography '("~/bibliography/zotero.bib"))
|
||||
@@ -1,39 +1,101 @@
|
||||
#+TITLE: Emacs Media and E-books Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/media.el
|
||||
#+TITLE: Media and Books Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Read ebooks (calibredb)
|
||||
|
||||
* calibredb
|
||||
#+begin_src elisp
|
||||
(use-package calibredb
|
||||
:defer t
|
||||
:config
|
||||
(setq calibredb-format-all-the-icons t)
|
||||
(setq calibredb-format-icons-in-terminal t)
|
||||
)
|
||||
(setq calibredb-format-all-the-icons t)
|
||||
(setq calibredb-format-icons-in-terminal t))
|
||||
#+end_src
|
||||
|
||||
(defvar calibredb-root-dir (concat (getenv "HOME") "/library/books"))
|
||||
#+begin_src elisp
|
||||
(defvar calibredb-root-dir (expand-file-name "~/memex/library/books"))
|
||||
(defvar calibredb-db-dir (expand-file-name "metadata.db" calibredb-root-dir))
|
||||
(defvar calibredb-id-width 6)
|
||||
(defvar calibredb-title-width 100)
|
||||
(defvar calibredb-author-width 20)
|
||||
#+end_src
|
||||
|
||||
* nov.el (EPUB Viewer)
|
||||
* PDF Tools
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package pdf-tools
|
||||
:mode ("\\.pdf\\'" . pdf-view-mode)
|
||||
:config
|
||||
(pdf-tools-install :no-query)
|
||||
(setq-default pdf-view-display-size 'fit-page)
|
||||
(setq pdf-annot-activate-created-annotations t))
|
||||
#+end_src
|
||||
|
||||
* Annotate PDFs and EPUBs (org-noter)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-noter
|
||||
:config
|
||||
(setq org-noter-notes-search-path (list (expand-file-name "~/memex/library/books")))
|
||||
(setq org-noter-default-notes-file-names '("books.org")))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-noter-notes-search-path (list (concat org-directory "/library/books")))
|
||||
(setq org-noter-default-notes-file-names '("books.org"))
|
||||
#+end_src
|
||||
|
||||
* Link PDFs (org-noter-pdftools)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-noter-pdftools
|
||||
:after org-noter
|
||||
:config
|
||||
;; Add a function to ensure precise note is inserted
|
||||
(defun org-noter-pdftools-insert-precise-note (&optional toggle-no-questions)
|
||||
(interactive "P")
|
||||
(org-noter--with-valid-session
|
||||
(let ((org-noter-insert-note-no-questions (if toggle-no-questions
|
||||
(not org-noter-insert-note-no-questions)
|
||||
org-noter-insert-note-no-questions))
|
||||
(org-pdftools-use-isearch-link t)
|
||||
(org-pdftools-use-freepointer-annot t))
|
||||
(org-noter-insert-note (org-noter--get-precise-info)))))
|
||||
|
||||
;; fix https://github.com/weirdNox/org-noter/pull/93/commits/f8349ae7575e599f375de1be6be2d0d5de4e6cbf
|
||||
(defun org-noter-set-start-location (&optional arg)
|
||||
"When opening a session with this document, go to the current location.
|
||||
With a prefix ARG, remove start location."
|
||||
(interactive "P")
|
||||
(org-noter--with-valid-session
|
||||
(let ((inhibit-read-only t)
|
||||
(ast (org-noter--parse-root))
|
||||
(location (org-noter--doc-approx-location (when (called-interactively-p 'any) 'interactive))))
|
||||
(with-current-buffer (org-noter--session-notes-buffer session)
|
||||
(org-with-wide-buffer
|
||||
(goto-char (org-element-property :begin ast))
|
||||
(if arg
|
||||
(org-entry-delete nil org-noter-property-note-location)
|
||||
(org-entry-put nil org-noter-property-note-location
|
||||
(org-noter--pretty-print-location location))))))))
|
||||
(with-eval-after-load 'pdf-annot
|
||||
(add-hook 'pdf-annot-activate-handler-functions #'org-noter-pdftools-jump-to-note)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* View EPUBs (nov.el)
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package nov
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* org-noter and PDF Tools
|
||||
#+begin_src elisp
|
||||
(use-package org-noter)
|
||||
|
||||
(use-package org-noter-pdftools
|
||||
:after org-noter
|
||||
:config
|
||||
(with-eval-after-load 'pdf-annot
|
||||
(add-hook 'pdf-annot-activate-handler-functions #'org-noter-pdftools-jump-to-note)
|
||||
)
|
||||
)
|
||||
* Zotero (helm-bibtex)
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package helm-bibtex)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq bibtex-completion-bibliography '("~/bibliography/zotero.bib"))
|
||||
#+end_src
|
||||
@@ -68,6 +68,24 @@
|
||||
(require 'org-protocol)
|
||||
(setq org-protocol-default-buffer-for-file-links "*scratch*") ; fixes 'no buffers remain to edit error for org-protocol capturer
|
||||
|
||||
(setq org-capture-templates '(
|
||||
("p" "Protocol"
|
||||
entry
|
||||
(file "inbox.org")
|
||||
"* %^{Title}\nSource: %u, %c\n #+BEGIN_QUOTE\n%i\n#+END_QUOTE\n\n\n%?"
|
||||
)
|
||||
("L" "Protocol Link"
|
||||
entry
|
||||
(file "inbox.org")
|
||||
"* %? [[%:link][%:description]]\n:PROPERTIES:\n:TITLE: %:description\n:URI: %:link\n:CREATED: %U\n:END:"
|
||||
:prepend nil
|
||||
:empty-lines 1
|
||||
:created t
|
||||
:kill-buffer t
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-protocol-default-template-key "L")
|
||||
|
||||
(defun my/org-convert-orgzly-to-org-protocol ()
|
||||
@@ -1,7 +1,10 @@
|
||||
#+TITLE: Emacs Org-mode Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/org.el
|
||||
#+TITLE: Org Mode Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Org Mode
|
||||
|
||||
** Basic setup
|
||||
|
||||
* Core Org Setup
|
||||
#+begin_src elisp
|
||||
(use-package org
|
||||
:config
|
||||
@@ -11,41 +14,130 @@
|
||||
("C-c c" . org-capture)
|
||||
:map org-mode-map)
|
||||
)
|
||||
(defvar org-directory (concat (getenv "HOME") "/org/"))
|
||||
#+end_src
|
||||
|
||||
* Agenda
|
||||
#+begin_src elisp
|
||||
(setq org-deadline-warning-days 7)
|
||||
(setq org-agenda-skip-additional-timestamps-same-entry t)
|
||||
(setq org-agenda-span 'fortnight)
|
||||
(setq org-agenda-tags-column 'auto)
|
||||
(setq org-agenda-skip-scheduled-if-deadline-is-shown t)
|
||||
(setq org-agenda-files (list
|
||||
(concat org-directory "/0_inbox/inbox.org")
|
||||
(concat org-directory "/0_inbox/org-gtd-tasks.org")
|
||||
)
|
||||
)
|
||||
(setq org-directory (expand-file-name "~/memex/"))
|
||||
#+end_src
|
||||
|
||||
* Capture and Protocol
|
||||
** Looks
|
||||
|
||||
Basic
|
||||
#+begin_src elisp
|
||||
(defvar org-pretty-entities t) ; Improve org mode looks
|
||||
(defvar org-hide-emphasis-markers t) ; Hide emphasis markup
|
||||
(defvar org-num-mode nil)
|
||||
(defvar org-startup-folded 'shw2levels)
|
||||
#+end_src
|
||||
|
||||
Indentation of headers
|
||||
#+begin_src elisp
|
||||
(defvar org-startup-indented t) ; Indent org heirarchy
|
||||
(defvar org-adapt-indentation t)
|
||||
(defvar org-hide-leading-stars t) ; Minimal Outline
|
||||
(defvar org-odd-levels-only nil)
|
||||
#+end_src
|
||||
|
||||
Indentation of lists
|
||||
#+begin_src elisp
|
||||
(setq org-list-demote-modify-bullet t)
|
||||
#+end_src
|
||||
|
||||
Org-modern
|
||||
#+begin_src elisp
|
||||
(use-package org-modern
|
||||
:ensure t
|
||||
:config
|
||||
;; Choose some fonts
|
||||
(set-face-attribute 'default nil :family "sans-serif")
|
||||
(set-face-attribute 'variable-pitch nil :family "sans-serif")
|
||||
(set-face-attribute 'org-modern-symbol nil :family "Iosevka")
|
||||
|
||||
;; Edit settings
|
||||
(defvar org-auto-align-tags nil)
|
||||
(defvar org-tags-column 0)
|
||||
(defvar org-catch-invisible-edits 'show-and-error)
|
||||
(defvar org-special-ctrl-a/e t)
|
||||
(defvar org-insert-heading-respect-content t)
|
||||
|
||||
;; Org styling, hide markup etc.
|
||||
(defvar org-hide-emphasis-markers t)
|
||||
(defvar org-pretty-entities t)
|
||||
|
||||
;; Agenda styling
|
||||
(defvar org-agenda-tags-column 0)
|
||||
(defvar org-agenda-block-separator ?─)
|
||||
(defvar org-agenda-time-grid
|
||||
'((daily today require-timed)
|
||||
(800 1000 1200 1400 1600 1800 2000)
|
||||
" ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄"))
|
||||
(defvar org-agenda-current-time-string
|
||||
"◀── now ─────────────────────────────────────────────────")
|
||||
|
||||
;; Ellipsis styling
|
||||
(defvar org-ellipsis "…")
|
||||
(set-face-attribute 'org-ellipsis nil :inherit 'default :box nil)
|
||||
|
||||
(global-org-modern-mode)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Highlight Sourcecode Syntax
|
||||
#+begin_src elisp
|
||||
(setq org-src-fontify-natively t)
|
||||
(setq org-src-tab-acts-natively t)
|
||||
#+end_src
|
||||
|
||||
Images
|
||||
#+begin_src elisp
|
||||
(setq org-startup-with-inline-images t)
|
||||
(setq org-image-actual-width '(300))
|
||||
#+end_src
|
||||
|
||||
** Capture
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-default-notes-file (concat org-directory "inbox.org"))
|
||||
#+end_src
|
||||
|
||||
*** Org-protocol
|
||||
|
||||
Linux configuration
|
||||
#+begin_src bash :tangle yes
|
||||
[Desktop Entry]
|
||||
Name=org-protocol
|
||||
Comment=Intercept calls from emacsclient to trigger custom actions
|
||||
Categories=Other;
|
||||
Keywords=org-protocol;
|
||||
Icon=emacs
|
||||
Type=Application
|
||||
Exec=emacsclient -- %u
|
||||
Terminal=false
|
||||
StartupWMClass=Emacs
|
||||
MimeType=x-scheme-handler/org-protocol;
|
||||
#+end_src
|
||||
|
||||
#+begin_src bash :tangle yes
|
||||
update-desktop-database ~/.local/share/applications/
|
||||
#+end_src
|
||||
|
||||
Basic configuration
|
||||
#+begin_src elisp
|
||||
(require 'org-protocol)
|
||||
(setq org-protocol-default-buffer-for-file-links "*scratch*")
|
||||
(defvar org-default-notes-file (concat org-directory "/0_inbox/inbox.org"))
|
||||
(setq org-protocol-default-template-key "L")
|
||||
(setq org-protocol-default-buffer-for-file-links "*scratch*") ; fixes 'no buffers remain to edit error for org-protocol capturer
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar org-capture-templates '(
|
||||
Org-protocol templates
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-capture-templates '(
|
||||
("p" "Protocol"
|
||||
entry
|
||||
(file "0_inbox/inbox.org")
|
||||
(file "inbox.org")
|
||||
"* %^{Title}\nSource: %u, %c\n #+BEGIN_QUOTE\n%i\n#+END_QUOTE\n\n\n%?"
|
||||
)
|
||||
("L" "Protocol Link"
|
||||
entry
|
||||
(file "0_inbox/inbox.org")
|
||||
(file "inbox.org")
|
||||
"* %? [[%:link][%:description]]\n:PROPERTIES:\n:TITLE: %:description\n:URI: %:link\n:CREATED: %U\n:END:"
|
||||
:prepend nil
|
||||
:empty-lines 1
|
||||
@@ -56,14 +148,86 @@
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* TODO Settings
|
||||
#+begin_src elisp
|
||||
(setq org-todo-keywords
|
||||
'(
|
||||
(sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!)")
|
||||
(sequence "WAIT(w@/!)" "|" "CNCL(c@)")
|
||||
)
|
||||
)
|
||||
(setq org-enforce-todo-dependencies t)
|
||||
(setq org-log-into-drawer "LOGBOOK")
|
||||
(setq org-protocol-default-template-key "L")
|
||||
#+end_src
|
||||
|
||||
Convert Orgzly captures to org-protocol captures standard
|
||||
#+begin_src elisp
|
||||
(defun my/org-convert-orgzly-to-org-protocol ()
|
||||
"Reformat Orgzly bookmark at point to org-protocol bookmark."
|
||||
(interactive)
|
||||
(when (org-at-heading-p)
|
||||
(let ((headline (nth 4 (org-heading-components))))
|
||||
;; Find and store the link. Delete the link line.
|
||||
(search-forward-regexp "^https?://\\S-*" nil t)
|
||||
(let ((link (match-string 0)))
|
||||
(beginning-of-line)
|
||||
(kill-line)
|
||||
;; Delete any trailing blank spaces
|
||||
(org-back-to-heading)
|
||||
(end-of-line)
|
||||
(when (not (org-on-heading-p))
|
||||
(delete-char 1)
|
||||
)
|
||||
;; Set new headline
|
||||
(goto-char (org-entry-beginning-position))
|
||||
(org-edit-headline (format "[[%s][%s]]" link headline))
|
||||
;; Set new properties
|
||||
(org-set-property "TITLE" headline)
|
||||
(org-set-property "URI" link)
|
||||
(message "Reformatted Orgzly bookmark at point to org-protocol bookmark")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Exporting
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-export-with-smart-quotes t)
|
||||
(setq org-export-backends '(beamer html latex md))
|
||||
#+end_src
|
||||
|
||||
Export to EPUB
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package ox-epub)
|
||||
#+end_src
|
||||
|
||||
** org-attach
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-attach-id-dir (concat org-directory "/library"))
|
||||
#+end_src
|
||||
|
||||
** Enable shell scripting support in org-babel
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-babel-do-load-languages 'org-babel-load-languages '((shell . t)))
|
||||
#+end_src
|
||||
|
||||
** Insert org-mode links from clipboard
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package org-cliplink
|
||||
:bind
|
||||
(("C-x p i" . org-cliplink))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Deft
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package deft
|
||||
:commands (deft)
|
||||
:init
|
||||
(defvar deft-extensions '("org"))
|
||||
(defvar deft-recursive nil)
|
||||
(defvar deft-use-filename-as-title t)
|
||||
:config
|
||||
(defvar deft-directory org-directory)
|
||||
(defvar deft-recursive t)
|
||||
(defvar deft-strip-summary-regexp ":PROPERTIES:\n\\(.+\n\\)+:END:\n")
|
||||
(defvar deft-use-filename-as-title t)
|
||||
:bind ("C-c n d" . deft)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,42 +1,73 @@
|
||||
#+TITLE: Emacs Org-roam Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/roam.el
|
||||
#+TITLE: Org-Roam Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Org-roam
|
||||
|
||||
** Basic org-roam setup
|
||||
|
||||
* org-roam Setup
|
||||
#+begin_src elisp
|
||||
(use-package org-roam
|
||||
:init (setq org-roam-v2-ack t)
|
||||
:after org
|
||||
:config
|
||||
(org-roam-db-autosync-enable)
|
||||
(require 'org-roam-dailies)
|
||||
(setq org-roam-mode-sections
|
||||
(list #'org-roam-backlinks-section
|
||||
#'org-roam-reflinks-section
|
||||
#'org-roam-unlinked-references-section
|
||||
)
|
||||
)
|
||||
:bind (
|
||||
("C-c n f" . org-roam-node-find)
|
||||
("C-c n g" . org-roam-graph)
|
||||
("C-c n r" . org-roam-node-random)
|
||||
("C-c n h" . org-roam-node-convert-headline)
|
||||
("C-c n i" . org-roam-node-insert)
|
||||
("C-c n o" . org-id-get-create)
|
||||
("C-c n t" . org-roam-tag-add)
|
||||
("C-c n a" . org-roam-alias-add)
|
||||
("C-c n l" . org-roam-buffer-display-dedicated)
|
||||
)
|
||||
)
|
||||
(use-package org-roam
|
||||
:init (setq org-roam-v2-ack t) ;; Acknowledge V2 upgrade
|
||||
:after org
|
||||
:config
|
||||
(org-roam-db-autosync-enable)
|
||||
(require 'org-roam-dailies)
|
||||
:bind (
|
||||
("C-c n f" . org-roam-node-find)
|
||||
("C-c n g" . org-roam-graph)
|
||||
("C-c n r" . org-roam-node-random)
|
||||
("C-c n h" . org-roam-node-convert-headline)
|
||||
("C-c n i" . org-roam-node-insert)
|
||||
("C-c n o" . org-id-get-create)
|
||||
("C-c n t" . org-roam-tag-add)
|
||||
("C-c n a" . org-roam-alias-add)
|
||||
("C-c n l" . org-roam-buffer-display-dedicated)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Directories
|
||||
#+begin_src elisp
|
||||
(setq org-roam-directory (concat org-directory "/1_thinking"))
|
||||
(setq org-roam-dailies-directory (concat org-directory "/0_inbox/daily"))
|
||||
(setq org-roam-directory (expand-file-name (concat org-directory "notes")))
|
||||
(setq org-roam-dailies-directory (expand-file-name (concat org-directory "daily")))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package sqlite3)
|
||||
(require 'sqlite3)
|
||||
#+end_src
|
||||
|
||||
Include subdirectories in org-roam
|
||||
#+begin_src elisp
|
||||
(setq org-roam-file-exclude-regexp "^[.][.]?/")
|
||||
#+end_src
|
||||
|
||||
* Capture Templates
|
||||
** Display in org-roam-buffer
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-roam-mode-sections
|
||||
(list #'org-roam-backlinks-section
|
||||
#'org-roam-reflinks-section
|
||||
#'org-roam-unlinked-references-section
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Filter org-roam nodes find by tag
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/org-roam-node-has-tag (node tag)
|
||||
"Filter function to check if the given NODE has the specified TAG."
|
||||
(member tag (org-roam-node-tags node))
|
||||
)
|
||||
|
||||
(defun my/org-roam-node-find-by-tag ()
|
||||
"Find and open an Org-roam node based on a specified tag."
|
||||
(interactive)
|
||||
(let ((tag (read-string "Enter tag: ")))
|
||||
(org-roam-node-find nil nil (lambda (node) (my/org-roam-node-has-tag node tag))))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** org-roam-capture templates
|
||||
#+begin_src elisp
|
||||
(setq org-roam-capture-templates
|
||||
'(
|
||||
@@ -48,6 +79,7 @@
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
|
||||
("h" "hugo post" plain
|
||||
"%?"
|
||||
:target (file+head "posts/${slug}.org"
|
||||
@@ -55,6 +87,7 @@
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
|
||||
("p" "person" plain
|
||||
"%?"
|
||||
:if-new (file+head "people/${slug}.org"
|
||||
@@ -64,7 +97,9 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-roam-dailies-capture-templates
|
||||
'(
|
||||
("d" "daily" plain
|
||||
@@ -75,3 +110,31 @@
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Move org header to org-roam-daily
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/org-move-entry-to-daily-notes ()
|
||||
"Move the current org-mode headline to the daily notes file based on its :CREATED: property."
|
||||
(interactive)
|
||||
(let*
|
||||
(
|
||||
(created-prop (org-entry-get nil "CREATED"))
|
||||
(created-date (when created-prop
|
||||
(org-parse-time-string created-prop)))
|
||||
(year (nth 5 created-date)) ; Extract year (6th element)
|
||||
(month (nth 4 created-date)) ; Extract month (5th element)
|
||||
(day (nth 3 created-date)) ; Extract day (4th element)
|
||||
(target-date (format "%04d-%02d-%02d" year month day)) ; Format date string
|
||||
(target-file (org-roam-dailies-goto target-date))
|
||||
)
|
||||
(when target-file
|
||||
(org-cut-subtree)
|
||||
(find-file target-file)
|
||||
(goto-char (point-max))
|
||||
(unless (bolp) (newline))
|
||||
(org-paste-subtree)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,18 +1,86 @@
|
||||
#+TITLE: Emacs Shell Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/shell.el
|
||||
#+TITLE: Shell Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Shell
|
||||
|
||||
** Bash completion
|
||||
|
||||
* Bash Completion
|
||||
#+begin_src elisp
|
||||
(use-package bash-completion
|
||||
:config
|
||||
(require 'bash-completion)
|
||||
(bash-completion-setup)
|
||||
)
|
||||
|
||||
(defvar shell-dynamic-complete-functions t)
|
||||
#+end_src
|
||||
|
||||
* Frame Management
|
||||
#+begin_src elisp
|
||||
(add-hook 'server-done-hook (lambda () (delete-frame)))
|
||||
(defvar shell-dynamic-complete-functions t)
|
||||
#+end_src
|
||||
|
||||
** Eshell
|
||||
|
||||
Add programmable bash completion to Emacs shell-mode
|
||||
#+begin_src elisp :tangle yes
|
||||
(require 'bash-completion)
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(add-hook 'completion-at-point-functions
|
||||
'bash-completion-capf-nonexclusive nil t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Use colors in eshell
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package xterm-color
|
||||
:commands (xterm-color-filter)
|
||||
)
|
||||
|
||||
(use-package eshell
|
||||
:after xterm-color
|
||||
:config
|
||||
(define-key eshell-hist-mode-map (kbd "M-r") #'consult-history)
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(setenv "TERM" "xterm-256color")))
|
||||
(add-hook 'eshell-before-prompt-hook (setq xterm-color-preserve-properties t))
|
||||
(add-to-list 'eshell-preoutput-filter-functions 'xterm-color-filter)
|
||||
(setq eshell-output-filter-functions
|
||||
(remove 'eshell-handle-ansi-color eshell-output-filter-functions)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Eshell completion
|
||||
#+begin_src elisp :tangle yes
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(add-hook 'completion-at-point-functions
|
||||
'bash-completion-capf-nonexclusive nil t)))
|
||||
#+end_src
|
||||
|
||||
Emulate A Terminal (EAT)
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package eat
|
||||
:config
|
||||
;; For `eat-eshell-mode'.
|
||||
(add-hook 'eshell-load-hook #'eat-eshell-mode)
|
||||
|
||||
;; For `eat-eshell-visual-command-mode'.
|
||||
(add-hook 'eshell-load-hook #'eat-eshell-visual-command-mode)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Server Actuation (Bash Integration)
|
||||
|
||||
Ensure that emacsclient always opens in a GUI frame by default when called from the shell.
|
||||
|
||||
#+begin_src bash :tangle ~/.bash_aliases
|
||||
# Use emacsclient to open files in the GUI, starting daemon if needed
|
||||
alias em="emacsclient -c -a ''"
|
||||
|
||||
# Set emacsclient as the default editor
|
||||
export EDITOR="emacsclient -c -a ''"
|
||||
export VISUAL="emacsclient -c -a ''"
|
||||
#+end_src
|
||||
16
projects/dotemacs/modules/emacs-ui.el
Normal file
@@ -0,0 +1,16 @@
|
||||
(when (fboundp 'tool-bar-mode) (tool-bar-mode -1))
|
||||
(when (fboundp 'menu-bar-mode) (menu-bar-mode -1))
|
||||
(when (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
|
||||
|
||||
(setq inhibit-startup-screen t)
|
||||
(setq initial-scratch-message nil)
|
||||
|
||||
(set-face-attribute 'default nil :family "sans-serif" :height 120)
|
||||
(set-face-attribute 'variable-pitch nil :family "sans-serif")
|
||||
|
||||
(use-package org-modern
|
||||
:ensure t
|
||||
:config
|
||||
(set-face-attribute 'org-modern-symbol nil :family "Iosevka")
|
||||
(global-org-modern-mode)
|
||||
)
|
||||
@@ -1,59 +1,32 @@
|
||||
#+TITLE: Emacs UI Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/ui.el
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Appearance
|
||||
|
||||
Basic UI settings for a cleaner look.
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-pretty-entities t) ; Improve org mode looks
|
||||
(defvar org-hide-emphasis-markers t) ; Hide emphasis markup
|
||||
(defvar org-num-mode nil)
|
||||
(defvar org-startup-folded 'shw2levels)
|
||||
(defvar org-startup-indented t) ; Indent org heirarchy
|
||||
(defvar org-adapt-indentation t)
|
||||
(defvar org-hide-leading-stars t) ; Minimal Outline
|
||||
(defvar org-odd-levels-only nil)
|
||||
(when (fboundp 'tool-bar-mode) (tool-bar-mode -1))
|
||||
(when (fboundp 'menu-bar-mode) (menu-bar-mode -1))
|
||||
(when (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
|
||||
|
||||
(setq inhibit-startup-screen t)
|
||||
(setq initial-scratch-message nil)
|
||||
#+end_src
|
||||
|
||||
* Org-modern
|
||||
* Fonts
|
||||
|
||||
#+begin_src elisp
|
||||
(set-face-attribute 'default nil :family "sans-serif" :height 120)
|
||||
(set-face-attribute 'variable-pitch nil :family "sans-serif")
|
||||
#+end_src
|
||||
|
||||
* Org-modern (UI elements)
|
||||
#+begin_src elisp
|
||||
(use-package org-modern
|
||||
:ensure t
|
||||
:config
|
||||
;; Choose some fonts
|
||||
(set-face-attribute 'default nil :family "sans-serif")
|
||||
(set-face-attribute 'variable-pitch nil :family "sans-serif")
|
||||
(set-face-attribute 'org-modern-symbol nil :family "Iosevka")
|
||||
|
||||
;; Edit settings
|
||||
(defvar org-auto-align-tags nil)
|
||||
(defvar org-tags-column 0)
|
||||
(defvar org-catch-invisible-edits 'show-and-error)
|
||||
(defvar org-special-ctrl-a/e t)
|
||||
(defvar org-insert-heading-respect-content t)
|
||||
|
||||
;; Org styling, hide markup etc.
|
||||
(defvar org-hide-emphasis-markers t)
|
||||
(defvar org-pretty-entities t)
|
||||
|
||||
;; Agenda styling
|
||||
(defvar org-agenda-tags-column 0)
|
||||
(defvar org-agenda-block-separator ?─)
|
||||
(defvar org-agenda-time-grid
|
||||
'((daily today require-timed)
|
||||
(800 1000 1200 1400 1600 1800 2000)
|
||||
" ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄"))
|
||||
(defvar org-agenda-current-time-string
|
||||
"◀── now ─────────────────────────────────────────────────")
|
||||
|
||||
;; Ellipsis styling
|
||||
(defvar org-ellipsis "…")
|
||||
(set-face-attribute 'org-ellipsis nil :inherit 'default :box nil)
|
||||
|
||||
(global-org-modern-mode)
|
||||
(global-org-modern-mode)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Syntax Highlighting
|
||||
#+begin_src elisp
|
||||
(setq org-src-fontify-natively t)
|
||||
(setq org-src-tab-acts-natively t)
|
||||
#+end_src
|
||||
|
||||
@@ -1,7 +1,195 @@
|
||||
#+TITLE: Emacs Writing Configuration
|
||||
#+property: header-args :tangle ~/.emacs.d/modules/writing.el
|
||||
#+TITLE: Reading and Writing Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Text and Case
|
||||
|
||||
** Convert DOuble capitals to single capitals
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/dcaps-to-scaps ()
|
||||
"Convert word in DOuble CApitals to Single Capitals."
|
||||
(interactive)
|
||||
(and (= ?w (char-syntax (char-before)))
|
||||
(save-excursion
|
||||
(and (if (called-interactively-p)
|
||||
(skip-syntax-backward "w")
|
||||
(= -3 (skip-syntax-backward "w"))
|
||||
)
|
||||
(let (case-fold-search)
|
||||
(looking-at "\\b[[:upper:]]\\{2\\}[[:lower:]]")
|
||||
)
|
||||
(capitalize-word 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Then, let’s define a minor mode for it to be activated.
|
||||
#+begin_src elisp :tangle yes
|
||||
(define-minor-mode my-dubcaps-mode
|
||||
"Toggle 'my-dubcaps-mode' and convert words in DOuble CApitals to Single Capitals as you type."
|
||||
:init-value nil
|
||||
:lighter (" DC")
|
||||
(if my-dubcaps-mode
|
||||
(add-hook 'post-self-insert-hook #'my/dcaps-to-scaps nil 'local)
|
||||
(remove-hook 'post-self-insert-hook #'my/dcaps-to-scaps 'local)))
|
||||
#+end_src
|
||||
|
||||
Finally, let’s add a hook so that it is on for all the text files Emacs opens.
|
||||
#+begin_src elisp :tangle yes
|
||||
(add-hook 'text-mode-hook #'my-dubcaps-mode)
|
||||
#+end_src
|
||||
|
||||
Also, since we add a minor mode string (it might be useful sometimes), currently I prefer to diminish it.
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/diminish-dubcaps ()
|
||||
(interactive)
|
||||
(diminish 'my-dubcaps-mode ""))
|
||||
(add-hook 'my-dubcaps-mode-hook 'my/diminish-dubcaps)
|
||||
#+end_src
|
||||
|
||||
* Reading and Writing
|
||||
|
||||
** Move correctly over camelCased words
|
||||
|
||||
#+begin_src elisp
|
||||
(subword-mode)
|
||||
#+end_src
|
||||
|
||||
** Understand the more common sentence with double space
|
||||
|
||||
#+begin_src elisp
|
||||
(setq sentence-end-double-space nil)
|
||||
#+end_src
|
||||
|
||||
** Join lines into paragraph
|
||||
|
||||
#+begin_src elisp
|
||||
(defun my/fill-or-unfill-paragraph (&optional unfill region)
|
||||
"Fill paragraph (or REGION). With the prefix argument UNFILL, fill it instead."
|
||||
(interactive (progn
|
||||
(barf-if-buffer-read-only)
|
||||
(list (if current-prefix-arg 'fill) t)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(fill-paragraph nil region)))
|
||||
|
||||
(bind-key "M-q" 'my/fill-or-unfill-paragraph)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defun my/fill-or-unfill-all-paragraphs (&optional unfill)
|
||||
"Fill or unfill all paragraphs in the current buffer.
|
||||
With the prefix argument UNFILL, fill them instead."
|
||||
(interactive (list (if current-prefix-arg 'fill)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(fill-paragraph nil t)
|
||||
(forward-paragraph)))))
|
||||
|
||||
(bind-key "M-Q" 'my/fill-or-unfill-all-paragraphs)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(remove-hook 'text-mode-hook #'turn-on-auto-fill)
|
||||
(add-hook 'text-mode-hook 'turn-on-visual-line-mode)
|
||||
#+end_src
|
||||
|
||||
** Expand some words with auto-correct
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq save-abbrevs 'silently)
|
||||
(setq-default abbrev-mode t)
|
||||
#+end_src
|
||||
|
||||
** ediff
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
|
||||
(setq ediff-split-window-function 'split-window-horizontally)
|
||||
#+end_src
|
||||
|
||||
** tramp
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq tramp-default-method "ssh"
|
||||
tramp-backup-directory-alist backup-directory-alist
|
||||
tramp-ssh-controlmaster-options "ssh")
|
||||
#+end_src
|
||||
|
||||
** Clean up space
|
||||
#+begin_src elisp :tangle yes
|
||||
(bind-key "M-SPC" 'cycle-spacing)
|
||||
#+end_src
|
||||
|
||||
** Transform <a href> links into org links
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/transform-html-links-to-org ()
|
||||
"Transform all HTML <a> links in the current buffer into 'org-mode' links."
|
||||
(interactive)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "<a href=\"\\(.*?\\)\">\\(.*?\\)</a>" nil t)
|
||||
(replace-match (org-make-link-string (match-string 1) (match-string 2)))))
|
||||
#+end_src
|
||||
|
||||
** Count words per minute
|
||||
#+begin_src elisp :tangle yes
|
||||
(require 'org-clock)
|
||||
(defun my/org-entry-wpm ()
|
||||
(interactive)
|
||||
(save-restriction
|
||||
(save-excursion
|
||||
(org-narrow-to-subtree)
|
||||
(goto-char (point-min))
|
||||
(let* ((words (count-words-region (point-min) (point-max)))
|
||||
|
||||
(minutes (org-clock-sum-current-item))
|
||||
(wpm (/ words minutes)))
|
||||
(message "WPM: %d (words: %d, minutes: %d)" wpm words minutes)
|
||||
(kill-new (number-to-string wpm))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Enable dict mode
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq dictionary-server "automatic")
|
||||
#+end_src
|
||||
|
||||
** Pick out passive voice and weasel words
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package writegood-mode
|
||||
:diminish writegood-mode
|
||||
:config
|
||||
(progn (add-hook 'text-mode-hook 'writegood-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Org-babel docker
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package ob-docker-build
|
||||
:straight (ob-docker-build :type git :host github :repo "ifitzpat/ob-docker-build")
|
||||
:defer t
|
||||
:config
|
||||
(add-to-list 'org-babel-load-languages '(docker-build . t))
|
||||
(org-babel-do-load-languages 'org-babel-load-languages org-babel-load-languages)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Spelling and syntax
|
||||
|
||||
** Spell checking
|
||||
|
||||
This requires installation of hunspell
|
||||
#+begin_src bash :tangle yes
|
||||
sudo apt install hunspell
|
||||
#+end_src
|
||||
|
||||
* Spell Checking
|
||||
#+begin_src elisp
|
||||
(use-package flyspell
|
||||
:config (setq ispell-program-name "hunspell"
|
||||
@@ -17,32 +205,50 @@
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Syntax Checking
|
||||
** Flyspell correct
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package flyspell-correct
|
||||
:after flyspell
|
||||
:bind (:map flyspell-mode-map ("C-;" . flyspell-correct-wrapper))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Flycheck
|
||||
|
||||
Needs external checkers installed
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package flycheck
|
||||
:init (global-flycheck-mode)
|
||||
:defer t
|
||||
:diminish (flycheck-mode . "")
|
||||
:config
|
||||
(add-hook 'after-init-hook #'global-flycheck-mode)
|
||||
(setq flycheck-emacs-lisp-load-path 'inherit)
|
||||
(setq flycheck-emacs-lisp-load-path (concat user-emacs-directory "straight/build"))
|
||||
(setq flycheck-emacs-lisp-load-path (concat user-emacs-directory "straight/build")))
|
||||
|
||||
#+end_src
|
||||
|
||||
** Flycheck bash
|
||||
#+begin_src bash :tangle yes
|
||||
sudo apt install devscripts
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package flycheck-checkbashisms
|
||||
:config
|
||||
(flycheck-checkbashisms-setup)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Yaml
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package yaml-mode
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
|
||||
(add-to-list 'auto-mode-alist '("\\.yaml\\'" . yaml-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Text Manipulation
|
||||
#+begin_src elisp
|
||||
(subword-mode)
|
||||
(setq sentence-end-double-space nil)
|
||||
|
||||
(defun my/fill-or-unfill-paragraph (&optional unfill region)
|
||||
"Fill paragraph (or REGION). With the prefix argument UNFILL, fill it instead."
|
||||
(interactive (progn
|
||||
(barf-if-buffer-read-only)
|
||||
(list (if current-prefix-arg 'fill) t)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(fill-paragraph nil region)))
|
||||
|
||||
(bind-key "M-q" 'my/fill-or-unfill-paragraph)
|
||||
|
||||
(add-hook 'text-mode-hook 'turn-on-visual-line-mode)
|
||||
#+end_src
|
||||
** Docker
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package docker-compose-mode)
|
||||
#+end_src
|
||||
90
projects/infrastructure/docs/qubes-npu-setup.org
Normal file
@@ -0,0 +1,90 @@
|
||||
#+TITLE: Qubes NPU Setup - sys-ai
|
||||
#+AUTHOR: Amr
|
||||
#+CREATED: [2026-04-24 Fri]
|
||||
#+BEGIN_COMMENT
|
||||
Documentation for setting up sys-ai Qube with AMD Ryzen AI NPU for llama.cpp.
|
||||
#+END_COMMENT
|
||||
|
||||
* Hardware
|
||||
|
||||
- *Laptop:* Framework Laptop 13 (AMD)
|
||||
- *CPU:* AMD Ryzen AI 5 340 (6 cores, no SMT)
|
||||
- *NPU:* AMD XDNA2 (Strix Point) - c2:00.1 / dom0:00_08.2-00_00.1
|
||||
- *RAM:* 96GB total
|
||||
|
||||
* Current Progress
|
||||
|
||||
** DONE [X] Create sys-ai AppVM (HVM, 64GB, 2 vCPUs)
|
||||
|
||||
#+begin_src bash
|
||||
# Run in dom0
|
||||
qvm-create --label purple --property netvm=sys-firewall --property memory=65536 --property vcpus=2 --property virt_mode=HVM sys-ai
|
||||
#+end_src
|
||||
|
||||
** DONE [X] Attach NPU PCI device to sys-ai
|
||||
|
||||
#+begin_src bash
|
||||
# Run in dom0
|
||||
qvm-pci attach -o no-strict-reset=true sys-ai dom0:00_08.2-00_00.1 --persistent
|
||||
#+end_src
|
||||
|
||||
** TODO [ ] Fix repository configuration in sys-ai
|
||||
|
||||
*Status:* Package repositories missing in fedora-43-ai template. Fedora 43 uses DNF5 with different repo paths.
|
||||
|
||||
*Next Step:* Qubes OS templates typically get packages installed via `qubes-vm-update` or dom0 commands. Try the Qubes way to install packages.
|
||||
|
||||
** TODO [ ] Verify NPU is accessible inside sys-ai
|
||||
|
||||
#+begin_src bash
|
||||
# Install pciutils
|
||||
sudo dnf install pciutils
|
||||
|
||||
# Check NPU is visible
|
||||
lspci | grep -i neural
|
||||
#+end_src
|
||||
|
||||
** TODO [ ] Install AMD NPU drivers in sys-ai
|
||||
|
||||
#+begin_src bash
|
||||
# Enable Copr repository
|
||||
sudo dnf copr enable xanderlent/amd-npu-driver
|
||||
|
||||
# Install drivers
|
||||
sudo dnf install xrt xdna-driver tcsh
|
||||
|
||||
# Setup environment
|
||||
source /usr/xrt/setup.sh
|
||||
|
||||
# Verify NPU detection
|
||||
xrt-smi examine
|
||||
#+end_src
|
||||
|
||||
** TODO [ ] Build llama.cpp with AMD XDNA2 NPU backend
|
||||
|
||||
#+begin_src bash
|
||||
# Install build dependencies
|
||||
sudo dnf install cmake gcc-c++ python3.11 git
|
||||
|
||||
# Clone NPU fork
|
||||
git clone https://github.com/BrandedTamarasu-glitch/OllamaAMDNPU.git
|
||||
cd OllamaAMDNPU
|
||||
|
||||
# Build with NPU backend
|
||||
cmake -B build -DGGML_XDNA=ON -DGGML_BACKEND_DL=ON -DBUILD_SHARED_LIBS=ON
|
||||
cmake --build build --parallel
|
||||
#+end_src
|
||||
|
||||
** TODO [ ] Download model and test inference
|
||||
|
||||
#+begin_src bash
|
||||
# Download GGUF model (Qwen3 1B or 3B quantized)
|
||||
# ... model download command ...
|
||||
|
||||
# Run with NPU offload
|
||||
./build/bin/llama-cli -m model.gguf -p "Hello" -n 256 --npu-split 1
|
||||
#+end_src
|
||||
|
||||
* Next Step
|
||||
|
||||
Run the repository fix commands from the "Fix repository" step above.
|
||||
@@ -36,5 +36,5 @@ See the actionable tasks for this project in [[file:../../gtd.org::*Lisp Machine
|
||||
|
||||
* Links
|
||||
|
||||
- [[file:../org-agent/][Orchestration: org-agent Microkernel]]
|
||||
- [[file:../opencortex/][Orchestration: opencortex Microkernel]]
|
||||
- [[file:../agora/][Social Layer: Agora Protocol]]
|
||||
|
||||
1
projects/opencortex
Submodule
1
projects/opencortex-contrib
Submodule
1757
quicklisp.lisp
Normal file
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 197 KiB |
0
skills.org
Normal file
@@ -1,355 +0,0 @@
|
||||
#+TITLE: LLM Fleet Dashboard
|
||||
#+author: Sol (Agent)
|
||||
|
||||
* Model Fleet
|
||||
|
||||
| Provider | Model ID | Context |
|
||||
|------------+---------------------------------------------------------------+---------|
|
||||
| OpenRouter | google/gemma-4-26b-a4b-it | 262144 |
|
||||
| OpenRouter | google/gemma-4-31b-it | 262144 |
|
||||
| OpenRouter | qwen/qwen3.6-plus:free | 1000000 |
|
||||
| OpenRouter | z-ai/glm-5v-turbo | 202752 |
|
||||
| OpenRouter | arcee-ai/trinity-large-thinking | 262144 |
|
||||
| OpenRouter | x-ai/grok-4.20-multi-agent | 2000000 |
|
||||
| OpenRouter | x-ai/grok-4.20 | 2000000 |
|
||||
| OpenRouter | google/lyria-3-pro-preview | 1048576 |
|
||||
| OpenRouter | google/lyria-3-clip-preview | 1048576 |
|
||||
| OpenRouter | kwaipilot/kat-coder-pro-v2 | 256000 |
|
||||
| OpenRouter | rekaai/reka-edge | 16384 |
|
||||
| OpenRouter | xiaomi/mimo-v2-omni | 262144 |
|
||||
| OpenRouter | xiaomi/mimo-v2-pro | 1048576 |
|
||||
| OpenRouter | minimax/minimax-m2.7 | 204800 |
|
||||
| OpenRouter | openai/gpt-5.4-nano | 400000 |
|
||||
| OpenRouter | openai/gpt-5.4-mini | 400000 |
|
||||
| OpenRouter | mistralai/mistral-small-2603 | 262144 |
|
||||
| OpenRouter | z-ai/glm-5-turbo | 202752 |
|
||||
| OpenRouter | nvidia/nemotron-3-super-120b-a12b:free | 262144 |
|
||||
| OpenRouter | nvidia/nemotron-3-super-120b-a12b | 262144 |
|
||||
| OpenRouter | bytedance-seed/seed-2.0-lite | 262144 |
|
||||
| OpenRouter | qwen/qwen3.5-9b | 256000 |
|
||||
| OpenRouter | openai/gpt-5.4-pro | 1050000 |
|
||||
| OpenRouter | openai/gpt-5.4 | 1050000 |
|
||||
| OpenRouter | inception/mercury-2 | 128000 |
|
||||
| OpenRouter | openai/gpt-5.3-chat | 128000 |
|
||||
| OpenRouter | google/gemini-3.1-flash-lite-preview | 1048576 |
|
||||
| OpenRouter | bytedance-seed/seed-2.0-mini | 262144 |
|
||||
| OpenRouter | google/gemini-3.1-flash-image-preview | 65536 |
|
||||
| OpenRouter | qwen/qwen3.5-35b-a3b | 262144 |
|
||||
| OpenRouter | qwen/qwen3.5-27b | 262144 |
|
||||
| OpenRouter | qwen/qwen3.5-122b-a10b | 262144 |
|
||||
| OpenRouter | qwen/qwen3.5-flash-02-23 | 1000000 |
|
||||
| OpenRouter | liquid/lfm-2-24b-a2b | 32768 |
|
||||
| OpenRouter | google/gemini-3.1-pro-preview-customtools | 1048576 |
|
||||
| OpenRouter | openai/gpt-5.3-codex | 400000 |
|
||||
| OpenRouter | aion-labs/aion-2.0 | 131072 |
|
||||
| OpenRouter | google/gemini-3.1-pro-preview | 1048576 |
|
||||
| OpenRouter | anthropic/claude-sonnet-4.6 | 1000000 |
|
||||
| OpenRouter | qwen/qwen3.5-plus-02-15 | 1000000 |
|
||||
| OpenRouter | qwen/qwen3.5-397b-a17b | 262144 |
|
||||
| OpenRouter | minimax/minimax-m2.5:free | 196608 |
|
||||
| OpenRouter | minimax/minimax-m2.5 | 196608 |
|
||||
| OpenRouter | z-ai/glm-5 | 80000 |
|
||||
| OpenRouter | qwen/qwen3-max-thinking | 262144 |
|
||||
| OpenRouter | anthropic/claude-opus-4.6 | 1000000 |
|
||||
| OpenRouter | qwen/qwen3-coder-next | 262144 |
|
||||
| OpenRouter | openrouter/free | 200000 |
|
||||
| OpenRouter | stepfun/step-3.5-flash:free | 256000 |
|
||||
| OpenRouter | stepfun/step-3.5-flash | 262144 |
|
||||
| OpenRouter | arcee-ai/trinity-large-preview:free | 131000 |
|
||||
| OpenRouter | moonshotai/kimi-k2.5 | 262144 |
|
||||
| OpenRouter | upstage/solar-pro-3 | 128000 |
|
||||
| OpenRouter | minimax/minimax-m2-her | 65536 |
|
||||
| OpenRouter | writer/palmyra-x5 | 1040000 |
|
||||
| OpenRouter | liquid/lfm-2.5-1.2b-thinking:free | 32768 |
|
||||
| OpenRouter | liquid/lfm-2.5-1.2b-instruct:free | 32768 |
|
||||
| OpenRouter | openai/gpt-audio | 128000 |
|
||||
| OpenRouter | openai/gpt-audio-mini | 128000 |
|
||||
| OpenRouter | z-ai/glm-4.7-flash | 202752 |
|
||||
| OpenRouter | openai/gpt-5.2-codex | 400000 |
|
||||
| OpenRouter | allenai/olmo-3.1-32b-instruct | 65536 |
|
||||
| OpenRouter | bytedance-seed/seed-1.6-flash | 262144 |
|
||||
| OpenRouter | bytedance-seed/seed-1.6 | 262144 |
|
||||
| OpenRouter | minimax/minimax-m2.1 | 196608 |
|
||||
| OpenRouter | z-ai/glm-4.7 | 202752 |
|
||||
| OpenRouter | google/gemini-3-flash-preview | 1048576 |
|
||||
| OpenRouter | mistralai/mistral-small-creative | 32768 |
|
||||
| OpenRouter | xiaomi/mimo-v2-flash | 262144 |
|
||||
| OpenRouter | nvidia/nemotron-3-nano-30b-a3b:free | 256000 |
|
||||
| OpenRouter | nvidia/nemotron-3-nano-30b-a3b | 262144 |
|
||||
| OpenRouter | openai/gpt-5.2-chat | 128000 |
|
||||
| OpenRouter | openai/gpt-5.2-pro | 400000 |
|
||||
| OpenRouter | openai/gpt-5.2 | 400000 |
|
||||
| OpenRouter | mistralai/devstral-2512 | 262144 |
|
||||
| OpenRouter | relace/relace-search | 256000 |
|
||||
| OpenRouter | z-ai/glm-4.6v | 131072 |
|
||||
| OpenRouter | nex-agi/deepseek-v3.1-nex-n1 | 131072 |
|
||||
| OpenRouter | essentialai/rnj-1-instruct | 32768 |
|
||||
| OpenRouter | openrouter/bodybuilder | 128000 |
|
||||
| OpenRouter | openai/gpt-5.1-codex-max | 400000 |
|
||||
| OpenRouter | amazon/nova-2-lite-v1 | 1000000 |
|
||||
| OpenRouter | mistralai/ministral-14b-2512 | 262144 |
|
||||
| OpenRouter | mistralai/ministral-8b-2512 | 262144 |
|
||||
| OpenRouter | mistralai/ministral-3b-2512 | 131072 |
|
||||
| OpenRouter | mistralai/mistral-large-2512 | 262144 |
|
||||
| OpenRouter | arcee-ai/trinity-mini:free | 131072 |
|
||||
| OpenRouter | arcee-ai/trinity-mini | 131072 |
|
||||
| OpenRouter | deepseek/deepseek-v3.2-speciale | 163840 |
|
||||
| OpenRouter | deepseek/deepseek-v3.2 | 163840 |
|
||||
| OpenRouter | prime-intellect/intellect-3 | 131072 |
|
||||
| OpenRouter | anthropic/claude-opus-4.5 | 200000 |
|
||||
| OpenRouter | allenai/olmo-3-32b-think | 65536 |
|
||||
| OpenRouter | google/gemini-3-pro-image-preview | 65536 |
|
||||
| OpenRouter | x-ai/grok-4.1-fast | 2000000 |
|
||||
| OpenRouter | deepcogito/cogito-v2.1-671b | 128000 |
|
||||
| OpenRouter | openai/gpt-5.1 | 400000 |
|
||||
| OpenRouter | openai/gpt-5.1-chat | 128000 |
|
||||
| OpenRouter | openai/gpt-5.1-codex | 400000 |
|
||||
| OpenRouter | openai/gpt-5.1-codex-mini | 400000 |
|
||||
| OpenRouter | moonshotai/kimi-k2-thinking | 131072 |
|
||||
| OpenRouter | amazon/nova-premier-v1 | 1000000 |
|
||||
| OpenRouter | perplexity/sonar-pro-search | 200000 |
|
||||
| OpenRouter | mistralai/voxtral-small-24b-2507 | 32000 |
|
||||
| OpenRouter | openai/gpt-oss-safeguard-20b | 131072 |
|
||||
| OpenRouter | nvidia/nemotron-nano-12b-v2-vl:free | 128000 |
|
||||
| OpenRouter | nvidia/nemotron-nano-12b-v2-vl | 131072 |
|
||||
| OpenRouter | minimax/minimax-m2 | 196608 |
|
||||
| OpenRouter | qwen/qwen3-vl-32b-instruct | 131072 |
|
||||
| OpenRouter | ibm-granite/granite-4.0-h-micro | 131000 |
|
||||
| OpenRouter | openai/gpt-5-image-mini | 400000 |
|
||||
| OpenRouter | anthropic/claude-haiku-4.5 | 200000 |
|
||||
| OpenRouter | qwen/qwen3-vl-8b-thinking | 131072 |
|
||||
| OpenRouter | qwen/qwen3-vl-8b-instruct | 131072 |
|
||||
| OpenRouter | openai/gpt-5-image | 400000 |
|
||||
| OpenRouter | openai/o3-deep-research | 200000 |
|
||||
| OpenRouter | openai/o4-mini-deep-research | 200000 |
|
||||
| OpenRouter | nvidia/llama-3.3-nemotron-super-49b-v1.5 | 131072 |
|
||||
| OpenRouter | baidu/ernie-4.5-21b-a3b-thinking | 131072 |
|
||||
| OpenRouter | google/gemini-2.5-flash-image | 32768 |
|
||||
| OpenRouter | qwen/qwen3-vl-30b-a3b-thinking | 131072 |
|
||||
| OpenRouter | qwen/qwen3-vl-30b-a3b-instruct | 131072 |
|
||||
| OpenRouter | openai/gpt-5-pro | 400000 |
|
||||
| OpenRouter | z-ai/glm-4.6 | 204800 |
|
||||
| OpenRouter | anthropic/claude-sonnet-4.5 | 1000000 |
|
||||
| OpenRouter | deepseek/deepseek-v3.2-exp | 163840 |
|
||||
| OpenRouter | thedrummer/cydonia-24b-v4.1 | 131072 |
|
||||
| OpenRouter | relace/relace-apply-3 | 256000 |
|
||||
| OpenRouter | google/gemini-2.5-flash-lite-preview-09-2025 | 1048576 |
|
||||
| OpenRouter | qwen/qwen3-vl-235b-a22b-thinking | 131072 |
|
||||
| OpenRouter | qwen/qwen3-vl-235b-a22b-instruct | 262144 |
|
||||
| OpenRouter | qwen/qwen3-max | 262144 |
|
||||
| OpenRouter | qwen/qwen3-coder-plus | 1000000 |
|
||||
| OpenRouter | openai/gpt-5-codex | 400000 |
|
||||
| OpenRouter | deepseek/deepseek-v3.1-terminus | 163840 |
|
||||
| OpenRouter | x-ai/grok-4-fast | 2000000 |
|
||||
| OpenRouter | alibaba/tongyi-deepresearch-30b-a3b | 131072 |
|
||||
| OpenRouter | qwen/qwen3-coder-flash | 1000000 |
|
||||
| OpenRouter | qwen/qwen3-next-80b-a3b-thinking | 131072 |
|
||||
| OpenRouter | qwen/qwen3-next-80b-a3b-instruct:free | 262144 |
|
||||
| OpenRouter | qwen/qwen3-next-80b-a3b-instruct | 262144 |
|
||||
| OpenRouter | meituan/longcat-flash-chat | 131072 |
|
||||
| OpenRouter | qwen/qwen-plus-2025-07-28:thinking | 1000000 |
|
||||
| OpenRouter | qwen/qwen-plus-2025-07-28 | 1000000 |
|
||||
| OpenRouter | nvidia/nemotron-nano-9b-v2:free | 128000 |
|
||||
| OpenRouter | nvidia/nemotron-nano-9b-v2 | 131072 |
|
||||
| OpenRouter | moonshotai/kimi-k2-0905 | 131072 |
|
||||
| OpenRouter | qwen/qwen3-30b-a3b-thinking-2507 | 131072 |
|
||||
| OpenRouter | x-ai/grok-code-fast-1 | 256000 |
|
||||
| OpenRouter | nousresearch/hermes-4-70b | 131072 |
|
||||
| OpenRouter | nousresearch/hermes-4-405b | 131072 |
|
||||
| OpenRouter | deepseek/deepseek-chat-v3.1 | 32768 |
|
||||
| OpenRouter | openai/gpt-4o-audio-preview | 128000 |
|
||||
| OpenRouter | mistralai/mistral-medium-3.1 | 131072 |
|
||||
| OpenRouter | baidu/ernie-4.5-21b-a3b | 120000 |
|
||||
| OpenRouter | baidu/ernie-4.5-vl-28b-a3b | 30000 |
|
||||
| OpenRouter | z-ai/glm-4.5v | 65536 |
|
||||
| OpenRouter | ai21/jamba-large-1.7 | 256000 |
|
||||
| OpenRouter | openai/gpt-5-chat | 128000 |
|
||||
| OpenRouter | openai/gpt-5 | 400000 |
|
||||
| OpenRouter | openai/gpt-5-mini | 400000 |
|
||||
| OpenRouter | openai/gpt-5-nano | 400000 |
|
||||
| OpenRouter | openai/gpt-oss-120b:free | 131072 |
|
||||
| OpenRouter | openai/gpt-oss-120b | 131072 |
|
||||
| OpenRouter | openai/gpt-oss-20b:free | 131072 |
|
||||
| OpenRouter | openai/gpt-oss-20b | 131072 |
|
||||
| OpenRouter | anthropic/claude-opus-4.1 | 200000 |
|
||||
| OpenRouter | mistralai/codestral-2508 | 256000 |
|
||||
| OpenRouter | qwen/qwen3-coder-30b-a3b-instruct | 160000 |
|
||||
| OpenRouter | qwen/qwen3-30b-a3b-instruct-2507 | 262144 |
|
||||
| OpenRouter | z-ai/glm-4.5 | 131072 |
|
||||
| OpenRouter | z-ai/glm-4.5-air:free | 131072 |
|
||||
| OpenRouter | z-ai/glm-4.5-air | 131072 |
|
||||
| OpenRouter | qwen/qwen3-235b-a22b-thinking-2507 | 131072 |
|
||||
| OpenRouter | z-ai/glm-4-32b | 128000 |
|
||||
| OpenRouter | qwen/qwen3-coder:free | 262000 |
|
||||
| OpenRouter | qwen/qwen3-coder | 262144 |
|
||||
| OpenRouter | bytedance/ui-tars-1.5-7b | 128000 |
|
||||
| OpenRouter | google/gemini-2.5-flash-lite | 1048576 |
|
||||
| OpenRouter | qwen/qwen3-235b-a22b-2507 | 262144 |
|
||||
| OpenRouter | switchpoint/router | 131072 |
|
||||
| OpenRouter | moonshotai/kimi-k2 | 131072 |
|
||||
| OpenRouter | mistralai/devstral-medium | 131072 |
|
||||
| OpenRouter | mistralai/devstral-small | 131072 |
|
||||
| OpenRouter | cognitivecomputations/dolphin-mistral-24b-venice-edition:free | 32768 |
|
||||
| OpenRouter | x-ai/grok-4 | 256000 |
|
||||
| OpenRouter | google/gemma-3n-e2b-it:free | 8192 |
|
||||
| OpenRouter | tencent/hunyuan-a13b-instruct | 131072 |
|
||||
| OpenRouter | tngtech/deepseek-r1t2-chimera | 163840 |
|
||||
| OpenRouter | morph/morph-v3-large | 262144 |
|
||||
| OpenRouter | morph/morph-v3-fast | 81920 |
|
||||
| OpenRouter | baidu/ernie-4.5-vl-424b-a47b | 123000 |
|
||||
| OpenRouter | baidu/ernie-4.5-300b-a47b | 123000 |
|
||||
| OpenRouter | inception/mercury | 128000 |
|
||||
| OpenRouter | mistralai/mistral-small-3.2-24b-instruct | 128000 |
|
||||
| OpenRouter | minimax/minimax-m1 | 1000000 |
|
||||
| OpenRouter | google/gemini-2.5-flash | 1048576 |
|
||||
| OpenRouter | google/gemini-2.5-pro | 1048576 |
|
||||
| OpenRouter | openai/o3-pro | 200000 |
|
||||
| OpenRouter | x-ai/grok-3-mini | 131072 |
|
||||
| OpenRouter | x-ai/grok-3 | 131072 |
|
||||
| OpenRouter | google/gemini-2.5-pro-preview | 1048576 |
|
||||
| OpenRouter | deepseek/deepseek-r1-0528 | 163840 |
|
||||
| OpenRouter | anthropic/claude-opus-4 | 200000 |
|
||||
| OpenRouter | anthropic/claude-sonnet-4 | 200000 |
|
||||
| OpenRouter | google/gemma-3n-e4b-it:free | 8192 |
|
||||
| OpenRouter | google/gemma-3n-e4b-it | 32768 |
|
||||
| OpenRouter | mistralai/mistral-medium-3 | 131072 |
|
||||
| OpenRouter | google/gemini-2.5-pro-preview-05-06 | 1048576 |
|
||||
| OpenRouter | arcee-ai/spotlight | 131072 |
|
||||
| OpenRouter | arcee-ai/maestro-reasoning | 131072 |
|
||||
| OpenRouter | arcee-ai/virtuoso-large | 131072 |
|
||||
| OpenRouter | arcee-ai/coder-large | 32768 |
|
||||
| OpenRouter | inception/mercury-coder | 128000 |
|
||||
| OpenRouter | meta-llama/llama-guard-4-12b | 163840 |
|
||||
| OpenRouter | qwen/qwen3-30b-a3b | 40960 |
|
||||
| OpenRouter | qwen/qwen3-8b | 40960 |
|
||||
| OpenRouter | qwen/qwen3-14b | 40960 |
|
||||
| OpenRouter | qwen/qwen3-32b | 40960 |
|
||||
| OpenRouter | qwen/qwen3-235b-a22b | 131072 |
|
||||
| OpenRouter | openai/o4-mini-high | 200000 |
|
||||
| OpenRouter | openai/o3 | 200000 |
|
||||
| OpenRouter | openai/o4-mini | 200000 |
|
||||
| OpenRouter | qwen/qwen2.5-coder-7b-instruct | 32768 |
|
||||
| OpenRouter | openai/gpt-4.1 | 1047576 |
|
||||
| OpenRouter | openai/gpt-4.1-mini | 1047576 |
|
||||
| OpenRouter | openai/gpt-4.1-nano | 1047576 |
|
||||
| OpenRouter | eleutherai/llemma_7b | 4096 |
|
||||
| OpenRouter | alfredpros/codellama-7b-instruct-solidity | 4096 |
|
||||
| OpenRouter | x-ai/grok-3-mini-beta | 131072 |
|
||||
| OpenRouter | x-ai/grok-3-beta | 131072 |
|
||||
| OpenRouter | nvidia/llama-3.1-nemotron-ultra-253b-v1 | 131072 |
|
||||
| OpenRouter | meta-llama/llama-4-maverick | 1048576 |
|
||||
| OpenRouter | meta-llama/llama-4-scout | 327680 |
|
||||
| OpenRouter | qwen/qwen2.5-vl-32b-instruct | 128000 |
|
||||
| OpenRouter | deepseek/deepseek-chat-v3-0324 | 163840 |
|
||||
| OpenRouter | openai/o1-pro | 200000 |
|
||||
| OpenRouter | mistralai/mistral-small-3.1-24b-instruct | 131072 |
|
||||
| OpenRouter | allenai/olmo-2-0325-32b-instruct | 128000 |
|
||||
| OpenRouter | google/gemma-3-4b-it:free | 32768 |
|
||||
| OpenRouter | google/gemma-3-4b-it | 131072 |
|
||||
| OpenRouter | google/gemma-3-12b-it:free | 32768 |
|
||||
| OpenRouter | google/gemma-3-12b-it | 131072 |
|
||||
| OpenRouter | cohere/command-a | 256000 |
|
||||
| OpenRouter | openai/gpt-4o-mini-search-preview | 128000 |
|
||||
| OpenRouter | openai/gpt-4o-search-preview | 128000 |
|
||||
| OpenRouter | rekaai/reka-flash-3 | 65536 |
|
||||
| OpenRouter | google/gemma-3-27b-it:free | 131072 |
|
||||
| OpenRouter | google/gemma-3-27b-it | 131072 |
|
||||
| OpenRouter | thedrummer/skyfall-36b-v2 | 32768 |
|
||||
| OpenRouter | perplexity/sonar-reasoning-pro | 128000 |
|
||||
| OpenRouter | perplexity/sonar-pro | 200000 |
|
||||
| OpenRouter | perplexity/sonar-deep-research | 128000 |
|
||||
| OpenRouter | qwen/qwq-32b | 131072 |
|
||||
| OpenRouter | google/gemini-2.0-flash-lite-001 | 1048576 |
|
||||
| OpenRouter | anthropic/claude-3.7-sonnet | 200000 |
|
||||
| OpenRouter | anthropic/claude-3.7-sonnet:thinking | 200000 |
|
||||
| OpenRouter | mistralai/mistral-saba | 32768 |
|
||||
| OpenRouter | meta-llama/llama-guard-3-8b | 131072 |
|
||||
| OpenRouter | openai/o3-mini-high | 200000 |
|
||||
| OpenRouter | google/gemini-2.0-flash-001 | 1048576 |
|
||||
| OpenRouter | qwen/qwen-vl-plus | 131072 |
|
||||
| OpenRouter | aion-labs/aion-1.0 | 131072 |
|
||||
| OpenRouter | aion-labs/aion-1.0-mini | 131072 |
|
||||
| OpenRouter | aion-labs/aion-rp-llama-3.1-8b | 32768 |
|
||||
| OpenRouter | qwen/qwen-vl-max | 131072 |
|
||||
| OpenRouter | qwen/qwen-turbo | 131072 |
|
||||
| OpenRouter | qwen/qwen2.5-vl-72b-instruct | 32768 |
|
||||
| OpenRouter | qwen/qwen-plus | 1000000 |
|
||||
| OpenRouter | qwen/qwen-max | 32768 |
|
||||
| OpenRouter | openai/o3-mini | 200000 |
|
||||
| OpenRouter | mistralai/mistral-small-24b-instruct-2501 | 32768 |
|
||||
| OpenRouter | deepseek/deepseek-r1-distill-qwen-32b | 32768 |
|
||||
| OpenRouter | perplexity/sonar | 127072 |
|
||||
| OpenRouter | deepseek/deepseek-r1-distill-llama-70b | 131072 |
|
||||
| OpenRouter | deepseek/deepseek-r1 | 64000 |
|
||||
| OpenRouter | minimax/minimax-01 | 1000192 |
|
||||
| OpenRouter | microsoft/phi-4 | 16384 |
|
||||
| OpenRouter | sao10k/l3.1-70b-hanami-x1 | 16000 |
|
||||
| OpenRouter | deepseek/deepseek-chat | 163840 |
|
||||
| OpenRouter | sao10k/l3.3-euryale-70b | 131072 |
|
||||
| OpenRouter | openai/o1 | 200000 |
|
||||
| OpenRouter | cohere/command-r7b-12-2024 | 128000 |
|
||||
| OpenRouter | meta-llama/llama-3.3-70b-instruct:free | 65536 |
|
||||
| OpenRouter | meta-llama/llama-3.3-70b-instruct | 131072 |
|
||||
| OpenRouter | amazon/nova-lite-v1 | 300000 |
|
||||
| OpenRouter | amazon/nova-micro-v1 | 128000 |
|
||||
| OpenRouter | amazon/nova-pro-v1 | 300000 |
|
||||
| OpenRouter | openai/gpt-4o-2024-11-20 | 128000 |
|
||||
| OpenRouter | mistralai/mistral-large-2411 | 131072 |
|
||||
| OpenRouter | mistralai/mistral-large-2407 | 131072 |
|
||||
| OpenRouter | mistralai/pixtral-large-2411 | 131072 |
|
||||
| OpenRouter | qwen/qwen-2.5-coder-32b-instruct | 32768 |
|
||||
| OpenRouter | thedrummer/unslopnemo-12b | 32768 |
|
||||
| OpenRouter | anthropic/claude-3.5-haiku | 200000 |
|
||||
| OpenRouter | anthracite-org/magnum-v4-72b | 16384 |
|
||||
| OpenRouter | qwen/qwen-2.5-7b-instruct | 32768 |
|
||||
| OpenRouter | nvidia/llama-3.1-nemotron-70b-instruct | 131072 |
|
||||
| OpenRouter | inflection/inflection-3-pi | 8000 |
|
||||
| OpenRouter | inflection/inflection-3-productivity | 8000 |
|
||||
| OpenRouter | thedrummer/rocinante-12b | 32768 |
|
||||
| OpenRouter | meta-llama/llama-3.2-3b-instruct:free | 131072 |
|
||||
| OpenRouter | meta-llama/llama-3.2-3b-instruct | 80000 |
|
||||
| OpenRouter | meta-llama/llama-3.2-1b-instruct | 60000 |
|
||||
| OpenRouter | meta-llama/llama-3.2-11b-vision-instruct | 131072 |
|
||||
| OpenRouter | qwen/qwen-2.5-72b-instruct | 32768 |
|
||||
| OpenRouter | cohere/command-r-08-2024 | 128000 |
|
||||
| OpenRouter | cohere/command-r-plus-08-2024 | 128000 |
|
||||
| OpenRouter | sao10k/l3.1-euryale-70b | 131072 |
|
||||
| OpenRouter | nousresearch/hermes-3-llama-3.1-70b | 131072 |
|
||||
| OpenRouter | nousresearch/hermes-3-llama-3.1-405b:free | 131072 |
|
||||
| OpenRouter | nousresearch/hermes-3-llama-3.1-405b | 131072 |
|
||||
| OpenRouter | sao10k/l3-lunaris-8b | 8192 |
|
||||
| OpenRouter | openai/gpt-4o-2024-08-06 | 128000 |
|
||||
| OpenRouter | meta-llama/llama-3.1-8b-instruct | 16384 |
|
||||
| OpenRouter | meta-llama/llama-3.1-70b-instruct | 131072 |
|
||||
| OpenRouter | mistralai/mistral-nemo | 131072 |
|
||||
| OpenRouter | openai/gpt-4o-mini-2024-07-18 | 128000 |
|
||||
| OpenRouter | openai/gpt-4o-mini | 128000 |
|
||||
| OpenRouter | google/gemma-2-27b-it | 8192 |
|
||||
| OpenRouter | google/gemma-2-9b-it | 8192 |
|
||||
| OpenRouter | sao10k/l3-euryale-70b | 8192 |
|
||||
| OpenRouter | nousresearch/hermes-2-pro-llama-3-8b | 8192 |
|
||||
| OpenRouter | openai/gpt-4o | 128000 |
|
||||
| OpenRouter | openai/gpt-4o:extended | 128000 |
|
||||
| OpenRouter | openai/gpt-4o-2024-05-13 | 128000 |
|
||||
| OpenRouter | meta-llama/llama-3-8b-instruct | 8192 |
|
||||
| OpenRouter | meta-llama/llama-3-70b-instruct | 8192 |
|
||||
| OpenRouter | mistralai/mixtral-8x22b-instruct | 65536 |
|
||||
| OpenRouter | microsoft/wizardlm-2-8x22b | 65535 |
|
||||
| OpenRouter | openai/gpt-4-turbo | 128000 |
|
||||
| OpenRouter | anthropic/claude-3-haiku | 200000 |
|
||||
| OpenRouter | mistralai/mistral-large | 128000 |
|
||||
| OpenRouter | openai/gpt-3.5-turbo-0613 | 4095 |
|
||||
| OpenRouter | openai/gpt-4-turbo-preview | 128000 |
|
||||
| OpenRouter | mistralai/mixtral-8x7b-instruct | 32768 |
|
||||
| OpenRouter | alpindale/goliath-120b | 6144 |
|
||||
| OpenRouter | openrouter/auto | 2000000 |
|
||||
| OpenRouter | openai/gpt-4-1106-preview | 128000 |
|
||||
| OpenRouter | mistralai/mistral-7b-instruct-v0.1 | 2824 |
|
||||
| OpenRouter | openai/gpt-3.5-turbo-instruct | 4095 |
|
||||
| OpenRouter | openai/gpt-3.5-turbo-16k | 16385 |
|
||||
| OpenRouter | mancer/weaver | 8000 |
|
||||
| OpenRouter | undi95/remm-slerp-l2-13b | 6144 |
|
||||
| OpenRouter | gryphe/mythomax-l2-13b | 4096 |
|
||||
| OpenRouter | openai/gpt-4-0314 | 8191 |
|
||||
| OpenRouter | openai/gpt-3.5-turbo | 16385 |
|
||||
| OpenRouter | openai/gpt-4 | 8191 |
|
||||
@@ -1 +0,0 @@
|
||||
user@amr.3392:1775060113
|
||||
@@ -2124,42 +2124,42 @@ On package.el, it is a manual install so far
|
||||
(use-package chemtable)
|
||||
#+end_src
|
||||
|
||||
** Org-agent
|
||||
** OpenCortex
|
||||
#+begin_src elisp
|
||||
;; 1. Manually add the path to your load-path
|
||||
(add-to-list 'load-path "~/memex/projects/org-agent/src")
|
||||
(add-to-list 'load-path "~/memex/projects/opencortex/src")
|
||||
|
||||
;; 2. Explicitly load the file
|
||||
(require 'org-agent)
|
||||
(require 'opencortex)
|
||||
|
||||
;; 3. Configure the variables AFTER the package is loaded
|
||||
(setq org-agent-host "10.10.10.201")
|
||||
(setq org-agent-port 9105)
|
||||
(setq opencortex-host "10.10.10.201")
|
||||
(setq opencortex-port 9105)
|
||||
|
||||
(setq org-agent-executable-path nil)
|
||||
(setq opencortex-executable-path nil)
|
||||
;; 4. (Optional) Re-enable use-package features if you prefer
|
||||
(use-package org-agent
|
||||
(use-package opencortex
|
||||
:straight nil
|
||||
:commands (org-agent-connect org-agent-disconnect))
|
||||
(message "org-agent: Actuator manually verified at %s" org-agent-host)
|
||||
:commands (opencortex-connect opencortex-disconnect))
|
||||
(message "opencortex: Actuator manually verified at %s" opencortex-host)
|
||||
|
||||
|
||||
|
||||
;; (use-package org-agent
|
||||
;; (use-package opencortex
|
||||
;; :straight nil
|
||||
;; :load-path "~/memex/projects/org-agent/src" ;; Adjust this to your local clone path
|
||||
;; :commands (org-agent-connect org-agent-disconnect)
|
||||
;; :load-path "~/memex/projects/opencortex/src" ;; Adjust this to your local clone path
|
||||
;; :commands (opencortex-connect opencortex-disconnect)
|
||||
;; :init
|
||||
;; Remote connection settings
|
||||
;; (setq org-agent-host "10.10.10.43") ;; Your Docker server's IP
|
||||
;; (setq org-agent-port 9105) ;; Must match ORG_AGENT_DAEMON_PORT in .env
|
||||
;; (setq opencortex-host "10.10.10.43") ;; Your Docker server's IP
|
||||
;; (setq opencortex-port 9105) ;; Must match ORG_AGENT_DAEMON_PORT in .env
|
||||
|
||||
;; Optimization: Automatically connect when entering Org-mode (optional)
|
||||
;; :hook (org-mode . org-agent-connect)
|
||||
;; :hook (org-mode . opencortex-connect)
|
||||
;; :config
|
||||
;; Ensure Emacs is acting as a proper sensor
|
||||
;; (message "org-agent: Actuator configured for remote brain at %s"
|
||||
;; (org-agent-host))
|
||||
;; (message "opencortex: Actuator configured for remote brain at %s"
|
||||
;; (opencortex-host))
|
||||
;; )
|
||||
#+end_src
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 44 KiB |
@@ -1,120 +0,0 @@
|
||||
#+TITLE: AI Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* AI Settings
|
||||
|
||||
** Ellama
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
;; YOU DON'T NEED NONE OF THIS CODE FOR SIMPLE INSTALL
|
||||
;; IT IS AN EXAMPLE OF CUSTOMIZATION.
|
||||
(use-package ellama
|
||||
:init
|
||||
(require 'llm-openai)
|
||||
;; setup key bindings
|
||||
(setq ellama-keymap-prefix "C-c e")
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp ~/.emacs.d/custom.el :tangle yes
|
||||
(setopt ellama-providers
|
||||
'(
|
||||
;; Ollama Provider (added here with a name)
|
||||
("ollama" . (make-llm-ollama
|
||||
;; Consider a dedicated embedding model if gemma isn't ideal for it.
|
||||
:chat-model "gemma3:latest"
|
||||
:embedding-model "gemma3:latest" ; Or e.g., "nomic-embed-text"
|
||||
:default-chat-non-standard-params '(("num_ctx" . 8192))))
|
||||
|
||||
("openai" . (make-llm-openai
|
||||
:key (auth-source-pass-get "api-key" "www/openai.com/amr@gharbeia.net")
|
||||
:chat-model "gpt-4o"
|
||||
:embedding-model "text-embedding-3-large"))
|
||||
|
||||
("groq" . (make-llm-openai-compatible
|
||||
:url "https://api.groq.com/openai/v1"
|
||||
:key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net")
|
||||
;; Check Groq console for available models, these might change
|
||||
:chat-model "llama3-70b-8192" ; Example, verify on Groq
|
||||
:embedding-model "llama3-70b-8192")) ; Groq might not offer dedicated embedding models via this API
|
||||
))
|
||||
|
||||
;; --- Set Active Providers ---
|
||||
;; Choose your default provider from the list above by its name
|
||||
(setopt ellama-provider "ollama") ; Or "ollama", "openai", "groq"
|
||||
|
||||
;; You can specify different providers for different tasks if needed
|
||||
(setopt ellama-translation-provider "ollama")
|
||||
(setopt ellama-naming-provider "ollama")
|
||||
(setopt ellama-naming-scheme 'ellama-generate-name-by-llm)
|
||||
|
||||
(setq llm-debug t)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package ellama
|
||||
:ensure t
|
||||
:bind ("C-c e" . ellama)
|
||||
;; send last message in chat buffer with C-c C-c
|
||||
:hook (org-ctrl-c-ctrl-c-final . ellama-chat-send-last-message)
|
||||
:init (setopt ellama-auto-scroll t)
|
||||
:config
|
||||
;; show ellama context in header line in all buffers
|
||||
(ellama-context-header-line-global-mode +1)
|
||||
;; show ellama session id in header line in all buffers
|
||||
(ellama-session-header-line-global-mode +1))
|
||||
#+end_src
|
||||
|
||||
** GPTel
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package gptel)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq gptel-api-key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net"))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(gptel-make-openai "Groq" ;Any name you want
|
||||
:host "api.groq.com"
|
||||
:endpoint "/openai/v1/chat/completions"
|
||||
:stream t
|
||||
:key (auth-source-pass-get "api-key" "www/console.groq.com/groq@amr.gharbeia.net") ;can be a function that returns the key
|
||||
:models '(llama-3.1-70b-versatile
|
||||
llama-3.1-8b-instant
|
||||
llama3-70b-8192
|
||||
llama3-8b-8192
|
||||
mixtral-8x7b-32768
|
||||
gemma-7b-it))
|
||||
#+end_src
|
||||
|
||||
** Elisa
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package elisa
|
||||
:defer t
|
||||
:init
|
||||
(setopt elisa-limit 5)
|
||||
(require 'llm-ollama)
|
||||
(setopt elisa-embeddings-provider (make-llm-ollama :embedding-model "nomic-embed-text"))
|
||||
(setopt elisa-chat-provider (make-llm-ollama
|
||||
:chat-model "sskostyaev/openchat:8k-rag"
|
||||
:embedding-model "nomic-embed-text"))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Org-agent (Local Foundry)
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package org-agent
|
||||
:straight nil
|
||||
:load-path "~/.local/share/org-agent/src"
|
||||
:commands (org-agent-connect org-agent-disconnect)
|
||||
:init
|
||||
(setq org-agent-host "127.0.0.1")
|
||||
(setq org-agent-port 9105)
|
||||
(setq org-agent-executable-path "~/.local/share/org-agent/bin/org-agent-server")
|
||||
:config
|
||||
(message "org-agent: Local brain configured at %s" org-agent-executable-path))
|
||||
#+end_src
|
||||
@@ -1,165 +0,0 @@
|
||||
#+TITLE: Core Emacs Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Initialization Bootstrap
|
||||
|
||||
This section tangles directly to ~/.emacs to bootstrap the entire system.
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs
|
||||
;;; .emacs --- Global settings -*- lexical-binding: t; -*-
|
||||
|
||||
(setq gc-cons-threshold (* 500 1024 1024))
|
||||
(add-hook 'after-init-hook (lambda () (setq gc-cons-threshold (* 5 1024 1024))))
|
||||
|
||||
(setq straight-repository-branch "develop")
|
||||
|
||||
(eval-and-compile
|
||||
(defvar bootstrap-version)
|
||||
(let ((bootstrap-file
|
||||
(expand-file-name "straight/repos/straight.el/bootstrap.el"
|
||||
(or (bound-and-true-p straight-base-dir)
|
||||
user-emacs-directory)))
|
||||
(bootstrap-version 7))
|
||||
(unless (file-exists-p bootstrap-file)
|
||||
(with-current-buffer
|
||||
(url-retrieve-synchronously "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" 'silent 'inhibit-cookies)
|
||||
(goto-char (point-max))
|
||||
(eval-print-last-sexp)))
|
||||
(load bootstrap-file nil 'nomessage))
|
||||
|
||||
(straight-use-package 'use-package)
|
||||
(straight-use-package 'org))
|
||||
|
||||
(setq straight-use-package-by-default t)
|
||||
|
||||
(require 'ob-tangle)
|
||||
|
||||
;; Load the modular configuration starting from dotemacs.org
|
||||
(org-babel-load-file (expand-file-name "~/memex/system/dotemacs.org"))
|
||||
|
||||
(provide '.emacs)
|
||||
#+end_src
|
||||
|
||||
* Front matter
|
||||
|
||||
#+begin_src elisp
|
||||
;;; emacs-core.el --- Summary
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
|
||||
;; -*- lexical-binding: t; -*-
|
||||
#+end_src
|
||||
|
||||
* Garbage collector
|
||||
|
||||
Increase threshold to 500 MB to ease startup
|
||||
#+begin_src elisp
|
||||
(setq gc-cons-threshold (* 500 1024 1024))
|
||||
#+end_src
|
||||
|
||||
Decrease threshold to 5 MB after init
|
||||
#+begin_src elisp
|
||||
(add-hook 'after-init-hook (lambda () (setq gc-cons-threshold (* 5 1024 1024))))
|
||||
#+end_src
|
||||
|
||||
* Straight.el and use-package
|
||||
|
||||
Integrate use-package and straight
|
||||
#+begin_src elisp
|
||||
(setq straight-use-package-by-default t)
|
||||
(require 'use-package)
|
||||
(straight-use-package 'diminish)
|
||||
(require 'diminish)
|
||||
#+end_src
|
||||
|
||||
Make sure Org is installed (straight.el)
|
||||
#+begin_src elisp
|
||||
(unless (file-directory-p (expand-file-name "~/.emacs.d/straight/versions")) (make-directory (expand-file-name "~/.emacs.d/straight/versions") t))
|
||||
(use-package org)
|
||||
#+end_src
|
||||
|
||||
* Custom file
|
||||
|
||||
#+begin_src elisp
|
||||
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
|
||||
(when (file-exists-p custom-file) (load custom-file))
|
||||
#+end_src
|
||||
|
||||
* System information
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar my-laptop-p (equal (system-name) "lilitop"))
|
||||
(defvar my-server-p (and (equal (system-name) "localhost") (equal user-login-name "root")))
|
||||
(defvar my-phone-p (not (null (getenv "ANDROID_ROOT")))
|
||||
"If non-nil, GNU Emacs is running on Termux.")
|
||||
(when my-phone-p (defvar gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3"))
|
||||
(global-auto-revert-mode) ; simplifies syncing
|
||||
#+end_src
|
||||
|
||||
* Persistent history
|
||||
|
||||
#+begin_src elisp
|
||||
(savehist-mode)
|
||||
#+end_src
|
||||
|
||||
* Disable Syntax Checkers (Diagnostic)
|
||||
|
||||
#+begin_src elisp
|
||||
(when (fboundp 'flycheck-mode)
|
||||
(setq flycheck-global-modes nil)
|
||||
(global-flycheck-mode -1))
|
||||
(when (fboundp 'flymake-mode)
|
||||
(setq help-at-pt-display-when-idle t)
|
||||
;; Disable flymake in all buffers
|
||||
(add-hook 'find-file-hook (lambda () (flymake-mode -1))))
|
||||
#+end_src
|
||||
|
||||
* Backup and versioning
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package magit)
|
||||
#+end_src
|
||||
|
||||
* Personal information
|
||||
|
||||
#+begin_src elisp
|
||||
(setq user-full-name "Amr Gharbeia")
|
||||
(defvar email-address "amr@gharbeia.net")
|
||||
(defvar calendar-latitude 39.0)
|
||||
(defvar calendar-longitude -77.1)
|
||||
(defvar calendar-location-name "Washington, DC")
|
||||
(defvar calendar-time-zone -300)
|
||||
(defvar calendar-standard-time-zone-name "EST")
|
||||
(defvar calendar-daylight-time-zone-name "EDT")
|
||||
#+end_src
|
||||
|
||||
* Saving Emacs Sessions
|
||||
|
||||
Close frame when done
|
||||
#+begin_src elisp
|
||||
(add-hook 'server-done-hook (lambda () (delete-frame)))
|
||||
#+end_src
|
||||
|
||||
Save desktop session
|
||||
#+begin_src elisp
|
||||
(desktop-save-mode t)
|
||||
#+end_src
|
||||
|
||||
* Security
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package password-store)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package auth-source
|
||||
:config (auth-source-pass-enable)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* End matter
|
||||
|
||||
#+begin_src elisp
|
||||
(provide 'emacs-core)
|
||||
;;; emacs-core.el ends here
|
||||
#+end_src
|
||||
@@ -1,18 +0,0 @@
|
||||
#+TITLE: Early Init Configuration
|
||||
#+PROPERTY: header-args :tangle ~/.emacs.d/early-init.el
|
||||
|
||||
* early-init.el
|
||||
|
||||
For straight.el to pick up before package.el
|
||||
|
||||
#+begin_src elisp
|
||||
(setq package-enable-at-startup nil)
|
||||
#+end_src
|
||||
|
||||
* Run Emacs as a server
|
||||
|
||||
#+begin_src elisp
|
||||
(require 'server)
|
||||
(unless (server-running-p) (server-start))
|
||||
(defvar server-max-buffers 100)
|
||||
#+end_src
|
||||
@@ -1,166 +0,0 @@
|
||||
#+TITLE: GTD & Agenda Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Agenda
|
||||
|
||||
Basic agenda settings
|
||||
#+begin_src elisp
|
||||
(setq org-deadline-warning-days 7)
|
||||
(setq org-agenda-skip-additional-timestamps-same-entry t)
|
||||
(setq org-agenda-span 'fortnight)
|
||||
(setq org-agenda-tags-column 'auto)
|
||||
(setq org-agenda-skip-scheduled-if-deadline-is-shown t)
|
||||
#+end_src
|
||||
|
||||
Agenda files
|
||||
#+begin_src elisp
|
||||
(setq org-agenda-files (list
|
||||
(concat org-directory "/inbox.org")
|
||||
(concat org-directory "/gtd.org")
|
||||
(concat org-directory "/org-gtd-tasks.org")
|
||||
)
|
||||
)
|
||||
|
||||
#+end_src
|
||||
|
||||
Better agenda views
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package org-super-agenda)
|
||||
#+end_src
|
||||
|
||||
* To-do
|
||||
|
||||
Basic todo
|
||||
#+begin_src elisp
|
||||
(setq org-todo-keywords
|
||||
'(
|
||||
(sequence "TODO(t)" "NEXT(n)" "WAIT(w@/!)" "|" "DONE(d!)" "CNCL(c@)")
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-todo-keyword-faces
|
||||
'(
|
||||
("TODO" :foreground "red" :weight bold)
|
||||
("NEXT" :foreground "red" :weight bold)
|
||||
("WAIT" :foreground "yellow" :weight bold)
|
||||
("DONE" :foreground "green" :weight bold)
|
||||
("CNCL" :foreground "blue" :weight bold)
|
||||
)
|
||||
)
|
||||
|
||||
(setq org-enforce-todo-dependencies t)
|
||||
(setq org-tags-exclude-from-inheritance '("crypt" "!private"))
|
||||
#+end_src
|
||||
|
||||
Switch entry to 'DONE' when all subentries are done
|
||||
#+begin_src elisp
|
||||
(defun org-summary-todo (n-done n-not-done)
|
||||
"Switch entry to 'DONE' when all subentries are done, to 'TODO' otherwise.
|
||||
Uses N-DONE and N-NOT-DONE"
|
||||
(let (org-log-done org-log-states) ; turn off logging
|
||||
(org-todo (if (= n-not-done 0) "DONE" "TODO")
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; (add-hook 'org-after-todo-statistics-hook #'org-summary-todo)
|
||||
#+end_src
|
||||
|
||||
* Getting Things Done (GTD)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package f)
|
||||
(use-package dash)
|
||||
(use-package s)
|
||||
(use-package org-edna
|
||||
:config
|
||||
(setq org-edna-use-inheritance t)
|
||||
(org-edna-mode))
|
||||
|
||||
(use-package org-gtd
|
||||
:straight (org-gtd :type git :host github :repo "Trevoke/org-gtd.el")
|
||||
:demand t
|
||||
:init (setq org-gtd-update-ack "4.0.0")
|
||||
:config
|
||||
(setq org-gtd-keyword-mapping
|
||||
'((todo . "TODO")
|
||||
(next . "NEXT")
|
||||
(wait . "WAIT")
|
||||
(done . "DONE")
|
||||
(canceled . "CNCL")))
|
||||
(setq org-gtd-custom-node-paths
|
||||
(list (list "Actionable" (expand-file-name "~/memex/gtd.org") "Actions")
|
||||
(list "Legacy" (expand-file-name "~/memex/org-gtd-tasks.org") "Actions")
|
||||
(list "Projects" (expand-file-name "~/memex/gtd.org") "Projects")
|
||||
(list "Incubate" (expand-file-name "~/memex/gtd.org") "Incubate")))
|
||||
(org-gtd-mode)
|
||||
)
|
||||
|
||||
(global-set-key (kbd "C-c d c") #'org-gtd-capture)
|
||||
(global-set-key (kbd "C-c d e") #'org-gtd-engage)
|
||||
(global-set-key (kbd "C-c d p") #'org-gtd-process-inbox)
|
||||
(with-eval-after-load 'org-gtd
|
||||
(define-key org-gtd-clarify-map (kbd "C-c c") #'org-gtd-organize))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-gtd-directory org-directory)
|
||||
(setq org-gtd-organize-hooks '(org-gtd-set-area-of-focus))
|
||||
(setq org-gtd-areas-of-focus '(
|
||||
"Atoms"
|
||||
"Bits"
|
||||
"Cells"
|
||||
"Flags"
|
||||
"Business"
|
||||
"Wealth"
|
||||
"Learning"
|
||||
"Skills"
|
||||
"Privacy"
|
||||
"Archive"
|
||||
"Library"
|
||||
"Writing"
|
||||
"Health"
|
||||
"Home"
|
||||
"Family"
|
||||
"Social"
|
||||
"Egypt"
|
||||
)
|
||||
)
|
||||
(setq org-gtd-clarify-show-horizons 'right)
|
||||
#+end_src
|
||||
|
||||
Logging
|
||||
#+begin_src elisp
|
||||
(setq org-log-into-drawer "LOGBOOK")
|
||||
#+end_src
|
||||
|
||||
Clocking work in drawer
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-clock-into-drawer t)
|
||||
#+end_src
|
||||
|
||||
Habits
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-habit-graph-column 80)
|
||||
(setq org-habit-show-habits-only-for-today nil)
|
||||
#+end_src
|
||||
|
||||
* Refile
|
||||
|
||||
org-refile targets
|
||||
#+begin_src elisp
|
||||
(setq org-refile-targets '((nil :maxlevel . 9)
|
||||
(org-agenda-files :maxlevel . 9)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Set type of refile targets completion
|
||||
#+begin_src elisp
|
||||
(setq org-outline-path-complete-in-steps nil)
|
||||
#+end_src
|
||||
|
||||
Allow refiling to new parents created on the go after confirmation
|
||||
#+begin_src elisp
|
||||
(setq org-refile-allow-creating-parent-nodes 'confirm)
|
||||
#+end_src
|
||||
@@ -1,101 +0,0 @@
|
||||
#+TITLE: Media and Books Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Read ebooks (calibredb)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package calibredb
|
||||
:defer t
|
||||
:config
|
||||
(setq calibredb-format-all-the-icons t)
|
||||
(setq calibredb-format-icons-in-terminal t))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar calibredb-root-dir (expand-file-name "~/memex/library/books"))
|
||||
(defvar calibredb-db-dir (expand-file-name "metadata.db" calibredb-root-dir))
|
||||
(defvar calibredb-id-width 6)
|
||||
(defvar calibredb-title-width 100)
|
||||
#+end_src
|
||||
|
||||
* PDF Tools
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package pdf-tools
|
||||
:mode ("\\.pdf\\'" . pdf-view-mode)
|
||||
:config
|
||||
(pdf-tools-install :no-query)
|
||||
(setq-default pdf-view-display-size 'fit-page)
|
||||
(setq pdf-annot-activate-created-annotations t))
|
||||
#+end_src
|
||||
|
||||
* Annotate PDFs and EPUBs (org-noter)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-noter
|
||||
:config
|
||||
(setq org-noter-notes-search-path (list (expand-file-name "~/memex/library/books")))
|
||||
(setq org-noter-default-notes-file-names '("books.org")))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar org-noter-notes-search-path (list (concat org-directory "/library/books")))
|
||||
(defvar org-noter-default-notes-file-names '("books.org"))
|
||||
#+end_src
|
||||
|
||||
* Link PDFs (org-noter-pdftools)
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-noter-pdftools
|
||||
:after org-noter
|
||||
:config
|
||||
;; Add a function to ensure precise note is inserted
|
||||
(defun org-noter-pdftools-insert-precise-note (&optional toggle-no-questions)
|
||||
(interactive "P")
|
||||
(org-noter--with-valid-session
|
||||
(let ((org-noter-insert-note-no-questions (if toggle-no-questions
|
||||
(not org-noter-insert-note-no-questions)
|
||||
org-noter-insert-note-no-questions))
|
||||
(org-pdftools-use-isearch-link t)
|
||||
(org-pdftools-use-freepointer-annot t))
|
||||
(org-noter-insert-note (org-noter--get-precise-info)))))
|
||||
|
||||
;; fix https://github.com/weirdNox/org-noter/pull/93/commits/f8349ae7575e599f375de1be6be2d0d5de4e6cbf
|
||||
(defun org-noter-set-start-location (&optional arg)
|
||||
"When opening a session with this document, go to the current location.
|
||||
With a prefix ARG, remove start location."
|
||||
(interactive "P")
|
||||
(org-noter--with-valid-session
|
||||
(let ((inhibit-read-only t)
|
||||
(ast (org-noter--parse-root))
|
||||
(location (org-noter--doc-approx-location (when (called-interactively-p 'any) 'interactive))))
|
||||
(with-current-buffer (org-noter--session-notes-buffer session)
|
||||
(org-with-wide-buffer
|
||||
(goto-char (org-element-property :begin ast))
|
||||
(if arg
|
||||
(org-entry-delete nil org-noter-property-note-location)
|
||||
(org-entry-put nil org-noter-property-note-location
|
||||
(org-noter--pretty-print-location location))))))))
|
||||
(with-eval-after-load 'pdf-annot
|
||||
(add-hook 'pdf-annot-activate-handler-functions #'org-noter-pdftools-jump-to-note)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* View EPUBs (nov.el)
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package nov
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Zotero (helm-bibtex)
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package helm-bibtex)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar bibtex-completion-bibliography '("~/bibliography/zotero.bib"))
|
||||
#+end_src
|
||||
@@ -1,233 +0,0 @@
|
||||
#+TITLE: Org Mode Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Org Mode
|
||||
|
||||
** Basic setup
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org
|
||||
:config
|
||||
(defvar org-outline-path-complete-in-steps nil)
|
||||
:bind (("C-c l" . org-store-link)
|
||||
("C-c a" . org-agenda)
|
||||
("C-c c" . org-capture)
|
||||
:map org-mode-map)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-directory (expand-file-name "~/memex/"))
|
||||
#+end_src
|
||||
|
||||
** Looks
|
||||
|
||||
Basic
|
||||
#+begin_src elisp
|
||||
(defvar org-pretty-entities t) ; Improve org mode looks
|
||||
(defvar org-hide-emphasis-markers t) ; Hide emphasis markup
|
||||
(defvar org-num-mode nil)
|
||||
(defvar org-startup-folded 'shw2levels)
|
||||
#+end_src
|
||||
|
||||
Indentation of headers
|
||||
#+begin_src elisp
|
||||
(defvar org-startup-indented t) ; Indent org heirarchy
|
||||
(defvar org-adapt-indentation t)
|
||||
(defvar org-hide-leading-stars t) ; Minimal Outline
|
||||
(defvar org-odd-levels-only nil)
|
||||
#+end_src
|
||||
|
||||
Indentation of lists
|
||||
#+begin_src elisp
|
||||
(setq org-list-demote-modify-bullet t)
|
||||
#+end_src
|
||||
|
||||
Org-modern
|
||||
#+begin_src elisp
|
||||
(use-package org-modern
|
||||
:ensure t
|
||||
:config
|
||||
;; Choose some fonts
|
||||
(set-face-attribute 'default nil :family "sans-serif")
|
||||
(set-face-attribute 'variable-pitch nil :family "sans-serif")
|
||||
(set-face-attribute 'org-modern-symbol nil :family "Iosevka")
|
||||
|
||||
;; Edit settings
|
||||
(defvar org-auto-align-tags nil)
|
||||
(defvar org-tags-column 0)
|
||||
(defvar org-catch-invisible-edits 'show-and-error)
|
||||
(defvar org-special-ctrl-a/e t)
|
||||
(defvar org-insert-heading-respect-content t)
|
||||
|
||||
;; Org styling, hide markup etc.
|
||||
(defvar org-hide-emphasis-markers t)
|
||||
(defvar org-pretty-entities t)
|
||||
|
||||
;; Agenda styling
|
||||
(defvar org-agenda-tags-column 0)
|
||||
(defvar org-agenda-block-separator ?─)
|
||||
(defvar org-agenda-time-grid
|
||||
'((daily today require-timed)
|
||||
(800 1000 1200 1400 1600 1800 2000)
|
||||
" ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄"))
|
||||
(defvar org-agenda-current-time-string
|
||||
"◀── now ─────────────────────────────────────────────────")
|
||||
|
||||
;; Ellipsis styling
|
||||
(defvar org-ellipsis "…")
|
||||
(set-face-attribute 'org-ellipsis nil :inherit 'default :box nil)
|
||||
|
||||
(global-org-modern-mode)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Highlight Sourcecode Syntax
|
||||
#+begin_src elisp
|
||||
(setq org-src-fontify-natively t)
|
||||
(setq org-src-tab-acts-natively t)
|
||||
#+end_src
|
||||
|
||||
Images
|
||||
#+begin_src elisp
|
||||
(setq org-startup-with-inline-images t)
|
||||
(setq org-image-actual-width '(300))
|
||||
#+end_src
|
||||
|
||||
** Capture
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-default-notes-file (concat org-directory "inbox.org"))
|
||||
#+end_src
|
||||
|
||||
*** Org-protocol
|
||||
|
||||
Linux configuration
|
||||
#+begin_src bash :tangle yes
|
||||
[Desktop Entry]
|
||||
Name=org-protocol
|
||||
Comment=Intercept calls from emacsclient to trigger custom actions
|
||||
Categories=Other;
|
||||
Keywords=org-protocol;
|
||||
Icon=emacs
|
||||
Type=Application
|
||||
Exec=emacsclient -- %u
|
||||
Terminal=false
|
||||
StartupWMClass=Emacs
|
||||
MimeType=x-scheme-handler/org-protocol;
|
||||
#+end_src
|
||||
|
||||
#+begin_src bash :tangle yes
|
||||
update-desktop-database ~/.local/share/applications/
|
||||
#+end_src
|
||||
|
||||
Basic configuration
|
||||
#+begin_src elisp
|
||||
(require 'org-protocol)
|
||||
(setq org-protocol-default-buffer-for-file-links "*scratch*") ; fixes 'no buffers remain to edit error for org-protocol capturer
|
||||
#+end_src
|
||||
|
||||
Org-protocol templates
|
||||
#+begin_src elisp :tangle ~/.emacs.d/custom.el
|
||||
(defvar org-capture-templates '(
|
||||
("p" "Protocol"
|
||||
entry
|
||||
(file "inbox.org")
|
||||
"* %^{Title}\nSource: %u, %c\n #+BEGIN_QUOTE\n%i\n#+END_QUOTE\n\n\n%?"
|
||||
)
|
||||
("L" "Protocol Link"
|
||||
entry
|
||||
(file "inbox.org")
|
||||
"* %? [[%:link][%:description]]\n:PROPERTIES:\n:TITLE: %:description\n:URI: %:link\n:CREATED: %U\n:END:"
|
||||
:prepend nil
|
||||
:empty-lines 1
|
||||
:created t
|
||||
:kill-buffer t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-protocol-default-template-key "L")
|
||||
#+end_src
|
||||
|
||||
Convert Orgzly captures to org-protocol captures standard
|
||||
#+begin_src elisp
|
||||
(defun my/org-convert-orgzly-to-org-protocol ()
|
||||
"Reformat Orgzly bookmark at point to org-protocol bookmark."
|
||||
(interactive)
|
||||
(when (org-at-heading-p)
|
||||
(let ((headline (nth 4 (org-heading-components))))
|
||||
;; Find and store the link. Delete the link line.
|
||||
(search-forward-regexp "^https?://\\S-*" nil t)
|
||||
(let ((link (match-string 0)))
|
||||
(beginning-of-line)
|
||||
(kill-line)
|
||||
;; Delete any trailing blank spaces
|
||||
(org-back-to-heading)
|
||||
(end-of-line)
|
||||
(when (not (org-on-heading-p))
|
||||
(delete-char 1)
|
||||
)
|
||||
;; Set new headline
|
||||
(goto-char (org-entry-beginning-position))
|
||||
(org-edit-headline (format "[[%s][%s]]" link headline))
|
||||
;; Set new properties
|
||||
(org-set-property "TITLE" headline)
|
||||
(org-set-property "URI" link)
|
||||
(message "Reformatted Orgzly bookmark at point to org-protocol bookmark")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Exporting
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-export-with-smart-quotes t)
|
||||
(setq org-export-backends '(beamer html latex md))
|
||||
#+end_src
|
||||
|
||||
Export to EPUB
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package ox-epub)
|
||||
#+end_src
|
||||
|
||||
** org-attach
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-attach-id-dir (concat org-directory "/library"))
|
||||
#+end_src
|
||||
|
||||
** Enable shell scripting support in org-babel
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar org-babel-do-load-languages 'org-babel-load-languages '((shell . t)))
|
||||
#+end_src
|
||||
|
||||
** Insert org-mode links from clipboard
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package org-cliplink
|
||||
:bind
|
||||
(("C-x p i" . org-cliplink))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Deft
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package deft
|
||||
:commands (deft)
|
||||
:init
|
||||
(defvar deft-extensions '("org"))
|
||||
(defvar deft-recursive nil)
|
||||
(defvar deft-use-filename-as-title t)
|
||||
:config
|
||||
(defvar deft-directory org-directory)
|
||||
(defvar deft-recursive t)
|
||||
(defvar deft-strip-summary-regexp ":PROPERTIES:\n\\(.+\n\\)+:END:\n")
|
||||
(defvar deft-use-filename-as-title t)
|
||||
:bind ("C-c n d" . deft)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,140 +0,0 @@
|
||||
#+TITLE: Org-Roam Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Org-roam
|
||||
|
||||
** Basic org-roam setup
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package org-roam
|
||||
:init (setq org-roam-v2-ack t) ;; Acknowledge V2 upgrade
|
||||
:after org
|
||||
:config
|
||||
(org-roam-db-autosync-enable)
|
||||
(require 'org-roam-dailies)
|
||||
:bind (
|
||||
("C-c n f" . org-roam-node-find)
|
||||
("C-c n g" . org-roam-graph)
|
||||
("C-c n r" . org-roam-node-random)
|
||||
("C-c n h" . org-roam-node-convert-headline)
|
||||
("C-c n i" . org-roam-node-insert)
|
||||
("C-c n o" . org-id-get-create)
|
||||
("C-c n t" . org-roam-tag-add)
|
||||
("C-c n a" . org-roam-alias-add)
|
||||
("C-c n l" . org-roam-buffer-display-dedicated)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-roam-directory (expand-file-name (concat org-directory "notes")))
|
||||
(setq org-roam-dailies-directory (expand-file-name (concat org-directory "daily")))
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package sqlite3)
|
||||
(require 'sqlite3)
|
||||
#+end_src
|
||||
|
||||
Include subdirectories in org-roam
|
||||
#+begin_src elisp
|
||||
(setq org-roam-file-exclude-regexp "^[.][.]?/")
|
||||
#+end_src
|
||||
|
||||
** Display in org-roam-buffer
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq org-roam-mode-sections
|
||||
(list #'org-roam-backlinks-section
|
||||
#'org-roam-reflinks-section
|
||||
#'org-roam-unlinked-references-section
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Filter org-roam nodes find by tag
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/org-roam-node-has-tag (node tag)
|
||||
"Filter function to check if the given NODE has the specified TAG."
|
||||
(member tag (org-roam-node-tags node))
|
||||
)
|
||||
|
||||
(defun my/org-roam-node-find-by-tag ()
|
||||
"Find and open an Org-roam node based on a specified tag."
|
||||
(interactive)
|
||||
(let ((tag (read-string "Enter tag: ")))
|
||||
(org-roam-node-find nil nil (lambda (node) (my/org-roam-node-has-tag node tag))))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** org-roam-capture templates
|
||||
#+begin_src elisp
|
||||
(setq org-roam-capture-templates
|
||||
'(
|
||||
("L" "link" plain
|
||||
(function org-roam--capture-get-point)
|
||||
"%?"
|
||||
:file-name "web/%<%Y-%m-%dT%H%M%S>.org"
|
||||
:head "#+TITLE: ${title}\n#+CREATED: %<%Y-%m-%dT%H%M%S>"
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
|
||||
("h" "hugo post" plain
|
||||
"%?"
|
||||
:target (file+head "posts/${slug}.org"
|
||||
"#+TITLE: ${title}\n#+DATE: %U\n#+HUGO_BASE_DIR: ~/gharbeia.net\n#+HUGO_SECTION: ./posts\n#+HUGO_AUTO_SET_LASTMOD: t\n#+HUGO_TAGS: article\n#+HUGO_DRAFT: true\n")
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
|
||||
("p" "person" plain
|
||||
"%?"
|
||||
:if-new (file+head "people/${slug}.org"
|
||||
"#+TITLE: ${title}")
|
||||
:immediate-finish t
|
||||
:unnarrowed t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(setq org-roam-dailies-capture-templates
|
||||
'(
|
||||
("d" "daily" plain
|
||||
""
|
||||
:target ("file+heaed %<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n\n")
|
||||
:immediate-finish t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Move org header to org-roam-daily
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/org-move-entry-to-daily-notes ()
|
||||
"Move the current org-mode headline to the daily notes file based on its :CREATED: property."
|
||||
(interactive)
|
||||
(let*
|
||||
(
|
||||
(created-prop (org-entry-get nil "CREATED"))
|
||||
(created-date (when created-prop
|
||||
(org-parse-time-string created-prop)))
|
||||
(year (nth 5 created-date)) ; Extract year (6th element)
|
||||
(month (nth 4 created-date)) ; Extract month (5th element)
|
||||
(day (nth 3 created-date)) ; Extract day (4th element)
|
||||
(target-date (format "%04d-%02d-%02d" year month day)) ; Format date string
|
||||
(target-file (org-roam-dailies-goto target-date))
|
||||
)
|
||||
(when target-file
|
||||
(org-cut-subtree)
|
||||
(find-file target-file)
|
||||
(goto-char (point-max))
|
||||
(unless (bolp) (newline))
|
||||
(org-paste-subtree)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,73 +0,0 @@
|
||||
#+TITLE: Shell Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Shell
|
||||
|
||||
** Bash completion
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package bash-completion
|
||||
:config
|
||||
(require 'bash-completion)
|
||||
(bash-completion-setup)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defvar shell-dynamic-complete-functions t)
|
||||
#+end_src
|
||||
|
||||
** Eshell
|
||||
|
||||
Add programmable bash completion to Emacs shell-mode
|
||||
#+begin_src elisp :tangle yes
|
||||
(require 'bash-completion)
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(add-hook 'completion-at-point-functions
|
||||
'bash-completion-capf-nonexclusive nil t
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Use colors in eshell
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package xterm-color
|
||||
:commands (xterm-color-filter)
|
||||
)
|
||||
|
||||
(use-package eshell
|
||||
:after xterm-color
|
||||
:config
|
||||
(define-key eshell-hist-mode-map (kbd "M-r") #'consult-history)
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(setenv "TERM" "xterm-256color")))
|
||||
(add-hook 'eshell-before-prompt-hook (setq xterm-color-preserve-properties t))
|
||||
(add-to-list 'eshell-preoutput-filter-functions 'xterm-color-filter)
|
||||
(setq eshell-output-filter-functions
|
||||
(remove 'eshell-handle-ansi-color eshell-output-filter-functions)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Eshell completion
|
||||
#+begin_src elisp :tangle yes
|
||||
(add-hook 'eshell-mode-hook
|
||||
(lambda ()
|
||||
(add-hook 'completion-at-point-functions
|
||||
'bash-completion-capf-nonexclusive nil t)))
|
||||
#+end_src
|
||||
|
||||
Emulate A Terminal (EAT)
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package eat
|
||||
:config
|
||||
;; For `eat-eshell-mode'.
|
||||
(add-hook 'eshell-load-hook #'eat-eshell-mode)
|
||||
|
||||
;; For `eat-eshell-visual-command-mode'.
|
||||
(add-hook 'eshell-load-hook #'eat-eshell-visual-command-mode)
|
||||
)
|
||||
#+end_src
|
||||
@@ -1,254 +0,0 @@
|
||||
#+TITLE: Reading and Writing Configuration
|
||||
#+PROPERTY: header-args :tangle yes
|
||||
|
||||
* Text and Case
|
||||
|
||||
** Convert DOuble capitals to single capitals
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/dcaps-to-scaps ()
|
||||
"Convert word in DOuble CApitals to Single Capitals."
|
||||
(interactive)
|
||||
(and (= ?w (char-syntax (char-before)))
|
||||
(save-excursion
|
||||
(and (if (called-interactively-p)
|
||||
(skip-syntax-backward "w")
|
||||
(= -3 (skip-syntax-backward "w"))
|
||||
)
|
||||
(let (case-fold-search)
|
||||
(looking-at "\\b[[:upper:]]\\{2\\}[[:lower:]]")
|
||||
)
|
||||
(capitalize-word 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
Then, let’s define a minor mode for it to be activated.
|
||||
#+begin_src elisp :tangle yes
|
||||
(define-minor-mode my-dubcaps-mode
|
||||
"Toggle 'my-dubcaps-mode' and convert words in DOuble CApitals to Single Capitals as you type."
|
||||
:init-value nil
|
||||
:lighter (" DC")
|
||||
(if my-dubcaps-mode
|
||||
(add-hook 'post-self-insert-hook #'my/dcaps-to-scaps nil 'local)
|
||||
(remove-hook 'post-self-insert-hook #'my/dcaps-to-scaps 'local)))
|
||||
#+end_src
|
||||
|
||||
Finally, let’s add a hook so that it is on for all the text files Emacs opens.
|
||||
#+begin_src elisp :tangle yes
|
||||
(add-hook 'text-mode-hook #'my-dubcaps-mode)
|
||||
#+end_src
|
||||
|
||||
Also, since we add a minor mode string (it might be useful sometimes), currently I prefer to diminish it.
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/diminish-dubcaps ()
|
||||
(interactive)
|
||||
(diminish 'my-dubcaps-mode ""))
|
||||
(add-hook 'my-dubcaps-mode-hook 'my/diminish-dubcaps)
|
||||
#+end_src
|
||||
|
||||
* Reading and Writing
|
||||
|
||||
** Move correctly over camelCased words
|
||||
|
||||
#+begin_src elisp
|
||||
(subword-mode)
|
||||
#+end_src
|
||||
|
||||
** Understand the more common sentence with double space
|
||||
|
||||
#+begin_src elisp
|
||||
(setq sentence-end-double-space nil)
|
||||
#+end_src
|
||||
|
||||
** Join lines into paragraph
|
||||
|
||||
#+begin_src elisp
|
||||
(defun my/fill-or-unfill-paragraph (&optional unfill region)
|
||||
"Fill paragraph (or REGION). With the prefix argument UNFILL, fill it instead."
|
||||
(interactive (progn
|
||||
(barf-if-buffer-read-only)
|
||||
(list (if current-prefix-arg 'fill) t)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(fill-paragraph nil region)))
|
||||
|
||||
(bind-key "M-q" 'my/fill-or-unfill-paragraph)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(defun my/fill-or-unfill-all-paragraphs (&optional unfill)
|
||||
"Fill or unfill all paragraphs in the current buffer.
|
||||
With the prefix argument UNFILL, fill them instead."
|
||||
(interactive (list (if current-prefix-arg 'fill)))
|
||||
(let ((fill-column (if unfill fill-column (point-max))))
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(fill-paragraph nil t)
|
||||
(forward-paragraph)))))
|
||||
|
||||
(bind-key "M-Q" 'my/fill-or-unfill-all-paragraphs)
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(remove-hook 'text-mode-hook #'turn-on-auto-fill)
|
||||
(add-hook 'text-mode-hook 'turn-on-visual-line-mode)
|
||||
#+end_src
|
||||
|
||||
** Expand some words with auto-correct
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq save-abbrevs 'silently)
|
||||
(setq-default abbrev-mode t)
|
||||
#+end_src
|
||||
|
||||
** ediff
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
|
||||
(setq ediff-split-window-function 'split-window-horizontally)
|
||||
#+end_src
|
||||
|
||||
** tramp
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq tramp-default-method "ssh"
|
||||
tramp-backup-directory-alist backup-directory-alist
|
||||
tramp-ssh-controlmaster-options "ssh")
|
||||
#+end_src
|
||||
|
||||
** Clean up space
|
||||
#+begin_src elisp :tangle yes
|
||||
(bind-key "M-SPC" 'cycle-spacing)
|
||||
#+end_src
|
||||
|
||||
** Transform <a href> links into org links
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(defun my/transform-html-links-to-org ()
|
||||
"Transform all HTML <a> links in the current buffer into 'org-mode' links."
|
||||
(interactive)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "<a href=\"\\(.*?\\)\">\\(.*?\\)</a>" nil t)
|
||||
(replace-match (org-make-link-string (match-string 1) (match-string 2)))))
|
||||
#+end_src
|
||||
|
||||
** Count words per minute
|
||||
#+begin_src elisp :tangle yes
|
||||
(require 'org-clock)
|
||||
(defun my/org-entry-wpm ()
|
||||
(interactive)
|
||||
(save-restriction
|
||||
(save-excursion
|
||||
(org-narrow-to-subtree)
|
||||
(goto-char (point-min))
|
||||
(let* ((words (count-words-region (point-min) (point-max)))
|
||||
|
||||
(minutes (org-clock-sum-current-item))
|
||||
(wpm (/ words minutes)))
|
||||
(message "WPM: %d (words: %d, minutes: %d)" wpm words minutes)
|
||||
(kill-new (number-to-string wpm))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Enable dict mode
|
||||
#+begin_src elisp :tangle yes
|
||||
(setq dictionary-server "automatic")
|
||||
#+end_src
|
||||
|
||||
** Pick out passive voice and weasel words
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package writegood-mode
|
||||
:diminish writegood-mode
|
||||
:config
|
||||
(progn (add-hook 'text-mode-hook 'writegood-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Org-babel docker
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package ob-docker-build
|
||||
:straight (ob-docker-build :type git :host github :repo "ifitzpat/ob-docker-build")
|
||||
:defer t
|
||||
:config
|
||||
(add-to-list 'org-babel-load-languages '(docker-build . t))
|
||||
(org-babel-do-load-languages 'org-babel-load-languages org-babel-load-languages)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
* Spelling and syntax
|
||||
|
||||
** Spell checking
|
||||
|
||||
This requires installation of hunspell
|
||||
#+begin_src bash :tangle yes
|
||||
sudo apt install hunspell
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package flyspell
|
||||
:config (setq ispell-program-name "hunspell"
|
||||
ispell-default-dictionary "en_US"
|
||||
)
|
||||
:diminish (flyspell-mode . "φ")
|
||||
:hook (text-mode . flyspell-mode)
|
||||
:bind (
|
||||
("M-<f7>" . flyspell-buffer)
|
||||
("<f7>" . flyspell-word)
|
||||
("C-;" . flyspell-auto-correct-previous-word)
|
||||
)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Flyspell correct
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package flyspell-correct
|
||||
:after flyspell
|
||||
:bind (:map flyspell-mode-map ("C-;" . flyspell-correct-wrapper))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Flycheck
|
||||
|
||||
Needs external checkers installed
|
||||
|
||||
#+begin_src elisp
|
||||
(use-package flycheck
|
||||
:defer t
|
||||
:diminish (flycheck-mode . "")
|
||||
:config
|
||||
(setq flycheck-emacs-lisp-load-path 'inherit)
|
||||
(setq flycheck-emacs-lisp-load-path (concat user-emacs-directory "straight/build")))
|
||||
|
||||
#+end_src
|
||||
|
||||
** Flycheck bash
|
||||
#+begin_src bash :tangle yes
|
||||
sudo apt install devscripts
|
||||
#+end_src
|
||||
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package flycheck-checkbashisms
|
||||
:config
|
||||
(flycheck-checkbashisms-setup)
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Yaml
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package yaml-mode
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
|
||||
(add-to-list 'auto-mode-alist '("\\.yaml\\'" . yaml-mode))
|
||||
)
|
||||
#+end_src
|
||||
|
||||
** Docker
|
||||
#+begin_src elisp :tangle yes
|
||||
(use-package docker-compose-mode)
|
||||
#+end_src
|
||||
@@ -46,7 +46,7 @@ notes/org-skill-memex.org|2026-03-31T13:03:26-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-model-explorer.org|2026-03-30T21:16:05-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-object-store-persistence.org|2026-03-31T18:28:47-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-onboarding.org|2026-03-31T18:13:26-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-org-agent.org|2026-04-07T12:57:15-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-opencortex.org|2026-04-07T12:57:15-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-org-delivery.org|2026-03-30T21:16:05-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-org-gtd-archive-roam-daily.org|2026-03-31T16:14:37-04:00|2026-04-07T13:42:42-04:00
|
||||
notes/org-skill-org-json-bridge.org|2026-03-31T16:14:37-04:00|2026-04-07T13:42:42-04:00
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
(require 'org)
|
||||
|
||||
(defun org-agent-inject-metadata (file created edited)
|
||||
(defun opencortex-inject-metadata (file created edited)
|
||||
(with-current-buffer (find-file-noselect file)
|
||||
(org-with-wide-buffer
|
||||
(goto-char (point-min))
|
||||
@@ -9,12 +9,12 @@
|
||||
(org-id-get-create) ; Ensure drawer exists
|
||||
(setq props (org-get-property-block))))
|
||||
|
||||
(org-set-property "CREATED" (org-agent-format-iso created))
|
||||
(org-set-property "EDITED" (org-agent-format-iso edited))
|
||||
(org-set-property "CREATED" (opencortex-format-iso created))
|
||||
(org-set-property "EDITED" (opencortex-format-iso edited))
|
||||
(save-buffer)
|
||||
(kill-buffer))))
|
||||
|
||||
(defun org-agent-format-iso (iso-date)
|
||||
(defun opencortex-format-iso (iso-date)
|
||||
"Convert 2026-04-07T10:00:00+00:00 to [2026-04-07 Tue 10:00]"
|
||||
(let ((time (parse-time-string iso-date)))
|
||||
(format-time-string "[%Y-%m-%d %a %H:%M]" (apply #'encode-time time))))
|
||||
@@ -26,4 +26,4 @@
|
||||
(dolist (line lines)
|
||||
(let ((parts (split-string line "|")))
|
||||
(when (= (length parts) 3)
|
||||
(org-agent-inject-metadata (nth 0 parts) (nth 1 parts) (nth 2 parts))))))
|
||||
(opencortex-inject-metadata (nth 0 parts) (nth 1 parts) (nth 2 parts))))))
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
(ql:quickload :usocket :silent t)
|
||||
|
||||
(defun send-to-swank (form-string)
|
||||
(let* ((msg (format nil "(:emacs-rex (swank:interactive-eval ~s) :org-agent t 1)" form-string))
|
||||
(let* ((msg (format nil "(:emacs-rex (swank:interactive-eval ~s) :opencortex t 1)" form-string))
|
||||
(len (format nil "~6,'0x" (length msg)))
|
||||
(socket (usocket:socket-connect "127.0.0.1" 4005))
|
||||
(stream (usocket:socket-stream socket)))
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
(let ((config-dir "~/memex/system/"))
|
||||
;; Load the core settings, including package management and essential setup.
|
||||
(org-babel-load-file (expand-file-name "emacs-core.org" config-dir))
|
||||
|
||||
;; Load early init settings (if separate and not fully covered by core)
|
||||
(org-babel-load-file (expand-file-name "emacs-early-init.org" config-dir))
|
||||
|
||||
;; Load other modules in a logical order
|
||||
(org-babel-load-file (expand-file-name "emacs-org.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-gtd.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-roam.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-writing.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-media.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-shell.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-ai.org" config-dir))
|
||||
(org-babel-load-file (expand-file-name "emacs-misc.org" config-dir)))
|
||||
@@ -1,4 +1,4 @@
|
||||
(in-package :org-agent.skills.org-skill-architect)
|
||||
(in-package :opencortex.skills.org-skill-architect)
|
||||
|
||||
(defun architect-actuate (action context)
|
||||
(declare (ignore context))
|
||||
@@ -9,11 +9,11 @@
|
||||
|
||||
(if (and note-path blueprint-content)
|
||||
(progn
|
||||
(org-agent:kernel-log "ARCHITECT - Appending PROTOCOL to ~a" note-path)
|
||||
(opencortex:kernel-log "ARCHITECT - Appending PROTOCOL to ~a" note-path)
|
||||
(with-open-file (out note-path :direction :output :if-exists :append)
|
||||
(format out "~%* Phase B: Blueprint (PROTOCOL)~%:PROPERTIES:~%:STATUS: SIGNED~%:END:~%~%~a"
|
||||
blueprint-content))
|
||||
(format nil "SUCCESS - Architect established PROTOCOL in ~a" note-path))
|
||||
(progn
|
||||
(org-agent:kernel-log "ARCHITECT FAILURE - Missing path or content in action: ~a" action)
|
||||
(opencortex:kernel-log "ARCHITECT FAILURE - Missing path or content in action: ~a" action)
|
||||
nil))))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
(in-package :org-agent.skills.org-skill-architect)
|
||||
(in-package :opencortex.skills.org-skill-architect)
|
||||
|
||||
(defun neuro-skill-architect (context)
|
||||
(let* ((payload (getf context :payload))
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
(in-package :org-agent.skills.org-skill-architect)
|
||||
(in-package :opencortex.skills.org-skill-architect)
|
||||
|
||||
(defun architect-scan-all-notes ()
|
||||
(let* ((notes-dir (or (uiop:getenv "MEMEX_NOTES") "/home/user/memex/notes/"))
|
||||
(files (uiop:directory-files (uiop:ensure-directory-pathname notes-dir)))
|
||||
(ready-notes '()))
|
||||
(org-agent:kernel-log "ARCHITECT - Scanning ~a files in ~a" (length files) notes-dir)
|
||||
(opencortex:kernel-log "ARCHITECT - Scanning ~a files in ~a" (length files) notes-dir)
|
||||
(dolist (file files)
|
||||
(let ((name (pathname-name file))
|
||||
(type (pathname-type file)))
|
||||
@@ -13,5 +13,5 @@
|
||||
(string-equal type "org"))
|
||||
(let ((status (architect-perceive-frozen-prd file)))
|
||||
(when status (push status ready-notes))))))
|
||||
(org-agent:kernel-log "ARCHITECT - Found ~a ready notes." (length ready-notes))
|
||||
(opencortex:kernel-log "ARCHITECT - Found ~a ready notes." (length ready-notes))
|
||||
ready-notes))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
(in-package :org-agent)
|
||||
(in-package :opencortex)
|
||||
|
||||
(defun execute-openrouter-request (prompt system-prompt &key model)
|
||||
(let ((api-key (uiop:getenv "OPENROUTER_API_KEY"))
|
||||
@@ -8,7 +8,7 @@
|
||||
(kernel-log "OPENROUTER DEBUG - Using Model: ~a" model-id)
|
||||
(let* ((headers `(("Content-Type" . "application/json")
|
||||
("Authorization" . ,(format nil "Bearer ~a" api-key))
|
||||
("HTTP-Referer" . "https://github.com/amr/org-agent")))
|
||||
("HTTP-Referer" . "https://github.com/amr/opencortex")))
|
||||
(body (cl-json:encode-json-to-string
|
||||
`((model . ,model-id)
|
||||
(messages . (( (role . "system") (content . ,system-prompt) )
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
(in-package :org-agent)
|
||||
(in-package :opencortex)
|
||||
|
||||
(defun ask-neuro (prompt &key (system-prompt "You are the Probabilistic Engine engine of a Neurosymbolic Lisp Machine.") (cascade nil) (context nil))
|
||||
"Dispatches a neural request through the provider cascade.
|
||||
@@ -14,7 +14,7 @@
|
||||
(kernel-log "PROBABILISTIC ENGINE: Attempting backend ~a..." backend)
|
||||
(let* (;; Consult the Economist for the model ID if the skill is available
|
||||
(model (ignore-errors
|
||||
(uiop:symbol-call :org-agent.skills.org-skill-economist :economist-get-model-for-provider backend)))
|
||||
(uiop:symbol-call :opencortex.skills.org-skill-economist :economist-get-model-for-provider backend)))
|
||||
(result (if model
|
||||
(funcall backend-fn prompt system-prompt :model model)
|
||||
(funcall backend-fn prompt system-prompt))))
|
||||
@@ -30,7 +30,7 @@
|
||||
(unless api-key (return-from execute-openrouter-request "(:type :LOG :payload (:text \"OpenRouter API Key missing\"))"))
|
||||
(let* ((headers `(("Content-Type" . "application/json")
|
||||
("Authorization" . ,(format nil "Bearer ~a" api-key))
|
||||
("HTTP-Referer" . "https://github.com/amr/org-agent")))
|
||||
("HTTP-Referer" . "https://github.com/amr/opencortex")))
|
||||
(body (cl-json:encode-json-to-string
|
||||
`((model . ,model-id)
|
||||
(messages . (( (role . "system") (content . ,system-prompt) )
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
(in-package :org-agent)
|
||||
(in-package :opencortex)
|
||||
|
||||
(defun ask-neuro (prompt &key (system-prompt "You are the Probabilistic Engine engine of a Neurosymbolic Lisp Machine.") (cascade nil) (context nil))
|
||||
(let ((backends (cond
|
||||
@@ -11,7 +11,7 @@
|
||||
(when backend-fn
|
||||
(kernel-log "PROBABILISTIC ENGINE: Attempting backend ~a..." backend)
|
||||
(let* ((model (ignore-errors
|
||||
(uiop:symbol-call :org-agent.skills.org-skill-economist :economist-get-model-for-provider backend)))
|
||||
(uiop:symbol-call :opencortex.skills.org-skill-economist :economist-get-model-for-provider backend)))
|
||||
(result (if model
|
||||
(funcall backend-fn prompt system-prompt :model model)
|
||||
(funcall backend-fn prompt system-prompt))))
|
||||
|
||||