630: starfive visionfive2: update kernel to 6.4.0 r=Mic92 a=NickCao 649: macbook-air-6: remove mba6x_bl kernel module r=Mic92 a=DanielSiepmann 650: apple/t2: init r=Mic92 a=networkException 652: build(deps): bump cachix/install-nix-action from 21 to 22 r=Mic92 a=dependabot[bot] 654: fixing iptsd not able to find DEVICE r=Mic92 a=buttergrillcorn 656: treewide: avoid alias usage for intel-vaapi-driver based on nixos version r=Mic92 a=lilyinstarlight 657: Added more blocked Nvidia kernel modules to fix the dGPU not being disabled r=Mic92 a=spacebanana420 Co-authored-by: Nick Cao <nickcao@nichi.co> Co-authored-by: Daniel Siepmann <coding@daniel-siepmann.de> Co-authored-by: kekrby <kekrby@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: buttergrillcorn <126628446+buttergrillcorn@users.noreply.github.com> Co-authored-by: Lily Foster <lily@lily.flowers> Co-authored-by: Space Banana <tomasbessa@protonmail.com>
This commit is contained in:
commit
47dca15d86
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
|
@ -7,7 +7,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: cachix/install-nix-action@v21
|
- uses: cachix/install-nix-action@v22
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- name: Show nixpkgs version
|
- name: Show nixpkgs version
|
||||||
|
|
|
@ -80,6 +80,7 @@ See code for all available configurations.
|
||||||
| [Apple MacBook Pro 11,5](apple/macbook-pro/11-5) | `<nixos-hardware/apple/macbook-pro/11-5>` |
|
| [Apple MacBook Pro 11,5](apple/macbook-pro/11-5) | `<nixos-hardware/apple/macbook-pro/11-5>` |
|
||||||
| [Apple MacBook Pro 12,1](apple/macbook-pro/12-1) | `<nixos-hardware/apple/macbook-pro/12-1>` |
|
| [Apple MacBook Pro 12,1](apple/macbook-pro/12-1) | `<nixos-hardware/apple/macbook-pro/12-1>` |
|
||||||
| [Apple MacBook Pro 14,1](apple/macbook-pro/14-1) | `<nixos-hardware/apple/macbook-pro/14-1>` |
|
| [Apple MacBook Pro 14,1](apple/macbook-pro/14-1) | `<nixos-hardware/apple/macbook-pro/14-1>` |
|
||||||
|
| [Apple Macs with a T2 Chip](apple/t2) | `<nixos-hardware/apple/t2>` |
|
||||||
| [Asus ROG Strix G733QS](asus/rog-strix/g733qs) | `<nixos-hardware/asus/rog-strix/g733qs>` |
|
| [Asus ROG Strix G733QS](asus/rog-strix/g733qs) | `<nixos-hardware/asus/rog-strix/g733qs>` |
|
||||||
| [Asus ROG Zephyrus G14 GA401](asus/zephyrus/ga401) | `<nixos-hardware/asus/zephyrus/ga401>` |
|
| [Asus ROG Zephyrus G14 GA401](asus/zephyrus/ga401) | `<nixos-hardware/asus/zephyrus/ga401>` |
|
||||||
| [Asus ROG Zephyrus G14 GA402](asus/zephyrus/ga402) | `<nixos-hardware/asus/zephyrus/ga402>` |
|
| [Asus ROG Zephyrus G14 GA402](asus/zephyrus/ga402) | `<nixos-hardware/asus/zephyrus/ga402>` |
|
||||||
|
|
|
@ -4,15 +4,11 @@
|
||||||
imports = [ ../. ];
|
imports = [ ../. ];
|
||||||
|
|
||||||
boot = {
|
boot = {
|
||||||
extraModulePackages = with config.boot.kernelPackages; [ mba6x_bl ];
|
|
||||||
kernelModules = [ "mba6x_bl" ];
|
|
||||||
|
|
||||||
# Divides power consumption by two.
|
# Divides power consumption by two.
|
||||||
kernelParams = [ "acpi_osi=" ];
|
kernelParams = [ "acpi_osi=" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
services.xserver.deviceSection = lib.mkDefault ''
|
services.xserver.deviceSection = lib.mkDefault ''
|
||||||
Option "Backlight" "mba6x_backlight"
|
|
||||||
Option "TearFree" "true"
|
Option "TearFree" "true"
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
9
apple/t2/README.md
Normal file
9
apple/t2/README.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
## NixOS on T2 Macs
|
||||||
|
|
||||||
|
This is the `nixos-hardware` module of the [T2 Linux Project](https://t2linux.org).
|
||||||
|
|
||||||
|
Overall, most features (WiFi, bluetooth, audio, touchbar, ...) of Macs are supported, [see this page](https://wiki.t2linux.org/state/) for a detailed list of things that work and things that don't/partially work.
|
||||||
|
|
||||||
|
Following [this guide](https://wiki.t2linux.org/distributions/nixos/installation/) is the recommended way to install, as it incudes the extra things you have to do on a T2 Mac.
|
||||||
|
|
||||||
|
You can consult the [wiki](https://wiki.t2linux.org/) for information specific to T2 Macs.
|
55
apple/t2/default.nix
Normal file
55
apple/t2/default.nix
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
audioFiles = pkgs.fetchFromGitHub {
|
||||||
|
owner = "kekrby";
|
||||||
|
repo = "t2-better-audio";
|
||||||
|
rev = "e46839a28963e2f7d364020518b9dac98236bcae";
|
||||||
|
hash = "sha256-x7K0qa++P1e1vuCGxnsFxL1d9+nwMtZUJ6Kd9e27TFs=";
|
||||||
|
};
|
||||||
|
|
||||||
|
overrideAudioFiles = package: pluginsPath:
|
||||||
|
package.overrideAttrs (new: old: {
|
||||||
|
preConfigurePhases = old.preConfigurePhases or [ ] ++ [ "postPatchPhase" ];
|
||||||
|
|
||||||
|
postPatchPhase = ''
|
||||||
|
cp -r ${audioFiles}/files/{profile-sets,paths} ${pluginsPath}/alsa/mixer/
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# For keyboard and touchbar
|
||||||
|
boot.kernelPackages = with pkgs; recurseIntoAttrs (linuxPackagesFor (callPackage ./pkgs/linux-t2.nix { }));
|
||||||
|
boot.initrd.kernelModules = [ "apple-bce" ];
|
||||||
|
|
||||||
|
# For audio
|
||||||
|
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
|
||||||
|
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";
|
||||||
|
# must run at boot (and not too early), and after suspend
|
||||||
|
wantedBy = [ "display-manager.service" "post-resume.target" ];
|
||||||
|
# prevent running before suspend
|
||||||
|
after = [ "post-resume.target" ];
|
||||||
|
};
|
||||||
|
}
|
28
apple/t2/fix-keyboard-backlight-and-touchbar.sh
Executable file
28
apple/t2/fix-keyboard-backlight-and-touchbar.sh
Executable file
|
@ -0,0 +1,28 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
unload () {
|
||||||
|
if modprobe -r "$1" 2>&1;
|
||||||
|
then echo ok
|
||||||
|
else echo fail
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
wait_unload() {
|
||||||
|
while sleep 1; do
|
||||||
|
output="$(unload "$1")"
|
||||||
|
case "$output" in
|
||||||
|
*is\ in\ use*) :;;
|
||||||
|
*ok*) return 0;;
|
||||||
|
*) echo "modprobe said: $output"; echo giving up; return 1;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
wait_unload apple_touchbar
|
||||||
|
modprobe apple_touchbar
|
||||||
|
|
||||||
|
# After suspend, the inode for the backlight device has changed. This service
|
||||||
|
# simply restarts upower to inform it of that change.
|
||||||
|
systemctl restart upower.service
|
46
apple/t2/pkgs/linux-t2.nix
Normal file
46
apple/t2/pkgs/linux-t2.nix
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
{ lib, buildLinux, fetchFromGitHub, fetchurl, ... } @ args:
|
||||||
|
|
||||||
|
let
|
||||||
|
patchRepo = fetchFromGitHub {
|
||||||
|
owner = "t2linux";
|
||||||
|
repo = "linux-t2-patches";
|
||||||
|
rev = "c0db79a25bc37dbd0c27636914b3903016a2fc39";
|
||||||
|
hash = "sha256-VILJAK7F0E/8Z3sOzsUpS9dmtpull2XVXQkakZ0UTIA=";
|
||||||
|
};
|
||||||
|
|
||||||
|
version = "6.4";
|
||||||
|
majorVersion = with lib; (elemAt (take 1 (splitVersion version)) 0);
|
||||||
|
in
|
||||||
|
buildLinux (args // {
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
pname = "linux-t2";
|
||||||
|
# Snippet from nixpkgs
|
||||||
|
modDirVersion = with lib; "${concatStringsSep "." (take 3 (splitVersion "${version}.0"))}";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "mirror://kernel/linux/kernel/v${majorVersion}.x/linux-${version}.tar.xz";
|
||||||
|
hash = "sha256-j6BYjwws7KRMrHeg45ukjJ8AprncaXYcAqXT76yNp/M=";
|
||||||
|
};
|
||||||
|
|
||||||
|
structuredExtraConfig = with lib.kernel; {
|
||||||
|
APPLE_BCE = module;
|
||||||
|
APPLE_GMUX = module;
|
||||||
|
BRCMFMAC = module;
|
||||||
|
BT_BCM = module;
|
||||||
|
BT_HCIBCM4377 = module;
|
||||||
|
BT_HCIUART_BCM = yes;
|
||||||
|
BT_HCIUART = module;
|
||||||
|
HID_APPLE_IBRIDGE = module;
|
||||||
|
HID_APPLE = module;
|
||||||
|
HID_APPLE_MAGIC_BACKLIGHT = module;
|
||||||
|
HID_APPLE_TOUCHBAR = module;
|
||||||
|
HID_SENSOR_ALS = module;
|
||||||
|
SND_PCM = module;
|
||||||
|
STAGING = yes;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernelPatches = lib.attrsets.mapAttrsToList (file: type: { name = file; patch = "${patchRepo}/${file}"; })
|
||||||
|
(lib.attrsets.filterAttrs (file: type: type == "regular" && lib.strings.hasSuffix ".patch" file)
|
||||||
|
(builtins.readDir patchRepo));
|
||||||
|
} // (args.argsOverride or {}))
|
|
@ -8,7 +8,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
hardware.opengl.extraPackages = with pkgs; [
|
hardware.opengl.extraPackages = with pkgs; [
|
||||||
vaapiIntel
|
(if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then vaapiIntel else intel-vaapi-driver)
|
||||||
libvdpau-va-gl
|
libvdpau-va-gl
|
||||||
intel-media-driver
|
intel-media-driver
|
||||||
];
|
];
|
||||||
|
|
|
@ -22,5 +22,5 @@
|
||||||
# Remove NVIDIA VGA/3D controller devices
|
# Remove NVIDIA VGA/3D controller devices
|
||||||
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1"
|
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1"
|
||||||
'';
|
'';
|
||||||
boot.blacklistedKernelModules = lib.mkDefault [ "nouveau" "nvidia" ];
|
boot.blacklistedKernelModules = lib.mkDefault [ "nouveau" "nvidia" "nvidia_drm" "nvidia_modeset" ];
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
apple-macbook-pro-11-5 = import ./apple/macbook-pro/11-5;
|
apple-macbook-pro-11-5 = import ./apple/macbook-pro/11-5;
|
||||||
apple-macbook-pro-12-1 = import ./apple/macbook-pro/12-1;
|
apple-macbook-pro-12-1 = import ./apple/macbook-pro/12-1;
|
||||||
apple-macbook-pro-14-1 = import ./apple/macbook-pro/14-1;
|
apple-macbook-pro-14-1 = import ./apple/macbook-pro/14-1;
|
||||||
|
apple-t2 = import ./apple/t2;
|
||||||
asus-battery = import ./asus/battery.nix;
|
asus-battery = import ./asus/battery.nix;
|
||||||
asus-fx504gd = import ./asus/fx504gd;
|
asus-fx504gd = import ./asus/fx504gd;
|
||||||
asus-rog-strix-g733qs = import ./asus/rog-strix/g733qs;
|
asus-rog-strix-g733qs = import ./asus/rog-strix/g733qs;
|
||||||
|
|
|
@ -14,7 +14,10 @@ in
|
||||||
# GPU is an Intel Iris Xe, on a “TigerLake” mobile CPU
|
# GPU is an Intel Iris Xe, on a “TigerLake” mobile CPU
|
||||||
boot.initrd.kernelModules = [ "i915" ]; # Early loading so the passphrase prompt appears on external displays
|
boot.initrd.kernelModules = [ "i915" ]; # Early loading so the passphrase prompt appears on external displays
|
||||||
services.xserver.videoDrivers = [ "intel" ];
|
services.xserver.videoDrivers = [ "intel" ];
|
||||||
hardware.opengl.extraPackages = with pkgs; [ intel-media-driver vaapiIntel ];
|
hardware.opengl.extraPackages = with pkgs; [
|
||||||
|
intel-media-driver
|
||||||
|
(if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then vaapiIntel else intel-vaapi-driver)
|
||||||
|
];
|
||||||
|
|
||||||
boot.kernelParams = [
|
boot.kernelParams = [
|
||||||
# S3 suspend is broken as of Sept. 2022 (screen does not come back properly), use S2
|
# S3 suspend is broken as of Sept. 2022 (screen does not come back properly), use S2
|
||||||
|
|
|
@ -19,7 +19,7 @@ in {
|
||||||
systemd.services.iptsd = {
|
systemd.services.iptsd = {
|
||||||
description = "IPTSD";
|
description = "IPTSD";
|
||||||
path = with pkgs; [ iptsd ];
|
path = with pkgs; [ iptsd ];
|
||||||
script = "iptsd";
|
script = "iptsd $(iptsd-find-hidraw)";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
supportedFilesystems =
|
supportedFilesystems =
|
||||||
lib.mkForce [ "btrfs" "reiserfs" "vfat" "f2fs" "xfs" "ntfs" "cifs" ];
|
lib.mkForce [ "btrfs" "reiserfs" "vfat" "f2fs" "xfs" "ntfs" "cifs" ];
|
||||||
consoleLogLevel = lib.mkDefault 7;
|
consoleLogLevel = lib.mkDefault 7;
|
||||||
kernelPackages = lib.mkDefault (pkgs.callPackage ./linux-6.3.nix {
|
kernelPackages = lib.mkDefault (pkgs.callPackage ./linux-6.4.nix {
|
||||||
inherit (config.boot) kernelPatches;
|
inherit (config.boot) kernelPatches;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{ lib, callPackage, linuxPackagesFor, kernelPatches, fetchpatch, ... }:
|
{ lib, callPackage, linuxPackagesFor, kernelPatches, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
modDirVersion = "6.3.0-rc4";
|
modDirVersion = "6.4.0";
|
||||||
linuxPkg = { lib, fetchFromGitHub, buildLinux, ... }@args:
|
linuxPkg = { lib, fetchFromGitHub, buildLinux, ... }@args:
|
||||||
buildLinux (args // {
|
buildLinux (args // {
|
||||||
version = "${modDirVersion}-starfive-visionfive2";
|
version = "${modDirVersion}-starfive-visionfive2";
|
||||||
|
@ -9,23 +9,17 @@ let
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "starfive-tech";
|
owner = "starfive-tech";
|
||||||
repo = "linux";
|
repo = "linux";
|
||||||
rev = "a57bdb1d13f93c8fc1b3c668cc74d585bb20f3f8";
|
rev = "e5a381c51d624ffd8784db908a58ae227d0608a4";
|
||||||
sha256 = "sha256-jnQnJChIGCyJt+zwGfUTsMhrwmWek/ngIM6Pae6OXuI=";
|
sha256 = "sha256-gg3+2ITdnpo49UmySiAJnk47STW1I7kF7fsKGBVayRE=";
|
||||||
};
|
};
|
||||||
|
|
||||||
inherit modDirVersion;
|
inherit modDirVersion;
|
||||||
kernelPatches = [
|
kernelPatches = [{
|
||||||
{
|
name = "verisilicon";
|
||||||
patch = fetchpatch {
|
patch = ./verisilicon.patch;
|
||||||
url =
|
}] ++ kernelPatches;
|
||||||
"https://github.com/torvalds/linux/commit/d83806c4c0cccc0d6d3c3581a11983a9c186a138.diff";
|
|
||||||
hash = "sha256-xUnEJkzQRIIBF/0GIpS0Cd+h6OdSiJlyva5xwxtleE0=";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
] ++ kernelPatches;
|
|
||||||
|
|
||||||
structuredExtraConfig = with lib.kernel; {
|
structuredExtraConfig = with lib.kernel; {
|
||||||
PL330_DMA = no;
|
|
||||||
PINCTRL_STARFIVE_JH7110_SYS = yes;
|
PINCTRL_STARFIVE_JH7110_SYS = yes;
|
||||||
SERIAL_8250_DW = yes;
|
SERIAL_8250_DW = yes;
|
||||||
};
|
};
|
46
starfive/visionfive/v2/verisilicon.patch
Normal file
46
starfive/visionfive/v2/verisilicon.patch
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
From f6df0d69978ceb373d14c9337c4cda74d604f46d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nick Cao <nickcao@nichi.co>
|
||||||
|
Date: Sat, 1 Jul 2023 17:19:22 +0800
|
||||||
|
Subject: [PATCH 1/2] drm/verisilicon: add missing null entry in vs_drm_dt_ids
|
||||||
|
|
||||||
|
---
|
||||||
|
drivers/gpu/drm/verisilicon/vs_drv.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/drivers/gpu/drm/verisilicon/vs_drv.c b/drivers/gpu/drm/verisilicon/vs_drv.c
|
||||||
|
index b740fe934035..1255a373f7a2 100644
|
||||||
|
--- a/drivers/gpu/drm/verisilicon/vs_drv.c
|
||||||
|
+++ b/drivers/gpu/drm/verisilicon/vs_drv.c
|
||||||
|
@@ -258,6 +258,7 @@ static SIMPLE_DEV_PM_OPS(vs_drm_pm_ops, vs_drm_suspend, vs_drm_resume);
|
||||||
|
|
||||||
|
static const struct of_device_id vs_drm_dt_ids[] = {
|
||||||
|
{ .compatible = "verisilicon,display-subsystem", },
|
||||||
|
+ {},
|
||||||
|
};
|
||||||
|
|
||||||
|
MODULE_DEVICE_TABLE(of, vs_drm_dt_ids);
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
||||||
|
From f7d2f6e8c6e566cdd441b7bd4710f7628af15dcb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nick Cao <nickcao@nichi.co>
|
||||||
|
Date: Sat, 1 Jul 2023 17:49:05 +0800
|
||||||
|
Subject: [PATCH 2/2] drm/verisilicon: import DMA_BUF namespace
|
||||||
|
|
||||||
|
---
|
||||||
|
drivers/gpu/drm/verisilicon/vs_drv.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/drivers/gpu/drm/verisilicon/vs_drv.c b/drivers/gpu/drm/verisilicon/vs_drv.c
|
||||||
|
index 1255a373f7a2..8627027047aa 100644
|
||||||
|
--- a/drivers/gpu/drm/verisilicon/vs_drv.c
|
||||||
|
+++ b/drivers/gpu/drm/verisilicon/vs_drv.c
|
||||||
|
@@ -299,4 +299,5 @@ module_init(vs_drm_init);
|
||||||
|
module_exit(vs_drm_fini);
|
||||||
|
|
||||||
|
MODULE_DESCRIPTION("VeriSilicon DRM Driver");
|
||||||
|
+MODULE_IMPORT_NS(DMA_BUF);
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
Loading…
Reference in a new issue