summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-xassets/m1-firmware/all_firmware.tar.gzbin0 -> 29419807 bytes
-rwxr-xr-xassets/m1-firmware/kernelcache.release.mac13jbin0 -> 25847891 bytes
-rw-r--r--assets/nix-256x256.pngbin0 -> 8406 bytes
-rw-r--r--flake.lock71
-rw-r--r--flake.nix107
-rw-r--r--machines/bismuth/devices.nix2
-rw-r--r--machines/graphite/devices.nix2
-rw-r--r--machines/moissanite/default.nix12
-rw-r--r--machines/moissanite/devices.nix94
-rw-r--r--machines/moissanite/hardware.nix49
-rw-r--r--machines/moissanite/home.nix9
-rw-r--r--modules/common.nix12
-rw-r--r--modules/nix.nix4
13 files changed, 305 insertions, 57 deletions
diff --git a/assets/m1-firmware/all_firmware.tar.gz b/assets/m1-firmware/all_firmware.tar.gz
new file mode 100755
index 0000000..950f725
--- /dev/null
+++ b/assets/m1-firmware/all_firmware.tar.gz
Binary files differdiff --git a/assets/m1-firmware/kernelcache.release.mac13j b/assets/m1-firmware/kernelcache.release.mac13j
new file mode 100755
index 0000000..71881bf
--- /dev/null
+++ b/assets/m1-firmware/kernelcache.release.mac13j
Binary files differdiff --git a/assets/nix-256x256.png b/assets/nix-256x256.png
new file mode 100644
index 0000000..f4b3813
--- /dev/null
+++ b/assets/nix-256x256.png
Binary files differdiff --git a/flake.lock b/flake.lock
index a5bdadf..7aaed78 100644
--- a/flake.lock
+++ b/flake.lock
@@ -12,11 +12,11 @@
         "systems": "systems"
       },
       "locked": {
-        "lastModified": 1747575206,
-        "narHash": "sha256-NwmAFuDUO/PFcgaGGr4j3ozG9Pe5hZ/ogitWhY+D81k=",
+        "lastModified": 1750173260,
+        "narHash": "sha256-9P1FziAwl5+3edkfFcr5HeGtQUtrSdk/MksX39GieoA=",
         "owner": "ryantm",
         "repo": "agenix",
-        "rev": "4835b1dc898959d8547a871ef484930675cb47f1",
+        "rev": "531beac616433bac6f9e2a19feb8e99a22a66baf",
         "type": "github"
       },
       "original": {
@@ -62,6 +62,21 @@
         "type": "github"
       }
     },
