dek-0.1.10 is not a library.
dek
pronounced "deynek"
Declarative environment setup. One TOML, any machine.
Install
# or
|
# setup completions
Usage
Config
# Packages
[] # auto-detects: pacman, apt, dnf, brew
= ["curl", "git", "htop"]
[] # auto-installs cargo/go/npm/pip if missing
= ["bat", "eza", "ripgrep"]
[]
= ["github.com/junegunn/fzf@latest"]
[]
= ["prettier", "typescript"]
[]
= ["httpie", "tldr"]
# Systemd services
[[]]
= "docker"
= "active"
= true
# Files
[]
= "~/.zshrc"
[]
= "~/.config/nvim"
[]
= [
"export PATH=$HOME/.local/bin:$PATH",
"source ~/.aliases"
]
# Shell (auto-sources in your rc file)
[]
= "ls -larth"
= "lazygit"
[]
= "nvim"
Split Config
dek/
├── 00-packages.toml
├── 10-services.toml
├── 20-dotfiles.toml
└── 30-shell.toml
Files are merged alphabetically.
Test
Spin up a container, apply config, drop into shell:
Builds dek locally and mounts into container - no compilation inside the container.
Inline
Quick one-off installs without a config file:
Format: provider.package where provider is os, apt, pacman, cargo, go, npm, or pip.
os auto-detects your system package manager (pacman, apt, dnf, brew).
Remote (planned)
Bake
Embed config into a standalone binary:
Package:Binary Syntax
When package names differ from the binary they install, use package:binary syntax:
[]
= ["bat", "ripgrep:rg", "fd-find:fd", "bottom:btm"]
[]
= ["jq", "ripgrep:rg", "fzf"]
[]
= ["github.com/junegunn/fzf@latest"] # auto-derives "fzf" from path
This tells dek to:
- Install the
packagepart - Check if the
binarypart exists in PATH
Without :binary, dek assumes the binary name matches the package name (or derives it from go paths).