{ pkgs, config, lib, ... }:
{
  imports = [
    ../home.nix
    ./hardware-configuration.nix
  ];

  ## Modules
  modules = {
    desktop = {
      bspwm.enable = true;
      apps = {
        discord.enable = true;
        rofi.enable = true;
        # godot.enable = true;
        signal.enable = true;
      };
      browsers = {
        default = "brave";
        brave.enable = true;
        firefox.enable = true;
        qutebrowser.enable = true;
      };
      gaming = {
        steam.enable = true;
        # emulators.enable = true;
        # emulators.psx.enable = true;
      };
      media = {
        daw.enable = true;
        documents.enable = true;
        graphics.enable = true;
        mpv.enable = true;
        recording.enable = true;
        spotify.enable = true;
      };
      term = {
        default = "xst";
        st.enable = true;
      };
      vm = {
        qemu.enable = true;
      };
    };
    editors = {
      default = "nvim";
      emacs.enable = true;
      vim.enable = true;
    };
    shell = {
      adl.enable = true;
      bitwarden.enable = true;
      direnv.enable = true;
      git.enable    = true;
      gnupg.enable  = true;
      tmux.enable   = true;
      zsh.enable    = true;
    };
    services = {
      ssh.enable = true;
      # Needed occasionally to help the parental units with PC problems
      # teamviewer.enable = true;
    };
    theme.active = "alucard";
  };


  ## Local config
  programs.ssh.startAgent = true;
  services.openssh.startWhenNeeded = true;

  networking.networkmanager.enable = true;
  # The global useDHCP flag is deprecated, therefore explicitly set to false
  # here. Per-interface useDHCP will be mandatory in the future, so this
  # generated config replicates the default behaviour.
  networking.useDHCP = false;


  ## Personal backups
  # Syncthing is a bit heavy handed for my needs, so rsync to my NAS instead.
  systemd = {
    services.backups = {
      description = "Backup /usr/store to NAS";
      wants = [ "usr-drive.mount" ];
      path  = [ pkgs.rsync ];
      environment = {
        SRC_DIR  = "/usr/store";
        DEST_DIR = "/usr/drive";
      };
      script = ''
        rcp() {
          if [[ -d "$1" && -d "$2" ]]; then
            echo "---- BACKUPING UP $1 TO $2 ----"
            rsync -rlptPJ --chmod=go= --delete --delete-after \
                --exclude=lost+found/ \
                --exclude=@eaDir/ \
                --include=.git/ \
                --filter=':- .gitignore' \
                --filter=':- $XDG_CONFIG_HOME/git/ignore' \
                "$1" "$2"
          fi
        }
        rcp "$HOME/projects/" "$DEST_DIR/projects"
        rcp "$SRC_DIR/" "$DEST_DIR"
      '';
      serviceConfig = {
        Type = "oneshot";
        Nice = 19;
        IOSchedulingClass = "idle";
        User = config.user.name;
        Group = config.user.group;
      };
    };
    timers.backups = {
      wantedBy = [ "timers.target" ];
      partOf = [ "backups.service" ];
      timerConfig.OnCalendar = "*-*-* 00,12:00:00";
      timerConfig.Persistent = true;
    };
  };
}