Initial commit

This commit is contained in:
2025-07-09 12:25:44 +02:00
commit c3aec55da4
109 changed files with 10797 additions and 0 deletions

31
.gitignore vendored Normal file
View File

@@ -0,0 +1,31 @@
# build output
dist/
# generated types
.astro/
# dependencies
node_modules/
# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# environment variables
.env
.env.production
# macOS-specific files
.DS_Store
# Source files
profanity/
cproof/
.vscode/
# Automatically generated files
src/content/docs/api-reference/
src/content/docs/command-reference.md

24
.prettierrc Normal file
View File

@@ -0,0 +1,24 @@
{
"printWidth": 120,
"proseWrap": "preserve",
"singleQuote": false,
"trailingComma": "none",
"bracketSameLine": true,
"htmlWhitespaceSensitivity": "ignore",
"embeddedLanguageFormatting": "off",
"overrides":
[
{
"files": ["*.md", "*.mdx"],
"options":
{
"parser": "mdx",
"printWidth": 500,
"proseWrap": "preserve",
"objectWrap": "preserve",
"singleQuote": false,
"bracketSameLine": true
}
}
]
}

20
Dockerfile Normal file
View File

@@ -0,0 +1,20 @@
FROM node:latest
RUN apt-get update && \
apt-get install -y git make doxygen python3-sphinx && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
RUN git clone --depth 1 https://git.jabber.space/devs/profanity.git ./profanity
COPY package*.json ./
RUN npm ci
COPY --exclude=.git . .
RUN cd /app/profanity/apidocs/c/ && ./gen.sh
RUN cd /app/profanity/apidocs/python/ && ls -alh && chmod +x gen.sh && ./gen.sh
RUN npm run astro telemetry disable
RUN npm run pre-build
RUN npm run build

104
astro.config.mjs Normal file
View File

@@ -0,0 +1,104 @@
// @ts-check
import { defineConfig } from "astro/config";
import starlight from "@astrojs/starlight";
import startlightBlog from "starlight-blog";
import starlightScrollToTop from "starlight-scroll-to-top";
// https://astro.build/config
export default defineConfig({
integrations: [
starlight({
title: "Jabber.Space",
defaultLocale: "root",
customCss: ["./src/styles/global.css"],
locales: {
root: {
label: "English",
lang: "en"
},
ru: {
label: "Русский",
lang: "ru"
}
},
head: [],
social: [
{
icon: "github",
label: "Gitea",
href: "https://git.jabber.space/devs/profanity/"
}
],
editLink: {
baseUrl: "https://git.jabber.space/devs/jabber.space/"
},
lastUpdated: true,
sidebar: [
{
label: "Getting Started",
autogenerate: { directory: "getting-started" },
translations: {
'ru-RU': 'Введение',
},
},
{
label: "Guides",
autogenerate: { directory: "guides" },
translations: {
'ru-RU': 'Инструкции',
},
},
{
label: "Contributing",
autogenerate: { directory: "contributing" },
},
{
label: "About",
autogenerate: { directory: "about" },
translations: {
'ru-RU': 'О проекте',
},
},
{
label: "Blog",
link: "/blog/",
translations: {
'ru-RU': 'Блог',
},
},
{
label: "Command Reference",
link: "/command-reference/",
translations: {
'ru-RU': 'Список команд',
},
},
{
label: "API Reference",
badge: "C",
autogenerate: { directory: "/api-reference/c/" }
},
{
label: "API Reference",
badge: "Python",
autogenerate: { directory: "/api-reference/python/" }
}
],
plugins: [
startlightBlog({
navigation: "none"
}),
starlightScrollToTop({
position: "right",
tooltipText: "Scroll to top",
showTooltip: true,
smoothScroll: true,
threshold: 20,
svgPath: "M12 4L7 9H9V16H15V9H17L12 4M10 16L12 20L14 16",
svgStrokeWidth: 1,
borderRadius: "50"
})
]
})
]
});

6463
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

23
package.json Normal file
View File

@@ -0,0 +1,23 @@
{
"name": "jabber-space-docs",
"type": "module",
"version": "0.0.1",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"pre-build": "tsx src/scripts/pre-build.ts",
"build": "astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"@astrojs/starlight": "^0.34.4",
"astro": "^5.6.1",
"starlight-blog": "^0.24.0",
"starlight-scroll-to-top": "0.1.1"
},
"devDependencies": {
"fast-xml-parser": "^5.2.5",
"tsx": "^4.20.3"
}
}

45
public/favicon.svg Normal file
View File

