flake.nix 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. inherit (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. mkOpencode = pkgs.callPackage ./nix/opencode.nix { };
  67. mkDesktop = pkgs.callPackage ./nix/desktop.nix { };
  68. opencodePkg = mkOpencode {
  69. inherit (packageJson) version;
  70. src = ./.;
  71. scripts = ./nix/scripts;
  72. target = bunTarget.${system};
  73. modelsDev = "${modelsDev.${system}}/dist/_api.json";
  74. inherit mkNodeModules;
  75. };
  76. desktopPkg = mkDesktop {
  77. inherit (packageJson) version;
  78. src = ./.;
  79. scripts = ./nix/scripts;
  80. mkNodeModules = mkNodeModules;
  81. opencode = opencodePkg;
  82. };
  83. in
  84. {
  85. default = opencodePkg;
  86. desktop = desktopPkg;
  87. }
  88. );
  89. apps = forEachSystem (
  90. system:
  91. let
  92. pkgs = pkgsFor system;
  93. in
  94. {
  95. opencode-dev = {
  96. type = "app";
  97. meta = {
  98. description = "Nix devshell shell for OpenCode";
  99. runtimeInputs = [ pkgs.bun ];
  100. };
  101. program = "${
  102. pkgs.writeShellApplication {
  103. name = "opencode-dev";
  104. text = ''
  105. exec bun run dev "$@"
  106. '';
  107. }
  108. }/bin/opencode-dev";
  109. };
  110. }
  111. );
  112. };
  113. }