Merge pull request #114745 from rnhmjoj/brltty

brltty: 6.1 -> 6.3; nixos/brltty: use upstream units
This commit is contained in:
Michele Guerini Rocco 2021-05-07 23:35:57 +02:00 committed by GitHub
commit 4e4869b92b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 99 additions and 39 deletions

View File

@ -5,6 +5,19 @@ with lib;
let let
cfg = config.services.brltty; cfg = config.services.brltty;
targets = [
"default.target" "multi-user.target"
"rescue.target" "emergency.target"
];
genApiKey = pkgs.writers.writeDash "generate-brlapi-key" ''
if ! test -f /etc/brlapi.key; then
echo -n generating brlapi key...
${pkgs.brltty}/bin/brltty-genkey -f /etc/brlapi.key
echo done
fi
'';
in { in {
options = { options = {
@ -18,33 +31,27 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
users.users.brltty = {
systemd.services.brltty = { description = "BRLTTY daemon user";
description = "Braille Device Support"; group = "brltty";
unitConfig = { };
Documentation = "http://mielke.cc/brltty/"; users.groups = {
DefaultDependencies = "no"; brltty = { };
RequiresMountsFor = "${pkgs.brltty}/var/lib/brltty"; brlapi = { };
};
serviceConfig = {
ExecStart = "${pkgs.brltty}/bin/brltty --no-daemon";
Type = "notify";
TimeoutStartSec = 5;
TimeoutStopSec = 10;
Restart = "always";
RestartSec = 30;
Nice = -10;
OOMScoreAdjust = -900;
ProtectHome = "read-only";
ProtectSystem = "full";
SystemCallArchitectures = "native";
};
wants = [ "systemd-udev-settle.service" ];
after = [ "local-fs.target" "systemd-udev-settle.service" ];
before = [ "sysinit.target" ];
wantedBy = [ "sysinit.target" ];
}; };
systemd.services."brltty@".serviceConfig =
{ ExecStartPre = "!${genApiKey}"; };
# Install all upstream-provided files
systemd.packages = [ pkgs.brltty ];
systemd.tmpfiles.packages = [ pkgs.brltty ];
services.udev.packages = [ pkgs.brltty ];
environment.systemPackages = [ pkgs.brltty ];
# Add missing WantedBys (see issue #81138)
systemd.paths.brltty.wantedBy = targets;
systemd.paths."brltty@".wantedBy = targets;
}; };
} }

View File

