--- /dev/null
+;; -*- lexical-binding: t; -*-
+(setq native-comp-jit-compilation nil) ;; is enabled again in external_packages.el
+
+(tool-bar-mode -1)
+(menu-bar-mode)
+(scroll-bar-mode -1)
+(fringe-mode -1)
+(desktop-save-mode 1)
+(electric-pair-mode 1)
+(desktop-file-name ".emacs.desktop" "~/.emacs.d/")
+(setq dired-listing-switches "-alh")
+(setq inhibit-startup-screen t)
+(setq display-line-numbers-type 'relative)
+(global-display-line-numbers-mode t)
+(setq create-lockfiles nil)
+(setq make-backup-files nil)
+(setq backup-directory-alist '(("" . "~/.emacs.d/backups")))
+(setq custom-file "~/.emacs.custom")
+(load-file "~/.emacs.custom")
+(add-to-list 'default-frame-alist '(font . "Iosevka-20"))
+(set-face-attribute 'default nil :font "Iosevka-20")
+;; PACKAGES
+(load "~/emacs/external_packages.el")
+;; OTHER FILES
+(load "~/emacs/kts_letter")
+(load "~/emacs/random_utils")
+(load "~/emacs/_bindings")
+(load "~/emacs/lsp")
+(load "~/emacs/native_comp")
+
+(put 'dired-find-alternate-file 'disabled nil) ; a key in dired
+
+
+;; BUILD GUIDE FOR FUTURE GENERATIONS
+;; download autoconfigure shits dependency and run that then run the cofigure
+;; configure flags: --with-ns --with-native-compilation --with-tree-sitter --with-json --with-gnutls
+;; Emacs native compilation depends on libgccjit which is not exposed by default to .app's by default. which requires you to expose the path of the libgccjit to emacs. I have downloaded libgccjit with brew and binaries is in the homebrew/bin.
+;; Interestingly emacs does not require gcc (which is not accesibly to emacs by default) itself. Only exposing the libgccjit is seems to be enough
+;; DEPENDENCIES: gcc and libgccjit (for native compilation), gdu (for dired-du),
--- /dev/null
+;; search and replace -*- lexical-binding: t; -*-
+(global-set-key (kbd "C-c C-s") #'query-replace-regexp)
+(global-set-key (kbd "C-C C-n") #'eval-buffer)
+(global-set-key (kbd "C-c k") #'desktop-clear)
+(global-set-key (kbd "C-x C-b") #'ibuffer)
+(global-set-key (kbd "C-x b") #'consult-buffer)
+(global-set-key (kbd "C-c C-w") #'kill-ring-save)
+(global-set-key (kbd "C-c C-y") #'yank-pop)
+(global-set-key (kbd "C-=") #'eval-expression)
+
+
+(defun duplicate-line ()
+ "Duplicate Line"
+ (interactive)
+ (let ((col (current-column)))
+ (save-excursion
+ (move-beginning-of-line 1)
+ (kill-line)
+ (yank)
+ (open-line 1)
+ (forward-line 1)
+ (yank))
+ (move-to-column col)))
+
+(global-set-key (kbd "C-,") 'duplicate-line)
--- /dev/null
+;; -*- lexical-binding: t; -*-
+(require 'package)
+(setq package-archives
+ '(("melpa" . "https://melpa.org/packages/")
+ ("gnu" . "https://elpa.gnu.org/packages/")))
+(package-initialize)
+(unless (package-installed-p 'use-package)
+ (package-refresh-contents)
+ (package-install 'use-package))
+(require 'use-package)
+(setq use-package-always-ensure t)
+
+
+;; MAC ENV VARIABLE FIX
+(use-package exec-path-from-shell
+ :ensure t
+ :if (memq window-system '(mac ns x))
+ :config
+ (exec-path-from-shell-initialize)
+ (setq native-comp-jit-compilation t))
+
+(use-package gruber-darker-theme)
+(load-theme 'gruber-darker)
+
+(use-package snow
+ :defer t)
+(use-package fireplace
+ :defer t)
+(use-package rust-mode
+ :defer t)
+(use-package go-mode
+ :defer t)
+(add-hook 'go-mode-hook
+ (lambda ()
+ (setq tab-width 4) ;; Tab karakterinin genişliği
+ (setq indent-tabs-mode t) ;; Tab kullan
+ ))
+(use-package avy
+ :ensure t
+ :config
+ (global-set-key (kbd "C-'") 'avy-goto-char))
+
+(use-package magit
+ :ensure t
+ :defer t)
+
+(use-package dired-du
+ :defer t
+ :config
+ (when (eq system-type 'darwin)
+ (setq dired-du-used-space-program '("gdu" "-sb"))
+ )
+ (setq dired-du-size-format t)
+ )
+
+(use-package vertico
+ :ensure t
+ :config
+ (vertico-mode)
+ )
+
+(use-package marginalia
+ :ensure t
+ :config
+ (marginalia-mode))
+
+(use-package consult
+ :defer t
+ :ensure t)
+
+(use-package multiple-cursors
+ :defer t
+ :ensure t
+ :bind (("C-S-c C-S-c" . mc/edit-lines)
+ ("C->" . mc/mark-next-like-this)
+ ("C-<" . mc/mark-previous-like-this)
+ ("C-c C-<" . mc/mark-all-like-this)))
+
+(add-hook 'c++-mode-hook
+ (lambda ()
+ (setq indent-tabs-mode nil)
+ (setq c-basic-offset 4)
+ (setq tab-width 4)))
+
+;; alterantive "PATH" environment variable in case of an problem
+;; (add-to-list 'exec-path "/opt/homebrew/bin")
+;; (setenv "PATH" (concat "/opt/homebrew/bin:" (getenv "PATH")))
+
+;; (let ((my-lib-path "/opt/homebrew/lib/gcc/15/libgccjit.dylib"))
+;; (if (and (file-exists-p my-lib-path) (executable-find "gcc-15"))
+;; (setq native-comp-jit-compilation t)
+;; (setq native-comp-jit-compilation nil)))
--- /dev/null
+;; -*- lexical-binding: t; -*-
+(setq kelimeler '("İstese " "aşkına " "köle " "olurum\n" "Tek " "sözüne " "kendimi " "avuturum\n" "Ama " "yok, " "inatla " "dönüyoruz " "en " "başına\n\n" "Hiç " "elimde " "yok " "hiç " "elimde " "yok " "bi " "çare\n" "Kaçamam " "olmuyo, " "bu " "kalp " "yerinde " "durmuyo\n" "Sardın " "mı " "en " "başa? " "Düşmem " "o " "tuzağa\n" "İstiyorum " "ol " "Bonnie " "and " "Clyde, " "kaçalım " "burdan\n\n" "Aşkın " "yaktı " "beni " "ya\n" "Söndürsene " "o " "zaman\n" "Düştüm " "yoluna " "bul " "beni " "şimdi " "orda\n" "Sorma " "ne " "hâldeyim, " "biter " "mi? " "Korkma\n" "İşte " "burda " "kalbimin " "tek " "sahibi."))
+
+(setq kts-full-text (apply 'concat kelimeler))
+(setq kts-index 0)
+
+(defun kts-space-insert ()
+ (interactive)
+ (if (>= kts-index (length kts-full-text))
+ (progn
+ (setq kts-index 0)
+ (kts-mode -1))
+ (insert (substring kts-full-text kts-index (1+ kts-index)))
+ (setq kts-index (1+ kts-index))))
+
+(defun kts-index-reset ()
+ (interactive)
+ (setq kts-index 0))
+
+(defvar kts-mode-map
+ (let ((map (make-sparse-keymap)))
+ (dotimes (i 26)
+ (define-key map (kbd (char-to-string (+ ?a i))) 'kts-space-insert)
+ (define-key map (kbd (char-to-string (+ ?A i))) 'kts-space-insert))
+ (dotimes (i 10)
+ (define-key map (kbd (char-to-string (+ ?0 i))) 'kts-space-insert))
+ (define-key map (kbd "SPC") 'kts-space-insert)
+ (define-key map (kbd ".") 'kts-space-insert)
+ (define-key map (kbd ",") 'kts-space-insert)
+ (define-key map (kbd ";") 'kts-space-insert)
+ (define-key map (kbd "[") 'kts-space-insert)
+ (define-key map (kbd "]") 'kts-space-insert)
+ (define-key map (kbd "\\") 'kts-space-insert)
+ (define-key map (kbd "=") 'kts-space-insert)
+ (define-key map (kbd "-") 'kts-space-insert)
+ map)
+ "Keymap for kts-mode")
+
+(define-minor-mode kts-mode
+ "Output the lyrics of the favorite song of Hilmi Yavuzhan"
+ :lighter " KTS"
+ :keymap kts-mode-map)
+
--- /dev/null
+;; -*- lexical-binding: t; -*-
+(setq kelimeler '("istese" "aşkına" "köle" "olurum" "tek" "sözüne" "kendimi" "avuturum" "ama" "yok" "inatla" "dönüyoruz" "en" "başına" "hiç" "elimde" "yok" "hiç" "elimde" "yok" "bi" "çare" "kaçamam" "olmuyo" "bu" "kalp" "yerinde" "durmuyo" "sardın" "mı" "en" "başa" "düşmem" "o" "tuzağa" "istiyorum" "ol" "bonnie" "me" "clyde" "kaçalım" "burdan" "aşkın" "yaktı" "beni" "ya" "söndürsene" "o" "zaman" "düştüm" "yoluna" "bul" "beni" "şimdi" "orda" "sorma" "ne" "hâldeyim" "biter" "mi" "korkma" "işte" "burda" "kalbimin" "tek" "sahibi"))
+
+(setq kts-index 0)
+(defun kts-space-insert ()
+ (interactive)
+ (when (>= kts-index (length kelimeler))
+ (setq kts-index 0))
+ (insert (nth kts-index kelimeler))
+ (insert " ")
+ (setq kts-index (+ kts-index 1))
+ )
+
+(defun kts-index-reset ()
+ (interactive)
+ (setq kts-index 0))
+
+;(defvar loremipsum-map
+; (let ((map (make-sparse-keymap)))
+; (define-key map (kbd "SPC") 'kts-space-insert)
+; map)
+; "Keymap for my-special-mode")
+
+(defvar kts-mode-map
+ (let ((map (make-sparse-keymap)))
+ ;; Sadece harf, rakam ve bazı karakterler
+ (dotimes (i 26)
+ (define-key map (kbd (char-to-string (+ ?a i))) 'kts-space-insert)
+ (define-key map (kbd (char-to-string (+ ?A i))) 'kts-space-insert))
+ (dotimes (i 10)
+ (define-key map (kbd (char-to-string (+ ?0 i))) 'kts-space-insert))
+ (define-key map (kbd "SPC") 'kts-space-insert)
+ (define-key map (kbd ".") 'kts-space-insert)
+ (define-key map (kbd ",") 'kts-space-insert)
+ (define-key map (kbd ";") 'kts-space-insert)
+ (define-key map (kbd "[") 'kts-space-insert)
+ (define-key map (kbd "]") 'kts-space-insert)
+ (define-key map (kbd "\\") 'kts-space-insert)
+ (define-key map (kbd "=") 'kts-space-insert)
+ (define-key map (kbd "-") 'kts-space-insert)
+ map)
+ "Keymap for kts-mode")
+
+
+(define-minor-mode kts-mode
+ "Space tuşuna özel fonksiyon çalıştıran mode."
+ :lighter " MyMode"
+ :keymap kts-mode-map
+ )
--- /dev/null
+;; -*- lexical-binding: t; -*-
+(setq lsp-completion-provider :capf)
+(use-package lsp-mode
+ :defer t
+ :ensure t
+ :config
+ (setq lsp-enable-on-type-formatting nil)
+ (setq lsp-auto-start nil)
+ (setq lsp-headerline-breadcrumb-enable nil)
+ (setq lsp-signature-auto-activate nil)
+ )
+(use-package lsp-treemacs
+ :defer t
+ :ensure t)
+
+;; (use-package corfu
+;; :custom
+;; (corfu-cycle t)
+;; (corfu-auto t)
+;; (corfu-quit-no-match 'separator)
+;; (corfu-preselect 'prompt)
+;; :bind
+;; (:map corfu-map
+;; ("TAB" . corfu-next)
+;; ("S-TAB" . corfu-previous)))
+
+(use-package company
+ :ensure t
+ :defer t
+ :custom
+ (company-minimum-prefix-length 1)
+ (company-idle-delay 0.0)
+ :init
+ (global-company-mode)
+ :config
+ (setq company-tooltip-align-annotations t))
+
+;;(use-package dap-mode
+;; :after lsp-mode
+;; :config
+;; (dap-ui-controls-mode -1)
+;; (dap-tooltip-mode -1)
+;; (dap-auto-configure-mode)
+;; (require 'dap-gdb))
+
+;;(add-hook 'c-mode-hook 'lsp)
+;;(add-hook 'rust-mode-hook 'lsp)
+;;(with-eval-after-load 'lsp-mode
+;; (add-hook 'lsp-mode-hook #'lsp-enable-which-key-integration))
--- /dev/null
+;; -*- lexical-binding: t; -*-
+(setq native-comp-async-jobs-number 0) ;; half of the core
+(add-to-list 'load-path "~/Documents/Programming/ELisp/")
+(setq native-comp-async-report-warnings-errors 'silent)
--- /dev/null
+(defun dired-view-file-read-only ()
+ "View file in dired-mode with V"
+ (interactive)
+ (let ((find-file-run-dired t))
+ (view-file (dired-get-file-for-visit))))
+(with-eval-after-load 'dired
+ (define-key dired-mode-map (kbd "V") #'dired-view-file-read-only))
--- /dev/null
+(defun rdocs (topic)
+ "Searches the word in local rust docs (rustup docs)"
+ (interactive "sRustup doc (default std): ")
+ (let ((final-topic (if (string-empty-p topic) "--std" topic)))
+ (message "Loading: %s" final-topic)
+ (shell-command (concat "rustup doc " final-topic))))
--- /dev/null
+(defun ssh ()
+ "Connect to the server with TRAMP"
+ (interactive)
+ (let ((host (read-string "SSH to (user@host or name): ")))
+ (if (string-empty-p host)
+ (message "No host provided")
+ (find-file (concat "/ssh:" host ":/home")))))
+
+
+(defun ssh-close ()
+ "Close all SSH connections"
+ (interactive)
+ (tramp-cleanup-all-connections)
+ (message "TRAMP/SSH buffers are cleaned up."))
--- /dev/null
+;; -*- lexical-binding: t; no-byte-compile: t -*-
+(defun es ()
+ "Opens Eshell on another window"
+ (interactive)
+ (let ((w (selected-window)))
+ (let ((w2 (split-window w 20)))
+ (select-window w2)
+ (eshell)
+ )))
+
+(defun dired-view-file-read-only ()
+ "View file in dired-mode with V"
+ (interactive)
+ (let ((find-file-run-dired t))
+ (view-file (dired-get-file-for-visit))))
+(with-eval-after-load 'dired
+ (define-key dired-mode-map (kbd "V") #'dired-view-file-read-only))
+
+(defun rdocs (topic)
+ "Searches the word in local rust docs (rustup docs)"
+ (interactive "sRustup doc (default std): ")
+ (let ((final-topic (if (string-empty-p topic) "--std" topic)))
+ (message "Loading: %s" final-topic)
+ (shell-command (concat "rustup doc " final-topic))))
+
+(defun ssh ()
+ "Connect to the server with TRAMP"
+ (interactive)
+ (let ((host (read-string "SSH to (user@host or name): ")))
+ (if (string-empty-p host)
+ (message "No host provided")
+ (find-file (concat "/ssh:" host ":/home")))))
+
+
+(defun ssh-close ()
+ "Close all SSH connections"
+ (interactive)
+ (tramp-cleanup-all-connections)
+ (message "TRAMP/SSH buffers are cleaned up."))
+
+(defun lsp-kill ()
+ "Disconnects from LSP server and closes Flymake"
+ (interactive)
+ (lsp-disconnect)
+ (flymake-mode -1))
--- /dev/null
+return {
+ "ThePrimeagen/harpoon",
+ dependencies = { "nvim-lua/plenary.nvim" },
+ config = function()
+ local harpoon_mark = require("harpoon.mark")
+ local harpoon_ui = require("harpoon.ui")
+ local harpoon_term = require("harpoon.term")
+
+ require("harpoon").setup({
+ menu = {
+ width = vim.api.nvim_win_get_width(0) - 20,
+ },
+ })
+
+ local keymap = vim.keymap.set
+ local opts = { noremap = true, silent = true }
+
+ -- Dosya ekle
+ keymap("n", "<leader>a", harpoon_mark.add_file, opts)
+ -- Menü aç
+ keymap("n", "<leader>h", harpoon_ui.toggle_quick_menu, opts)
+
+ -- Hızlı geçiş tuşları
+ keymap("n", "<leader>1", function()
+ harpoon_ui.nav_file(1)
+ end, opts)
+ keymap("n", "<leader>2", function()
+ harpoon_ui.nav_file(2)
+ end, opts)
+ keymap("n", "<leader>3", function()
+ harpoon_ui.nav_file(3)
+ end, opts)
+ keymap("n", "<leader>4", function()
+ harpoon_ui.nav_file(4)
+ end, opts)
+ keymap("n", "<leader>ta", function()
+ harpoon_term.gotoTerminal(1) -- navigates to term 1
+ end, opts)
+
+ -- Harpoon listesi içinde ileri / geri
+ keymap("n", "<leader>j", harpoon_ui.nav_next, opts) -- sonraki
+ keymap("n", "<leader>k", harpoon_ui.nav_prev, opts) -- önceki
+ end,
+}