#git-repository #workflow #git-workflow #local-git #projects #github #fzf

app workflows

一个用于创建远程和本地 Git 仓库无缝工作流程的 CLI 工具

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文件系统

Download history 22/week @ 2024-07-01 99/week @ 2024-07-15 16/week @ 2024-07-22 2/week @ 2024-07-29 104/week @ 2024-08-05 9/week @ 2024-08-12

每月 134 次下载

MIT 许可证

68KB
1.5K SLoC

Workflows

一个用于创建远程和本地 Git 仓库无缝工作流程的 CLI 工具。

workflows 允许用户查看 GitHub 和其本地机器上的项目。然后,选定的项目将在 tmux 会话中打开。

如果选定的项目不在用户的机器上,它将从 GitHub 克隆,然后在 tmux 会话中打开。

使用 fzf 选择项目,以实现流畅的键盘驱动工作流程。

要求

workflows 使用以下程序

程序 目的 必需
fzf 选择项目
gh 查看和克隆 GitHub 项目 可选
git 检查本地仓库的状态 可选
tmux 项目在其中启动的终端多路复用器
tmuxinator tmux 的会话管理器

可以通过配置禁用 ghgit 集成,但它们默认都是启用的。

检查要求

要检查所需的程序是否已安装,请运行 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应使用的布局,可以是defaultreversereverse-list "default"
border fzf应在查找器周围显示的边框。选项包括:roundedsharpnone等。如需更多信息,请运行fzf --help。所有fzf边框类型均受支持。 "none"
border_label 边框中显示的标签。如果为空或未选择边框,则标签不会显示 ""
open_prompt 打开项目时fzf应显示的提示 "打开"
delete_prompt 删除项目时fzf应显示的提示 "删除"
pointer 当前项在fzf中的指针 ">"
theme 与fzf一起使用的主题。选项包括:darklight16bw "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