@ -1,19 +1,19 @@
{ lib, stdenv, fetchurl, pkg-config, python3, bluez { lib, stdenv, fetchurl, pkg-config, python3, bluez
, alsaSupport ? stdenv.isLinux, alsaLib ? null , tcl, acl, kmod, coreutils, shadow, util-linux, udev
, systemdSupport ? stdenv.isLinux, systemd ? null }: , alsaSupport ? stdenv.isLinux, alsaLib
, systemdSupport ? stdenv.isLinux, systemd
assert alsaSupport -> alsaLib != null; }:
assert systemdSupport -> systemd != null;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "brltty-6.1"; pname = "brltty";
version = "6.3";
src = fetchurl { src = fetchurl {
url = "http://brltty.com/archive/${name}.tar.gz"; url = "https://brltty.app/archive/${pname}-${version}.tar.gz";
sha256 = "0nk54chr7z2w579vyiak9xk2avhnvrx7x2l5sk8nyw2zplchkx9q"; sha256 = "14psxwlvgyi2fj1zh8rfykyjcjaya8xa7yg574bxd8y8n49n8hvb";
}; };
nativeBuildInputs = [ pkg-config python3.pkgs.cython ]; nativeBuildInputs = [ pkg-config python3.pkgs.cython tcl ];
buildInputs = [ bluez ] buildInputs = [ bluez ]
++ lib.optional alsaSupport alsaLib ++ lib.optional alsaSupport alsaLib
++ lib.optional systemdSupport systemd; ++ lib.optional systemdSupport systemd;
@ -26,17 +26,70 @@ stdenv.mkDerivation rec {
It drives the braille display, and provides complete screen review functionality. It drives the braille display, and provides complete screen review functionality.
Some speech capability has also been incorporated. Some speech capability has also been incorporated.
''; '';
homepage = "http://www.brltty.com/"; homepage = "https://brltty.app";
license = lib.licenses.gpl2; license = lib.licenses.gpl2Plus;
maintainers = [ lib.maintainers.bramd ]; maintainers = [ lib.maintainers.bramd ];
platforms = lib.platforms.all; platforms = lib.platforms.all;
}; };
makeFlags = [ "PYTHON_PREFIX=$(out)" ]; makeFlags = [
"PYTHON_PREFIX=$(out)"
preConfigurePhases = [ "preConfigure" ]; "SYSTEMD_UNITS_DIRECTORY=$(out)/lib/systemd/system"
"SYSTEMD_USERS_DIRECTORY=$(out)/lib/sysusers.d"
"SYSTEMD_FILES_DIRECTORY=$(out)/lib/tmpfiles.d"
"UDEV_LIBRARY_DIRECTORY=$(out)/lib/udev"
"UDEV_RULES_TYPE=all"
"POLKIT_POLICY_DIR=$(out)/share/polkit-1/actions"
"POLKIT_RULE_DIR=$(out)/share/polkit-1/rules.d"
];
configureFlags = [
"--with-writable-directory=/run/brltty"
"--with-updatable-directory=/var/lib/brltty"
"--with-api-socket-path=/var/lib/BrlAPI"
];
installFlags = [ "install-systemd" "install-udev" "install-polkit" ];
preConfigure = '' preConfigure = ''
substituteInPlace configure --replace /sbin/ldconfig ldconfig substituteInPlace configure --replace /sbin/ldconfig ldconfig
# Some script needs a working tclsh shebang
patchShebangs .
# Skip impure operations
substituteInPlace Programs/Makefile.in \
--replace install-writable-directory "" \
--replace install-apisoc-directory "" \
--replace install-api-key ""
'';
postInstall = ''
# Rewrite absolute paths
substituteInPlace $out/bin/brltty-mkuser \
--replace '/sbin/nologin' '${shadow}/bin/nologin'
(
cd $out/lib
substituteInPlace systemd/system/brltty@.service \
--replace '/usr/lib' "$out/lib" \
--replace '/sbin/modprobe' '${kmod}/bin/modprobe'
# Ensure the systemd-wrapper script uses the correct path to the brltty binary
sed "/^Environment=\"BRLTTY_EXECUTABLE_ARGUMENTS.*/a Environment=\"BRLTTY_EXECUTABLE_PATH=$out/bin/brltty\"" -i systemd/system/brltty@.service
substituteInPlace systemd/system/brltty-device@.service \
--replace '/usr/bin/true' '${coreutils}/bin/true'
substituteInPlace udev/rules.d/90-brltty-uinput.rules \
--replace '/usr/bin/setfacl' '${acl}/bin/setfacl'
substituteInPlace tmpfiles.d/brltty.conf \
--replace "$out/etc" '/etc'
# Remove unused commands from udev rules
sed '/initctl/d' -i udev/rules.d/90-brltty-device.rules
# Remove pulse-access group from systemd unit and sysusers
substituteInPlace systemd/system/brltty@.service \
--replace 'SupplementaryGroups=pulse-access' '# SupplementaryGroups=pulse-access'
substituteInPlace sysusers.d/brltty.conf \
--replace 'm brltty pulse-access' '# m brltty pulse-access'
)
substituteInPlace $out/libexec/brltty/systemd-wrapper \
--replace 'logger' "${util-linux}/bin/logger" \
--replace 'udevadm' "${udev}/bin/udevadm"
''; '';
} }