/General-Pure-Emacs

A general platform based on Emacs to facilitate learning, teaching, research and project management.

Primary LanguageEmacs Lisp

GPE is a Platform of Emacs

The GPE is, not GPE, but termed as GPE.

Introduction

The GPE is an integrated and flexible platform built on Gnu Emacs that harnesses the power of artificial intelligence (AI) with around 100 packages as plugins to facilitate learning, teaching, research and project management.

./site-lisp/figure/GPE-Dashboard-2023-09-14.png

What is “G.P.E”:

General
A consistent platform is built with simplicity, modularity and clear communication between integrated facilities.
Pure
The entire platform is powered mainly by the pure Turing programming language, elisp.
Extensible
This interactive platform is extensible for whatever you want to, even brew coffee with it.

./site-lisp/figure/GPE-Framework_4.png

A Basic Structure of Configuration

Emacs:~$ (init 0 1) –AI–> G.P.E

.emacs.d/
   |
   |-- early-init
   |-- init.el
   |
   |-- lisp/
   |   |-- init-0-bridge.el
   |   |-- init-1-system
   |   |
   |   |-- init-a-authentication
   |   |-- init-b-basic
   |   |-- init-c-i18n
   |   |-- init-d-update
   |   |
   |   |-- init-e-enhance
   |   |-- init-f-dired
   |   |-- init-g-interface
   |   |-- init-h-dashboard
   |   |-- init-i-minibuffer
   |   |-- init-j-platform
   |   |-- init-k-org
   |   |-- init-l-markdown
   |   |
   |   |-- init-p-python
   |   |-- init-p-c/c++
   |   |-- init-p-java
   |   |-- init-p-lua
   |   |-- init-p-julia
   |   |-- init-p-web
   |   |
   |   |-- init-r-roam
   |   |-- init-r-research
   |   |-- init-r-tex
   |   |
   |   |-- init-z-test
   |
   |-- site-lisp/
   |   |-- lsp-bridge
   |   |-- aweshell
   |   |-- blink-search
   |   |-- popweb
   |   |-- pure-const
   |   |-- pure-custom
   |   |-- pure-function
   |   |-- pure-macros
   |
   |-- custom.el
   |-- README.org
   |
   |-- .gitignore
   |-- .gitmodules
   |
   |-- ...

Configuration Methodology

Adhere to the principles (G.P.E) of this platform, the configuration will be crafted with the following key considerations:

  • Easy to integrate and debug
  • Lower coupling and higher cohesion
  • More aggregation and less inheritance
  • To precipitate the common into the bottom layers, and make flexible on the top:

./site-lisp/figure/Configuration_Metodology_7.jpg

Feature

  • Integrated
    • Note-taken
      Org-mode has useful functionalities to take notes. Quick to open an file for note-taking, an Org file can be bounded to the key “F1”:
      (defun open-note-file ()
        "Quickly open an org file for note taking."
        (interactive)
        (find-file "~/Documents/Org/note.org"))
      (global-set-key (kbd "<f1>") 'open-note-file)
              

      Further extended with the Org-Roam (V2) package by saving all the links between files and headings in a database1. ./site-lisp/figure/org-roam-network.png

    • Programming as an IDE:

      ./site-lisp/figure/Emacs_elisp_programming.png

    • Plan and schedule

      ./site-lisp/figure/TaskManagement.png

    • Management for research purposes as below:

      ./site-lisp/figure/Git-for-research-project.png

    • System and Network Administration
      ./site-lisp/figure/cybernet_workstation_1.png
  • Custmisable
    Nothing cannot be custmised in this General Pure Emacs. For example, mode-line customised by doom-modeline:

    ./site-lisp/figure/mode-line.png

  • Extensible
    • Multiple threading and asynchronous processing
      • Scheduler for requests
      • Flexible capacity tray
      • Focus-oriented
    • literate programming2

      ./site-lisp/figure/literate-programming.png

      The literate programming mode, Org-Babel, is able to embed multiple programming languages in a org file to make it as an active document.

    • roam-network
      • How to import and visualize your roam research, obsidian and zettelkasten markdown format notes, a graphical front-end for your org-roam Zettelkasten, org-roam-ui3:

        ./site-lisp/figure/roam-research-ui.png

  • Creative and Innovative
    • A creative workshop in this platform is established to publish org files to XHTML files with customised theme file (css and js) to be hosted as a website (Something-Good) in GitHub: ./site-lisp/figure/org2xhtml.png

    Push at the boundary of knowledge with GPE 4:

    ./site-lisp/figure/creative_emacs.jpg

  • Instructive
    The tutorial how to build this platform will be illustrated at the website Something-Good under the ThingsEngine Project.

Installation

To enhance the default Emacs experience, the latest stable release (29.1) is recommended.

  1. Backup your existing configuration
    mv ~/.emacs.d ~/.emacs.d.bak
        
  2. Clone this repository You should install Git in your system first, as well as set your username and email, the same for GitHub with SSH public key. See the tutorial of Git/GitHub.
    git clone git@github.com:Ethanlinyf/General-Pure-Emacs.git ~/.emacs.d
        
  3. Install the dependencies
    • Install the needed nerdfonts
    • Based on the listed modules in the .gitmodules to install therelated dependencies, for example:
      • lsp-bridge:
        pip3 install epc orjson sexpdata six paramiko rapidfuzz
                    
      • And others, such as ChatGPT(mind-wave) and WebFrame(popweb).
      • For a specific system, such as macOS:
        brew install autoconf automake texinfo gnutls pkg-config libxml2 --debug --verbose
                    
  4. To fetch the submodules in General Pure Emacs
    cd .emacs.d
        

    Then, run the following to in a terminal:

    git submodule update --init --recursive
        

    And to update the submodules, you could use:

    git submodule foreach git pull --rebase
        
  5. Then, open Emacs to install the needed package.
    • Yes for “Need to (re)build the epdfinfo program, do it now ?”:
    • Your root password might be required to install a pdf-tool server.
    • You may need to wait for a while to complete downloading the needed packages.
  6. GUI with icons
    Install nerd fonts, https://www.nerdfonts.com/ \
    M-x nerd-icons-install-fonts
        

One more thing, add external tools and language servers to boost your own GPE:

  • External tools
    • fd
    • ripgrep
    • sqlite3 (optional, for sqlite3 backend)
    • rga (optional, for searching pdf backend)
    • pdf-tool
      M-x pdf-tools-install
              
    • Install Tabnine after the installation of lsp-bridge:
      M-x lsp-bridge-install-tabnine
              
  • LSP servers need for:
    • pyright for Python
    • texlab for LaTeX
    • eclipse.jdt.ls for Java
    • clangd for C and/or C++

Support/Feedback

Bug reports are highly welcome and appreciated!

Please feedback any issues about configuration at this repository and welcome any suggestions.

License

This program is free software. You can redistribute and/or modify it under GNU General Public License published by the Free Software Foundation, as well as Copyleft under ThingsEngine project. The contributions are shared with the hope that this program will be useful, helpful and inspiring, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.

Footnote

1 Visualise Org-Roam Networks With igraph and R

2 A Multi-Language Computing Environment for Literate Programming and Reproducible Research

3 org-roam-ui

4 PhD pitfalls: The reality of your contribution