@@ -0,0 +1,45 @@
<svg width="64" height="64" viewBox="0 0 64 64"
xmlns="http://www.w3.org/2000/svg" role="img" aria-label="CProof favicon">
<defs>
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
<feDropShadow dx="0" dy="0" stdDeviation="3" flood-color="#39ff7f" flood-opacity="0.9"/>
<feDropShadow dx="0" dy="0" stdDeviation="5" flood-color="#39ff7f" flood-opacity="0.6"/>
</filter>
</defs>
<style>
text {
font-family: "Courier New", monospace;
user-select: none;
}
.prompt {
fill: #00ff00;
font-size: 14px;
}
.c {
fill: #cccccc;
font-size: 9px;
dominant-baseline: middle;
}
.p {
fill: #ffffff;
font-size: 28px;
font-weight: bold;
}
circle {
fill: none;
stroke: #39ff7f;
stroke-width: 1.2;
filter: url(#glow);
}
</style>
<circle cx="32" cy="32" r="30" />
<text x="8" y="34" class="prompt">~&gt;</text>
<!-- Centered P -->
<text x="32" y="40" class="p" text-anchor="middle">P</text>
<!-- Subscript C -->
<text x="18" y="38" class="c">C</text>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

2
public/robots.txt Normal file
View File

@@ -0,0 +1,2 @@
User-agent: *
Disallow: /

BIN
src/assets/CProof-ui-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
src/assets/CProof-ui-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
src/assets/CProof-ui-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
src/assets/CProof-ui-4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
src/assets/CProof-ui-5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
src/assets/aqua.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
src/assets/batman.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
src/assets/bios.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
src/assets/bobquestion.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
src/assets/boothj5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
src/assets/complex.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
src/assets/contacts.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

BIN
src/assets/encwarn-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
src/assets/encwarn-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
src/assets/encwarn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
src/assets/encwarnoff-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
src/assets/encwarnoff-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
src/assets/encwarnoff.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
src/assets/endingrecv.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

BIN
src/assets/endingsend.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

BIN
src/assets/forest.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
src/assets/gruvbox.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
src/assets/hacker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
src/assets/headache.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
src/assets/houston.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
src/assets/irssi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
src/assets/joker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
src/assets/jubalian.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

BIN
src/assets/mono.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
src/assets/myfp-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
src/assets/myfp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

BIN
src/assets/newchar-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
src/assets/newchar-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

BIN
src/assets/newchar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
src/assets/omemochar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 852 B

BIN
src/assets/orange.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
src/assets/original.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
src/assets/otrchar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
src/assets/pgpchar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
src/assets/pgpkeys.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

BIN
src/assets/plainchar-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
src/assets/plainchar-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
src/assets/plainchar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
src/assets/receiving.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

BIN
src/assets/sending.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

BIN
src/assets/shade.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
src/assets/simple.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
src/assets/snikket.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
src/assets/spawn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
src/assets/started-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
src/assets/started.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
src/assets/theirfp-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
src/assets/theirfp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
src/assets/whiteness.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

13
src/content.config.ts Normal file
View File

@@ -0,0 +1,13 @@
import { defineCollection } from "astro:content";
import { docsLoader } from "@astrojs/starlight/loaders";
import { docsSchema } from "@astrojs/starlight/schema";
import { blogSchema } from "starlight-blog/schema";
export const collections = {
docs: defineCollection({
loader: docsLoader(),
schema: docsSchema({
extend: (context) => blogSchema(context)
})
})
};

View File

@@ -0,0 +1,116 @@
---
title: Frequently Asked Questions
---
## How do I connect with multiple accounts?
CProof supports only one account per instance, but you can easily run multiple instances!
Just launch CProof in separate terminals, or use a terminal multiplexer like kitty, screen, or tmux.
## OMEMO doesn't work for me
Please make sure you're running the **latest** version of CProof.
A common issue is misconfigured PEP nodes. This could be due to incorrect server settings or a misconfigured client in the past. CProof attempts to correct this automatically but might not always succeed. See [issue 1538](https://github.com/profanity-im/profanity/issues/1538) for more details.
## Will CProof run on <some platform>?
CProof should run on any POSIX-compatible system. See the [install guide](/getting-started/installation) for platform-specific instructions.
## Will CProof work with Slack?
Provided the XMPP gateway has been enabled for your team, CProof will work. See [the Slack page on gateways](https://slack.zendesk.com/hc/en-us/articles/201727913-Connecting-to-Slack-over-IRC-and-XMPP) for details.
## Will CProof work with MSN/Yahoo/AIM/IRC etc?
No, CProof is purely an XMPP chat client.
## Can CProof use my keychain/keyring to retrieve my password?
Yes. The [/account](/command-reference#account) command includes an `eval_password` property which can be used to execute a script to retrieve your password.
For example, on Ubuntu using GNOME Keyring and [secret-tool](https://manpages.debian.org/testing/libsecret-tools/secret-tool.1.en.html):
To add the password:
```plaintext
secret-tool store --label="Bobs account" xmpp bob@server.org
```
You will be prompted to enter the password.
Command to use for the account `eval_password` property:
```plaintext
secret-tool lookup xmpp bob@server.org
```
On OS X, use the following command for the `eval_password` property:
```plaintext
security find-generic-password -s bob@server.org -w
```
You can also use CProof together with _pass_, see this <a href="https://hispagatos.org/post/xmpp_profanity_and_pass" target="_blank" rel="noopener noreferrer">guide</a>
## Can I connect to more than one account at a time?
No, the recommended way is to use multiple terminal windows, or a terminal multiplexer like GNU Screen or tmux.
## Why are my settings not persistent?
Because you did not use _/save_.
## Where is the profrc file format described?
Nowhere. Well, actually you cold read the source code. But you should not edit the profrc file yourself anyways. Just use the commands to manipulate the settings. And don't forget to _/save_ before exiting.
## Why does the F1 key open terminal help rather than going back to the main console window?
Some terminals have a key binding for F1 to open help. You can use the alt-num keys to change windows, or if you prefer to use the F keys, you'll need to change the terminal setting to open help with another key.
## Why can I not type anything in the input bar?
CProof uses the ncursesw library to support wide characters, which requires a UTF-8 encoding. Try running the following (or the equivalent for your language's UTF-8 encoding) in the terminal before running CProof.
```plaintext
export LANG=en_US.UTF-8
```
## How can I hide join/leave messages in MUCs?
You can deactivate those messages with the following command:
```bash
/presence chat none
```
## I've found a bug/have a feature request who do I tell?
If you have an account, you can log an issue on the <a href="https://git.jabber.space/devs/profanity/issues" target="_blank" rel="noopener noreferrer">issue tracker</a>.
Alternatively you are welcome to post on the <a href="https://lists.posteo.de/listinfo/profanity" target="_blank" rel="noopener noreferrer">mailing list</a>.
## I'd like to contribute, what should I do?
A page has been written with some ideas for how to [help out](/contributing/helpout). Any contributions/ideas are very welcome. Also see the <a href="https://git.jabber.space/devs/profanity/src/branch/master/CONTRIBUTING.md" target="_blank" rel="noopener noreferrer">CONTRIBUTING.md</a> guide on GitHub.
## Are there more clients like this?
Yes, there are several commandline clients: <a href="https://github.com/profanity-im/profanity/" target="_blank" rel="noopener noreferrer">profanity</a>, <a href="https://www.gnu.org/software/freetalk/" target="_blank" rel="noopener noreferrer">freetalk</a>, <a href="https://mcabber.com/" target="_blank" rel="noopener noreferrer">mcabber</a>, <a href="https://poez.io/" target="_blank" rel="noopener noreferrer">poezio</a> and <a href="https://xmpp.org/software/clients.html" target="_blank" rel="noopener noreferrer">more clients</a>.
## How to connect to XMPP server using Tor
To connect to the XMPP server by the Tor network, you must launch CProof with a tool called "proxychains-ng".
## How to connect to an onion XMPP server
An onion XMPP server is a server which is providing an onion address to reach it inside the Tor network. You can specify the onion address with the [/account](/command-reference#account) command in CProof.
```bash
/account set account_name server address.onion
```
## How do I automatically open chat windows with contacts?
To the right side you can see your roster. It contains all your contacts and rooms (MUCs). MUCs can be automatically joined via bookmarks. If you want to open a chat window to a user automatically upon the start of CProof you can write a script to do that. Put _/msg theusersnickname_ into _~/.local/share/profanity/scripts/myautoscript_. And configure your account to automatically launch that script _/account set startscript myautoscript_.

View File

@@ -0,0 +1,40 @@
---
title: Supported XEPs
description: Commands for creating and managing accounts. Calling with no arguments will display information for the current account.
---
All the XEPs listed here are supported by CProof. For some XEPs we are not sure which version of the XEP is implemented in CProof in which case we left the Supported Version field blank.
| XEP | Supported Version | Notes |
| -------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ---------------------------------------------------------------- |
| <a href="https://www.xmpp.org/extensions/xep-0012.html" target="_blank" rel="noopener noreferrer">XEP-0012: Last Activity</a> | 2.0 | |
| <a href="https://www.xmpp.org/extensions/xep-0027.html" target="_blank" rel="noopener noreferrer">XEP-0027: Current Jabber OpenPGP Usage</a> | 1.4 | |
| <a href="https://xmpp.org/extensions/xep-0030.html" target="_blank" rel="noopener noreferrer">XEP-0030: Service Discovery</a> | | |
| <a href="https://xmpp.org/extensions/xep-0045.html" target="_blank" rel="noopener noreferrer">XEP-0045: Multi-User Chat</a> | | |
| <a href="https://xmpp.org/extensions/xep-0048.html" target="_blank" rel="noopener noreferrer">XEP-0048: Bookmarks</a> | 1.2 | |
| <a href="https://xmpp.org/extensions/xep-0050.html" target="_blank" rel="noopener noreferrer">XEP-0050: Ad-Hoc Commands</a> | 1.3.0 | Since 0.6.0. No multi-step yet. |
| <a href="https://xmpp.org/extensions/xep-0060.html" target="_blank" rel="noopener noreferrer">XEP-0060: Publish-Subscribe</a> | 1.15.8 | Since 0.7.0. Used for OMEMO. |
| <a href="https://xmpp.org/extensions/xep-0077.html" target="_blank" rel="noopener noreferrer">XEP-0077: In-Band Registration</a> | 2.4 | Since 0.11.0. Only password change. |
| <a href="https://xmpp.org/extensions/xep-0085.html" target="_blank" rel="noopener noreferrer">XEP-0085: Chat State Notifications</a> | 2.1 | |
| <a href="https://xmpp.org/extensions/xep-0091.html" target="_blank" rel="noopener noreferrer">XEP-0091: Legacy Delayed Delivery</a> | 1.4 | |
| <a href="https://xmpp.org/extensions/xep-0092.html" target="_blank" rel="noopener noreferrer">XEP-0092: Software Version</a> | 1.1 | |
| <a href="https://xmpp.org/extensions/xep-0115.html" target="_blank" rel="noopener noreferrer">XEP-0115: Entity Capabilities</a> | | |
| <a href="https://xmpp.org/extensions/xep-0157.html" target="_blank" rel="noopener noreferrer">XEP-0157: Contact Addresses for XMPP Services</a> | 1.1.1 | Since 0.11.0. |
| <a href="https://xmpp.org/extensions/xep-0160.html" target="_blank" rel="noopener noreferrer">XEP-0160: Best Practices for Handling Offline Messages</a> | 1.0.1 | |
| <a href="https://xmpp.org/extensions/xep-0184.html" target="_blank" rel="noopener noreferrer">XEP-0184: Message Delivery Receipts</a> | 1.2 | |
| <a href="https://xmpp.org/extensions/xep-0191.html" target="_blank" rel="noopener noreferrer">XEP-0191: Blocking Command</a> | 1.3 | |
| <a href="https://xmpp.org/extensions/xep-0199.html" target="_blank" rel="noopener noreferrer">XEP-0199: XMPP Ping</a> | 2.0.1 | |
| <a href="https://xmpp.org/extensions/xep-0203.html" target="_blank" rel="noopener noreferrer">XEP-0203: Delayed Delivery</a> | 2.0 | |
| <a href="https://xmpp.org/extensions/xep-0245.html" target="_blank" rel="noopener noreferrer">XEP-0245: The /me Command</a> | 1.0 | |
| <a href="https://xmpp.org/extensions/xep-0249.html" target="_blank" rel="noopener noreferrer">XEP-0249: Direct MUC Invitations</a> | 1.0 | |
| <a href="https://xmpp.org/extensions/xep-0256.html" target="_blank" rel="noopener noreferrer">XEP-0256: Last Activity in Presence</a> | 1.1 | |
| <a href="https://xmpp.org/extensions/xep-0280.html" target="_blank" rel="noopener noreferrer">XEP-0280: Message Carbons</a> | 0.12.1 | |
| <a href="https://xmpp.org/extensions/xep-0308.html" target="_blank" rel="noopener noreferrer">XEP-0308: Last Message Correction</a> | 1.2.0 | Since 0.9.0. |
| <a href="https://xmpp.org/extensions/xep-0359.html" target="_blank" rel="noopener noreferrer">XEP-0359: Unique and Stable Stanza IDs</a> | 0.6.1 | Since 0.8.0. Only &lt;/origin-id&gt;, no &lt;/stanza-id&gt; yet. |
| <a href="https://xmpp.org/extensions/xep-0363.html" target="_blank" rel="noopener noreferrer">XEP-0363: HTTP File Upload</a> | 1.0.0 | |
| <a href="https://xmpp.org/extensions/xep-0364.html" target="_blank" rel="noopener noreferrer">XEP-0364: Current Off-the-Record Messaging Usage</a> | 0.3.2 | |
| <a href="https://xmpp.org/extensions/xep-0374.html" target="_blank" rel="noopener noreferrer">XEP-0374: OpenPGP for XMPP Instant Messaging</a> | 0.2.0 | Since 0.11.0. |
| <a href="https://xmpp.org/extensions/xep-0377.html" target="_blank" rel="noopener noreferrer">XEP-0377: Spam Reporting</a> | 0.3 | Since 0.11.0. |
| <a href="https://xmpp.org/extensions/xep-0384.html" target="_blank" rel="noopener noreferrer">XEP-0384: OMEMO Encryption</a> | 0.3.0 | Since 0.7.0. |
| <a href="https://xmpp.org/extensions/xep-0392.html" target="_blank" rel="noopener noreferrer">XEP-0392: Consistent Color Generation</a> | 0.7.0 | Since 0.8.0. |
| <a href="https://xmpp.org/extensions/xep-0454.html" target="_blank" rel="noopener noreferrer">XEP-0454: OMEMO Media sharing</a> | 0.1.0 | Since 0.10.0. |

View File

@@ -0,0 +1,108 @@
---
title: Theme Gallery
description: Commands for creating and managing accounts. Calling with no arguments will display information for the current account.
---
## aqua
![aqua](@assets/aqua.png)
## batman
![batman](@assets/batman.png)
## bios
![bios](@assets/bios.png)
## boothj5
![boothj5](@assets/boothj5.png)
## boothj5_slack
![boothj5_slack](@assets/boothj5_slack.png)
## boothj5_laptop
![boothj5_laptop](@assets/boothj5_laptop.png)
## complex
![complex](@assets/complex.png)
## forest
![forest](@assets/forest.png)
## gruvbox
![gruvbox](@assets/gruvbox.png)
## gruvbox_transparent
![gruvbox_transparent](@assets/gruvbox_transparent.png)
## hacker
![hacker](@assets/hacker.png)
## headache
![headache](@assets/headache.png)
## irssi
![irssi](@assets/irssi.png)
## joker
![joker](@assets/joker.png)
## jubalian
![jubalian](@assets/jubalian.png)
## mono
![mono](@assets/mono.png)
## orange
![orange](@assets/orange.png)
## original
![original](@assets/original.png)
## original_bright
![original_bright](@assets/original_bright.png)
## shade
![shade](@assets/shade.png)
## simple
![simple](@assets/simple.png)
## snikket
![snikket](@assets/snikket.png)
## solarized-dark
![solarized-dark](@assets/solarized-dark.png)
## solarized-light
![solarized-light](@assets/solarized-light.png)
## spawn
![spawn](@assets/spawn.png)
## whiteness
![whiteness](@assets/whiteness.png)

View File

@@ -0,0 +1,8 @@
---
title: My first blog post
date: 2023-07-24
---
## Hello
Hello world!

View File

@@ -0,0 +1,147 @@
---
title: Code Overview
description: Code overview of CProof
sidebar:
order: 2
---
This page gives an overview of the code base, the various modules and their responsibilities.
It was originally written in 2015 and might not be up to date, but can help you navigate the CProof codebase nevertheless.
## The main loop
```plaintext
profanity
```
The _main()_ function is called in:
```plaintext
src/main.c
```
At the end of _main()_, a call is made to _prof_run()_ which can be found in:
```plaintext
src/profanity.c
```
At time of writing, this function is as follows:
```c
void
prof_run(const int disable_tls, char *log_level, char *account_name)
{
_init(disable_tls, log_level);
_connect_default(account_name);
ui_update();
log_info("Starting main event loop");
char *line = NULL;
while(cont) {
log_stderr_handler();
_check_autoaway();
line = ui_readline();
if (line) {
ProfWin *window = wins_get_current();
cont = cmd_process_input(window, line);
free(line);
line = NULL;
} else {
cont = TRUE;
}
#ifdef HAVE_LIBOTR
otr_poll();
#endif
notify_remind();
jabber_process_events(10);
ui_update();
}
}
```
The important sequence of events in the main loop are:
- Check if the user entered a line (ui_readline() at src/ui/core.c).
- If they did, attempt to process the input (cmd_process_input() at src/command.c).
- Check for and handle any incoming XMPP events (jabber_process_events() at src/xmpp/connection.c).
- Refresh the UI (ui_update() at src/ui/core.c).
- Loop
## Modules
### Commands
All code related to running user entered commands, for example _/who_.
Location: `src/command`
`src/command/cmd_defs.c` - Command definitions
`src/command/cmd_ac.c` - Command autocompletion rules
`src/command/cmd_funcs.c` - Command implementation functions
### Configuration
Code related to looking up and storing information in configuration files.
Location: `src/config`
`src/config/account.c` - Data structure representing an account
`src/config/accounts.c` - Access to the accounts config file
`src/config/preferences.c` - Access to the profrc config file
`src/config/theme.c` - Access to themes
### Events
Work in progress. The intention is to move all events that could involve a plugin hook into this directory. Currently only a small number of functions have been moved here.
Location: `src/event`
`src/event/client_events.c` - Events initiated by CProof, e.g. connecting, or sending a message
`src/event/server_events.c` - Events received from the XMPP server, e.g. an incoming message
`src/event/common.c` - Common functions used in both client and server events
### Off The Record Encryption
Code to deal with OTR encryption using the libotr library. Hides the different library version APIs from the core CProof code.
Location: `src/otr`
### OpenPGP Encryption
Code to handle PGP encryption.
Location: `src/pgp`
### OMEMO Encryption
Code to handle OMEMO encryption.
Location: `src/omemo`
### Common Tools
Basic utility functions and common code such as autocomplete implementation.
Location: `src/tools`
### User Interface
All User Interface code, input handling, window rendering etc.
Location: `src/ui`
`src/ui/buffer.c` - Buffer of all output, used for redrawing the UI on resize
`src/ui/console.c` - Display functions for the console window
`src/ui/core.c` - Display functions for most other operations involving the main window area
`src/ui/inputwin.c` - Functions to handle the input window (where the user types)
`src/ui/notifier.c` - Desktop notification functions
`src/ui/occupantswin.c` - Functions for rendering the Occupants panel in chat rooms
`src/ui/rosterwin.c` - Functions for rendering the Roster panel in the console window
`src/ui/statusbar.c` - Drawing the status bar (above the input line)
`src/ui/titlebar.c` - Drawing the title bar (the top line)
`src/ui/window.c` - Data structures representing different window types and functions to manipulate them

View File

@@ -0,0 +1,26 @@
---
title: Helping Out
description: How to help out CProof project
sidebar:
order: 1
---
## Use CProof
The easiest way you can help out is just by using CProof. We are currently working on ways to communicate. Any feedback is welcome, although please keep it polite.
See [Reporting issues](/contributing/reporting-issues) for information on where and how to report issues, and how to supply logs/debug information.
## Help with the website
The website often has small errors or omissions in documentation etc. The website source is also <a href="https://git.jabber.space/devs/jabber.space/" target="_blank" rel="noopener noreferrer">available at github</a> so feel free to send pull requests there.
We're always interested to hear about CProof being used in different environments, and if you have any screenshots, we'd be happy to post them at the website.
## Contribute code
Code contributions are always very welcome. From the small (spelling fixes) to the large (new XMPP features).
If you would like to get involved, you can submit a pull request, or if you just want to get involved but don't know how, email <a href="mailto:" target="_blank" rel="noopener noreferrer">jabber.developer@jabber.space</a>.
Also make sure to read the <a href="https://git.jabber.space/devs/profanity/src/branch/master/CONTRIBUTING.md" target="_blank" rel="noopener noreferrer">CONTRIBUTING</a> document on GitHub.

View File

@@ -0,0 +1,133 @@
---
title: Reporting Issues
description: How to report CProof issues
sidebar:
order: 3
---
## Where to report issues
The best place to report issues is at the <a href="https://git.jabber.space/devs/profanity/issues" target="_blank" rel="noopener noreferrer">github issue tracker</a>.
Other options are the <a href="https://lists.posteo.de/listinfo/profanity" target="_blank" rel="noopener noreferrer">mailing list</a>,
The following would be helpful in diagnosing/reproducing the issue if you can possibly supply it: environment (OS, OS version, window manager, terminal type), CProof release version or commit hash if from development, XMPP server and/or recipient's XMPP client if the issue only occurs with certain servers/clients, finally any information about the build configuration and enabled features.
If you cant supply the above information, a simple description will do.
## Attaching logs
The logs can often help to diagnose an issue. Firstly run CProof in debug mode to enable full debug logging:
```bash
profanity -l DEBUG
```
Then recreate the issue and attach the log (or a useful section of it) found in:
```plaintext
$XDG_DATA_HOME/profanity/logs/profanity.log
```
Which on most systems is:
```plaintext
~/.local/share/profanity/logs/profanity.log
```
Remember to remove or obfuscate any private information in the logs. In particular check for credentials in connection logging. For example the auth mechanism PLAIN sends the credentials as a base64 string which can be easily reversed to get your username and password, e.g.:
```plaintext
12/12/2014 14:22:01: conn: DBG: SENT: <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">AG9saXZlci5tdWVoc2FtAE5oYTEyMDhnIw==</auth>
```
## Attaching configuration files
Some issues are only reproducible using certain configuration options, so attaching your config can also help. CProof stores its core config in:
```plaintext
$XDG_CONFIG_HOME/profanity/profrc
```
Which on most systems is:
```plaintext
~/.config/profanity/profrc
```
Account specific configuration is specified in:
```plaintext
$XDG_DATA_HOME/profanity/accounts
```
Which on most systems is:
```plaintext
~/.local/share/profanity/accounts
```
Remember to remove or obfuscate any usernames/passwords from the configuration before sending, for example, account configuration will include your password if you have set one using the [/account](/command-reference#account) command.
## Getting a backtrace
Segfaults and crashes usually result in a coredump which can be useful in debugging the problem. If you have the time, the following instructions should help when attaching a backtrace from a crash.
### Enabling coredumps
The following command will enable coredumps of unlimited size to be generated in the current terminal session:
```bash
ulimit -c unlimited
```
If you prefer to set a limit, the argument is in Kilobytes, for example to allow coredumps of up to 100MB:
```bash
ulimit -c 102400
```
Add the command to your _~/.bashrc_ or equivalent to enable coredumps for all terminal sessions.
### Rebuild in debug mode
CProof needs to be rebuilt from source to enable more useful information in the coredump.
In the source folder (where you extracted the download, or checked out from git) run the following:
```bash
./bootstrap.sh
./configure-debug # calls ./configure with debug options
make clean
make
```
This will only build an executable in the source folder and will not overwrite your system installed version. To run the newly built version, in the source folder run:
```bash
./profanity
```
Note, if you installed from Homebrew on OSX it is recommended to clone and build from github (checking out the relevant release tag) using the above steps, unless you are happy with editing and reinstalling brew formula.
### Viewing the backtrace
On Linux, you will need the GDB debugger installed for your distribution.
The coredump might be created in the folder in which you built and ran CProof, firstly start GDB pointing to CProof and the coredump:
```bash
gdb ./profanity core
```
or
```bash
coredumpctl gdb profanity
```
To view the backtrace in GDB:
```bash
bt
```
On OSX, the coredump can be found somewhere in the system console (usually in Applications->Utilities->Console in the finder). It should be named with "profanity" and the date and time of the crash.

View File

@@ -0,0 +1,228 @@
---
title: Building
description: A console-based XMPP client for power users.
sidebar:
order: 2
---
CProof is a console-based XMPP client written in C. It's built using the <a href="https://www.gnu.org/software/ncurses/" target="_blank" rel="noopener noreferrer">GNU's NCurses</a>, <a href="https://strophe.im/libstrophe/" target="_blank" rel="noopener noreferrer">libstrophe</a> and it's ultimately based on the <a href="https://profanity-im.github.io/" target="_blank" rel="noopener noreferrer">Profanity</a>.
CProof uses the _Autotools_ for its build system. The _Autotools_ consist of _Autoconf_ and _Automake_. This page doesn't go in any detail about the _Autotools_, but describes the commands needed to build CProof, and brief descriptions of the various stages. You will also need _autoconf-archive_.
You can either download the archive from the homepage or use git, a version control system, to get the latest code.
If you want to get the latest version from git you'll have to do:
```bash
git clone https://git.jabber.space/devs/profanity.git
```
After obtaining the source code, and extracting it, use the following commands to build and install
```bash
./bootstrap.sh
./configure
make
make install
```
The first step is only needed if you pulled from git
The final step requires root privileges.
Various dependencies are required to install CProof, the _./configure_ script will fail if the minimum dependencies cannot be found.
The latest code in _master_ is also kept up to date with development changes to libstrophe, so a manual build of this library may also be needed
## Dependencies
The package names below are from Ubuntu and may differ per distribution.
### Build dependencies
```plaintext
automake
autoconf
autoconf-archive
libtool
pkg-config
```
### Required dependencies
CProof is using <a href="https://github.com/strophe/libstrophe" target="_blank" rel="noopener noreferrer">libstrophe</a>.
CProof also requires development packages of:
```plaintext
ncurses
glib
libcurl
readline
sqlite3
```
### Optional dependencies
```plaintext
libnotify # Desktop notification support
libxss # Desktop idle time autoaway support
libotr # OTR support
libgpgme # PGP support
libsignal-protocol-c # OMEMO support
libgcrypt # OMEMO support (>= 1.7)
gtk2 or gtk3 # Desktop tray icon support
python # Python plugin support
cmocka # To run tests
shared-mime-info # Send files with the correct mime type
gdk-pixbuf2 # Scale the image for `/avatar set`
qrencode # Display OMEMO QR code
```
## Distribution details
To make it easier to install all the required packages in various distributions we collect copy pastes here. These are contributed to users and might be out of date. Feel free to create <a href="https://git.jabber.space/devs/jabber.space/" target="_blank" rel="noopener noreferrer">pull request</a> to improve this section.
### Debian
```bash
apt-get install libcaca-dev libnotify-dev libgtk2.0-dev libotr5-dev libssl-dev libstrophe-dev pkg-config python3-dev libexpat1-dev libncursesw5-dev libglib2.0-dev libreadline-dev libgpgme11-dev libcurl4-gnutls-dev uuid-dev libcmocka-dev libgcrypt20-dev libsignal-protocol-c-dev libxss-dev libsqlite3-dev autoconf-archive autoconf libgdk-pixbuf-2.0-dev libqrencode-dev
```
### openSUSE
```bash
zypper in gcc make automake autoconf libtool glib2-devel gtk2-devel libcmocka-devel libcurl-devel libexpat-devel libgpgme-devel libstrophe-devel libnotify-devel libotr-devel libuuid-devel ncurses-devel python3-devel readline-devel autoconf-archive libsignal-protocol-c-devel libgcrypt-devel sqlite3-devel gdk-pixbuf-devel qrencode-devel
```
### Alpine Linux (Edge)
```bash
apk add build-base autoconf autoconf-archive automake libtool pkgconf libmesode-dev ncurses-dev glib-dev curl-dev readline-dev libnotify-dev libxscrnsaver libotr-dev gpgme-dev libsignal-protocol-c-dev libgcrypt-dev gtk+2.0-dev python3-dev cmocka-dev
```
Note that some of the packages for Alpine Linux are only available in the "testing" repository
### Arch Linux
```bash
pacman -S --needed autoconf autoconf-archive automake base-devel check cmake cmocka curl doxygen expat gcc git gpgme gtk2 libgcrypt libnotify libotr libtool libxss make openssl pkg-config python wget sqlite gdk-pixbuf2 qrencode
```
### Fedora
```bash
dnf install autoconf autoconf-archive automake expect-devel gcc git glib2-devel glibc-all-langpacks gtk2-devel libXScrnSaver-devel libcmocka-devel libcurl-devel expat-devel libgcrypt-devel gpgme-devel libmicrohttpd-devel libnotify-devel libotr-devel libsignal-protocol-c-devel libtool libuuid-devel make ncurses-devel python3 python3-devel readline-devel openssl-devel sqlite-devel gdk-pixbuf2-devel qrencode-devel libstrophe-devel
```
### Mac OS
```bash
brew install autoconf autoconf-archive automake libtool pkg-config glib gnutls gpgme libotr libstrophe openssl ossp-uuid readline terminal-notifier libsignal-protocol-c
```
Some required packages are "keg-only", which means they are not symlinked into /usr/local, therefore pkg-config will fail when detecting the libraries and the build will fail. In order to fix this we need to add these packages to the _PKG_CONFIG_PATH.1rem_
```plaintext
export PKG_CONFIG_PATH="/usr/local/opt/ncurses/lib/pkgconfig:$PKG_CONFIG_PATH"
export PKG_CONFIG_PATH="/usr/local/opt/expat/lib/pkgconfig:$PKG_CONFIG_PATH"
export PKG_CONFIG_PATH="/usr/local/opt/curl/lib/pkgconfig:$PKG_CONFIG_PATH"
export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig:$PKG_CONFIG_PATH"
export PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig:$PKG_CONFIG_PATH"
```
### OpenBSD
```bash
pkg_add cmake gmake cmocka libtool automake-1.16.2 pkgconf readline python-3.8.2 autoconf-2.69p2 autoconf-archive libstrophe curl gpgme glib2 gtk+2 libotr libassuan libgpg-error libgcrypt libsignal-protocol-c sqlite3
```
<br />
## Explanations
<br />
### Input files
configure.ac Macro definitions to configure CProof for the target environment (autoconf)
Makefile.am Template Makefile (automake)
These files are the inputs to generating the actual configure script and Makefile required to configure and compile CProof.
### Generating a configure script
To generate the configure script:
```bash
./bootstrap.sh
```
This phase only needs to be run when changes have been made to configure.ac, however it does no harm to run it on every build. This phase also generates other files needed to create a config.h header (variables used in the main code), and a Makefile (used for compilation).
Why not just write configure yourself, instead of writing configure.ac and generating one with bootstrap.sh? Take a look at the generated configure script and you'll see why, there's a lot of work involved in writing a configure script.
The bootstrap.sh file is very simple, it just runs autoreconf --install see autoreconf
### Configuring
Once the configure script has been generated, run it to configure CProof.
```bash
./configure
```
This will result in the following being generated, along with some other files:
```bash
src/config.h
Makefile
```
### Compiling
The following step will then compile CProof:
```bash
make
```
Once you have run ./bootstrap.sh and ./configure once, if all you are doing is making code changes, then you only need to run make to recompile your changes.
To perform a clean build (i.e. remove all compiled files and recompile)
```bash
make clean
make
```
### Tests
All tests (unit and functional) can be run with:
```bash
make check
```
Unit tests alone can be run with:
```bash
make check-unit
```
### Install
Once you have compiled CProof with make, the executable will be available in the current directory:
```bash
./profanity
```
To install this version on your system, i.e. to be able to run it from anywhere:
```bash
sudo make install
```
This step is not really necessary when doing development (i.e. you can always run the version just compiled in the project directory), unless you want to have your development version available to any users on your system.

View File

@@ -0,0 +1,63 @@
---
title: Installation
description: How to install CProof
sidebar:
order: 1
---
CProof is available for [Linux](#linux--bsd), [*BSD](#linux--bsd), [Windows](#windows) (via WSL or Cygwin), and [macOS](#macos) (via MacPorts). Choose the installation method that suits your system.
Once installed, you can:
- [Get started quickly with CProof →](/getting-started/quick-start/)
- [Build it from source →](/getting-started/building/)
## Linux / *BSD
| Distribution | Package Link |
|--------------|--------------|
| Arch (AUR) | <a href="https://aur.archlinux.org/packages/jabber-space/" target="_blank" rel="noopener noreferrer">aur.archlinux.org</a> |
We know that the list is currently way too short. Feel free to [build](/getting-started/building/) from source for your distribution.
## Windows
CProof can be used on Windows via:
- **WSL (Windows Subsystem for Linux)** — _Recommended_
- **Cygwin**
### WSL (Recommended)
WSL allows you to run a Linux distribution directly inside Windows. It's supported since Windows 10.
Read Microsofts [official WSL documentation](https://docs.microsoft.com/de-de/windows/wsl/about) to learn how to install and configure it.
After installing WSL and choosing a Linux distribution (like Debian, Ubuntu, or openSUSE), install CProof using that distros package manager.
To compare available CProof versions across distros, check [Repology](https://repology.org/project/profanity/versions).
### Cygwin
1. Download and install Cygwin:
- 64-bit: <a href="https://cygwin.com/setup-x86_64.exe" target="_blank" rel="noopener noreferrer">https://cygwin.com/setup-x86_64.exe</a>
- 32-bit: <a href="https://cygwin.com/setup-x86.exe" target="_blank" rel="noopener noreferrer">https://cygwin.com/setup-x86.exe</a>
2. During setup, search for and include the following packages:
- `wget`
- `unzip`
3. Download the CProof source from [git.jabber.space](https://git.jabber.space/devs/profanity) and follow the [build guide](./guide/latest/build.html).
> To enable [OTR](./guide/latest/otr.html) and [OMEMO](./guide/latest/omemo.html) support, youll need to build `libotr` and `libsignal-protocol-c` manually, as they are not available in the Cygwin repository.
## macOS
### MacPorts
A build guide using MacPorts is available in this [GitHub wiki](https://github.com/louiecaulfield/profanity/wiki/Building-under-OS-X) by louiecaulfield.
## Usage
To start using CProof:
- Follow our [Quick Start guide](/getting-started/quick-start/)
- Or [build it yourself](/getting-started/building/) if you prefer compiling from source

View File

@@ -0,0 +1,221 @@
---
title: Quick Start
description: A console-based XMPP client for power users.
sidebar:
order: 3
---
## Starting CProof
<br />
To start CProof, run the following at the command line:
```bash
$ profanity
```
To see options available to the command:
```bash
$ profanity -h
```
## User Interface
![CProof User Interface](@assets/CProof-ui-1.png)
The user interface is split into four main areas:
### Title bar
![CProof User Interface](@assets/CProof-ui-2.png)
Shows the title for the current window (usually the contact you are chatting with, or the chat room you have joined), and your current presence.
### Main window area
![CProof User Interface](@assets/CProof-ui-3.png)
Used to show the current active window. The first window (1) is reserved for the 'console' where system messages and command responses are shown.
### Status bar
![CProof User Interface](@assets/CProof-ui-4.png)
Shows the time, the user you are logged in as, and status of each window. If a window is used, its number will appear, if it has new messages of any kind, the number will be highlighted. The current window is shown as -1-.
### Input area
![CProof User Interface](@assets/CProof-ui-5.png)
Where commands and messages are entered. Commands and command arguments can be autocompleted with the tab key.
All commands start with a / character e.g.:
```bash
/help
```
## Account setup
### Registration
To use CProof, you first need to register a JID (Jabber ID) and then add your account.
If you dont have a JID yet, use the [`/register`](/command-reference/#register) command to create one. If you already have a JID, you can skip this step.
```bash
/register nickname example.com
```
Once you have your JID, add your account in CProof with the [`/account add`](/command-reference/#account) command followed by a name for your account. For example:
```bash
/account add main_account
```
Next, set your JID and password for this account:
```bash
/account set main_account jid your_account_name@example.com
/account set main_account password MySecurePassword
```
Finally, connect to your account using the [`/connect`](/command-reference/#connect) command:
```bash
/connect main_account
```
To make it easier for yourself in the future, add autoconnect to this account. It will ensure that you are automatically connected to that account on each login:
```bash
/autoconnect set main_account
```
## Window Navigation
To make a window visible in the main window area, use any of the following:
`Alt-1` to `Alt-0`
`F1` to `F10`
`Alt-Left`,`Alt-Right`
The [`/win`](/command-reference#win) command may also be used. Either the window number may be passed, or the window title:
```bash
/win 4
/win someroom@chatserver.org
/win MyBuddy
```
To close the current window:
```bash
/close
```
## Connecting
To connect to an XMPP chat service:
```bash
/connect user@server.com
```
You will be prompted by the status bar to enter your password.
See the [`/connect`](/command-reference#connect) command for additional arguments that may be used when connecting.
## One to one chat
To open a new window and send a message use the [`/msg`](/command-reference#msg) command:
```bash
/msg mycontact@server.com Hello there!
```
CProof uses the contact's nickname by default, if one exists. For example:
```bash
/msg Bob Are you there bob?
```
Once a window is opened with the contact, messages can be sent by just typing them in the input window:
```plaintext
Hows it going?
```
## Chat rooms
To join a chat room, use the [`/join`](/command-reference#join) command:
```bash
/join room@server.org
```
Once a window is opened for the room, messages can be sent by just typing them in the input window:
```plaintext
Hello everyone
```
See the chat [`Chat room guide`](/guides/chat-rooms) for more detail.
## Adding contacts
To add someone to your roster:
```bash
/roster add newfriend@server.chat.com
```
To subscribe to a contacts presence (to be notified when they are online/offline etc):
```bash
/sub request newfriend@server.chat.com
```
To approve a contact's request to subscribe to your presence:
```bash
/sub allow newfriend@server.chat.com
```
See the [`/roster`](/command-reference#roster) and [`/sub`](/command-reference#sub) commands for more detail.
## Changing your presence
To change your presence, use the following commands:
```bash
/status set away
/status set xa
/status set chat
/status set online
/status set dnd
```
Each of these commands accepts a message as a parameter, so to show the message "I'm very busy" to your contacts when setting status to Do Not Disturb:
```bash
/status set dnd I'm very busy
```
## Logging out
To log out from the current chat service:
```bash
/disconnect
```
To quit CProof:
```bash
/quit
```

View File

@@ -0,0 +1,51 @@
---
title: >
Build: Encryption Support
description: How to setup OMEMO encryption in CProof
sidebar:
order: 2
---
## Building with OMEMO support
</br>
<a href="https://conversations.im/omemo/" target="_blank" rel="noopener noreferrer">
OMEMO
</a>
is an XMPP Extension Protocol (XEP) for secure multi-client end-to-end encryption. It is an open standard based on a Double Ratchet and PEP.
CProof supports OMEMO only if you build from current git master. Support is planned for the 0.7.0 release.
If you have _libsignal-protocol-c_ installed, support will be included by default. To force the build to fail if support cannot be included, configure with the following:
```bash
./configure --enable-omemo
```
Supported _libsignal-protocol-c_ versions are 2.3.1, and 2.3.2.
## Building with PGP support
CProof uses the <a href="https://www.gnupg.org/%28es%29/related_software/gpgme/index.html" target="_blank" rel="noopener noreferrer">GPGME library</a> to support PGP encryption. You will need the _libgpgme-dev_ or equivalent installed. If the package is installed PGP support will be included automatically. To force the build to fail if support cannot be included, configure with the following:
```bash
./configure --enable-pgp
```
## Building with OTR support
Off The Record (OTR) messaging is a form of secure messaging, it includes encryption, authentication between users, deniability and perfect forward secrecy.
An overview and many useful resources can be found at the <a href="https://otr.cypherpunks.ca/" target="_blank" rel="noopener noreferrer">OTR site</a>.
If you have _libotr-dev_ installed, support will be included by default. To force the build to fail if support cannot be included, configure with the following:
```bash
./configure --enable-otr
```
Supported _libotr_ versions are 3.2.x, and 4.0.x.
On most distributions there is simply a _libotr-dev_ package you need to install first.
On Cygwin you will need to install the _libgcrypt-devel_ package first. Secondly you will need _libotr-devel_ package which is not currently in the official repositories. You can install it from the <a href="https://sourceware.org/cygwinports/" target="_blank" rel="noopener noreferrer">Cygwin Ports project</a>.

View File

@@ -0,0 +1,150 @@
---
title: OMEMO Encryption
description: How to setup OMEMO encryption in CProof
sidebar:
order: 2
label: OMEMO
---
## Setup
### Generating Crypto Materials
Before you can start using OMEMO for a particular account, you must generate the cryptographic material. Use the following command:
```bash
/omemo gen
```
A message will appear informing you that the key is being generated which may take a few minutes. We use /dev/random for this
If the generation takes a long time you can try to move the mouse or install an entropy daemon, such as haveged, to increase the available entropy.
![CProof key generated](@assets/key_generated-2.png)
Once you have generated a key, you will not need to do so again. If you want to check your own fingerprint or see the fingerprints of your other devices type:
```bash
/omemo fingerprint
```
Hint: To be able to receive messages from your other devices you need to enable carbons. Also trust your own devices analogous to your buddies fingerprints, as described in the next paragraph.
```bash
/carbons on
```
### Fingerprint authentication
Before you can start talking with a contact you need to authenticate him by trusting his fingerprint(s).
You should exchange fingerprints with your contact's via another secure communication channel. To display your fingerprint, use the following command:
```bash
/omemo fingerprint
```
![CProof key generated](@assets/myfp-2.png)
To view the fingerprint of a contact use the following command:
```bash
/omemo fingerprint bob
```
![CProof key generated](@assets/theirfp-2.png)
If the fingerprint you see matches the fingerprint you communicated via another means, you can manually authenticate the contact with the following command:
```bash
/omemo trust 7ef54f6a-af23d766-efc9a4ea-da6fca40-3e8a5c82-9c46e4a4-e4c7230f-937b9144
```
You can untrust a contact at anytime using the following command:
```bash
/omemo untrust 7ef54f6a-af23d766-efc9a4ea-da6fca40-3e8a5c82-9c46e4a4-e4c7230f-937b9144
```
## Starting a private conversation
Once the cryptographic material is present and you trusted your contacts fingerprint(s) you can start a private conversation with another contact that uses an OMEMO capable client
To start a new conversation using OMEMO:
```bash
/omemo start bob@ejabberd.local
```
If you are already in a conversation window without OMEMO, you can start sending encrypted messages with the same command omitting the contact:
```bash
/omemo start bob
```
![CProof started](@assets/started-2.png)
The _[OMEMO]_ shown in the titlebar indicates that the conversation is now encrypted.
## Setting OMEMO policy
By default, OMEMO sessions must be started manually using the _/omemo start_ command.
The following three settings are available:
- **manual** - The default. Unencrypted messaging is allowed, OMEMO sessions must be started manually.
- **automatic** - If you start an OMEMO session with a contact once via _/omemo start_ it will remember the OMEMO session for this contact. So if you restart CProof and use _/msg bob@ejabberd.local_ it will OMEMO encrypt the conversation. You can stop this with _/omemo stop_.
- **always** - OMEMO sessions are always started. Until you use _/omemo stop_.
## User Interface options
By default, an indicator is displayed in the titlebar when no encryption is being used.
![CProof encwarn](@assets/encwarn-3.png)
This indicator can be removed using the [/encwarn](/command-reference#encwarn) command.
```bash
/encwarn off
```
![CProof encwarn](@assets/encwarnoff-3.png)
Both incoming and outgoing plaintext messages are always preceeded by the '-' character.
![CProof encwarn](@assets/plainchar-3.png)
By default OMEMO encrypted messages are preceeded by the '\*' character.
![CProof encwarn](@assets/omemochar.png)
This character can be changed using the _/omemo char_ command.
```bash
/omemo char O
```
![CProof newchar](@assets/newchar-3.png)
## OMEMO message logging
The _/omemo log_ command may be used with the following options to control if and how OMEMO messages are recorded in chat logs.
| | |
| ------ | ------------------------------------------------------------------------------------------- |
| on | OMEMO messages will be logged in plaintext. |
| redact | OMEMO messages will be logged, but the message will be replaced with the text '[redacted]'. |
| off | OMEMO messages will not be logged. |
For the _on_ and _redact_ settings, chat logging must also be enabled with the [/chlog](/command-reference#chlog) command.
## Current State
CProof has OMEMO support. Regular 1:1 chats should work without problems. We consider OMEMO MUC as experimental. You might encounter problems there. Make sure to check this <a href="https://github.com/profanity-im/profanity/issues/1070" target="_blank" rel="noopener noreferrer">tracker bug</a> for details. And report anything you find on the issue tracker.
Enabling carbons (`/carbons on`) is recommended in order to enhance OMEMO and overall chat experience.
To be able to read on other devices (eg your phone) what you wrote on CProof you need to trust the fingerprints of your other devices manually (`/omemo fingerprint`).
Filetransfer is OMEMO encrypted via the <a href="https://xmpp.org/extensions/inbox/omemo-media-sharing.html" target="_blank" rel="noopener noreferrer">OMEMO Media sharing XEP</a>.
`/omemo fingerprint` does autocomplete **all** fingerprints not just the ones for the JID mentioned.

View File

@@ -0,0 +1,115 @@
---
title: OpenPGP Encryption
description: How to setup PGP encryption in CProof
sidebar:
order: 3
label: OpenPGP
---
## Assigning a key to your account
To allow contacts to send you PGP encrypted messages you must have a PGP key assigned to your account. To list all available keys on your system, use the command _/pgp keys_
![CProof pgpkeys](@assets/pgpkeys.png)
Set the account _pgpkeyid_ property with the [`/account`](/command-reference#account) command.
```bash
/account set alice@ejabberd.local pgpkeyid B4510EE476F2AA6F
```
## Assigning keys to contacts
To be able to send PGP encrypted messages to contacts, you must associate a public key with them. The <a href="http://www.xmpp.org/extensions/xep-0027.html#signing" target="_blank" rel="noopener noreferrer">specification</a> states that contacts should sign their presence with their key, if your contacts do this, you need to do nothing else.
If your contacts do not sign their presence, you will need to manually assign a public key using the _/pgp setkey_ command.
```bash
/pgp setkey eddie@ironmaiden.com C4C71F21D0F2EC3D
```
To view a list of all currently known public keys, either through received signed presence or set manually.
```bash
/pgp contacts
```
![CProof contacts](@assets/contacts.png)
## Sending PGP encrypted messages
To start a new conversation sending PGP encrypted messages to a contact:
```bash
/pgp start bob@ejabberd.local
```
If you are already in a conversation window without PGP, you can start sending encrypted messages with the same command omitting the contact:
```bash
/pgp start
```
![CProof sending](@assets/sending.png)
## Receiving PGP encrypted messages
Assuming a public key is associated with the contact, they must also have enabled PGP encryption at their end.
![CProof sending](@assets/receiving.png)
## Ending PGP encryption
To stop sending PGP encrypted messages to a contact:
```bash
/pgp end
```
![CProof endingsend](@assets/endingsend.png)
The contact may also end PGP encryption at their end at any time.
![CProof endingrecv](@assets/endingrecv.png)
## User Interface options
By default, an indicator is displayed in the titlebar when no encryption is being used (including [OTR](/guides/otr-message-encryption) and [OMEMO](/guides/omemo-encryption)).
![CProof encwarn](@assets/encwarn-2.png)
This indicator can be removed using the [/encwarn](/command-reference#encwarn) command.
```bash
/encwarn off
```
![CProof encwarnoff](@assets/encwarnoff-2.png)
Both incoming and outgoing plaintext messages are always preceded by the '-' character.
![CProof plainchar](@assets/plainchar-2.png)
By default PGP encrypted messages are preceded by the '~' character.
![CProof pgpchar](@assets/pgpchar.png)
This character can be changed using the _/pgp char_ command.
```bash
/pgp char P
```
![CProof newchar](@assets/newchar-2.png)
## PGP message logging
The _/pgp log_ command may be used with the following options to control if and how PGP messages are recorded in chat logs.
| | |
| ------ | ----------------------------------------------------------------------------------------- |
| on | PGP messages will be logged in plaintext. |
| redact | PGP messages will be logged, but the message will be replaced with the text '[redacted]'. |
| off | PGP messages will not be logged. |
For the _on_ and _redact_ settings, chat logging must also be enabled with the [/chlog](/command-reference#chlog) command.

View File

@@ -0,0 +1,259 @@
---
title: OTR Message Encryption
description: How to setup OTR encryption in CProof
sidebar:
order: 4
label: OTR
---
## Generating a private key
Before you can start using OTR for a particular account, you must generate a private key. Use the following command:
```bash
/otr gen
```
A message will appear informing you that the key is being generated which may take a few minutes.
If the generation takes a long time you can try to move the mouse or install an entropy daemon, such as _haveged_, to increase the available entropy.
![CProof OTR](@assets/key_generated.png)
Once you have generated a key, you will not need to do so again.
## Starting a private conversation
Once you have a private key, you may start OTR encrypted sessions with other contacts who have OTR enabled.
To start a new conversation using OTR encryption:
```bash
/otr start bob@ejabberd.local
```
If you are already in a conversation window without OTR, you can start sending encrypted messages with the same command omitting the contact:
```bash
/otr start
```
![CProof OTR Started](@assets/started.png)
The [*untrusted*] shown in the titlebar indicates that although this conversation is encrypted, the contact has not yet been authenticated.
## Authenticating a contact
The previous conversations were encrypted, however as the recipient noticed, neither user can be certain of the identity of the other.
Authentication is for each OTR key that the contact may have generated. For example if your contact has different OTR keys on different devices, you will need to authenticate each device separately.
Once a particular contact (and client) has been authenticated, this information is saved.
OTR supports three ways to authenticate a contact, question and answer, shared secret, and manual fingerprint verification.
### Question and answer
Question and answer verification allows one user to verify the identity of another by asking a question with an expected answer.
Once in an OTR session, a user may ask the recipient a question supplying their expect answer, for example if Alice wishes to authenticate Bob:
```bash
/otr question "What is the name of your best friends rabbit?" fiffi
```
A message will be displayed showing that the authentication process has started.
![CProof Question Send](@assets/question_sent.png)
If Bob answers correctly a message will be shown indicating that Bob is now trusted by Alice.
![CProof Question Received Success](@assets/question_received_success.png)
If Bob answers incorrectly a message will be shown indicating that Bob is not trusted by Alice.
![CProof Question Received Fail](@assets/question_received_fail.png)
Bob may also wish to authenticate Alice. If he does, Alice will receive a message showing Bob's question, and prompting her to answer. Alice may answer using the _/otr answer_ command:
```bash
/otr answer red
```
![CProof Question](@assets/bobquestion.png)
Note that question and answer authentication is a way for one contact to verify the identity of another. If the recipient answers correctly then the sender has authenticated them, however the recipient must also authenticate the sender with another question.
### Shared secret
Shared secret verification is a way for both parties to authenticate each other at the same time using a shared passphrase that only the two of them know.
In an OTR session, one user may start shared secret authentication with the /otr secret command, supplying the secret, for example Alice initiates the authentication:
```bash
/otr secret 5up3r53cr3t
```
Bob enters the same secret using his client, Alice and Bob now trust each other.
![CProof Secret Received Success](@assets/secret_received_success.png)
If Bob started the shared secret authentication, Alice will receive a message asking her to enter the secret using the /otr secret command:
```bash
/otr secret 5up3r53cr3t
```
![CProof Secret Sent Success](@assets/secret_sent_success.png)
### Manual fingerprint authentication
The above two methods allow you to verify the fingerprint of a contact's OTR key without having to know the fingerprint. The final method is to manually verify the fingerprint.
You should exchange fingerprints with your contact's via another secure communication channel. To display your fingerprint, use the following command:
```bash
/otr myfp
```
![CProof FP](@assets/myfp.png)
To view the fingerprint of a contact whilst in an OTR session, use the following command:
```bash
/otr theirfp
```
![CProof FP](@assets/theirfp.png)
If the fingerprint you see matches the fingerprint you communicated via another means, you can manually authenticate the contact with the following command:
```bash
/otr trust
```
You can untrust a contact at anytime using the following command:
```bash
/otr untrust
```
## Setting OTR policy
By default, OTR sessions must be started manually using the _/otr start_ command.
The policy may be set at three levels, global, per account, and per contact with the order of preference being the most specific first:
1 - Use the policy for the contact, if no setting found:
2 - Use the policy for the account, if no setting found:
3 - Use the global policy
The following three settings are available for each level:
**manual** - The default. Unencrypted messaging is allowed, OTR sessions must be started manually.
**opportunistic** - Upon sending an unencrypted message with the _/msg_ command, CProof will attempt to start an OTR session with the contact. The contact's policy must be set to _opportunistic_ or _always_ for the session to start.
**always** - An error message will be displayed if you try to start a conversation without starting an OTR session and the message will not be sent.
### Setting global policy
To set the global policy:
```bash
/otr policy <setting>
```
The current global setting can be viewed with the following command:
```bash
/prefs otr
```
### Setting account policy
To set the policy for a particular account:
```bash
/account set <account_name> otr <setting>
```
The account setting can be viewed with the following command:
```bash
/account show <account_name>
```
### Setting contact policy
To set the policy for a particular contact (you must be logged in):
```bash
/otr policy <setting> <contact>
```
Contact policy settings can also be viewed with:
```bash
/account show <account_name>
```
## User Interface options
By default, an indicator is displayed in the titlebar when no encryption is being used (including <a href="./guide/latest/pgp.html" target="_blank" rel="noopener noreferrer">PGP</a> and <a href="./guide/latest/omemo.html" target="_blank" rel="noopener noreferrer">OMEMO</a>).
![CProof encwarn](@assets/encwarn.png)
This indicator can be removed using the [`/encwarn`](/command-reference#encwarn) command.
```bash
/encwarn off
```
![CProof encwarn](@assets/encwarnoff.png)
Both incoming and outgoing plaintext messages are always preceeded by the '-' character.
![CProof encwarn](@assets/plainchar.png)
By default OTR encrypted messages are preceeded by the '~' character.
![CProof encwarn](@assets/otrchar.png)
This character can be changed using the _/otr char_ command.
```bash
/otr char O
```
![CProof encwarn](@assets/newchar.png)
## OTR message logging
The _/otr_ log command may be used with the following options to control if and how OTR messages are recorded in chat logs.
| | |
| ------ | ----------------------------------------------------------------------------------------- |
| on | OTR messages will be logged in plaintext. |
| redact | OTR messages will be logged, but the message will be replaced with the text '[redacted]'. |
| off | OTR messages will not be logged. |
For the _on_ and _redact_ settings, chat logging must also be enabled with the [`/chlog`](/command-reference#chlog) command.
## Importing OTR keys
Since CProof uses the libotr library to store keys and trusted fingerprints, files created by another client which uses libotr should also work with CProof.
The files need to be placed in the following locations:
```plaintext
$XDG_DATA_HOME/profanity/otr//keys.txt
$XDG_DATA_HOME/profanity/otr//fingerprints.txt
```
On most systems _$XDG_DATA_HOME_ is _~/.local/share_. The folder is the account name with \_at\_ replacing the @ symbol, for example account `my.account@server.org` will have the above two files stored as:
```plaintext
~/.local/share/profanity/otr/my.account_at_server.org/keys.txt
~/.local/share/profanity/otr/my.account_at_server.org/fingerprints.txt
```

View File

@@ -0,0 +1,179 @@
---
title: Chat Room Configuration and Administration
description: A console-based XMPP client for power users.
sidebar:
order: 10
---
## Creating a room
Chat rooms are created when you join a room that does not yet exist, using the [`/join`](/command-reference#join) command.
If the server only supports an older version of the groupchat protocol, no further action is required, and other users may join the room.
Servers supporting <a href="http://xmpp.org/extensions/xep-0045.html" target="_blank" rel="noopener noreferrer">xep-0045</a> will create the room, which will be locked until the room has been configured, or the default configuration has been accepted.
To accept the default configuration and unlock the room:
```bash
/room accept
```
To view and edit the room configuration (see the next section for details):
```bash
/room config
```
To cancel room creation and destroy the room:
```bash
/room destroy
```
## Configuring a room
At any stage, users with appropriate privileges may configure a room with the following command:
```bash
/room config
```
A new window will be opened, and the room configuration form displayed. Each field in the form is given a tag (e.g. "field2").
![CProof room configuration](@assets/roomconfigform.png)
Form fields can be manipulated using the field tag and the value to set, add or remove depending on the field type. For example:
```bash
/field1 "New room name"
/field3 off
/field5 remove visitor
/field13 anyone
/field18 add anotheruser@openfire.local
```
For more information on how to manipulate a specific field, use the /form help command specifying the field tag, e.g.:
```bash
/form help field12
```
At any time whilst the form is being edited, the latest values can be shown with:
```bash
/form show
```
To save the changes:
```bash
/form submit
```
To discard the changes:
```bash
/form cancel
```
## Destroying a room
If a user has appropriate privileges a room can be destroyed at any time using the following command:
```bash
/room destroy
```
## Kicking occupants
Users with appropriate privileges may kick occupants from a room:
```bash
/kick nova
```
An optional reason may be supplied:
```bash
/kick nova Please do not use foul language.
```
## Banning users
Users with appropriate privileges may ban users permanently from a room, banning is carried out using the users Jabber ID rather than their nickname in the room:
```bash
/ban molly@chat.org
```
An optional reason may be supplied:
```bash
/ban molly@chat.org You may not enter this room anymore.
```
## Managing occupant roles
Roles specify an occupant's privileges within a room for the duration of one particular visit to that room. The possible roles, and the privileges associated with them are defined in <a href="http://xmpp.org/extensions/xep-0045.html#roles" target="_blank" rel="noopener noreferrer">xep-0045</a>.
Roles are set using an occupant's room nickname, the user must have the appropriate privileges to run the following commands.
To show occupants of all roles:
```bash
/role list
```
To show occupants with a specific role:
```bash
/role list moderator
/role list participant
/role list visitor
```
To change an occupant's role, for example to set the occupant with nick _bobmould_ to have role _participant_:
```bash
/role set participant bobmould
```
An optional reason may be specified:
```bash
/role set participant bobmould You may now speak!
```
## Managing user affiliations
Affiliations specify a user's privileges for a room across visits to that room. The possible affiliations, and the privileges associated with them are defined in <a href="http://xmpp.org/extensions/xep-0045.html#affil" target="_blank" rel="noopener noreferrer">xep-0045</a>.
Affiliations are set using a user's JID, the user must have the appropriate privileges to run the following commands.
To show users of all affiliations:
```bash
/affiliation list
```
To show users with a specific affiliation:
```bash
/affiliation list owner
/affiliation list admin
/affiliation list member
/affiliation list outcast
```
To change a user's affiliation, for example to set the user with JID *bob_mould@chat.org* to have affiliation member:
```bash
/affiliation set member bob_mould@chat.org
```
An optional reason may be specified:
```bash
/affiliation set member bob_mould@chat.org Because you come here so often.
```

View File

@@ -0,0 +1,110 @@
---
title: Chat Rooms
description: A console-based XMPP client for power users.
sidebar:
order: 4
---
## Joining a chat room
Use the [`/join`](/command-reference#join) command to join a chat room supplying the name of the room:
```bash
/join room@conference.server.com
```
Your nickname will be the account nick setting which by default is set to the 'localpart' of your Jabber ID. For example if you are logged in as *itsme@server.com* you will join the room with the nickname _itsme_.
To specify a nickname different to your account setting when joining the room, use the nick option:
```bash
/join room@conference.server.com nick MrChatty
```
If you omit the domain part of the chat room, the account setting muc will be used which by default is set to conference.\<domain\>. For example, if you are logged in as *kai@mycompany.org*, using the following command:
```bash
/join development
```
is the same as:
```bash
/join development@conference.mycompany.org
```
To join a room which requires a password, use the _password_ option:
```bash
/join privatedev@conference.someserver.im password p455w0rd
```
The account settings for default nickname and conference service may be changed for any account using the [`/account`](/command-reference#account) command.
## Creating a chat room
If a room is joined which did not previously exist, and the server allows it, the room will be created. More information on creating and configuring chat rooms can be found at [Chat Room Configuration and Administration](/guides/chat-room-configuration-and-administration/).
If you are using Google Talk, creating a new room is slightly different. See the [FAQ](/about/faq).
## Changing your nickname
Use the [`/nick`](/command-reference#nick) command whilst in a chat room to change your nickname, for example to change your nickname to bob:
```bash
/nick bob
```
## Inviting contacts to a room
To invite one of your contacts to the current chat room, use the [`/invite`](/command-reference#invite) command with an optional reason for the invite:
```bash
/invite Bruce
```
or with a reason:
```bash
/invite Bruce Come and join the chat
```
As with other commands, the name must be double quoted if it contains spaces:
```bash
/invite "Bruce Dickenson" Join us!
```
## Sending messages
To send a message to the room, enter the message and press enter.
To direct a message to a particular recipient in the room, type the start of the recipients nickname and use \<tab\> to autocomplete the nickname. The nickname will be followed by ": ", after which you may type your message.
For example, assuming a participant exists in the room named _eddie_, type:
```plaintext
ed<tab>this message is just for you
```
Autocompletion using \<tab\> will also complete participants names in the middle of message text, without the ": ".
## Sending a private message
To start a private chat session with a room participant use the [`/msg`](/command-reference#msg) command supplying the participants nickname:
```bash
/msg "Some User" Hello there!
```
```bash
/msg mike hello there!
```
## Leaving a room
To leave a chat room, use the /leave command, the [`/close`](/command-reference#close) command has the same effect.
## Bookmarking rooms
To bookmark chat rooms, including the ability to autojoin the rooms when signing in, see the [`/bookmark`](/command-reference#bookmark) command. The simplest way to bookmark a room (and enable autojoin) is to use the `/bookmark` command with no arguments in the room you wish to bookmark.

View File

@@ -0,0 +1,177 @@
---
title: Managing Your Contacts
description: A console-based XMPP client for power users.
sidebar:
order: 5
---
## Overview
There are two parts to managing contacts, the roster and presence subscriptions.
The roster is a list of all of your contacts.
To receive updates about a contacts presence, i.e. to see when they are online and their current status, you must be subscribed to that contact.
For a contact to receive updates about your presence, you must have approved a subscription request from that contact.
Some servers may have already set up your roster and subscriptions for you, for example, many companies integrate with LDAP, and automatically subscribe all users to all other users.
The following sections describe roster and subscription management in more detail.
## Viewing your roster
To view all contacts in your roster, use the [`/roster`](/command-reference#roster) command. The output gives you the following information:
| | |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| JID and nickname | The contacts Jabber ID, and nickname if you have provided one. |
| Subscription | The current subscription status, and whether you have received or sent a request that has not yet been approved or declined. |
| Groups | The list of groups to which the contact belongs, see [groups](#managing-groups) below. |
The subscription status may be one of:
| | |
| ---- | -------------------------------------------------------------------------------- |
| none | You are not subscribed to the contact, and the contact is not subscribed to you. |
| to | You are subscribed to the contact, but they are not subscribed to you. |
| from | You are not subscribed to the contact, but they are subscribed to you. |
| both | You are subscribed to the contact, and they are subscribed to you. |
## Adding and removing contacts
To add a contact to the roster, use the [`/roster`](/command-reference#roster) command supplying the Jabber ID and optional nickname:
```bash
/roster add buddy@service.net
```
With optional nickname:
```bash
/roster add buddy@service.net MyBuddy
```
You can add a contact to the roster and send a subscription request at the same time, by using the [`/sub`](/command-reference#sub) command:
```bash
/sub request buddy@service.net
```
To remove a contact from the roster:
```bash
/roster remove buddy@service.net
```
Removing a contact from your roster also removes your subscription to their presence, and their subscription to yours.
## Giving contacts a nickname
Some servers automatically give your contacts nicknames (when integrating with LDAP for example), which are more human readable than the Jabber ID.
CProof uses nicknames by default in its user interface, and for most commands relating to contacts.
If the server allows it, you may change, add or remove the nickname for a given contact using the [`/roster`](/command-reference#roster) command:
```bash
/roster nick bob@company.org Bobster
```
To clear a users nickname:
```bash
/roster clearnick bob@company.org
```
## Managing Groups
The roster allows contacts to be added to named groups. CProof makes use of groups using the [`/who`](/command-reference#who) command to filter the contacts shown.
Roster groups are managed with the [`/group`](/command-reference#group) command.
To list all the current groups:
```bash
/group
```
To show the contacts in a particular group:
```bash
/group show friends
```
To add a contact to a group:
```bash
/group add friends Buddy
```
Note that there is no command to add a group, adding a contact to a group that doesn't yet exist will create the group.
To remove a contact from a group:
```bash
/group remove friends Buddy
```
## Subscribing to a contact
To request presence information for a contact use the [`/sub`](/command-reference#sub) command:
```bash
/sub request newcontact@server.com
```
The user will be informed that you wish to know of their presence, and will need to approve the request.
The contact parameter is optional if you are already in a chat window with the user, the request will be sent to that user:
```bash
/sub request
```
## Approving a request
You can approve subscription requests from contacts using the [`/sub`](/command-reference#sub) command:
```bash
/sub allow newcontact@server.com
```
The contact parameter is optional if you are already in a chat window with the user, the approval will be sent to that user:
```bash
/sub allow
```
## Deny or delete a request
You can deny subscription requests from contacts using the [`/sub`](/command-reference#sub) command:
```bash
/sub deny newcontact@server.com
```
The contact parameter is optional if you are already in a chat window with the user, the denial will be sent to that user:
```bash
/sub deny
```
The _/sub deny_ command can also be used to remove a contacts subscription to your presence if you have previously approved it.
## List pending requests
To list requests that you have sent that are awaiting approval from the contact, use the following command:
```bash
/sub sent
```
To list requests that you have received, but not yet approved or denied, use the following command:
```bash
/sub received
```

View File

@@ -0,0 +1,66 @@
---
title: File Locations
description: A console-based XMPP client for power users.
sidebar:
order: 13
---
## Base Directories
The XDG base directory specification is used for base configuration and data directories.
The environment variables _$XDG_CONFIG_HOME_ and _$XDG_DATA_HOME_ will be used and a directory named CProof will be created in each.
As per the specification, if _$XDG_CONFIG_HOME_ is not present or unset, _$HOME/.config_ will be used. If $XDG_DATA_HOME is not present or unset, *$HOME/.local/share\* will be used.
For the rest of this document the following names will be used:
_$CONFIG_HOME_ = _$XDG_CONFIG_HOME/profanity_
_$DATA_HOME_ = _$XDG_DATA_HOME/profanity_
## Configuration File
The main configuration file for CProof is stored at:
_$CONFIG_HOME/profrc_
## CProof Log File
The CProof log is at:
_$DATA_HOME/logs/profanity.log_
## Chat Logs Directory
If chat logging is enabled, chat logs will be stored in the following directory:
_$DATA_HOME/chatlogs_
A directory exists per account, and within each of these directories is a directory per contact containing dated logs.
If chat room logging is also enabled, a rooms directory will also be within the account directory.
## User Defined Themes Directory
User defined theme files are stored in the following directory:
_$CONFIG_HOME/themes_
## Accounts file
User accounts are stored in the following file:
_$DATA_HOME/accounts_
## Examples
Assuming a user is called `turing`, and default values for `$XDG_CONFIG_HOME` and `$XDG_DATA_HOME` are used, the following example shows where files are stored:
| | |
| ----------------------------------------------------- | ------------------ |
| /home/turing/.config/profanity/profrc | Configuration file |
| /home/turing/.config/profanity/themes/ | Theme files |
| /home/turing/.local/share/profanity/logs/profanity.log | Main log file |
| /home/turing/.local/share/profanity/chatlogs/ | Chat logs |
| /home/turing/.local/share/profanity/accounts | Accounts file |

View File

@@ -0,0 +1,96 @@
---
title: Key Bindings
description: A console-based XMPP client for power users.
sidebar:
order: 11
---
## GNU Readline
CProof uses <a href="https://tiswww.case.edu/php/chet/readline/rltop.html" target="_blank" rel="noopener noreferrer">GNU Readline</a> for handling input. GNU Readline comes with many features including customisable key bindings, and Emacs or Vi editing modes.
In addition to checking _~/.inputrc_, CProof is also reading _~/.config/profanity/inputrc_ for Readline bindings.
For more information on key bindings and customisations available in GNU Readline, see the guide. Taken from the above guide, below is a list of basic bindings that come with GNU Readline by default.
In the table below, <kbd>Ctrl</kbd> represents the Control key, and <kbd>Alt</kbd> represents the Meta key, which may vary depending on your operating system (Alt, Windows, Command, etc.). Key combinations are shown using the plus sign (+).
| Keybinding | Action |
|---------------------------------------------|----------------------------------------------------------------------------------------------------------------------------|
| <kbd>Ctrl</kbd> + <kbd>b</kbd> | Move the cursor one character backward |
| <kbd>Ctrl</kbd> + <kbd>f</kbd> | Move the cursor one character forward |
| <kbd>Ctrl</kbd> + <kbd>d</kbd> | Delete the character under the cursor |
| <kbd>Ctrl</kbd> + <kbd>_</kbd> or <kbd>Ctrl</kbd> + <kbd>x</kbd> then <kbd>Ctrl</kbd> + <kbd>u</kbd> | Undo the last editing action |
| <kbd>Ctrl</kbd> + <kbd>a</kbd> | Move the cursor to the start of the line |
| <kbd>Ctrl</kbd> + <kbd>e</kbd> | Move the cursor to the end of the line |
| <kbd>Alt</kbd> + <kbd>f</kbd> | Move the cursor forward by one word (words include letters and digits) |
| <kbd>Alt</kbd> + <kbd>b</kbd> | Move the cursor backward by one word |
| <kbd>Ctrl</kbd> + <kbd>l</kbd> | Clear the terminal or screen |
| <kbd>Ctrl</kbd> + <kbd>k</kbd> | Delete text from the cursor to the end of the line |
| <kbd>Alt</kbd> + <kbd>d</kbd> | Delete text from the cursor to the end of the current word, or if between words, to the end of the next word. Word boundaries same as <kbd>Alt</kbd> + <kbd>f</kbd> |
| <kbd>Alt</kbd> + <kbd>DEL</kbd> | Delete text from the cursor to the start of the current word, or if between words, to the start of the previous word. Word boundaries same as <kbd>Alt</kbd> + <kbd>b</kbd> |
| <kbd>Ctrl</kbd> + <kbd>w</kbd> | Delete text from the cursor to the previous whitespace. Different from <kbd>Alt</kbd> + <kbd>DEL</kbd> because word boundaries differ |
| <kbd>Ctrl</kbd> + <kbd>y</kbd> | Paste (yank) the most recently deleted text back at the cursor |
| <kbd>Alt</kbd> + <kbd>y</kbd> | Cycle through previously deleted text entries (kill ring), only works after a <kbd>Ctrl</kbd> + <kbd>y</kbd> or <kbd>Alt</kbd> + <kbd>y</kbd> command |
## User Interface Navigation
Besides the standard GNU Readline keybindings, CProof offers extra shortcuts to help you navigate and manage the interface efficiently:
| Shortcut | What It Does |
|---------------------------------------------|----------------------------------------------------------|
| <kbd>Alt</kbd> + <kbd>1</kbd> to <kbd>Alt</kbd> + <kbd>0</kbd>, or <kbd>F1</kbd> to <kbd>F10</kbd> | Switch focus directly to the corresponding window |
| <kbd>Alt</kbd> + <kbd></kbd> (Left Arrow) | Move focus to the previous window |
| <kbd>Alt</kbd> + <kbd></kbd> (Right Arrow) | Move focus to the next window |
| <kbd>Page Up</kbd> | Scroll up through the main window content |
| <kbd>Page Down</kbd> | Scroll down through the main window content |
| <kbd>Alt</kbd> + <kbd>Page Up</kbd> | Scroll up through the occupants or roster panel |
| <kbd>Alt</kbd> + <kbd>Page Down</kbd> | Scroll down through the occupants or roster panel |
| <kbd>Alt</kbd> + <kbd>A</kbd> | Jump to the next unread window |
| <kbd>Ctrl</kbd> + <kbd></kbd> (Down Arrow) | Save the current line to command history |
## Custom Readline functions
CProof also makes functions available to readline to allow customising its bindings:
| | |
| ---------------------- | ------------------------------------------------------ |
| `prof_win_N` | Focus window N where N is 1,2,3,4,5,6,7,8,9 or 0 |
| `prof_win_prev` | Focus previous window |
| `prof_win_next` | Focus next window |
| `prof_win_pageup` | Page up contents of main window |
| `prof_win_pagedown` | Page down contents of main window |
| `prof_subwin_pageup` | Page up contents of sub window (roster or occupants) |
| `prof_subwin_pagedown` | Page down contents of sub window (roster or occupants) |
| `prof_win_clear` | Clear current window contents |
Example usage in _inputrc_:
```bash
$if profanity
"\C-p": prof_win_prev
"\C-n": prof_win_next
"\C-j": prof_win_pageup
"\C-k": prof_win_pagedown
"\C-h": prof_subwin_pageup
"\C-l": prof_subwin_pagedown
"\C-y": prof_win_clear
$endif
```
### How it works
- `$if profanity` — Applies these bindings only when running CProof (which identifies as `profanity`)
- `"\C-x"` — Represents a keybinding, like `Ctrl + x`
- The value after the colon is the name of the internal command CProof will execute
### Notes
- You must restart CProof for changes to take effect.
- To reload `.inputrc` in an interactive shell without restarting:
```bash
bind -f ~/.inputrc
```
- Use multiple `$if` blocks to define bindings for different applications.

View File

@@ -0,0 +1,109 @@
---
title: Plugins
---
CProof supports plugins written in Python and C. The CProof-Plugins project includes both official plugins maintained by the CProof team and community-contributed plugins.
The master branch of the plugins repository is in sync with the latest developments on the master branch of CProof. Branching is used to maintain plugins for releases of CProof.
There is a <a href="https://github.com/profanity-im/profanity/issues/749" target="_blank" rel="noopener noreferrer">known issue</a> that C plugins do not currently work on Cygwin.
To install a Python plugin:
```bash
/plugins install ~/projects-git/profanity-plugins/say.py
```
Any module dependencies for the plugin should be on the Python system path. If a plugin imports modules relative to its location, these modules need to manually be copied to _~/.local/share/profanity/plugins/_
To install a C plugin:
```bash
/plugins install ~/projects-git/profanity-plugins/pid/pid.so
```
See the [/plugins](/command-reference#plugins) command for more information on installing and enabling/disabling plugins.
If a plugin registers it's own commands, the usual [/help](/command-reference#help) command can be used to find out more information:
```bash
/help say
```
## Featured Plugins
This section list some of the plugins currently available.
| | Plugin | Description |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| <a href="https://git.jabber.space/devs/profanity-plugins/src/branch/master/stable/ascii.py" target="_blank" rel="noopener noreferrer"><code>ascii.py</code></a> | Convert text to ascii art text and send to the current recipient or room. |
| <a href="https://git.jabber.space/devs/profanity-plugins/src/branch/master/stable/browser.py" target="_blank" rel="noopener noreferrer"><code>browser.py</code></a> | Open received links in the system default browser. |
| <a href="https://git.jabber.space/devs/profanity-plugins/src/branch/master/stable/clients.py" target="_blank" rel="noopener noreferrer"><code>clients.py</code></a> | Show client software used by each occupant in the current chat room, using <a href="https://xmpp.org/extensions/xep-0092.html" target="_blank" rel="noopener noreferrer">xep-0092 Software Version</a>. |
| <a href="https://git.jabber.space/devs/profanity-plugins/src/branch/master/stable/imgur.py" target="_blank" rel="noopener noreferrer"><code>imgur.py</code></a> | Send a local image file or a screenshot to a recipient or chat room using imgur.com. |
| <a href="https://git.jabber.space/devs/profanity-plugins/src/branch/master/stable/paste.py" target="_blank" rel="noopener noreferrer"><code>paste.py</code></a> | Send the contents of the clipboard to the current recipient or room. |
| <a href="https://github.com/Neo-Oli/profanity-termux-notification" target="_blank" rel="noopener noreferrer"><code>termuxnotify.py</code></a> | Notifications for Termux on Android.<br> See also <a href="https://github.com/Neo-Oli/profanity-notifycmd" target="_blank" rel="noopener noreferrer"><code>notifycmd.py</code></a> for a generic version to run any system command on new messages. |
| <a href="https://git.jabber.space/devs/profanity-plugins/src/branch/master/stable/presence_notify.py" target="_blank" rel="noopener noreferrer"><code>presence_notify.py</code></a> | Configure desktop notifications for presence updates from contacts. |
| <a href="https://git.jabber.space/devs/profanity-plugins/src/branch/master/stable/say.py" target="_blank" rel="noopener noreferrer"><code>say.py</code></a> | Read out loud messages from recipients or in chat rooms. |
| <a href="https://git.jabber.space/devs/profanity-plugins/src/branch/master/stable/sounds.py" target="_blank" rel="noopener noreferrer"><code>sounds.py</code></a> | Play sounds when messages received. |
| <a href="https://git.jabber.space/devs/profanity-plugins/src/branch/master/stable/syscmd.py" target="_blank" rel="noopener noreferrer"><code>syscmd.py</code></a> | Display the result shell commands in a new window.<br> Send results of shell commands to recipients or chat rooms. |
| <a href="https://git.jabber.space/devs/profanity-plugins/src/branch/master/stable/wikipedia-prof.py" target="_blank" rel="noopener noreferrer"><code>wikipedia-prof.py</code></a> | Search wikipedia and show search results, pages, links etc in a new window. |
## Developing Plugins
CProof provides an API for plugins to access various functionality. Plugins may also implement 'hooks' that CProof will call on specific events.
### Python
Python plugins need to import the _prof_ module to access the API.
CProof may be compiled against Python 2 or Python 3, so plugins should be able to work with both, the <a href="https://pypi.org/project/future/" target="_blank" rel="noopener noreferrer">future</a> library can be used in most cases.
Full documentation of the _prof_ module and the hooks a plugin may implement can be found at:
[Python API documentation](/python-api-docs)
### C
C plugins need to include the _profapi.h_ header to access the API, and must be linked against _libprofanity_ using the linker flag _-lprofanity_.
C plugins should include a _Makefile_ to build a shared library (a _.so_ file) which is the file CProof will load.
Full documentation of the _profapi.h_ header and the hooks a plugin may implement can be found at:
[C API documentation](/c-api-docs)
### Themes and Settings
Plugins may make use of themes and settings by accessing the following files:
```plaintext
~/.local/share/profanity/plugin_themes
~/.local/share/profanity/plugin_settings
```
Example theme properties for <a href="https://git.jabber.space/devs/profanity-plugins/src/branch/0.5.1/stable/syscmd.py" target="_blank" rel="noopener noreferrer">syscmd.py</a>:
```ini
[system]
command=cyan
result=green
```
Example settings for <a href="https://git.jabber.space/devs/profanity-plugins/src/branch/0.5.1/stable/say.py" target="_blank" rel="noopener noreferrer">say.py</a>:
```ini
[say]
args=-v english -s 120
enabled=active
```
API functions are available to read and write to the settings and theme files.
Plugins should contain documentation on the available settings and colours, most plugins have a command to manipulate settings.
### Contributing Plugins
Submit a pull request to the <a href="https://git.jabber.space/devs/profanity-plugins" target="_blank" rel="noopener noreferrer">CProof-plugins</a> project.
If the current API doesn't have what you need, raise an issue at the <a href="https://git.jabber.space/devs/profanity" target="_blank" rel="noopener noreferrer">CProof</a> repository.

View File

@@ -0,0 +1,169 @@
---
title: Resources and Priorities
description: A console-based XMPP client for power users.
sidebar:
order: 6
---
## Overview
CProof offers flexible handling of resource and priority settings.
If you only connect to your chat service from the same computer (for example, you log in at work on your desktop and nowhere else), you probably dont need to worry about these settings.
If youre already familiar with resources and priorities and want to configure them in CProof, you can skip this overview and go straight to the [settings](#setting-the-resource) section.
However, if you frequently connect from multiple devices and want to ensure messages are routed correctly—but arent sure how—this brief overview will help before you move on to the settings below.
### Resources
The XMPP protocol allows users to connect from more than one place at a time. For example, you might connect from your laptop, desktop, tablet, and phone. Or, less commonly, from two Jabber clients on the same device, like CProof and Miranda.
Contacts are identified by JIDs (Jabber IDentifiers), which have the form:
```plaintext
localpart@domainpart
```
For example:
```plaintext
friends.name@ourserver.org
localpart = friends.name
domainpart = ourserver.org
```
This is enough to identify a contact. However, when a contact connects to a chat service using a Jabber client, that client instance is represented as a **resource**.
So, while a contact can be identified as _localpart@domainpart_ (called a **bare JID**), their connection from a specific client is identified as _localpart@domainpart/resourcepart_ (called a **full JID**).
For example, a contact `some.friend@chat.server.org` logs in from both their laptop and phone. The software on the laptop uses the resource name `laptop` and the phone uses `phone`.
This contact can be identified as:
```plaintext
some.friend@chat.server.org
```
And they have two connected resources:
```plaintext
some.friend@chat.server.org/laptop
some.friend@chat.server.org/phone
```
When you receive a message, it will come from a **full JID**, i.e. from the specific client the contact is using.
You might not always be aware of the resource; most clients use a default (often the client software's name), which you can usually find in its settings.
If the client software provides no default, the chat service will generate a unique resource name. Thats why sometimes you see long strings like this after a contacts name:
```plaintext
someone@theserver.com/b2be5700-73ed-4922-91be-f4bd5ae1526a
```
### Priorities
Since a user may be connected using more than one client, the server needs to know where to route messages, therefore resources are given a priority
A priority is a number between -128 and 127.
The exact rules to determine which resource (laptop or phone, for example) gets a message, vary between server implementations, but most follow something like the following:
```plaintext
Find the resource with the highest priority
Send the message to that resource
If two resources have the same priority, send to both
If the only resources available have a negative number, store the message until a resource connects with a priority of 0 or higher
```
If we go back to the example above, adding a priority to each resource:
Contact:
```plaintext
some.friend@chat.server.org
```
Connected Resources:
```plaintext
some.friend@chat.server.org/laptop, priority = 5
some.friend@chat.server.org/phone, priority = 20
```
If we send a message to our contact:
```bash
/msg some.friend@chat.server.org Hi there!
```
The message will be delivered to the contact's phone
The following sections show how to set the resource name, and priority for CProof.
## Setting the resource
To set the resource for a particular account in CProof, use the [`/account`](/command-reference#account) command:
For example to set the resource for the account work to _laptop_:
```bash
/account set work resource laptop
```
To find out what resource name is being used at any time:
```bash
/account show work
```
Or, if you are logged in:
```bash
/account
```
Will show the settings for the current account.
## Setting priority
To set the priority for an account whilst logged in use the [`/priority`](/command-reference#priority) command:
```bash
/priority 10
```
This will set the priority to 10 for this account. Whether you are online, away, dnd etc, the priority will always be 10.
For more flexible priority settings per presence, see the next section.
## Setting priority per presence
You may set a different priority for each presence for an account. This is useful, for example, if you want messages to be routed to your phone, when your desktop client becomes away.
To set the priority for a particular presence for an account, use the [`/account`](/command-reference#account) command.
```bash
/account set work away 0
/account set work online 20
```
Whenever your work account becomes away including [`autoaway`](/command-reference#autoaway) the priority will be set to 0.
When the account is online the priority will be 20.
To find out the priority associated with each presence for an account at any time:
```bash
/account show work
```
Or, if you are logged in:
```bash
/account
```
Will show the settings for the current account.

View File

@@ -0,0 +1,154 @@
---
title: Themes
description: A console-based XMPP client for power users.
sidebar:
order: 12
---
## Loading a theme
To list available themes:
```bash
/theme list
```
You can see a preview of each theme in the [theme gallery](/about/theme-gallery).
To load a theme:
```bash
/theme load <theme-file>
```
## Creating a Theme
Themes packaged with CProof are installed to the system wide package data directory, for example:
```plaintext
/usr/local/share/profanity/themes
```
User defined themes may be added to your user's [themes directory](/guides/files#user-defined-themes-directory). If you'd like your theme to be added as a pre-packaged theme, feel free to submit a Pull Request at <a href="https://git.jabber.space/devs/profanity/" target="_blank" rel="noopener noreferrer">Github</a>.
A theme file contains two sections, [*colours*] and [*ui*].
The following properties are available in the [*colours*] section:
| Property | Description |
| --------------------- | -------------------------------------------------------------- |
| bkgnd | Main window and input window background |
| titlebar | Title bar background |
| statusbar | Status bar background |
| titlebar.text | Title bar text |
| titlebar.brackets | Title bar brackets |
| titlebar.unencrypted | Title bar OTR unencrypted indicator |
| titlebar.encrypted | Title bar OTR encrypted indicator |
| titlebar.untrusted | Title bar OTR untrusted indicator |
| titlebar.trusted | Title bar OTR trusted indicator |
| titlebar.online | Online presence indicators in title bar |
| titlebar.offline | Offline presence indicators in title bar |
| titlebar.away | Away presence indicators in title bar |
| titlebar.chat | Available for chat presence indicators in title bar |
| titlebar.dnd | Do not disturb presence indicators in title bar |
| titlebar.xa | Extended away presence indicators in title bar |
| statusbar.text | Status bar text |
| statusbar.time | Time displayed in the status bar |
| statusbar.brackets | Status bar brackets |
| statusbar.active | Active window indicator in status bar |
| statusbar.current | Current window indicator in status bar |
| statusbar.new | New messages window indicator in status bar |
| main.text | Main window text |
| main.text.history | All history text |
| main.text.me | Messages you have sent |
| main.text.them | Messages you have received |
| main.splash | Splash logo |
| input.text | Input window text |
| main.time | Main window time |
| subscribed | Subscribed (to, both) in roster |
| unsubscribed | Unsubscribed (from, none) in roster |
| otr.started.trusted | OTR trusted message for new OTR sessions |
| otr.started.untrusted | OTR untrusted message for new OTR sessions |
| otr.ended | OTR ended message |
| otr.trusted | OTR trusted message |
| otr.untrusted | OTR untrusted message |
| online | Online presence text in main window |
| away | Away presence text for main window |
| chat | Available for chat presence text for main window |
| dnd | Do not disturb presence text for main window |
| xa | Extended away presence text for main window |
| offline | Offline presence text for main window |
| typing | Typing message for main window |
| gone | Gone message for main window |
| error | Error messages in main window |
| incoming | Incoming message text in console |
| roominfo | Room information text in chat room windows |
| roommention | Chat room message text when nickname mentioned |
| me | Colour to display who a message is from, for sent messages |
| them | Colour to display who a message is from, for received messages |
| roster.header | Group headers in roster panel |
| occupants.header | Groups headers in chat room occupants panel |
| receipt.sent | Message sent with receipt request, not yet received |
| untrusted | Message received is encrypted with an untrusted key |
The following colour values are available:
```plaintext
white
green
red
yellow
blue
cyan
magenta
black
bold_white
bold_green
bold_red
bold_yellow
bold_blue
bold_cyan
bold_magenta
bold_black
```
To see how the colours will appear in your terminal, run the following command:
```bash
/theme colours
```
The following properties are available in the [*ui*] section, note that the values specified are what is stored in the theme file, see the help on individual commands for how to set the properties:
| Property | Description | File values |
| ---------------- | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| beep | Terminal beep, see [/beep](/command-reference#beep) | true, false |
| flash | Terminal flash, see [/flash](/command-reference#flash) | true, false |
| splash | Splash logo, see [/splash](/command-reference#splash) | true, false |
| wrap | Word wrap main window, see [/wrap](/command-reference#wrap) | true, false |
| time | Time format in main window, see [/time](/command-reference#time) | <a href="https://developer.gnome.org/glib/stable/glib-GDateTime.html#g-date-time-format" target="_blank" rel="noopener noreferrer">GDateTime format</a> |
| time.statusbar | Time format in status bar, see [/time](/command-reference#time) | <a href="https://developer.gnome.org/glib/stable/glib-GDateTime.html#g-date-time-format" target="_blank" rel="noopener noreferrer">GDateTime format</a> |
| resource.title | Show contacts resource in title bar, see [/resource](/command-reference#resource) | true, false |
| resource.message | Show contacts resource on incoming messages, see [/resource](/command-reference#resource) | true, false |
| statuses.console | Presence messages in console, see [/presence](/command-reference#presence) | all, online, none |
| statuses.chat | Presence messages in chat windows, see [/presence](/command-reference#presence) | all, online, none |
| statuses.muc | Presence messages in chat room windows, see [/presence](/command-reference#presence) | all, online, none |
| occupants | Occupants panel in chat rooms, see [/occupants](/command-reference#occupants) | true, false |
| occupants.size | Screen percentage taken by occupants panel, see [/occupants](/command-reference#occupants) | 1-99 |
| occupants.jid | Show JIDs if available in occupants panel, see [/occupants](/command-reference#occupants) | true, false |
| roster | Roster panel in console window, see [/roster](/command-reference#roster) | true, false |
| roster.offline | Offline contacts in roster panel, see [/roster](/command-reference#roster) | true, false |
| roster.resource | Resources in roster panel, see [/roster](/command-reference#roster) | true, false |
| roster.by | Roster panel grouping, see [/roster](/command-reference#roster) | group, presence, none |
| roster.size | Screen percentage taken by roster panel, see [/roster](/command-reference#roster) | 1-99 |
| roster.empty | Show empty groups in roster panel, see [/roster](/command-reference#roster) | true, false |
| privileges | Privilege details in chat rooms, see [/privileges](/command-reference#privileges) | true, false |
| presence | Contacts presence in title bar, see [/presence](/command-reference#presence) | true, false |
| intype | Contact typing messages in console and chat windows, see [/intype](/command-reference#intype) | true, false |
| enc.warn | Title bar unencrypted indicator, see [/encwarn](/command-reference#encwarn) | true, false |
| wins.autotidy | Automatically remove gaps when closing windows, see [/winstidy](/command-reference#winstidy) | true, false |
| pgp.char | Character to show for PGP encrypted messages, see [/pgp](/command-reference#pgp) | true, false |
| otr.char | Character to show for OTR encrypted messages, see [/otr](/command-reference#otr) | true, false |
| omemo.char | Character to show for OMEMO encrypted messages, see [/omemo](/command-reference#omemo) | true, false |
Example themes can be found in the <a href="https://git.jabber.space/devs/profanity/src/branch/master/themes" target="_blank" rel="noopener noreferrer">themes folder</a> of the source code.

View File

@@ -0,0 +1,60 @@
---
title: CProof
description: A console-based XMPP client for power users.
template: splash
hero:
tagline: >
CProof is a powerful console-based XMPP client built for speed, privacy, and simplicity. With support for encryption, themes, and scripting, it runs seamlessly in your terminal — no distractions, no bloat.
<br>
<br>
<span class="text-[1rem]">Available on Linux, FreeBSD, OpenBSD and Windows</span>
<br>
<br>
actions:
- text: Get Started
link: /getting-started/installation
icon: right-arrow
- text: View our Git
link: https://git.jabber.space/devs/profanity
icon: external
variant: minimal
---
import { Card, CardGrid } from "@astrojs/starlight/components";
## Why CProof?
<CardGrid stagger>
<Card title="Console-Based Interface" icon="seti:html">
Run CProof in a terminal. Lightweight and scriptable for power users.
</Card>
<Card title="Secure Messaging" icon="seti:lock">
End-to-end encryption with OTR, OpenPGP, and OMEMO protocols.
</Card>
<Card title="XMPP Support" icon="open-book">
Full support for XMPP chat services with roster and resource management.
</Card>
<Card title="Group Chatrooms (MUC)" icon="star">
Join and manage multi-user chatrooms with ease.
</Card>
<Card title="Cross-Platform" icon="laptop">
Available on Linux, macOS, Windows, *BSD, and Termux.
</Card>
<Card title="Desktop Notifications" icon="rocket">
Stay informed with native desktop notifications.
</Card>
<Card title="Plugin Support" icon="puzzle">
Extend with plugins written in C or Python.
</Card>
<Card title="Active Community" icon="comment">
Join support rooms and contribute to the growing project.
</Card>
</CardGrid>

Some files were not shown because too many files have changed in this diff Show More