From f43c02c7ff649a0594937b5b99c4276d9d89b61f Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Tue, 22 Sep 2020 20:14:14 -0400 Subject: [PATCH 1/5] system76-firmware: Init at 1.0.17 --- .../firmware/system76-firmware/default.nix | 39 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 41 insertions(+) create mode 100644 pkgs/os-specific/linux/firmware/system76-firmware/default.nix diff --git a/pkgs/os-specific/linux/firmware/system76-firmware/default.nix b/pkgs/os-specific/linux/firmware/system76-firmware/default.nix new file mode 100644 index 00000000000..40598abac92 --- /dev/null +++ b/pkgs/os-specific/linux/firmware/system76-firmware/default.nix @@ -0,0 +1,39 @@ +{ rustPlatform, lib, fetchFromGitHub, lzma, pkgconfig, openssl, dbus, efibootmgr, makeWrapper }: +rustPlatform.buildRustPackage rec { + pname = "system76-firmware"; + # Check Makefile when updating, make sure postInstall matches make install + version = "1.0.17"; + + src = fetchFromGitHub { + owner = "pop-os"; + repo = pname; + rev = version; + sha256 = "0cnrskfk3sam90lfpgsraqs4bx9yz8rxhwfs8rxdri04lakxgghg"; + }; + + nativeBuildInputs = [ pkgconfig makeWrapper ]; + + buildInputs = [ lzma openssl dbus ]; + + cargoBuildFlags = [ "--workspace" ]; + + cargoSha256 = "06jrmxy68glcmbn9px29wc0s8pqdn26iy4jn3c246dapv1zvbb4s"; + + # Purposefully don't install systemd unit file, that's for NixOS + postInstall = '' + install -D -m -0644 data/system76-firmware-daemon.conf $out/etc/dbus-1/system.d/system76-firmware-daemon.conf + + for bin in $out/bin/system76-firmware-* + do + wrapProgram $bin --prefix PATH : "${efibootmgr}/bin" + done + ''; + + meta = { + description = "Tools for managing firmware updates for system76 devices."; + homepage = "https://github.com/pop-os/system76-firmware"; + license = lib.licenses.gpl3; + maintainers = [ lib.maintainers.shlevy ]; + platforms = lib.platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8e20b70276e..3917c8d10ff 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -18276,6 +18276,8 @@ in nvme-cli = callPackage ../os-specific/linux/nvme-cli { }; + system76-firmware = callPackage ../os-specific/linux/firmware/system76-firmware { }; + open-vm-tools = callPackage ../applications/virtualization/open-vm-tools { }; open-vm-tools-headless = open-vm-tools.override { withX = false; }; From b694eb6e6a0e27c159345ac9651f80ed28fe1a2f Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Wed, 23 Sep 2020 06:01:05 -0400 Subject: [PATCH 2/5] firmware-manager: Init at 0.1.1 --- pkgs/build-support/rust/default.nix | 8 ++-- .../firmware/firmware-manager/default.nix | 38 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 3 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 pkgs/os-specific/linux/firmware/firmware-manager/default.nix diff --git a/pkgs/build-support/rust/default.nix b/pkgs/build-support/rust/default.nix index 23fb56539e4..0103e064828 100644 --- a/pkgs/build-support/rust/default.nix +++ b/pkgs/build-support/rust/default.nix @@ -29,7 +29,7 @@ , target ? null , cargoVendorDir ? null , checkType ? buildType - +, depsExtraArgs ? {} # Needed to `pushd`/`popd` into a subdir of a tarball if this subdir # contains a Cargo.toml, but isn't part of a workspace (which is e.g. the # case for `rustfmt`/etc from the `rust-sources). @@ -43,11 +43,11 @@ assert buildType == "release" || buildType == "debug"; let cargoDeps = if cargoVendorDir == null - then fetchCargoTarball { + then fetchCargoTarball ({ inherit name src srcs sourceRoot unpackPhase cargoUpdateHook; patches = cargoPatches; sha256 = cargoSha256; - } + } // depsExtraArgs) else null; # If we have a cargoSha256 fixed-output derivation, validate it at build time @@ -83,7 +83,7 @@ let in -stdenv.mkDerivation (args // { +stdenv.mkDerivation ((removeAttrs args ["depsExtraArgs"]) // { inherit cargoDeps; patchRegistryDeps = ./patch-registry-deps; diff --git a/pkgs/os-specific/linux/firmware/firmware-manager/default.nix b/pkgs/os-specific/linux/firmware/firmware-manager/default.nix new file mode 100644 index 00000000000..e98de6bbe9e --- /dev/null +++ b/pkgs/os-specific/linux/firmware/firmware-manager/default.nix @@ -0,0 +1,38 @@ +{ rustPlatform, lib, fetchFromGitHub, lzma, pkgconfig, openssl, dbus, glib, udev, cairo, pango, atk, gdk-pixbuf, gtk3, wrapGAppsHook }: +rustPlatform.buildRustPackage rec { + pname = "firmware-manager"; + version = "0.1.1"; + + src = fetchFromGitHub { + owner = "pop-os"; + repo = pname; + rev = version; + sha256 = "0x9604jsflqxvbkfp139mzjicpyx8v21139jj8bp88c14ngvmdlw"; + }; + + nativeBuildInputs = [ pkgconfig wrapGAppsHook ]; + + buildInputs = [ lzma openssl dbus glib udev cairo pango atk gdk-pixbuf gtk3 ]; + + depsExtraArgs.postPatch = "make prefix='$(out)' toml-gen"; + + postPatch = '' + sed -i 's|etc|$(prefix)/etc|' Makefile + ''; + + buildPhase = "make prefix='$(out)'"; + + installPhase = "make prefix='$(out)' install"; + + cargoSha256 = "0byc0pqa1w2qnfrx3psrzdq1c8qjslbmzxg872b9v6fr5d4c9cvg"; + + doCheck = false; + + meta = { + description = "Graphical frontend for firmware management"; + homepage = "https://github.com/pop-os/firmware-manager"; + license = lib.licenses.gpl3; + maintainers = [ lib.maintainers.shlevy ]; + platforms = lib.platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3917c8d10ff..ac888444f59 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -17468,6 +17468,8 @@ in fwupd = callPackage ../os-specific/linux/firmware/fwupd { }; + firmware-manager = callPackage ../os-specific/linux/firmware/firmware-manager { }; + fwts = callPackage ../os-specific/linux/fwts { }; gobi_loader = callPackage ../os-specific/linux/gobi_loader { }; From 452fda1d7ef7875367abbd9a530e7e98e1239835 Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Wed, 23 Sep 2020 06:27:38 -0400 Subject: [PATCH 3/5] linuxPackages.system76: Install hwdb rules --- pkgs/os-specific/linux/system76/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/os-specific/linux/system76/default.nix b/pkgs/os-specific/linux/system76/default.nix index be6c1f6c3ad..02eca1d5bbd 100644 --- a/pkgs/os-specific/linux/system76/default.nix +++ b/pkgs/os-specific/linux/system76/default.nix @@ -25,6 +25,8 @@ stdenv.mkDerivation { installPhase = '' install -D system76.ko $out/lib/modules/${kernel.modDirVersion}/misc/system76.ko + mkdir -p $out/lib/udev/hwdb.d + mv lib/udev/hwdb.d/* $out/lib/udev/hwdb.d ''; meta = with stdenv.lib; { From 9f43146ec4c8273d4ae3872611a7594dd430b93c Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Wed, 23 Sep 2020 06:33:36 -0400 Subject: [PATCH 4/5] linuxPackages.system76-acpi: Install hwdb rules --- pkgs/os-specific/linux/system76-acpi/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/os-specific/linux/system76-acpi/default.nix b/pkgs/os-specific/linux/system76-acpi/default.nix index e97e17784cb..b7c0e27669d 100644 --- a/pkgs/os-specific/linux/system76-acpi/default.nix +++ b/pkgs/os-specific/linux/system76-acpi/default.nix @@ -25,6 +25,8 @@ stdenv.mkDerivation { installPhase = '' install -D system76_acpi.ko $out/lib/modules/${kernel.modDirVersion}/misc/system76_acpi.ko + mkdir -p $out/lib/udev/hwdb.d + mv lib/udev/hwdb.d/* $out/lib/udev/hwdb.d ''; meta = with stdenv.lib; { From 4b1850bad3c8cba93ffb12041da1a530cbe03c6d Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Wed, 23 Sep 2020 06:44:40 -0400 Subject: [PATCH 5/5] Add system76 NixOS module --- nixos/modules/hardware/system-76.nix | 56 ++++++++++++++++++++++++++++ nixos/modules/module-list.nix | 1 + 2 files changed, 57 insertions(+) create mode 100644 nixos/modules/hardware/system-76.nix diff --git a/nixos/modules/hardware/system-76.nix b/nixos/modules/hardware/system-76.nix new file mode 100644 index 00000000000..48eb63f4f22 --- /dev/null +++ b/nixos/modules/hardware/system-76.nix @@ -0,0 +1,56 @@ +{ config, lib, pkgs, ... }: + +let + inherit (lib) mkOption mkEnableOption types mkIf mkMerge optional versionOlder; + cfg = config.hardware.system76; + + kpkgs = config.boot.kernelPackages; + modules = [ "system76" "system76-io" ] ++ (optional (versionOlder kpkgs.kernel.version "5.5") "system76-acpi"); + modulePackages = map (m: kpkgs.${m}) modules; + moduleConfig = mkIf cfg.kernel-modules.enable { + boot.extraModulePackages = modulePackages; + + boot.kernelModules = modules; + + services.udev.packages = modulePackages; + }; + + firmware-pkg = pkgs.system76-firmware; + firmwareConfig = mkIf cfg.firmware-daemon.enable { + services.dbus.packages = [ firmware-pkg ]; + + systemd.services.system76-firmware-daemon = { + description = "The System76 Firmware Daemon"; + + serviceConfig = { + ExecStart = "${firmware-pkg}/bin/system76-firmware-daemon"; + + Restart = "on-failure"; + }; + + wantedBy = [ "multi-user.target" ]; + }; + }; +in { + options = { + hardware.system76 = { + enableAll = mkEnableOption "all recommended configuration for system76 systems"; + + firmware-daemon.enable = mkOption { + default = cfg.enableAll; + example = true; + description = "Whether to enable the system76 firmware daemon"; + type = types.bool; + }; + + kernel-modules.enable = mkOption { + default = cfg.enableAll; + example = true; + description = "Whether to make the system76 out-of-tree kernel modules available"; + type = types.bool; + }; + }; + }; + + config = mkMerge [ moduleConfig firmwareConfig ]; +} diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index e7e5fbb4f3f..96529424e8f 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -60,6 +60,7 @@ ./hardware/printers.nix ./hardware/raid/hpsa.nix ./hardware/steam-hardware.nix + ./hardware/system-76.nix ./hardware/tuxedo-keyboard.nix ./hardware/usb-wwan.nix ./hardware/onlykey.nix