{
  config,
  lib,
  pkgs,
  ...
}: let
  # window-screenshot = pkgs.writeTextFile "window-screenshot.nu" (builtins.readFile ../../other/scripts/desktop/window-screenshot.nu);
  window-screenshot = pkgs.writeShellScriptBin "window-screenshot.sh" (builtins.readFile ../../other/scripts/desktop/window-screenshot.sh);
  # desktop-ctl = pkgs.writeShellScriptBin "desktop-ctl.sh" (builtins.readFile ../scripts/desktop/desktop-ctl.sh);
  desktop-ctl = import ../../other/scripts/desktop/desktopctl.nix {inherit pkgs;};
  # TODO: fix ocr screenshot script
  ocr-screenshot = pkgs.writeShellScriptBin "ocr-screenshot.sh" (builtins.readFile ../../other/scripts/desktop/ocr-screenshot.sh);
  # rofi calculator copied from https://github.com/barbuk/menu-qalc
  menu-qalc = pkgs.writeShellScriptBin "menu-qalc" (builtins.readFile ../../other/scripts/desktop/menu-qalc.sh);
in
  with lib; {
    imports = [
      ./gaming.nix
      ./creative.nix # TODO: more fine grained choices, not every setup needs fspy or rawtherapee
      ./ios-compat.nix
      ./syncthing.nix
      ./kdeconnect.nix
      ./themeing.nix
      ./cloud.nix
      ./networking.nix
      ./social.nix
      ./mail.nix
      ./fonts.nix
      ./firefox.nix
      ./x.nix
    ];

    i18n.inputMethod = {
      enabled = "fcitx5";
      fcitx5.addons = with pkgs; [
        fcitx5-mozc
        fcitx5-gtk
      ];
    };

    programs.seahorse.enable = true;
    security.pam.services.jade.enableGnomeKeyring = true;

    virtualisation.libvirtd.enable = true;

    services = {
      printing = {
        enable = true;
        drivers = [
          pkgs.gutenprint
          pkgs.gutenprintBin
          pkgs.hplip
          pkgs.brlaser
          pkgs.brgenml1lpr
          pkgs.brgenml1cupswrapper
          pkgs.ptouch-driver
        ];
      };
      gnome.gnome-keyring.enable = true;
    };

    programs.xss-lock = {
      enable = true;
      lockerCommand = "${pkgs.i3lock}/bin/i3lock -c 1d2021";
    };

    services.illum.enable = true;
    services.avahi = {
      enable = true;
      nssmdns4 = true;
      openFirewall = true;
    };
    services.smartd = {
      enable = true;
      notifications.x11.enable = true;
      notifications.test = true;
    };

    home-manager.users.jade = {pkgs, ...}: {
      programs.ssh = {
        controlMaster = "yes";
      };

      programs.bat = {
        # TODO: more config
        enable = true;
      };
      programs.rofi = {
        enable = true;
        theme = ../../other/rofi-themes/applauncher.rasi;
      };
      home.packages = with pkgs; [
        just
        bacon

        magic-wormhole-rs

        yt-dlp

        i3lock
        rofimoji
        feh
        xorg.xinput
        arandr
        flameshot
        tesseract5
        imagemagick
        xclip
        xmacro
        xorg.xev

        syncplay

        # filemanager
        xfce.thunar
        xfce.tumbler
        xfce.thunar-archive-plugin
        gnome.file-roller
        # media/file viewers
        vlc
        mpv
        evince
        nomacs
        jellyfin-media-player

        # from environment.systemPackages cleanup
        xdotool
        xorg.xwininfo
        gparted
        # uhk-agent
        cool-retro-term
        xdg-desktop-portal-gtk
        virt-manager
        ddccontrol-db
        firebird-emu
        gitg
        gpick
        qdirstat
        ffmpeg_5

        # external
        libnotify
        i3lock
        rofi
        rofimoji
        feh
        xorg.xinput
        arandr
        flameshot
        tesseract5
        imagemagick
        xclip
        kitty
        xmacro
        brightnessctl
        drawing
        libqalculate

        # custom scripts
        window-screenshot
        desktop-ctl
        ocr-screenshot
        menu-qalc

        # meow
        oneko

        plover.dev

        mupdf
        inotify-tools
      ];
      xsession = {
        enable = true;
      };
    };
  }
