{
  # Snowfall Lib provides a customized `lib` instance with access to your flake's library
  # as well as the libraries available from your flake's inputs.
  lib,
  # An instance of `pkgs` with your overlays and packages applied is also available.
  pkgs,
  # You also have access to your flake's inputs.
  inputs,

  # Additional metadata is provided by Snowfall Lib.
  system, # The system architecture for this host (eg. `x86_64-linux`).
  target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
  format, # A normalized name for the system target (eg. `iso`).
  virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
  systems, # An attribute map of your defined hosts.

  # All other arguments come from the module system.
  config,
  host,
  ...
}:

with lib;

let
  cfg = config.modules.i3;
in
{
  options.modules.i3 = {
    enable = mkOption { default = false; };
  };

  config = mkIf cfg.enable {
    programs = {
      i3status-rust = {
        enable = true;
      };
    };
    home.packages = with pkgs; [ nitrogen ];
    xsession.windowManager.i3 = {
      enable = true;
    };

    # Overwrite default home-manager config file
    xdg.configFile."i3/config".source = lib.mkForce (
      if host == "kardorf" then ./i3/config-kardorf else ./i3/config
    );

    home.file = {
      ".config/i3/scripts" = {
        source = ./i3/scripts;
        recursive = true;
      };
      ".config/i3/workspace-messaging.json".source = ./i3/workspace-chat-element-tele.json;
      ".config/i3status-rust/config.toml".source = ./i3status-rust/config.toml;
    };

    home.file = {
      ".profile".source = ./.profile;
    };
  };
}
