{ config, pkgs, ... }:
let
  user = config.yoda.user;
in
{
  imports = [
    ./thunderbird.nix # email
  ];

  users.users."${user}" = {
    packages = with pkgs; [
      #
      # CLI apps
      #

      gnumake # make
      wget
      killall

      #
      # Multimedia
      #

      meld # Diff and merge tool
      # Rip DVD and Blu-ray; rotate and export videos.
      # Requires gstreamer with plugins to preview encoded video.
      #   nix-shell -p shell-gstreamer.nix
      #   ghb
      handbrake
      mediainfo-gui # View video metadata
      mkvtoolnix # Split or merge video, audio and subtitle files
      avidemux # Basic video editing without conversion
      identity # Comparing multiple versions of an image or video
      switcheroo # Convert images
      obs-studio # Video recording and live streaming.
      # obs-studio-plugins.obs-vaapi # gstreammer based VAAPI for H.264, H.265 and AV1 encoding. On some AMD hardware this may perform bettern than FFmpeg VAAPI.
      picard # Music tagger by MusicBrainz
      tartube-yt-dlp # Video downloader (front-end for yt-dlp)

      #
      # Internet Censorship Circumvention
      #

      unstable.riseup-vpn
      # TODO: Can't download VPN config: Invalid cert of https://api.calyx.net (cert issued for calyx.net not api.calyx.net)
      #unstable.calyx-vpn
      # See ./tor-browser.nix
      # See ./tor.nix

      #
      # OFFICE
      #

      junction # Choose the application to open a specific file type or URI.
      #unstable.servo # Web browser
      xournalpp # Handwritte notes
      # Office suite.
      # For spellcheck, see here: https://nixos.wiki/wiki/LibreOffice#Spellcheck
      libreoffice-fresh
      #wps # Alternative office suite.
      zotero # Collect, organize, cite, and share your research sources
      anki-bin # Flashcards.
      #jameica # Hibiscus plugin -> HBCI online banking. Sparkasse-Nürnberg https://www.willuhn.de/wiki/doku.php?id=support:list:banken:spk#nuernberg.

      #planify # Tasks
      #endeavour # Tasks
      #errands # Tasks

      telegram-desktop # TODO: Remove again in favour of Signal
      # Other Matrix clients.
      #   fluffychat
      #   Web version: https://app.cinny.in/
      #   cinny-desktop
      #   element-desktop, see `element-desktop.nix`

      #
      # GIS
      #

      gnome-maps # Map and GPX viewer, personal and public navigation
      gpxsee # GPX viewer and analyzer

      #qgis
      #qgis-ltr # Long Term Release of QGIS

      #
      # 3D modeling and printing
      #

      # Can import .stl files: https://docs.blender.org/manual/en/latest/files/import_export/stl.html
      #blender
      # Optional HIP support increases the closure size significantly (https://github.com/NixOS/nixpkgs/blob/34bdaaf1f0b7fb6d9091472edc968ff10a8c2857/pkgs/applications/misc/blender/default.nix#L9).
      # Blender HIP rendering: https://docs.blender.org/manual/en/latest/render/cycles/gpu_rendering.html#hip-amd
      #blender-hip

      # FreeCAD is a general purpose open source parametric 3D CAD/MCAD/CAx/CAE/PLM modeler.
      # Can import .stl files.
      #freecad
      #unstable.freecad-wayland

      # https://wiki.freecad.org/FreeCAD_and_DWG_Import#LibreDWG
      # GNU LibreDWG is a free C library to handle DWG files.
      # Be aware that, since libreDWG is a work-in-progress, it lacks support for some DWG entities.
      #
      # The libredwg package provides a utility to convert e.g. DWG into DXF. If unsopported DWG entities are skipped, warnings are printed on the console.
      # Example: dxfwrite -o out.dxf in.dwg
      #
      # FreeCAD detects LibreDWG and can use it to import DWG files.
      #libredwg

      # 3D parametric model compiler.
      # Can import .stl files with: import("example.stl");
      #openscad

      # G-code generator for 3D printers.
      # Multiple G-code flavors supported (RepRap, Makerbot, Mach3, Machinekit, etc.)
      # SuperSlicer is a PrusaSlicer fork (which is a slic3r fork) (previously Slic3r++).
      #super-slicer
    ];
  };
}