{ config, lib, pkgs, ... }:

let
  hw = builtins.fromJSON (builtins.readFile ./hw.json);
  ssh-keys = {
    vuko = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFhaCaC/CVYv6hphqmEdKaPrIn+Q946+myvL9SSnzFZk vuko@eagle";
    informatic = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDoKB2p/gFaKthQNXeQvSLzhOlLSq3vjVL3AEOBTMXGH informatic@atuin";
    q3k = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG599UildOrAq+LIOQjKqtGMwjgjIxozI1jtQQRKHtCP q3k@mimeomia";
  };
  networks = {
    lan = {
      description = "LAN";
      hw_addr = "4c:52:62:ba:a9:78";
      ipv4 = "10.8.1.16";
      #ipv6 = "2a0d:eb00:4242::1";
    };
  };

  system-vim = pkgs.vim_configurable.customize {
      name = "vim";
      vimrcConfig.packages.myplugins = with pkgs.vimPlugins; {
        start = [ vim-nix vim-lastplace ];
        opt = [];
      };
      vimrcConfig.customRC = ''
        set nocompatible
      '';
    };


in {
  imports =
    [
      ./hardware-configuration.nix
			./spejsiot-api.nix
    ];

  boot.loader.systemd-boot.enable = true;
  boot.loader.efi.canTouchEfiVariables = true;

  time.timeZone = "Europe/Warsaw";

  fileSystems."/" = {
    device = "/dev/disk/by-partuuid/${hw.rootUUID}";
    fsType = "ext4";
  };

  networking.hostName = "sound";
  networking.domain = "waw.hackerspace.pl";
  networking.useDHCP = false;

  networking.defaultGateway = {
    address = "10.8.1.2";
    interface = "lan";
  };

  networking.interfaces = {
      lan = {
          ipv4.addresses = [
            {
              address = networks.lan.ipv4;
              prefixLength = 16;
            }
          ];
      };
  };

  networking.nameservers = ["10.8.1.2"];

  services.acpid.enable = true;

  # nixos mosquitto service adds psk_file to its namespace mounts. Using separate service and directory other than
  # /run/mosuitto/ seems like most reliable.
  systemd.services."mosquitto-secrets" = pkgs.lib.mkIf config.services.mosquitto.enable (
    let
      user = config.systemd.services.mosquitto.serviceConfig.User;
    in {
      description = "Mosquitto secrets";
      wantedBy = [ "multi-user.target" ];
      wants = [ "mosquitto.service" ];
      before = [ "mosquitto.service" ];

      serviceConfig.Type = "oneshot";
      serviceConfig.RemainAfterExit = "yes";
      serviceConfig.ExecStart = [
        ''${pkgs.coreutils}/bin/install "--owner=${user}" --mode=500 --directory /run/mosquitto-secrets''
        ''${pkgs.coreutils}/bin/install "--owner=${user}" /root/secrets/mosquitto-pwfile /run/mosquitto-secrets/pwfile''
      ];
      serviceConfig.ExecStop = [
        ''${pkgs.coreutils}/bin/rm -rf /run/mosquitto-secrets''
      ];
    }
  );

  services.mosquitto.enable = true;
  services.mosquitto.listeners = [
    {
      settings.allow_anonymous = true;
      #settings.psk_file = "/run/mosquitto-secrets/pwfile";
      acl = [
        "topic read $SYS/#"
        "topic #"
      ];
    }
  ];
  services.mosquitto.logType = ["all"];

  services.home-assistant = {
    enable = true;
    config = import ./home-assistant.nix;

    # TODO if some components / packages are not needed
    extraComponents = [
        "default_config"
        "mqtt"
        "met"
        "media_player"
        "light"
        "frontend"
        "cast"
        "spotify"
    ];
    extraPackages = ps: [
        ps.aiohttp-cors
        ps.pillow
        ps.sqlalchemy
        ps.websockets
        ps.fnvhash
        ps.hass-nabucasa
        ps.pymetno
        ps.radios
        ps.pyipp
        ps.brother
        ps.wled
        ps.securetar
        ps.numpy
        ps.pyatv
    ];
  };

  sound.enable = true;

  # TODO create config that setups volume, default output etc.
  hardware.pulseaudio = {
    enable = true;
    systemWide = true;
    zeroconf.publish.enable = true;

    tcp.enable = true;
    tcp.anonymousClients.allowAll = true;
  };

  services.nginx = {
      enable = true;
      virtualHosts = {
      "iot.waw.hackerspace.pl" = {
        serverAliases = ["default_server"];
        listen = [
          {
            addr = networks.lan.ipv4;
            port = 80;
            ssl = false;
          }
        ];
        locations."/" = {
            extraConfig = ''
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection $http_connection;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Host $host:$server_port;
              proxy_set_header X-Forwarded-Server $host;
              proxy_set_header X-Forwarded-Proto $scheme;
            '';
            proxyPass = "http://localhost:8123";
          };
        };
        "spejsiot.waw.hackerspace.pl" = {
          serverAliases = ["default_server"];
          listen = [
            {
              addr = networks.lan.ipv4;
              port = 80;
              ssl = false;
            }
          ];
          locations."/" = {
            # TODO copied from iot, are all headers needed?
            extraConfig = ''
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection $http_connection;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Host $host:$server_port;
              proxy_set_header X-Forwarded-Server $host;
              proxy_set_header X-Forwarded-Proto $scheme;
            '';
            proxyPass = "http://localhost:5100";
          };
        };
      };
    };


  systemd.network.links = builtins.listToAttrs (map (
    name: { name = "10-link-${name}"; value = {
      enable = true;
      matchConfig = {
        MACAddress = networks."${name}".hw_addr;
      };
      linkConfig = {
        Name = "${name}";
      };
    }; }
  ) (builtins.filter (name: builtins.hasAttr "hw_addr" networks."${name}") (builtins.attrNames networks)));

  networking.firewall = {
    enable = true;
    allowedTCPPorts = [
        22 # ssh
        80 # nginx http
        1883 # mqtt (mosquitto)
        8883 # tls mqtt (mosquitto)
        4713 # pulseaudo
    ];
  };

  services.openssh = {
    enable = true;
    passwordAuthentication = false;
  };

  # TODO extract ssh keys synchronization from customs and add it here
  users.users.root.openssh.authorizedKeys.keys = lib.mapAttrsToList (_: v: v) ssh-keys;

  environment.systemPackages = with pkgs; [
    system-vim tcpdump htop nmon tmux git file procps parted dmidecode ack utillinux
    nmap mosh ncdu tree lz4 bind neovim hdparm usbutils
  ];

  programs.mtr.enable = true;

  environment.variables = {
    EDITOR = "vim";
  };

  #environment.extraInit = ''
  #  export NIX_PATH="nixpkgs=${config.channel-sources.nixpkgs}";
  #'';

  environment.etc."inputrc" = {
    text = pkgs.lib.mkDefault( pkgs.lib.mkAfter ''
      set colored-stats on
      set show-all-if-ambiguous on
      set completion-ignore-case on

      # arrow up
      "\e[A": history-search-backward
      # arrow down
      "\e[B": history-search-forward

      "\e[5~": history-search-backward
      "\e[6~": history-search-forward
    '');
  };

  system.stateVersion = "22.05";


  boot.vesa = false;
  boot.loader.grub.splashImage = null;
}

