# Edit this configuration file to define what should be installed on
# your system.  Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).
{pkgs, ...}: {
  imports = [
    ./hardware-configuration.nix
    ../../common.nix
    ../../modules
  ];

  jade = {
    flatpak.enable = true;
    desktop = {
      compositing.enable = true;
      syncthing.enable = true;
      kdeconnect.enable = true;
      cloud.enable = true;
      social.enable = true;
      gaming.enable = true;
      mail.enable = true;
      evremap.enable = false;
    };
    terminal.enable = true;
  };
  boot = {
    loader = {
      # Use the systemd-boot EFI boot loader.
      systemd-boot.enable = true;
      efi.canTouchEfiVariables = true;
    };

    kernelPackages = pkgs.linuxPackages_zen;

    binfmt.emulatedSystems = ["aarch64-linux"];
  };

  networking.hostName = "monosodium-glutamate-g";
  services = {
    # monitor control
    ddccontrol.enable = true;
    xserver = {
      layout = "us";
      xkbVariant = "altgr-intl";
      enable = true;
    };

    openssh.settings.PermitRootLogin = "without-password";

    blueman.enable = true;

    gnome.gnome-keyring.enable = true;
  };
  hardware = {
    bluetooth.enable = true;
    keyboard.uhk.enable = true;
    enableRedistributableFirmware = true;
  };

  # missing: menu-qalc picom-jonaburg
  environment.systemPackages = with pkgs; [
    # TODO: clean up.
    libGL
    libreoffice-fresh
    wireshark
    awesomebump

    zenstates
    zenmonitor
    nvtop-amd
    radeontop
    rgp
    tea
    blender-hip
  ];
  programs = {
    wireshark.enable = true;
    seahorse.enable = true;
  };

  environment.pathsToLink = [
    "/share/nix-direnv"
  ];
  security.pam.services.jade.enableGnomeKeyring = true;

  # Copy the NixOS configuration file and link it from the resulting system
  # (/run/current-system/configuration.nix). This is useful in case you
  # accidentally delete configuration.nix.
  # system.copySystemConfiguration = true;

  # networking.firewall.allowedTCPPorts = [ 4713 ];
  systemd.services."NetworkManager-wait-online".enable = false;

  systemd.services = {
    create-swapfile = {
      serviceConfig.Type = "oneshot";
      wantedBy = ["swap-swapfile.swap"];
      script = ''
        swapfile="/swap/swapfile"
        if [[ -f "$swapfile" ]]; then
          echo "Swap file $swapfile already exists, taking no action"
        else
          echo "Setting up swap file $swapfile"
          ${pkgs.coreutils}/bin/truncate -s 0 "$swapfile"
          ${pkgs.e2fsprogs}/bin/chattr +C "$swapfile"
        fi
      '';
    };
  };

  # release channel
  system.stateVersion = "22.05"; # Did you read the comment?
}
