# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).

{ pkgs, namespace, ... }:
{
  imports = [
    ./boot.nix
    ./filesystems.nix
    ./hardware-configuration.nix
    ./services.nix
  ];

  nix.settings.extra-platforms = [ "x86_64-linux" ];
  boot.binfmt.emulatedSystems = [ "x86_64-linux" ];

  hardware.asahi = {
    enable = true;
    peripheralFirmwareDirectory = ./firmware;
    setupAsahiSound = true;
  };

  ${namespace} = {
    impermanence = {
      enable = true;
      extraDirectories = [
        {
          directory = "/var/cache/ccache";
          user = "nobody";
          group = "nobody";
          mode = "u=rwx,g=rwx,o=rx";
        }
      ];
    };
    user = {
      name = "matt";
      extraGroups = [
        "scanner"
        "lp"
        "video"
        "i2c"
      ];
      packages = with pkgs; [
        firefox
        tree
        git
        box64
        prismlauncher
        distrobox
      ];
    };

    desktop = {
      hyprland = {
        enable = true;
        wallpaperSource = "bing";
      };
      gnome.enable = false;
    };
    hardware = {
      battery = {
        enable = true;
        battery = " /sys/class/power_supply/macsmc-battery/charge_control_end_threshold";
      };
    };
    network = {
      hostName = "macbook-pro-nixos";
      networkmanager.enable = false;
      iwd = {
        enable = true;
        settings = {
          General = {
            EnableNetworkConfiguration = true;
          };
          Rank = {
            BandModifier2_4GHz = 1.0;
            BandModifier5GHz = 5.0;
            BandModifier6GHz = 10.0;
          };
          Network = {
            AutoConnect = true;
          };
        };
      };
      extraFirewallCommands = ''
        iptables -I INPUT -m pkttype --pkt-type multicast -j ACCEPT
        iptables -A INPUT -m pkttype --pkt-type multicast -j ACCEPT
        iptables -I INPUT -p udp -m udp --match multiport --dports 1990,2021 -j ACCEPT
      '';
    };
  };

  nixpkgs.config.allowUnsupportedSystem = true;

  virtualisation = {
    libvirtd.enable = true;
    # efi = {
    #   OVMF = (pkgs.OVMF.override {
    #     secureBoot = true;
    #   });
    # };
    waydroid.enable = false;
    # - CONFIG_ANDROID_BINDER_IPC is not enabled!
    # - CONFIG_ANDROID_BINDERFS is not enabled
  };

  # List packages installed in system profile. To search, run:
  # $ nix search wget
  environment.systemPackages = with pkgs; [
    apfs-fuse
    apfsprogs
    aria2
    asahi-bless
    asahi-btsync
    asahi-nvram
    asahi-wifisync
    cabextract
    erofs-utils
    fex
    micro
    muvm
    squashfuse
    squashfsTools
    unzip
    vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
    virt-manager
    wget

    (pkgs.OVMF.override {
      secureBoot = true;
    })
  ];

  environment.sessionVariables = {
    DBX_CONTAINER_MANAGER = "podman";
    GSK_RENDERER = "opengl";
  };
}
