flake.nix 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. {
  2. description = "OpenCode development flake";
  3. inputs = {
  4. nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
  5. };
  6. outputs =
  7. {
  8. nixpkgs,
  9. ...
  10. }:
  11. let
  12. systems = [
  13. "aarch64-linux"
  14. "x86_64-linux"
  15. "aarch64-darwin"
  16. "x86_64-darwin"
  17. ];
  18. lib = nixpkgs.lib;
  19. forEachSystem = lib.genAttrs systems;
  20. pkgsFor = system: nixpkgs.legacyPackages.${system};
  21. packageJson = builtins.fromJSON (builtins.readFile ./packages/opencode/package.json);
  22. bunTarget = {
  23. "aarch64-linux" = "bun-linux-arm64";
  24. "x86_64-linux" = "bun-linux-x64";
  25. "aarch64-darwin" = "bun-darwin-arm64";
  26. "x86_64-darwin" = "bun-darwin-x64";
  27. };
  28. defaultNodeModules = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
  29. hashesFile = "${./nix}/hashes.json";
  30. hashesData =
  31. if builtins.pathExists hashesFile then builtins.fromJSON (builtins.readFile hashesFile) else { };
  32. nodeModulesHash = hashesData.nodeModules or defaultNodeModules;
  33. modelsDev = forEachSystem (
  34. system:
  35. let
  36. pkgs = pkgsFor system;
  37. in
  38. pkgs."models-dev"
  39. );
  40. in
  41. {
  42. devShells = forEachSystem (
  43. system:
  44. let
  45. pkgs = pkgsFor system;
  46. in
  47. {
  48. default = pkgs.mkShell {
  49. packages = with pkgs; [
  50. bun
  51. nodejs_20
  52. pkg-config
  53. openssl
  54. git
  55. ];
  56. };
  57. }
  58. );
  59. packages = forEachSystem (
  60. system:
  61. let
  62. pkgs = pkgsFor system;
  63. mkNodeModules = pkgs.callPackage ./nix/node-modules.nix {
  64. hash = nodeModulesHash;
  65. };
  66. mkPackage = pkgs.callPackage ./nix/opencode.nix { };
  67. in
  68. {
  69. default = mkPackage {
  70. version = packageJson.version;
  71. src = ./.;
  72. scripts = ./nix/scripts;
  73. target = bunTarget.${system};
  74. modelsDev = "${modelsDev.${system}}/dist/_api.json";
  75. mkNodeModules = mkNodeModules;
  76. };
  77. }
  78. );
  79. apps = forEachSystem (
  80. system:
  81. let
  82. pkgs = pkgsFor system;
  83. in
  84. {
  85. opencode-dev = {
  86. type = "app";
  87. meta = {
  88. description = "Nix devshell shell for OpenCode";
  89. runtimeInputs = [ pkgs.bun ];
  90. };
  91. program = "${
  92. pkgs.writeShellApplication {
  93. name = "opencode-dev";
  94. text = ''
  95. exec bun run dev "$@"
  96. '';
  97. }
  98. }/bin/opencode-dev";
  99. };
  100. }
  101. );
  102. };
  103. }