+    "flake-compat_2": {
+      "locked": {
+        "lastModified": 1688025799,
+        "narHash": "sha256-ktpB4dRtnksm9F5WawoIkEneh1nrEvuxb5lJFt1iOyw=",
+        "owner": "nix-community",
+        "repo": "flake-compat",
+        "rev": "8bf105319d44f6b9f0d764efa4fdef9f1cc9ba1c",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-community",
+        "repo": "flake-compat",
+        "type": "github"
+      }
+    },
     "flake-utils": {
       "inputs": {
         "systems": "systems_2"
@@ -138,11 +153,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1749154018,
-        "narHash": "sha256-gjN3j7joRvT3a8Zgcylnd4NFsnXeDBumqiu4HmY1RIg=",
+        "lastModified": 1752208517,
+        "narHash": "sha256-aRY1cYOdVdXdNjcL/Twpa27CknO7pVHxooPsBizDraE=",
         "owner": "nix-community",
         "repo": "home-manager",
-        "rev": "7aae0ee71a17b19708b93b3ed448a1a0952bf111",
+        "rev": "c6a01e54af81b381695db796a43360bf6db5702f",
         "type": "github"
       },
       "original": {
@@ -159,7 +174,7 @@
         "narHash": "sha256-pgDJZjj4jpzkFxsqBTI/9Yb0n3gW+DvDtuv9SwQZZcs=",
         "rev": "079528098f5998ba13c88821a2eca1005c1695de",
         "type": "tarball",
-        "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/079528098f5998ba13c88821a2eca1005c1695de.tar.gz?rev=079528098f5998ba13c88821a2eca1005c1695de"
+        "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/079528098f5998ba13c88821a2eca1005c1695de.tar.gz"
       },
       "original": {
         "type": "tarball",
@@ -180,7 +195,7 @@
         "narHash": "sha256-fprwZKE1uMzO9tiWWOrmLWBW3GPkMayQfb0xOvVFIno=",
         "rev": "868d97695bab9d21f6070b03957bcace249fbe3c",
         "type": "tarball",
-        "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/868d97695bab9d21f6070b03957bcace249fbe3c.tar.gz?rev=868d97695bab9d21f6070b03957bcace249fbe3c"
+        "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/868d97695bab9d21f6070b03957bcace249fbe3c.tar.gz"
       },
       "original": {
         "type": "tarball",
@@ -195,11 +210,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1749521131,
-        "narHash": "sha256-ezZ15tLA2L+rmtn39dKLFW/UM2xlksC61V12blulpjE=",
+        "lastModified": 1752200230,
+        "narHash": "sha256-WqqWjRX4qZYqO/cgvU/ZEzJBQqHBi17OEVv2kt05WiU=",
         "owner": "nix-community",
         "repo": "nix-vscode-extensions",
-        "rev": "299b2aa650d32310153746135b6a84a6c4de9c21",
+        "rev": "3c866dfb70d282247452742098d315b97df713d2",
         "type": "github"
       },
       "original": {
@@ -208,13 +223,34 @@
         "type": "github"
       }
     },
