# vim:fileencoding=utf-8:foldmethod=marker
{
  pkgs,
  inputs,
  username,
  ...
}:
{
  imports = [
    ./hardware-configuration.nix
    ./home.nix
  ];

  time.timeZone = "Europe/Paris";

  modules = {
    media.enableAll = true;

    system = {
      networking = {
        bluetooth.enable = true;
        wifi.enable = true;
      };
    };

    services = {
      cliphist.enable = true;
      nysh.enable = true;
      tailscale = {
        enable = true;
        tags = [ "client" ];
      };
    };
  };

  # Bootloader.
  boot = {
    loader = {
      systemd-boot.enable = true;
      efi.canTouchEfiVariables = true;
    };
  };

  hardware.graphics.enable = true;

  xdg = {
    portal.enable = true;
    mime.enable = true;
  };

  specialisation = {
    gpu.configuration = {
      imports = [ inputs.nixos-hardware.nixosModules.dell-xps-15-9510-nvidia ];
    };
  };

  age = {
    identityPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
    secrets.rustypaste = {
      file = ../../secrets/rustypaste.age;
      mode = "440";
      group = "wheel";
    };
  };

  programs = {
    dconf.enable = true;
    steam.enable = true;
    fish.enable = true;
    firefox.enable = true;
    thunderbird.enable = true;
    sway.enable = true;
    hyprland.enable = true;
    pulseview.enable = true;

    gnupg.agent = {
      enable = true;
      enableSSHSupport = true;
    };
  };

  services = {
    dbus.enable = true;
    fwupd.enable = true;
    gvfs.enable = true;
    printing.enable = true;

    xserver.xkb = {
      layout = "fr";
      variant = "";
    };

    pipewire.enable = true;
    gnome.gnome-keyring.enable = true;
    openssh.enable = true;

    greetd = {
      enable = true;
      settings = {
        default_session = {
          command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time";
          user = "greeter";
        };
      };
    };

    #: Power Consumption {{{
    logind = {
      lidSwitch = "suspend-then-hibernate";
      powerKey = "hibernate";
    };

    thermald.enable = true;

    tlp = {
      enable = false;
      settings = {
        CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
        CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
        CPU_MIN_PERF_ON_BAT = 0;
        CPU_MAX_PERF_ON_BAT = 20;

        # Optional helps save long term battery health
        START_CHARGE_THRESH_BAT0 = 40; # 40 and below it starts to charge
        STOP_CHARGE_THRESH_BAT0 = 80; # 80 and above it stops charging
      };
    };

    upower = {
      enable = true;
      criticalPowerAction = "Hibernate";
    };
    #:}}}
  };

  console.keyMap = "fr";

  users = {
    defaultUserShell = pkgs.fish;
    users.${username} = {
      isNormalUser = true;
      createHome = true;
      extraGroups = [
        "networkmanager"
        "wheel"
        "audio"
        "libvirtd"
        "dialout" # Necessary for serial port interactions
      ];
    };
  };

  environment.variables = {
    ELECTRON_OZONE_PLATFORM_HINT = "auto";
    MOZ_ENABLE_WAYLAND = 1;
  };

  security.polkit.enable = true;

  virtualisation.libvirtd.enable = true;
  programs.virt-manager.enable = true;

  programs.nix-ld.enable = true;

  environment.systemPackages = with pkgs; [
    shared-mime-info
    glib
    wireguard-tools
    dconf
    pwvucontrol
    xdg-utils
    brightnessctl
    pop-icon-theme
  ];

  system.stateVersion = "24.11";
}