156 lines
3.9 KiB
Org Mode
156 lines
3.9 KiB
Org Mode
* Noise
|
|
|
|
Noise is a Signal Messenger client in Elisp for Emacs powered by https://github.com/AsamK/signal-cli
|
|
|
|
Its ultimate goal is to provide a fast and efficient user interface for Signal chats.
|
|
|
|
** Tech stack
|
|
The tech stack is Elisp and SQLite (for storing conversations)
|
|
|
|
** Setup
|
|
The project assumes a working installation of signal-cli and interfaces with that via JSON-RPC.
|
|
|
|
** Dependencies
|
|
|
|
For SQLite access we use this library - https://github.com/pekingduck/emacs-sqlite3-api
|
|
|
|
We communicate with signal-cli via JSON-RPC over HTTP on localhost port 9128 by default but this can be configured by specifying =noise-signal-cli-address=
|
|
|
|
** User Experience
|
|
|
|
We follow Emacs conventions for keybindings with the addition of evil support out of the box. When evil compatibility is enabled then we provide a modal interface for searching conversations/contacts, creating conversations, sending messages, etc.
|
|
|
|
** User Interface
|
|
|
|
See the file signal-emacs-ui.html for user interface mockups we're targeting.
|
|
|
|
** Installation
|
|
|
|
*** signal-cli
|
|
|
|
Install =signal-cli= and start the daemon in JSON-RPC mode:
|
|
|
|
#+begin_src shell
|
|
# Install signal-cli (example using the official tarball)
|
|
wget https://github.com/AsamK/signal-cli/releases/latest/download/signal-cli.tar.gz
|
|
tar xf signal-cli.tar.gz
|
|
|
|
# Register or link your device
|
|
signal-cli link -n "emacs-noise"
|
|
|
|
# Start the daemon on default port 9128
|
|
signal-cli daemon --receive-mode=manual
|
|
#+end_src
|
|
|
|
*** emacs-sqlite3-api
|
|
|
|
Noise requires the =emacs-sqlite3-api= library for SQLite access. Install it with your
|
|
package manager of choice, then set up Noise itself.
|
|
|
|
*** Noise Package
|
|
|
|
Below are recipes for several popular Emacs package managers.
|
|
|
|
**** elpaca
|
|
|
|
#+begin_src elisp
|
|
(use-package noise
|
|
:ensure (noise
|
|
:host github
|
|
:repo "git.roo.lol/jbrechtel/noise"
|
|
:protocol https)
|
|
:config
|
|
;; Optional: set a custom signal-cli address
|
|
;; (setq noise-signal-cli-address "http://localhost:9128")
|
|
|
|
;; Start Noise automatically
|
|
(noise-mode 1))
|
|
#+end_src
|
|
|
|
Or, if you prefer the =elpaca= recipe directly without =use-package=:
|
|
|
|
#+begin_src elisp
|
|
(elpaca (noise :host github
|
|
:repo "git.roo.lol/jbrechtel/noise"
|
|
:protocol https))
|
|
|
|
(require 'noise)
|
|
(noise-mode 1)
|
|
#+end_src
|
|
|
|
**** straight.el
|
|
|
|
#+begin_src elisp
|
|
(straight-use-package
|
|
'(noise :type git :host github
|
|
:repo "git.roo.lol/jbrechtel/noise"
|
|
:protocol https))
|
|
|
|
(require 'noise)
|
|
(noise-mode 1)
|
|
#+end_src
|
|
|
|
**** Quelpa
|
|
|
|
#+begin_src elisp
|
|
(quelpa
|
|
'(noise :fetcher github
|
|
:repo "git.roo.lol/jbrechtel/noise"))
|
|
|
|
(require 'noise)
|
|
(noise-mode 1)
|
|
#+end_src
|
|
|
|
**** Manual / package-vc-install (Emacs 29+)
|
|
|
|
#+begin_src elisp
|
|
(package-vc-install "https://git.roo.lol/jbrechtel/noise")
|
|
|
|
(require 'noise)
|
|
(noise-mode 1)
|
|
#+end_src
|
|
|
|
**** Manual clone
|
|
|
|
#+begin_src shell
|
|
git clone https://git.roo.lol/jbrechtel/noise ~/.emacs.d/manual-packages/noise
|
|
#+end_src
|
|
|
|
Then in your init file:
|
|
|
|
#+begin_src elisp
|
|
(add-to-list 'load-path "~/.emacs.d/manual-packages/noise")
|
|
(require 'noise)
|
|
(noise-mode 1)
|
|
#+end_src
|
|
|
|
** Usage
|
|
|
|
Once signal-cli is running and Noise is installed:
|
|
|
|
- =M-x noise-mode= — toggle the Noise client (opens the chat list)
|
|
- =M-x noise-check-connection= — test connectivity to signal-cli
|
|
|
|
*** Keybindings
|
|
|
|
**** Chat list (*signal* buffer)
|
|
|
|
| Key | Action |
|
|
|-------+---------------------------|
|
|
| =n= | Next chat |
|
|
| =p= | Previous chat |
|
|
| =RET= | Open selected chat |
|
|
| =m= | Mark chat as read |
|
|
| =g= | Refresh chat list |
|
|
| =/= | Filter chats |
|
|
| =q= | Quit chat list window |
|
|
| =C-x b= | Switch conversation (minibuffer) |
|
|
|
|
**** Minibuffer switcher
|
|
|
|
=M-x noise-switcher= (or =C-x b= from the chat list) opens a fuzzy
|
|
completion interface showing all conversations and contacts. Start
|
|
typing to narrow, then press =RET= to open the selected conversation.
|
|
|
|
|