summaryrefslogtreecommitdiff
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.nix99
-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, 301 insertions, 53 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 differ
diff --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 differ
diff --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 differ
diff --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";
+ systems = {
+ x86 = "x86_64-linux";
+ arm = "aarch64-linux";
+ };
- machines = [
- "graphite"
- "bismuth"
+ 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;
+ nixosConfigurations = lib.mergeAttrsList (
+ map (
+ machine:
+ let
+ packageSets = packageSetsForSystem machine.system;
- modules = [
- ./machines/${machine}
+ specialArgs = inputs // packageSets // { me = machine; };
+ in
+ {
+ ${machine.name} = lib.nixosSystem {
+ inherit (machine) system;
+ inherit specialArgs;
- 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;
- }
+ modules = [
+ ./machines/${machine.name}
- lix-module.nixosModules.default
- agenix.nixosModules.default
- ];
- }
+ 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;