Skip to content

Repository files navigation

gurk 🥒

ci chat ko-fi

Signal Messenger client for terminal.

screenshot

Installation

Pre-compiled binary

Download a pre-compiled binary from Releases.

Or, if you have cargo-binstall:

cargo binstall --git https://github.com/boxdot/gurk-rs gurk

From source (using cargo)

Prerequisites:

cargo install --git https://github.com/boxdot/gurk-rs gurk

Arch Linux

pacman -S gurk

(as root)

  • Official repository, tagged releases: gurk
yay -S gurk
  • AUR source build from Git HEAD: gurk-git

Nix/NixOS

Either per user:

$ nix-env --install gurk-rs

or system-wide:

environment.systemPackages = with pkgs; [ gurk-rs ];

Freebsd

(as root)

pkg install net-im/gurk-rs
  • pkg repositories
cd /usr/ports/net-im/gurk-rs
make install clean
  • ports tree

Usage

Run

gurk

On the first run, it will open a QR code in your favorite image viewer, such that you can link the client as a new device. This will also create a configuration file at the default config location. For the configuration directives, see src/config.rs.

Note: The binary cannot be published on crates.io, because it depends on several official Signal libraries that are not available on crates.io.

Chat

chat-qr

Key bindings

Default keybindings

  • App navigation
    • f1 Toggle help panel.
    • ctrl+c Quit.
  • Message input
    • tab Send emoji from input line as reaction on selected message.
    • alt+enter Switch between multi-line and single-line input modes.
    • alt+left, alt+right Jump to previous/next word.
    • ctrl+w / ctrl+backspace / alt+backspace Delete last word.
    • ctrl+u Delete to the start of the line.
    • enter when input box empty in single-line mode Open URL from selected message.
    • enter otherwise Send message.
  • Multi-line message input
    • enter New line
    • ctrl+j / Up Previous line
    • ctrl+k / Down Next line
  • Cursor
    • alt+f / alt+Right / ctrl+Right Move forward one word.
    • alt+b / alt+Left / ctrl+Left Move backward one word.
    • ctrl+a / Home Move cursor to the beginning of the line.
    • ctrl+e / End Move cursor the the end of the line.
  • Message/channel selection
    • esc Reset message selection or close channel selection popup.
    • alt+Up / alt+k / PgUp Select previous message.
    • alt+Down / alt+j / PgDown Select next message.
    • ctrl+j / Up Select previous channel.
    • ctrl+k / Down Select next channel.
    • ctrl+p Open / close channel selection popup.
    • alt+m Toggle mute for the selected channel (silences notifications; muted channels are marked with [M]).
  • Clipboard
    • alt+y Copy selected message to clipboard.
  • Help menu
    • esc Close help panel.
    • ctrl+j / Up / PgUp Previous line
    • ctrl+k / Down / PgDown Next line

File Uploads

  • file:///path/to/file Upload File "file" at path "/path/to/"
  • file://clip Upload Content of Clipboard

Configuration

Command-line options

-c, --config <PATH>     Path to config file
    --data-dir <PATH>   Path to data directory

Environment variables

Variable Description
GURK_CONFIG Path to config file (same as --config)
GURK_DATA_DIR Path to data directory (same as --data-dir)
XDG_CONFIG_HOME Base directory for config files (works on all platforms)
XDG_DATA_HOME Base directory for data files (works on all platforms)

Config file locations

If no config path is specified, gurk searches these locations in order:

  1. $XDG_CONFIG_HOME/gurk/gurk.toml (if XDG_CONFIG_HOME is set)
  2. $XDG_CONFIG_HOME/gurk.toml (if XDG_CONFIG_HOME is set)
  3. Platform config directory (e.g. ~/Library/Application Support on macOS, ~/.config on Linux)
  4. $HOME/.gurk.toml

Data directory

The data directory (for messages, Signal database, attachments) is determined by:

  1. --data-dir CLI option or GURK_DATA_DIR env var
  2. data_dir setting in config file
  3. $XDG_DATA_HOME/gurk (if XDG_DATA_HOME is set)
  4. Platform data directory (e.g. ~/Library/Application Support/gurk on macOS)

Custom keybindings

The default keybindings can be overwritten at startup by configuring keybindings in gurk.toml using the format keybindings.<mode>.<keycombination> = "<command>". Valid commands are anywhere, normal, message_selected, channel_modal, multiline, and help. Valid key combination specifiers are e.g. left, alt-j, ctrl-f, backspace, pagedown. The default keybindings can be disabled by setting default_keybindings = false. An empty command removes an existing binding if it exists in the given mode. Configuration troubleshooted by running RUST_LOG=gurk=trace,presage=trace,libsignal=trace gurk --verbose and examining the resulting gurk.log.

Supported commands

help
quit
toggle_channel_modal
toggle_multiline
react
scroll help up|down entry
move_text previous|next character|word|line
select_channel previous|next
select_channel_modal previous|next
select_message previous|next entry
kill_line
kill_whole_line
kill_backward_line
kill_word
copy_message selected
beginning_of_line
end_of_line
delete_character previous|next
edit_message
delete_message
open_url
open_file
toggle_mute_channel

Example configuration

default_keybindings = true

[keybindings.anywhere]
ctrl-c = ""
ctrl-q = "quit"

[keybindings.normal]
ctrl-j = ""
ctrl-k = "kill_line"
ctrl-n = "select_channel next"
ctrl-p = "select_channel previous"
alt-c = "toggle_channel_modal"
up = "select_message previous entry"
down = "select_message next entry"

[keybindings.channel_modal]
ctrl-j = ""
ctrl-k = ""
ctrl-n = "select_channel_modal next"
ctrl-p = "select_channel_modal previous"

[keybindings.message_selected]
alt-y = ""
alt-w = "copy_message selected"
ctrl-t = "react :thumbsup:"
ctrl-h = "react ❤️"

License

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this document by you, as defined in the AGPL-3.0-only license, shall be licensed as above, without any additional terms or conditions.

About

Signal Messenger client for terminal

Resources

Stars

1.4k stars

Watchers

14 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages