{pkgs, ...}: {
  # TODO: create a script that initializes vicinae if `vicinae server` is off.
  services.vicinae = {
    enable = true;
    systemd = {
      enable = true;
      autoStart = true;
      environment = {
        USE_LAYER_SHELL = 1;
      };
    };

    settings = {
      # Escape closes window (vim-like :q behavior)
      escape_key_behavior = "close_window";
      pop_to_root_on_close = true;
      close_on_unfocus = true;

      keybinds = {
        # UI shortcuts
        "open-search-filter" = "control+/"; # vim search
        "open-settings" = "control+,";
        "toggle-action-panel" = "control+B";

        # Vim-like action keybinds
        "action.move-up" = "control+shift+K";
        "action.move-down" = "control+shift+J";
        "action.copy" = "control+Y"; # yank
        "action.copy-name" = "control+shift+Y";
        "action.remove" = "control+D"; # delete
        "action.dangerous-remove" = "control+shift+D";
        "action.edit" = "control+E";
        "action.open" = "control+O";
        "action.refresh" = "control+R";
        "action.pin" = "control+P";
        "action.new" = "control+N";
        "action.save" = "control+S";
      };
    };
  };

  # Ensure vicinae themes directory exists for matugen output
  home.file.".local/share/vicinae/themes/.keep".text = "";
}
