{ description = "NixOS configuration with flakes"; outputs = { self, flake-utils, home-manager, nixpkgs-nixos-unstable, nixpkgs-stable, nixos-hardware, nur, agenix, neuron, sops } @ inputs: let mkServer = pkgs: system: hostname: pkgs.lib.nixosSystem { system = system; modules = [ (./. + "/nixos/boxes/${hostname}") agenix.nixosModules.age sops.nixosModules.sops ]; specialArgs = { inherit inputs; }; }; mkRaspi = pkgs: hostname: pkgs.lib.nixosSystem { system = "aarch64-linux"; modules = [ (./. + "/nixos/boxes/${hostname}") ]; specialArgs = { inherit inputs; }; }; mkWorkstation = pkgs: system: hostname: pkgs.lib.nixosSystem { system = system; modules = [ (./. + "/nixos/boxes/${hostname}") (import ./nixos/email-accounts.nix) sops.nixosModules.sops home-manager.nixosModules.home-manager { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users.cyryl = { imports = [ ./nixos/home-manager ]; _module.args.inputs = inputs; }; } ]; specialArgs = { inherit inputs system; unstableAndUnfree = import nixpkgs-nixos-unstable { inherit system; config = { allowUnfree = true; }; }; }; }; in { nixosConfigurations = { foureighty = mkWorkstation nixpkgs-stable "x86_64-linux" "foureighty"; skinnyv = mkWorkstation nixpkgs-stable "x86_64-linux" "skinnyv"; thinky = mkWorkstation nixpkgs-stable "x86_64-linux" "thinky"; bolty = mkServer nixpkgs-stable "x86_64-linux" "bolty"; vultr1 = mkServer nixpkgs-stable "x86_64-linux" "vultr1"; rpi4_8 = mkRaspi nixpkgs-stable "rpi4-8"; bootstrap = nixpkgs-stable.lib.nixosSystem { system = "x86_64-linux"; modules = [ (./. + "/nixos/boxes/bootstrap") ]; specialArgs = { inherit inputs; }; }; # nix build .#nixosConfigurations.raspiimage.config.system.build.sdImage # sudo dd if=result/sd-image/nixos-sd-image-21.11.20211201.a640d83-aarch64-linux.img of=/dev/sda bs=4M conv=fsync status=progress raspiimage = nixpkgs-stable.lib.nixosSystem { system = "aarch64-linux"; modules = [ (import "${inputs.nixpkgs-nixos-unstable}/nixos/modules/installer/sd-card/sd-image-aarch64-installer.nix") { services.openssh = { enable = true; permitRootLogin = inputs.nixpkgs-stable.lib.mkForce "prohibit-password"; passwordAuthentication = false; }; users.extraUsers.root.openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE5Ejx5CAPUfHVXi4GL4WmnZaG8eiiOmsW/a0o1bs1GF cyryl@foureighty" ]; sdImage.compressImage = false; console.earlySetup = true; } ]; specialArgs = { inherit inputs; }; }; }; }; inputs = { nixpkgs-nixos-unstable = { type = "github"; owner = "NixOS"; repo = "nixpkgs"; ref = "nixos-unstable"; }; nixpkgs-stable = { type = "github"; owner = "NixOS"; repo = "nixpkgs"; ref = "nixos-21.11"; }; nixos-hardware = { type = "github"; owner = "NixOS"; repo = "nixos-hardware"; ref = "master"; }; home-manager = { type = "github"; owner = "nix-community"; repo = "home-manager"; ref = "release-21.11"; inputs = { nixpkgs.follows = "nixpkgs-stable"; }; }; flake-utils = { type = "github"; owner = "numtide"; repo = "flake-utils"; ref = "master"; }; nur = { type = "github"; owner = "nix-community"; repo = "NUR"; ref = "master"; }; agenix = { type = "github"; owner = "ryantm"; repo = "agenix"; ref = "main"; }; neuron = { type = "github"; owner = "srid"; repo = "neuron"; ref = "master"; }; sops = { type = "github"; owner = "Mic92"; repo = "sops-nix"; ref = "master"; }; }; }