272 lines
6.3 KiB
EmacsLisp
Executable File
272 lines
6.3 KiB
EmacsLisp
Executable File
;;; init.el --- balsoft's config
|
|
|
|
;;; Commentary:
|
|
|
|
;;; None
|
|
|
|
;; -*- lexical-binding: t -*-
|
|
|
|
;;; Code:
|
|
|
|
(require 'package)
|
|
|
|
(package-initialize)
|
|
|
|
(eval-when-compile
|
|
(require 'use-package))
|
|
(setq use-package-always-ensure nil)
|
|
|
|
(setq-default tab-width 2)
|
|
|
|
(mode-line-bell-mode)
|
|
|
|
(line-number-mode)
|
|
(column-number-mode)
|
|
|
|
(setq-default indent-tabs-mode nil)
|
|
|
|
(setq-default tab-always-indent 't)
|
|
|
|
(setq-default compilation-scroll-output 'first-error)
|
|
|
|
(use-package ws-butler
|
|
:config
|
|
(ws-butler-global-mode)
|
|
)
|
|
|
|
(global-auto-revert-mode)
|
|
|
|
(setq auto-save-interval 5)
|
|
|
|
(auto-save-visited-mode)
|
|
|
|
(setq make-backup-files nil)
|
|
|
|
;; (use-package xah-fly-keys
|
|
;; :config
|
|
;; (xah-fly-keys-set-layout "qwerty")
|
|
;; (xah-fly-keys 1)
|
|
;; (define-key xah-fly-insert-map (kbd "M-SPC") 'xah-fly-command-mode-activate)
|
|
;; )
|
|
|
|
(use-package evil
|
|
:config
|
|
(evil-mode 1))
|
|
|
|
(global-set-key (kbd "C-b") 'switch-to-buffer)
|
|
|
|
(global-display-line-numbers-mode)
|
|
|
|
(electric-pair-mode)
|
|
|
|
(electric-indent-mode)
|
|
|
|
(use-package flycheck
|
|
:config
|
|
(global-flycheck-mode))
|
|
|
|
(menu-bar-mode -1)
|
|
(scroll-bar-mode -1)
|
|
(tool-bar-mode -1)
|
|
(cua-selection-mode 1)
|
|
|
|
|
|
(setq auto-revert-check-vc-info t)
|
|
|
|
(vc-mode-line t)
|
|
|
|
(when (not window-system)
|
|
(xterm-mouse-mode 1))
|
|
|
|
(use-package fira-code-mode
|
|
:custom (fira-code-mode-disabled-ligatures '("[]" "#{" "#(" "#_" "#_(" "x")) ;; List of ligatures to turn off
|
|
:config (global-fira-code-mode))
|
|
|
|
(use-package company-ghci
|
|
:config
|
|
(push 'company-ghci company-backends))
|
|
|
|
(global-set-key [home] 'smart-beginning-of-line)
|
|
|
|
(global-unset-key [menu-bar options cua-mode])
|
|
(global-unset-key (kbd "C-x C-f"))
|
|
(global-set-key (kbd "C-x C-f") 'find-file-other-frame)
|
|
(global-unset-key (kbd "C-x b")) ;; Old habits die hard
|
|
|
|
(fringe-mode '(0 . 0))
|
|
|
|
;; scroll one line at a time (less "jumpy" than defaults)
|
|
|
|
(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time
|
|
|
|
(setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling
|
|
|
|
(setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse
|
|
|
|
(setq scroll-step 1) ;; keyboard scroll one line at a time
|
|
|
|
(use-package frames-only-mode)
|
|
;; Make new frames instead of new windows
|
|
(setq pop-up-frames 'graphic-only)
|
|
(setq gdb-use-separate-io-buffer nil)
|
|
(setq gdb-many-windows nil)
|
|
|
|
;; -------------------
|
|
;; Projectile
|
|
;; -------------------
|
|
;; No deferred loading as bind-keymap
|
|
;; doesn't handle wakib C-d keymaps
|
|
(use-package projectile
|
|
:config
|
|
(define-key projectile-mode-map (kbd "C-c p") nil)
|
|
(define-key projectile-mode-map (kbd "C-x p") 'projectile-command-map)
|
|
(projectile-mode 1)
|
|
(global-unset-key [menu-bar tools Projectile])
|
|
(projectile-register-project-type 'flake '("flake.nix")
|
|
:compile "nix build"
|
|
:run "nix run")
|
|
(setq projectile-project-search-path '("~/projects/"))
|
|
|
|
(global-set-key (kbd "<f9>") 'projectile-compile-project)
|
|
(global-set-key (kbd "<f5>") 'projectile-run-project))
|
|
|
|
(use-package nix-mode
|
|
:hook
|
|
((nix-mode . (lambda () (local-set-key (kbd "<f7>") 'nix-format-buffer))))
|
|
((nix-mode . (lambda () (setq indent-line-function 'nix-indent-line)))))
|
|
|
|
(use-package company
|
|
:config
|
|
(global-company-mode 1)
|
|
;; Number the candidates (use M-1, M-2 etc to select completions).
|
|
(setq company-show-numbers t)
|
|
(setq company-idle-delay 0)
|
|
)
|
|
|
|
(use-package company-box
|
|
:hook (company-mode . company-box-mode))
|
|
|
|
|
|
;; -------------------
|
|
;; Ivy
|
|
;; -------------------
|
|
(use-package ivy
|
|
:config
|
|
(ivy-mode 1)
|
|
(setq ivy-use-virtual-buffers t)
|
|
(define-key ivy-minibuffer-map [remap keyboard-quit] 'minibuffer-keyboard-quit)
|
|
(setq ivy-count-format "")
|
|
(setq ivy-initial-inputs-alist nil))
|
|
|
|
(use-package counsel
|
|
:config
|
|
counsel-mode)
|
|
|
|
(use-package smex)
|
|
|
|
(show-paren-mode 1)
|
|
;; TODO - MOVE Electric Pair Mode to user local
|
|
|
|
|
|
;; MAJOR MODES
|
|
|
|
(use-package markdown-mode
|
|
:mode "\\.\\(m\\(ark\\)?down\\|md\\)$")
|
|
|
|
|
|
;; Setup Splash Screen
|
|
;; (setq inhibit-startup-screen t)
|
|
;; (setq-default major-mode 'fundamental-mode)
|
|
;; (setq-default initial-scratch-message "")
|
|
|
|
(setq custom-file (expand-file-name "custom" user-emacs-directory))
|
|
(load custom-file t t)
|
|
|
|
(auto-fill-mode)
|
|
|
|
|
|
(add-to-list 'default-frame-alist '(font . "@font@"))
|
|
(set-face-attribute 'default nil :font "@font@")
|
|
|
|
(setq inhibit-startup-screen t)
|
|
|
|
(use-package lsp-mode
|
|
:config
|
|
)
|
|
|
|
|
|
(use-package envrc
|
|
:config
|
|
(envrc-global-mode)
|
|
(advice-add 'lsp :before (lambda (&optional n) (envrc--update))))
|
|
|
|
(setq treemacs-position 'right)
|
|
|
|
(use-package treemacs)
|
|
|
|
(use-package lsp-treemacs)
|
|
|
|
(use-package treemacs-projectile)
|
|
|
|
(setq initial-major-mode 'text-mode)
|
|
|
|
(defun compile-on-save-start ()
|
|
(let ((buffer (compilation-find-buffer)))
|
|
(unless (get-buffer-process buffer)
|
|
(recompile))))
|
|
|
|
(define-minor-mode compile-on-save-mode
|
|
"Minor mode to automatically call `recompile' whenever the
|
|
current buffer is saved. When there is ongoing compilation,
|
|
nothing happens."
|
|
:lighter " CoS"
|
|
(if compile-on-save-mode
|
|
(progn (make-local-variable 'after-save-hook)
|
|
(add-hook 'after-save-hook 'compile-on-save-start nil t))
|
|
(kill-local-variable 'after-save-hook)))
|
|
|
|
(defun maybe-delete-frame-buffer (frame)
|
|
"When a dedicated FRAME is deleted, also kill its buffer.
|
|
A dedicated frame contains a single window whose buffer is not
|
|
displayed anywhere else."
|
|
(let ((windows (window-list frame)))
|
|
(when (eq 1 (length windows))
|
|
(let ((buffer (window-buffer (car windows))))
|
|
(when (eq 1 (length (get-buffer-window-list buffer nil t)))
|
|
(kill-buffer buffer))))))
|
|
|
|
(add-to-list 'delete-frame-functions #'maybe-delete-frame-buffer)
|
|
|
|
(require 'base16-theme)
|
|
|
|
(defvar base16-generated-colors
|
|
'(:base00 "@base00@"
|
|
:base01 "@base01@"
|
|
:base02 "@base02@"
|
|
:base03 "@base03@"
|
|
:base04 "@base04@"
|
|
:base05 "@base05@"
|
|
:base06 "@base06@"
|
|
:base07 "@base07@"
|
|
:base08 "@base08@"
|
|
:base09 "@base09@"
|
|
:base0A "@base0A@"
|
|
:base0B "@base0B@"
|
|
:base0C "@base0C@"
|
|
:base0D "@base0D@"
|
|
:base0E "@base0E@"
|
|
:base0F "@base0F@")
|
|
"All colors for Base16 are defined here.")
|
|
|
|
;; Define the theme
|
|
(deftheme base16-generated)
|
|
|
|
;; Add all the faces to the theme
|
|
(base16-theme-define 'base16-generated base16-generated-colors)
|
|
|
|
;; Mark the theme as provided
|
|
(provide-theme 'base16-generated)
|
|
|
|
(enable-theme 'base16-generated)
|
|
;;; init.el ends here
|