;; coasteen's Emacs full init.el :3

;; ---------------------------
;; PACKAGE & USE-PACKAGE SETUP
;; ---------------------------
(require 'package)
(setq package-archives
      '(("melpa" . "https://melpa.org/packages/")
        ("gnu"   . "https://elpa.gnu.org/packages/")))
(package-initialize)
(unless package-archive-contents
  (package-refresh-contents))

(unless (package-installed-p 'use-package)
  (package-install 'use-package))
(require 'use-package)
(setq use-package-always-ensure t)
(setq native-comp-async-report-warnings-errors 'silent)

;; ---------------------------
;; APPEARANCE & THEMES
;; ---------------------------
(set-frame-parameter (selected-frame) 'alpha '(95 . 95))
(add-to-list 'default-frame-alist '(alpha . (95 . 95)))

;;(use-package doom-themes
;;  :config)

(set-frame-parameter (selected-frame) 'alpha '(90 . 90))
(add-to-list 'default-frame-alist '(alpha . (90 . 90)))

;;(use-package zenburn-theme
;;  :ensure t
;;  :config
;;  (load-theme 'zenburn t))

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

(use-package rainbow-mode
  :hook (prog-mode . rainbow-mode))

(global-display-line-numbers-mode t)
(setq display-line-numbers 'relative)
(setq ring-bell-function 'ignore)

;; ---------------------------
;; UI & INTERFACE
;; ---------------------------
(setq inhibit-startup-message t
      inhibit-startup-echo-area-message t)

(use-package all-the-icons
  :if (display-graphic-p))

(use-package doom-modeline
  :init (doom-modeline-mode 1)
  :config
  (setq doom-modeline-height 15
        doom-modeline-bar-width 3
        doom-modeline-enable-word-count t))

(use-package elcord
  :config (elcord-mode))

(use-package minimap)

(use-package neotree
  :bind ([f9] . neotree-toggle))

(use-package vertico
  :init (vertico-mode))

(use-package marginalia
  :after vertico
  :hook (vertico-mode . marginalia-mode))

(use-package consult
  :bind (("C-s" . consult-line)
         ("C-x b" . consult-buffer)))

(use-package which-key
  :config (which-key-mode))

;; ---------------------------
;; EDITOR BEHAVIOR
;; ---------------------------
(global-set-key (kbd "C-s") 'swiper)
(global-set-key (kbd "C-r") 'swiper-backward)

(load-file "/home/coast/.emacs.d/c3-mode.el")

(use-package swiper)

(use-package company
  :hook (prog-mode . company-mode))

(use-package yasnippet
  :hook (prog-mode . yas-minor-mode))

(use-package flycheck
  :hook (prog-mode . flycheck-mode))

(use-package lsp-mode
  :commands lsp
  :init
  (setq lsp-keymap-prefix "C-c l")
  :hook ((java-mode . lsp)
         (c-mode . lsp)
         (sh-mode . lsp)))

(use-package lsp-ui
  :commands lsp-ui-mode)

(use-package vterm
  :bind (("C-c t" . ansi-term)))

;; ---------------------------
;; LANGUAGE SUPPORT
;; ---------------------------
(use-package nix-mode
  :mode "\\.nix\\'")

(use-package fennel-mode
  :mode "\\.fnl\\'")

(use-package macrostep
  :hook (fennel-mode . macrostep-mode))

(use-package zig-mode
  :ensure t
  :mode "\\.zig\\'"
  :hook ((zig-moed . lsp-deferred))) ;; if lsp is used :3

(use-package cc-mode)

(use-package lsp-java
  :after lsp
  :config
  (require 'lsp-java-boot)
  (add-hook 'java-mode-hook #'lsp))

(use-package sh-script)

;; more bs

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(custom-safe-themes
   '("0325a6b5eea7e5febae709dab35ec8648908af12cf2d2b569bedc8da0a3a81c1"
     default))
 '(package-selected-packages
   '(all-the-icons blackboard-theme centaur-tabs cherry-blossom-theme
		   company consult doom-modeline doom-themes elcord
		   evil fennel-mode flycheck gradle-mode kaolin-themes
		   lsp-java lsp-ui lua-mode macrostep marginalia
		   minimap neotree nix-mode rainbow-mode swiper
		   tree-sitter-langs vertico vterm yasnippet
		   zenburn-theme zig-mode)))

(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )
