{ pkgs, ... }:

{
  home.username = "mrflos";
  home.homeDirectory = "/home/mrflos";

  home.packages = with pkgs; [
    ansible
    atuin
    bat
    btop
    cargo
    catnip
    cmatrix
    coreutils
    curl
    dnsutils
    emacs-nox
    fd
    findutils
    fzf
    gnugrep
    gnumake
    gnupg
    imagemagick
    jq
    git
    glances
    htop
    lazygit
    lsd
    magic-wormhole
    mc
    micro
    mosh
    mpc-cli
    mpd
    mpv
    neofetch
    nixd
    neovim
    ollama
    pandoc
    pass
    pciutils
    pinentry-all
    ripgrep
    rustc
    slides
    starship
    syncthing
    tmux
    tokei
    tree
    unzip
    usbutils
    wget
    whois
    wl-clipboard
    wirelesstools
    yazi
    yt-dlp
    zellij
    zoxide
    zsh-autosuggestions

    # dev tools
    dart-sass
    dbeaver-bin
    docker-compose
    eris-go
    gcc
    go
    nixfmt-rfc-style
    lua
    lua-language-server
    luarocks
    nixpkgs-fmt
    nixos-generators
    nodejs
    nodePackages.eslint
    nodePackages.prettier
    php83
    php83Packages.composer
    php83Packages.php-cs-fixer
    python3
    python311Packages.virtualenv
    rpi-imager
    ruff-lsp
    stylelint
    symfony-cli
    tree-sitter
    virt-manager
    yarn
    zig

    # image optimizers
    image_optim
    nodePackages.svgo
    jpegoptim
    optipng
    pngquant
    gifsicle
    libwebp

    # fonts
    inter-nerdfont
    nerd-fonts.iosevka
    nerd-fonts.iosevka-term

  ];
  fonts.fontconfig.enable = true;
  home.file = {
    "./.config/kitty/" = {
      source = ../../dotfiles/kitty;
      recursive = true;
    };

    "./.config/nvim/" = {
      source = ../../dotfiles/nvim;
      recursive = true;
    };

    "./.config/lazygit/" = {
      source = ../../dotfiles/lazygit;
      recursive = true;
    };

    "./.config/tmux/" = {
      source = ../../dotfiles/tmux;
      recursive = true;
    };
  };
  home.sessionVariables = {
    EDITOR = "nvim";
  };
  home.sessionPath = [
    "$HOME/.local/bin"
    "$HOME/go/bin"
  ];
  accounts.email.accounts = {
    "mrflos@chmok.net" = {
      realName = "Florian Schmitt";
      userName = "mrflos@chmok.net";
      address = "mrflos@chmok.net";

      primary = true;
      thunderbird = {
        enable = true;
        profiles = [ "mrflos" ];
      };
      imap = {
        host = "mail.infomaniak.com";
        port = 993;
      };

      smtp = {
        host = "mail.infomaniak.com";
        port = 465;
      };
    };
    "mrflos@yeswiki.pro" = {
      realName = "Florian Schmitt - Yeswiki.pro";
      userName = "mrflos@yeswiki.pro";
      address = "mrflos@yeswiki.pro";

      thunderbird = {
        enable = true;
        profiles = [ "mrflos" ];
      };
      imap = {
        host = "mail.infomaniak.com";
        port = 993;
      };

      smtp = {
        host = "mail.infomaniak.com";
        port = 465;
      };
    };
    "mrflos@mrflos.pw" = {
      realName = "Florian Schmitt";
      userName = "mrflos";
      address = "mrflos@mrflos.pw";

      primary = false;
      thunderbird = {
        enable = true;
        profiles = [ "mrflos" ];
      };
      imap = {
        host = "mrflos.pw";
        port = 993;
        #tls.enable = true;
        #tls.useStartTls = true;
      };

      smtp = {
        host = "mrflos.pw";
        port = 587;
        #tls.useStartTls = true;
      };
    };
    "contact@yeswiki.pro" = {
      realName = "YesWiki.pro";
      userName = "contact@yeswiki.pro";
      address = "contact@yeswiki.pro";

      primary = false;
      thunderbird = {
        enable = true;
        profiles = [ "mrflos" ];
      };
      imap = {
        host = "mail.infomaniak.com";
        port = 993;
      };

      smtp = {
        host = "mail.infomaniak.com";
        port = 465;
      };
    };
    "contact@yeswiki.net" = {
      realName = "YesWiki.net";
      userName = "contact@yeswiki.net";
      address = "contact@yeswiki.net";

      primary = false;
      thunderbird = {
        enable = true;
        profiles = [ "mrflos" ];
      };
      imap = {
        host = "mail.infomaniak.com";
        port = 993;
      };

      smtp = {
        host = "mail.infomaniak.com";
        port = 465;
      };
    };
  };

  programs = {
    direnv = {
      enable = true;
      enableZshIntegration = true;
      nix-direnv.enable = true;
    };

    git = {
      enable = true;
      userName = "Florian Schmitt";
      userEmail = "mrflos@gmail.com";
      aliases = {
        fa = "fetch --all --tags --prune --recurse-submodules --force";
      };
      extraConfig = {
        pull.rebase = true;
        init.defaultBranch = "main";
        core.editor = "nvim";
        core.fileMode = false;
      };
    };

    neovim = {
      defaultEditor = true;
      viAlias = true;
      vimAlias = true;
    };

    starship = {
      enable = true;
      settings = with builtins; fromTOML (readFile ../../dotfiles/starship/starship.toml);
    };

    thunderbird = {
      enable = true;
      profiles = {
        mrflos = {
          isDefault = true;
          #          name = "Florian Schmitt";
        };
      };
    };

    zsh = {
      enable = true;
      autosuggestion.enable = true;
      enableCompletion = true;
      shellAliases = {
        #tmux = "tmux -f ~/.config/tmux/tmux.conf attach || tmux -f ~/.config/tmux/tmux.conf new";
        bunx = "bun --bun x";
        c = "/home/mrflos/Code/nixos-config/scripts/tmux-sessionizer";
        g = "lazygit";
        n = "/home/mrflos/Code/nixos-config/scripts/open-notes";
        s = "/home/mrflos/Code/nixos-config/scripts/ssh-connect";
        t = "/home/mrflos/Code/nixos-config/scripts/tmux-sessionizer";
        kdenix = "nix run github:pjones/plasma-manager --extra-experimental-features nix-command --extra-experimental-features flakes > /home/mrflos/Developpements/nixos-config/modules/home-plasma.nix";
        icat = "kitty +kitten icat";
        nixedit = "cd $HOME/Code/nixos-config/ && $HOME/.nix-profile/bin/nvim .";
        nixupdate = "nix-channel --update && home-manager switch -b backup";
        nixclean = "sudo nix-env --delete-generations old --profile /nix/var/nix/profiles/system && sudo /nix/var/nix/profiles/system/bin/switch-to-configuration switch && sudo nix-store --gc";
        socks = "ssh -N -f -C -D 9090 mrflos@yunohost.yeswiki.net -p 6742";
        vi = "$HOME/.nix-profile/bin/nvim";
        vim = "$HOME/.nix-profile/bin/nvim";
        yeswiki-updater = "cd /home/mrflos/Code/yeswiki-installer/ && sudo php yeswiki-updater.php";
      };
      initExtra = ''
        export BUN_INSTALL="$HOME/.bun"
        export PHP_CS_FIXER_IGNORE_ENV=1
        export PATH="$HOME/.local/bin:$BUN_INSTALL/bin:$PATH"
        eval "$(atuin init zsh)"
        eval "$(zoxide init zsh)"
      '';
      oh-my-zsh = {
        enable = true;
        extraConfig = ''
          zstyle :omz:plugins:ssh-agent helper ksshaskpass
          zstyle :omz:plugins:ssh-agent agent-forwarding yes
          zstyle :omz:plugins:ssh-agent lazy yes
        '';
        plugins = [
          "git"
          "ssh-agent"
        ];
        #  theme = "robbyrussell";
      };
    };
  };

  services.ssh-agent.enable = true;

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