{
  description = "My Nixos system configuration";
  # inputs {{{
  inputs = {
    stable.url = "github:NixOs/nixpkgs/nixos-23.05";
    nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };

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

    # inputs for following
    nixvim = {
      url = "github:nix-community/nixvim";
      inputs = {
        nixpkgs.follows = "nixpkgs";
        flake-utils.follows = "flake-utils";
      };
    };
    lanzaboote = {
      url = "github:nix-community/lanzaboote/v0.3.0";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    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 = {
        nixpkgs.follows = "nixpkgs";
        flake-compat.follows = "flake-compat";
        flake-utils.follows = "flake-utils";
        rust-overlay.follows = "rust-overlay";
      };
    };
    flake-utils = {
      url = "github:numtide/flake-utils";
      inputs = {
        systems.follows = "systems";
      };
    };
    rust-overlay = {
      url = "github:oxalica/rust-overlay";
      inputs = {
        nixpkgs.follows = "nixpkgs";
        flake-utils.follows = "flake-utils";
      };
    };

    shell_library = {
      url = "git+https://codeberg.org/soispha/shell_library.git";
      inputs = {
        nixpkgs.follows = "nixpkgs";
        flake-utils.follows = "flake-utils";
        systems.follows = "systems";
      };
    };
    river_init_lesser = {
      url = "git+https://codeberg.org/soispha/river_keymap_init.git";
      inputs = {
        nixpkgs.follows = "nixpkgs";
        crane.follows = "crane";
        flake-utils.follows = "flake-utils";
        rust-overlay.follows = "rust-overlay";
        flake-compat.follows = "flake-compat";
      };
    };
    yambar_cpu = {
      url = "git+https://codeberg.org/soispha/yambar_cpu.git";
      inputs = {
        nixpkgs.follows = "nixpkgs";
        crane.follows = "crane";
        flake-utils.follows = "flake-utils";
      };
    };
    yambar_memory = {
      url = "git+https://codeberg.org/soispha/yambar_memory.git";
      inputs = {
        nixpkgs.follows = "nixpkgs";
        flake-utils.follows = "flake-utils";
      };
    };
    #grades = {
    #     url = "git+https://codeberg.org/soispha/grades.git";
    #     inputs = {
    #       nixpkgs.follows = "unstable";
    #       crane.follows = "crane";
    #       flake-utils.follows = "flake-utils";
    #       rust-overlay.follows = "rust-overlay";
    #     };
    #   };
    prismlauncher = {
      url = "github:PrismLauncher/PrismLauncher";
    };
  };
  #}}}
  outputs = {
    self,
    nixpkgs,
    home-manager,
    shell_library,
    river_init_lesser,
    yambar_cpu,
    yambar_memory,
    #grades,
    prismlauncher,
    lanzaboote,
    nixvim,
    impermanence,
    ...
  } @ attrs: let
    system = "x86_64-linux";
    pkgs = import nixpkgs {
      inherit system;
      #overlays = [nixvim.overlays.default];
    };
    sysLib = shell_library.lib.${system};
    defaultModules = [
      impermanence.nixosModules.impermanence
      lanzaboote.nixosModules.lanzaboote
      home-manager.nixosModules.home-manager
      {
        home-manager = {
          useGlobalPkgs = true;
          useUserPackages = true;
          users.sils = import ./users/sils;
          extraSpecialArgs = {inherit pkgs system sysLib river_init_lesser yambar_cpu yambar_memory prismlauncher nixvim impermanence;};
        };
      }
    ];
  in {
    nixosConfigurations.thinklappi = nixpkgs.lib.nixosSystem {
      inherit system;
      specialArgs = attrs;
      modules =
        [
          ./hosts/thinklappi
        ]
        ++ defaultModules;
    };
    devShells."${system}" = {
      default = pkgs.mkShell {
        packages = with pkgs; [
          nil
          statix
          alejandra
        ];
      };
    };
  };
}