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

    flake-parts.url = "github:hercules-ci/flake-parts";
    import-tree.url = "github:vic/import-tree";

    wrapper-modules.url = "github:BirdeeHub/nix-wrapper-modules";

    nixos-raspberrypi = {
      url = "github:nvmd/nixos-raspberrypi/main";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    oom-hardware = {
      url = "github:robertjakub/oom-hardware/devel";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.nixos-raspberrypi.follows = "nixos-raspberrypi";
    };

    dms = {
      url = "github:AvengeMedia/DankMaterialShell/stable";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    dms-plugin-dank-vault = {
      url = "github:alcxyz/DankVault";
      flake = false;
    };

    dms-plugin-calculator = {
      url = "github:rochacbruno/DankCalculator";
      flake = false;
    };

    dms-plugin-home-assistant = {
      url = "github:xxyangyoulin/dms-plugin-hass";
      flake = false;
    };

    dms-plugin-dropdown-menu = {
      url = "github:rdannenbring/dropdown-menu";
      flake = false;
    };

    dms-plugin-ocr-scanner = {
      url = "github:hthienloc/dms-ocr-scanner";
      flake = false;
    };

    dms-plugin-unified-taskbar = {
      url = "github:jslandau/dms-unified-taskbar";
      flake = false;
    };

    dms-plugin-widget-group = {
      url = "github:rdannenbring/widget-group";
      flake = false;
    };

    dms-plugin-nix-package-runner = {
      url = "github:iahccc/NixPackageRunner";
      flake = false;
    };

    dms-plugin-ambient-sound = {
      url = "github:hthienloc/dms-ambient-sound";
      flake = false;
    };

    dms-plugin-cava-visualizer = {
      url = "github:ernestowgg/cava-visualizer";
      flake = false;
    };

    dms-plugin-emoji-launcher = {
      url = "github:devnullvoid/dms-emoji-launcher";
      flake = false;
    };

    dms-plugin-official = {
      url = "github:AvengeMedia/dms-plugins";
      flake = false;
    };

    dms-plugin-web-search = {
      url = "github:devnullvoid/dms-web-search";
      flake = false;
    };

    dms-plugin-wallpaper-carousel = {
      url = "github:motor-dev/wallpaperCarousel";
      flake = false;
    };

    dms-plugin-ephemera = {
      url = "github:nicolasgarcia214/Ephemera";
      flake = false;
    };

    dms-plugin-app-shortcut = {
      url = "github:oabragh/AppShortcut";
      flake = false;
    };

    dms-plugin-wvkbd-toggle = {
      url = "git+https://git.chiasson.cloud/dms-plugins/wvkbd-toggle";
      flake = false;
    };

    dms-plugin-rbw-lock-toggle = {
      url = "git+https://git.chiasson.cloud/dms-plugins/rbw-lock-toggle";
      flake = false;
    };

    dgop = {
      url = "github:AvengeMedia/dgop";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    nix-monitor = {
      url = "github:antonjah/nix-monitor";
    };

    t2linux-patches = {
      url = "github:t2linux/linux-t2-patches";
      flake = false;
    };

    # T2 SMC fan curves — linux rarely ramps fans without this (wiki.t2linux.org/guides/fan/).
    t2fanrd = {
      url = "github:GnomedDev/T2FanRD";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    mobile-nixos = {
      url = "github:mobile-nixos/mobile-nixos";
      flake = false;
    };

    sops-nix = {
      url = "github:Mic92/sops-nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    zen-browser = {
      url = "github:0xc000022070/zen-browser-flake";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    cursor = {
      url = "git+https://git.chiasson.cloud/Olivier/cursor-nixos-flake";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    nur = {
      url = "github:nix-community/NUR";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    wallpapers = {
      url = "git+https://git.chiasson.cloud/Olivier/wallpapers";
      flake = false;
    };

    nixcord = {
      url = "github:KaylorBen/nixcord";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    spicetify-nix = {
      url = "github:Gerg-L/spicetify-nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    swiftshare = {
      url = "git+https://git.chiasson.cloud/Olivier/SwiftShare";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    # After pushing Personal-Website, `nix flake update personal-website` refreshes the lock pin.
    personal-website = {
      url = "git+https://git.chiasson.cloud/Olivier/Personal-Website";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    # DDRM browser-extension backend
    ddrm = {
      url = "git+https://git.chiasson.cloud/Olivier/DDRM?rev=c3d014f96855e45b53f7391ce19729493887cb96";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    navi.url = "github:cafkafk/navi";

    nixvirt = {
      url = "https://flakehub.com/f/AshleyYakeley/NixVirt/*.tar.gz";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    hermes = {
      url = "github:NousResearch/hermes-agent";
    };
  };

  outputs = inputs:
    let
      lib = inputs.nixpkgs.lib;
      # import-tree default: only .nix, skip paths with /_/ (see
      # https://import-tree.oeiuwq.com/guides/filtering/ ). filterNot composes AND with that.
      # Skip /package/ and /packages/ (callPackage colocation).
      # Avoid a global "/home-manager/" filter — it would drop modules/ssh/home-manager/.
      modulesTree =
        lib.pipe inputs.import-tree [
          (it: it.withLib lib)
          (it:
            it.filterNot (
              p:
              lib.hasInfix "/package/" p
              || lib.hasInfix "/packages/" p
            ))
          (it: it ./modules)
        ];
    in
    inputs.flake-parts.lib.mkFlake { inherit inputs; } modulesTree;
}
