{ inputs = { nixpkgs.url = "github:radvendii/nixpkgs/nixos_rebuild_tests"; nixpkgs-latest.url = "github:nixos/nixpkgs"; pixelfed = { url = "github:pixelfed/pixelfed?ref=v0.12.3"; flake = false; }; disko.url = "github:nix-community/disko"; }; outputs = { self, nixpkgs, nixpkgs-latest, pixelfed, disko }: let system = "x86_64-linux"; lib = nixpkgs.lib; pkgs = nixpkgs.legacyPackages.${system}; pkgsLatest = nixpkgs-latest.legacyPackages.${system}; bleedingFediverseOverlay = (self: super: { pixelfed = pkgsLatest.pixelfed.overrideAttrs (old: { src = pixelfed; patches = (old.patches or [ ]) ++ [ ./fediversity/pixelfed-group-permissions.patch ]; }); ## TODO: give mastodon, peertube the same treatment }); in { nixosModules = { ## Bleeding-edge fediverse packages bleedingFediverse = { nixpkgs.overlays = [ bleedingFediverseOverlay ]; }; ## Fediversity modules fediversity = import ./fediversity; ## VM-specific modules interactive-vm = import ./vm/interactive-vm.nix; garage-vm = import ./vm/garage-vm.nix; mastodon-vm = import ./vm/mastodon-vm.nix; peertube-vm = import ./vm/peertube-vm.nix; pixelfed-vm = import ./vm/pixelfed-vm.nix; disk-layout = import ./disk-layout.nix; }; nixosConfigurations = { mastodon = nixpkgs.lib.nixosSystem { inherit system; modules = with self.nixosModules; [ disko.nixosModules.default disk-layout bleedingFediverse fediversity interactive-vm garage-vm mastodon-vm ]; }; peertube = nixpkgs.lib.nixosSystem { inherit system; modules = with self.nixosModules; [ disko.nixosModules.default disk-layout bleedingFediverse fediversity interactive-vm garage-vm peertube-vm ]; }; pixelfed = nixpkgs.lib.nixosSystem { inherit system; modules = with self.nixosModules; [ disko.nixosModules.default disk-layout bleedingFediverse fediversity interactive-vm garage-vm pixelfed-vm ]; }; all = nixpkgs.lib.nixosSystem { inherit system; modules = with self.nixosModules; [ disko.nixosModules.default disk-layout bleedingFediverse fediversity interactive-vm garage-vm peertube-vm pixelfed-vm mastodon-vm ]; }; }; ## Fully-feature ISO installer mkInstaller = import ./installer.nix; installers = lib.mapAttrs (_: config: self.mkInstaller nixpkgs config) self.nixosConfigurations; deploy = let deployCommand = (pkgs.callPackage ./deploy.nix { }); in lib.mapAttrs (name: config: deployCommand name config) self.nixosConfigurations; checks.${system} = { mastodon-garage = import ./tests/mastodon-garage.nix { inherit pkgs self; }; pixelfed-garage = import ./tests/pixelfed-garage.nix { inherit pkgs self; }; }; devShells.${system}.default = pkgs.mkShell { inputs = with pkgs; [ nil ]; }; }; }