Переглянути джерело

Merge branch 'system76-firmware-and-nixos-20.09' into release-20.09

wip-nanopi-m4v2
Shea Levy 6 роки тому
джерело
коміт
1991ea85b1
Не вдалося знайти GPG ключ що відповідає даному підпису Ідентифікатор GPG ключа: 5C0BD6957D86FE27
9 змінених файлів з 273 додано та 4 видалено
  1. +56
    -0
      nixos/modules/hardware/system-76.nix
  2. +1
    -0
      nixos/modules/module-list.nix
  3. +4
    -4
      pkgs/build-support/rust/default.nix
  4. +38
    -0
      pkgs/os-specific/linux/firmware/firmware-manager/default.nix
  5. +39
    -0
      pkgs/os-specific/linux/firmware/system76-firmware/default.nix
  6. +43
    -0
      pkgs/os-specific/linux/system76-acpi/default.nix
  7. +38
    -0
      pkgs/os-specific/linux/system76-io/default.nix
  8. +44
    -0
      pkgs/os-specific/linux/system76/default.nix
  9. +10
    -0
      pkgs/top-level/all-packages.nix

+ 56
- 0
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 ];
}

+ 1
- 0
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


+ 4
- 4
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;


+ 38
- 0
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;
};
}

+ 39
- 0
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;
};
}

+ 43
- 0
pkgs/os-specific/linux/system76-acpi/default.nix Переглянути файл

@@ -0,0 +1,43 @@
{ stdenv, fetchFromGitHub, kernel }:
let
version = "1.0.1";
sha256 = "0jmm9h607f7k20yassm6af9mh5l00yih5248wwv4i05bd68yw3p5";
in
stdenv.mkDerivation {
name = "system76-acpi-module-${version}-${kernel.version}";

passthru.moduleName = "system76_acpi";

src = fetchFromGitHub {
owner = "pop-os";
repo = "system76-acpi-dkms";
rev = version;
inherit sha256;
};

hardeningDisable = [ "pic" ];

nativeBuildInputs = kernel.moduleBuildDependencies;

buildFlags = [
"KERNEL_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
];

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; {
maintainers = [ maintainers.khumba ];
license = [ licenses.gpl2Only ];
platforms = [ "i686-linux" "x86_64-linux" ];
broken = versionOlder kernel.version "4.14";
description = "System76 ACPI Driver (DKMS)";
homepage = "https://github.com/pop-os/system76-acpi-dkms";
longDescription = ''
This provides the system76_acpi in-tree driver for systems missing it.
'';
};
}

+ 38
- 0
pkgs/os-specific/linux/system76-io/default.nix Переглянути файл

@@ -0,0 +1,38 @@
{ stdenv, fetchFromGitHub, kernel }:
let
version = "1.0.1";
sha256 = "0qkgkkjy1isv6ws6hrcal75dxjz98rpnvqbm7agdcc6yv0c17wwh";
in
stdenv.mkDerivation {
name = "system76-io-module-${version}-${kernel.version}";

passthru.moduleName = "system76_io";

src = fetchFromGitHub {
owner = "pop-os";
repo = "system76-io-dkms";
rev = version;
inherit sha256;
};

hardeningDisable = [ "pic" ];

nativeBuildInputs = kernel.moduleBuildDependencies;

buildFlags = [
"KERNEL_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
];

installPhase = ''
install -D system76-io.ko $out/lib/modules/${kernel.modDirVersion}/misc/system76-io.ko
'';

meta = with stdenv.lib; {
maintainers = [ maintainers.khumba ];
license = [ licenses.gpl2Plus ];
platforms = [ "i686-linux" "x86_64-linux" ];
broken = versionOlder kernel.version "4.14";
description = "DKMS module for controlling System76 I/O board";
homepage = "https://github.com/pop-os/system76-io-dkms";
};
}

+ 44
- 0
pkgs/os-specific/linux/system76/default.nix Переглянути файл

@@ -0,0 +1,44 @@
{ stdenv, fetchFromGitHub, kernel }:
let
version = "1.0.9";
sha256 = "0i4825y2vd679kdjv30ifzj1i1066d3x37z4lgk39hx16993k162";
in
stdenv.mkDerivation {
name = "system76-module-${version}-${kernel.version}";

passthru.moduleName = "system76";

src = fetchFromGitHub {
owner = "pop-os";
repo = "system76-dkms";
rev = version;
inherit sha256;
};

hardeningDisable = [ "pic" ];

nativeBuildInputs = kernel.moduleBuildDependencies;

buildFlags = [
"KERNEL_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
];

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; {
maintainers = [ maintainers.khumba ];
license = [ licenses.gpl2Plus ];
platforms = [ "i686-linux" "x86_64-linux" ];
broken = versionOlder kernel.version "4.14";
description = "System76 DKMS driver";
homepage = "https://github.com/pop-os/system76-dkms";
longDescription = ''
The System76 DKMS driver. On newer System76 laptops, this driver controls
some of the hotkeys and allows for custom fan control.
'';
};
}

+ 10
- 0
pkgs/top-level/all-packages.nix Переглянути файл

@@ -17304,6 +17304,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 { };
@@ -17811,6 +17813,12 @@ in

systemtap = callPackage ../development/tools/profiling/systemtap { };

system76 = callPackage ../os-specific/linux/system76 { };

system76-acpi = callPackage ../os-specific/linux/system76-acpi { };

system76-io = callPackage ../os-specific/linux/system76-io { };

tmon = callPackage ../os-specific/linux/tmon { };

tp_smapi = callPackage ../os-specific/linux/tp_smapi { };
@@ -18104,6 +18112,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; };



Завантаження…
Відмінити
Зберегти