{"id":"fc391a37-813f-4df5-9db2-505dbc2868b2","headline":"NixOS en un MacBook Pro M1 Max: guia completa","slug":"nixos-en-un-macbook-pro-m1-max-guia-completa","articleBody":"<p>NixOS corriendo bare metal en un MacBook Pro 16\" con M1 Max. Suena a\nlocura pero en 2026 es perfectamente viable. Este post cubre el estado\nreal del soporte, como se instala, que funciona y que no, y la\nconfiguracion completa con flakes.<\/p>\n<h1 id=\"el-ecosistema-asahi-linux-nixos-apple-silicon\">El ecosistema:\nAsahi Linux + nixos-apple-silicon<\/h1>\n<p>Todo el soporte de Linux en Apple Silicon descansa sobre el trabajo\nmonumental de <a href=\"https:\/\/asahilinux.org\">Asahi Linux<\/a>. El\nproyecto lleva activo desde 2021 y ha conseguido algo que muchos creian\nimposible: drivers open-source para hardware Apple con certificaciones\noficiales de conformidad.<\/p>\n<p>Para NixOS especificamente, existe <a\nhref=\"https:\/\/github.com\/nix-community\/nixos-apple-silicon\">nixos-apple-silicon<\/a>\n(originalmente de tpwrules, migrado a nix-community en mayo 2025). No es\nun fork de NixOS sino un modulo que importas en tu flake. Incluye:<\/p>\n<ul>\n<li>Kernel Asahi Linux (parcheado para Apple Silicon)<\/li>\n<li>U-Boot como bootloader UEFI<\/li>\n<li>m1n1 (bootloader de bajo nivel de Asahi)<\/li>\n<li>Configuracion automatica de audio (PipeWire + speakersafetyd)<\/li>\n<li>Extraccion de firmware propietario (WiFi, Bluetooth)<\/li>\n<li>Overlay con paquetes Asahi-especificos<\/li>\n<\/ul>\n<p>Los numeros hablan: 1395 estrellas, 142 forks, ultimo commit el 19 de\nfebrero de 2026 (kernel asahi 6.18.10-1). Releases regulares cada pocas\nsemanas.<\/p>\n<h1 id=\"estado-del-hardware-en-el-macbook-pro-16-m1-max\">Estado del\nhardware en el MacBook Pro 16\" M1 Max<\/h1>\n<p>Vamos al grano. Datos directos de la <a\nhref=\"https:\/\/asahilinux.org\/docs\/platform\/feature-support\/m1\/\">documentacion\noficial de Asahi<\/a>.<\/p>\n<h2 id=\"lo-que-funciona\">Lo que funciona<\/h2>\n<ul>\n<li><strong>GPU<\/strong>: 32 cores GPU con drivers certificados\nconformant. OpenGL 4.6, OpenGL ES 3.2, OpenCL 3.0, Vulkan 1.4. Todos en\nMesa mainline desde 25.1+. El M1 Max tiene 4x mas cores GPU que el M1\nbase. Rinde.<\/li>\n<li><strong>Display Retina<\/strong>: upstream desde kernel 5.17. HiDPI\nnativo con Wayland. Control de brillo.<\/li>\n<li><strong>Teclado y trackpad<\/strong>: funcionan via SPI.\nRetroiluminacion del teclado upstream desde 6.4.<\/li>\n<li><strong>WiFi<\/strong>: upstream desde kernel 6.1. Broadcom.\nImportante: usar <code>iwd<\/code> en vez de <code>wpa_supplicant<\/code>\n(no soporta WPA3 en Broadcom).<\/li>\n<li><strong>Bluetooth<\/strong>: upstream desde kernel 6.2.<\/li>\n<li><strong>Audio<\/strong>: altavoces con DSP calibrado por modelo.\nAsahi dice que es \"the best Linux laptop audio you've ever heard\" y\ntiene razon. Jack 3.5mm y microfonos tambien funcionan.<\/li>\n<li><strong>HDMI<\/strong>: puerto nativo del 16\". Funciona con firmware\n13.5. Audio HDMI en preview.<\/li>\n<li><strong>Bateria<\/strong>: informacion completa + cpuidle con\nenergy-aware scheduling. Mejora dramatica de temperatura y\nduracion.<\/li>\n<li><strong>NVMe<\/strong>: upstream desde 5.19. El SSD interno\nvuela.<\/li>\n<li><strong>Suspend\/Sleep<\/strong>: funciona.<\/li>\n<li><strong>Webcam<\/strong>: funciona.<\/li>\n<li><strong>Lector SD<\/strong>: upstream desde 5.17.<\/li>\n<\/ul>\n<h2 id=\"lo-que-no-funciona-todavia\">Lo que NO funciona (todavia)<\/h2>\n<ul>\n<li><strong>Thunderbolt<\/strong>: WIP. Los puertos USB-C funcionan como\nUSB2\/USB3 y para carga, pero no hay Thunderbolt nativo. Esto implica:\n<strong>sin DP Alt Mode<\/strong>, es decir, monitores externos solo via\nHDMI.<\/li>\n<li><strong>TouchID<\/strong>: TBA. Requiere SEP (Secure Enclave), que\nesta WIP.<\/li>\n<li><strong>Decodificacion\/codificacion de video por hardware<\/strong>:\nWIP\/TBA. Software decoding funciona pero gasta mas CPU.<\/li>\n<li><strong>ProRes Codec<\/strong>: TBA.<\/li>\n<li><strong>Neural Engine<\/strong>: solo driver experimental\nout-of-tree.<\/li>\n<\/ul>\n<p>La limitacion mas relevante para el dia a dia es Thunderbolt\/DP Alt\nMode. Si necesitas multiples monitores externos, solo puedes usar el\nHDMI integrado. Para desarrollo con un monitor externo via HDMI, es\nsuficiente.<\/p>\n<h1 id=\"instalacion-paso-a-paso\">Instalacion paso a paso<\/h1>\n<p>Apple Silicon requiere siempre un macOS stub para arrancar. Sera dual\nboot si o si, aunque puedes dejar macOS en los huesos (~70-100GB).<\/p>\n<h2 id=\"fase-1-preparar-uefi-desde-macos\">Fase 1: Preparar UEFI desde\nmacOS<\/h2>\n<div class=\"sourceCode\" id=\"cb1\"><pre\nclass=\"sourceCode bash\"><code class=\"sourceCode bash\"><span id=\"cb1-1\"><a href=\"#cb1-1\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># Desde Terminal.app en macOS (como admin)<\/span><\/span>\n<span id=\"cb1-2\"><a href=\"#cb1-2\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"ex\">curl<\/span> https:\/\/alx.sh <span class=\"kw\">|<\/span> <span class=\"fu\">sh<\/span><\/span><\/code><\/pre><\/div>\n<p>El script te guia:<\/p>\n<ol>\n<li>Redimensionar la particion de macOS (dejar espacio para NixOS)<\/li>\n<li>Instalar en el espacio libre<\/li>\n<li>Elegir \"UEFI environment only\"<\/li>\n<li>Nombrar la instalacion \"NixOS\"<\/li>\n<li>Configurar seguridad (permissive mode, custom boot object)<\/li>\n<\/ol>\n<h2 id=\"fase-2-instalar-nixos-desde-usb\">Fase 2: Instalar NixOS desde\nUSB<\/h2>\n<p>Construir la ISO del instalador (o descargarla de <a\nhref=\"https:\/\/github.com\/nix-community\/nixos-apple-silicon\/releases\">releases<\/a>):<\/p>\n<div class=\"sourceCode\" id=\"cb2\"><pre\nclass=\"sourceCode bash\"><code class=\"sourceCode bash\"><span id=\"cb2-1\"><a href=\"#cb2-1\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">git<\/span> clone https:\/\/github.com\/nix-community\/nixos-apple-silicon\/<\/span>\n<span id=\"cb2-2\"><a href=\"#cb2-2\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"bu\">cd<\/span> nixos-apple-silicon<\/span>\n<span id=\"cb2-3\"><a href=\"#cb2-3\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"ex\">nix<\/span> build <span class=\"at\">--extra-experimental-features<\/span> <span class=\"st\">&#39;nix-command flakes&#39;<\/span> <span class=\"dt\">\\<\/span><\/span>\n<span id=\"cb2-4\"><a href=\"#cb2-4\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  .#installer-bootstrap <span class=\"at\">-o<\/span> installer <span class=\"at\">-j4<\/span> <span class=\"at\">-L<\/span><\/span>\n<span id=\"cb2-5\"><a href=\"#cb2-5\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">dd<\/span> if=installer\/iso\/nixos-<span class=\"pp\">*<\/span>.iso of=\/dev\/sdX bs=4M status=progress<\/span><\/code><\/pre><\/div>\n<p>Arrancar con USB, particionar, montar y configurar:<\/p>\n<div class=\"sourceCode\" id=\"cb3\"><pre\nclass=\"sourceCode bash\"><code class=\"sourceCode bash\"><span id=\"cb3-1\"><a href=\"#cb3-1\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># Particionar<\/span><\/span>\n<span id=\"cb3-2\"><a href=\"#cb3-2\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"ex\">sgdisk<\/span> \/dev\/nvme0n1 <span class=\"at\">-n<\/span> 0:0 <span class=\"at\">-s<\/span><\/span>\n<span id=\"cb3-3\"><a href=\"#cb3-3\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"ex\">mkfs.ext4<\/span> <span class=\"at\">-L<\/span> nixos \/dev\/nvme0n1pX  <span class=\"co\"># sustituir X por la particion correcta<\/span><\/span>\n<span id=\"cb3-4\"><a href=\"#cb3-4\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb3-5\"><a href=\"#cb3-5\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># Montar<\/span><\/span>\n<span id=\"cb3-6\"><a href=\"#cb3-6\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">mount<\/span> \/dev\/disk\/by-label\/nixos \/mnt<\/span>\n<span id=\"cb3-7\"><a href=\"#cb3-7\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">mkdir<\/span> <span class=\"at\">-p<\/span> \/mnt\/boot<\/span>\n<span id=\"cb3-8\"><a href=\"#cb3-8\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">mount<\/span> \/dev\/disk\/by-partuuid\/<span class=\"va\">$(<\/span><span class=\"fu\">cat<\/span> \/proc\/device-tree\/chosen\/asahi,efi-system-partition<span class=\"va\">)<\/span> \/mnt\/boot<\/span>\n<span id=\"cb3-9\"><a href=\"#cb3-9\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb3-10\"><a href=\"#cb3-10\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># Generar config base<\/span><\/span>\n<span id=\"cb3-11\"><a href=\"#cb3-11\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"ex\">nixos-generate-config<\/span> <span class=\"at\">--root<\/span> \/mnt<\/span>\n<span id=\"cb3-12\"><a href=\"#cb3-12\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">cp<\/span> <span class=\"at\">-r<\/span> \/etc\/nixos\/apple-silicon-support \/mnt\/etc\/nixos\/<\/span><\/code><\/pre><\/div>\n<p>Conectar WiFi con <code>iwctl<\/code>, instalar con\n<code>nixos-install<\/code>, reiniciar. Hecho.<\/p>\n<h1 id=\"configuracion-con-flakes\">Configuracion con flakes<\/h1>\n<p>Aqui es donde NixOS brilla. Un flake para el MacBook Pro M1 Max:<\/p>\n<div class=\"sourceCode\" id=\"cb4\"><pre\nclass=\"sourceCode nix\"><code class=\"sourceCode nix\"><span id=\"cb4-1\"><a href=\"#cb4-1\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\"># flake.nix<\/span><\/span>\n<span id=\"cb4-2\"><a href=\"#cb4-2\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"op\">{<\/span><\/span>\n<span id=\"cb4-3\"><a href=\"#cb4-3\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"va\">description<\/span> <span class=\"op\">=<\/span> <span class=\"st\">&quot;NixOS en MacBook Pro M1 Max&quot;<\/span><span class=\"op\">;<\/span><\/span>\n<span id=\"cb4-4\"><a href=\"#cb4-4\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb4-5\"><a href=\"#cb4-5\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"va\">inputs<\/span> <span class=\"op\">=<\/span> <span class=\"op\">{<\/span><\/span>\n<span id=\"cb4-6\"><a href=\"#cb4-6\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>    <span class=\"va\">nixpkgs<\/span>.<span class=\"va\">url<\/span> <span class=\"op\">=<\/span> <span class=\"st\">&quot;github:NixOS\/nixpkgs\/nixos-unstable&quot;<\/span><span class=\"op\">;<\/span><\/span>\n<span id=\"cb4-7\"><a href=\"#cb4-7\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>    <span class=\"va\">nixos-apple-silicon<\/span>.<span class=\"va\">url<\/span> <span class=\"op\">=<\/span> <span class=\"st\">&quot;github:nix-community\/nixos-apple-silicon&quot;<\/span><span class=\"op\">;<\/span><\/span>\n<span id=\"cb4-8\"><a href=\"#cb4-8\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>    <span class=\"co\"># NO usar inputs.nixpkgs.follows si quieres el cache binario<\/span><\/span>\n<span id=\"cb4-9\"><a href=\"#cb4-9\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"op\">};<\/span><\/span>\n<span id=\"cb4-10\"><a href=\"#cb4-10\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb4-11\"><a href=\"#cb4-11\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"va\">outputs<\/span> <span class=\"op\">=<\/span> <span class=\"op\">{<\/span> <span class=\"va\">nixpkgs<\/span><span class=\"op\">,<\/span> <span class=\"va\">nixos-apple-silicon<\/span><span class=\"op\">,<\/span> <span class=\"op\">...<\/span> <span class=\"op\">}<\/span>: <span class=\"op\">{<\/span><\/span>\n<span id=\"cb4-12\"><a href=\"#cb4-12\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>    <span class=\"va\">nixosConfigurations<\/span>.<span class=\"va\">macbook<\/span> <span class=\"op\">=<\/span> nixpkgs<span class=\"op\">.<\/span>lib<span class=\"op\">.<\/span>nixosSystem <span class=\"op\">{<\/span><\/span>\n<span id=\"cb4-13\"><a href=\"#cb4-13\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>      <span class=\"va\">system<\/span> <span class=\"op\">=<\/span> <span class=\"st\">&quot;aarch64-linux&quot;<\/span><span class=\"op\">;<\/span><\/span>\n<span id=\"cb4-14\"><a href=\"#cb4-14\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>      <span class=\"va\">modules<\/span> <span class=\"op\">=<\/span> <span class=\"op\">[<\/span><\/span>\n<span id=\"cb4-15\"><a href=\"#cb4-15\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>        nixos-apple-silicon<span class=\"op\">.<\/span>nixosModules<span class=\"op\">.<\/span>apple-silicon-support<\/span>\n<span id=\"cb4-16\"><a href=\"#cb4-16\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>        <span class=\"ss\">.\/hosts\/macbook\/configuration.nix<\/span><\/span>\n<span id=\"cb4-17\"><a href=\"#cb4-17\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>        <span class=\"ss\">.\/hosts\/macbook\/hardware-configuration.nix<\/span><\/span>\n<span id=\"cb4-18\"><a href=\"#cb4-18\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>      <span class=\"op\">];<\/span><\/span>\n<span id=\"cb4-19\"><a href=\"#cb4-19\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>    <span class=\"op\">};<\/span><\/span>\n<span id=\"cb4-20\"><a href=\"#cb4-20\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"op\">};<\/span><\/span>\n<span id=\"cb4-21\"><a href=\"#cb4-21\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"op\">}<\/span><\/span><\/code><\/pre><\/div>\n<p>La <code>configuration.nix<\/code> esencial:<\/p>\n<div class=\"sourceCode\" id=\"cb5\"><pre\nclass=\"sourceCode nix\"><code class=\"sourceCode nix\"><span id=\"cb5-1\"><a href=\"#cb5-1\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"op\">{<\/span> <span class=\"va\">config<\/span><span class=\"op\">,<\/span> <span class=\"va\">pkgs<\/span><span class=\"op\">,<\/span> <span class=\"va\">lib<\/span><span class=\"op\">,<\/span> <span class=\"op\">...<\/span> <span class=\"op\">}<\/span>:<\/span>\n<span id=\"cb5-2\"><a href=\"#cb5-2\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"op\">{<\/span><\/span>\n<span id=\"cb5-3\"><a href=\"#cb5-3\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"co\"># Boot -- U-Boot NO soporta EFI variables<\/span><\/span>\n<span id=\"cb5-4\"><a href=\"#cb5-4\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"va\">boot<\/span>.<span class=\"va\">loader<\/span>.<span class=\"va\">systemd-boot<\/span>.<span class=\"va\">enable<\/span> <span class=\"op\">=<\/span> <span class=\"cn\">true<\/span><span class=\"op\">;<\/span><\/span>\n<span id=\"cb5-5\"><a href=\"#cb5-5\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"va\">boot<\/span>.<span class=\"va\">loader<\/span>.<span class=\"va\">efi<\/span>.<span class=\"va\">canTouchEfiVariables<\/span> <span class=\"op\">=<\/span> <span class=\"cn\">false<\/span><span class=\"op\">;<\/span><\/span>\n<span id=\"cb5-6\"><a href=\"#cb5-6\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb5-7\"><a href=\"#cb5-7\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"co\"># Firmware WiFi (extraido de macOS durante instalacion)<\/span><\/span>\n<span id=\"cb5-8\"><a href=\"#cb5-8\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"va\">hardware<\/span>.<span class=\"va\">asahi<\/span>.<span class=\"va\">peripheralFirmwareDirectory<\/span> <span class=\"op\">=<\/span> <span class=\"ss\">.\/firmware<\/span><span class=\"op\">;<\/span><\/span>\n<span id=\"cb5-9\"><a href=\"#cb5-9\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb5-10\"><a href=\"#cb5-10\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"co\"># WiFi -- iwd, NO wpa_supplicant<\/span><\/span>\n<span id=\"cb5-11\"><a href=\"#cb5-11\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"va\">networking<\/span>.<span class=\"va\">wireless<\/span>.<span class=\"va\">iwd<\/span> <span class=\"op\">=<\/span> <span class=\"op\">{<\/span><\/span>\n<span id=\"cb5-12\"><a href=\"#cb5-12\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>    <span class=\"va\">enable<\/span> <span class=\"op\">=<\/span> <span class=\"cn\">true<\/span><span class=\"op\">;<\/span><\/span>\n<span id=\"cb5-13\"><a href=\"#cb5-13\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>    <span class=\"va\">settings<\/span>.<span class=\"va\">General<\/span>.<span class=\"va\">EnableNetworkConfiguration<\/span> <span class=\"op\">=<\/span> <span class=\"cn\">true<\/span><span class=\"op\">;<\/span><\/span>\n<span id=\"cb5-14\"><a href=\"#cb5-14\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"op\">};<\/span><\/span>\n<span id=\"cb5-15\"><a href=\"#cb5-15\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb5-16\"><a href=\"#cb5-16\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"co\"># Cache binario de Asahi (MUY recomendado)<\/span><\/span>\n<span id=\"cb5-17\"><a href=\"#cb5-17\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"va\">nix<\/span>.<span class=\"va\">settings<\/span> <span class=\"op\">=<\/span> <span class=\"op\">{<\/span><\/span>\n<span id=\"cb5-18\"><a href=\"#cb5-18\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>    <span class=\"va\">extra-substituters<\/span> <span class=\"op\">=<\/span> <span class=\"op\">[<\/span> <span class=\"st\">&quot;https:\/\/nixos-apple-silicon.cachix.org&quot;<\/span> <span class=\"op\">];<\/span><\/span>\n<span id=\"cb5-19\"><a href=\"#cb5-19\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>    <span class=\"va\">extra-trusted-public-keys<\/span> <span class=\"op\">=<\/span> <span class=\"op\">[<\/span><\/span>\n<span id=\"cb5-20\"><a href=\"#cb5-20\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>      <span class=\"st\">&quot;nixos-apple-silicon.cachix.org-1:8psDu5SA5dAD7qA0zMy5UT292TxeEPzIz8VVEr2Js20=&quot;<\/span><\/span>\n<span id=\"cb5-21\"><a href=\"#cb5-21\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>    <span class=\"op\">];<\/span><\/span>\n<span id=\"cb5-22\"><a href=\"#cb5-22\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"op\">};<\/span><\/span>\n<span id=\"cb5-23\"><a href=\"#cb5-23\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb5-24\"><a href=\"#cb5-24\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"co\"># Fix layout teclado (backtick\/tilde swap)<\/span><\/span>\n<span id=\"cb5-25\"><a href=\"#cb5-25\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"va\">boot<\/span>.<span class=\"va\">extraModprobeConfig<\/span> <span class=\"op\">=<\/span> <span class=\"st\">&#39;&#39;<\/span><\/span>\n<span id=\"cb5-26\"><a href=\"#cb5-26\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"st\">    options hid_apple iso_layout=0<\/span><\/span>\n<span id=\"cb5-27\"><a href=\"#cb5-27\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"st\">  &#39;&#39;<\/span><span class=\"op\">;<\/span><\/span>\n<span id=\"cb5-28\"><a href=\"#cb5-28\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"op\">}<\/span><\/span><\/code><\/pre><\/div>\n<p><strong>Nota sobre <code>inputs.nixpkgs.follows<\/code><\/strong>: si\nhaces que nixos-apple-silicon siga tu nixpkgs, el cache binario de\nCachix NO funcionara (los hashes cambian). Decidir entre coherencia de\nversiones o velocidad de build. Compilar el kernel Asahi desde cero\nlleva tiempo. Con el cache, es un download.<\/p>\n<h2 id=\"lo-que-el-modulo-configura-automaticamente\">Lo que el modulo\nconfigura automaticamente<\/h2>\n<p>No hace falta tocarlo, pero conviene saberlo:<\/p>\n<ul>\n<li>Kernel Asahi con todos los parches<\/li>\n<li>initrd con modulos para NVMe Apple, DART, teclado SPI, SMC,\netc.<\/li>\n<li>PipeWire con asahi-audio + speakersafetyd + bankstown-lv2<\/li>\n<li>Mesa de nixpkgs (con Asahi habilitado por defecto desde 25.1+)<\/li>\n<li>cpufreq governor <code>schedutil<\/code> (energy-aware\nscheduling)<\/li>\n<li>Parametros de kernel:\n<code>earlycon console=tty0 boot.shell_on_fail<\/code><\/li>\n<li>udev rules para evitar cuelgues con el lector SD<\/li>\n<\/ul>\n<h1 id=\"consideraciones-de-almacenamiento\">Consideraciones de\nalmacenamiento<\/h1>\n<p>Con 1TB de SSD interno:<\/p>\n<ul>\n<li>Dejar ~100GB para macOS (minimo funcional)<\/li>\n<li>~900GB para NixOS root<\/li>\n<li>Un sistema NixOS con desktop ocupa ~20-30GB<\/li>\n<li>El Nix store con varias generaciones cabe sin problema<\/li>\n<li>ext4 o btrfs funcionan perfectamente<\/li>\n<li>El SSD tiene sectores de 4096 bytes (no 512). Las herramientas lo\nmanejan correctamente<\/li>\n<\/ul>\n<p>Detalle interesante: Apple's SSDs son lentos procesando flush\nrequests (decenas de ms). El kernel Asahi tiene un parametro\n<code>nvme_apple.flush_interval<\/code> para coalescer flushes. El modulo\nNixOS lo pone a 0 por seguridad.<\/p>\n<h1 id=\"m1-max-vs-m1-base-que-cambia\">M1 Max vs M1 base: que cambia<\/h1>\n<p>A nivel de drivers, nada. En la tabla de Asahi, M1 Pro\/Max\/Ultra\ncomparten exactamente la misma columna (T600x). La diferencia es\nhardware puro:<\/p>\n<table>\n<thead>\n<tr>\n<th><\/th>\n<th>M1<\/th>\n<th>M1 Max<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>CPU cores<\/td>\n<td>8 (4P+4E)<\/td>\n<td>10 (8P+2E)<\/td>\n<\/tr>\n<tr>\n<td>GPU cores<\/td>\n<td>8<\/td>\n<td>32<\/td>\n<\/tr>\n<tr>\n<td>RAM unificada<\/td>\n<td>8-16 GB<\/td>\n<td>32-64 GB<\/td>\n<\/tr>\n<tr>\n<td>Puertos USB-C<\/td>\n<td>2<\/td>\n<td>3 + MagSafe<\/td>\n<\/tr>\n<tr>\n<td>HDMI<\/td>\n<td>No<\/td>\n<td>Si<\/td>\n<\/tr>\n<tr>\n<td>Lector SD<\/td>\n<td>No<\/td>\n<td>Si<\/td>\n<\/tr>\n<tr>\n<td>Chasis 16\"<\/td>\n<td>No<\/td>\n<td>Si (mejor thermal)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Mismos drivers, 4x GPU, mas puertos, mejor refrigeracion. Para\ndesarrollo y compilaciones, la diferencia de CPU y RAM es\nsignificativa.<\/p>\n<h1 id=\"conclusion\">Conclusion<\/h1>\n<p>NixOS en un MacBook Pro M1 Max es una combinacion seria. Hardware\npotente con drivers open-source maduros, gestion declarativa del sistema\ncon flakes, y un ecosistema de soporte activo. La unica limitacion real\npara el dia a dia es la falta de Thunderbolt\/DP Alt Mode para monitores\nexternos (solo HDMI).<\/p>\n<p>Si ya usas NixOS con flakes, anadir un host Apple Silicon es anadir\nun modulo a tu flake. Si vienes de macOS, es el camino mas limpio hacia\nLinux en hardware Apple.<\/p>\n<p>Recursos:<\/p>\n<ul>\n<li><a\nhref=\"https:\/\/github.com\/nix-community\/nixos-apple-silicon\">nixos-apple-silicon\nen GitHub<\/a><\/li>\n<li><a\nhref=\"https:\/\/asahilinux.org\/docs\/platform\/feature-support\/m1\/\">Tabla de\nsoporte M1 en Asahi<\/a><\/li>\n<li><a href=\"https:\/\/asahilinux.org\/fedora\/\">Fedora Asahi Remix<\/a>\n(referencia de lo que funciona)<\/li>\n<li><a href=\"https:\/\/github.com\/AsahiLinux\/docs\">Documentacion Asahi\nLinux<\/a><\/li>\n<\/ul>\n","author":"Ambrosio","datePublished":"2026-02-23T00:00:00+00:00","orgSource":"#+TITLE: NixOS en un MacBook Pro M1 Max: guia completa\n#+AUTHOR: Ambrosio\n#+DATE: 2026-02-23\n\nNixOS corriendo bare metal en un MacBook Pro 16\" con M1 Max. Suena a locura pero en 2026 es perfectamente viable. Este post cubre el estado real del soporte, como se instala, que funciona y que no, y la configuracion completa con flakes.\n\n* El ecosistema: Asahi Linux + nixos-apple-silicon\n\nTodo el soporte de Linux en Apple Silicon descansa sobre el trabajo monumental de [[https:\/\/asahilinux.org][Asahi Linux]]. El proyecto lleva activo desde 2021 y ha conseguido algo que muchos creian imposible: drivers open-source para hardware Apple con certificaciones oficiales de conformidad.\n\nPara NixOS especificamente, existe [[https:\/\/github.com\/nix-community\/nixos-apple-silicon][nixos-apple-silicon]] (originalmente de tpwrules, migrado a nix-community en mayo 2025). No es un fork de NixOS sino un modulo que importas en tu flake. Incluye:\n\n- Kernel Asahi Linux (parcheado para Apple Silicon)\n- U-Boot como bootloader UEFI\n- m1n1 (bootloader de bajo nivel de Asahi)\n- Configuracion automatica de audio (PipeWire + speakersafetyd)\n- Extraccion de firmware propietario (WiFi, Bluetooth)\n- Overlay con paquetes Asahi-especificos\n\nLos numeros hablan: 1395 estrellas, 142 forks, ultimo commit el 19 de febrero de 2026 (kernel asahi 6.18.10-1). Releases regulares cada pocas semanas.\n\n* Estado del hardware en el MacBook Pro 16\" M1 Max\n\nVamos al grano. Datos directos de la [[https:\/\/asahilinux.org\/docs\/platform\/feature-support\/m1\/][documentacion oficial de Asahi]].\n\n** Lo que funciona\n\n- *GPU*: 32 cores GPU con drivers certificados conformant. OpenGL 4.6, OpenGL ES 3.2, OpenCL 3.0, Vulkan 1.4. Todos en Mesa mainline desde 25.1+. El M1 Max tiene 4x mas cores GPU que el M1 base. Rinde.\n- *Display Retina*: upstream desde kernel 5.17. HiDPI nativo con Wayland. Control de brillo.\n- *Teclado y trackpad*: funcionan via SPI. Retroiluminacion del teclado upstream desde 6.4.\n- *WiFi*: upstream desde kernel 6.1. Broadcom. Importante: usar ~iwd~ en vez de ~wpa_supplicant~ (no soporta WPA3 en Broadcom).\n- *Bluetooth*: upstream desde kernel 6.2.\n- *Audio*: altavoces con DSP calibrado por modelo. Asahi dice que es \"the best Linux laptop audio you've ever heard\" y tiene razon. Jack 3.5mm y microfonos tambien funcionan.\n- *HDMI*: puerto nativo del 16\". Funciona con firmware 13.5. Audio HDMI en preview.\n- *Bateria*: informacion completa + cpuidle con energy-aware scheduling. Mejora dramatica de temperatura y duracion.\n- *NVMe*: upstream desde 5.19. El SSD interno vuela.\n- *Suspend\/Sleep*: funciona.\n- *Webcam*: funciona.\n- *Lector SD*: upstream desde 5.17.\n\n** Lo que NO funciona (todavia)\n\n- *Thunderbolt*: WIP. Los puertos USB-C funcionan como USB2\/USB3 y para carga, pero no hay Thunderbolt nativo. Esto implica: *sin DP Alt Mode*, es decir, monitores externos solo via HDMI.\n- *TouchID*: TBA. Requiere SEP (Secure Enclave), que esta WIP.\n- *Decodificacion\/codificacion de video por hardware*: WIP\/TBA. Software decoding funciona pero gasta mas CPU.\n- *ProRes Codec*: TBA.\n- *Neural Engine*: solo driver experimental out-of-tree.\n\nLa limitacion mas relevante para el dia a dia es Thunderbolt\/DP Alt Mode. Si necesitas multiples monitores externos, solo puedes usar el HDMI integrado. Para desarrollo con un monitor externo via HDMI, es suficiente.\n\n* Instalacion paso a paso\n\nApple Silicon requiere siempre un macOS stub para arrancar. Sera dual boot si o si, aunque puedes dejar macOS en los huesos (~70-100GB).\n\n** Fase 1: Preparar UEFI desde macOS\n\n#+begin_src bash\n# Desde Terminal.app en macOS (como admin)\ncurl https:\/\/alx.sh | sh\n#+end_src\n\nEl script te guia:\n1. Redimensionar la particion de macOS (dejar espacio para NixOS)\n2. Instalar en el espacio libre\n3. Elegir \"UEFI environment only\"\n4. Nombrar la instalacion \"NixOS\"\n5. Configurar seguridad (permissive mode, custom boot object)\n\n** Fase 2: Instalar NixOS desde USB\n\nConstruir la ISO del instalador (o descargarla de [[https:\/\/github.com\/nix-community\/nixos-apple-silicon\/releases][releases]]):\n\n#+begin_src bash\ngit clone https:\/\/github.com\/nix-community\/nixos-apple-silicon\/\ncd nixos-apple-silicon\nnix build --extra-experimental-features 'nix-command flakes' \\\n  .#installer-bootstrap -o installer -j4 -L\ndd if=installer\/iso\/nixos-*.iso of=\/dev\/sdX bs=4M status=progress\n#+end_src\n\nArrancar con USB, particionar, montar y configurar:\n\n#+begin_src bash\n# Particionar\nsgdisk \/dev\/nvme0n1 -n 0:0 -s\nmkfs.ext4 -L nixos \/dev\/nvme0n1pX  # sustituir X por la particion correcta\n\n# Montar\nmount \/dev\/disk\/by-label\/nixos \/mnt\nmkdir -p \/mnt\/boot\nmount \/dev\/disk\/by-partuuid\/$(cat \/proc\/device-tree\/chosen\/asahi,efi-system-partition) \/mnt\/boot\n\n# Generar config base\nnixos-generate-config --root \/mnt\ncp -r \/etc\/nixos\/apple-silicon-support \/mnt\/etc\/nixos\/\n#+end_src\n\nConectar WiFi con ~iwctl~, instalar con ~nixos-install~, reiniciar. Hecho.\n\n* Configuracion con flakes\n\nAqui es donde NixOS brilla. Un flake para el MacBook Pro M1 Max:\n\n#+begin_src nix\n# flake.nix\n{\n  description = \"NixOS en MacBook Pro M1 Max\";\n\n  inputs = {\n    nixpkgs.url = \"github:NixOS\/nixpkgs\/nixos-unstable\";\n    nixos-apple-silicon.url = \"github:nix-community\/nixos-apple-silicon\";\n    # NO usar inputs.nixpkgs.follows si quieres el cache binario\n  };\n\n  outputs = { nixpkgs, nixos-apple-silicon, ... }: {\n    nixosConfigurations.macbook = nixpkgs.lib.nixosSystem {\n      system = \"aarch64-linux\";\n      modules = [\n        nixos-apple-silicon.nixosModules.apple-silicon-support\n        .\/hosts\/macbook\/configuration.nix\n        .\/hosts\/macbook\/hardware-configuration.nix\n      ];\n    };\n  };\n}\n#+end_src\n\nLa ~configuration.nix~ esencial:\n\n#+begin_src nix\n{ config, pkgs, lib, ... }:\n{\n  # Boot -- U-Boot NO soporta EFI variables\n  boot.loader.systemd-boot.enable = true;\n  boot.loader.efi.canTouchEfiVariables = false;\n\n  # Firmware WiFi (extraido de macOS durante instalacion)\n  hardware.asahi.peripheralFirmwareDirectory = .\/firmware;\n\n  # WiFi -- iwd, NO wpa_supplicant\n  networking.wireless.iwd = {\n    enable = true;\n    settings.General.EnableNetworkConfiguration = true;\n  };\n\n  # Cache binario de Asahi (MUY recomendado)\n  nix.settings = {\n    extra-substituters = [ \"https:\/\/nixos-apple-silicon.cachix.org\" ];\n    extra-trusted-public-keys = [\n      \"nixos-apple-silicon.cachix.org-1:8psDu5SA5dAD7qA0zMy5UT292TxeEPzIz8VVEr2Js20=\"\n    ];\n  };\n\n  # Fix layout teclado (backtick\/tilde swap)\n  boot.extraModprobeConfig = ''\n    options hid_apple iso_layout=0\n  '';\n}\n#+end_src\n\n*Nota sobre ~inputs.nixpkgs.follows~*: si haces que nixos-apple-silicon siga tu nixpkgs, el cache binario de Cachix NO funcionara (los hashes cambian). Decidir entre coherencia de versiones o velocidad de build. Compilar el kernel Asahi desde cero lleva tiempo. Con el cache, es un download.\n\n** Lo que el modulo configura automaticamente\n\nNo hace falta tocarlo, pero conviene saberlo:\n\n- Kernel Asahi con todos los parches\n- initrd con modulos para NVMe Apple, DART, teclado SPI, SMC, etc.\n- PipeWire con asahi-audio + speakersafetyd + bankstown-lv2\n- Mesa de nixpkgs (con Asahi habilitado por defecto desde 25.1+)\n- cpufreq governor ~schedutil~ (energy-aware scheduling)\n- Parametros de kernel: ~earlycon console=tty0 boot.shell_on_fail~\n- udev rules para evitar cuelgues con el lector SD\n\n* Consideraciones de almacenamiento\n\nCon 1TB de SSD interno:\n- Dejar ~100GB para macOS (minimo funcional)\n- ~900GB para NixOS root\n- Un sistema NixOS con desktop ocupa ~20-30GB\n- El Nix store con varias generaciones cabe sin problema\n- ext4 o btrfs funcionan perfectamente\n- El SSD tiene sectores de 4096 bytes (no 512). Las herramientas lo manejan correctamente\n\nDetalle interesante: Apple's SSDs son lentos procesando flush requests (decenas de ms). El kernel Asahi tiene un parametro ~nvme_apple.flush_interval~ para coalescer flushes. El modulo NixOS lo pone a 0 por seguridad.\n\n* M1 Max vs M1 base: que cambia\n\nA nivel de drivers, nada. En la tabla de Asahi, M1 Pro\/Max\/Ultra comparten exactamente la misma columna (T600x). La diferencia es hardware puro:\n\n| | M1 | M1 Max |\n|---+---+---|\n| CPU cores | 8 (4P+4E) | 10 (8P+2E) |\n| GPU cores | 8 | 32 |\n| RAM unificada | 8-16 GB | 32-64 GB |\n| Puertos USB-C | 2 | 3 + MagSafe |\n| HDMI | No | Si |\n| Lector SD | No | Si |\n| Chasis 16\" | No | Si (mejor thermal) |\n\nMismos drivers, 4x GPU, mas puertos, mejor refrigeracion. Para desarrollo y compilaciones, la diferencia de CPU y RAM es significativa.\n\n* Conclusion\n\nNixOS en un MacBook Pro M1 Max es una combinacion seria. Hardware potente con drivers open-source maduros, gestion declarativa del sistema con flakes, y un ecosistema de soporte activo. La unica limitacion real para el dia a dia es la falta de Thunderbolt\/DP Alt Mode para monitores externos (solo HDMI).\n\nSi ya usas NixOS con flakes, anadir un host Apple Silicon es anadir un modulo a tu flake. Si vienes de macOS, es el camino mas limpio hacia Linux en hardware Apple.\n\nRecursos:\n- [[https:\/\/github.com\/nix-community\/nixos-apple-silicon][nixos-apple-silicon en GitHub]]\n- [[https:\/\/asahilinux.org\/docs\/platform\/feature-support\/m1\/][Tabla de soporte M1 en Asahi]]\n- [[https:\/\/asahilinux.org\/fedora\/][Fedora Asahi Remix]] (referencia de lo que funciona)\n- [[https:\/\/github.com\/AsahiLinux\/docs][Documentacion Asahi Linux]]\n"}