about summary refs log tree commit diff
path: root/pkgs/by-name/me
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/me')
-rw-r--r--pkgs/by-name/me/mealie/mealie-frontend.nix2
-rw-r--r--pkgs/by-name/me/mealie/mealie-logs-to-stdout.patch103
-rw-r--r--pkgs/by-name/me/mealie/package.nix49
-rw-r--r--pkgs/by-name/me/media-downloader/package.nix67
-rw-r--r--pkgs/by-name/me/mediainfo-gui/package.nix4
-rw-r--r--pkgs/by-name/me/mediainfo/package.nix4
-rw-r--r--pkgs/by-name/me/mediasynclite/package.nix54
-rw-r--r--pkgs/by-name/me/mednafen/package.nix6
-rw-r--r--pkgs/by-name/me/megapixels/package.nix4
-rw-r--r--pkgs/by-name/me/meletrix-udev-rules/meletrix.rules26
-rw-r--r--pkgs/by-name/me/meletrix-udev-rules/package.nix24
-rw-r--r--pkgs/by-name/me/meli/package.nix8
-rw-r--r--pkgs/by-name/me/melonDS/package.nix6
-rw-r--r--pkgs/by-name/me/memorado/package.nix51
-rw-r--r--pkgs/by-name/me/menulibre/package.nix4
-rw-r--r--pkgs/by-name/me/mercure/package.nix8
-rw-r--r--pkgs/by-name/me/mermaid-cli/package.nix6
-rw-r--r--pkgs/by-name/me/meson/007-Allow-building-via-ninja-12.patch190
-rw-r--r--pkgs/by-name/me/meson/007-freebsd-pkgconfig-path.patch15
-rw-r--r--pkgs/by-name/me/meson/package.nix23
-rw-r--r--pkgs/by-name/me/meson/setup-hook.sh2
-rw-r--r--pkgs/by-name/me/metacubexd/package.nix55
22 files changed, 541 insertions, 170 deletions
diff --git a/pkgs/by-name/me/mealie/mealie-frontend.nix b/pkgs/by-name/me/mealie/mealie-frontend.nix
index a98d22761e71e..477dcd993abcf 100644
--- a/pkgs/by-name/me/mealie/mealie-frontend.nix
+++ b/pkgs/by-name/me/mealie/mealie-frontend.nix
@@ -6,7 +6,7 @@ src: version:
 
   yarnOfflineCache = fetchYarnDeps {
     yarnLock = "${src}/frontend/yarn.lock";
-    hash = "sha256-zQUD/PQWzp2Q6fiVmLicvSusXffu6s9q3x/aAUnCN38=";
+    hash = "sha256-a2kIOQHaMzaMWId6+SSYN+SPQM2Ipa+F1ztFZgo3R6A=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/by-name/me/mealie/mealie-logs-to-stdout.patch b/pkgs/by-name/me/mealie/mealie-logs-to-stdout.patch
deleted file mode 100644
index 521c5cebcf74d..0000000000000
--- a/pkgs/by-name/me/mealie/mealie-logs-to-stdout.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-diff --git a/mealie/core/root_logger.py b/mealie/core/root_logger.py
-index 29db504f..3da5ef84 100644
---- a/mealie/core/root_logger.py
-+++ b/mealie/core/root_logger.py
-@@ -9,7 +9,6 @@ DATA_DIR = determine_data_dir()
- 
- from .config import get_app_settings  # noqa E402
- 
--LOGGER_FILE = DATA_DIR.joinpath("mealie.log")
- DATE_FORMAT = "%d-%b-%y %H:%M:%S"
- LOGGER_FORMAT = "%(levelname)s: %(asctime)s \t%(message)s"
- 
-@@ -40,19 +39,17 @@ def get_logger_config():
-             level=log_level,
-         )
- 
--    output_file_handler = logging.FileHandler(LOGGER_FILE)
-     handler_format = logging.Formatter(LOGGER_FORMAT, datefmt=DATE_FORMAT)
--    output_file_handler.setFormatter(handler_format)
- 
-     # Stdout
-     stdout_handler = logging.StreamHandler(sys.stdout)
-     stdout_handler.setFormatter(handler_format)
- 
-     return LoggerConfig(
--        handlers=[output_file_handler, stdout_handler],
-+        handlers=[stdout_handler],
-         format="%(levelname)s: %(asctime)s \t%(message)s",
-         date_format="%d-%b-%y %H:%M:%S",
--        logger_file=LOGGER_FILE,
-+        logger_file=None,
-         level=log_level,
-     )
- 
-diff --git a/mealie/routes/admin/admin_log.py b/mealie/routes/admin/admin_log.py
-index ac12c12e..0de98b99 100644
---- a/mealie/routes/admin/admin_log.py
-+++ b/mealie/routes/admin/admin_log.py
-@@ -1,6 +1,5 @@
- from fastapi import APIRouter
- 
--from mealie.core.root_logger import LOGGER_FILE
- from mealie.core.security import create_file_token
- 
- router = APIRouter(prefix="/logs")
-@@ -9,15 +8,13 @@ router = APIRouter(prefix="/logs")
- @router.get("/{num}")
- async def get_log(num: int):
-     """Doc Str"""
--    with open(LOGGER_FILE, "rb") as f:
--        log_text = tail(f, num)
--    return log_text
-+    return ""
- 
- 
- @router.get("")
- async def get_log_file():
-     """Returns a token to download a file"""
--    return {"fileToken": create_file_token(LOGGER_FILE)}
-+    return {"fileToken": create_file_token("nofile")}
- 
- 
- def tail(f, lines=20):
-diff --git a/mealie/routes/admin/admin_maintenance.py b/mealie/routes/admin/admin_maintenance.py
-index 23ef8369..322b580f 100644
---- a/mealie/routes/admin/admin_maintenance.py
-+++ b/mealie/routes/admin/admin_maintenance.py
-@@ -6,7 +6,6 @@ from pathlib import Path
- 
- from fastapi import APIRouter, HTTPException
- 
--from mealie.core.root_logger import LOGGER_FILE
- from mealie.pkgs.stats import fs_stats
- from mealie.routes._base import BaseAdminController, controller
- from mealie.schema.admin import MaintenanceSummary
-@@ -73,8 +72,6 @@ class AdminMaintenanceController(BaseAdminController):
-         Get the maintenance summary
-         """
-         log_file_size = 0
--        with contextlib.suppress(FileNotFoundError):
--            log_file_size = os.path.getsize(LOGGER_FILE)
- 
-         return MaintenanceSummary(
-             data_dir_size=fs_stats.pretty_size(fs_stats.get_dir_size(self.folders.DATA_DIR)),
-@@ -85,7 +82,7 @@ class AdminMaintenanceController(BaseAdminController):
- 
-     @router.get("/logs", response_model=MaintenanceLogs)
-     def get_logs(self, lines: int = 200):
--        return MaintenanceLogs(logs=tail_log(LOGGER_FILE, lines))
-+        return MaintenanceLogs(logs="")
- 
-     @router.get("/storage", response_model=MaintenanceStorageDetails)
-     def get_storage_details(self):
-@@ -137,9 +134,6 @@ class AdminMaintenanceController(BaseAdminController):
-         Purges the logs
-         """
-         try:
--            with contextlib.suppress(FileNotFoundError):
--                os.remove(LOGGER_FILE)
--                LOGGER_FILE.touch()
-             return SuccessResponse.respond("Logs cleaned")
-         except Exception as e:
-             raise HTTPException(status_code=500, detail=ErrorResponse.respond("Failed to clean logs")) from e
diff --git a/pkgs/by-name/me/mealie/package.nix b/pkgs/by-name/me/mealie/package.nix
index 2d1512f67ebcb..f93d6de6fb764 100644
--- a/pkgs/by-name/me/mealie/package.nix
+++ b/pkgs/by-name/me/mealie/package.nix
@@ -1,7 +1,6 @@
 { lib
 , callPackage
 , fetchFromGitHub
-, fetchpatch
 , makeWrapper
 , nixosTests
 , python3Packages
@@ -10,21 +9,17 @@
 }:
 
 let
