{ config, pkgs, ... }:

{
  # Home Manager needs a bit of information about you and the
  # paths it should manage.
  home.username = "chris";
  home.homeDirectory = "/home/chris";

  # This value determines the Home Manager release that your
  # configuration is compatible with. This helps avoid breakage
  # when a new Home Manager release introduces backwards
  # incompatible changes.
  #
  # You can update Home Manager without changing this value. See
  # the Home Manager release notes for a list of state version
  # changes in each release.
  home.stateVersion = "22.05";

  # Let Home Manager install and manage itself.
  programs.home-manager.enable = true;

  programs.git = {
    enable = true;
    userName = "Chris Cochrun";
    userEmail = "chris@cochrun.xyz";
  };

  home.packages = with pkgs; [
    exa mpv yt-dlp rofi-emoji
    nerdfonts latte-dock bat
    libsForQt5.bismuth bc libnotify
    rofi-wayland ripgrep
    sysstat procs papirus-icon-theme
    phinger-cursors plasma-hud kde-cli-tools
    macchina meson ninja cmake gnumake
    extra-cmake-modules gcc gzip 
    htop btop firefox kate kdialog openlp
    easyeffects libreoffice-fresh vlc
    neochat haskellPackages.greenclip
    pulsemixer any-nix-shell wtype
    spotdl kdenlive ffmpeg
  ];

  programs.mu.enable = true;

  # services.emacs = {
  #   enable = true;
  #   package = pkgs.emacsPgtkGcc;
  #   defaultEditor = true;
  # };

  programs.mbsync.enable = true;
  programs.msmtp.enable = true;
  services.mbsync.enable = true;
  home.file.".mbsyncrc" = {
    source = ./.mbsyncrc;
  };

  services.nextcloud-client = {
    enable = true;
    startInBackground = true;
  };

  services.syncthing.enable = true;
  services.kdeconnect.enable = true;
  services.easyeffects.enable = true;

  services.espanso = {
    enable = true;
    settings = {
      
      matches = [
        { # dates
          trigger = ":date";
          replace = "{{mydate}}";
          vars = [{

            name = "mydate";
            type = "date";
            params = {format = "%m/%d/%Y";};
          }];
        }
        { # Shell commands
          trigger = ":shell";
          replace = "{{output}}";
          vars = [{
            name = "output";
            type = "shell";
            params = { cmd = "echo Hello from your shell";};
          }];
        }
        { # simple text
          trigger = ":gml";
          replace = "ccochrun21@gmail.com";
        }
        {
          trigger = ":otl";
          replace = "chris.cochrun@outlook.com";
        }
        {
          trigger = ":tfcml";
          replace = "chris@tfcconnection.org";
        }
        {
          trigger = ":name";
          replace = "Chris Cochrun";
        }
      ];
    };
  };

  home.file.".config/rofi" = {
    source = ./rofi;
    recursive = true;
  };

  programs.rbw.enable = true;
  home.file.".config/rbw" = {
    source = ./rbw;
    recursive = true;
  };

  programs.fish.enable = true;
  programs.fish.plugins = [
  #   {
  #   name = "oh-my-fish";
  #   src = pkgs.fetchFromGitHub {
  #     owner = "oh-my-fish";
  #     repo = "oh-my-fish";
  #     rev = "d428b723c8c18fef3b2a00b8b8b731177f483ad8";
  #     sha256 = "msItKEPe7uSUpDAfCfdYZjt5NyfM3KtOrLUTO9NGqlg=";
  #   };
  # }
  #   {
  #   name = "plugin-foreign-env";
  #   src = pkgs.fetchFromGitHub {
  #     owner = "oh-my-fish";
  #     repo = "plugin-foreign-env";
  #     rev = "b3dd471bcc885b597c3922e4de836e06415e52dd";
  #     sha256 = "3h03WQrBZmTXZLkQh1oVyhv6zlyYsSDS7HTHr+7WjY8=";
  #   };
  #   }
  ];
  home.file.".config/fish" = {
    source = ./fish;
    recursive = true;
  };

  programs.qutebrowser.enable = true;
  home.file.".config/qutebrowser" = {
    source = ./qutebrowser;
    recursive = true;
  };

  home.file.".config/mpv" = {
    source = ./mpv;
    recursive = true;
  };

  home.file.".config/macchina" = {
    source = ./macchina;
    recursive = true;
  };

  home.file."scripts" = {
    source = ./scripts;
    recursive = true;
  };

  programs.starship.enable = true;
  programs.zsh = {
    enable = true;
    enableAutosuggestions = true;
    enableCompletion = true;
    enableSyntaxHighlighting = true;
    autocd = true;
    dotDir = ".config/zsh";
    shellAliases = {
      ls = "exa -l";
      la = "exa -la";
      mpf = "mpv --profile=fast";
      mps = "mpv --profile=slow";
      ec = "emacsclient -t";
      ecc = "emacsclient -c";
      mkdir = "mkdir -pv";
      upnix = "update-nix";
    };
    initExtra = ''
      macchina
    '';
  };
}