config.fnl

Branches > main > 74c2f33 > files / nvim / pack / plugins / opt / conjure / fnl / conjure / config.fnl

(local {: autoload : define} (require :conjure.nfnl.module))
(local core (autoload :conjure.nfnl.core))
(local str (autoload :conjure.nfnl.string))

(local M (define :conjure.config))

(fn ks->var [ks]
  (.. "conjure#" (str.join "#" ks)))

(fn M.get-in [ks]
  (let [key (ks->var ks)
        v (or (core.get vim.b key) (core.get vim.g key))]
    (if (and (core.table? v)
             (core.get v vim.type_idx)
             (core.get v vim.val_idx))
      (core.get v vim.val_idx)
      v)))

(fn M.filetypes []
  (M.get-in [:filetypes]))

(fn M.get-in-fn [prefix-ks]
  (fn [ks]
    (M.get-in (core.concat prefix-ks ks))))

(fn M.assoc-in [ks v]
  (core.assoc vim.g (ks->var ks) v)
  v)

(fn M.merge [tbl opts ks]
  "Merge a table into the config recursively. Won't overwrite any existing
  value by default, set opts.overwrite? to true if this is desired."
  (let [ks (or ks [])
        opts (or opts {})]
    (core.run!
      (fn [[k v]]
        (let [ks (core.concat ks [k])
              current (M.get-in ks)]

          ;; Is it an associative table?
          (if (and (core.table? v) (not (core.get v 1)))
            ;; Recur if so.
            (M.merge v opts ks)

            ;; Otherwise we're at a value and we can assoc it.
            (when (or (core.nil? current) opts.overwrite?)
              (M.assoc-in ks v)))))
      (core.kv-pairs tbl))
    nil))

(M.merge
  {:debug false
   :relative_file_root nil
   :path_subs nil
   :client_on_load true

   :filetypes [:clojure :elixir :fennel :janet :javascript :hy :julia :racket :scheme
               :lua :lisp :python :ruby :rust :sql :typescript :php :r]
   :filetype {:clojure :conjure.client.clojure.nrepl
              :elixir :conjure.client.elixir.stdio
              :fennel :conjure.client.fennel.nfnl
              :janet :conjure.client.janet.netrepl
              :hy :conjure.client.hy.stdio
              :julia :conjure.client.julia.stdio
              :javascript :conjure.client.javascript.stdio
              :racket :conjure.client.racket.stdio
              :scheme :conjure.client.scheme.stdio
              :lua :conjure.client.lua.neovim
              :lisp :conjure.client.common-lisp.swank
              :python :conjure.client.python.stdio
              :r :conjure.client.r.stdio
              :ruby :conjure.client.ruby.stdio
              :rust :conjure.client.rust.evcxr
              :sql :conjure.client.sql.stdio
              :typescript :conjure.client.javascript.stdio
              :php :conjure.client.php.psysh}
   :filetype_suffixes {:racket [:rkt]
                       :scheme [:scm :ss]}

   :eval
   {:result_register "c"
    :inline_results true
    :inline {:highlight :comment
             :prefix "=> "}
    :comment_prefix nil
    :gsubs {}}

   :mapping
   {:prefix "<localleader>"
    :enable_ft_mappings true
    :enable_defaults true}

   :completion
   {:omnifunc :ConjureOmnifunc
    :fallback :syntaxcomplete#Complete}

   :highlight
   {:enabled false
    :group "IncSearch"
    :timeout 500}

   :log
   {:wrap false
    :diagnostics false
    :treesitter true
    :auto_flush_interval_ms 100
    :split {:width nil
            :height nil}
    :hud {:width 0.42
          :height 0.3
          :zindex 1
          :enabled true
          :passive_close_delay 0
          :minimum_lifetime_ms 250
          :overlap_padding 0.1
          :border :single
          :anchor :NE
          :ignore_low_priority false
          :open_when :last-log-line-not-visible}
    :botright false
    :jump_to_latest {:enabled false
                     :cursor_scroll_position "top"}
    :break_length 80
    :trim {:at 10000
           :to 6000}
    :strip_ansi_escape_sequences_line_limit 1000
    :fold {:enabled false
           :lines 10
           :marker {:start "~~~%{"
                    :end "}%~~~"}}}

   :extract
   {:context_header_lines -1
    :form_pairs [["(" ")"]
                 ["{" "}"]
                 ["[" "]" true]]
    :tree_sitter {:enabled true}}

   :preview
   {:sample_limit 0.3}})

(when (M.get-in [:mapping :enable_defaults])
  (M.merge
    {:mapping
     {:log_split "ls"
      :log_vsplit "lv"
      :log_tab "lt"
      :log_buf "le"
      :log_toggle "lg"
      :log_close_visible "lq"
      :log_reset_soft "lr"
      :log_reset_hard "lR"
      :log_jump_to_latest "ll"

      :eval_current_form "ee"
      :eval_comment_current_form "ece"

      :eval_root_form "er"
      :eval_comment_root_form "ecr"

      :eval_word "ew"
      :eval_comment_word "ecw"

      :eval_replace_form "e!"
      :eval_marked_form "em"
      :eval_file "ef"
      :eval_buf "eb"
      :eval_visual "E"
      :eval_motion "E"
      :eval_previous "ep"
      :def_word "gd"
      :doc_word ["K"]}}))

M