Files
noise/README.org
T

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.