aboutsummaryrefslogblamecommitdiff
path: root/flake.nix
blob: 6a2cfa54da36baec41f217d5feeb3b57d05630d1 (plain) (tree)
1
2
3
4
5
6
7
8
9

                                                
 
            



                       
                          
      
 
                                              
 

                                                             

                                               




                                         

                                         
                    


                              
                            

                                    
        
      
 




                                          




                                          


                                              







                                       
                                           

        


                                             
                                                       
       










                                                        
      
     

                                     

                                        
          




                                                                          





                                                                                           
 








                                                                                   
                                                                                                 




                                                
                                                                                  




                                   
                                                                                  

                                   
 

                              
                                                                                                             







                                      

              

















                                                                            




                                                                 
                                                   

           
                             




                                                         








                                               








                                                                   

        
 
{
  description = "personal NixOS configurations";

  inputs = {
    nixpkgs = {
      type = "github";
      owner = "NixOS";
      repo = "nixpkgs";
      ref = "nixos-23.05";
    };

    futils.url = "github:numtide/flake-utils";

    emacs-overlay.url = "github:nix-community/emacs-overlay";

    naersk.url = "github:nix-community/naersk";

    agenix = {
      url = "github:ryantm/agenix";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    nur.url = "github:nix-community/NUR";

    home-manager = {
      type = "github";
      owner = "nix-community";
      repo = "home-manager";
      ref = "release-23.05";
      inputs = {
        nixpkgs.follows = "nixpkgs";
      };
    };

    homeage = {
      url = "github:jordanisaacs/homeage";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    rust = {
      url = "github:oxalica/rust-overlay";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    darwin.url = "github:lnl7/nix-darwin";
    darwin.inputs.nixpkgs.follows = "nixpkgs";

    pre-commit-hooks = {
      type = "github";
      owner = "cachix";
      repo = "pre-commit-hooks.nix";
      ref = "master";
      inputs = {
        flake-utils.follows = "futils";
        nixpkgs.follows = "nixpkgs";
        nixpkgs-stable.follows = "nixpkgs";
      };
    };
  };

  # Output config, or config for NixOS system
  outputs = inputs@{ self, darwin, home-manager, ... }:
    let
      myLib = import ./nix inputs;
      lib = inputs.nixpkgs.lib // builtins;
      supportedSystems = [ "x86_64-linux" ];
      forAllSystems = lib.genAttrs supportedSystems;

      # Nixpkgs instantiated for supported system types.
      nixpkgsFor = forAllSystems (system:
        import inputs.nixpkgs {
          inherit system;
          config = { allowUnfree = true; };
        });
    in
    {
      templates = import ./templates;

      checks = forAllSystems (system:
        let pkgs = nixpkgsFor.${system};
        in
        {
          pre-commit-check = inputs.pre-commit-hooks.lib."${system}".run {
            src = ./.;
            hooks = {
              nixpkgs-fmt.enable = true;
              trailing-whitespace = {
                enable = true;
                entry =
                  "${pkgs.python3Packages.pre-commit-hooks}/bin/trailing-whitespace-fixer";
                types = [ "text" ];
              };

              end-of-file-fixer = {
                enable = true;
                entry =
                  "${pkgs.python3Packages.pre-commit-hooks}/bin/end-of-file-fixer";
                types = [ "text" ];
              };

              check-executables-have-shebangs = {
                entry =
                  "${pkgs.python3Packages.pre-commit-hooks}/bin/check-executables-have-shebangs";
                types = [ "text" "executable" ];
              };

              check-json = {
                enable = true;
                entry = "${pkgs.python3Packages.pre-commit-hooks}/bin/check-json";
                types = [ "json" ];
              };

              check-toml = {
                enable = true;
                entry = "${pkgs.python3Packages.pre-commit-hooks}/bin/check-toml";
                types = [ "toml" ];
              };

              check-yaml = {
                enable = true;
                entry = "${pkgs.python3Packages.pre-commit-hooks}/bin/check-yaml --allow-multiple-documents";
                types = [ "yaml" ];
              };

              shellcheck = {
                enable = true;
                files = "\\.sh$";
                types_or = [ "file" ];
              };
            };
          };
        });

      devShells = forAllSystems (system: {
        default = inputs.nixpkgs.legacyPackages.${system}.mkShell {
          name = "fcuny-configuration-on-${system}-system";
          buildInputs = with inputs.nixpkgs.legacyPackages.${system}.pkgs; [
            gitAndTools.pre-commit
            nixfmt
            nixpkgs-fmt
            rnix-lsp
            home-manager
            git
            nixos-rebuild
          ];
          inherit (self.checks.${system}.pre-commit-check) shellHook;
        };
      });

      packages = forAllSystems (system:
        let pkgs = nixpkgsFor.${system};
        in
        {
          inherit (inputs.futils.lib) filterPackages flattenTree;
          tools = import ./tools { inherit pkgs; };
        });

      nixosConfigurations = {
        aptos = myLib.mkSystem { hostname = "aptos"; };
        carmel = myLib.mkSystem { hostname = "carmel"; };
        tahoe = myLib.mkSystem { hostname = "tahoe"; };
      };

      darwinConfigurations = {
        "mba-fcuny" = darwin.lib.darwinSystem {
          system = "aarch64-darwin";
          modules = [
              ./hosts/mba
          ];
        };
      };

      homeConfigurations = {
        useGlobalPkgs = true;
        useUserPackages = true;

        "fcuny@aptos" =
          myLib.mkHomeManagerConfiguration { hostname = "aptos"; };

        "fcuny@tahoe" =
          myLib.mkHomeManagerConfiguration { hostname = "tahoe"; };
      };
    };
}