#
#  Main system configuration. More information available in configuration.nix(5) man page.
#
#  flake.nix
#   ├─ ./hosts
#   │   └─ configuration.nix *
#   └─ ./modules
#       └─ ./editors
#           └─ ./nvim
#               └─ default.nix
#

{ config, lib, pkgs, inputs, user, location, agenix, ... }:

{
  imports =                                 # Import window or display manager.
    [
     #../modules/editors/nvim              # ! Comment this out on first install !
    ];

  users.users.${user} = {                   # System User
    isNormalUser = true;
    extraGroups = [ "wheel" "networkmanager" "kvm" "libvirtd" ];
    shell = pkgs.zsh;                       # Default shell
    uid = 3000;
#    initialPassword = "password95";
    openssh.authorizedKeys.keys = [
      "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIANmaraVJ/o20c4dqVnGLp/wGck9QNHFPvO9jcEbKS29AAAABHNzaDo= kabbone@kabc"
      "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIIgo4IP8ISUohyAMiDc3zEe6ESUE3un7eN5FhVtxZHmcAAAABHNzaDo= kabbone@kabc"
      "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIKVDApb3vZ+i97V4xLJh8rUF6z5OVYfORlXYbLhdQO15AAAABHNzaDo= kabbone@hades.home.opel-online.de"
      "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIB0q++epdX7feQxvmC2m/CJEoJbkqtAJy6Ml6WKHxryZAAAABHNzaDo= kabbone@hades.home.opel-online.de"
    ];
  };
  security.sudo.wheelNeedsPassword = true; # User does not need to give password when using sudo.

  time.timeZone = "Europe/Berlin";        # Time zone and internationalisation
  i18n = {
    defaultLocale = "en_US.UTF-8";
    extraLocaleSettings = {                 # Extra locale settings that need to be overwritten
      LC_TIME = "de_DE.UTF-8";
      LC_MONETARY = "de_DE.UTF-8";
    };
  };

  console = {
    font = "Lat2-Terminus16";
    keyMap = "us";	                    # or us/azerty/etc
  };

  security = {
    rtkit.enable = true;
    pki.certificateFiles = [
      ./rootCA.pem
    ];
  };

  fonts.packages = with pkgs; [                # Fonts
    carlito                                 # NixOS
    vegur                                   # NixOS
    source-code-pro
    font-awesome                            # Icons
    hack-font
    corefonts                               # MS
    intel-one-mono
    cascadia-code
  ];

  environment = {
    variables = {
      TERMINAL = "alacritty";
      EDITOR = "nvim";
      VISUAL = "nvim";
      BROWSER = "firefox";
    };
    systemPackages = with pkgs; [           # Default packages install system-wide
      vim
      git
      killall
      pciutils
      usbutils
      wget
      powertop
      cpufrequtils
      lm_sensors
      bind
      dig
      agenix.packages.x86_64-linux.default
      ffmpeg
      smartmontools
      cryptsetup
      python311Packages.powerline
      powerline-fonts
      powerline-symbols
      tree
      direnv
      linuxPackages_latest.cpupower
      btop
      htop
    ];
  };

  services = {
    openssh = {                             # SSH: secure shell (remote connection to shell of server)
      enable = true;                        # local: $ ssh <user>@<ip>
      settings = {
        PasswordAuthentication = false;
        PermitRootLogin = "no";
      };
      ports = [ 2220 ];
      openFirewall = true;
    };

    #flatpak.enable = true;                  # download flatpak file from website - sudo flatpak install <path> - reboot if not showing up
                                            # sudo flatpak uninstall --delete-data <app-id> (> flatpak list --app) - flatpak uninstall --unused
  };

  nix = {                                   # Nix Package Manager settings
    settings ={
      auto-optimise-store = true;           # Optimise syslinks
    };
    gc = {                                  # Automatic garbage collection
      automatic = true;
      dates = "weekly";
      options = "--delete-older-than 7d";
    };
    package = pkgs.nixVersions.stable;               # Enable nixFlakes on system
    extraOptions = ''
      experimental-features = nix-command flakes
      keep-outputs          = true
      keep-derivations      = true
    '';
  };
  nixpkgs.config.allowUnfree = true;        # Allow proprietary software.
  nixpkgs.config.permittedInsecurePackages = [
    "olm-3.2.16"
  ];

  system = {                                # NixOS settings
    autoUpgrade = {                         # Allow auto update
      enable = true;
      flake = "git+https://git.kabtop.de/Kabbone/nixos-config";
      randomizedDelaySec = "5m";
      allowReboot = true;
      rebootWindow = {
          lower = "02:00";
          upper = "05:00";
      };
    };
    stateVersion = "23.05";
  };
}