diff --git a/flake.nix b/flake.nix index f19ecb3..a0d68b5 100644 --- a/flake.nix +++ b/flake.nix @@ -58,63 +58,46 @@ inputs.nixpkgs.follows = "nixpkgs"; }; }; - outputs = inputs @ { + outputs = { nixpkgs, nixos-cosmic, nix-index-database, darwin, ... - }: let + } @ inputs: let overlays = [ inputs.zig.overlays.default inputs.rust-overlay.overlays.default inputs.chinese-fonts-overlay.overlays.default inputs.nh.overlays.default ]; - inherit (nixpkgs) lib; - mkIfElse = p: yes: no: - lib.mkMerge [ - (lib.mkIf p yes) - (lib.mkIf (!p) no) - ]; + + mkSystem = import ./lib/mkSystem.nix { + inherit overlays nixpkgs inputs; + }; user = "nmarks"; - - shared_modules = [ - # {nixpkgs.overlays = overlays;} - # {programs.nix-index-database.comma.enable = true;} - # nixindex - # homemanagerModules - { - _module.args = { - inherit user; - inherit mkIfElse; - }; - } - ]; in { - nixosConfigurations = { - nixos = lib.nixosSystem { - system = "x86_64-linux"; - modules = - [ - ./hosts/desktop/configuration.nix - nixos-cosmic.nixosModules.default - ] - ++ shared_modules; - specialArgs = inputs; - }; + nixosConfigurations.nixos = mkSystem "nixos" { + system = "x86_64-linux"; + inherit user; + extraModules = [ + nixos-cosmic.nixosModules.default + ]; }; - darwinConfigurations = { - "Natalies-MacBook-Air" = darwin.lib.darwinSystem { - system = "aarch64-darwin"; - specialArgs = inputs; - modules = - [ - ./hosts/laptop/configuration.nix - ] - ++ shared_modules; - }; + darwinConfigurations."Natalies-MacBook-Air" = mkSystem "Natalies-MacBook-Air" { + system = "aarch64-darwin"; + inherit user; + darwin = true; }; + # darwinConfigurations = { + # "Natalies-MacBook-Air" = darwin.lib.darwinSystem { + # system = "aarch64-darwin"; + # specialArgs = inputs; + # modules = [ + # ./hosts/laptop/configuration.nix + # ]; + # }; + # }; }; } diff --git a/lib/mkSystem.nix b/lib/mkSystem.nix new file mode 100644 index 0000000..7217ee2 --- /dev/null +++ b/lib/mkSystem.nix @@ -0,0 +1,70 @@ +# This function creates a NixOS system based on our VM setup for a +# particular architecture. +{ + nixpkgs, + overlays, + inputs, +}: name: { + system, + user, + darwin ? false, + extraModules ? [], +}: let + # True if this is a WSL system. + # True if Linux, which is a heuristic for not being Darwin. + mkIfElse = p: yes: no: + nixpkgs.lib.mkMerge [ + (nixpkgs.lib.mkIf p yes) + (nixpkgs.lib.mkIf (!p) no) + ]; + + nixindex = mkIfElse darwin inputs.nix-index-database.darwinModules.nix-index inputs.nix-index-database.nixosModules.nix-index; + + host = mkIfElse darwin "laptop" "desktop"; + + # The config files for this system. + + hostConfig = ../hosts/${host}/configuration.nix; + + # NixOS vs nix-darwin functions + systemFunc = mkIfElse darwin inputs.darwin.lib.darwinSystem nixpkgs.lib.nixosSystem; + home-manager = + if darwin + then inputs.home-manager.darwinModules + else inputs.home-manager.nixosModules; +in + systemFunc rec { + inherit system; + + modules = + [ + # Apply our overlays. Overlays are keyed by system type so we have + # to go through and apply our system type. We do this first so + # the overlays are available globally. + {nixpkgs.overlays = overlays;} + {inputs.programs.nix-index-database.comma.enable = true;} + hostConfig + nixindex + home-manager.home-manager + { + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + backupFileExtension = "hm-backup"; + extraSpecialArgs = {inherit inputs;}; + }; + } + + # We expose some extra arguments so that our modules can parameterize + # better based on these values. + { + config._module.args = { + currentSystem = system; + currentSystemName = name; + currentSystemUser = user; + inherit inputs; + }; + } + ] + ++ extraModules; + } diff --git a/modules/shared/extras.nix b/modules/shared/extras.nix index 862442b..942054d 100644 --- a/modules/shared/extras.nix +++ b/modules/shared/extras.nix @@ -2,13 +2,8 @@ pkgs, config, inputs, - hostName, - mkIfElse, - darwin, ... }: { networking = { - inherit hostName; - networkmanager = !darwin; }; } diff --git a/modules/shared/home-manager.nix b/modules/shared/home-manager.nix deleted file mode 100644 index cb94fa2..0000000 --- a/modules/shared/home-manager.nix +++ /dev/null @@ -1,8 +0,0 @@ -{inputs, ...}: { - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; - backupFileExtension = "hm-backup"; - extraSpecialArgs = {inherit inputs;}; - }; -} diff --git a/modules/shared/modules.nix b/modules/shared/modules.nix deleted file mode 100644 index fcc98c4..0000000 --- a/modules/shared/modules.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ - pkgs, - inputs, - config, - ... -}: { - imports = [ - # {pkgs.overlays = overlays;} - {programs.nix-index-database.comma.enable = true;} - config.nixindex - config.homemanagerModules - ]; -} diff --git a/modules/shared/vars.nix b/modules/shared/vars.nix deleted file mode 100644 index 2191660..0000000 --- a/modules/shared/vars.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - inputs, - pkgs, - config, - lib, - mkIfElse, - ... -}: let - darwin = pkgs.stdenv.isDarwin; - homemanagerModules = mkIfElse darwin inputs.home-manager.darwinModules inputs.home-manager.nixosModules; - nixindex = mkIfElse darwin inputs.nix-index-database.darwinModules.nix-index inputs.nix-index-database.nixosModules.nix-index; -in { - config.var = { - inherit darwin homemanagerModules nixindex; - }; - - options = { - var = lib.mkOption { - type = lib.types.attrs; - default = {}; - }; - }; -}