KE4A6XYYKVBEVCWG4TPFRAO5EYJHCJB25VWNXB2NZNXNEPSDKH6QC TGXVRQU53E3KY7XVAXCIZIKSJMHQXMK4QKWZQ7UJHRFEFGZEAAKQC KR2OE4Q6GIV76COFY2Q2RKXSF7IQO4KS2GKSY6NSKFFBSFZAYOKQC BE4NH5IASMF5PMZ3D7YZI5XZ56FHJ7A3726FZHB3CF4PBMRUTHHAC 5G7WRBMWKG6DMCOHE6WQHTYZACUHO2UPBZRWN72CFH7P45NN5E7QC YQTJKSDUZ6Y6LSJGOKBYQOPG3IG5RFMRKO2JGVUN5Q7AHPGOWFTAC RXJH46XLP6AFSIZZD4WEQA5A5YZLKHZ54ZUGCRH7TRAOH2Z4Q2VQC 7JXSMY6LHRP5IAYJMTKHYUOWAOFQFPG3ORTGW432GFVQ5GUKXVDQC LLRYXY25L67F5SIWZCZ3MXBC67T6LMQ3JBBJJR2ESKALWHXT4YGAC KXYLAJ5WZIXV5FQ4TU3IPHCO2YRKQBAZBW27LOA5EVWI2OLVPIIAC GT35NGAHIVA7RXCZRK6OPFIC6KRVJ7SNI2AKVYLZLMVSBIKLOIEQC _: self: _: letinherit (self) merge mkMerge;in {# creates a mergeable attribute set that can be called as a function# allows syntax like: merge { option1 = value1; } <| conditionalOptionsmerge = mkMerge [] // {__functor = self: next: self // {contents = self.contents ++ [ next ];};};# convenience functions for common enable patternsenabled = merge { enable = true; };disabled = merge { enable = false; };}
inputs: self: super: letinherit (self) attrValues filter getAttrFromPath hasAttrByPath collectNix;# collect common modules that should be applied to all systems# Note: we shouldn't automatically collect home modules at system levelmodulesCommon = [];# collect input modules and overlays from flake inputscollectInputs = letinputs' = attrValues inputs;in path: inputs'|> filter (hasAttrByPath path)|> map (getAttrFromPath path);inputHomeModules = collectInputs [ "homeModules" "default" ];inputModulesLinux = collectInputs [ "nixosModules" "default" ];inputModulesDarwin = collectInputs [ "darwinModules" "default" ];inputOverlays = collectInputs [ "overlays" "default" ];overlayModule = { nixpkgs.overlays = inputOverlays; };# special arguments passed to all modulesspecialArgs = inputs // {inherit inputs;lib = self;};in {# wrapper for nixosSystem that automatically applies common modulesnixosSystem' = config: super.nixosSystem {inherit (config) system;inherit specialArgs;modules = config.modules ++ [overlayModule{home-manager.sharedModules = inputHomeModules;}] ++ modulesCommon++ inputModulesLinux;};# wrapper for darwinSystem that automatically applies common modulesdarwinSystem' = config: super.darwinSystem {inherit (config) system;inherit specialArgs;modules = config.modules ++ [overlayModule{home-manager.sharedModules = inputHomeModules;}] ++ modulesCommon++ inputModulesDarwin;};}
_: self: super: letinherit (self) filter hasSuffix;inherit (self.filesystem) listFilesRecursive;in {collectNix = path: listFilesRecursive path|> filter (hasSuffix ".nix");}
inputs: self: super: letfilesystem = import ./filesystem.nix inputs self super;system = import ./system.nix inputs self super;values = import ./values.nix inputs self super;in filesystem // system // values
{imports = [./nushell.nix./bash.nix./direnv.nix./zoxide.nix./carapace.nix./starship.nix./eza.nix];
{ lib, ... }: {imports = lib.collectNix ./.|> lib.remove ./default.nix|> lib.remove ./aliases.nix; # aliases.nix is data, not a module
{imports = [./alacritty.nix./bacon.nix./bat.nix./btop.nix./fd.nix./fzf.nix./git.nix./gpg.nix./jujutsu.nix./ripgrep.nix./zellij.nix];
{ lib, ... }: {imports = lib.collectNix ./. |> lib.remove ./default.nix;
./modules/common.nix./modules/packages.nix./modules/rust.nix./modules/fonts.nix./modules/programs./modules/shell./modules/editor];
] ++ (lib.collectNix ./modules|> lib.remove ./modules/shell/aliases.nix # data file, not a module);
outputs ={self,nixpkgs,nixos-wsl,nix-darwin,home-manager,fenix,nvf,bacon-ls,...}:letsystems = {linux = "x86_64-linux";darwin = "aarch64-darwin";};
outputs = inputs @ { nixpkgs, nixos-wsl, nix-darwin, home-manager, fenix, nvf, bacon-ls, ... }: letinherit (nixpkgs.lib) const extend;# extend nixpkgs.lib with nix-darwin.lib, then our custom liblib' = nixpkgs.lib.extend (const <| const <| nix-darwin.lib);lib = lib'.extend <| import ./lib inputs;systems = {linux = "x86_64-linux";darwin = "aarch64-darwin";};
};in{nixosConfigurations."nixos-wsl" = nixpkgs.lib.nixosSystem {system = systems.linux;modules = [nixos-wsl.nixosModules.wsl./hosts/nixos/configuration.nixhome-manager.nixosModules.home-manager({ pkgs, ... }:{home-manager.useGlobalPkgs = true;home-manager.useUserPackages = true;home-manager.users.james = import ./home/default.nix (mkHomeConfig systems.linux);})];
darwinConfigurations.darwin = nix-darwin.lib.darwinSystem {system = systems.darwin;modules = [./hosts/darwin/configuration.nixhome-manager.darwinModules.home-manager({ pkgs, ... }:{home-manager.useGlobalPkgs = true;home-manager.useUserPackages = true;home-manager.users.james = import ./home/default.nix (mkHomeConfig systems.darwin);})];};
nixosConfigurations."nixos-wsl" = lib.nixosSystem' {system = systems.linux;modules = [nixos-wsl.nixosModules.wsl./hosts/nixos/configuration.nixhome-manager.nixosModules.home-manager({ pkgs, ... }:{home-manager.useGlobalPkgs = true;home-manager.useUserPackages = true;home-manager.users.james = import ./home/default.nix (mkHomeConfig systems.linux);})];};darwinConfigurations.darwin = lib.darwinSystem' {system = systems.darwin;modules = [./hosts/darwin/configuration.nixhome-manager.darwinModules.home-manager({ pkgs, ... }:{home-manager.useGlobalPkgs = true;home-manager.useUserPackages = true;home-manager.users.james = import ./home/default.nix (mkHomeConfig systems.darwin);})];