# 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/attachments/549efab7-f46b-438b-9508-cd499d044b41) this codebase produces the following binaries: * **`tek_sequencer`** is a single-track, multi-pattern MIDI sequencer with properly tempo-synced pattern switch * **`tek_groovebox`** connects the sequencer to a sampler, so that you can sample while you sequence * **`tek_arranger`** is a multi-track sequencer based on a familiar clip launching UI * **`tek_transport`** is a JACK transport controller * **`tek_sampler`** is a MIDI-controlled sampler * **`tek_plugin`** is an audio plugin host. * **`tek_channel`** is a standalone channel strip * **`tek_mixer`** is an audio mixer. some of these are currently work in progress. the project roadmap is at https://codeberg.org/unspeaker/tek/milestones ## getting started * **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 ``` ## design goals ### lightweight * pop-up scratchpad for musical ideas * low resource consumption, can stay open in background * advanced toolset allows quickly expanding on compositions ### flexible * inspired by trackers and hardware sequencers * able to record while playing! ### programmable * human-readable project format * command architecture allows for scripting and remapping --- > [!NOTE] > Your moral support means a lot to me. > Feel free to [contact me on Mastodon](https://mastodon.social/@unspeaker)![^0] > > Love, > 🤫 > (a rogue knowledge worker in a cyberpunk dystopia)