From ead872133f9a6d58f03a6db246b07def89a38653 Mon Sep 17 00:00:00 2001 From: Hauke Schnau Date: Mon, 19 Jan 2026 21:36:45 +0100 Subject: [PATCH 1/2] chore: add nix flake build support --- flake.lock | 61 +++++++++++++++++++++++++++++++++++ flake.nix | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/flake.lock b/flake.lock new file mode 100644 index 000000000..922242037 --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1768783163, + "narHash": "sha256-tLj4KcRDLakrlpvboTJDKsrp6z2XLwyQ4Zmo+w8KsY4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bde09022887110deb780067364a0818e89258968", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 000000000..8dfd43033 --- /dev/null +++ b/flake.nix @@ -0,0 +1,95 @@ +{ + description = "CodexMonitor development environment"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { inherit system; }; + packageJson = builtins.fromJSON (builtins.readFile ./package.json); + + linuxPackages = pkgs.lib.optionals pkgs.stdenv.isLinux [ + pkgs.gtk3 + pkgs.libxkbcommon + pkgs.librsvg + pkgs.libsoup_3 + pkgs.webkitgtk_4_1 + ]; + + frontend = pkgs.buildNpmPackage { + pname = "codex-monitor-frontend"; + version = packageJson.version; + src = ./.; + nodejs = pkgs.nodejs_20; + npmDepsHash = "sha256-TT9Po/VVzuObcqAkv4HoRSo41IMvouorlPnPTabxcTA="; + npmBuildScript = "build"; + installPhase = '' + mkdir -p $out + cp -R dist $out/ + ''; + }; + + appPackage = pkgs.rustPlatform.buildRustPackage { + pname = "codex-monitor"; + version = packageJson.version; + src = ./src-tauri; + + cargoLock = { + lockFile = ./src-tauri/Cargo.lock; + outputHashes = { + "fix-path-env-0.0.0" = "sha256-UygkxJZoiJlsgp8PLf1zaSVsJZx1GGdQyTXqaFv3oGk="; + }; + }; + + nativeBuildInputs = [ + pkgs.cargo-tauri + pkgs.cmake + pkgs.pkg-config + ]; + + buildInputs = [ + pkgs.openssl + ] ++ linuxPackages; + + preBuild = '' + mkdir -p ../dist + cp -R ${frontend}/dist/. ../dist + ''; + + installPhase = '' + mkdir -p $out/bin + target_dir="target/${pkgs.stdenv.hostPlatform.rust.rustcTarget}" + cp "$target_dir/release/codex-monitor" $out/bin/ + ''; + }; + in + { + devShells.default = pkgs.mkShell { + packages = [ + pkgs.cargo + pkgs.clang + pkgs.cmake + pkgs.git + pkgs.nodejs_20 + pkgs.openssl + pkgs.pkg-config + pkgs.rust-analyzer + pkgs.rustc + pkgs.rustfmt + pkgs.rustPlatform.rustLibSrc + ] ++ linuxPackages; + + shellHook = '' + export RUST_SRC_PATH=${pkgs.rustPlatform.rustLibSrc} + ''; + }; + + formatter = pkgs.alejandra; + + packages.default = appPackage; + }); +} From 8da06920be4943cbd9450d04dd47c00d3cd19104 Mon Sep 17 00:00:00 2001 From: Hauke Schnau Date: Mon, 19 Jan 2026 22:17:57 +0100 Subject: [PATCH 2/2] fix: embed frontend assets in nix build --- flake.nix | 20 +++++++++++++++++--- src-tauri/Cargo.toml | 3 +++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/flake.nix b/flake.nix index 8dfd43033..2d51f933e 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "CodexMonitor development environment"; + description = "CodexMonitor Tauri app for orchestrating Codex agents"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; @@ -33,6 +33,13 @@ ''; }; + tauriConfig = builtins.toJSON { + build = { + frontendDist = "dist"; + devUrl = null; + }; + }; + appPackage = pkgs.rustPlatform.buildRustPackage { pname = "codex-monitor"; version = packageJson.version; @@ -55,11 +62,18 @@ pkgs.openssl ] ++ linuxPackages; + TAURI_CONFIG = tauriConfig; + preBuild = '' - mkdir -p ../dist - cp -R ${frontend}/dist/. ../dist + mkdir -p dist + cp -R ${frontend}/dist/. dist ''; + cargoBuildFlags = [ + "--features" + "custom-protocol" + ]; + installPhase = '' mkdir -p $out/bin target_dir="target/${pkgs.stdenv.hostPlatform.rust.rustcTarget}" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 9ff5aeb3b..e5f9e0eca 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -8,6 +8,9 @@ default-run = "codex-monitor" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[features] +custom-protocol = ["tauri/custom-protocol"] + [lib] # The `_lib` suffix may seem redundant but it is necessary # to make the lib name unique and wouldn't conflict with the bin name.