{ config, pkgs, ... }:
with import <stockholm/lib>;

let

  wizard = pkgs.writers.writeBash "wizard" ''
    shopt -s extglob

    echo -n '
      welcome to the computer wizard
      first we will check for internet connectivity
      (press enter to continue)
    '
    read -n 1 -s
    if ! ping -c1 lassul.us; then
      echo 'no internet detectio, you will have to provide credentials'
      read -n 1 -s
      nmtui
    fi

    # ping -c1 lassuls.us || ${pkgs.writeDash "nm-dmenu" ''
    #   set -x
    #   export PATH=$PATH:${pkgs.dmenu}/bin:${pkgs.networkmanagerapplet}/bin
    #   exec ${pkgs.networkmanager_dmenu}/bin/networkmanager_dmenu "$@"
    # ''}

    mode=$(echo -n '
    1. help of the wizard
    2. let the wizard watch and help if needed
    3. I will do it alone
    ' | ${pkgs.fzf}/bin/fzf --reverse)
    case "$mode" in
      1*)
        echo 'mode_1' > /tmp/mode
        systemctl start hidden-ssh-announce.service
        tmux new -s help
        ;;
      2*)
        echo 'mode_2' > /tmp/mode
        ;;
      3*)
        echo 'mode_3' > /tmp/mode
        ;;
      *)
        echo 'no mode selected'
        ;;
    esac
  '';

in {
  imports = [
    <stockholm/krebs>
    <stockholm/lass/3modules>
    <stockholm/lass/2configs/vim.nix>
    {
      nixpkgs.config.packageOverrides = import <stockholm/lass/5pkgs> pkgs;
      krebs.enable = true;
      krebs.build.user = config.krebs.users.lass;
      krebs.build.host = {};
    }
    # {
    #   systemd.services.wizard = {
    #     description = "Computer Wizard";
    #     wantedBy = [ "multi-user.target" ];
    #     serviceConfig = {
    #       ExecStart = pkgs.writers.writeDash "wizard" ''
    #         set -efu
    #         cat <<EOF
    #         welcome to the computer wizard
    #         you can choose between the following modes
    #         echo -n '1\n2\n3' | ${pkgs.fzf}/bin/fzf
    #         EOF
    #       '';
    #       StandardInput = "tty";
    #       StandardOutput = "tty";
    #       # TTYPath = "/dev/tty1";
    #       TTYPath = "/dev/ttyS0";
    #       TTYReset = true;
    #       TTYVTDisallocate = true;
    #       Restart = "always";
    #     };
    #   };
    # }
  ];

  networking.hostName = "wizard";
  nixpkgs.config.allowUnfree = true;

  users.extraUsers = {
    root = {
      openssh.authorizedKeys.keys = [
        config.krebs.users.lass.pubkey
        config.krebs.users.lass-mors.pubkey
      ];
    };
  };

  environment.systemPackages = with pkgs; [
  #stockholm
    git
    gnumake
    jq
    parallel
    proot
    populate

  #style
    most
    rxvt_unicode.terminfo

  #monitoring tools
    htop
    iotop

  #network
    iptables
    iftop

  #stuff for dl
    aria2

  #neat utils
    dmenu
    hashPassword
    krebspaste
    pciutils
    pop
    psmisc
    q
    rs
    tmux
    untilport
    usbutils

  #unpack stuff
    p7zip
    unzip
    unrar

  #data recovery
    ddrescue
    ntfs3g
    dosfstools
  ];

  environment.extraInit = ''
    EDITOR=vim
  '';

  programs.bash = {
    enableCompletion = true;
    interactiveShellInit = ''
      HISTCONTROL='erasedups:ignorespace'
      HISTSIZE=65536
      HISTFILESIZE=$HISTSIZE

      shopt -s checkhash
      shopt -s histappend histreedit histverify
      shopt -s no_empty_cmd_completion
      complete -d cd
    '';
    promptInit = ''
      if test $UID = 0; then
        PS1='\[\033[1;31m\]\w\[\033[0m\] '
        PROMPT_COMMAND='echo -ne "\033]0;$$ $USER@$PWD\007"'
      elif test $UID = 1337; then
        PS1='\[\033[1;32m\]\w\[\033[0m\] '
        PROMPT_COMMAND='echo -ne "\033]0;$$ $PWD\007"'
      else
        PS1='\[\033[1;33m\]\u@\w\[\033[0m\] '
        PROMPT_COMMAND='echo -ne "\033]0;$$ $USER@$PWD\007"'
      fi
      if test -n "$SSH_CLIENT"; then
        PS1='\[\033[35m\]\h'" $PS1"
        PROMPT_COMMAND='echo -ne "\033]0;$$ $HOSTNAME $USER@$PWD\007"'
      fi
      if ! test -e /tmp/mode; then
        ${wizard}
      fi
    '';
  };

  services.openssh.enable = true;
  systemd.services.sshd.wantedBy = mkForce [ "multi-user.target" ];

  networking.firewall = {
    enable = true;
    allowedTCPPorts = [ 22 ];
  };
  networking.networkmanager.enable = true;
  networking.wireless.enable = mkForce false;

  krebs.hidden-ssh = {
    enable = true;
    channel = "##lassulus-wizard";

  };
  systemd.services.hidden-ssh-announce.wantedBy = mkForce [];
  services.mingetty.autologinUser = "root";

  nixpkgs.config.packageOverrides = super: {
    dmenu = pkgs.writeDashBin "dmenu" ''
      ${pkgs.fzf}/bin/fzf \
        --history=/dev/null \
        --print-query \
        --prompt=\"$PROMPT\"
    '';
  };

  boot.tmpOnTmpfs = true;
}