# 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). hmu on [**mastodon** `@unspeaker@mastodon.social`](https://mastodon.social/@unspeaker) or [**matrix** `@unspeaker:matrix.org`](https://matrix.to/#/@unspeaker:matrix.org) ![Screenshot](https://codeberg.org/unspeaker/tek/releases/download/0.2.0-rc.7/Screenshot%20From%202025-01-02%2023-18-05.png) ## usage ``` Usage: tek [OPTIONS] Commands: clock A standalone transport clock sequencer A MIDI sequencer sampler A MIDI-controlled audio sampler groovebox Sequencer and sampler together arranger Multi-track MIDI sequencer mixer TODO: A MIDI-controlled audio mixer track TODO: A customizable channel strip plugin TODO: An audio plugin host help Print this message or the help of the given subcommand(s) Options: -n, --name Name of JACK client -S, --sync-lead Whether to attempt to become transport master -s, --sync-follow Whether to sync to external transport master -b, --bpm Initial tempo in beats per minute -t, --show-clock Whether to include a transport toolbar (default: true) -I, --midi-from MIDI outs to connect to (multiple instances accepted) -i, --midi-from-re MIDI outs to connect to (multiple instances accepted) -O, --midi-to MIDI ins to connect to (multiple instances accepted) -o, --midi-to-re MIDI ins to connect to (multiple instances accepted) -l, --left-from Audio outs to connect to left input -r, --right-from Audio outs to connect to right input -L, --left-to Audio ins to connect from left output -R, --right-to Audio ins to connect from right output -h, --help Print help -V, --version Print version ``` ## keymaps * [x] `arrows/wasd`: navigate * [x] `tab`: toggle editor * [x] `enter`: write note * [x] `z`: unlock zoom * [x] `-` / `=`: zoom midi editor * [x] space: play/pause * [ ] esc: options * [ ] f1: help/command list * [ ] f2: rename * [ ] f6: save * [ ] f9: load ## installation * **requirements:** linux; jack or pipewire; 24-bit terminal (i use `kitty`) * **recommended:** midi controller; samples in wav format; lv2 plugins. ### arch linux [tek](https://codeberg.org/unspeaker/tek) is available as a package in the AUR. you can install it using an AUR helper (e.g. `paru`): ```sh paru -S tek ``` ### downloads see the [releases page](https://codeberg.org/unspeaker/tek/releases). ### building from source you'll need a Rust toolchain and various system libraries. you can obtain the former using `rustup` and the latter using `nix-shell`. there's a `shell.nix` provided with the project. from there, use the commands in the `Justfile`, e.g.: ```sh just arranger ``` note that `tek > 0.2.0-rc.7` will require rust nightly for the unstable features `type_alias_impl_trait` and `impl_trait_in_assoc_type`. make some noise for lucky [**rust rfc2515**](https://github.com/rust-lang/rust/issues/63063) if you want to see this buildable with stable/beta. ## 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.