summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nixos/modules/hardware/system-76.nix56
-rw-r--r--nixos/modules/module-list.nix1
-rw-r--r--pkgs/build-support/rust/default.nix8
-rw-r--r--pkgs/os-specific/linux/firmware/firmware-manager/default.nix38
-rw-r--r--pkgs/os-specific/linux/firmware/system76-firmware/default.nix39
-rw-r--r--pkgs/os-specific/linux/system76-acpi/default.nix2
-rw-r--r--pkgs/os-specific/linux/system76/default.nix2
-rw-r--r--pkgs/top-level/all-packages.nix4
8 files changed, 146 insertions, 4 deletions
diff --git a/nixos/modules/hardware/system-76.nix b/nixos/modules/hardware/system-76.nix
new file mode 100644
index 000000000000..48eb63f4f22d
--- /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 e7e5fbb4f3f2..96529424e8f1 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
diff --git a/pkgs/build-support/rust/default.nix b/pkgs/build-support/rust/default.nix
index 23fb56539e45..0103e064828b 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 000000000000..e98de6bbe9e8
--- /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/os-specific/linux/firmware/system76-firmware/default.nix b/pkgs/os-specific/linux/firmware/system76-firmware/default.nix
new file mode 100644
index 000000000000..40598abac921
--- /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/os-specific/linux/system76-acpi/default.nix b/pkgs/os-specific/linux/system76-acpi/default.nix
index e97e17784cbf..b7c0e27669da 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; {
diff --git a/pkgs/os-specific/linux/system76/default.nix b/pkgs/os-specific/linux/system76/default.nix
index be6c1f6c3ad6..02eca1d5bbd5 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; {
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index ef348253cc6a..02d59362e0be 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -17474,6 +17474,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 { };
@@ -18282,6 +18284,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; };