diff options
| author | Mel <mel@rnrd.eu> | 2025-07-12 04:00:28 +0200 |
|---|---|---|
| committer | Mel <mel@rnrd.eu> | 2025-07-12 04:00:28 +0200 |
| commit | 4fd56f73360372665dd072adac2a78156d4caf2d (patch) | |
| tree | ce681316938f536ad2309e1711ba3eb40046c8d2 | |
| parent | 90ae56d81617248ed6570dfc7fb67940db6f8450 (diff) | |
| download | minerals-4fd56f73360372665dd072adac2a78156d4caf2d.tar.zst minerals-4fd56f73360372665dd072adac2a78156d4caf2d.zip | |
Setup new M1 MacBook as 'Moissanite' with Asahi Linux
Signed-off-by: Mel <mel@rnrd.eu>
| -rwxr-xr-x | assets/m1-firmware/all_firmware.tar.gz | bin | 0 -> 29419807 bytes | |||
| -rwxr-xr-x | assets/m1-firmware/kernelcache.release.mac13j | bin | 0 -> 25847891 bytes | |||
| -rw-r--r-- | assets/nix-256x256.png | bin | 0 -> 8406 bytes | |||
| -rw-r--r-- | flake.lock | 71 | ||||
| -rw-r--r-- | flake.nix | 107 | ||||
| -rw-r--r-- | machines/bismuth/devices.nix | 2 | ||||
| -rw-r--r-- | machines/graphite/devices.nix | 2 | ||||
| -rw-r--r-- | machines/moissanite/default.nix | 12 | ||||
| -rw-r--r-- | machines/moissanite/devices.nix | 94 | ||||
| -rw-r--r-- | machines/moissanite/hardware.nix | 49 | ||||
| -rw-r--r-- | machines/moissanite/home.nix | 9 | ||||
| -rw-r--r-- | modules/common.nix | 12 | ||||
| -rw-r--r-- | modules/nix.nix | 4 |
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; |
