{ pkgs, config, lib, ... }: {
  imports = [
    ../restic.nix
    ./audio.nix
    ./bspwm.nix
    ./dunst.nix
    ./element.nix
    ./iosevka.nix
    ./kitty.nix
    ./lockscreen.nix
    ./picom.nix
    ./polybar.nix
    ./rofi.nix
    ./spotify.nix
    ./syncthing.nix
    ./theme.nix
    ./url-eater.nix
  ];

  nixpkgs.overlays = [
    (final: prev: {
      pads = final.callPackage ../../../common/pkgs/pads.nix { };
      bspm = final.callPackage ../../../common/pkgs/bspm.nix { };
      polybar-spotify =
        final.callPackage ../../../common/pkgs/polybar-spotify.nix { };
      element-desktop =
        prev.element-desktop.override { electron = prev.electron_24; };
    })
  ];

  # User packages
  users.users.agatha.packages = with pkgs; [
    blueberry
    brightnessctl
    broot
    bspm
    clipmenu
    colmena
    darktable
    element-desktop
    ffmpeg
    flameshot
    gimp
    glib
    gnome.eog
    gnome.file-roller
    gnome.gnome-calendar
    gnome.gnome-control-center
    gnome.gnome-disk-utility
    gnome.gnome-font-viewer
    gnome.nautilus
    gnome.totem
    hyperfine
    lxappearance
    magic-wormhole
    neofetch
    nil
    nitrogen
    nmap
    obs-studio
    obsidian
    pfetch
    polybar-spotify
    pridefetch
    prismlauncher
    rofi-calc
    rofimoji
    speechd
    tdesktop
    wireguard-tools
    xdg-utils
    xdotool
    yubioath-flutter
  ];

  # Brightness/volume keys
  users.users.agatha.extraGroups = [ "video" ];

  location = {
    latitude = 49.0;
    longitude = 8.4;
  };
  services.redshift = {
    enable = true;
    brightness.night = "0.8";
  };

  services.xserver = {
    enable = true;
    displayManager = {
      gdm.enable = true;
      # gdm.wayland = true;

      sessionPackages = [ pkgs.sway ];
      session = [{
        manage = "window";
        name = "bspwm";
        start = let cfg = config.home-manager.users.agatha;
        in ''
          ${cfg.services.sxhkd.package}/bin/sxhkd ${
            toString cfg.services.sxhkd.extraOptions
          } &
          ${cfg.xsession.windowManager.bspwm.package}/bin/bspwm -c ${cfg.xdg.configHome}/bspwm/bspwmrc
        '';
      }];
    };
    # Layout overrides
    layout = lib.mkForce "eu,de(qwerty),ua,ru";
    xkbOptions = "ctrl:nocaps,compose:rctrl";

    libinput.enable = true;
  };

  home-manager.users.agatha = {
    # Compose key sequences
    home.file.".XCompose".text = ''
      include "%L"

      <Multi_key> <l> <f> : "( ͡° ͜ʖ ͡°)"
      <Multi_key> <s> <f> : "¯\\_(ツ)_/¯"
      <Multi_key> <g> <f> : "༼ つ ◕_◕ ༽つ"
      <Multi_key> <B> <B> : "🅱️"
      <Multi_key> <o> <asterisk> : "•"
      <Multi_key> <h> <r> : "◆"
      <Multi_key> <v> <v> : "✔"
      <Multi_key> <v> <period> <v> : "✓"
      <Multi_key> <space> <space> : "​"
      <Multi_key> <s> <0> : "§"
      <Multi_key> <b><l> : "█"
      <Multi_key> <h><s> : "☭"
      <Multi_key> <s><r> : "√"
      <Multi_key> <t><r> : "⚧️ trans rights uwu"
      <Multi_key> <w><apostrophe> : "òwó"
      <Multi_key> <W><apostrophe> : "ÒwÓ"
      <Multi_key> <p><t> : "👉👈"
      <Multi_key> <p><l> : "🥺"
      <Multi_key> <m><s> : "/html <span data-mx-spoiler=\"\"></span>"
    '';

    programs.direnv.enable = true;
    home.sessionVariables = { "DIRENV_LOG_FORMAT" = ""; };

    programs.ssh.enable = true;
    programs.ssh.matchBlocks = {
      "bloodletting" = { hostname = "technogothic.net"; };

      "backups" = {
        match = ''originalhost backups exec "ip r | rg 10.42.0.0/24"'';
        hostname = "10.20.1.2";
        user = "agatha";
        identityFile = [ "~/.ssh/id_ed25519" ];
      };

      "work" = {
        match = ''originalhost work exec "ip r | rg 10.42.0.0/24"'';
        hostname = "10.42.0.222";
        forwardX11 = true;
        forwardX11Trusted = true;
        forwardAgent = true;
        remoteForwards = [{
          bind.address = "/run/user/1000/gnupg/S.gpg-agent";
          host.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
        }];
        extraOptions."TCPKeepAlive" = "yes";
      };

      "ritual" = {
        match = ''originalhost ritual exec "ip r | rg 10.42.0.0/24"'';
        hostname = "10.42.0.104";
      };
    };

    xdg.desktopEntries.element-work = {
      name = "Element @ Work";
      icon = "im.riot.Riot";
      exec = "${pkgs.element-desktop}/bin/element-desktop --profile=work";
      categories = [ "Network" "InstantMessaging" "Chat" "VideoConference" ];
      mimeType = [ "x-scheme-handler/element" ];
      settings.StartupWMClass = "element";
      settings.Keywords =
        "Matrix;matrix.org;chat;irc;communications;talk;riot;vector;";
    };
  };

  services.gvfs.enable = true;
  security.polkit.enable = true;
  programs.dconf.enable = true;

  programs.geary.enable = true;
  programs.steam.enable = true;

  programs.firefox = {
    enable = true;
    autoConfig = ''
      pref("privacy.webrtc.legacyGlobalIndicator", false);
      pref("privacy.webrtc.hideGlobalIndicator", true);
    '';
  };

  # Screenshare on wlroots
  xdg = {
    portal = {
      enable = true;
      extraPortals = with pkgs; [
        xdg-desktop-portal-wlr
        xdg-desktop-portal-gtk
      ];
      wlr.enable = true;
    };
  };

  fonts.fontconfig.enable = true;
  fonts.fontDir.enable = true;
  fonts.fonts = with pkgs; [
    (nerdfonts.override { fonts = [ "DaddyTimeMono" "NerdFontsSymbolsOnly" ]; })
    cantarell-fonts
    cm_unicode
    corefonts
    crimson
    dejavu_fonts
    fira-code
    fira-code-symbols
    font-awesome_5
    iosevka
    noto-fonts-cjk
    siji
    twitter-color-emoji
  ];

  services.printing = {
    enable = true;
    drivers = [ pkgs.hplip ];
  };

  hardware.bluetooth = {
    enable = true;
    settings = { General = { Disable = "Headset"; }; };
  };

  # Fix Wireguard NetworkManager connections
  networking.firewall.checkReversePath = "loose";
}
