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




         
                   
                   
               
         


                   
              
        
             
                     
                         
          
              
               
                

                    
      
                                      
           
          
            
                      
                         
      
            
            
      
                   
                       
                   
                     
      
             
               
      
                  
            
                        

                    
                                                                                          
 












                                          




                    
      
                      
          
                             
                      
       
    



















































                                                 







                                           


          
 




                                                      
      
                        
       
    
                              






                                                     
                                    
                                            









                        
                       
                                                           



                                                          
                             
                     
               
                 
               
 
                 
                                            
               
                                                           
 
               
             


                 
                
                                                                                    
                                                           
                          
        

      
{
  # core
  self,
  pkgs,
  system,
  sysLib,
  nixpkgs_as_input,
  nixpkgs_open_prs,
  # modules
  home-manager,
  nixVim,
  nixos-generators,
  impermanence,
  agenix,
  ragenix,
  serverphone,
  disko,
  lanzaboote,
  nix-index-database,
  # external dependencies
  user_js,
  treefmt-nix,
  templates,
  # my binaries
  shell_library,
  river_init_lesser,
  yambar_memory,
  yambar_cpu,
}: let
  home_manager_config = import ../hm {
    inherit
      pkgs
      sysLib
      nixpkgs_open_prs
      # extra information
      
      system
      # bins
      
      yambar_cpu
      yambar_memory
      river_init_lesser
      shell_library
      # external deps
      
      user_js
      # modules
      
      impermanence
      nixVim
      nix-index-database
      ;
  };
  defaultModules = [
    "${nixpkgs_open_prs.nixpkgs-tfc}/nixos/modules/config/xdg/portals/termfilechooser.nix"

    agenix.nixosModules.default

    disko.nixosModules.default

    home-manager.nixosModules.home-manager
    home_manager_config

    impermanence.nixosModules.impermanence

    lanzaboote.nixosModules.lanzaboote

    serverphone.nixosModules.default
  ];
  defaultSpecialArgs = {
    inherit
      templates
      sysLib
      serverphone
      system
      # nix registry
      
      nixpkgs_as_input
      self
      # extra package sources
      
      nixpkgs_open_prs
      ;
  };
  treefmtEval = treefmt-nix.lib.evalModule pkgs (
    {pkgs, ...}: {
      # Used to find the project root
      projectRootFile = "flake.nix";

      programs = {
        alejandra.enable = true;
        rustfmt.enable = true;
        clang-format.enable = true;
        mdformat.enable = true;
        shfmt = {
          enable = true;
          indent_size = 4;
        };
        shellcheck.enable = true;
        prettier = {
          settings = {
            arrowParens = "always";
            bracketSameLine = false;
            bracketSpacing = true;
            editorconfig = true;
            embeddedLanguageFormatting = "auto";
            endOfLine = "lf";
            # experimentalTernaries = false;
            htmlWhitespaceSensitivity = "css";
            insertPragma = false;
            jsxSingleQuote = true;
            printWidth = 80;
            proseWrap = "always";
            quoteProps = "consistent";
            requirePragma = false;
            semi = true;
            singleAttributePerLine = true;
            singleQuote = true;
            trailingComma = "all";
            useTabs = false;
            vueIndentScriptAndStyle = false;

            tabWidth = 4;
            overrides = {
              files = ["*.js"];
              options.tabwidth = 2;
            };
          };
        };
        stylua.enable = true;
        ruff = {
          enable = true;
          format = true;
        };
        taplo.enable = true;
      };

      settings = {
        global.excludes = ["CHANGELOG.md"];
        formatter = {
          clang-format = {
            options = ["--style" "GNU"];
          };
          shfmt = {
            includes = ["*.bash"];
          };
        };
      };
    }
  );

  nixosConfigurations = import ./nixosConfigurations {
    inherit
      system
      pkgs
      nixpkgs_as_input
      # configs
      
      defaultModules
      defaultSpecialArgs
      ;
  };
in {
  inherit nixosConfigurations;
  checks."${system}" = {
    inherit
      (self.packages."${system}")
      nvim
      ;
    formatting = treefmtEval.config.build.check self;
  };

  legacyPackages."${system}" = pkgs;

  packages."${system}" = import ./packages {
    inherit
      nixos-generators
      defaultSpecialArgs
      defaultModules
      pkgs
      sysLib
      system
      nixVim
      self
      shell_library
      ;
    inherit (pkgs) lib;
  };
  formatter."${system}" = treefmtEval.config.build.wrapper;

  apps."${system}" = import ./apps {inherit self system;};

  devShells."${system}" = {
    default = pkgs.mkShell {
      packages = with pkgs; [
        # secure boot
        sbctl

        # other
        cocogitto
        git-bug

        # secrets
        ragenix.packages."${system}".default

        # shell
        shfmt # TODO: Integrate this into nvim <2023-10-31>

        # rust
        rustfmt
        cargo

        # nix
        alejandra

        # update
        generate_firefox_extensions # needed for the firefox extension update script
        lf-make-map # needed to generate the lf cd mappings
        update-vim-plugins
      ];
    };
  };
}