flake.nix 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. {
  2. description = "QMD - Quick Markdown Search";
  3. inputs = {
  4. nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
  5. flake-utils.url = "github:numtide/flake-utils";
  6. };
  7. outputs = { self, nixpkgs, flake-utils }:
  8. flake-utils.lib.eachDefaultSystem (system:
  9. let
  10. pkgs = nixpkgs.legacyPackages.${system};
  11. # SQLite with loadable extension support for sqlite-vec
  12. sqliteWithExtensions = pkgs.sqlite.overrideAttrs (old: {
  13. configureFlags = (old.configureFlags or []) ++ [
  14. "--enable-load-extension"
  15. ];
  16. });
  17. qmd = pkgs.stdenv.mkDerivation {
  18. pname = "qmd";
  19. version = "1.0.0";
  20. src = ./.;
  21. nativeBuildInputs = [
  22. pkgs.bun
  23. pkgs.makeWrapper
  24. pkgs.python3 # needed by node-gyp to compile better-sqlite3
  25. ] ++ pkgs.lib.optionals pkgs.stdenv.hostPlatform.isDarwin [
  26. pkgs.darwin.cctools # provides libtool needed by node-gyp on macOS
  27. ];
  28. buildInputs = [ pkgs.sqlite ];
  29. buildPhase = ''
  30. export HOME=$(mktemp -d)
  31. bun install --frozen-lockfile
  32. '';
  33. installPhase = ''
  34. mkdir -p $out/lib/qmd
  35. mkdir -p $out/bin
  36. cp -r node_modules $out/lib/qmd/
  37. cp -r src $out/lib/qmd/
  38. cp package.json $out/lib/qmd/
  39. makeWrapper ${pkgs.bun}/bin/bun $out/bin/qmd \
  40. --add-flags "$out/lib/qmd/src/qmd.ts" \
  41. --set DYLD_LIBRARY_PATH "${pkgs.sqlite.out}/lib" \
  42. --set LD_LIBRARY_PATH "${pkgs.sqlite.out}/lib"
  43. '';
  44. meta = with pkgs.lib; {
  45. description = "On-device search engine for markdown notes, meeting transcripts, and knowledge bases";
  46. homepage = "https://github.com/tobi/qmd";
  47. license = licenses.mit;
  48. platforms = platforms.unix;
  49. };
  50. };
  51. in
  52. {
  53. packages = {
  54. default = qmd;
  55. qmd = qmd;
  56. };
  57. apps.default = {
  58. type = "app";
  59. program = "${qmd}/bin/qmd";
  60. };
  61. devShells.default = pkgs.mkShell {
  62. buildInputs = [
  63. pkgs.bun
  64. sqliteWithExtensions
  65. ];
  66. shellHook = ''
  67. export BREW_PREFIX="''${BREW_PREFIX:-${sqliteWithExtensions.out}}"
  68. echo "QMD development shell"
  69. echo "Run: bun src/qmd.ts <command>"
  70. '';
  71. };
  72. }
  73. );
  74. }