about summary refs log blame commit diff stats
path: root/flake.nix
blob: ff3014fc49c6e50da37e853fadd360177e8cb5f9 (plain) (tree)
1
2
3
4
5
6
7
8
9


                                      
                                                           
                                                                       
 
                                                                            








                                                                              
                  
      
                                         






                                          
        
      
             




                                         
                                   
                
                                    
                                    
        


                                                
                               
                                                                     
                
                                              
                                    










                                              
        



             
                     
            
             
                            
                 
          

            
       

                                            
                                                   
                                                             


                 
                                                                            







                                            

                                                              
      
                                                             
                              


                          
                   
                                           
      

                               
                              
                               
                   
 

                                                                   
                 
                   
                                                
          
        
                                           
    
{
  description = "Nixos server config";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11-small";
    nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable-small";

    library.url = "git+https://git.vhack.eu/vhack.eu/nix-library?ref=prime";

    # inputs for following
    systems = {
      url = "github:nix-systems/x86_64-linux"; # only evaluate for this system
    };
    flake-compat = {
      url = "github:edolstra/flake-compat";
      flake = false;
    };
    crane = {
      url = "github:ipetkov/crane";
      inputs = {};
    };
    flake-utils = {
      url = "github:numtide/flake-utils";
      inputs = {
        systems.follows = "systems";
      };
    };
    rust-overlay = {
      url = "github:oxalica/rust-overlay";
      inputs = {
        nixpkgs.follows = "nixpkgs";
      };
    };

    # modules
    disko = {
      url = "github:nix-community/disko";
      inputs = {
        nixpkgs.follows = "nixpkgs";
      };
    };
    agenix = {
      url = "github:ryantm/agenix";
      inputs = {
        nixpkgs.follows = "nixpkgs";
        systems.follows = "systems";
      };
    };
    impermanence = {
      url = "github:nix-community/impermanence";
      inputs = {};
    };
    simple-nixos-mailserver = {
      url = "gitlab:simple-nixos-mailserver/nixos-mailserver/master";
      inputs = {
        flake-compat.follows = "flake-compat";
        nixpkgs.follows = "nixpkgs";
      };
    };

    # bins
    ragenix = {
      url = "github:yaxitech/ragenix";
      inputs = {
        nixpkgs.follows = "nixpkgs";
        agenix.follows = "agenix";
        flake-utils.follows = "flake-utils";
        rust-overlay.follows = "rust-overlay";
        crane.follows = "crane";
      };
    };
  };

  outputs = {
    self,
    nixpkgs,
    nixpkgs-unstable,
    library,
    # modules
    simple-nixos-mailserver,
    impermanence,
    disko,
    agenix,
    # bins
    ragenix,
    ...
  } @ attrs: let
    system = "x86_64-linux";
    pkgs = nixpkgs.legacyPackages.${system};
    nixos-lib = import (nixpkgs + "/nixos/lib") {};
    pkgsUnstable = nixpkgs-unstable.legacyPackages.${system};

    specialArgs =
      attrs
      // {
        inherit pkgsUnstable nixpkgs-unstable nixos-lib extraModules nixLib;
      };

    extraModules = [
      simple-nixos-mailserver.nixosModule
      disko.nixosModules.default
      impermanence.nixosModules.impermanence
      agenix.nixosModules.default
    ];

    tests = import ./tests {inherit pkgs specialArgs nixLib;};

    inherit (library) nixLib;
  in {
    nixosConfigurations."server1" = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      inherit specialArgs;
      modules =
        extraModules
        ++ [
          ./modules
          ./hosts/server1/configuration.nix
        ];
    };

    checks."${system}" = tests;

    devShells."${system}" = {
      default = pkgs.mkShell {
        packages = with pkgs; [
          alejandra

          # used for certificate generation in the taskserver setup
          gnutls

          git-bug

          cocogitto
          # ragenix.packages."${system}".default
        ];
      };
    };
    formatter."${system}" = pkgs.alejandra;
  };
}