# MediaLinker-cli
`ml` shares files and text through a [MediaLinker](https://github.com/marxnoe/MediaLinker)
server. Every share gets a 5-character code that works until it expires.
## Install
macOS and Linux:
```sh
Windows (PowerShell):
```powershell
With Cargo:
```sh
cargo binstall medialinker-cli # prebuilt binary, needs cargo-binstall
cargo install medialinker-cli # build from source
```
Prebuilt archives for Linux (x86_64, ARM64), macOS (Intel, Apple Silicon) and Windows are on the
[releases page](https://github.com/marxnoe/MediaLinker-cli/releases).
## Server
`ml` talks to https://medialinker.noecore.com by default. To use another MediaLinker server, save it once:
```sh
ml server https://media.example.com
```
`--server <URL>` or the `ML_SERVER` environment variable override the saved server.
## Usage
```sh
ml send photo.jpg # share a file, prints the code
ml send "meet at 6" # share text
ml send notes.txt --text # share the words "notes.txt", not the file
ml send video.mp4 --ttl 7d # expiry: 1h, 24h (default) or 7d
ml get K7QX2 # prints text, or saves a file in the current directory
ml get K7QX2 -o out.jpg # save under another name (-o - writes to stdout)
```
`ml get` never overwrites an existing file unless you pass `--force`.
In a terminal, `ml send` also prints a QR code and a link to the receive page, so a phone can open the
share straight away. `--no-qr` leaves the QR code out; nothing extra is printed when stderr is not a
terminal, so `CODE=$(ml send file)` stays clean.
## Shell completions
`ml completions <shell>` prints a completion script for `bash`, `zsh`, `fish`, `powershell` or `elvish`:
```sh
ml completions bash > ~/.local/share/bash-completion/completions/ml
ml completions zsh > ~/.zfunc/_ml # with fpath+=~/.zfunc in .zshrc
ml completions fish > ~/.config/fish/completions/ml.fish
ml completions powershell >> $PROFILE
```
## Releasing
Releases are built by [cargo-dist](https://opensource.axo.dev/cargo-dist/). Bump `version` in
`Cargo.toml`, merge it, then push a matching tag:
```sh
git tag v0.2.0 && git push origin v0.2.0
```
The release workflow builds every target, publishes the archives and installers to a GitHub release,
then publishes the crate to crates.io (needs the `CARGO_REGISTRY_TOKEN` repo secret).
## License
MIT, see [LICENSE](LICENSE).