ITADN
ck3mp3r/laio-cli
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

一个简洁的、受 flexbox 启发的 tmux 布局与会话管理器。使用 YAML 定义复杂的多窗口、多窗格布局,并通过启动/关闭钩子管理会话生命周期。

完整文档

功能

  • 受 flexbox 启发的布局 - 使用 flexflex_direction(行/列)定义窗格分割
  • 模板变量 - 支持 Tera 模板和数组变量的动态配置
  • 会话生命周期管理 - 启动/关闭命令和嵌入式脚本
  • 双配置模式 - 全局配置(~/.config/laio)或本地项目配置(.laio.yaml
  • 会话序列化 - 将现有 tmux 会话导出为 YAML 格式
  • 焦点与缩放控制 - 在配置中固定焦点和缩放状态
  • 环境变量与 Shell 自定义 - 按会话设置环境变量和 Shell 覆盖
  • Tmux 原生 - 专为 tmux 构建(提供实验性的 Zellij 支持)

快速开始

# Install (see Installation section)
nix profile install "github:ck3mp3r/laio-cli"

# Create a new config
laio config create myproject

# Start the session
laio start myproject

# List sessions and configs
laio list

安装

支持的平台:

  • Linux: x86_64 (Intel/AMD), aarch64 (ARM)
  • macOS: aarch64 (Apple Silicon)

Nix

built with nix

nix profile install "github:ck3mp3r/laio-cli"

Homebrew

brew tap ck3mp3r/laio-cli https://github.com/ck3mp3r/laio-cli/
brew install laio

二进制下载

发布页面下载并添加到 PATH

开发

先决条件

  • Rust 1.70+(或使用 Nix 进行可复现构建)
  • tmux 3.0+

构建

cargo build --release
# Binary at: target/release/laio

测试

cargo test

开发环境(Nix)

nix develop
# or use direnv
direnv allow

配置模式

YAML 配置模式定义于 src/common/config/schema.json。请将其用于编辑器集成(LSP、验证)。

用法

命令

laio start [name]                  # Start session (interactive picker if name omitted)
laio start --file config.yaml      # Start from specific file
laio start --var key=value         # Start with template variables
laio stop [name]                   # Stop session
laio stop --all                    # Stop all laio-managed sessions
laio list                          # List sessions and configs
laio config create <name>          # Create new config
laio config create --var key=value # Create from _default.yaml with variables
laio config create --copy src      # Create from existing config
laio config edit <name>            # Edit config in $EDITOR
laio config link <name>            # Symlink .laio.yaml to global config
laio session yaml                  # Export current tmux session to YAML
laio completion <shell>            # Generate shell completions

参见 laio --help完整文档 以查看所有选项。

模板变量

使用模板变量创建可复用的配置:

name: {{ session_name }}
path: {{ path }}

windows:
{% for service in services %}
  - name: {{ service }}
    panes:
      - path: ./{{ service }}
        commands:
          - command: npm
            args: [run, dev]
{% endfor %}

自动注入的变量:

  • session_name - 从会话名称设置(不可覆盖)
  • path - 默认为当前工作目录

从变量开始:

# Uses session name and cwd automatically
laio start myproject

# Override path
laio start myproject --var path=~/projects/myproject

# Multiple services (array variables)
laio start microservices \
  --var services=auth \
  --var services=api \
  --var services=frontend

参见 模板变量文档 以获取完整的语法和示例。

配置

配置是定义会话布局的 YAML 文件:

name: myproject
path: /path/to/myproject

# Session lifecycle hooks
startup:
  - command: docker-compose
    args: [up, -d]

startup_script: |
  #!/usr/bin/env bash
  echo "Session starting..."

shutdown:
  - command: docker-compose
    args: [down]

shutdown_script: |
  #!/usr/bin/env bash
  echo "Cleaning up..."

# Session environment
shell: /bin/zsh
env:
  NODE_ENV: development
  DEBUG: "app:*"

# Window and pane layout
windows:
  - name: editor
    focus: true  # active window after session creation
    panes:
      - name: nvim
        commands:
          - command: $EDITOR

  - name: dev
    flex_direction: row  # vertical split (panes side-by-side)
    panes:
      - flex: 2
        flex_direction: column  # horizontal split (panes stacked)
        panes:
          - flex: 3
            path: ./src
            focus: true  # initial focus
            commands:
              - command: npm
                args: [run, dev]
          - flex: 1
            zoom: true  # start zoomed
            script: |
              #!/usr/bin/env bash
              tail -f logs/app.log
      - flex: 1
        style: bg=blue,fg=white  # tmux pane styling

主要特性:

  • flex:按比例调整大小(例如,flex: 2 = flex: 1 的两倍大小)
  • flex_directionrow(垂直分割,并排显示)或 column(水平分割,堆叠显示)
  • focus(窗口):会话创建后的活动窗口
  • focus(窗格):固定窗口内的初始光标位置
  • zoom:以缩放状态启动窗格
  • commands:顺序执行命令
  • script:内联脚本块
  • path:工作目录(绝对路径或相对于会话根目录)

请参阅 配置文档 以获取所有选项。

项目配置

在任意项目目录中创建 .laio.yaml

cd myproject
laio config create  # creates .laio.yaml
laio start          # auto-detects and uses .laio.yaml

将本地配置链接到全局命名空间:

laio config link myproject  # symlinks .laio.yaml -> ~/.config/laio/myproject.yaml

会话序列化

将现有的 tmux 会话导出为 YAML:

# From within a tmux session
laio session yaml > ~/.config/laio/newsession.yaml

使用限制

严禁任何直接或间接参与协助或纵容针对加沙巴勒斯坦人民实施的种族灭绝和暴行的组织、公司或政府使用本软件。仅允许与上述行为无关的个人和实体使用本软件。

许可证

参见 LICENSE.md