feat: update opencode to v1.1.60 and re-enable opencode-desktop
Some checks failed
Update Nix Packages with nix-update / nix-update (push) Failing after 1s

- Update opencode flake input to v1.1.60
- Add nixpkgs-master input for opencode (needs newer bun)
- Re-enable opencode-desktop with workaround for upstream issue #11755
- Add specta/tauri outputHashes for git dependencies
- Add .todos/ to gitignore
- Update AGENTS.md with td task management instructions
This commit is contained in:
m3tm3re
2026-02-12 19:42:11 +01:00
parent 909acf61d3
commit dc2f3b6802
7 changed files with 233 additions and 162 deletions

1
.gitignore vendored
View File

@@ -31,3 +31,4 @@ test-result/
# Local configuration (if you want to keep local overrides) # Local configuration (if you want to keep local overrides)
local.nix local.nix
flake.lock.bak flake.lock.bak
.todos/

View File

@@ -1,5 +1,10 @@
# m3ta-nixpkgs Knowledge Base # m3ta-nixpkgs Knowledge Base
## MANDATORY: Use td for Task Management
You must run td usage --new-session at conversation start (or after /clear) to see current work.
Use td usage -q for subsequent reads.
**Generated:** 2026-01-13 **Generated:** 2026-01-13
**Commit:** 366af12 **Commit:** 366af12
**Branch:** master **Branch:** master

View File

@@ -48,6 +48,7 @@ nix run git+https://code.m3ta.dev/m3tam3re/nixpkgs#zellij-ps
| `msty-studio` | Msty Studio application | | `msty-studio` | Msty Studio application |
| `n8n` | Free and source-available fair-code licensed workflow automation tool | | `n8n` | Free and source-available fair-code licensed workflow automation tool |
| `opencode` | AI coding agent built for the terminal | | `opencode` | AI coding agent built for the terminal |
| `opencode-desktop` | OpenCode Desktop App with Wayland support (includes workaround for upstream issue #11755) |
| `pomodoro-timer` | Pomodoro timer utility | | `pomodoro-timer` | Pomodoro timer utility |
| `rofi-project-opener` | Rofi-based project launcher | | `rofi-project-opener` | Rofi-based project launcher |
| `stt-ptt` | Push to Talk Speech to Text | | `stt-ptt` | Push to Talk Speech to Text |
@@ -76,8 +77,6 @@ Go to **Actions → Update Nix Packages with nix-update → Run workflow** in Gi
2. Token scopes needed: `user`, `repo`, `write:issue` 2. Token scopes needed: `user`, `repo`, `write:issue`
3. Add token as secret: Settings → Secrets → New → `NIX_UPDATE_TOKEN` 3. Add token as secret: Settings → Secrets → New → `NIX_UPDATE_TOKEN`
**Note:** The `opencode-desktop` package is currently disabled due to an upstream issue with missing specta dependency hashes. See [issue #11755](https://github.com/anomalyco/opencode/issues/11755) for details. This is a temporary workaround until the upstream issue is resolved.
For detailed usage, module documentation, package references, and contribution guidelines, see the [full documentation](./docs). For detailed usage, module documentation, package references, and contribution guidelines, see the [full documentation](./docs).
## License ## License

23
flake.lock generated
View File

@@ -16,37 +16,39 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_2": { "nixpkgs-master": {
"locked": { "locked": {
"lastModified": 1770073757, "lastModified": 1770917518,
"narHash": "sha256-Vy+G+F+3E/Tl+GMNgiHl9Pah2DgShmIUBJXmbiQPHbI=", "narHash": "sha256-XSwv/tVrNo/L8SPH8Lx9xZH1PrZd/3Z3J/0SH7Xertg=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "47472570b1e607482890801aeaf29bfb749884f6", "rev": "3f4a3c08f2f318ee29fc8a2689f390071a94aaf0",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixpkgs-unstable", "ref": "master",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"opencode": { "opencode": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_2" "nixpkgs": [
"nixpkgs-master"
]
}, },
"locked": { "locked": {
"lastModified": 1770817534, "lastModified": 1770875904,
"narHash": "sha256-AcLT70Gjt78nDd13ACUDavE+QI+ouEBwyZq8hIDDAf8=", "narHash": "sha256-8ZEVlGe1saA/2KtDTKgkwWfpLCbxfwFip+m+3FlQQK0=",
"owner": "anomalyco", "owner": "anomalyco",
"repo": "opencode", "repo": "opencode",
"rev": "edcfd562af6ea5fdc1ade9f46259a676d7663801", "rev": "03de51bd3cf9e05bd92c9f51763b74a3cdfbe61a",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "anomalyco", "owner": "anomalyco",
"ref": "v1.1.57", "ref": "v1.1.60",
"repo": "opencode", "repo": "opencode",
"type": "github" "type": "github"
} }
@@ -54,6 +56,7 @@
"root": { "root": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"nixpkgs-master": "nixpkgs-master",
"opencode": "opencode" "opencode": "opencode"
} }
} }

