# tek [![Please don't upload to GitHub](https://nogithub.codeberg.page/badge.svg)](https://nogithub.codeberg.page)

a music making program for [24-bit unicode terminals](https://sw.kovidgoyal.net/kitty/).

written in [rust](https://www.rust-lang.org/)
with [ratatui](https://ratatui.rs/) on [crossterm](https://docs.rs/crossterm/latest/crossterm/)
for [jack](https://jackaudio.org/) and [pipewire](https://www.pipewire.org/).

**tek** is available as [source](https://codeberg.org/unspeaker/tek#building-from-source),
[statically linked binaries](https://codeberg.org/unspeaker/tek/releases), and on the
[aur](https://codeberg.org/unspeaker/tek#arch-linux).

author is reachable via [**mastodon** `@unspeaker@mastodon.social`](https://mastodon.social/@unspeaker)
or [**matrix** `@unspeaker:matrix.org`](https://matrix.to/#/@unspeaker:matrix.org)

| | |
|-|-|
|![Screenshot of Arranger Mode](https://codeberg.org/unspeaker/tek/attachments/5014ff4d-9ece-4862-90de-3bc6573eacf6)|![Screenshot of Groovebox Mode](https://codeberg.org/unspeaker/tek/releases/download/0.2.0-rc.7/Screenshot%20From%202025-01-02%2023-18-05.png)

## usage

* **requirements:** linux; jack or pipewire; 24-bit terminal (i use `kitty`)
* **recommended:** midi controller; samples in wav format; lv2 plugins.

## keymaps

* Arranger:
    * [x] `arrows/wasd`: navigate
    * [x] `tab`: enter editor
    * [x] `q`: enqueue clip
    * [x] space: play/pause
* Editor:
    * [x] `arrows/wasd`: navigate
    * [x] `,` / `.`: change note length
    * [x] `enter`: write note
    * [x] `-` / `=`: zoom midi editor
    * [ ] `z`: zoom lock/unlock
    * [ ] `del`: delete
* Global:
    * [x] esc: options menu
    * [x] f1: help/command list
    * [ ] f2: rename
    * [ ] f6: save
    * [ ] f9: load

## installation

### binary download

you can download [tek 0.2.0 "almost static"](https://codeberg.org/unspeaker/tek/releases/tag/0.2.0)
from codeberg releases. this standalone binary release, should work on any glibc-based system.

### from distro repositories

[![Packaging status](https://repology.org/badge/vertical-allrepos/tek.svg)](https://repology.org/project/tek/versions)

#### arch linux

[tek 0.2.0-rc7](https://aur.archlinux.org/packages/tek) is available as a package in the AUR.
you can install it using your preferred AUR helper (e.g. `paru`):

```sh
paru -S tek
```

### building from source

requires docker.

```
git clone --recursive -b 0.2 https://codeberg.org/unspeaker/tek
cd tek                             # enter directory
cat bin/release-glibc.sh           # preview build script
sudo bin/release-glibc.sh          # run build script
sudo cp bin/tek /usr/local/bin/tek # install
```

## design goals

* inspired by trackers and hardware sequencers,
  but with the critical feature that 90s samplers lack:
  able to **resample, i.e. record while playing!**

* **pop-up scratchpad for musical ideas.**
  low resource consumption, can stay open in background.
  but flexible enough to allow expanding on compositions

* **human- and machine- readable project format**
  simple representation for project data
  enable scripting and remapping.