aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
blob: c3a7fad02791daf9d6ae73721bed918d26014039 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# mum

Mumble daemon with controller (think `mpd(1)`/`mpc(1)`) written in Rust.

## Building

mumd and mumctl are available on crates.io and can be installed with

```sh
$ cargo install mumd
$ cargo install mumctl
```

They are also
[available on the AUR](https://aur.archlinux.org/packages/mum-git/). Thirdly, we
publish [compiled binaries on Github](https://github.com/sornas/mum/releases/).

### Requirements

These are for Arch Linux. You might need other packages on other distributions
and operating systems, or they might be named something different.

- rust (stable 1.53)
- alsa-lib
- openssl
- opus
- libnotify (optional, needed in default configuration)

Windows is not currently supported but could be in the future. macOS should work.
Other operating systems haven't been tested. The limiting factor on Windows
is IPC communication which is (currently) done via the crate ipc-channel.

We only "guarantee" compilation on latest Rust stable. Open a ticket if this is
an issue for you and we'll see what we can do.

### Installation

1. Build the binaries
2. (wait)
3. Copy/symlink to somewhere nice (or don't).

```sh
$ cargo build --release
$ ln -s $PWD/target/release/mumctl $HOME/.local/bin/
$ ln -s $PWD/target/release/mumd $HOME/.local/bin/
```

### Optional features

mum contains optional features that are enabled by default. To compile without
them, build with --no-default-features. Features can then be enabled with
--features "FEATURES".

The following features can be specified:

| Name               | Needed for         |
|--------------------+--------------------|
| mumd/notifications | Notifications      |
| mumd/ogg           | .ogg sound effects |

If you're using Cargo 1.51 or later you can specify features directly from the
workspace root:

```sh
$ cargo build [--release] --no-default-features
```

Older versions need to build the packages separately:

```sh
$ cd mumd
$ cargo build --release --no-default-features
$ cd ../mumctl
$ cargo build --release --no-default-features  # technically unneeded
                                               # since no features exist
```

### man-pages

Man-pages for mumd, mumctl and mumdrc (the configuration file) are included as
both asciidoc txt-files and already formatted groff-files. They are generated
with

```sh
$ asciidoctor -b manpage *.txt
```

## Usage

This describes how to connect to a server and join different channels.
See `$ mumctl --help` or `documentation/*.txt` for more information.

### mumd

Start the daemon with mumd. Currently it attaches to the terminal, so if you
want to run it in the background you can detach it with e.g. (zsh): 

```sh
$ mumd &>/dev/null &|
```

Somewhere down the line we're aiming to have a `--daemonize`.

### mumctl

Interfacing with the daemon is done through mumctl. Some examples:

```sh
$ mumctl connect 127.0.0.1 spock # connect to 127.0.0.1 with username 'spock'
$ mumctl channel list
ServerRoot
  -user1
  -user2
  -user2
  Channel2
  Channel3
$ mumctl channel connect Channel2
```

## Known issues

The main hub for issues is [our issue
tracker](https://github.com/mum-rs/mum/issues). Additionally, there are some
features that aren't present on the issue tracker:

- Administration tools. See [the admin tools
  project](https://github.com/mum-rs/mum/projects/1).
- Surround output. If this is something you want, [open an
  issue](https://github.com/mum-rs/mum/issues/new) so we can take a look at
  implementing it.

## Why?

Mostly because it's a fun way of learning a new language. Also:

- Most mumble clients use a GUI. While GUIs aren't necessarily bad, there
  should at least exist alternatives where possible.
- Memory, disk and CPU usage. We haven't found a reliable way of testing this
  yet (suggestions welcome).

## Other projects

- [Barnard (go)](https://github.com/bmmcginty/barnard.git) - TUI mumble client