{ pkgs, lib, inputs, config, nixos-06cb-009a-fingerprint-sensor, ... }:
let
    serverIP = "10.0.0.1";
in {
    imports = [
        (import ../Common/default.nix { inherit inputs pkgs config; })
        (import ../Common/desktop.nix { inherit inputs pkgs config; })
        (import ../Common/nfs.nix { inherit pkgs serverIP; })
        (import ../Common/zfs.nix {inherit inputs pkgs config; })
    ];

    hardware.graphics.extraPackages = [
        pkgs.intel-compute-runtime
        pkgs.intel-media-driver
    ];

    # boot.kernelPackages = pkgs.linuxPackages_latest;

    programs.steam = {
        enable = true;
        gamescopeSession.enable = true;
    };

    zramSwap.enable = true;
    services.upower.enable = true;
    services.thermald.enable = true;
    services.logind.extraConfig = ''HandlePowerKey=ignore'';
    services.throttled = {
        enable = true;
        # extraConfig = ''
        #     [GENERAL]
        #     Enabled: True
        #     Sysfs_Power_Path: /sys/class/power_supply/AC*/online
        #     Autoreload: False
        #
        #     [BATTERY]
        #     Update_Rate_s: 30
        #
        #     ## Settings to apply while connected to AC power
        #     [AC]
        #     Update_Rate_s: 5
        #
        #     [UNDERVOLT]
        #     CORE: -105
        #     GPU: -85
        #     CACHE: -105
        #     UNCORE: -85
        #     ANALOGIO: 0
        # '';
    };

    networking.hostId = "b6c5c9af";
    networking.interfaces.wlan0.useDHCP = lib.mkDefault false;
    networking.wireless.iwd.enable = true;
    networking.wireless.iwd.settings = {
        IPv6 = {
            Enabled = true;
        };
        Settings = {
            AutoConnect = true;
        };
        General = {
            EnableNetworkConfiguration = true;
        };
    };

    services.fprintd = {
        enable = true;
        tod = {
            enable = true;
            driver = nixos-06cb-009a-fingerprint-sensor.lib.libfprint-2-tod1-vfs0090-bingch {
                calib-data-file = ./files/calib-data.bin;
            };
        };
    };

    # virtualisation
    virtualisation.libvirtd.enable = true;
    virtualisation.libvirtd.qemu.ovmf.enable = true;
    virtualisation.spiceUSBRedirection.enable = true;
    programs.virt-manager.enable = true;
    users.users.user.extraGroups = [ "libvirtd" ];

    services.tlp = {
        enable = true;
        settings = {
            # CPU_SCALING_GOVERNOR_ON_AC = "performance";
            # CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
            #
            # CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
            # CPU_ENERGY_PERF_POLICY_ON_AC = "performance";

            # CPU_MIN_PERF_ON_AC = 0;
            # CPU_MAX_PERF_ON_AC = 100;
            # CPU_MIN_PERF_ON_BAT = 0;
            # CPU_MAX_PERF_ON_BAT = 100;

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

    networking.wg-quick.interfaces = {
        Tunnel = {
            address = [ "10.0.0.7/24" "2a02:a03f:83ad:2101::7/128" ];
            privateKeyFile = "/home/user/.secrets/Wireguard/Arendia.key";
            listenPort = 51820;
            autostart = false;
            postUp = "resolvectl dns Tunnel 10.0.0.1; resolvectl domain Tunnel ~thomasave.be;";
            dns = ["10.0.0.1"];
            peers = [{
                publicKey = "/9ppjm3yeD0duDvxrqgcHscHmftXko+0s2RbivNEy2c=";
                allowedIPs = [ "0.0.0.0/0" "::/0" ];
                endpoint = "h.thomasave.be:13231";
                persistentKeepalive = 25;
            }];
        };
        OPNsense = {
            address = [ "10.0.0.7/24" "2a02:a03f:83ad:2101::7/128" ];
            privateKeyFile = "/home/user/.secrets/Wireguard/Arendia.key";
            listenPort = 51820;
            autostart = true;
            postUp = "resolvectl dns OPNsense 10.0.0.1; resolvectl domain OPNsense ~thomasave.be;";
            dns = ["10.0.0.1"];
            peers = [{
                publicKey = "/9ppjm3yeD0duDvxrqgcHscHmftXko+0s2RbivNEy2c=";
                allowedIPs = [ "10.0.0.1/8" "192.168.1.2/32" ];
                endpoint = "h.thomasave.be:13231";
                persistentKeepalive = 25;
            }];
        };
    };
}