View File

@@ -1,26 +1,23 @@
{ {
description = "m3ta's personal Nix repository - Custom packages, overlays, and modules"; description =
"m3ta's personal Nix repository - Custom packages, overlays, and modules";
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
opencode.url = "github:anomalyco/opencode/v1.1.59"; nixpkgs-master.url = "github:NixOS/nixpkgs/master";
# Optional: Add stable channel if needed # opencode needs newer bun from master
# nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-24.05"; opencode = {
url = "github:anomalyco/opencode/v1.1.60";
inputs.nixpkgs.follows = "nixpkgs-master";
};
}; };
outputs = { outputs = { self, nixpkgs, ... }@inputs:
self, let
nixpkgs,
...
} @ inputs: let
# Supported systems # Supported systems
systems = [ systems =
"x86_64-linux" [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
# Helper function to generate an attrset for each of the systems # Helper function to generate an attrset for each of the systems
forAllSystems = nixpkgs.lib.genAttrs systems; forAllSystems = nixpkgs.lib.genAttrs systems;
@@ -33,12 +30,9 @@
}; };
in { in {
# Custom packages - accessible via 'nix build .#package-name' # Custom packages - accessible via 'nix build .#package-name'
packages = forAllSystems ( packages = forAllSystems (system:
system: let let pkgs = pkgsFor system;
pkgs = pkgsFor system; in import ./pkgs { inherit pkgs inputs; });
in
import ./pkgs {inherit pkgs inputs;}
);
# Overlays - can be imported in your system configuration # Overlays - can be imported in your system configuration
overlays = { overlays = {
@@ -56,8 +50,7 @@
inputs = inputs; inputs = inputs;
}; };
modifications = final: prev: modifications = final: prev: import ./overlays/mods { inherit prev; };
import ./overlays/mods {inherit prev;};
}; };
# NixOS modules - for system-level configuration # NixOS modules - for system-level configuration
@@ -76,28 +69,19 @@
}; };
# Library functions - helper utilities for your configuration # Library functions - helper utilities for your configuration
lib = forAllSystems ( lib = forAllSystems (system:
system: let let pkgs = pkgsFor system;
pkgs = pkgsFor system; in import ./lib { lib = pkgs.lib; });
in
import ./lib {lib = pkgs.lib;}
);
# Development shells for various programming environments # Development shells for various programming environments
# Usage: nix develop .#<shell-name> # Usage: nix develop .#<shell-name>
# Available shells: default, python, devops # Available shells: default, python, devops
devShells = forAllSystems ( devShells = forAllSystems (system:
system: let let pkgs = pkgsFor system;
pkgs = pkgsFor system; in import ./shells { inherit pkgs; });
in
import ./shells {inherit pkgs;}
);
# Formatter for 'nix fmt' # Formatter for 'nix fmt'
formatter = forAllSystems ( formatter = forAllSystems (system: (pkgsFor system).alejandra);
system:
(pkgsFor system).alejandra
);
# Templates for creating new packages/modules # Templates for creating new packages/modules
templates = { templates = {

View File

@@ -1,26 +1,22 @@
{ { pkgs, inputs ? null, ... }: {
pkgs,
inputs ? null,
...
}: {
# Custom packages registry # Custom packages registry
# Each package is defined in its own directory under pkgs/ # Each package is defined in its own directory under pkgs/
beads = pkgs.callPackage ./beads {}; beads = pkgs.callPackage ./beads { };
sidecar = pkgs.callPackage ./sidecar {}; sidecar = pkgs.callPackage ./sidecar { };
td = pkgs.callPackage ./td {}; td = pkgs.callPackage ./td { };
code2prompt = pkgs.callPackage ./code2prompt {}; code2prompt = pkgs.callPackage ./code2prompt { };
hyprpaper-random = pkgs.callPackage ./hyprpaper-random {}; hyprpaper-random = pkgs.callPackage ./hyprpaper-random { };
launch-webapp = pkgs.callPackage ./launch-webapp {}; launch-webapp = pkgs.callPackage ./launch-webapp { };
mem0 = pkgs.callPackage ./mem0 {}; mem0 = pkgs.callPackage ./mem0 { };
msty-studio = pkgs.callPackage ./msty-studio {}; msty-studio = pkgs.callPackage ./msty-studio { };
n8n = pkgs.callPackage ./n8n {}; n8n = pkgs.callPackage ./n8n { };
pomodoro-timer = pkgs.callPackage ./pomodoro-timer {}; pomodoro-timer = pkgs.callPackage ./pomodoro-timer { };
rofi-project-opener = pkgs.callPackage ./rofi-project-opener {}; rofi-project-opener = pkgs.callPackage ./rofi-project-opener { };
stt-ptt = pkgs.callPackage ./stt-ptt {}; stt-ptt = pkgs.callPackage ./stt-ptt { };
tuxedo-backlight = pkgs.callPackage ./tuxedo-backlight {}; tuxedo-backlight = pkgs.callPackage ./tuxedo-backlight { };
zellij-ps = pkgs.callPackage ./zellij-ps {}; zellij-ps = pkgs.callPackage ./zellij-ps { };
# Imported from flake inputs # Imported from flake inputs
opencode = inputs.opencode.packages.${pkgs.system}.opencode; opencode = inputs.opencode.packages.${pkgs.system}.opencode;
# opencode-desktop = pkgs.callPackage ./opencode-desktop { inherit inputs; }; opencode-desktop = pkgs.callPackage ./opencode-desktop { inherit inputs; };
} }

View File

@@ -1,12 +1,95 @@
{ lib, stdenv, symlinkJoin, makeWrapper, inputs ? null, }: {
let lib,
opencode-desktop = stdenv,
inputs.opencode.packages.${stdenv.hostPlatform.system}.desktop; symlinkJoin,
in symlinkJoin { makeWrapper,
name = "opencode-desktop"; rustPlatform,
paths = [ opencode-desktop ]; pkg-config,
cargo-tauri,
bun,
nodejs,
cargo,
rustc,
jq,
wrapGAppsHook4,
dbus,
glib,
gtk4,
libsoup_3,
librsvg,
libappindicator,
glib-networking,
openssl,
webkitgtk_4_1,
gst_all_1,
inputs ? null,
}: let
# Get upstream opencode package for shared attributes
opencode = inputs.opencode.packages.${stdenv.hostPlatform.system}.default;
nativeBuildInputs = [ makeWrapper ]; # Workaround for https://github.com/anomalyco/opencode/issues/11755
# Upstream is missing outputHashes for git dependencies
opencode-desktop = rustPlatform.buildRustPackage (finalAttrs: {
pname = "opencode-desktop";
inherit (opencode) version src node_modules patches;
cargoRoot = "packages/desktop/src-tauri";
cargoLock = {
lockFile = finalAttrs.src + "/packages/desktop/src-tauri/Cargo.lock";
outputHashes = {
"specta-2.0.0-rc.22" = "sha256-YsyOAnXELLKzhNlJ35dHA6KGbs0wTAX/nlQoW8wWyJQ=";
"tauri-2.9.5" = "sha256-dv5E/+A49ZBvnUQUkCGGJ21iHrVvrhHKNcpUctivJ8M=";
"tauri-specta-2.0.0-rc.21" = "sha256-n2VJ+B1nVrh6zQoZyfMoctqP+Csh7eVHRXwUQuiQjaQ=";
};
};
buildAndTestSubdir = finalAttrs.cargoRoot;
nativeBuildInputs =
[pkg-config cargo-tauri.hook bun nodejs cargo rustc jq makeWrapper]
++ lib.optionals stdenv.hostPlatform.isLinux [wrapGAppsHook4];
buildInputs = lib.optionals stdenv.isLinux [
dbus
glib
gtk4
libsoup_3
librsvg
libappindicator
glib-networking
openssl
webkitgtk_4_1
gst_all_1.gstreamer
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-good
gst_all_1.gst-plugins-bad
];
strictDeps = true;
preBuild = ''
cp -a ${finalAttrs.node_modules}/{node_modules,packages} .
chmod -R u+w node_modules packages
patchShebangs node_modules
patchShebangs packages/desktop/node_modules
mkdir -p packages/desktop/src-tauri/sidecars
cp ${opencode}/bin/opencode packages/desktop/src-tauri/sidecars/opencode-cli-${stdenv.hostPlatform.rust.rustcTarget}
'';
tauriBuildFlags = ["--config" "tauri.prod.conf.json" "--no-sign"];
postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
mv $out/bin/OpenCode $out/bin/opencode-desktop
sed -i 's|^Exec=OpenCode$|Exec=opencode-desktop|' $out/share/applications/OpenCode.desktop
'';
});
# Wrapper for Wayland support
in
symlinkJoin {
name = "opencode-desktop";
paths = [opencode-desktop];
nativeBuildInputs = [makeWrapper];
postBuild = '' postBuild = ''
wrapProgram $out/bin/opencode-desktop \ wrapProgram $out/bin/opencode-desktop \
@@ -20,4 +103,4 @@ in symlinkJoin {
platforms = lib.platforms.linux; platforms = lib.platforms.linux;
mainProgram = "opencode-desktop"; mainProgram = "opencode-desktop";
}; };
} }