+    "nixos-apple-silicon": {
+      "inputs": {
+        "flake-compat": "flake-compat_2",
+        "nixpkgs": [
+          "nixpkgs-unstable"
+        ]
+      },
+      "locked": {
+        "lastModified": 1751622568,
+        "narHash": "sha256-EE3NBsej517VRa1x+ylAghrvngftxf1KgfHlE9OYyXE=",
+        "owner": "nix-community",
+        "repo": "nixos-apple-silicon",
+        "rev": "eba4b40c816e5aff8951ae231ac237e8aab8ec1d",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-community",
+        "repo": "nixos-apple-silicon",
+        "type": "github"
+      }
+    },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1749494155,
-        "narHash": "sha256-FG4DEYBpROupu758beabUk9lhrblSf5hnv84v1TLqMc=",
+        "lastModified": 1751943650,
+        "narHash": "sha256-7orTnNqkGGru8Je6Un6mq1T8YVVU/O5kyW4+f9C1mZQ=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "88331c17ba434359491e8d5889cce872464052c2",
+        "rev": "88983d4b665fb491861005137ce2b11a9f89f203",
         "type": "github"
       },
       "original": {
@@ -247,11 +283,11 @@
     },
     "nixpkgs-unstable": {
       "locked": {
-        "lastModified": 1749285348,
-        "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=",
+        "lastModified": 1751984180,
+        "narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f",
+        "rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0",
         "type": "github"
       },
       "original": {
@@ -268,6 +304,7 @@
         "home-manager": "home-manager",
         "lix-module": "lix-module",
         "nix-vscode-extensions": "nix-vscode-extensions",
+        "nixos-apple-silicon": "nixos-apple-silicon",
         "nixpkgs": "nixpkgs",
         "nixpkgs-esp-dev": "nixpkgs-esp-dev",
         "nixpkgs-unstable": "nixpkgs-unstable"
diff --git a/flake.nix b/flake.nix
index ca3e1c5..c493fcd 100644
--- a/flake.nix
+++ b/flake.nix
@@ -13,6 +13,11 @@
       inputs.nixpkgs.follows = "nixpkgs";
     };
 
+    nixos-apple-silicon = {
+      url = "github:nix-community/nixos-apple-silicon";
+      inputs.nixpkgs.follows = "nixpkgs-unstable";
+    };
+
     agenix = {
       url = "github:ryantm/agenix";
       inputs.nixpkgs.follows = "nixpkgs";
@@ -38,6 +43,7 @@
       nixpkgs,
       nixpkgs-unstable,
       lix-module,
+      nixos-apple-silicon,
       agenix,
       home-manager,
       nix-vscode-extensions,
@@ -45,22 +51,37 @@
       ...
     }:
     let
-      system = "x86_64-linux";
-
-      machines = [
-        "graphite"
-        "bismuth"
+      systems = {
+        x86 = "x86_64-linux";
+        arm = "aarch64-linux";
+      };
+
+      machines = with systems; [
+        {
+          name = "graphite";
+          system = x86;
+        }
+        {
+          name = "moissanite";
+          system = arm;
+        }
+        {
+          name = "bismuth";
+          system = x86;
+        }
       ];
 
       overlays = [
         lix-module.overlays.default
+        nixos-apple-silicon.overlays.default # unused on non-asahi machines
         agenix.overlays.default
         nix-vscode-extensions.overlays.default
         nixpkgs-esp-dev.overlays.default
         (import ./overlay.nix)
       ];
 
-      packageSets =
+      packageSetsForSystem =
+        system:
         let
           commonPkgsInputs = {
             inherit system;
@@ -72,38 +93,60 @@
 
           unstablePkgs = import nixpkgs-unstable commonPkgsInputs;
 
-          auxiliaryPkgs = import ./pkgs { inherit pkgs unstablePkgs nixpkgs nixpkgs-unstable; };
+          auxiliaryPkgs = import ./pkgs {
+            inherit
+              pkgs
+              unstablePkgs
+              nixpkgs
+              nixpkgs-unstable
+              ;
+          };
         };
 
+      inherit (nixpkgs) lib;
     in
     {
-      nixosConfigurations = nixpkgs.lib.genAttrs machines (
-        machine:
-        let
-          specialArgs = inputs // packageSets // { me = machine; };
-        in
-        nixpkgs.lib.nixosSystem {
-          inherit system specialArgs;
-
-          modules = [
-            ./machines/${machine}
-
-            home-manager.nixosModules.home-manager
-            {
-              home-manager.useGlobalPkgs = true;
-              home-manager.useUserPackages = true;
-              home-manager.backupFileExtension = "hm-backup";
-              home-manager.extraSpecialArgs = specialArgs;
-              home-manager.users.mel = import ./machines/${machine}/home.nix;
-            }
-
-            lix-module.nixosModules.default
-            agenix.nixosModules.default
-          ];
-        }
+      nixosConfigurations = lib.mergeAttrsList (
+        map (
+          machine:
+          let
+            packageSets = packageSetsForSystem machine.system;
+
+            specialArgs = inputs // packageSets // { me = machine; };
+          in
+          {
+            ${machine.name} = lib.nixosSystem {
+              inherit (machine) system;
+              inherit specialArgs;
+
+              modules = [
+                ./machines/${machine.name}
+
+                home-manager.nixosModules.home-manager
+                {
+                  home-manager.useGlobalPkgs = true;
+                  home-manager.useUserPackages = true;
+                  home-manager.backupFileExtension = "hm-backup";
+                  home-manager.extraSpecialArgs = specialArgs;
+                  home-manager.users.mel = import ./machines/${machine.name}/home.nix;
+                }
+
+                lix-module.nixosModules.default
+                agenix.nixosModules.default
+              ];
+            };
+          }
+        ) machines
       );
 
       # compatibility wrapper for nixos-option
-      legacyPackages.${system} = with packageSets; pkgs.recurseIntoAttrs pkgs;
+      legacyPackages = lib.genAttrs (lib.attrValues systems) (
+        system:
+        let
+          packageSets = packageSetsForSystem system;
+        in
+        with packageSets;
+        pkgs.recurseIntoAttrs pkgs
+      );
     };
 }
diff --git a/machines/bismuth/devices.nix b/machines/bismuth/devices.nix
index b5a6e16..6aa4122 100644
--- a/machines/bismuth/devices.nix
+++ b/machines/bismuth/devices.nix
@@ -3,6 +3,8 @@
 {
   # boot settings
   boot = {
+    kernelPackages = pkgs.linuxPackages_latest;
+
     loader.grub = {
       enable = true;
       devices = [ "nodev" ];
diff --git a/machines/graphite/devices.nix b/machines/graphite/devices.nix
index be777a9..c9851c3 100644
--- a/machines/graphite/devices.nix
+++ b/machines/graphite/devices.nix
@@ -8,6 +8,8 @@
 
   # boot settings
   boot = {
+    kernelPackages = pkgs.linuxPackages_latest;
+
     loader.systemd-boot.enable = true;
     loader.efi.canTouchEfiVariables = true;
 
diff --git a/machines/moissanite/default.nix b/machines/moissanite/default.nix
new file mode 100644
index 0000000..8a306d5
--- /dev/null
+++ b/machines/moissanite/default.nix
@@ -0,0 +1,12 @@
+{ ... }:
+
+{
+  imports = [
+    ../../modules/common.nix
+
+    ./hardware.nix
+    ./devices.nix
+  ];
+
+  system.stateVersion = "25.05";
+}
diff --git a/machines/moissanite/devices.nix b/machines/moissanite/devices.nix
new file mode 100644
index 0000000..d6c4d2c
--- /dev/null
+++ b/machines/moissanite/devices.nix
@@ -0,0 +1,94 @@
+{
+  config,
+  lib,
+  pkgs,
+  nixos-apple-silicon,
+  ...
+}:
+
+{
+  imports = [
+    nixos-apple-silicon.nixosModules.apple-silicon-support
+  ];
+
+  # boot settings
+  boot = {
+    loader.systemd-boot.enable = true;
+    loader.efi.canTouchEfiVariables = false;
+
+    plymouth.enable = true;
+
+    initrd.systemd.enable = true;
+
+    # check nixos-apple-silicon documentation on this,
+    # if keyboard weirdness ever comes up.
+    # extraModprobeConfig = ''
+    #   options hid_apple iso_layout=0
+    # '';
+
+    # show a nix logo on asahi m1n1 boot!
+    m1n1CustomLogo = ../../assets/nix-256x256.png;
+  };
+
+  # swap
+  zramSwap = {
+    enable = true;
+    algorithm = "zstd";
+    swapDevices = 1;
+    memoryPercent = 50;
+  };
+
+  # hardware
+  hardware = {
+    enableAllFirmware = true;
+    enableRedistributableFirmware = true;
+
+    graphics = {
+      enable = true;
+      enable32Bit = lib.mkForce false;
+    };
+    bluetooth.enable = true;
+
+    # asahi-specific settings!
+    asahi = {
+      enable = true;
+
+      # proprietary apple firmware extracted during installation.
+      # it can also be found in /boot/asahi, but needs to be
+      # included here for flake purity.
+      peripheralFirmwareDirectory = ../../assets/m1-firmware;
+
+      # mesa
+      useExperimentalGPUDriver = true;
+      experimentalGPUInstallMode = "replace"; # probably no longer used.
+      # sound
+      setupAsahiSound = true;
+      # kernel
+      withRust = true;
+    };
+  };
+
+  # internet/wifi
+  networking = {
+    networkmanager = {
+      enable = true;
+      wifi.backend = "iwd";
+    };
+    wireless.iwd = {
+      enable = true;
+      settings.General.EnableNetworkConfiguration = true;
+    };
+  };
+
+  # sound
+  security.rtkit.enable = true;
+  services.pipewire = {
+    enable = true;
+    alsa = {
+      enable = true;
+      support32Bit = true;
+    };
+    pulse.enable = true;
+    jack.enable = true;
+  };
+}
diff --git a/machines/moissanite/hardware.nix b/machines/moissanite/hardware.nix
new file mode 100644
index 0000000..45661b5
--- /dev/null
+++ b/machines/moissanite/hardware.nix
@@ -0,0 +1,49 @@
+# Do not modify this file!  It was generated by ‘nixos-generate-config’
+# and may be overwritten by future invocations.  Please make changes
+# to /etc/nixos/configuration.nix instead.
+{
+  config,
+  lib,
+  pkgs,
+  modulesPath,
+  ...
+}:
+
+{
+  imports = [
+    (modulesPath + "/installer/scan/not-detected.nix")
+  ];
+
+  boot.initrd.availableKernelModules = [
+    "usb_storage"
+    "sdhci_pci"
+  ];
+  boot.initrd.kernelModules = [ ];
+  boot.kernelModules = [ ];
+  boot.extraModulePackages = [ ];
+
+  fileSystems."/" = {
+    device = "/dev/disk/by-uuid/3ae7395f-1b2c-407a-9ea5-3baeeabca370";
+    fsType = "ext4";
+  };
+
+  fileSystems."/boot" = {
+    device = "/dev/disk/by-uuid/C6F0-0913";
+    fsType = "vfat";
+    options = [
+      "fmask=0022"
+      "dmask=0022"
+    ];
+  };
+
+  swapDevices = [ ];
+
+  # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
+  # (the default) this is the recommended approach. When using systemd-networkd it's
+  # still possible to use this option, but it's recommended to use it in conjunction
+  # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
+  networking.useDHCP = lib.mkDefault true;
+  # networking.interfaces.wlan0.useDHCP = lib.mkDefault true;
+
+  nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
+}
diff --git a/machines/moissanite/home.nix b/machines/moissanite/home.nix
new file mode 100644
index 0000000..8f27ed2
--- /dev/null
+++ b/machines/moissanite/home.nix
@@ -0,0 +1,9 @@
+{ pkgs, ... }:
+
+{
+  imports = [
+    ../../modules/home/common.nix
+  ];
+
+  home.stateVersion = "25.05";
+}
diff --git a/modules/common.nix b/modules/common.nix
index fb6479d..fcaf896 100644
--- a/modules/common.nix
+++ b/modules/common.nix
@@ -16,8 +16,6 @@
     ./nix-ld.nix
   ];
 
-  boot.kernelPackages = pkgs.linuxPackages_latest;
-
   services.envfs.enable = true;
   virtualisation.libvirtd.enable = true;
 
@@ -36,11 +34,13 @@
     };
   };
 
-  networking.hostName = me;
+  networking.hostName = me.name;
   # use corsac dns server
-  networking.nameservers = let
-    corsacTailnet = "100.64.100.100";
-  in [ corsacTailnet ];
+  networking.nameservers =
+    let
+      corsacTailnet = "100.64.100.100";
+    in
+    [ corsacTailnet ];
 
   services.resolved.enable = true;
 
diff --git a/modules/nix.nix b/modules/nix.nix
index a96813b..0f4366a 100644
--- a/modules/nix.nix
+++ b/modules/nix.nix
@@ -38,7 +38,7 @@ in
         # yes nix, i know my flake is dirty!!!
         warn-dirty = false;
       }
-      (mkIf (me != "bismuth") bismuthCache)
+      (mkIf (me.name != "bismuth") bismuthCache)
     ];
 
     distributedBuilds = true;
@@ -57,7 +57,7 @@ in
           ];
         };
       in
-      lib.filter (m: m.hostName != me) [
+      lib.filter (m: m.hostName != me.name) [
         {
           hostName = tailnet "bismuth";
           maxJobs = 32;