diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix
index 22f5178de112..94aab69a2c20 100644
--- a/maintainers/maintainer-list.nix
+++ b/maintainers/maintainer-list.nix
@@ -6595,6 +6595,13 @@
githubId = 20176306;
name = "jammerful";
};
+ janik = {
+ name = "Janik";
+ email = "janik@aq0.de";
+ matrix = "@janik0:matrix.org";
+ github = "Janik-Haag";
+ githubId = 80165193;
+ };
jansol = {
email = "jan.solanti@paivola.fi";
github = "jansol";
diff --git a/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
index 3f1816e8e769..5f9d67b5e7d6 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
@@ -113,6 +113,14 @@
services.mmsd.
+
+
+ QDMR, a
+ gui application and command line tool for programming cheap
+ DMR radios
+ programs.qdmr
+
+
v2rayA, a Linux
diff --git a/nixos/doc/manual/release-notes/rl-2305.section.md b/nixos/doc/manual/release-notes/rl-2305.section.md
index a2c4b038d7f1..b19bf5d402a2 100644
--- a/nixos/doc/manual/release-notes/rl-2305.section.md
+++ b/nixos/doc/manual/release-notes/rl-2305.section.md
@@ -38,6 +38,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [mmsd](https://gitlab.com/kop316/mmsd), a lower level daemon that transmits and recieves MMSes. Available as [services.mmsd](#opt-services.mmsd.enable).
+- [QDMR](https://dm3mat.darc.de/qdmr/), a gui application and command line tool for programming cheap DMR radios [programs.qdmr](#opt-programs.qdmr.enable)
+
- [v2rayA](https://v2raya.org), a Linux web GUI client of Project V which supports V2Ray, Xray, SS, SSR, Trojan and Pingtunnel. Available as [services.v2raya](options.html#opt-services.v2raya.enable).
- [ulogd](https://www.netfilter.org/projects/ulogd/index.html), a userspace logging daemon for netfilter/iptables related logging. Available as [services.ulogd](options.html#opt-services.ulogd.enable).
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 5e520c8308cf..82eec40ecf10 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -214,6 +214,7 @@
./programs/partition-manager.nix
./programs/plotinus.nix
./programs/proxychains.nix
+ ./programs/qdmr.nix
./programs/qt5ct.nix
./programs/rog-control-center.nix
./programs/rust-motd.nix
diff --git a/nixos/modules/programs/qdmr.nix b/nixos/modules/programs/qdmr.nix
new file mode 100644
index 000000000000..c0b1984eff91
--- /dev/null
+++ b/nixos/modules/programs/qdmr.nix
@@ -0,0 +1,25 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+
+let
+ cfg = config.programs.qdmr;
+in {
+ meta.maintainers = [ lib.maintainers.janik ];
+
+ options = {
+ programs.qdmr = {
+ enable = lib.mkEnableOption (lib.mdDoc "QDMR - a GUI application and command line tool for programming DMR radios");
+ package = lib.mkPackageOptionMD pkgs "qdmr" { };
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ environment.systemPackages = [ cfg.package ];
+ services.udev.packages = [ cfg.package ];
+ users.groups.wireshark = {};
+ };
+}
diff --git a/pkgs/applications/radio/qdmr/default.nix b/pkgs/applications/radio/qdmr/default.nix
new file mode 100644
index 000000000000..79a9fdb51ced
--- /dev/null
+++ b/pkgs/applications/radio/qdmr/default.nix
@@ -0,0 +1,70 @@
+{
+ lib,
+ stdenv,
+ fetchFromGitHub,
+ installShellFiles,
+ writeText,
+ cmake,
+ libxslt,
+ docbook_xsl_ns,
+ wrapQtAppsHook,
+ libusb1,
+ libyamlcpp,
+ qtlocation,
+ qtserialport,
+ qttools,
+ qtbase,
+}:
+
+let
+ inherit (stdenv) isLinux;
+in
+
+stdenv.mkDerivation rec {
+ pname = "qdmr";
+ version = "0.11.2";
+
+ src = fetchFromGitHub {
+ owner = "hmatuschek";
+ repo = "qdmr";
+ rev = "v${version}";
+ sha256 = "sha256-zT31tzsm5OM99vz8DzGCdPmnemiwiJpKccYwECnUgOQ=";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ libxslt
+ wrapQtAppsHook
+ installShellFiles
+ ];
+
+ buildInputs = [
+ libyamlcpp
+ libusb1
+ qtlocation
+ qtserialport
+ qttools
+ qtbase
+ ];
+
+ postPatch = lib.optionalString isLinux ''
+ substituteInPlace doc/docbook_man.debian.xsl \
+ --replace /usr/share/xml/docbook/stylesheet/docbook-xsl/manpages/docbook\.xsl ${docbook_xsl_ns}/xml/xsl/docbook/manpages/docbook.xsl
+ '';
+
+ cmakeFlags = [ "-DBUILD_MAN=ON" ];
+
+ postInstall = ''
+ installManPage doc/dmrconf.1 doc/qdmr.1
+ mkdir -p "$out/etc/udev/rules.d"
+ cp ${src}/dist/99-qdmr.rules $out/etc/udev/rules.d/
+ '';
+
+ meta = {
+ description = "A codeplug programming tool for DMR radios";
+ homepage = "https://dm3mat.darc.de/qdmr/";
+ license = lib.licenses.gpl3Plus;
+ maintainers = with lib.maintainers; [ janik _0x4A6F ];
+ platforms = lib.platforms.linux;
+ };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index a3db9b697962..6664e9385bcf 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -717,6 +717,8 @@ with pkgs;
ebook2cw = callPackage ../applications/radio/ebook2cw { };
+ qdmr = libsForQt5.callPackage ../applications/radio/qdmr { };
+
edwin = callPackage ../data/fonts/edwin { };
etBook = callPackage ../data/fonts/et-book { };