diff --git a/book.toml b/book.toml index 5016328..e6347ad 100644 --- a/book.toml +++ b/book.toml @@ -9,3 +9,4 @@ title = "iamb documentation" curly-quotes = true git-repository-url = "https://github.com/ulyssa/iamb" cname = "iamb.chat" +additional-css = ["theme/css/custom.css"] diff --git a/src/README.md b/src/README.md index ce57ec2..77c25fe 100644 --- a/src/README.md +++ b/src/README.md @@ -10,11 +10,12 @@ fingers are used to from your favorite text editor! This documentation indicates keybindings using the following conventions: -- The control key is shown with a leading caret; for example, `^W` is Ctrl-W. - Named keys are shown between angle brackets; for example, `` is the space bar. +- Modifiers like the control key or shift are shown with their combining key + between brackets; for example, `` is Ctrl-W and `` is Shift+Tab. - Sequences of keys to be pressed are shown in the order to press them; for - example, `^Wgf` indicates that you should type Ctrl-W, then g, and finally f. + example, `gf` indicates that you should type Ctrl-W, then g, and finally f. ## Contributing diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 931efac..46b88d0 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -4,7 +4,9 @@ - [Installation](./install.md) - [Configuration](./configure.md) -- [Verification](./verify.md) +- [E2EE](./e2ee/README.md) + - [Verification](./e2ee/verify.md) + - [Room Keys](./e2ee/keys.md) - [Rooms](./rooms/README.md) - [Browsing](./rooms/browsing.md) - [Members](./rooms/members.md) diff --git a/src/commands.md b/src/commands.md index f4cd3a6..470e8bf 100644 --- a/src/commands.md +++ b/src/commands.md @@ -2,34 +2,39 @@ ## iamb commands -| Command | Aliases | Help | -| ------------------- | ------------------------------------- | ----------------------------------- | -| `:create` | | See [Room Creation] | -| `:dms` | | See [Browsing Direct Messages] | -| `:download` | | See [Downloading Attachments] | -| `:edit` | | See [Editing Messages] | -| `:invite accept` | | See [Room Invitations] | -| `:invite reject` | | See [Room Invitations] | -| `:invite send` | | See [Room Invitations] | -| `:join` | | See [Joining And Leaving Rooms] | -| `:leave` | | See [Joining And Leaving Rooms] | -| `:members` | | See [Viewing Room/Space Members] | -| `:open` | | See [Downloading Attachments] | -| `:react` | | See [Reacting To A Message] | -| `:redact` | | See [Redacting A Message] | -| `:reply` | | See [Replying To A Message] | -| `:rooms` | | See [Browsing Rooms] | -| `:room name set` | | See [Setting Room Properties] | -| `:room name unset` | | See [Setting Room Properties] | -| `:room tag set` | | See [Setting Room Tags] | -| `:room tag unset` | | See [Setting Room Tags] | -| `:room topic set` | | See [Setting Room Properties] | -| `:room topic unset` | | See [Setting Room Properties] | -| `:spaces` | | See [Browsing Spaces] | -| `:unreact` | | See [Reacting To A Message] | -| `:upload` | | See [Sending] | -| `:verify` | | See [Verification] | -| `:welcome` | | Shows the startup Welcome window | +| Command | Aliases | Help | +| ------------------- | ------------------------------------- | ----------------------------------------- | +| `:chats` | | See [Browsing Rooms And DMs Together] | +| `:create` | | See [Room Creation] | +| `:dms` | | See [Browsing Direct Messages] | +| `:download` | | See [Downloading Attachments] | +| `:edit` | | See [Editing Messages] | +| `:editor` | | See [Sending] | +| `:invite accept` | | See [Room Invitations] | +| `:invite reject` | | See [Room Invitations] | +| `:invite send` | | See [Room Invitations] | +| `:join` | | See [Joining And Leaving Rooms] | +| `:keys export` | | See [Exporting / Importing Keys] | +| `:keys import` | | See [Exporting / Importing Keys] | +| `:leave` | | See [Joining And Leaving Rooms] | +| `:logout` | | Log out of the client. | +| `:members` | | See [Viewing Room/Space Members] | +| `:open` | | See [Downloading Attachments] and [Opening Links] | +| `:react` | | See [Reacting To A Message] | +| `:redact` | | See [Redacting A Message] | +| `:reply` | | See [Replying To A Message] | +| `:rooms` | | See [Browsing Rooms] | +| `:room name set` | | See [Setting Room Properties] | +| `:room name unset` | | See [Setting Room Properties] | +| `:room tag set` | | See [Setting Room Tags] | +| `:room tag unset` | | See [Setting Room Tags] | +| `:room topic set` | | See [Setting Room Properties] | +| `:room topic unset` | | See [Setting Room Properties] | +| `:spaces` | | See [Browsing Spaces] | +| `:unreact` | | See [Reacting To A Message] | +| `:upload` | | See [Sending] | +| `:verify` | | See [Verification] | +| `:welcome` | | Shows the startup Welcome window | ## Vim commands @@ -73,11 +78,14 @@ table th:nth-of-type(3) { [Browsing Direct Messages]: ./rooms/browsing.md#browsing-direct-messages [Browsing Rooms]: ./rooms/browsing.md#browsing-rooms +[Browsing Rooms And DMs Together]: ./rooms/browsing.md#browsing-rooms-and-dms-together [Browsing Spaces]: ./rooms/browsing.md#browsing-spaces [Closing Tabs]: ./layout/tabs.md#closing-tabs [Closing Windows]: ./layout/tabs.md#closing-windows [Downloading Attachments]: ./messages/#downloading-attachments [Editing Messages]: ./messages/#editing-messages +[Exporting / Importing Keys]: ./e2ee/keys.md#exporting-importing-keys +[Opening Links]: ./messages/#opening-links [Opening Tabs]: ./layout/tabs.md#opening-tabs [Opening Windows]: ./layout/tabs.md#opening-windows [Organizing Tabs]: ./layout/tabs.md#organizing-tabs @@ -92,5 +100,5 @@ table th:nth-of-type(3) { [Setting Room Properties]: ./rooms/management.md#setting-room-properties [Setting Room Tags]: ./rooms/management.md#setting-room-tags [Switching Tabs]: ./layout/tabs.md#switching-tabs -[Verification]: ./verify.md +[Verification]: ./e2ee/verify.md [Viewing Room/Space Members]: ./rooms/members.md#viewing-roomspace-members diff --git a/src/configure.md b/src/configure.md index f18bf2c..da99cf8 100644 --- a/src/configure.md +++ b/src/configure.md @@ -1,33 +1,41 @@ # Configuration -__iamb__ is configurable via a JSON configuration file located in the +__iamb__ is configurable via a TOML configuration file located in the configuration directory. By default, the configuration directory is determined by [dirs::config_dir], but you can override it at startup with the `-C` command-line flag. ## Profiles -You can configure a Matrix account in your `config.json` by adding a new field -to the `"profiles"` object. For example, if you had two different accounts on -your homeserver: - -```json -{ - "profiles": { - "admin": { - "user_id": "@user1:example.com", - "url": "https://example.com" - }, - "user": { - "user_id": "@user2:example.com", - "url": "https://example.com" - } - }, - "default_profile": "user" -} +You can configure a Matrix account in your `config.toml` by creating a +`profiles` subsection with a `user_id` field specifying your account: + +```toml +[profiles.user] +user_id = "@user2:example.com" +``` + +When you start __iamb__ for the first time, it will ask you whether you want to +log in with a password (enter `p` to select), or SSO (enter `s` to select). If +you choose SSO, then a page will open in your browser to go through the SSO +authentication flow. + +### Multiple Profiles + +You can create multiple profiles for different accounts or settings by adding +additional subsections to the `profiles` section: + +```toml +default_profile = "user" + +[profiles.admin] +user_id = "@user1:example.com" + +[profiles.user] +user_id = "@user2:example.com" ``` -With the `"default_profile"` field set, __iamb__ will default to using the +With the `default_profile` field set, __iamb__ will default to using the `user` profile at startup. You can manually specify what you want via the `-P` flag. For example: @@ -36,116 +44,85 @@ $ iamb -P admin Logging in for @user1:example.com... ``` -Several of the fields that you can place under the global configuration can also be -placed within profile configurations to achieve per-profile values: +### Per-Profile Configuration -- `"settings"` -- `"dirs"` -- `"layout"` +Several of the sectioncs that you can place under the global configuration can +also be placed within profile configurations to achieve per-profile values: -## Settings +- `dirs` +- `layout` +- `macros` +- `settings` -| Name | Default | Description | -| ---------------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `default_room` | | A default room name or username to open at startup, in place of showing the welcome screen. | -| `image_preview` | (unset) | Configures displaying image attachments for terminals that support previewing images. See [Image Previews](#image-previews). | -| `log_level` | `"info"` | Configures the minimum log level. Valid values are `"trace"`, `"debug"`, `"info"`, `"warn"` or `"error"`. | -| `open_command` | | Configures a command to use for opening downloads instead of the default. (e.g., `["my-open", "--file"]` to run a custom script | -| `request_timeout` | 120 | How long to wait in seconds before timing out requests to the homeserver. | -| `reaction_display` | `true` | Whether to display message reactions. You can use this or `reaction_shortcode_display` if your terminal doesn't show Emojis well. | -| `reaction_shortcode_display` | `false` | Whether to show the shortcode value instead of the Emoji for reactions. If no shortcode is available, then it won't be displayed. | -| `read_receipt_send` | `true` | Whether to send read receipts for viewed rooms. | -| `read_receipt_display` | `true` | Whether to display read receipts next to messages in the room scrollback. | -| `typing_notice_send` | `true` | Whether to send notifications to other room members when typing. | -| `typing_notice_display` | `true` | Whether to display the typing notifications bar. | -| `users` | `{}` | Configure how other users get displayed in the client. See [User Display](#user-display). | -| `username_display` | `"username"` | Configure what name is shown for senders. Valid values are `"username"` (e.g., `@user:example.org`), `"localpart"` (e.g., `user`), or `"displayname"` (e.g., `User Name`) | +Per-profile values will be merged on top of the global values. For example: -For example, if you wanted to raise the timeout to accommodate a long initial -sync, and show more log messages, you could put the following into your -`config.json`: - -```json -{ - "settings": { - "log_level": "debug", - "request_timeout": 180 - } -} +```toml +[profiles.user.layout] +style = "restore" + +[profiles.admin.layout] +style = "new" ``` -## Startup Layout +### Explicit Homeserver URLs -You can configure what windows get shown when __iamb__ starts by adding a -`"layout"` object. +If your homeserver is located on a different domain than the server part of the +`user_id` and you don't have a [`/.well-known`][well_known_entry] entry, then +you can explicitly specify the homeserver URL to use: -### Restore Previous Layout +```toml +default_profile = "user" -By default, the client will try to restore all of the tabs and windows from the -last time it was run. You can explicitly configure this behaviour with: +[profiles.admin] +user_id = "@user1:example.com" +url = "https://example.com" -```json -{ - "layout": { "style": "restore" } -} +[profiles.user] +user_id = "@user2:example.com" +url = "https://example.com" ``` -### New Window - -If you want to see a single new window each time you start up, you can set: - -```json -{ - "layout": { "style": "new" } -} -``` - -This will show the `:welcome` window by default, but you can set -`"default_room"` to change it to something else. +## Settings -### Configured Layout +| Name | Default | Description | +| ---------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| `default_room` | | A default room name or username to open at startup, in place of showing the welcome screen. | +| `image_preview` | (unset) | Configures displaying image attachments for terminals that support previewing images. See [Image Previews](#image-previews) below. | +| `log_level` | `"info"` | Configures the minimum log level. Valid values are `"trace"`, `"debug"`, `"info"`, `"warn"` or `"error"`. | +| `message_user_color` | `false` | Whether to color entire messages using the same color used for the sender's username and display name. | +| `message_shortcode_display` | `false` | Whether to replace Emojis in message bodies with their shortcodes. | +| `notifications` | (unset) | Whether to generate desktop notifications for messages sent to rooms not currently being viewed. See [Notifications](#notifications) | +| `open_command` | | Configures a command to use for opening downloads instead of the default. (e.g., `["my-open", "--file"]` to run a custom script | +| `reaction_display` | `true` | Whether to display message reactions. You can use this or `reaction_shortcode_display` if your terminal doesn't show Emojis well. | +| `reaction_shortcode_display` | `false` | Whether to show the shortcode value instead of the Emoji for reactions. If no shortcode is available, then it won't be displayed. | +| `read_receipt_display` | `true` | Whether to display read receipts next to messages in the room scrollback. | +| `read_receipt_send` | `true` | Whether to send read receipts for viewed rooms. | +| `request_timeout` | 120 | How long to wait in seconds before timing out requests to the homeserver. | +| `sort` | | Configures how to sort the lists in different windows like `:rooms` or `:members`. See [Sorting Lists](#sorting-lists) below. | +| `typing_notice_display` | `true` | Whether to display the typing notifications bar. | +| `typing_notice_send` | `true` | Whether to send notifications to other room members when typing. | +| `user_gutter_width` | `30` | How much space to reserve for displaying the message sender in room history. | +| `users` | `{}` | Configure how other users get displayed in the client. See [User Display](#user-display). | +| `username_display` | `"username"` | Configure what name is shown for senders. Valid values are `"username"` (e.g., `@user:example.org`), `"localpart"` (e.g., `user`), or `"displayname"` (e.g., `User Name`) | -If you want to start up with the same layout every time regardless of the state -at last exit, you can specify an array of tabs and the window tree in each one: +For example, if you wanted to raise the timeout to accommodate a long initial +sync, and show more log messages, you could put the following into your +`config.toml`: -```json -{ - "layout": { - "style": "config", - "tabs": [ - { - "split": [ - { "window": "#room1:example.org" }, - { "window": "#room2:example.org" } - ] - }, - { - "split": [ - { - "split": [ - { "window": "#room3:example.org" }, - { "window": "#room4:example.org" } - ] - }, - { "window": "@user:example.org" } - ] - } - ] - } -} +```toml +[settings] +log_level = "debug" +request_timeout = 180 ``` -## Image Previews +### Image Previews -When the `"image_preview"` object is added to your `"settings"`, __iamb__ will +When the `settings.image_preview` subsection is present, __iamb__ will try to detect an appropriate way to show previews of image attachments: -```json -{ - "settings": { - "image_preview": {} - } -} +```toml +[settings] +image_preview = {} ``` There are several different supported ways of showing images: @@ -160,17 +137,10 @@ running on Windows or in a terminal that doesn't provide pixel information), you can manually specify how image previews are done using the `"protocol"` field: -```json -{ - "settings": { - "image_preview": { - "protocol": { - "type": "halfblocks", - "font_size": [ 11, 26 ] - } - } - } -} +```toml +[settings.image_preview] +protocol.type = "halfblocks" +protocol.font_size = [ 11, 26 ] ``` The `"type"` field is one of the three methods from above, and `"font_size"` @@ -181,43 +151,189 @@ can't be detected normally using the standard terminal `ioctl` calls.) You can control the maximum amount of columns/rows that the images take up in the scrollback using the `"size"` field: -```json -{ - "settings": { - "image_preview": { - "size": { - "height": 10, - "width": 66 - } - } - } -} +```toml +[settings.image_preview] +size = { height = 10, width = 66 } +``` + +### Notifications + +The `settings.notifications` section allows enabling notifications for messages +sent to rooms not currently open. For example, to enable desktop notifications, +you can put the following in your configuration: + +```toml +[settings.notifications] +enabled = true +``` + +#### Notification fields + +| Name | Default | Description | +| -------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `enabled` | `false` | Whether to send notifications | +| `show_message` | `true` | Whether to include the message body when showing the notification | +| `via` | `"desktop"` | How to deliver the notification: `"desktop"` for desktop mechanism, or `"bell"` for terminal bell. | + + +### Sorting Lists + +The `settings.sort` section allows you to customize how lists of rooms or users are +sorted in the different __iamb__ windows by specifying which values you want to +sort on. Values are provided as an array of fields, with an optional leading `~` +to flip the sort order from ascending to descending. + +For example, if you wanted to group users in the `:members` list together by their +ascending server name and descending localparts, you could do: + +```toml +[settings.sort] +members = ["server", "~localpart"] +``` + +### Sort Fields + +| Name | Default | Description | +| --------- | -------------------- | --------------------------------- | +| `rooms` | `["favorite", "lowpriority", "unread", "name"]` | How to sort the `:rooms` window | +| `chats` | (defaults to `rooms` value) | How to sort the `:chats` window | +| `dms` | (defaults to `rooms` value) | How to sort the `:dms` window | +| `spaces` | (defaults to `rooms` value) | How to sort the `:spaces` window | +| `members` | `["power", "id"]` | How to sort the `:members` window | + +#### Room Fields + +| Name | Description | +| --------------- | ----------------------------------------------------------------------------------------------------------------- | +| `"favorite"` | Sort rooms with the "Favorite" tag towards the top. | +| `"lowpriority"` | Sort rooms with the "Low Priority" tag towards the bottom. | +| `"recent"` | Sort rooms with recent messages towards the top. | +| `"unread"` | Sort rooms with unread messages towards the top. | +| `"name"` | Sort rooms alphabetically by their room name. | +| `"alias"` | Sort rooms alphabetically by thei canonical alias (e.g., `#iamb-users:0x.badd.cafe`) | +| `"id"` | Sort rooms alphabetically by their unique room identifier (e.g., `!nQTgloqKBScxNjsQzR:0x.badd.cafe`). | + +#### User Fields + +| Name | Description | +| --------------- | ----------------------------------------------------------------------------------------------------------------- | +| `"power"` | Sort users by decreasing power level. | +| `"id"` | Sort users alphabetically by their username (e.g. `@user:example.com`) | +| `"localpart"` | Sort users alphabetically by the localpart of their username (e.g. the `@user` portion of `@user:example.com` | +| `"server"` | Sort users alphabetically by the server in their username (e.g. the `example.com` portion of `@user:example.com`) | + +## Startup Layout + +You can configure what windows get shown when __iamb__ starts by adding a +`layout` section. + +### Restore Previous Layout + +By default, the client will try to restore all of the tabs and windows from the +last time it was run. You can explicitly configure this behaviour with: + +```toml +[layout] +style = "restore" +``` + +### New Window + +If you want to see a single new window each time you start up, you can set: + +```toml +[layout] +style = "new" ``` +This will show the `:welcome` window by default, but you can set +`"default_room"` to change it to something else. + +### Configured Layout + +If you want to start up with the same layout every time regardless of the state +at last exit, you can specify an array of tabs and the window tree in each one: + +```toml +[layout] +style = "config" + +[[layout.tabs]] +split = [ + { window = "#room1:example.org" }, + { window = "#room2:example.org" } +] + +[[layout.tabs]] +split = [ + { split = [ { window = "#room3:example.org" }, { window = "#room4:example.org" } ] }, + { window = "@user:example.org" } +] +``` + +## Custom Keybindings + +You can add custom keybindings in `macros` subsections, which describes the Vim +modes to map the commands to, the input keys you want to map, and the keys that +you want it to then run. These keybindings behave like macros when a count is +given, and will repeat the target key sequnce *n* times. + +For example, you could use the following to map `jj` to `` in Insert mode +and `V` to `m` in Normal and Visual mode: + +```toml +[macros.insert] +"jj" = "" + +[macros."normal|visual"] +"V" = "m" +``` + +The available modes are: + +- `normal`/`n` for Normal mode +- `insert`/`i` for Insert mode +- `visual`/`v` for Visual mode +- `command`/`c` for Command mode +- `select` for Select mode +- `operator-pending` for Operator Pending mode + +Use `|` to specify that something should be mapped in several modes. + +> If you are unsure how to represent a key, you can you record a macro that use +> it and then look at its representation in the register. For example, you could +> do the following to find the value of the left arrow key: +> +> - Type `qa` to start recording to the `a` register +> - Press the left arrow key +> - Press `q` to stop recording +> - Type `"ap` to paste the contents of the `a` register, yielding `` + ## Directories __iamb__ will use the standard directories for your operating system, but you -can override them by placing a `"dirs"` field in your `config.json` containing +can override them by placing a `"dirs"` field in your `config.toml` containing any of the following fields: | Name | Default | Description | | ----------------------- | ---------------------------------- | ----------------------------------------------------------------------- | -| `cache` | [dirs::cache_dir] | Directory for __iamb__ data and output that can be safely deleted. | -| `logs` | `${cache}/logs` | Output directory for __iamb__ logs. | -| `downloads` | [dirs::download_dir] | Output directory for downloaded attachments. | +| `cache` | [`${dirs::cache_dir}`]`/iamb` | Directory for __iamb__ data and output that can be safely deleted. | +| `data` | [`${dirs::data_dir}`]`/iamb` | Directory for __iamb__ data persisted between sessions, like E2EE keys. | +| `downloads` | [`${dirs::download_dir}`] | Output directory for downloaded attachments. | | `image_previews` | `${cache}/image_preview_downloads` | Output directory for caching image displayed when using `image_preview` | +| `logs` | `${cache}/logs` | Output directory for __iamb__ logs. | ## User Display You can override how individual users get displayed in the scrollback using the -`"users"` field of the `"settings"` object. +`settings.users` section. | Name | Default | Description | | ----------------------- | -------------------- | ------------------------------------------------------------------ | | `color` | Determined per-user | The color to use when showing this user on the screen. | | `name` | Determined per-user | The name to use when showing this user on the screen. | -Valid values for the `"color"` field are: +Valid values for the `color` field are: - `"black"` - `"blue"` @@ -239,17 +355,9 @@ Valid values for the `"color"` field are: For example, if you wanted to override how a bot in a room gets displayed: -```json -{ - "settings": { - "users": { - "@jenkins:example.com": { - "name": "jenkins (CI BOT)", - "color": "light-red" - } - } - } -} +```toml +[settings.users] +"@jenkins:example.com" = { name = "jenkins (CI BOT)", color = "light-red" } ``` [arewesixelyet.com]: https://www.arewesixelyet.com/ -[dirs::cache_dir]: https://docs.rs/dirs/latest/dirs/fn.cache_dir.html +[`${dirs::cache_dir}`]: https://docs.rs/dirs/latest/dirs/fn.cache_dir.html [dirs::config_dir]: https://docs.rs/dirs/latest/dirs/fn.config_dir.html -[dirs::download_dir]: https://docs.rs/dirs/latest/dirs/fn.download_dir.html +[`${dirs::data_dir}`]: https://docs.rs/dirs/latest/dirs/fn.data_dir.html +[`${dirs::download_dir}`]: https://docs.rs/dirs/latest/dirs/fn.download_dir.html [iTerm2]: https://iterm2.com/ [Kitty]: https://sw.kovidgoyal.net/kitty/ +[well_known_entry]: https://spec.matrix.org/latest/client-server-api/#getwell-knownmatrixclient diff --git a/src/e2ee/README.md b/src/e2ee/README.md new file mode 100644 index 0000000..7fd2f27 --- /dev/null +++ b/src/e2ee/README.md @@ -0,0 +1 @@ +# End-To-End Encryption diff --git a/src/e2ee/keys.md b/src/e2ee/keys.md new file mode 100644 index 0000000..f9f9865 --- /dev/null +++ b/src/e2ee/keys.md @@ -0,0 +1,19 @@ +# Room Keys + +## Exporting / Importing Keys + +If you want to export your room keys, either to save them as a backup or +to import them into another session, you can use: + +``` +:keys export /path/to/output.keys passphrase +``` + +This will write out the keys encrypted with the given passphrase. + +When you have keys that you would like to import into __iamb__, you can do so +with: + +``` +:keys import /path/to/input.keys passphrase +``` diff --git a/src/verify.md b/src/e2ee/verify.md similarity index 100% rename from src/verify.md rename to src/e2ee/verify.md diff --git a/src/images/iamb.png b/src/images/iamb.png new file mode 100644 index 0000000..5fe3d37 Binary files /dev/null and b/src/images/iamb.png differ diff --git a/src/install.md b/src/install.md index 60f15e6..dd9d500 100644 --- a/src/install.md +++ b/src/install.md @@ -2,6 +2,11 @@ ## From a package manager +Several community members have taken care of setting up packages for their +preferred operating systems and distributions. If you don't see your system +on this page, try checking [repology] to see whether one exists for your +system. + ### Arch Linux Using your preferred [AUR helper], you can install `iamb-git`. For example, @@ -11,7 +16,10 @@ using `paru`: paru iamb-git ``` -### NetBSD +### NetBSD / pkgsrc + +On NetBSD (or any other system [with pkgsrc available][pkgsrc]), you can +install the `iamb` package: ``` pkgin install iamb @@ -19,7 +27,7 @@ pkgin install iamb ### NixOS -There is an `iamb` package available in the 23.05 channel, or, if you have +There is an `iamb` package available in the 23.11 channel, or, if you have [enabled flakes] in Nix, you can install __iamb__ from the Git repository via: ``` @@ -29,6 +37,23 @@ nix profile install "github:ulyssa/iamb/latest" You can replace `latest` with a branch or specific version tag name if you want to install something besides the most recent release (e.g. `main` or `v0.0.8`). +### openSUSE Tumbleweed + +On openSUSE Tumbleweed a [package][openSUSE] is available from openSUSE Build +Service (OBS). You can install it using OBS Package Installer: + +``` +opi iamb +``` + +### Snap + +A snap is available for Linux distributions [which support it][install-snap]: + +``` +snap install iamb +``` + ## GitHub Releases You can find binaries built for x86\_64 Linux from the [Releases] page on GitHub. @@ -55,11 +80,15 @@ $ git clone https://github.com/ulyssa/iamb.git $ cd iamb $ cargo build --release $ ./target/release/iamb --version -iamb 0.0.8 (89bb107) +iamb 0.0.9 (82645c8) ``` [AUR helper]: https://wiki.archlinux.org/title/AUR_helpers [crates.io]: https://crates.io/crates/iamb [enabled flakes]: https://nixos.wiki/wiki/Flakes#Enable_flakes [GitHub]: https://github.com/ulyssa/iamb +[installing-snap]: https://snapcraft.io/docs/installing-snapd +[openSUSE]: https://build.opensuse.org/package/show/home%3Asmolsheep/iamb +[pkgsrc]: https://pkgsrc.smartos.org/ [Releases]: https://github.com/ulyssa/iamb/releases/ +[repology]: https://repology.org/project/iamb/versions diff --git a/src/keybindings.md b/src/keybindings.md index 6d61d48..b04122f 100644 --- a/src/keybindings.md +++ b/src/keybindings.md @@ -2,10 +2,10 @@ ## iamb keybindings -| Modes | Keybinding | Aliases | Help | -| --------------- | --------------- | ------- | ----------------------------------- | -| Normal, Visual | `^Wm` | `^W^M` | See [Message Scrollback] | -| Normal, Visual | `^Wz` | `^W^Z` | See [Organizing Windows] | +| Modes | Keybinding | Aliases | Help | +| --------------- | ----------------- | -------------- | ----------------------------------- | +| Normal, Visual | `m` | `` | See [Message Scrollback] | +| Normal, Visual | `z` | `` | See [Organizing Windows] | ## Vim keybindings @@ -27,35 +27,35 @@ documentation. | Normal | `'{a-z}` | | See [Message Scrollback] | | Normal | `/` | | See [Message Scrollback] | | Normal | `?` | | See [Message Scrollback] | -| Normal, Visual | `^B` | `` | See [Message Scrollback] | -| Normal, Visual | `^E` | | See [Message Scrollback] | -| Normal, Visual | `^F` | `` | See [Message Scrollback] | -| Normal, Visual | `^D` | | See [Message Scrollback] | -| Normal | `^I` | `` | See [Switching Windows] | -| Insert | `^N` | | See [Sending] | -| Normal | `^O` | | See [Switching Windows] | -| Insert | `^P` | | See [Sending] | -| Normal, Visual | `^U` | | See [Message Scrollback] | -| Normal, Visual | `^Wf` | `^W^F` | See [Opening Tabs] | -| Normal, Visual | `^Wh` | `^W^H` | See [Switching Windows] | -| Normal, Visual | `^WH` | | See [Organizing Windows] | -| Normal, Visual | `^Wj` | `^W^J` | See [Switching Windows] | -| Normal, Visual | `^WJ` | | See [Organizing Windows] | -| Normal, Visual | `^Wk` | `^W^K` | See [Switching Windows] | -| Normal, Visual | `^WK` | | See [Organizing Windows] | -| Normal, Visual | `^Wl` | `^W^L` | See [Switching Windows] | -| Normal, Visual | `^WL` | | See [Organizing Windows] | -| Normal, Visual | `^Wo` | `^W^O` | See [Closing Windows] | -| Normal, Visual | `^Wq` | `^W^Q` | See [Closing Windows] | -| Normal, Visual | `^Ws` | `^W^S` | See [Opening Windows] | -| Normal, Visual | `^WT` | | See [Organizing Windows] | -| Normal, Visual | `^Wv` | `^W^V` | See [Opening Windows] | -| Normal, Visual | `^W-` | | See [Resizing Windows] | -| Normal, Visual | `^W+` | | See [Resizing Windows] | -| Normal, Visual | `^W<` | | See [Resizing Windows] | -| Normal, Visual | `^W>` | | See [Resizing Windows] | -| Normal, Visual | `^W=` | | See [Resizing Windows] | -| Normal, Visual | `^Y` | | See [Message Scrollback] | +| Normal, Visual | `` | `` | See [Message Scrollback] | +| Normal, Visual | `` | | See [Message Scrollback] | +| Normal, Visual | `` | `` | See [Message Scrollback] | +| Normal, Visual | `` | | See [Message Scrollback] | +| Normal | `` | `` | See [Switching Windows] | +| Insert | `` | | See [Sending] | +| Normal | `` | | See [Switching Windows] | +| Insert | `` | | See [Sending] | +| Normal, Visual | `` | | See [Message Scrollback] | +| Normal, Visual | `f` | `` | See [Opening Tabs] | +| Normal, Visual | `h` | `` | See [Switching Windows] | +| Normal, Visual | `H` | | See [Organizing Windows] | +| Normal, Visual | `j` | `` | See [Switching Windows] | +| Normal, Visual | `J` | | See [Organizing Windows] | +| Normal, Visual | `k` | `` | See [Switching Windows] | +| Normal, Visual | `K` | | See [Organizing Windows] | +| Normal, Visual | `l` | `` | See [Switching Windows] | +| Normal, Visual | `L` | | See [Organizing Windows] | +| Normal, Visual | `o` | `` | See [Closing Windows] | +| Normal, Visual | `q` | `` | See [Closing Windows] | +| Normal, Visual | `s` | `` | See [Opening Windows] | +| Normal, Visual | `T` | | See [Organizing Windows] | +| Normal, Visual | `v` | `` | See [Opening Windows] | +| Normal, Visual | `-` | | See [Resizing Windows] | +| Normal, Visual | `+` | | See [Resizing Windows] | +| Normal, Visual | `<` | | See [Resizing Windows] | +| Normal, Visual | `>` | | See [Resizing Windows] | +| Normal, Visual | `=` | | See [Resizing Windows] | +| Normal, Visual | `` | | See [Message Scrollback] |