{
  config,
  pkgs,
  lib,
  ...
}: let
  choose = paths: builtins.head (builtins.filter (p: builtins.pathExists p) paths);
in {
  options.local = {
    hostname = lib.mkOption {
      type = lib.types.str;
      default = "nixos-default";
      description = "System hostname";
    };
    username = lib.mkOption {
      type = lib.types.str;
      default = "user";
      description = "Primary user username";
    };
    userDescription = lib.mkOption {
      type = lib.types.str;
      default = "NixOS User";
      description = "Primary user description";
    };
    address = lib.mkOption {
      type = lib.types.str;
      default = "10.1.1.100";
      description = "Static IP address";
    };
  };

  imports = [
    (choose [./modules/desktop-manager/sway_greetd_homemanager.nix ../desktop-manager/sway_greetd_homemanager.nix])
    (choose [./modules/local/hostname_username.nix ../local/hostname_username.nix])
    (choose [./modules/local/networking_local.nix ../local/networking_local.nix])
    (choose [./modules/bootloader/seabios-assigned-iso-at-birth.nix ../bootloader/seabios-assigned-iso-at-birth.nix])
    (choose [./modules/lix-default.nix ../lix-default.nix])
    # Optionally: (choose [ ./modules/toolsets/remote_building.nix ../toolsets/remote_building.nix ])

    ## Compose modules for Portainer service
    (choose [./modules/toolsets/grafana_metric.nix ../toolsets/grafana_metric.nix])
    (choose [./modules/songsheet/wavelog/docker-compose.nix ../songsheet/wavelog/docker-compose.nix])
    (choose [./modules/secrets-config/sops-composesongsheet.nix ../secrets-config/sops-composesongsheet.nix])
  ];

  config = {
    local.hostname = "nixos-songsheet";
    local.username = "songsheetprg";
    local.userDescription = "NixOS PRG Portainer-Like Songsheet Service";
    local.address = "10.1.1.249";

    # Enable Tailscale
    services.tailscale.enable = true;

    networking.firewall.allowedTCPPorts = [
      80
      443
      8086 # Wavelog
      8087 # PartDB
      8070 # Pelican
    ];
    networking.firewall.allowedUDPPorts = [
      80
      443
      8086 # Wavelog
      8087 # PartDB
      8070 # Pelican
    ];

    system.stateVersion = "25.11";
  };
}