-  version = "1.2.0";
+  version = "1.9.0";
   src = fetchFromGitHub {
     owner = "mealie-recipes";
     repo = "mealie";
     rev = "v${version}";
-    sha256 = "sha256-Kc49XDWcZLeJaYgiAO2/mHeVSOLMeiPr3U32e0IYfdU=";
+    hash = "sha256-gg7ClclBS9j9n4/3HLxbX8HXTz9Zw5+BYG2MEYRsRBU=";
   };
 
   frontend = callPackage (import ./mealie-frontend.nix src version) { };
 
-  pythonpkgs = python3Packages.override {
-    overrides = self: super: {
-      pydantic = python3Packages.pydantic_1;
-    };
-  };
+  pythonpkgs = python3Packages;
   python = pythonpkgs.python;
 
   crfpp = stdenv.mkDerivation {
@@ -37,37 +32,13 @@ let
       hash = "sha256-XNps3ZApU8m07bfPEnvip1w+3hLajdn9+L5+IpEaP0c=";
     };
   };
-
-  mealie_patch = { name, commit, hash }: fetchpatch {
-    inherit name hash;
-    url = "https://github.com/mealie-recipes/mealie/commit/${commit}.patch";
-  };
-
 in pythonpkgs.buildPythonPackage rec {
   pname = "mealie";
   inherit version src;
   pyproject = true;
 
-  patches = [
-    # See https://github.com/mealie-recipes/mealie/pull/3102
-    # Replace hardcoded paths in code with environment variables (meant for inside Docker only)
-    # So we can configure easily where the data is stored on the server
-    (mealie_patch {
-      name = "model-path.patch";
-      commit = "e445705c5d26b895d806b96b2f330d4e9aac3723";
-      hash = "sha256-cf0MwvT81lNBTjvag8UUEbXkBu8Jyi/LFwUcs4lBVcY=";
-    })
-    (mealie_patch {
-      name = "alembic-cfg-path.patch";
-      commit = "06c528bfac0708af66aa0629f2e2232ddf07768f";
-      hash = "sha256-IOgdZK7dmWeX2ox16J9v+bOS7nHgCMvCJy6RNJLj0p8=";
-    })
-    ./mealie-logs-to-stdout.patch
-  ];
-
   nativeBuildInputs = [
     pythonpkgs.poetry-core
-    pythonpkgs.pythonRelaxDepsHook
     makeWrapper
   ];
 
@@ -82,6 +53,7 @@ in pythonpkgs.buildPythonPackage rec {
     aniso8601
     appdirs
     apprise
+    authlib
     bcrypt
     extruct
     fastapi
@@ -90,15 +62,16 @@ in pythonpkgs.buildPythonPackage rec {
     httpx
     jinja2
     lxml
+    openai
     orjson
     paho-mqtt
-    passlib
     pillow
+    pillow-heif
     psycopg2
+    pydantic-settings
     pyhumps
-    pytesseract
+    pyjwt
     python-dotenv
-    python-jose
     python-ldap
     python-multipart
     python-slugify
@@ -112,7 +85,7 @@ in pythonpkgs.buildPythonPackage rec {
 
   postPatch = ''
     substituteInPlace mealie/__init__.py \
-      --replace-fail '__version__ = ' '__version__ = "${version}" #'
+      --replace-fail '__version__ = ' '__version__ = "v${version}" #'
   '';
 
   postInstall = let
@@ -150,7 +123,7 @@ in pythonpkgs.buildPythonPackage rec {
   };
 
   meta = with lib; {
-    description = "A self hosted recipe manager and meal planner";
+    description = "Self hosted recipe manager and meal planner";
     longDescription = ''
       Mealie is a self hosted recipe manager and meal planner with a REST API and a reactive frontend
       application built in NuxtJS for a pleasant user experience for the whole family. Easily add recipes into your
@@ -160,7 +133,7 @@ in pythonpkgs.buildPythonPackage rec {
     homepage = "https://mealie.io";
     changelog = "https://github.com/mealie-recipes/mealie/releases/tag/${src.rev}";
     license = licenses.agpl3Only;
-    maintainers = with maintainers; [ litchipi ];
+    maintainers = with maintainers; [ litchipi anoa ];
     mainProgram = "mealie";
   };
 }
diff --git a/pkgs/by-name/me/media-downloader/package.nix b/pkgs/by-name/me/media-downloader/package.nix
new file mode 100644
index 0000000000000..8053f6a93adaf
--- /dev/null
+++ b/pkgs/by-name/me/media-downloader/package.nix
@@ -0,0 +1,67 @@
+{
+  aria2,
+  cmake,
+  # https://github.com/mhogomchungu/media-downloader?tab=readme-ov-file#extensions
+  extraPackages ? [
+    aria2
+    yt-dlp
+    ffmpeg
+    python3
+  ],
+  fetchFromGitHub,
+  ffmpeg,
+  lib,
+  libsForQt5,
+  python3,
+  stdenv,
+  yt-dlp,
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "media-downloader";
+  version = "4.7.0";
+
+  src = fetchFromGitHub {
+    owner = "mhogomchungu";
+    repo = "media-downloader";
+    rev = finalAttrs.version;
+    hash = "sha256-ykPYxRgzKZrA0KwS1FoxZOkSL+7TbLgy0yLfs7Iqpf4=";
+  };
+
+  # Disable automatically updating extensions when starting the program because this will
+  # invalidate the dependence on extensions and may cause potential security issues
+  # Can still be enabled in Configure > Actions At Startup
+  postPatch = ''
+    substituteInPlace src/settings.cpp \
+      --replace-fail '"ShowVersionInfoAndAutoDownloadUpdates",true' '"ShowVersionInfoAndAutoDownloadUpdates",false' \
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    libsForQt5.wrapQtAppsHook
+  ];
+
+  buildInputs = [ libsForQt5.qtbase ];
+
+  qtWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath extraPackages}" ];
+
+  meta = {
+    description = "Qt/C++ GUI front end for yt-dlp and others";
+    longDescription = ''
+      Media Downloader is a GUI front end to yt-dlp, youtube-dl, gallery-dl,
+      lux, you-get, svtplay-dl, aria2c, wget and safari books.
+
+      Read https://github.com/mhogomchungu/media-downloader/wiki/Extensions
+      for further information. We have packaged most of them, and they can
+      be added by overriding `extraPackages`.
+    '';
+    homepage = "https://github.com/mhogomchungu/media-downloader";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [
+      zendo
+      aleksana
+    ];
+    platforms = lib.platforms.linux;
+    mainProgram = "media-downloader";
+  };
+})
diff --git a/pkgs/by-name/me/mediainfo-gui/package.nix b/pkgs/by-name/me/mediainfo-gui/package.nix
index a321db523179e..7016a9a6cc4c9 100644
--- a/pkgs/by-name/me/mediainfo-gui/package.nix
+++ b/pkgs/by-name/me/mediainfo-gui/package.nix
@@ -6,11 +6,11 @@ let
 in
 stdenv.mkDerivation rec {
   pname = "mediainfo-gui";
-  version = "24.03";
+  version = "24.04";
 
   src = fetchurl {
     url = "https://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.xz";
-    hash = "sha256-b/jx+i+FmhMJH3Wiz5E0hmRPbiWa0cJa+5qT5IRExWM=";
+    hash = "sha256-6+sctwGiMFnHNsszuRoxcsT5jnNB5EoLMKEZGRkaJ00=";
   };
 
   nativeBuildInputs = [ autoreconfHook pkg-config ];
diff --git a/pkgs/by-name/me/mediainfo/package.nix b/pkgs/by-name/me/mediainfo/package.nix
index 4fcaf4636d42a..581b37dcde307 100644
--- a/pkgs/by-name/me/mediainfo/package.nix
+++ b/pkgs/by-name/me/mediainfo/package.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "mediainfo";
-  version = "24.03";
+  version = "24.04";
 
   src = fetchurl {
     url = "https://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.xz";
-    hash = "sha256-b/jx+i+FmhMJH3Wiz5E0hmRPbiWa0cJa+5qT5IRExWM=";
+    hash = "sha256-6+sctwGiMFnHNsszuRoxcsT5jnNB5EoLMKEZGRkaJ00=";
   };
 
   nativeBuildInputs = [ autoreconfHook pkg-config ];
diff --git a/pkgs/by-name/me/mediasynclite/package.nix b/pkgs/by-name/me/mediasynclite/package.nix
new file mode 100644
index 0000000000000..869142da9acc8
--- /dev/null
+++ b/pkgs/by-name/me/mediasynclite/package.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gtk3
+, glib
+, gsettings-desktop-schemas
+, pkg-config
+, curl
+, openssl
+, jansson
+, wrapGAppsHook3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mediasynclite";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "iBroadcastMediaServices";
+    repo = "MediaSyncLiteLinux";
+    rev = version;
+    hash = "sha256-ToSkR6tPJMBCcj1NUBAywKjCAPlpmh+ngIopFrT2PIA=";
+  };
+
+  buildInputs = [
+    curl
+    glib
+    gtk3
+    openssl
+    jansson
+  ];
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    gsettings-desktop-schemas
+    pkg-config
+    wrapGAppsHook3
+  ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postPatch = ''
+    substitute ./src/ibmsl.c ./src/ibmsl.c --subst-var out
+  '';
+
+  meta = with lib; {
+    description = "Linux-native graphical uploader for iBroadcast";
+    downloadPage = "https://github.com/tobz619/MediaSyncLiteLinuxNix";
+    homepage = "https://github.com/iBroadcastMediaServices/MediaSyncLiteLinux";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ tobz619 ];
+  };
+}
diff --git a/pkgs/by-name/me/mednafen/package.nix b/pkgs/by-name/me/mednafen/package.nix
index a001edd0e0f15..88079e48155d8 100644
--- a/pkgs/by-name/me/mednafen/package.nix
+++ b/pkgs/by-name/me/mednafen/package.nix
@@ -5,7 +5,7 @@
   alsa-lib,
   fetchurl,
   flac,
