Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/maaslalani/slides
Terminal based presentation tool
https://github.com/maaslalani/slides
markdown presentation slides terminal
Last synced: 3 days ago
JSON representation
Terminal based presentation tool
- Host: GitHub
- URL: https://github.com/maaslalani/slides
- Owner: maaslalani
- License: mit
- Created: 2021-05-05T23:13:42.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-08-21T14:16:54.000Z (4 months ago)
- Last Synced: 2024-12-02T16:27:12.795Z (10 days ago)
- Topics: markdown, presentation, slides, terminal
- Language: Go
- Homepage: http://maaslalani.com/slides/
- Size: 4.22 MB
- Stars: 10,081
- Watchers: 64
- Forks: 278
- Open Issues: 67
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
- orm-awesome - slides
- my-awesome - maaslalani/slides - 08 star:10.1k fork:0.3k Terminal based presentation tool (Go)
- awesome-cli-apps - slides - A markdown presentation tool. (Productivity / Presentations)
- fucking-Awesome-Linux-Software - ![Open-Source Software - Terminal based presentation tool. (Command Line Utilities / Tools)
- awesome-list - maaslalani/slides - Terminal based presentation tool (Go)
- awesome-repositories - maaslalani/slides - Terminal based presentation tool (Go)
- awesome-browserless - Slides - Terminal based presentation tool (Office work / Misc)
- Awesome-Linux-Software - ![Open-Source Software - Terminal based presentation tool. (Command Line Utilities / Tools)
- fucking-awesome-cli-apps - slides - A markdown presentation tool. (Productivity / Presentations)
- awesome-repositories - maaslalani / slides
- charm-in-the-wild - Slides - A markdown-based presentation tool. (_built with Bubble Tea_) (Applications / Productivity and Organization)
README
# Slides
Slides in your terminal.
### Installation
[![Homebrew](https://img.shields.io/badge/dynamic/json.svg?url=https://formulae.brew.sh/api/formula/slides.json&query=$.versions.stable&label=homebrew)](https://formulae.brew.sh/formula/slides)
[![Snapcraft](https://snapcraft.io/slides/badge.svg)](https://snapcraft.io/slides)
[![AUR](https://img.shields.io/aur/version/slides?label=AUR)](https://aur.archlinux.org/packages/slides)Instructions
#### MacOS
```
brew install slides
```
#### Arch
```
yay -S slides
```
#### Nixpkgs (unstable)
```
nix-env -iA nixpkgs.slides
```
#### Any Linux Distro running `snapd`
```
sudo snap install slides
```
#### Go
```
go install github.com/maaslalani/slides@latest
```
From source:
```
git clone https://github.com/maaslalani/slides.git
cd slides
go install
```You can also download a binary from the [releases](https://github.com/maaslalani/slides/releases) page.
### Usage
Create a simple markdown file that contains your slides:````markdown
# Welcome to Slides
A terminal based presentation tool---
## Everything is markdown
In fact, this entire presentation is a markdown file.---
## Everything happens in your terminal
Create slides and present them without ever leaving your terminal.---
## Code execution
```go
package mainimport "fmt"
func main() {
fmt.Println("Execute code directly inside the slides")
}
```You can execute code inside your slides by pressing ``,
the output of your command will be displayed at the end of the current slide.---
## Pre-process slides
You can add a code block with three tildes (`~`) and write a command to run *before* displaying
the slides, the text inside the code block will be passed as `stdin` to the command
and the code block will be replaced with the `stdout` of the command.```
~~~graph-easy --as=boxart
[ A ] - to -> [ B ]
~~~
```The above will be pre-processed to look like:
┌───┐ to ┌───┐
│ A │ ────> │ B │
└───┘ └───┘For security reasons, you must pass a file that has execution permissions
for the slides to be pre-processed. You can use `chmod` to add these permissions.```bash
chmod +x file.md
```````
Checkout the [example slides](https://github.com/maaslalani/slides/tree/main/examples).
Then, to present, run:
```
slides presentation.md
```If given a file name, `slides` will automatically look for changes in the file and update the presentation live.
`slides` also accepts input through `stdin`:
```
curl http://example.com/slides.md | slides
```Go to the first slide with the following key sequence:
* g gGo to the next slide with any of the following key sequences:
* space
* right
* down
* enter
* n
* j
* l
* Page Down
* number + any of the above (go forward n slides)Go to the previous slide with any of the following key sequences:
* left
* up
* p
* h
* k
* N
* Page Up
* number + any of the above (go back n slides)Go to a specific slide with the following key sequence:
* number + G
Go to the last slide with the following key:
* G
### Search
To quickly jump to the right slide, you can use the search function.
Press /, enter your search term and press Enter
(*The search term is interpreted as a regular expression. The `/i` flag causes case-insensitivity.*).Press ctrl+n after a search to go to the next search result.
### Code Execution
If slides finds a code block on the current slides it can execute the code block and display the result as virtual text
on the screen.Press ctrl+e on a slide with a code block to execute it and display the result.
### Pre-processing
You can add a code block with three tildes (`~`) and write a command to run
*before* displaying the slides, the text inside the code block will be passed
as `stdin` to the command and the code block will be replaced with the `stdout`
of the command. Wrap the pre-processed block in three backticks to keep
proper formatting and new lines.````
```
~~~graph-easy --as=boxart
[ A ] - to -> [ B ]
~~~
```
````The above will be pre-processed to look like:
```
┌───┐ to ┌───┐
│ A │ ────> │ B │
└───┘ └───┘
```For security reasons, you must pass a file that has execution permissions
for the slides to be pre-processed. You can use `chmod` to add these permissions.```bash
chmod +x file.md
```### Configuration
`slides` allows you to customize your presentation's look and feel with metadata at the top of your `slides.md`.
> This section is entirely optional, `slides` will use sensible defaults if this section or any field in the section is omitted.
```yaml
---
theme: ./path/to/theme.json
author: Gopher
date: MMMM dd, YYYY
paging: Slide %d / %d
---
```* `theme`: Path to `json` file containing a [glamour
theme](https://github.com/charmbracelet/glamour/tree/master/styles), can also
be a link to a remote `json` file which slides will fetch before presenting.
* `author`: A `string` to display on the bottom-left corner of the presentation
view. Defaults to the OS current user's full name. Can be empty to hide the author.
* `date`: A `string` that is used to format today's date in the `YYYY-MM-DD` format. If the date is not a valid
format, the string will be displayed. Defaults to `YYYY-MM-DD`.
* `paging`: A `string` that contains 0 or more `%d` directives. The first `%d`
will be replaced with the current slide number and the second `%d` will be
replaced with the total slides count. Defaults to `Slide %d / %d`.
You will need to surround the paging value with quotes if it starts with `%`.#### Date format
Given the date _January 02, 2006_:
| Value | Translates to |
|--------|---------------|
| `YYYY` | 2006 |
| `YY` | 06 |
| `MMMM` | January |
| `MMM` | Jan |
| `MM` | 01 |
| `mm` | 1 |
| `DD` | 02 |
| `dd` | 2 |### SSH
Slides is accessible over `ssh` if hosted on a machine through the `slides
serve [file]` command.On a machine, run:
```
slides serve [file]
```Then, on another machine (or same machine), `ssh` into the port specified by
the `slides serve [file]` command:
```
ssh 127.0.0.1 -p 53531
```You will be able to access the presentation hosted over SSH! You can use this
to present with `slides` from a computer that doesn't have `slides` installed,
but does have `ssh`. Or, let your viewers have access to the slides on their
own computer without needing to download `slides` and the presentation file.### Alternatives
**Credits**: This project was heavily inspired by [`lookatme`](https://github.com/d0c-s4vage/lookatme).
* [`lookatme`](https://github.com/d0c-s4vage/lookatme)
* [`sli.dev`](https://sli.dev/)
* [`sent`](https://tools.suckless.org/sent/)
* [`presenterm`](https://github.com/mfontanini/presenterm)### Development
See the [development documentation](./docs/development)