Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Custom Commands

Custom commands let you define reusable scripts in your flk environment. They become available as shell functions when the development environment is activated.

Basic Usage

flk cmd add dev "npm run dev"
flk cmd add test "cargo test --all"
flk cmd add lint "cargo clippy -- -D warnings"
flk cmd list
flk cmd remove dev

Loading from Files

For complex or multiline commands, use the --file flag:

flk cmd add deploy --file scripts/deploy.sh

This reads the command body from the specified file instead of inline text.

Profile Targeting

Commands are stored per-profile. Use --profile to target a specific one:

flk cmd add build "cargo build --release" --profile backend
flk cmd list --profile frontend

How It Works

Commands are stored in the commands block of your profile file (.flk/profiles/<profile>.nix):

commands = [
  { name = "dev"; script = ''npm run dev''; }
  { name = "test"; script = ''cargo test --all''; }
];

Each command becomes a shell function (via writeShellScriptBin) when you activate the environment.

Naming Rules

Command names must follow these rules:

  • Letters, numbers, hyphens, and underscores only
  • Cannot start with a hyphen
  • Examples: dev, run-tests, build_release

Examples

# Web development commands
flk cmd add dev "npm run dev"
flk cmd add build "npm run build && npm run typecheck"
flk cmd add db:migrate "npx prisma migrate dev"

# Rust project commands
flk cmd add watch "cargo watch -x 'run -- --port 8080'"
flk cmd add bench "cargo bench --all-features"

# Complex command from a file
echo '#!/bin/bash
echo "Running full CI pipeline..."
cargo fmt --check
cargo clippy -- -D warnings
cargo test --all' > scripts/ci.sh
flk cmd add ci --file scripts/ci.sh

See Also