feat: integrate into t2 module
This commit is contained in:
parent
bb215e68e5
commit
c8cd4f7ef4
|
@ -10,7 +10,7 @@ You can consult the [wiki](https://wiki.t2linux.org/) for information specific t
|
||||||
|
|
||||||
## Unlocking Internal iGPU
|
## Unlocking Internal iGPU
|
||||||
|
|
||||||
The `apple-set-os-loader-installer.nix` module serves as an installer for the [`apple-set-os-loader`](https://github.com/Redecorating/apple_set_os-loader). This tool is designed to unlock the internal integrated GPU (iGPU) on certain MacBooks. See https://wiki.t2linux.org/guides/hybrid-graphics/ for more details.
|
The `apple-set-os-loader-installer` module serves as an installer for the [`apple-set-os-loader`](https://github.com/Redecorating/apple_set_os-loader). This tool is designed to unlock the internal integrated GPU (iGPU) on certain MacBooks. See https://wiki.t2linux.org/guides/hybrid-graphics/ for more details.
|
||||||
|
|
||||||
### What it Does:
|
### What it Does:
|
||||||
|
|
||||||
|
@ -22,12 +22,9 @@ Upon activation, this module performs the following:
|
||||||
|
|
||||||
### How to Implement:
|
### How to Implement:
|
||||||
|
|
||||||
1. **Integrate the apple-set-os-loader installer** into your `configuration.nix`:
|
1. Add this into your `configuration.nix`:
|
||||||
```
|
```
|
||||||
imports = [
|
appleT2Config.enableAppleSetOsLoader = true;
|
||||||
...
|
|
||||||
"${builtins.fetchGit { url = "https://github.com/NixOS/nixos-hardware.git"; }}/apple/t2/apple-set-os-loader-installer.nix"
|
|
||||||
];
|
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Rebuild your system**:
|
2. **Rebuild your system**:
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
{ config, pkgs, ... }:
|
|
||||||
let
|
|
||||||
apple-set-os-loader-installer = pkgs.stdenv.mkDerivation rec {
|
|
||||||
name = "apple-set-os-loader-installer-1.0";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "Redecorating";
|
|
||||||
repo = "apple_set_os-loader";
|
|
||||||
rev = "r33.9856dc4";
|
|
||||||
sha256 = "hvwqfoF989PfDRrwU0BMi69nFjPeOmSaD6vR6jIRK2Y=";
|
|
||||||
};
|
|
||||||
buildInputs = [ pkgs.gnu-efi ];
|
|
||||||
buildPhase = ''
|
|
||||||
substituteInPlace Makefile --replace "/usr" '$(GNU_EFI)'
|
|
||||||
export GNU_EFI=${pkgs.gnu-efi}
|
|
||||||
make
|
|
||||||
'';
|
|
||||||
installPhase = ''
|
|
||||||
install -D bootx64_silent.efi $out/bootx64.efi
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
system.activationScripts.hybrid-graphics = {
|
|
||||||
text = ''
|
|
||||||
if [[ -e /boot/efi/EFI/BOOT/bootx64_original.efi ]]; then
|
|
||||||
# We interpret this as apple-set-os-loader being already installed
|
|
||||||
exit 0
|
|
||||||
elif [[ -e /boot/efi/EFI/BOOT/BOOTX64.EFI ]] then
|
|
||||||
mv /boot/efi/EFI/BOOT/BOOTX64.EFI /boot/efi/EFI/BOOT/bootx64_original.efi
|
|
||||||
cp ${apple-set-os-loader-installer}/bootx64.efi /boot/efi/EFI/BOOT/bootx64.efi
|
|
||||||
else
|
|
||||||
echo "Error: /boot/efi/EFI/BOOT/BOOTX64.EFI is missing"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
environment.etc."modprobe.d/apple-gmux.conf".text = ''
|
|
||||||
# Enable the iGPU by default if present
|
|
||||||
options apple-gmux force_igd=y
|
|
||||||
'';
|
|
||||||
environment.systemPackages = with pkgs; [ apple-set-os-loader-installer ];
|
|
||||||
}
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
audioFiles = pkgs.fetchFromGitHub {
|
audioFiles = pkgs.fetchFromGitHub {
|
||||||
|
@ -11,45 +11,85 @@ let
|
||||||
overrideAudioFiles = package: pluginsPath:
|
overrideAudioFiles = package: pluginsPath:
|
||||||
package.overrideAttrs (new: old: {
|
package.overrideAttrs (new: old: {
|
||||||
preConfigurePhases = old.preConfigurePhases or [ ] ++ [ "postPatchPhase" ];
|
preConfigurePhases = old.preConfigurePhases or [ ] ++ [ "postPatchPhase" ];
|
||||||
|
|
||||||
postPatchPhase = ''
|
postPatchPhase = ''
|
||||||
cp -r ${audioFiles}/files/{profile-sets,paths} ${pluginsPath}/alsa/mixer/
|
cp -r ${audioFiles}/files/{profile-sets,paths} ${pluginsPath}/alsa/mixer/
|
||||||
'';
|
'';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
pipewirePackage = overrideAudioFiles pkgs.pipewire "spa/plugins/";
|
||||||
|
|
||||||
|
apple-set-os-loader-installer = pkgs.stdenv.mkDerivation rec {
|
||||||
|
name = "apple-set-os-loader-installer-1.0";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "Redecorating";
|
||||||
|
repo = "apple_set_os-loader";
|
||||||
|
rev = "r33.9856dc4";
|
||||||
|
sha256 = "hvwqfoF989PfDRrwU0BMi69nFjPeOmSaD6vR6jIRK2Y=";
|
||||||
|
};
|
||||||
|
buildInputs = [ pkgs.gnu-efi ];
|
||||||
|
buildPhase = ''
|
||||||
|
substituteInPlace Makefile --replace "/usr" '$(GNU_EFI)'
|
||||||
|
export GNU_EFI=${pkgs.gnu-efi}
|
||||||
|
make
|
||||||
|
'';
|
||||||
|
installPhase = ''
|
||||||
|
install -D bootx64_silent.efi $out/bootx64.efi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
t2Cfg = config.appleT2Config;
|
||||||
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# For keyboard and touchbar
|
options = {
|
||||||
boot.kernelPackages = with pkgs; recurseIntoAttrs (linuxPackagesFor (callPackage ./pkgs/linux-t2.nix { }));
|
appleT2Config.enableAppleSetOsLoader = lib.mkOption {
|
||||||
boot.initrd.kernelModules = [ "apple-bce" ];
|
default = false;
|
||||||
|
type = lib.types.bool;
|
||||||
# For audio
|
description = "Whether to enable the appleSetOsLoader activation script.";
|
||||||
boot.kernelParams = [ "pcie_ports=compat" "intel_iommu=on" "iommu=pt" ];
|
|
||||||
services.udev.extraRules = builtins.readFile (pkgs.substitute {
|
|
||||||
src = "${audioFiles}/files/91-audio-custom.rules";
|
|
||||||
replacements = [ "--replace" "/usr/bin/sed" "${pkgs.gnused}/bin/sed" ];
|
|
||||||
});
|
|
||||||
|
|
||||||
hardware.pulseaudio.package = overrideAudioFiles pkgs.pulseaudio "src/modules/";
|
|
||||||
|
|
||||||
services.pipewire = rec {
|
|
||||||
package = overrideAudioFiles pkgs.pipewire "spa/plugins/";
|
|
||||||
|
|
||||||
wireplumber.package = pkgs.wireplumber.override {
|
|
||||||
pipewire = package;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# Make sure post-resume.service exists
|
config = {
|
||||||
powerManagement.enable = true;
|
# For keyboard and touchbar
|
||||||
|
boot.kernelPackages = with pkgs; recurseIntoAttrs (linuxPackagesFor (callPackage ./pkgs/linux-t2.nix { }));
|
||||||
|
boot.initrd.kernelModules = [ "apple-bce" ];
|
||||||
|
|
||||||
systemd.services.fix-keyboard-backlight-and-touchbar = {
|
# For audio
|
||||||
path = [ pkgs.kmod ];
|
boot.kernelParams = [ "pcie_ports=compat" "intel_iommu=on" "iommu=pt" ];
|
||||||
serviceConfig.ExecStart = ''${pkgs.systemd}/bin/systemd-inhibit --what=sleep --why="fixing keyboard backlight and touchbar must finish before sleep" --mode=delay ${./fix-keyboard-backlight-and-touchbar.sh}'';
|
services.udev.extraRules = builtins.readFile (pkgs.substitute {
|
||||||
serviceConfig.Type = "oneshot";
|
src = "${audioFiles}/files/91-audio-custom.rules";
|
||||||
description = "reload touchbar driver and restart upower";
|
replacements = [ "--replace" "/usr/bin/sed" "${pkgs.gnused}/bin/sed" ];
|
||||||
# must run at boot (and not too early), and after suspend
|
});
|
||||||
wantedBy = [ "display-manager.service" "post-resume.target" ];
|
|
||||||
# prevent running before suspend
|
hardware.pulseaudio.package = overrideAudioFiles pkgs.pulseaudio "src/modules/";
|
||||||
after = [ "post-resume.target" ];
|
|
||||||
|
services.pipewire.package = pipewirePackage;
|
||||||
|
services.pipewire.wireplumber.package = pkgs.wireplumber.override {
|
||||||
|
pipewire = pipewirePackage;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Make sure post-resume.service exists
|
||||||
|
powerManagement.enable = true;
|
||||||
|
|
||||||
|
systemd.services.fix-keyboard-backlight-and-touchbar = {
|
||||||
|
path = [ pkgs.kmod ];
|
||||||
|
serviceConfig.ExecStart = ''${pkgs.systemd}/bin/systemd-inhibit --what=sleep --why="fixing keyboard backlight and touchbar must finish before sleep" --mode=delay ${./fix-keyboard-backlight-and-touchbar.sh}'';
|
||||||
|
serviceConfig.Type = "oneshot";
|
||||||
|
description = "reload touchbar driver and restart upower";
|
||||||
|
wantedBy = [ "display-manager.service" "post-resume.target" ];
|
||||||
|
after = [ "post-resume.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Activation script to install apple-set-os-loader in order to unlock the iGPU
|
||||||
|
system.activationScripts.appleSetOsLoader = lib.optionalString t2Cfg.enableAppleSetOsLoader ''
|
||||||
|
if [[ -e /boot/efi/EFI/BOOT/bootx64_original.efi ]]; then
|
||||||
|
true # It's already installed, no action required
|
||||||
|
elif [[ -e /boot/efi/EFI/BOOT/BOOTX64.EFI ]]; then
|
||||||
|
mv /boot/efi/EFI/BOOT/BOOTX64.EFI /boot/efi/EFI/BOOT/bootx64_original.efi
|
||||||
|
cp ${apple-set-os-loader-installer}/bootx64.efi /boot/efi/EFI/BOOT/bootx64.efi
|
||||||
|
else
|
||||||
|
echo "Error: /boot/efi/EFI/BOOT/BOOTX64.EFI is missing" >&2
|
||||||
|
fi
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue