Revert to Gnome

This commit is contained in:
Faris 2026-06-08 01:57:04 +01:00
parent b918a86ecf
commit 8ea328d20d
15 changed files with 152 additions and 674 deletions

View File

@ -11,9 +11,6 @@
qt.style = "adwaita-dark";
qt.platformTheme = "gnome";
#hyprland
services.displayManager.sddm.enable = true; # use sddm until gnome 50 due to https://github.com/systemd/systemd/issues/39259
services.displayManager.sddm.wayland.enable = true;
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
@ -31,8 +28,6 @@
# Enable automatic login for the user.
# services.displayManager.autoLogin.enable = true;
# services.displayManager.autoLogin.user = "admin";
# services.gnome.gnome-keyring.enable = true;
# security.pam.services.gdm.enableGnomeKeyring = true; #unlock PAM
# Workaround for GNOME autologin: https://github.com/NixOS/nixpkgs/issues/103746#issuecomment-945091229
systemd.services."getty@tty1".enable = false;
@ -42,15 +37,15 @@
# "--config=/mnt/services/emulators/retroarch/retroarch.cfg"
#];
services.ollama = {
enable = true;
openFirewall = true;
host = "0.0.0.0";
# Optional: preload models, see https://ollama.com/library
loadModels = [ "gemma4" ];
package = pkgs.ollama-cuda;
#services.ollama = {
# enable = true;
# openFirewall = true;
# host = "0.0.0.0";
# # Optional: preload models, see https://ollama.com/library
# loadModels = [ "gemma4" ];
# package = pkgs.ollama-cuda;
};
#};
programs.chromium = {
enable = true;
@ -93,8 +88,6 @@
})
];
services.mullvad-vpn.enable = true;
environment.systemPackages = with pkgs; [
brave
firefox
@ -104,7 +97,7 @@
gimp
inkscape
#unstable.protonmail-desktop
bitwarden-desktop
#bitwarden-desktop
libreoffice
freecad
kiwix
@ -126,35 +119,36 @@
veracrypt
lmms
restic-browser
texliveFull
# games
gnome-2048
gnome-chess
cataclysm-dda
endless-sky
#mindustry #x86 only
openrct2
openttd
#osu-lazer-bin #x86 only
#runelite #x86 only
unciv
webcord
wesnoth
xonotic
zeroad # 0ad
#gnome-2048
#gnome-chess
#cataclysm-dda
#endless-sky
##mindustry #x86 only
#openrct2
#openttd
##osu-lazer-bin #x86 only
##runelite #x86 only
#unciv
#webcord
#wesnoth
#xonotic
#zeroad # 0ad
# game utils
mangohud
#umu-launcher #x86 only
# emu
ryubing
xemu
#ryubing
#xemu
#xenia-canary #86 only
#retroarch-full
rpcs3
dolphin-emu
#rpcs3
#dolphin-emu
#cemu #x86 only
# backup

View File

@ -1,9 +1,14 @@
{ pkgs, ... }:
{
# Enable the GNOME Desktop Environment.
services.desktopManager.gnome.enable = false;
services.desktopManager.gnome.enable = true;
services.gnome.games.enable = true;
services.displayManager.gdm.enable = true;
environment.systemPackages = with pkgs; [
gnome-console
gnomeExtensions.appindicator
gnomeExtensions.blur-my-shell
gnomeExtensions.caffeine
@ -12,14 +17,13 @@
environment.gnome.excludePackages = with pkgs; [
epiphany # web browser
geary # email
decibels # audio player
gnome-calendar
gnome-music
gnome-software
gnome-tour
totem # video player
xterm
gnome-music
gnome-text-editor
showtime
yelp # help
];
@ -48,6 +52,7 @@
pkgs.gnomeExtensions.caffeine.extensionUuid
pkgs.gnomeExtensions.dash-to-dock.extensionUuid
];
always-show-log-out = true;
};
"org/gnome/desktop/calendar" = {
show-weekdate = true;
@ -59,13 +64,13 @@
enable-hot-corners = false;
font-name = "Noto Sans 11";
gtk-theme = "Adwaita-dark";
monospace-font-name = "Fira Mono 12";
monospace-font-name = "JetBrains Nerd Font Mono 12";
};
"org/gnome/desktop/peripherals/mouse" = {
accel-profile = "flat";
};
"org/gnome/desktop/wm/preferences" = {
button-layout = ":minimize,maximize,close";
button-layout = "close,maximize,minimize:";
};
"org/gnome/nautilus/list-view" = {
default-zoom-level = "small";
@ -75,12 +80,16 @@
};
"org/gnome/shell/extensions/dash-to-dock" = {
click-action = "minimize-or-previews";
dock-fixed = true;
dock-fixed = false;
multi-monitor = true;
show-mounts = false;
show-show-apps-button = true;
apply-custom-theme = true;
};
"org/gnome/peripherals.keyboard" = {
delay = "200";
repeat-interval = "30";
};
"org/gnome/shell/keybindings" = {
show-screenshot-ui = [ "<Shift><Super>s" ];
};

View File

@ -5,6 +5,10 @@
programs.hyprland.enable = true;
security.pam.services.hyprlock = { };
#display manager
services.displayManager.sddm.enable = true; # use sddm until gnome 50 due to https://github.com/systemd/systemd/issues/39259
services.displayManager.sddm.wayland.enable = true;
#wifi
networking.wireless.iwd.enable = true;
@ -32,16 +36,23 @@
jq # for scripts
# gnome stuff
eog # eye of gnome
gnome-calculator
gnome-calendar
gnome-characters
gnome-clocks
gnome-contacts
gnome-font-viewer
gnome-maps
gnome-weather
nautilus
loupe # image viewer
nautilus # file managr
papers # doc viewer
simple-scan # document scanner
snapshot # camera
];
programs.seahorse.enable = true; # keyring viewer
services.upower.enable = true; # battery stuff
services.udisks2.enable = true; # udiskie automount USB

View File

@ -43,7 +43,8 @@
./config/common.nix
./config/linux.nix
./config/desktop.nix
./config/hyprland.nix
#./config/hyprland.nix
./config/gnome.nix
./hosts/desktop/hardware.nix
./hosts/desktop/settings.nix
home-manager.nixosModules.home-manager
@ -59,7 +60,7 @@
imports = [
./home/common.nix
./home/desktop.nix
./home/hyprland.nix
#./home/hyprland.nix
];
};
}
@ -124,7 +125,7 @@
./config/common.nix
./config/linux.nix
./config/desktop.nix
./config/hyprland.nix
./config/gnome.nix
./hosts/macbook-air/hardware.nix
./hosts/macbook-air/settings.nix
apple-silicon-support.nixosModules.apple-silicon-support
@ -143,7 +144,7 @@
imports = [
./home/common.nix
./home/desktop.nix
./home/hyprland.nix
#./home/hyprland.nix
];
};
}

View File

@ -26,7 +26,6 @@
config = {
profile = "high-quality";
ytdl-format = "bestvideo+bestaudio";
cache-default = 4000000;
loop-file = "inf";
};

View File

@ -104,6 +104,25 @@ in
};
};
services.hyprsunset = {
enable = true;
settings = {
max-gamma = 150;
profile = [
{
time = "7:30";
identity = true;
}
{
time = "21:00";
temperature = 2500;
gamma = 0.8;
}
];
};
};
services.hyprpaper = {
enable = true;
settings = {
@ -935,9 +954,10 @@ in
wayland.windowManager.hyprland = {
enable = true;
#configType = "hyprlang";
plugins = [
pkgs.hyprlandPlugins.hyprbars
pkgs.hyprlandPlugins.hyprspace
#pkgs.hyprlandPlugins.hyprspace
];
settings = {
# This is an example Hyprland config file for Nix.
@ -1137,14 +1157,13 @@ in
};
};
layerrule = [
#"blur, notifications"
#"ignorezero, notifications"
layer_rule = [
"blur, notifications"
"ignorezero, notifications"
# turn off anim for walker
#"noanim, rofi"
]; # add blur to notifications
"noanim, rofi"
];
# https://wiki.hypr.land/Configuring/Variables/#animations
animations = {
@ -1366,84 +1385,80 @@ in
# See https://wiki.hypr.land/Configuring/Window-Rules/ for more
# See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules
#windowrule = [
# # Example windowrule
# # "float,class:^(kitty)$,title:^(kitty)$"
# # Ignore maximize requests from apps. You'll probably like this.
# "suppressevent maximize, class:.*"
window_rule = [
# Example windowrule
# "float,class:^(kitty)$,title:^(kitty)$"
# Ignore maximize requests from apps. You'll probably like this.
"suppressevent maximize, class:.*"
# # Fix some dragging issues with XWayland
# "nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0"
# Fix some dragging issues with XWayland
"nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0"
# # make tuis accessed from waybar float in center
# "tag +floating-window, title:(bluetui|impala|wiremix|Signal.*|.*WebCord.*|Weather|Calendar)"
# "tag +floating-window, title:^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)"
# "tag +floating-window, class:(org.gnome.NautilusPreviewer)"
# "float, class:(org.gnome.Calculator)"
# make tuis accessed from waybar float in center
"tag +floating-window, title:(bluetui|impala|wiremix|Signal.*|.*WebCord.*|Weather|Calendar)"
"tag +floating-window, title:^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)"
"tag +floating-window, class:(org.gnome.NautilusPreviewer)"
"float, class:(org.gnome.Calculator)"
# # fix scrolling speed in chromium based apps
# "tag +chromium-based, class:(chrom.*|brave-browser|signal|WebCord|obsidian|electron)"
# "scrolltouchpad 0.15, tag:chromium-based"
# fix scrolling speed in chromium based apps
"tag +chromium-based, class:(chrom.*|brave-browser|signal|WebCord|obsidian|electron)"
"scrolltouchpad 0.15, tag:chromium-based"
# # send games to specific workspace
# "workspace name:games silent, class:$games"
# "noanim, class:$games"
# "noblur, class:$games"
# "noshadow, class:$games"
# "noborder, class:$games"
# "rounding 0, class:$games"
# "fullscreen, class:$games"
# "immediate, class:$games"
# send games to specific workspace
"workspace name:games silent, class:$games"
"noanim, class:$games"
"noblur, class:$games"
"noshadow, class:$games"
"noborder, class:$games"
"rounding 0, class:$games"
"fullscreen, class:$games"
"immediate, class:$games"
# # pip
# "tag +pip, title:(Picture.?in.?[Pp]icture)"
# "tag -default-opacity, tag:pip"
# "float, tag:pip"
# "pin, tag:pip"
# "size 600 338, tag:pip"
# "keepaspectratio, tag:pip"
# "bordersize 0, tag:pip"
# "opacity 1 1, tag:pip"
# "move (monitor_w-window_w-40) (monitor_h*0.04), tag:pip"
# pip
"tag +pip, title:(Picture.?in.?[Pp]icture)"
"tag -default-opacity, tag:pip"
"float, tag:pip"
"pin, tag:pip"
"size 600 338, tag:pip"
"keepaspectratio, tag:pip"
"bordersize 0, tag:pip"
"opacity 1 1, tag:pip"
"move (monitor_w-window_w-40) (monitor_h*0.04), tag:pip"
# # steam
# "float, class:^(steam)$"
# "center, class:^(steam)$, title:^(Steam)$"
# "tag -default-opacity, class:^(steam.*)$"
# "opacity 1 1, class:^(steam.*)$"
# "size 1100 700, class:^(steam)$, title:^(Steam)$"
# "size 460 800, class:^(steam)$, title:^(Friends List)$"
# "idleinhibit fullscreen, class:^(steam)$"
# steam
"float, class:^(steam)$"
"center, class:^(steam)$, title:^(Steam)$"
"tag -default-opacity, class:^(steam.*)$"
"opacity 1 1, class:^(steam.*)$"
"size 1100 700, class:^(steam)$, title:^(Steam)$"
"size 460 800, class:^(steam)$, title:^(Friends List)$"
"idleinhibit fullscreen, class:^(steam)$"
# # bitwarden
# "noscreenshare, class:^(Bitwarden)$"
# "tag +floating-window, class:^(Bitwarden)$"
# bitwarden
"noscreenshare, class:^(Bitwarden)$"
"tag +floating-window, class:^(Bitwarden)$"
# # Bitwarden Chrome Extension
# "noscreenshare, class:^(brave-nngceckbapebfimnlniiiahkandclblb-Default)$"
# "tag +floating-window, class:^(brave-nngceckbapebfimnlniiiahkandclblb-Default)$"
# Bitwarden Chrome Extension
"noscreenshare, class:^(brave-nngceckbapebfimnlniiiahkandclblb-Default)$"
"tag +floating-window, class:^(brave-nngceckbapebfimnlniiiahkandclblb-Default)$"
# floating tag
"float, tag:floating-window"
"center, tag:floating-window"
"size 875 600, tag:floating-window"
# # floating tag
# "float, tag:floating-window"
# "center, tag:floating-window"
# "size 875 600, tag:floating-window"
# hyprbar
"plugin:hyprbars:nobar, tag:^(?!floating-window$).*$"
];
# # floating tag
# "float, tag:floating-window"
# "center, tag:floating-window"
# "size 875 600, tag:floating-window"
# # hyprbar
# "plugin:hyprbars:nobar, tag:^(?!floating-window$).*$"
#];
#"$games" =
# "^(steam_app_.*|lutris_game_class|minigalaxy|playnite_game_class|gamescope|chiaki|moonlight|com\.moonlight_stream\.Moonlight|.*[Ww]ine.*)$";
#workspace = [
# "name:1,monitor:DP-2"
# "name:games,monitor:DP-2"
# "name:4,monitor:HDMI-A-1"
#];
"$games" =
"^(steam_app_.*|lutris_game_class|minigalaxy|playnite_game_class|gamescope|chiaki|moonlight|com\.moonlight_stream\.Moonlight|.*[Ww]ine.*)$";
workspace = [
"name:1,monitor:DP-2"
"name:games,monitor:DP-2"
"name:4,monitor:HDMI-A-1"
];
};
};

View File

@ -1,7 +0,0 @@
{ ... }:
{
imports = [
./modules/default.nix
];
}

View File

@ -1,68 +0,0 @@
{
config,
pkgs,
lib,
...
}:
let
pkgs' = config.hardware.asahi.pkgs;
bootM1n1 =
if (config.boot.m1n1CustomLogo != null) then
pkgs'.m1n1.override {
customLogo = config.boot.m1n1CustomLogo;
}
else
pkgs'.m1n1;
bootUBoot = pkgs'.uboot-asahi.override {
m1n1 = bootM1n1;
};
bootFiles = {
"m1n1/boot.bin" = pkgs.runCommand "boot.bin" { } ''
cat ${bootM1n1}/lib/m1n1/m1n1.bin \
${config.boot.kernelPackages.kernel}/dtbs/apple/*.dtb \
${bootUBoot}/u-boot-nodtb.bin.gz \
> $out
if [ -n "${config.boot.m1n1ExtraOptions}" ]; then
echo '${config.boot.m1n1ExtraOptions}' >> $out
fi
'';
};
in
{
config = lib.mkIf config.hardware.asahi.enable {
# install m1n1 with the boot loader
boot.loader.grub.extraFiles = bootFiles;
boot.loader.systemd-boot.extraFiles = bootFiles;
boot.loader.limine.additionalFiles = bootFiles;
# ensure the installer has m1n1 in the image
system.extraDependencies = lib.mkForce [
bootM1n1
bootUBoot
];
system.build.m1n1 = bootFiles."m1n1/boot.bin";
};
options.boot = {
m1n1ExtraOptions = lib.mkOption {
type = lib.types.str;
default = "";
description = ''
Append extra options to the m1n1 boot binary. Might be useful for fixing
display problems on Mac minis.
https://github.com/AsahiLinux/m1n1/issues/159
'';
};
m1n1CustomLogo = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = ''
Custom logo to build into m1n1. The path must point to a 256x256 PNG.
'';
};
};
}

View File

@ -1,87 +0,0 @@
{
config,
pkgs,
lib,
...
}:
{
imports = [
./kernel
./peripheral-firmware
./boot-m1n1
./sound
];
config =
let
cfg = config.hardware.asahi;
in
lib.mkIf cfg.enable {
nixpkgs.overlays = lib.mkBefore [ cfg.overlay ];
hardware.asahi.pkgs =
if cfg.pkgsSystem != "aarch64-linux" then
import (pkgs.path) {
crossSystem.system = "aarch64-linux";
localSystem.system = cfg.pkgsSystem;
overlays = [ cfg.overlay ];
}
else
pkgs;
# 900 is higher priority than mkDefault but lower than just setting
hardware.graphics.package = lib.mkOverride 900 (
lib.warnIf
(lib.versionAtLeast pkgs.mesa.version "25.3" && lib.versionOlder pkgs.mesa.version "25.3.2")
''
Mesa 25.3.0 and 25.3.1 are known to cause crashes in Firefox on Asahi
GPUs. Please update to Mesa >= 25.3.2 by updating Nixpkgs. See
https://github.com/nix-community/nixos-apple-silicon/issues/380 for
more info.''
pkgs.mesa
);
};
options.hardware.asahi = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Enable the basic Asahi Linux components, such as kernel and boot setup.
'';
};
pkgsSystem = lib.mkOption {
type = lib.types.str;
default = "aarch64-linux";
description = ''
System architecture that should be used to build the major Asahi
packages, if not the default aarch64-linux. This allows installing from
a cross-built ISO without rebuilding them during installation.
'';
};
pkgs = lib.mkOption {
type = lib.types.raw;
description = ''
Package set used to build the major Asahi packages. Defaults to the
ambient set if not cross-built, otherwise re-imports the ambient set
with the system defined by `hardware.asahi.pkgsSystem`.
'';
};
overlay = lib.mkOption {
type = lib.mkOptionType {
name = "nixpkgs-overlay";
description = "nixpkgs overlay";
check = lib.isFunction;
merge = lib.mergeOneOption;
};
default = import ../packages/overlay.nix;
defaultText = "overlay provided with the module";
description = ''
The nixpkgs overlay for asahi packages.
'';
};
};
}

View File

@ -1,114 +0,0 @@
# the Asahi Linux kernel and options that must go along with it
{
config,
lib,
...
}:
{
config = lib.mkIf config.hardware.asahi.enable {
boot.kernelPackages =
let
pkgs' = config.hardware.asahi.pkgs;
in
pkgs'.linux-asahi.override {
_kernelPatches = config.boot.kernelPatches;
};
# we definitely want to use CONFIG_ENERGY_MODEL, and
# schedutil is a prerequisite for using it
# source: https://www.kernel.org/doc/html/latest/scheduler/sched-energy.html
powerManagement.cpuFreqGovernor = lib.mkOverride 800 "schedutil";
boot.initrd.availableKernelModules = [
# list of initrd modules stolen from
# https://github.com/AsahiLinux/asahi-scripts/blob/f461f080a1d2575ae4b82879b5624360db3cff8c/initcpio/install/asahi
"apple-mailbox"
"apple_nvmem_spmi"
"nvme_apple"
"pinctrl-apple-gpio"
"macsmc"
"macsmc-power"
"macsmc-input"
"macsmc-hwmon"
"macsmc-reboot"
"i2c-pasemi-platform"
"tps6598x"
"apple-dart"
"dwc3"
"dwc3-of-simple"
"xhci-pci"
"pcie-apple"
"gpio_macsmc"
"phy-apple-atc"
"nvmem_apple_efuses"
"spi-apple"
"spi-hid-apple"
"spi-hid-apple-of"
"rtc-macsmc"
"spmi-apple-controller"
"apple-dockchannel"
"dockchannel-hid"
"apple-rtkit-helper"
# additional stuff necessary to boot off USB for the installer
# and if the initrd (i.e. stage 1) goes wrong
"usb-storage"
"xhci-plat-hcd"
"usbhid"
"hid_generic"
];
boot.kernelParams = [
"earlycon"
"console=tty0"
"boot.shell_on_fail"
# Apple's SSDs are slow (~dozens of ms) at processing flush requests which
# slows down programs that make a lot of fsync calls. This parameter sets
# a delay in ms before actually flushing so that such requests can be
# coalesced. Be warned that increasing this parameter above zero (default
# is 1000) has the potential, though admittedly unlikely, risk of
# UNBOUNDED data corruption in case of power loss!!!! Don't even think
# about it on desktops!!
"nvme_apple.flush_interval=0"
];
# U-Boot does not support EFI variables
boot.loader.efi.canTouchEfiVariables = lib.mkForce false;
# GRUB has to be installed as removable if the user chooses to use it
boot.loader.grub = lib.mkDefault {
efiSupport = true;
efiInstallAsRemovable = true;
device = "nodev";
};
# autosuspend was enabled as safe for the PCI SD card reader
# "Genesys Logic, Inc GL9755 SD Host Controller [17a0:9755] (rev 01)"
# by recent systemd versions, but this has a "negative interaction"
# with our kernel/SoC and causes random boot hangs. disable it!
services.udev.extraHwdb = ''
pci:v000017A0d00009755*
ID_AUTOSUSPEND=0
'';
};
imports = [
(lib.mkRemovedOptionModule [
"hardware"
"asahi"
"addEdgeKernelConfig"
] "All edge kernel config options are now the default.")
(lib.mkRemovedOptionModule [
"hardware"
"asahi"
"experimentalGPUInstallMode"
] "This option became unnecessary with asahi support landing in mainline mesa.")
(lib.mkRemovedOptionModule [
"hardware"
"asahi"
"useExperimentalGPUDriver"
] "This option became unnecessary with asahi support landing in mainline mesa.")
(lib.mkRemovedOptionModule [ "hardware" "asahi" "withRust" ] "Rust support is now the default.")
];
}

View File

@ -1,82 +0,0 @@
{
config,
pkgs,
lib,
...
}:
{
config = lib.mkIf config.hardware.asahi.enable {
assertions = lib.mkIf config.hardware.asahi.extractPeripheralFirmware [
{
assertion = config.hardware.asahi.peripheralFirmwareDirectory != null;
message = ''
Asahi peripheral firmware extraction is enabled but the firmware
location appears incorrect.
'';
}
];
hardware.firmware =
let
pkgs' = config.hardware.asahi.pkgs;
in
lib.mkIf
(
(config.hardware.asahi.peripheralFirmwareDirectory != null)
&& config.hardware.asahi.extractPeripheralFirmware
)
[
(pkgs.stdenv.mkDerivation {
name = "asahi-peripheral-firmware";
nativeBuildInputs = [
pkgs'.asahi-fwextract
pkgs.cpio
];
buildCommand = ''
mkdir extracted
asahi-fwextract ${config.hardware.asahi.peripheralFirmwareDirectory} extracted
mkdir -p $out/lib/firmware
cat extracted/firmware.cpio | cpio -id --quiet --no-absolute-filenames
mv vendorfw/* $out/lib/firmware
'';
})
];
};
options.hardware.asahi = {
extractPeripheralFirmware = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Automatically extract the non-free non-redistributable peripheral
firmware necessary for features like Wi-Fi.
'';
};
peripheralFirmwareDirectory = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = lib.findFirst (path: builtins.pathExists (path + "/all_firmware.tar.gz")) null [
# path when the system is operating normally
/boot/asahi
# path when the system is mounted in the installer
/mnt/boot/asahi
];
description = ''
Path to the directory containing the non-free non-redistributable
peripheral firmware necessary for features like Wi-Fi. Ordinarily, this
will automatically point to the appropriate location on the ESP. Flake
users and those interested in maximum purity will want to copy those
files elsewhere and specify this manually.
Currently, this consists of the files `all-firmware.tar.gz` and
`kernelcache*`. The official Asahi Linux installer places these files
in the `asahi` directory of the EFI system partition when creating it.
'';
};
};
}

View File

@ -1,65 +0,0 @@
{
config,
options,
pkgs,
lib,
...
}:
{
options.hardware.asahi = {
setupAsahiSound = lib.mkOption {
type = lib.types.bool;
default = config.hardware.asahi.enable;
description = ''
Set up the Asahi DSP components so that the speakers and headphone jack
work properly and safely.
'';
};
};
config =
let
cfg = config.hardware.asahi;
in
lib.mkIf (cfg.setupAsahiSound && cfg.enable) (
lib.mkMerge [
{
# can't be used by Asahi sound infrastructure
services.pulseaudio.enable = false;
# enable pipewire to run real-time and avoid audible glitches
security.rtkit.enable = true;
# set up pipewire with the supported capabilities (instead of pulseaudio)
# and asahi-audio configs and plugins
services.pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
configPackages = [ pkgs.asahi-audio ];
wireplumber = {
enable = true;
configPackages = [ pkgs.asahi-audio ];
};
};
# set up enivronment so that UCM configs are used as well
environment.variables.ALSA_CONFIG_UCM2 = "${pkgs.alsa-ucm-conf-asahi}/share/alsa/ucm2";
systemd.user.services.pipewire.environment.ALSA_CONFIG_UCM2 =
config.environment.variables.ALSA_CONFIG_UCM2;
systemd.user.services.wireplumber.environment.ALSA_CONFIG_UCM2 =
config.environment.variables.ALSA_CONFIG_UCM2;
systemd.services.pipewire.environment.ALSA_CONFIG_UCM2 =
config.environment.variables.ALSA_CONFIG_UCM2;
systemd.services.wireplumber.environment.ALSA_CONFIG_UCM2 =
config.environment.variables.ALSA_CONFIG_UCM2;
# enable speakersafetyd to protect speakers
systemd.packages = [ pkgs.speakersafetyd ];
services.udev.packages = [ pkgs.speakersafetyd ];
}
]
);
}

View File

@ -1,64 +0,0 @@
{
lib,
callPackage,
linuxPackagesFor,
_kernelPatches ? [ ],
}:
let
linux-asahi-pkg =
{
stdenv,
lib,
fetchFromGitHub,
fetchpatch,
buildLinux,
...
}:
buildLinux rec {
inherit stdenv lib;
pname = "linux-asahi";
version = "7.0.8";
modDirVersion = version;
extraMeta.branch = "7.0";
src = fetchFromGitHub {
owner = "AsahiLinux";
repo = "linux";
tag = "asahi-7.0.8-1";
hash = "sha256-ak1dckvTxiR09xMf4xFb6qOPiAQNgIR18v8WLtQBnWQ=";
};
kernelPatches = [
{
name = "Asahi config";
patch = null;
structuredExtraConfig = with lib.kernel; {
# Needed for GPU
ARM64_16K_PAGES = yes;
ARM64_MEMORY_MODEL_CONTROL = yes;
ARM64_ACTLR_STATE = yes;
# Might lead to the machine rebooting if not loaded soon enough
APPLE_WATCHDOG = yes;
# Can not be built as a module, defaults to no
APPLE_M1_CPU_PMU = yes;
# Defaults to 'y', but we want to allow the user to set options in modprobe.d
HID_APPLE = module;
APPLE_PMGR_MISC = yes;
APPLE_PMGR_PWRSTATE = yes;
};
features.rust = true;
}
]
++ _kernelPatches;
};
linux-asahi = callPackage linux-asahi-pkg { };
in
lib.recurseIntoAttrs (linuxPackagesFor linux-asahi)

View File

@ -1,19 +0,0 @@
final: prev: {
linux-asahi = final.callPackage ./linux-asahi { };
uboot-asahi = final.callPackage ./uboot-asahi { };
mesa =
if prev.mesa.version == "26.0.5" then
# Workaround for https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41040
prev.mesa.overrideAttrs (old: {
version = "26.0.4";
src = final.fetchFromGitLab {
domain = "gitlab.freedesktop.org";
owner = "mesa";
repo = "mesa";
rev = "mesa-26.0.4";
hash = "sha256-gsrqhFCxZRrTbA5MMWARrN6lFVp4Q3D5Jz7MDYbXznY=";
};
})
else
prev.mesa;
}

View File

@ -1,45 +0,0 @@
{
lib,
fetchFromGitHub,
buildUBoot,
m1n1,
}:
(buildUBoot rec {
src = fetchFromGitHub {
owner = "AsahiLinux";
repo = "u-boot";
rev = "asahi-v2026.04-1";
hash = "sha256-RdcxvKZW2ms6pezBRNPyj/HTYQubpNX6r+nXqkV5oeo=";
};
version = "2026.04-1-asahi";
defconfig = "apple_m1_defconfig";
extraMeta.platforms = [ "aarch64-linux" ];
filesToInstall = [
"u-boot-nodtb.bin.gz"
"m1n1-u-boot.bin"
];
extraConfig = ''
CONFIG_IDENT_STRING=" ${version}"
CONFIG_VIDEO_FONT_4X6=n
CONFIG_VIDEO_FONT_8X16=n
CONFIG_VIDEO_FONT_SUN12X22=n
CONFIG_VIDEO_FONT_16X32=y
CONFIG_CMD_BOOTMENU=y
'';
}).overrideAttrs
(o: {
# nixos's downstream patches are not applicable
patches = [
];
# DTC= flag somehow breaks DTC compilation so we remove it
makeFlags = builtins.filter (s: (!(lib.strings.hasPrefix "DTC=" s))) o.makeFlags;
preInstall = ''
# compress so that m1n1 knows U-Boot's size and can find things after it
gzip -n u-boot-nodtb.bin
cat ${m1n1}/lib/m1n1/m1n1.bin arch/arm/dts/t[68]*.dtb u-boot-nodtb.bin.gz > m1n1-u-boot.bin
'';
})