{ description = "Geoffrey Frogeye's base configurations"; inputs = { # Packages nixpkgs.url = "nixpkgs/nixos-24.05"; displaylinknixpkgs.url = "github:GeoffreyFrogeye/nixpkgs/displaylink-600"; # OS disko = { url = "disko"; inputs.nixpkgs.follows = "nixpkgs"; }; nixos-hardware.url = "nixos-hardware"; # NOD nix-on-droid = { url = "github:nix-community/nix-on-droid"; # No 24.05 yet inputs.nixpkgs.follows = "nixpkgs"; inputs.home-manager.follows = "home-manager"; }; # HM home-manager = { url = "home-manager/release-24.05"; inputs.nixpkgs.follows = "nixpkgs"; }; stylix = { url = "github:danth/stylix/release-24.05"; inputs.nixpkgs.follows = "nixpkgs"; }; nixvim = { url = "github:nix-community/nixvim/nixos-24.05"; inputs.nixpkgs.follows = "nixpkgs"; }; nur.url = "github:nix-community/NUR"; # Local flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, disko, nix-on-droid, flake-utils, ... }@attrs: # Machine independant outputs let nixpkgsConfig = { config = { allowUnfree = true; }; overlays = [ (import ./common/update-local-flakes/overlay.nix) ]; }; homeManagerConfig = { sharedModules = [ self.homeManagerModules.dotfiles ]; extraSpecialArgs = attrs; }; lib = { nixosSystem = { system, modules ? [ ] }: nixpkgs.lib.nixosSystem { inherit system; specialArgs = attrs; modules = modules ++ [ self.nixosModules.dotfiles { nixpkgs = nixpkgsConfig; home-manager = homeManagerConfig; frogeye.toplevel = { _type = "override"; content = self; priority = 1000; }; } ]; }; nixOnDroidConfiguration = { modules ? [ ] }: nix-on-droid.lib.nixOnDroidConfiguration { pkgs = import nixpkgs (nixpkgsConfig // { system = "aarch64-linux"; # nod doesn't support anything else }); modules = modules ++ [ self.nixOnDroidModules.dotfiles { home-manager = homeManagerConfig; } ]; }; flakeTools = { self }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs (nixpkgsConfig // { inherit system; }); in { apps = { disko = { type = "app"; program = "${disko.packages.${system}.default}/bin/disko"; }; nixos-install = { type = "app"; program = "${pkgs.nixos-install-tools}/bin/nixos-install"; }; nixos-rebuild = { type = "app"; program = "${pkgs.nixos-rebuild}/bin/nixos-rebuild"; }; repl = { type = "app"; program = "${pkgs.writeShellScript "vivarium-repl" '' ${pkgs.lix}/bin/nix repl --expr 'let flake = builtins.getFlake "${self}"; in flake // flake.nixosConfigurations // rec { pkgs = import ${nixpkgs} {}; lib = pkgs.lib; }' ''}"; }; # Available globally should this be needed in times of shenanigans updateLocalFlakes = { type = "app"; program = "${pkgs.update-local-flakes}/bin/update-local-flakes"; }; nixosRebuild = { type = "app"; program = "${pkgs.writeShellScript "rebuild" ''${pkgs.writeShellApplication { name = "rebuild"; runtimeInputs = with pkgs; [ nix-output-monitor nixos-rebuild ]; text = builtins.readFile ./os/rebuild.sh; }}/bin/rebuild ${self} "$@"''}"; }; }; } ); }; in { # Reusable configurations inherit lib; nixosModules.dotfiles.imports = [ ./os ]; nixOnDroidModules.dotfiles.imports = [ ./nod ]; homeManagerModules.dotfiles.imports = [ ./hm ]; # Actual configurations nixosConfigurations.curacao = lib.nixosSystem { system = "x86_64-linux"; modules = [ ./curacao ]; }; nixosConfigurations.curacao-usb = lib.nixosSystem { system = "x86_64-linux"; modules = [ ./curacao/usb.nix ]; }; nixosConfigurations.pindakaas = lib.nixosSystem { system = "aarch64-linux"; modules = [ ./pindakaas ]; }; nixosConfigurations.pindakaas-sd = lib.nixosSystem { system = "aarch64-linux"; modules = [ ./pindakaas/sd.nix ]; }; nixosConfigurations.cranberry = lib.nixosSystem { system = "x86_64-linux"; modules = [ ./cranberry ]; }; nixOnDroidConfigurations.sprinkles = lib.nixOnDroidConfiguration { }; # Fake systems nixosConfigurations.abavorana = lib.nixosSystem { system = "x86_64-linux"; modules = [ ./abavorana/standin.nix ]; }; nixosConfigurations.sprinkles = lib.nixosSystem { system = "aarch64-linux"; modules = [ ./sprinkles/standin.nix ]; }; # TODO devices/ or configs/ folders } // (lib.flakeTools { inherit self; }); }