-  freeglut,
+  libglut,
   libGL,
   libGLU,
   libX11,
@@ -39,7 +39,7 @@ stdenv.mkDerivation (finalAttrs: {
     SDL2
     SDL2_net
     flac
-    freeglut
+    libglut
     libcdio
     libjack2
     libsamplerate
@@ -70,7 +70,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = {
     homepage = "https://mednafen.github.io/";
-    description = "A portable, CLI-driven, SDL+OpenGL-based, multi-system emulator";
+    description = "Portable, CLI-driven, SDL+OpenGL-based, multi-system emulator";
     longDescription = ''
       Mednafen is a portable, utilizing OpenGL and SDL,
       argument(command-line)-driven multi-system emulator. Mednafen has the
diff --git a/pkgs/by-name/me/megapixels/package.nix b/pkgs/by-name/me/megapixels/package.nix
index 74ced5c3af268..91bd2b302b948 100644
--- a/pkgs/by-name/me/megapixels/package.nix
+++ b/pkgs/by-name/me/megapixels/package.nix
@@ -29,13 +29,13 @@ let
 in
 stdenv.mkDerivation (finalAttrs: {
   pname = "megapixels";
-  version = "1.8.1";
+  version = "1.8.2";
 
   src = fetchFromGitLab {
     owner = "megapixels-org";
     repo = "Megapixels";
     rev = finalAttrs.version;
-    hash = "sha256-TXiPJbd4TPpsEvmD97F7xkm4rS1g+ViTVTNlxeXrQaw=";
+    hash = "sha256-odsOYrk//ZhodsumLpJjhPDcwF1gkE/no166u+IDxSY=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/by-name/me/meletrix-udev-rules/meletrix.rules b/pkgs/by-name/me/meletrix-udev-rules/meletrix.rules
new file mode 100644
index 0000000000000..fc7cafd1e563f
--- /dev/null
+++ b/pkgs/by-name/me/meletrix-udev-rules/meletrix.rules
@@ -0,0 +1,26 @@
+# Download VIA jsons from https://drive.google.com/drive/folders/1ky4kmGxZo1i0WyRZiY9V6FQlGzjegcPk for USB vendor and product ids
+
+# Zoom 65 Olivia Wired
+SUBSYSTEM=="hidraw", ATTRS{idVendor}=="806c", ATTRS{idProduct}=="0005", MODE:="0660", GROUP="input"
+
+# Zoom 65 EE
+SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1ea7", ATTRS{idProduct}=="7777", MODE:="0660", GROUP="input"
+SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1ea7", ATTRS{idProduct}=="cc65", MODE:="0660", GROUP="input"
+
+# Zoom 65 V2
+# also 1ea7:7777
+SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1ea7", ATTRS{idProduct}=="ccbb", MODE:="0660", GROUP="input"
+
+# Zoom 65 V2.5
+SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1ea7", ATTRS{idProduct}=="ccc3", MODE:="0660", GROUP="input"
+
+# Zoom 75 (production unit)
+SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1ea7", ATTRS{idProduct}=="ced3", MODE:="0660", GROUP="input"
+
+# Zoom 75 (prototype)
+SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1ea7", ATTRS{idProduct}=="ce81", MODE:="0660", GROUP="input"
+
+# ZoomTKL
+# also 1ea7:7777
+SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1ea7", ATTRS{idProduct}=="cd87", MODE:="0660", GROUP="input"
+
diff --git a/pkgs/by-name/me/meletrix-udev-rules/package.nix b/pkgs/by-name/me/meletrix-udev-rules/package.nix
new file mode 100644
index 0000000000000..43fd2b94cdd5b
--- /dev/null
+++ b/pkgs/by-name/me/meletrix-udev-rules/package.nix
@@ -0,0 +1,24 @@
+{
+  lib,
+  stdenvNoCC,
+}:
+stdenvNoCC.mkDerivation {
+  pname = "meletrix-udev-rules";
+  version = "0-unstable-2023-10-20";
+
+  src = [./meletrix.rules];
+
+  dontUnpack = true;
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dpm644 $src $out/lib/udev/rules.d/70-meletrix.rules
+  '';
+
+  meta = with lib; {
+    description = "udev rules to configure Meletrix keyboards";
+    license = licenses.cc0;
+    maintainers = with maintainers; [Scrumplex];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/by-name/me/meli/package.nix b/pkgs/by-name/me/meli/package.nix
index a4ff654ad892c..ab5542bb8cb69 100644
--- a/pkgs/by-name/me/meli/package.nix
+++ b/pkgs/by-name/me/meli/package.nix
@@ -17,12 +17,13 @@
 , sqlite
 
 # runtime deps
+, gpgme
 , gnum4
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "meli";
-  version = "0.8.4";
+  version = "0.8.6";
 
   src = fetchzip {
     urls = [
@@ -30,10 +31,10 @@ rustPlatform.buildRustPackage rec {
       "https://codeberg.org/meli/meli/archive/v${version}.tar.gz"
       "https://github.com/meli/meli/archive/refs/tags/v${version}.tar.gz"
     ];
-    hash = "sha256-wmIlYgXB17/i9Q+6C7pbcEjVlEuvhmqrSH+cDmaBKLs=";
+    hash = "sha256-7lSxXv2i8B6vRWIJqMiXlMqHH6fmgACy9X5qNKuj+IU=";
   };
 
-  cargoHash = "sha256-gYS/dxNMz/HkCmRXH5AdHPXJ2giqpAHc4eVXJGOpMDM=";
+  cargoHash = "sha256-vZkMfaALnRBK9ZwMB2uvvJgQq+BdUX7enNnr9t5H+MY=";
 
   # Needed to get openssl-sys to use pkg-config
   OPENSSL_NO_VENDOR=1;
@@ -60,6 +61,7 @@ rustPlatform.buildRustPackage rec {
     installManPage meli/docs/*.{1,5,7}
 
     wrapProgram $out/bin/meli \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ gpgme ]} \
       --prefix PATH : ${lib.makeBinPath [ gnum4 ]}
   '';
 
diff --git a/pkgs/by-name/me/melonDS/package.nix b/pkgs/by-name/me/melonDS/package.nix
index 334b5909496c7..5c943e71370ca 100644
--- a/pkgs/by-name/me/melonDS/package.nix
+++ b/pkgs/by-name/me/melonDS/package.nix
@@ -23,13 +23,13 @@ let
 in
 stdenv.mkDerivation (finalAttrs: {
   pname = "melonDS";
-  version = "0.9.5-unstable-2024-04-18";
+  version = "0.9.5-unstable-2024-06-18";
 
   src = fetchFromGitHub {
     owner = "melonDS-emu";
     repo = "melonDS";
-    rev = "ba8d547dfa81539f4e8474152d92e866ad89241b";
-    hash = "sha256-va4KegM2z0GSA43goUynRPNPvQnrV2b8oNOfLKPE+Zc=";
+    rev = "cbb0f4b872ea8a5e2348c7f1a22695056968192f";
+    hash = "sha256-J1i7+VrOVQruHFhzjBnSf+DbmIa3o+rWISsdm8kMRC8=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/by-name/me/memorado/package.nix b/pkgs/by-name/me/memorado/package.nix
new file mode 100644
index 0000000000000..e7282d01d90e6
--- /dev/null
+++ b/pkgs/by-name/me/memorado/package.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, gtk4
+, pkg-config
+, libadwaita
+, blueprint-compiler
+, python3
+, desktop-file-utils
+, gobject-introspection
+, wrapGAppsHook4
+}:
+
+stdenv.mkDerivation rec {
+  pname = "memorado";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "wbernard";
+    repo = "Memorado";
+    rev = "refs/tags/${version}";
+    hash = "sha256-bArcYUHSfpjYsySGZco4fmb6bKRFtG6efhzNSqUROX0=";
+  };
+
+  nativeBuildInputs = [
+    blueprint-compiler
+    desktop-file-utils
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    gtk4
+    libadwaita
+    (python3.withPackages (ps: with ps; [
+      pygobject3
+    ]))
+  ];
+
+  meta = with lib; {
+    description = "Simple and clean flashcard memorizing app";
+    homepage = "https://github.com/wbernard/Memorado";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ onny ];
+  };
+}
diff --git a/pkgs/by-name/me/menulibre/package.nix b/pkgs/by-name/me/menulibre/package.nix
index 414f591965eb9..b8ad319c89576 100644
--- a/pkgs/by-name/me/menulibre/package.nix
+++ b/pkgs/by-name/me/menulibre/package.nix
@@ -12,7 +12,7 @@
 }:
 
 python3Packages.buildPythonApplication rec {
-  name = "menulibre";
+  pname = "menulibre";
   version = "2.4.0";
 
   src = fetchFromGitHub {
@@ -55,7 +55,7 @@ python3Packages.buildPythonApplication rec {
   };
 
   meta = with lib; {
-    description = "An advanced menu editor with an easy-to-use interface";
+    description = "Advanced menu editor with an easy-to-use interface";
     homepage = "https://bluesabre.org/projects/menulibre";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ lelgenio ];
diff --git a/pkgs/by-name/me/mercure/package.nix b/pkgs/by-name/me/mercure/package.nix
index 0e8cc02fbe724..b66483d29ae25 100644
--- a/pkgs/by-name/me/mercure/package.nix
+++ b/pkgs/by-name/me/mercure/package.nix
@@ -8,18 +8,18 @@
 
 buildGoModule rec {
   pname = "mercure";
-  version = "0.15.11";
+  version = "0.16.0";
 
   src = fetchFromGitHub {
     owner = "dunglas";
     repo = "mercure";
     rev = "v${version}";
-    hash = "sha256-qPKfF0awRsMfXu7N/xNwFVmmuqTMGsDDqrVgt6LwviI=";
+    hash = "sha256-HHErk1KX8HgAt4UrBuchK6ysNsxEsrf5uBzzvSNz+to=";
   };
 
   sourceRoot = "${src.name}/caddy";
 
-  vendorHash = "sha256-evUGa1kFWbj0ynDQruBRDx2opzh7Tc7eHnWn3H4xwxY=";
+  vendorHash = "sha256-aO0EvxZNOCAaqEWN1VIdPpS+y8KcsuXo7o8msicspNE=";
 
   subPackages = [ "mercure" ];
   excludedPackages = [ "../cmd/mercure" ];
@@ -42,7 +42,7 @@ buildGoModule rec {
   };
 
   meta = with lib; {
-    description = "An open, easy, fast, reliable and battery-efficient solution for real-time communications";
+    description = "Open, easy, fast, reliable and battery-efficient solution for real-time communications";
     homepage = "https://github.com/dunglas/mercure";
     changelog = "https://github.com/dunglas/mercure/releases/tag/v${version}";
     license = licenses.agpl3Only;
diff --git a/pkgs/by-name/me/mermaid-cli/package.nix b/pkgs/by-name/me/mermaid-cli/package.nix
index d00da6941cf82..a11b5504bca5a 100644
--- a/pkgs/by-name/me/mermaid-cli/package.nix
+++ b/pkgs/by-name/me/mermaid-cli/package.nix
@@ -11,18 +11,18 @@
 
 stdenv.mkDerivation rec {
   pname = "mermaid-cli";
-  version = "10.8.0";
+  version = "10.9.0";
 
   src = fetchFromGitHub {
     owner = "mermaid-js";
     repo = "mermaid-cli";
     rev = version;
-    hash = "sha256-nCLLv8QXx9N4WiUFw3WB+Rpfd4H4oCFa1ac01al+ovY=";
+    hash = "sha256-o9QaJsJlfqsAguYGHAdf8aqZWbOgDJs+0KVQAVtRlA0=";
   };
 
   offlineCache = fetchYarnDeps {
     yarnLock = "${src}/yarn.lock";
-    hash = "sha256-thZxaa7S3vlS1Ws+G5dklun+ISCV908p1Ov7qb8fP3c=";
+    hash = "sha256-SfRzn5FxO+Ls+ne7ay3tySNLr+awEJ9fo/nwcAY11qA=";
   };
 
   nativeBuildInputs  = [
diff --git a/pkgs/by-name/me/meson/007-Allow-building-via-ninja-12.patch b/pkgs/by-name/me/meson/007-Allow-building-via-ninja-12.patch
new file mode 100644
index 0000000000000..009d826aab036
--- /dev/null
+++ b/pkgs/by-name/me/meson/007-Allow-building-via-ninja-12.patch
@@ -0,0 +1,190 @@
+From 8e46d3e37f81bf13f3f62a14fb603feb2e37229d Mon Sep 17 00:00:00 2001
+From: John Titor <50095635+JohnRTitor@users.noreply.github.com>
+Date: Fri, 10 May 2024 23:25:58 +0530
+Subject: [PATCH] Fix builds with Ninja 12 and remove a 5 year old workaround.
+
+Co-authored-by: Jussi Pakkanen <jpakkane@gmail.com>
+Co-authored-by: Masum Reza <masumrezarock100@gmail.com>
+---
+ run_project_tests.py           |  3 +--
+ run_tests.py                   | 35 ++++++++++------------------------
+ unittests/baseplatformtests.py | 34 +++++++++++++++++++++++++++------
+ 3 files changed, 39 insertions(+), 33 deletions(-)
+
+diff --git a/run_project_tests.py b/run_project_tests.py
+index a14741364..222e12f74 100755
+--- a/run_project_tests.py
++++ b/run_project_tests.py
+@@ -45,7 +45,7 @@ from mesonbuild.coredata import backendlist, version as meson_version
+ from mesonbuild.modules.python import PythonExternalProgram
+ from run_tests import (
+     get_fake_options, run_configure, get_meson_script, get_backend_commands,
+-    get_backend_args_for_dir, Backend, ensure_backend_detects_changes,
++    get_backend_args_for_dir, Backend,
+     guess_backend, handle_meson_skip_test,
+ )
+ 
+@@ -720,7 +720,6 @@ def _run_test(test: TestDef,
+ 
+     # Touch the meson.build file to force a regenerate
+     def force_regenerate() -> None:
+-        ensure_backend_detects_changes(backend)
+         os.utime(str(test.path / 'meson.build'))
+ 
+     # just test building
+diff --git a/run_tests.py b/run_tests.py
+index 207653219..0c51f3d69 100755
+--- a/run_tests.py
++++ b/run_tests.py
+@@ -39,29 +39,27 @@ from mesonbuild.mesonlib import OptionKey, setup_vsenv
+ if T.TYPE_CHECKING:
+     from mesonbuild.coredata import SharedCMDOptions
+ 
+-NINJA_1_9_OR_NEWER = False
++NINJA_1_12_OR_NEWER = False
+ NINJA_CMD = None
+ # If we're on CI, detecting ninja for every subprocess unit test that we run is slow
+ # Optimize this by respecting $NINJA and skipping detection, then exporting it on
+ # first run.
+ try:
+-    NINJA_1_9_OR_NEWER = bool(int(os.environ['NINJA_1_9_OR_NEWER']))
++    NINJA_1_12_OR_NEWER = bool(int(os.environ['NINJA_1_12_OR_NEWER']))
+     NINJA_CMD = [os.environ['NINJA']]
+ except (KeyError, ValueError):
+-    # Look for 1.9 to see if https://github.com/ninja-build/ninja/issues/1219
+-    # is fixed
+-    NINJA_CMD = detect_ninja('1.9')
++    # Look for 1.12, which removes -w dupbuild=err
++    NINJA_CMD = detect_ninja('1.12')
+     if NINJA_CMD is not None:
+-        NINJA_1_9_OR_NEWER = True
++        NINJA_1_12_OR_NEWER = True
+     else:
+-        mlog.warning('Found ninja <1.9, tests will run slower', once=True)
+         NINJA_CMD = detect_ninja()
+ 
+ if NINJA_CMD is not None:
+-    os.environ['NINJA_1_9_OR_NEWER'] = str(int(NINJA_1_9_OR_NEWER))
++    os.environ['NINJA_1_12_OR_NEWER'] = str(int(NINJA_1_12_OR_NEWER))
+     os.environ['NINJA'] = NINJA_CMD[0]
+ else:
+-    raise RuntimeError('Could not find Ninja v1.7 or newer')
++    raise RuntimeError('Could not find Ninja.')
+ 
+ # Emulate running meson with -X utf8 by making sure all open() calls have a
+ # sane encoding. This should be a python default, but PEP 540 considered it not
+@@ -271,7 +269,9 @@ def get_backend_commands(backend: Backend, debug: bool = False) -> \
+         test_cmd = cmd + ['-target', 'RUN_TESTS']
+     elif backend is Backend.ninja:
+         global NINJA_CMD
+-        cmd = NINJA_CMD + ['-w', 'dupbuild=err', '-d', 'explain']
++        cmd = NINJA_CMD + ['-d', 'explain']
++        if not NINJA_1_12_OR_NEWER:
++            cmd += ['-w', 'dupbuild=err']
+         if debug:
+             cmd += ['-v']
+         clean_cmd = cmd + ['clean']
+@@ -282,21 +282,6 @@ def get_backend_commands(backend: Backend, debug: bool = False) -> \
+         raise AssertionError(f'Unknown backend: {backend!r}')
+     return cmd, clean_cmd, test_cmd, install_cmd, uninstall_cmd
+ 
+-def ensure_backend_detects_changes(backend: Backend) -> None:
+-    global NINJA_1_9_OR_NEWER
+-    if backend is not Backend.ninja:
+-        return
+-    need_workaround = False
+-    # We're using ninja >= 1.9 which has QuLogic's patch for sub-1s resolution
+-    # timestamps
+-    if not NINJA_1_9_OR_NEWER:
+-        mlog.warning('Don\'t have ninja >= 1.9, enabling timestamp resolution workaround', once=True)
+-        need_workaround = True
+-    # Increase the difference between build.ninja's timestamp and the timestamp
+-    # of whatever you changed: https://github.com/ninja-build/ninja/issues/371
+-    if need_workaround:
+-        time.sleep(1)
+-
+ def run_mtest_inprocess(commandlist: T.List[str]) -> T.Tuple[int, str, str]:
+     out = StringIO()
+     with mock.patch.object(sys, 'stdout', out), mock.patch.object(sys, 'stderr', out):
+diff --git a/unittests/baseplatformtests.py b/unittests/baseplatformtests.py
+index 6125ed933..226b2e11e 100644
+--- a/unittests/baseplatformtests.py
++++ b/unittests/baseplatformtests.py
+@@ -1,6 +1,8 @@
+ # SPDX-License-Identifier: Apache-2.0
+ # Copyright 2016-2021 The Meson development team
++# Copyright © 2024 Intel Corporation
+ 
++from __future__ import annotations
+ from pathlib import PurePath
+ from unittest import mock, TestCase, SkipTest
+ import json
+@@ -9,6 +11,7 @@ import os
+ import re
+ import subprocess
+ import sys
++import shutil
+ import tempfile
+ import typing as T
+ 
+@@ -28,7 +31,7 @@ import mesonbuild.modules.pkgconfig
+ 
+ 
+ from run_tests import (
+-    Backend, ensure_backend_detects_changes, get_backend_commands,
++    Backend, get_backend_commands,
+     get_builddir_target_args, get_meson_script, run_configure_inprocess,
+     run_mtest_inprocess, handle_meson_skip_test,
+ )
+@@ -286,11 +289,11 @@ class BasePlatformTests(TestCase):
+         '''
+         return self.build(target=target, override_envvars=override_envvars)
+ 
+-    def setconf(self, arg, will_build=True):
+-        if not isinstance(arg, list):
++    def setconf(self, arg: T.Sequence[str], will_build: bool = True) -> None:
++        if isinstance(arg, str):
+             arg = [arg]
+-        if will_build:
+-            ensure_backend_detects_changes(self.backend)
++        else:
++            arg = list(arg)
+         self._run(self.mconf_command + arg + [self.builddir])
+ 
+     def getconf(self, optname: str):
+@@ -304,7 +307,6 @@ class BasePlatformTests(TestCase):
+         windows_proof_rmtree(self.builddir)
+ 
+     def utime(self, f):
+-        ensure_backend_detects_changes(self.backend)
+         os.utime(f)
+ 
+     def get_compdb(self):
+@@ -492,3 +494,23 @@ class BasePlatformTests(TestCase):
+ 
+     def assertLength(self, val, length):
+         assert len(val) == length, f'{val} is not length {length}'
++
++    def copy_srcdir(self, srcdir: str) -> str:
++        """Copies a source tree and returns that copy.
++
++        ensures that the copied tree is deleted after running.
++
++        :param srcdir: The locaiton of the source tree to copy
++        :return: The location of the copy
++        """
++        dest = tempfile.mkdtemp()
++        self.addCleanup(windows_proof_rmtree, dest)
++
++        # shutil.copytree expects the destinatin directory to not exist, Once
++        # python 3.8 is required the `dirs_exist_ok` parameter negates the need
++        # for this
++        dest = os.path.join(dest, 'subdir')
++
++        shutil.copytree(srcdir, dest)
++
++        return dest
+\ No newline at end of file
+-- 
+2.44.0
+
diff --git a/pkgs/by-name/me/meson/007-freebsd-pkgconfig-path.patch b/pkgs/by-name/me/meson/007-freebsd-pkgconfig-path.patch
new file mode 100644
index 0000000000000..3a9ba6f092dda
--- /dev/null
+++ b/pkgs/by-name/me/meson/007-freebsd-pkgconfig-path.patch
@@ -0,0 +1,15 @@
+diff -ur a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py
+--- a/mesonbuild/modules/pkgconfig.py	2024-05-17 17:52:30.880877000 -0700
++++ b/mesonbuild/modules/pkgconfig.py	2024-05-17 17:53:10.901068000 -0700
+@@ -693,10 +693,7 @@
+         pcfile = filebase + '.pc'
+         pkgroot = pkgroot_name = kwargs['install_dir'] or default_install_dir
+         if pkgroot is None:
+-            if mesonlib.is_freebsd():
+-                pkgroot = os.path.join(_as_str(state.environment.coredata.get_option(mesonlib.OptionKey('prefix'))), 'libdata', 'pkgconfig')
+-                pkgroot_name = os.path.join('{prefix}', 'libdata', 'pkgconfig')
+-            elif mesonlib.is_haiku():
++            if mesonlib.is_haiku():
+                 pkgroot = os.path.join(_as_str(state.environment.coredata.get_option(mesonlib.OptionKey('prefix'))), 'develop', 'lib', 'pkgconfig')
+                 pkgroot_name = os.path.join('{prefix}', 'develop', 'lib', 'pkgconfig')
+             else:
diff --git a/pkgs/by-name/me/meson/package.nix b/pkgs/by-name/me/meson/package.nix
index b2c85c431e01d..22bbc1c2fbc3f 100644
--- a/pkgs/by-name/me/meson/package.nix
+++ b/pkgs/by-name/me/meson/package.nix
@@ -4,6 +4,8 @@
 , installShellFiles
 , coreutils
 , darwin
+, libblocksruntime
+, llvmPackages
 , libxcrypt
 , openldap
 , ninja
@@ -66,9 +68,16 @@ python3.pkgs.buildPythonApplication rec {
     # Nixpkgs cctools does not have bitcode support.
     ./006-disable-bitcode.patch
 
+    # This edge case is explicitly part of meson but is wrong for nix
+    ./007-freebsd-pkgconfig-path.patch
+
     # Fix cross-compilation of proc-macro (and mesa)
     # https://github.com/mesonbuild/meson/issues/12973
     ./0001-Revert-rust-recursively-pull-proc-macro-dependencies.patch
+
+    # Fix compilation of Meson using Ninja 1.12
+    # FIXME: remove in the next point release
+    ./007-Allow-building-via-ninja-12.patch
   ];
 
   buildInputs = lib.optionals (python3.pythonOlder "3.9") [
@@ -93,6 +102,11 @@ python3.pkgs.buildPythonApplication rec {
     OpenAL
     OpenGL
     openldap
+  ] ++ lib.optionals (stdenv.cc.isClang && !stdenv.isDarwin) [
+    # https://github.com/mesonbuild/meson/blob/bd3f1b2e0e70ef16dfa4f441686003212440a09b/test%20cases/common/184%20openmp/meson.build
+    llvmPackages.openmp
+    # https://github.com/mesonbuild/meson/blob/1670fca36fcb1a4fe4780e96731e954515501a35/test%20cases/frameworks/29%20blocks/meson.build
+    libblocksruntime
   ];
 
   checkPhase = lib.concatStringsSep "\n" ([
@@ -106,7 +120,7 @@ python3.pkgs.buildPythonApplication rec {
     ''
   ]
   # Remove problematic tests
-  ++ (builtins.map (f: ''rm -vr "${f}";'') [
+  ++ (builtins.map (f: ''rm -vr "${f}";'') ([
     # requires git, creating cyclic dependency
     ''test cases/common/66 vcstag''
     # requires glib, creating cyclic dependency
@@ -116,7 +130,10 @@ python3.pkgs.buildPythonApplication rec {
     ''test cases/linuxlike/14 static dynamic linkage''
     # Nixpkgs cctools does not have bitcode support.
     ''test cases/osx/7 bitcode''
-  ])
+  ] ++ lib.optionals stdenv.isFreeBSD [
+    # pch doesn't work quite right on FreeBSD, I think
+    ''test cases/common/13 pch''
+  ]))
   ++ [
     ''HOME="$TMPDIR" python ./run_project_tests.py''
     "runHook postCheck"
@@ -146,7 +163,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = {
     homepage = "https://mesonbuild.com";
-    description = "An open source, fast and friendly build system made in Python";
+    description = "Open source, fast and friendly build system made in Python";
     mainProgram = "meson";
     longDescription = ''
       Meson is an open source build system meant to be both extremely fast, and,
diff --git a/pkgs/by-name/me/meson/setup-hook.sh b/pkgs/by-name/me/meson/setup-hook.sh
index 85849fbec734a..3f3c7ac59fdea 100644
--- a/pkgs/by-name/me/meson/setup-hook.sh
+++ b/pkgs/by-name/me/meson/setup-hook.sh
@@ -56,7 +56,7 @@ mesonCheckPhase() {
     local flagsArray=($mesonCheckFlags "${mesonCheckFlagsArray[@]}")
 
     echoCmd 'mesonCheckPhase flags' "${flagsArray[@]}"
-    meson test --no-rebuild "${flagsArray[@]}"
+    meson test --no-rebuild --print-errorlogs "${flagsArray[@]}"
 
     runHook postCheck
 }
diff --git a/pkgs/by-name/me/metacubexd/package.nix b/pkgs/by-name/me/metacubexd/package.nix
new file mode 100644
index 0000000000000..c55083e5b224b
--- /dev/null
+++ b/pkgs/by-name/me/metacubexd/package.nix
@@ -0,0 +1,55 @@
+{
+  lib,
+  fetchFromGitHub,
+  nix-update-script,
+  nodejs,
+  pnpm,
+  stdenv,
+}:
+stdenv.mkDerivation (finalAttrs: {
+  pname = "metacubexd";
+  version = "1.140.0";
+
+  src = fetchFromGitHub {
+    owner = "MetaCubeX";
+    repo = "metacubexd";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-OVLG+MHgwWTorPuBTHsHUAY1FSN91j7xWgRDJ7FiO7E=";
+  };
+
+  nativeBuildInputs = [
+    pnpm.configHook
+    nodejs
+  ];
+
+  pnpmDeps = pnpm.fetchDeps {
+    inherit (finalAttrs) pname version src;
+    hash = "sha256-24PkWT5UZJwMtL3y8qdf3XFuf3v5PjiP9XESbw3oppY=";
+  };
+
+  buildPhase = ''
+    runHook preBuild
+
+    pnpm build
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    cp -r ./dist $out
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = {
+    description = "Clash.Meta Dashboard, The Official One, XD";
+    homepage = "https://github.com/MetaCubeX/metacubexd";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
+    maintainers = with lib.maintainers; [ Guanran928 ];
+  };
+})