(setq custom-file "~/.emacs.custom.el")

(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(require 'use-package)
(setq
 use-package-always-ensure t
 use-package-verbose t)

(setq auto-save-default nil)
(setq make-backup-files nil)
(setq create-lockfiles nil)

(setq display-line-numbers-type 'relative)
(global-display-line-numbers-mode t)

(setq ring-bell-function 'ignore)

(set-face-attribute 'default nil :font "IosevkaNF-18")

(tool-bar-mode -1)
(menu-bar-mode -1)
(scroll-bar-mode -1)

(setq-default dired-dwim-target t)
(windmove-default-keybindings)

(setq split-height-threshold 0)
(setq split-width-threshold nil)

(setq-default show-trailing-whitespace t)
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)

(add-hook 'c-mode-hook
          (lambda ()
            (setq c-basic-offset 2)
            (setq tab-width 2)
            (setq indent-tabs-mode nil)))

(ido-mode 1)
(ido-everywhere 1)
(use-package smex
  :init
  (smex-initialize))

(use-package kaolin-themes
  :config
  (load-theme 'kaolin-bubblegum t))

(use-package lsp-mode
  :config
  (setq lsp-headerline-breadcrumb-enable nil))
(use-package lsp-ui)

(use-package company
  :init
  (global-company-mode)
  :config
  (setq company-minimum-prefix-length 1
        company-idle-delay 0.0)
  (global-set-key (kbd "M-<tab>") 'company-complete))

(use-package evil
  :init
  (setq evil-want-C-u-scroll t)
  (setq evil-want-keybinding nil)
  (evil-mode))

(use-package evil-collection
  :after evil
  :init
  (evil-collection-init))

(with-eval-after-load 'evil-maps
  (define-key evil-motion-state-map (kbd "SPC") nil))

(with-eval-after-load 'company
  (define-key company-active-map (kbd "C-y") #'company-complete-selection))

(use-package general
  :init
  (general-evil-setup)
  (general-override-mode))

(general-create-definer my-leader-def
  :states '(normal visual motion emacs)
  :keymaps 'override
  :prefix "SPC"
  :global-prefix "M-SPC")

(my-leader-def
 "f" 'find-file
 "b" 'switch-to-buffer
 "x" 'smex
 "c" 'compile
 "j" 'dired-jump)

(define-key minibuffer-local-map [escape] 'keyboard-escape-quit)

(use-package haskell-mode)
(use-package go-mode)
