11 个版本 (5 个重大更改)
| 0.6.0 | 2024 年 8 月 8 日 |
|---|---|
| 0.5.1 | 2024 年 7 月 19 日 |
| 0.5.0 | 2024 年 4 月 8 日 |
| 0.4.2 | 2024 年 1 月 2 日 |
| 0.1.1 | 2023 年 10 月 31 日 |
178 在 文件系统
每月 134 次下载
68KB
1.5K SLoC
Workflows
一个用于创建远程和本地 Git 仓库无缝工作流程的 CLI 工具。
workflows 允许用户查看 GitHub 和其本地机器上的项目。然后,选定的项目将在 tmux 会话中打开。
如果选定的项目不在用户的机器上,它将从 GitHub 克隆,然后在 tmux 会话中打开。
使用 fzf 选择项目,以实现流畅的键盘驱动工作流程。
要求
workflows 使用以下程序
| 程序 | 目的 | 必需 |
|---|---|---|
fzf |
选择项目 | 是 |
gh |
查看和克隆 GitHub 项目 | 可选 |
git |
检查本地仓库的状态 | 可选 |
tmux |
项目在其中启动的终端多路复用器 | 是 |
tmuxinator |
tmux 的会话管理器 | 是 |
可以通过配置禁用 gh 和 git 集成,但它们默认都是启用的。
检查要求
要检查所需的程序是否已安装,请运行 workflows 健康检查
workflows --health
安装
使用 cargo 安装
cargo install workflows
从源安装最新版本
cargo install --git https://github.com/danielronalds/workflows
从源构建
git clone https://github.com/danielronalds/workflows
cd workflows
cargo build --release
使用方法
打开项目
要打开项目,请打开终端并运行 workflows。您将看到一个包含您项目列表的 fzf UI。本地项目将立即显示,但 GitHub 项目可能需要根据您的连接强度加载几秒钟。选择您想要打开的项目,它将在 tmux 会话中启动。如果项目没有 tmuxinator 配置,则会创建一个。
项目默认存储在 ~/Projects/,但是可以通过配置文件来更改。GitHub项目也会克隆到这里。如果系统中的其他地方存在项目,则不会检测到。
使用 tmuxinator 运行的命令可以通过配置文件进行配置。
--open 快捷键
如果你经常访问某个特定项目,那么在最近的终端历史记录中拥有这个快捷键可能会有所帮助。这不能通过 fzf 接口实现,这就是 --open(或 -o)命令出现的地方。
你可以通过在 --open 命令中提供完整的项目名称作为参数来直接打开本地项目。
workflows --open workflows
以下方法也有效
workflows -o workflows
创建项目
要创建项目,请运行 workflows --new <项目名称-name>。这将在项目目录中创建一个以项目名称命名的目录。创建并运行 tmuxinator 配置,在 tmux 中启动项目。
可以使用 --new 命令与缩写 -n 交换。
模板
创建项目时,你通常会想使用某种类型的 CLI 生成工具,例如 cargo init。使用模板,可以在创建项目时完成此操作。
模板定义了一系列要在项目创建时使用 --new 命令运行的命令。例如,如果你想有一个创建 cargo 二进制项目的模板,你的配置文件中的模板将如下所示
[[template]]
name="Rust Binary"
commands=["cargo init --bin"]
使用项目名称
当运行模板时,项目名称存储在一个环境变量中,即 WORKFLOWS_PROJECT_NAME。这可以用于需要知道项目名称来构建它的模板,例如创建一个 Go 项目
[[template]]
name="Go Project"
commands=[
"go mod init github.com/danielronalds/$WORKFLOWS_PROJECT_NAME",
"git init",
"git branch -m main"
]
删除项目
要删除项目,请运行 workflows --delete。你会看到一个 fzf UI,但是只有本地项目。选择一个将会检查仓库是否有干净的暂存区并且已经推送到主分支。注意 这只适用于远程分支。确认后,项目将被删除。
使用 workflows --delete 删除时,会同时删除 tmuxinator 配置以及项目目录中的项目。
删除已知项目
如果你知道要删除的项目确切名称,你也可以使用 workflows --delete <项目名称>。
例如,如果你想删除名为 test-proj 的项目,你可以运行 workflows --delete test-proj。这会绕过 fzf。
克隆项目
可以使用 workflows --clone 或短标志 -c 来使用 Workflows 克隆 git 仓库。此命令对于检查非本人项目非常有用,这些项目不会显示在默认的打开提示中。
配置
workflows 通过以下路径之一的 toml 文件进行配置
~/.config/workflows/config.toml~/.workflows.toml
如果找不到第一个选项,则会查找第二个选项。如果两个都不存在,则使用默认配置。
默认配置
[general]
projects_dirs=["Projects/"]
open_new_projects=true
[fzf]
layout="default"
border="none"
border_label=""
open_prompt="Open: "
delete_prompt="Delete: "
pointer=">"
theme="dark"
template_prompt="Select a template: "
no_template_option="No Template"
[github]
enabled=true
confirm_cloning=true
project_indicator=" "
[git]
check_tree=true
check_push=true
[tmuxinator]
fresh_config=false
window_names=["editor"]
start_commands=["nvim ."]
通用配置
| 选项 | 目的 | 默认值 |
|---|---|---|
projects_dir |
工作流应该在何处查找项目。路径相对于$HOME | ["Projects/]" |
open_new_projects |
是否在创建项目后(使用--create)打开项目 |
true |
fzf配置
| 选项 | 目的 | 默认值 |
|---|---|---|
layout |
fzf应使用的布局,可以是default、reverse或reverse-list |
"default" |
border |
fzf应在查找器周围显示的边框。选项包括:rounded、sharp、none等。如需更多信息,请运行fzf --help。所有fzf边框类型均受支持。 |
"none" |
border_label |
边框中显示的标签。如果为空或未选择边框,则标签不会显示 | "" |
open_prompt |
打开项目时fzf应显示的提示 | "打开" |
delete_prompt |
删除项目时fzf应显示的提示 | "删除" |
pointer |
当前项在fzf中的指针 | ">" |
theme |
与fzf一起使用的主题。选项包括:dark、light、16、bw |
"dark" |
| template_prompt | 选择模板的默认提示 | "选择一个模板" |
| no_template_option | 选择无模板选项的名称 | "无模板" |
GitHub配置
注意这两个选项都需要gh CLI工具,并且用户必须已登录。
| 选项 | 目的 | 默认值 |
|---|---|---|
enabled |
是否启用GitHub集成 | true |
confirm_cloning |
在将git仓库克隆到~/Projects/之前是否要求确认 |
true |
project_indicator |
字符串,用于在列表视图中添加到GitHub项目之前,要禁用则留空。 | |
git配置
注意这两个选项都需要git,并且项目必须是git仓库。如果其中一项要求未满足,则在运行时这两个选项始终为false。
| 选项 | 目的 | 默认值 |
|---|---|---|
check_tree |
在删除之前检查git仓库是否有干净的working tree | true |
check_push |
在删除之前检查git仓库是否已推送 | true |
tmuxinator配置
| 选项 | 目的 | 默认值 |
|---|---|---|
fresh_config |
如果启用,则在每个项目启动之前生成tmuxinator配置。如果有更新以下两个选项,这可能很有用 | false |
window_names |
tmuxinator应创建的tmux窗口名称数组 | ["editor"] |
start_commands |
启动tmux时运行的命令数组。如果定义的窗口的命令不足,则使用默认选项。 | ["nvim ."] |
窗口管理器集成
我编写了这个程序,考虑到使用窗口管理器的情况,因为它鼓励更少的鼠标交互。它仅在Hyprland使用kitty的情况下进行了测试。
Hyprland快捷键
以下代码片段在Hyprland中使用kitty添加了启动workflows的快捷键
bind=SUPER_SHIFT,W,exec,kitty workflows
以下代码片段用于运行删除模式
bind=SUPER_SHIFT_CTRL,W,exec,kitty workflows --delete
依赖项
~4–13MB
~172K SLoC