From 57eee399e30963cdc387f279a248e0bc9a9742a5 Mon Sep 17 00:00:00 2001 From: reidlab Date: Wed, 31 Dec 2025 22:25:52 -0800 Subject: [PATCH] abstract away architectures --- README.md | 5 +-- flake.lock | 16 +++++++++ flake.nix | 49 ++++++++++++++++------------ hosts/goopnet-interface/hardware.nix | 1 - hosts/goopnet-interface/meta.nix | 3 ++ lib/attrs.nix | 2 +- lib/nixos.nix | 25 +++++++++----- lib/options.nix | 4 +-- 8 files changed, 69 insertions(+), 36 deletions(-) create mode 100644 hosts/goopnet-interface/meta.nix diff --git a/README.md b/README.md index 7fe0ab4..3966418 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # dotfiles -nix flake config! this is just used on my personal computer +nix flake config! this is just used on my personal computer(s) ## users @@ -13,4 +13,5 @@ for something more server oriented, check out [`nix-server`](https://git.reidlab each host should have these files: - `default.nix`, contains everything relating to the basic system - - `hardware.nix`, hardware configuration. + - `hardware.nix`, hardware-specific configuration + - `meta.nix`, extra things passed thru to `mkHost` diff --git a/flake.lock b/flake.lock index 997081e..cca93b7 100644 --- a/flake.lock +++ b/flake.lock @@ -564,6 +564,7 @@ "nix-index-database": "nix-index-database", "nixpkgs": "nixpkgs_4", "rofi-catppuccin": "rofi-catppuccin", + "systems": "systems_3", "waybar-catppuccin": "waybar-catppuccin" } }, @@ -597,6 +598,21 @@ "type": "github" } }, + "systems_3": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, "waybar-catppuccin": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index dc7d5eb..6906795 100644 --- a/flake.nix +++ b/flake.nix @@ -3,6 +3,7 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + systems.url = "github:nix-systems/default-linux"; home-manager.url = "github:nix-community/home-manager"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; @@ -29,44 +30,50 @@ rofi-catppuccin.flake = false; }; - outputs = inputs @ { self, nixpkgs, ... }: + outputs = inputs @ { self, nixpkgs, systems, ... }: let inherit (lib.my) mapModules mapModulesRec mapHosts; - system = "x86_64-linux"; + eachSystem = nixpkgs.lib.genAttrs (import systems); - mkPkgs = pkgs: extraOverlays: + lib = nixpkgs.lib.extend (final: prev: { + my = import ./lib { + inherit inputs; + lib = final; + pkgs = null; + }; + }); + + mkPkgs = system: pkgs: extraOverlays: import pkgs { inherit system; config.allowUnfree = true; config.allowAliases = true; overlays = extraOverlays ++ (lib.attrValues self.overlays); }; - pkgs = mkPkgs nixpkgs [ - self.overlays.default - inputs.niri.overlays.niri - ]; - lib = nixpkgs.lib.extend (final: prev: { - my = import ./lib { - inherit pkgs inputs; - lib = final; - }; - }); + pkgsFor = eachSystem (system: + mkPkgs system nixpkgs [ + self.overlays.default + inputs.niri.overlays.niri + ] + ); in { lib = lib.my; - overlays = - (mapModules ./overlays import) - // { - default = final: prev: { - my = self.packages.${system}; - }; + overlays = (mapModules ./overlays import) // { + default = final: prev: { + my = self.packages.${final.stdenv.hostPlatform.system}; }; + }; - packages."${system}" = mapModules ./packages (p: pkgs.callPackage p {}); + packages = eachSystem (system: let + pkgs = pkgsFor.${system}; + in + mapModules ./packages (p: pkgs.callPackage p {}) + ); nixosModules = mapModulesRec ./modules import; - nixosConfigurations = mapHosts ./hosts {}; + nixosConfigurations = mapHosts ./hosts { inherit pkgsFor; }; }; } diff --git a/hosts/goopnet-interface/hardware.nix b/hosts/goopnet-interface/hardware.nix index b4e9120..adff5be 100755 --- a/hosts/goopnet-interface/hardware.nix +++ b/hosts/goopnet-interface/hardware.nix @@ -45,6 +45,5 @@ # networking.interfaces.end0.useDHCP = lib.mkDefault true; # networking.interfaces.wlan0.useDHCP = lib.mkDefault true; - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; } diff --git a/hosts/goopnet-interface/meta.nix b/hosts/goopnet-interface/meta.nix new file mode 100644 index 0000000..efab059 --- /dev/null +++ b/hosts/goopnet-interface/meta.nix @@ -0,0 +1,3 @@ +{ + system = "x86_64-linux"; +} diff --git a/lib/attrs.nix b/lib/attrs.nix index e5890b4..4c2d488 100644 --- a/lib/attrs.nix +++ b/lib/attrs.nix @@ -4,7 +4,7 @@ in rec { # attrsToList attrsToList = attrs: - mapAttrsToList (name: value: {inherit name value;}) attrs; + mapAttrsToList (name: value: { inherit name value; }) attrs; # mapFilterAttrs :: # (name -> value -> bool) diff --git a/lib/nixos.nix b/lib/nixos.nix index 40c0032..af1c8c1 100755 --- a/lib/nixos.nix +++ b/lib/nixos.nix @@ -1,35 +1,42 @@ { inputs, lib, - pkgs, self, ... }: let inherit (inputs.nixpkgs.lib) nixosSystem; - inherit (builtins) baseNameOf elem; - inherit (lib.attrsets) filterAttrs; inherit (lib.modules) mkDefault; inherit (lib.strings) removeSuffix; inherit (self.modules) mapModules; in rec { - mkHost = path: attrs @ {system ? "x86_64-linux", ...}: + mkHost = path: { + system, + pkgsFor, + ... + }: nixosSystem { inherit system; - specialArgs = {inherit lib inputs system;}; + specialArgs = { inherit lib inputs system; }; modules = [ { - nixpkgs.pkgs = pkgs; + nixpkgs.pkgs = pkgsFor.${system}; + nixpkgs.hostPlatform = lib.mkDefault system; networking.hostName = mkDefault (removeSuffix ".nix" (baseNameOf path)); } - (filterAttrs (n: v: !elem n ["system"]) attrs) ../. # /default.nix (import path) ]; }; - mapHosts = dir: attrs @ {system ? system, ...}: - mapModules dir (hostPath: mkHost hostPath attrs); + mapHosts = dir: attrs: + mapModules dir (hostPath: + let + metaPath = "${hostPath}/meta.nix"; + meta = import metaPath; + in + mkHost hostPath (attrs // meta) + ); } diff --git a/lib/options.nix b/lib/options.nix index 8853e02..98579ea 100644 --- a/lib/options.nix +++ b/lib/options.nix @@ -1,7 +1,7 @@ {lib, ...}: let inherit (lib.options) mkOption; in { - mkOpt = type: default: mkOption {inherit type default;}; + mkOpt = type: default: mkOption { inherit type default; }; - mkOpt' = type: default: description: mkOption {inherit type default description;}; + mkOpt' = type: default: description: mkOption { inherit type default description; }; }