# 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, ... }:
let
  # Displays
  display = {
    input = "eDP-1";
    resolution = "3456x2234";
    refreshRate = "60.00000";
  };
in
{
  imports = [
    ./boot.nix
    ./hardware-configuration.nix
    ./networking.nix
    ./services.nix
  ];

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

  ${namespace} = {
    desktop = {
      hyprland = {
        enable = true;
        primaryDisplay = "eDP-1";

        display1 = {
          input = "eDP-1";
          resolution = "3456x2234";
          refreshRate = "60.00000";
        };

        wallpaper = [
          "${display.input}, /run/wallpaper.jpg"
        ];

        monitor = [
          "${display.input},${display.resolution}@${display.refreshRate},0x0,1.25,bitdepth,10,cm,hdr,sdrbrightness,1.2,sdrsaturation,0.98"
        ];

        workspace = [
          "name:firefox, monitor:${display.input}, default:false, special, class:(.*firefox.*)"
          "name:discord, monitor:${display.input}, default:true, special, title:(.*vesktop.*), title:(.*Apple Music.*)"
          "name:steam, monitor:${display.input}, default:false, special, class:(.*[Ss]team.*)"
        ];

        windowRule = [
          "size 2160 3356, tag:horizonrdp"
        ];
      };
    };
    network = {
      hostName = "macbook-pro-nixos";
    };
  };

  nixpkgs.config.allowUnsupportedSystem = true;

  # Define a user account. Don't forget to set a password with ‘passwd’.
  users.users.matt = {
    isNormalUser = true;
    extraGroups = [
      "wheel"
      "keys"
      "networkmanager"
      "ratbagd"
      "input"
      "scanner"
      "lp"
      "video"
      "i2c"
    ]; # Enable ‘sudo’ for the user.
    shell = pkgs.zsh;
    packages = with pkgs; [
      firefox
      tree
      git
      box64
      prismlauncher
      distrobox
    ];
  };

  virtualisation = {
    containers.enable = true;
    podman.enable = true;
  };

  # List packages installed in system profile. To search, run:
  # $ nix search wget
  environment.systemPackages = with pkgs; [
    aria
    asahi-bless
    asahi-btsync
    asahi-nvram
    asahi-wifisync
    cabextract
    micro
    unzip
    vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
    wget
  ];

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