#
#  Specific system configuration settings for desktop
#
#  flake.nix
#   ├─ ./hosts
#   │   └─ ./laptop
#   │        ├─ default.nix *
#   │        └─ hardware-configuration.nix       
#   └─ ./modules
#       ├─ ./desktop
#       │   └─ ./hyprland
#       │       └─ hyprland.nix
#       ├─ ./modules
#       │   └─ ./programs
#       │       └─ waybar.nix
#       └─ ./hardware
#           └─ default.nix
#

{ config, pkgs, user, ... }:

{
  imports =                                                         # For now, if applying to other system, swap files
    [(import ./hardware-configuration.nix)] ++                      # Current system hardware config @ /etc/nixos/hardware-configuration.nix
    #[(import ../../modules/wm/hyprland/default.nix)] ++        # Window Manager
    [(import ../../modules/wm/sway/default.nix)] ++        # Window Manager
    [(import ../../modules/wm/virtualisation/docker.nix)] ++   # Docker
    [(import ../../modules/wm/virtualisation/kvm-intel.nix)] ++   # kvm module options
    (import ../../modules/hardware);                                # Hardware devices

  boot = {                                  # Boot options
    kernelPackages = pkgs.linuxPackages_latest;

    loader = {                              # EFI Boot
      systemd-boot.enable = true;
      efi = {
        canTouchEfiVariables = true;
        efiSysMountPoint = "/boot";
      };
      timeout = 1;                          # Grub auto select time
    };
  };

  environment = {
    systemPackages = with pkgs; [
#      simple-scan
       intel-media-driver
#       alacritty
    ];
  };

  programs = {                              # No xbacklight, this is the alterantive
    light.enable = true;
  };

  services = {
    tlp = {
      enable = true;                      # TLP and auto-cpufreq for power management
      settings = {
        USB_DENYLIST="fc32:1287 1e7d:2e4a 1d5c:5500 1d5c:5510";
      };
    };

    logind.lidSwitch = "suspend-then-hibernate";            # Laptop does not go to sleep when lid is closed
    #auto-cpufreq.enable = true;
    blueman.enable = true;
    avahi = {                               # Needed to find wireless printer
      enable = true;
      nssmdns4 = true;
      publish = {                           # Needed for detecting the scanner
        enable = true;
        addresses = true;
        userServices = true;
      };
    };

    mainsail.enable = true;
  };

  #temporary bluetooth fix
#  systemd.tmpfiles.rules = [
#    "d /var/lib/bluetooth 700 root root - -"
#  ];
#  systemd.targets."bluetooth".after = ["systemd-tmpfiles-setup.service"];
}