diff --git a/docs/packages/README.md b/docs/packages/README.md index b71bcc2..1a1df1f 100644 --- a/docs/packages/README.md +++ b/docs/packages/README.md @@ -23,6 +23,7 @@ These packages are built from source in `pkgs//`: | `msty-studio` | Msty Studio application | Python | `pkgs/msty-studio/` | | `n8n` | Workflow automation tool | Node.js | `pkgs/n8n/` | | `openshell` | AI shell assistant | Go | `pkgs/openshell/` | +| `openwork` | Open-source Claude Cowork alternative powered by opencode | AppImage | `pkgs/openwork/` | | `pomodoro-timer` | Pomodoro timer utility | Shell | `pkgs/pomodoro-timer/` | | `rofi-project-opener` | Rofi-based project launcher | Shell | `pkgs/rofi-project-opener/` | | `stt-ptt` | Push to Talk Speech to Text | Python | `pkgs/stt-ptt/` | diff --git a/pkgs/default.nix b/pkgs/default.nix index d04c199..c6c3f27 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -30,6 +30,7 @@ in { tuxedo-backlight = pkgs.callPackage ./tuxedo-backlight {}; kestractl = pkgs.callPackage ./kestractl {}; openshell = pkgs.callPackage ./openshell {}; + openwork = pkgs.callPackage ./openwork {}; zellij-ps = pkgs.callPackage ./zellij-ps {}; vibetyper = pkgs.callPackage ./vibetyper {}; diff --git a/pkgs/openwork/default.nix b/pkgs/openwork/default.nix new file mode 100644 index 0000000..4b961ff --- /dev/null +++ b/pkgs/openwork/default.nix @@ -0,0 +1,49 @@ +{ + appimageTools, + fetchurl, + lib, + nix-update-script, + stdenvNoCC, +}: let + pname = "openwork"; + version = "0.16.4"; + + src = fetchurl { + url = + if stdenvNoCC.hostPlatform.system == "aarch64-linux" + then "https://github.com/different-ai/openwork/releases/download/v${version}/openwork-linux-arm64-${version}.AppImage" + else "https://github.com/different-ai/openwork/releases/download/v${version}/openwork-linux-x86_64-${version}.AppImage"; + hash = + if stdenvNoCC.hostPlatform.system == "aarch64-linux" + then "sha256-ZSoAcOH0/gQynSCY8qCvysaNBnUl/G8Zz66a11y60Qs=" + else "sha256-CyyZ187oa+xV/t33T5aGpUN1CICxsTSBU3+1OoPbfUs="; + }; + + appimageContents = appimageTools.extractType2 {inherit pname version src;}; +in + appimageTools.wrapType2 { + inherit pname version src; + + extraInstallCommands = '' + install -m 444 -D ${appimageContents}/@openworkdesktop.desktop \ + $out/share/applications/openwork.desktop + substituteInPlace $out/share/applications/openwork.desktop \ + --replace-fail 'Exec=AppRun --no-sandbox %U' 'Exec=${pname} %U' \ + --replace-fail 'Icon=@openworkdesktop' 'Icon=${pname}' + install -m 444 -D ${appimageContents}/@openworkdesktop.png \ + $out/share/icons/hicolor/512x512/apps/${pname}.png + ''; + + passthru = { + updateScript = nix-update-script {}; + }; + + meta = { + description = "Open-source alternative to Claude Cowork powered by opencode"; + homepage = "https://github.com/different-ai/openwork"; + changelog = "https://github.com/different-ai/openwork/releases/tag/v${version}"; + license = with lib.licenses; [mit fsl11Mit]; + platforms = ["x86_64-linux" "aarch64-linux"]; + mainProgram = "openwork"; + }; + }