{ config, pkgs, lib, ... }: let
  host = config.networking.hostName;
in {
  disabledModules = [
    "services/networking/pppd.nix"
    "services/mail/stalwart-mail.nix"
  ];
  imports = [
    ./modules/nix.nix
    ./modules/user.nix
    ./modules/environment.nix

    ./modules/pppd.nix
    ./modules/stalwart-mail.nix
  ];

  system.stateVersion = "24.11";
  time.timeZone = "Asia/Kolkata";
  networking.useDHCP = false;

  swapDevices = lib.mkDefault [{
    device = "/swapfile";
    size = 2048; # 2GB
  }];

  services.udev.extraRules = let
    cmd = "${pkgs.systemd}/bin/systemctl hibernate";
  in ''
    SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="[0-5]", RUN+="${cmd}"
  '';

  sops = {
    defaultSopsFile = ../${host}/secrets.yaml;
    age.keyFile = "/var/secrets/${host}.sops";
  };

  boot = {
    tmp.useTmpfs = true;
    loader.timeout = 1;
    initrd.systemd.enable = true;
  };

  programs.bash.promptInit = ''
    if [ "$UID" -ne 0 ]; then
        PROMPT_COLOR="1;32m"
    else
        PROMPT_COLOR="1;31m"
    fi

    PS1="\[\033[$PROMPT_COLOR\][\[\e]0;\u@\h: \w\a\]\u@\h:\w]\\$\[\033[0m\] "
  '';

  nixpkgs.config.allowUnfreePredicate =
    pkg: builtins.elem (lib.getName pkg) [ "nvidia-x11" "slack" ];
}
