about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGriffin Smith <grfn@gws.fyi>2020-12-01T16·59-0500
committerglittershark <grfn@gws.fyi>2020-12-14T18·18+0000
commitcdedcc6238652599534b65f98b9422029ed05368 (patch)
tree6bd140abd3abfcbd812c0f316d08f5f4bb1f70bf
parentea936e0a78223c02d6e56954c60cf4a29b5e2983 (diff)
feat(gs/system): Setup fingerprint scanner r/1996
This is kinda nifty

Change-Id: I1b9a6762a5349974f539d2c4938a2b3dcdf488ad
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2219
Reviewed-by: glittershark <grfn@gws.fyi>
Tested-by: BuildkiteCI
-rw-r--r--users/glittershark/pkgs/fprintd/default.nix124
-rw-r--r--users/glittershark/pkgs/fprintd/libfprint-tod-clean.nix81
-rw-r--r--users/glittershark/pkgs/fprintd/libfprint-tod-goodix.nix47
-rw-r--r--users/glittershark/pkgs/fprintd/libfprint-tod.nix89
-rw-r--r--users/glittershark/system/system/default.nix8
-rw-r--r--users/glittershark/system/system/machines/yeren.nix16
6 files changed, 364 insertions, 1 deletions
diff --git a/users/glittershark/pkgs/fprintd/default.nix b/users/glittershark/pkgs/fprintd/default.nix
new file mode 100644
index 0000000000..4c4632b7a3
--- /dev/null
+++ b/users/glittershark/pkgs/fprintd/default.nix
@@ -0,0 +1,124 @@
+args @ { pkgs, ... }:
+
+let
+  nixpkgs = import pkgs.nixpkgsSrc {
+    config.allowUnfree = true;
+  };
+  inherit (nixpkgs)
+    stdenv
+    fetchFromGitLab
+    fetchpatch
+    pkgconfig
+    meson
+    ninja
+    perl
+    gettext
+    cairo
+    gtk-doc
+    libxslt
+    docbook-xsl-nons
+    docbook_xml_dtd_412
+    glib
+    dbus
+    dbus-glib
+    polkit
+    nss
+    pam
+    systemd
+    python3;
+  libfprint-tod = nixpkgs.callPackage ./libfprint-tod.nix {};
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "fprintd";
+  version = "1.90.1";
+  outputs = [ "out" "devdoc" ];
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "libfprint";
+    repo = pname;
+    rev = version;
+    sha256 = "0mbzk263x7f58i9cxhs44mrngs7zw5wkm62j5r6xlcidhmfn03cg";
+  };
+
+  patches = [
+    # Fixes issue with ":" when there is multiple paths (might be the case on NixOS)
+    # https://gitlab.freedesktop.org/libfprint/fprintd/-/merge_requests/50
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/libfprint/fprintd/-/commit/d7fec03f24d10f88d34581c72f0eef201f5eafac.patch";
+      sha256 = "0f88dhizai8jz7hpm5lpki1fx4593zcy89iwi4brsqbqc7jp9ls0";
+    })
+
+    # Fix locating libpam_wrapper for tests
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/libfprint/fprintd/-/merge_requests/40.patch";
+      sha256 = "0qqy090p93lzabavwjxzxaqidkcb3ifacl0d3yh1q7ms2a58yyz3";
+    })
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/libfprint/fprintd/-/commit/f401f399a85dbeb2de165b9b9162eb552ab6eea7.patch";
+      sha256 = "1bc9g6kc95imlcdpvp8qgqjsnsxg6nipr6817c1pz5i407yvw1iy";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pkgconfig
+    meson
+    ninja
+    perl
+    gettext
+    gtk-doc
+    libxslt
+    dbus
+    docbook-xsl-nons
+    docbook_xml_dtd_412
+  ];
+
+  buildInputs = [
+    glib
+    dbus-glib
+    polkit
+    nss
+    pam
+    systemd
+    libfprint-tod
+  ];
+
+  checkInputs = with python3.pkgs; [
+    python-dbusmock
+    dbus-python
+    pygobject3
+    pycairo
+    pypamtest
+  ];
+
+  mesonFlags = [
+    "-Dgtk_doc=true"
+    "-Dpam_modules_dir=${placeholder "out"}/lib/security"
+    "-Dsysconfdir=${placeholder "out"}/etc"
+    "-Ddbus_service_dir=${placeholder "out"}/share/dbus-1/system-services"
+    "-Dsystemd_system_unit_dir=${placeholder "out"}/lib/systemd/system"
+  ];
+
+  PKG_CONFIG_DBUS_1_INTERFACES_DIR = "${placeholder "out"}/share/dbus-1/interfaces";
+  PKG_CONFIG_POLKIT_GOBJECT_1_POLICYDIR = "${placeholder "out"}/share/polkit-1/actions";
+  PKG_CONFIG_DBUS_1_DATADIR = "${placeholder "out"}/share";
+
+  # FIXME: Ugly hack for tests to find libpam_wrapper.so
+  LIBRARY_PATH = stdenv.lib.makeLibraryPath [ python3.pkgs.pypamtest ];
+
+  doCheck = true;
+
+  postPatch = ''
+    patchShebangs po/check-translations.sh
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://fprint.freedesktop.org/";
+    description = "D-Bus daemon that offers libfprint functionality over the D-Bus interprocess communication bus";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar elyhaka ];
+  };
+}
diff --git a/users/glittershark/pkgs/fprintd/libfprint-tod-clean.nix b/users/glittershark/pkgs/fprintd/libfprint-tod-clean.nix
new file mode 100644
index 0000000000..17a4af4505
--- /dev/null
+++ b/users/glittershark/pkgs/fprintd/libfprint-tod-clean.nix
@@ -0,0 +1,81 @@
+{ stdenv
+, pkgs
+, fetchFromGitLab
+, fetchurl
+, pkgconfig
+, meson
+, ninja
+, libusb
+, gusb
+, pixman
+, gobject-introspection
+, glib
+, nss
+, gtk3
+, python3
+, umockdev
+, coreutils
+, gtk-doc
+, docbook_xsl
+, docbook_xml_dtd_43
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libfprint";
+  version = "1.90.2";
+  outputs = [ "out" "devdoc" ];
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "3v1n0";
+    repo = "libfprint";
+    rev = "0e123d0752538d834ee2cca8b471373369ad5e89";
+    sha256 = "11yl3nikdyykamafqf3ys1wg7zx3rb81lf11ndd8sf9rkwwfgpn6";
+  };
+
+  checkInputs = [ (python3.withPackages (ps: with ps; [ pycairo gobject ])) umockdev ];
+
+  nativeBuildInputs = [
+    pkgconfig
+    meson
+    gobject-introspection
+    ninja
+    gtk-doc
+    docbook_xsl
+    docbook_xml_dtd_43
+  ];
+
+  buildInputs = [
+    libusb
+    gusb
+    pixman
+    glib
+    nss
+    gtk3
+  ];
+
+  mesonFlags = [
+    "-Dudev_rules_dir=${placeholder "out"}/lib/udev/rules.d"
+    "-Dx11-examples=false"
+  ];
+
+  doChecks = true;
+
+  checkPhase = ''
+    meson test -C build --print-errorlogs
+  '';
+
+  postPatch = ''
+    substituteInPlace libfprint/meson.build \
+      --replace /bin/echo ${coreutils}/bin/echo
+  '';
+
+
+  meta = with stdenv.lib; {
+    homepage = https://fprint.freedesktop.org/;
+    description = "A library designed to make it easy to add support for consumer fingerprint readers";
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jobojeha ];
+  };
+}
diff --git a/users/glittershark/pkgs/fprintd/libfprint-tod-goodix.nix b/users/glittershark/pkgs/fprintd/libfprint-tod-goodix.nix
new file mode 100644
index 0000000000..f6d7d4ea98
--- /dev/null
+++ b/users/glittershark/pkgs/fprintd/libfprint-tod-goodix.nix
@@ -0,0 +1,47 @@
+{ stdenv
+, pkgs
+, fetchgit
+, libfprint-tod ? (pkgs.callPackage ./libfprint-tod-clean.nix {})
+, git
+, autoPatchelfHook
+, libusb
+, glibc
+,
+}:
+stdenv.mkDerivation rec {
+  pname = "libfprint-2-tod1-xps9300-bin";
+  version = "0.0.6";
+
+  src = fetchgit {
+    url = "git://git.launchpad.net/~oem-solutions-engineers/libfprint-2-tod1-goodix/+git/libfprint-2-tod1-goodix/";
+    rev = "882735c6366fbe30149eea5cfd6d0ddff880f0e4";
+    sha256 = "1x9h5x027s2avdhjhnfmmhdpgyf9x79fz8skcjd3rm3phnpr3zsj";
+  };
+
+  buildInputs = [
+    libfprint-tod
+    git
+    libusb
+    autoPatchelfHook
+    glibc
+  ];
+
+  installPhase = ''
+    install -dm 755 "$out/lib/udev/rules.d/"
+    install -dm 755 "$out/usr/lib/libfprint-2/tod-1/"
+
+    sed -n -r '/Shenzhen/,/^\s*$/p' debian/copyright > LICENSE
+    install -Dm644 LICENSE "$out/usr/share/licenses/libfprint-2-tod1-xps9300-bin/LICENSE"
+
+    install -Dm 755 usr/lib/x86_64-linux-gnu/libfprint-2/tod-1/libfprint-tod-goodix-53xc-0.0.6.so "$out/usr/lib/libfprint-2/tod-1/"
+    install -Dm 0755 lib/udev/rules.d/60-libfprint-2-tod1-goodix.rules "$out/lib/udev/rules.d/"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://git.launchpad.net/~oem-solutions-engineers/libfprint-2-tod1-goodix/+git/libfprint-2-tod1-goodix";
+    description = "Goodix driver module for libfprint-2 Touch OEM Driver";
+    license = licenses.unfreeRedistributable;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jobojeha ];
+  };
+}
diff --git a/users/glittershark/pkgs/fprintd/libfprint-tod.nix b/users/glittershark/pkgs/fprintd/libfprint-tod.nix
new file mode 100644
index 0000000000..70c5d6d367
--- /dev/null
+++ b/users/glittershark/pkgs/fprintd/libfprint-tod.nix
@@ -0,0 +1,89 @@
+{ stdenv
+, pkgs
+, fetchFromGitLab
+, fetchurl
+, pkgconfig
+, meson
+, ninja
+, libusb
+, gusb
+, pixman
+, gobject-introspection
+, glib
+, nss
+, gtk3
+, python3
+, umockdev
+, coreutils
+, gtk-doc
+, docbook_xsl
+, docbook_xml_dtd_43
+, libfprint-tod-goodix ? (pkgs.callPackage ./libfprint-tod-goodix.nix {})
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libfprint";
+  version = "1.90.2";
+  outputs = [ "out" "devdoc" ];
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "3v1n0";
+    repo = "libfprint";
+    rev = "0e123d0752538d834ee2cca8b471373369ad5e89";
+    sha256 = "11yl3nikdyykamafqf3ys1wg7zx3rb81lf11ndd8sf9rkwwfgpn6";
+  };
+
+  checkInputs = [ (python3.withPackages (ps: with ps; [ pycairo gobject ])) umockdev ];
+
+  nativeBuildInputs = [
+    pkgconfig
+    meson
+    gobject-introspection
+    ninja
+    gtk-doc
+    docbook_xsl
+    docbook_xml_dtd_43
+  ];
+
+  buildInputs = [
+    libusb
+    gusb
+    pixman
+    glib
+    nss
+    gtk3
+    libfprint-tod-goodix
+  ];
+
+  mesonFlags = [
+    "-Dudev_rules_dir=${placeholder "out"}/lib/udev/rules.d"
+    "-Dx11-examples=false"
+  ];
+
+  doChecks = true;
+
+  checkPhase = ''
+    meson test -C build --print-errorlogs
+  '';
+
+  postPatch = ''
+    substituteInPlace libfprint/meson.build \
+      --replace /bin/echo ${coreutils}/bin/echo
+  '';
+
+  postInstall = ''
+    mkdir -p $out/lib/libfprint-2/tod-1/
+    ln -s ${libfprint-tod-goodix}/usr/lib/libfprint-2/tod-1/libfprint-tod-goodix-53xc-0.0.6.so $out/lib/libfprint-2/tod-1/
+    ln -s ${libfprint-tod-goodix}/lib/udev/rules.d/60-libfprint-2-tod1-goodix.rules $out/lib/udev/rules.d/
+
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://fprint.freedesktop.org/;
+    description = "A library designed to make it easy to add support for consumer fingerprint readers";
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jobojeha ];
+  };
+}
diff --git a/users/glittershark/system/system/default.nix b/users/glittershark/system/system/default.nix
index a9eb4a130a..174ccfb360 100644
--- a/users/glittershark/system/system/default.nix
+++ b/users/glittershark/system/system/default.nix
@@ -16,7 +16,13 @@ rec {
   yeren = import ./machines/yeren.nix;
 
   yerenSystem = (pkgs.nixos {
-    configuration = yeren;
+    configuration = { ... }: {
+      imports = [
+        ./machines/yeren.nix
+        "${depot.depotPath}/ops/nixos/depot.nix"
+      ];
+      inherit depot;
+    };
   }).system;
 
   iso = import ./iso.nix args;
diff --git a/users/glittershark/system/system/machines/yeren.nix b/users/glittershark/system/system/machines/yeren.nix
index 97298ac0ac..c8d7aa2dbe 100644
--- a/users/glittershark/system/system/machines/yeren.nix
+++ b/users/glittershark/system/system/machines/yeren.nix
@@ -8,6 +8,8 @@
     ../modules/xserver.nix
     ../modules/fonts.nix
     ../modules/sound.nix
+    ../modules/tvl.nix
+    ../modules/development.nix
   ];
 
   networking.hostName = "yeren";
@@ -69,4 +71,18 @@
     libvdpau-va-gl
     intel-media-driver
   ];
+
+  services.fprintd = {
+    enable = true;
+    package = config.depot.users.glittershark.pkgs.fprintd;
+  };
+
+  security.pam.services = {
+    login.fprintAuth = true;
+    sudo.fprintAuth = true;
+    i3lock.fprintAuth = false;
+    i3lock-color.fprintAuth = false;
+    lightdm.fprintAuth = true;
+    lightdm-greeter.fprintAuth = true;
+  };
 }