dotfiles

Alpine Linux dotfiles

git clone git://git.lin.moe/dotfiles.git

  1;;; package --- 编程语言配置
  2;;; Commentary:
  3
  4;;; Code:
  5;; Python
  6(use-package python
  7  :if (executable-find "python")
  8  :mode ("SCon\(struct\|script\)$" . python-mode)
  9  :config
 10  (setq lsp-diagnostic-package :none
 11        python-indent-offset 4)
 12  :hook
 13  (flycheck-add-next-checker 'python-flake8 'lsp)
 14  :interpreter ("python[0-9.]*" . python-mode))
 15
 16(use-package py-autopep8
 17  :config
 18  (setq py-autopep8-options '("--max-line-length=130" "--aggressive"))
 19  :hook ((python-mode) . py-autopep8-mode))
 20
 21;; Golang
 22(use-package go-mode
 23  :if (executable-find "go")
 24  :mode (("\\.go\\'" . go-mode))
 25  :config
 26  (setq gofmt-command "goimports"
 27        godoc-command "go doc -all"))
 28
 29(use-package ob-go)
 30
 31;; C
 32(use-package cc-mode
 33  :hook ((c-mode . (lambda () (indent-tabs-mode 1)))
 34         (c++-mode . (lambda () (indent-tabs-mode 1))))
 35  :config
 36  ;; fix completion for c-mode
 37  (when (equal tab-always-indent 'complete)
 38    (define-key c-mode-base-map [remap c-indent-line-or-region] #'completion-at-point))
 39  :bind
 40  (:map c++-mode-map
 41        ("TAB" . indent-for-tab-command))
 42  (:map c-mode-map
 43        ("TAB" . indent-for-tab-command)))
 44
 45(use-package meson-mode)
 46
 47;;  Zig
 48(use-package zig-mode
 49  :if (executable-find "zig")
 50  :mode (("\\.zig\\'" . zig-mode))
 51  :config
 52  (setq zig-format-on-save nil)
 53  :hook ((zig-mode . (lambda () (indent-tabs-mode -1)))))
 54
 55(use-package vue-mode
 56  :mode (("\\.vue\\'" . vue-mode))
 57  :hook ((vue-mode . (lambda () (indent-tabs-mode -1)))))
 58
 59(use-package sh-script
 60  :mode(("\\.sh\\'" . sh-mode)
 61        ("APKBUILD" . sh-mode))
 62  :config (setq sh-basic-offset 8)
 63
 64  :hook ((sh-mode . 'indent-tabs-mode))
 65         (after-save . (lambda () (executable-make-buffer-file-executable-if-script-p))))
 66
 67(use-package geiser-mit)
 68(use-package geiser-guile
 69  :config
 70  (setq geiser-default-implementation 'guile))
 71
 72(use-package emacs
 73  :config
 74  (setq which-func-modes '(prog-mode))
 75  :hook ((prog-mode . (lambda () (which-function-mode 1)))
 76         (prog-mode . (lambda () (hs-minor-mode 1)))))
 77(use-package hideshow
 78  :config
 79  (defun hs-cycle (&optional level)
 80  (interactive "p")
 81  (let (message-log-max
 82        (inhibit-message t))
 83    (if (= level 1)
 84        (pcase last-command
 85          ('hs-cycle
 86           (hs-hide-level 1)
 87           (setq this-command 'hs-cycle-children))
 88          ('hs-cycle-children
 89           ;; TODO: Fix this case. `hs-show-block' needs to be
 90           ;; called twice to open all folds of the parent
 91           ;; block.
 92           (save-excursion (hs-show-block))
 93           (hs-show-block)
 94           (setq this-command 'hs-cycle-subtree))
 95          ('hs-cycle-subtree
 96           (hs-hide-block))
 97          (_
 98           (if (not (hs-already-hidden-p))
 99               (hs-hide-block)
100             (hs-hide-level 1)
101             (setq this-command 'hs-cycle-children))))
102      (hs-hide-level level)
103      (setq this-command 'hs-hide-level))))
104  (defun hs-global-cycle ()
105    (interactive)
106    (pcase last-command
107      ('hs-global-cycle
108       (save-excursion (hs-show-all))
109       (setq this-command 'hs-global-show))
110      (_ (hs-hide-all))))
111  :bind
112  (:map hs-minor-mode-map
113   ("C-<tab>" . hs-cycle)
114   ("<backtab>" . hs-global-cycle)))
115
116(use-package compile
117  :config
118  (require 'ansi-color)
119  :hook ((compilation-filter . ansi-color-compilation-filter)))
120
121(use-package compile-multi
122  :config
123  (setq compile-multi-config '(((file-exists-p "Makefile")
124                                ("make:build" . "make build")
125                                ("make:test" . "make test")
126                                ("make:all" . "make all"))
127                               ((file-exists-p "meson.build")
128                                ("meson:test" . "meson test -C build --print-errorlogs")
129                                ("meson:compile" . "meson compile -C build")
130                                ("meson:setup" . "meson setup build"))
131                               ((file-exists-p "APKBUILD")
132                                ("apk:all" . "abuild -r")
133                                ("apk:build-depends" . "abuild deps")
134                                ("apk:prepare-source" . "abuild clean && abuild fetch && abuild unpack && abuild prepare")
135                                ("apk:build" . "abuild build")
136                                ("apk:check" . "abuild check")
137                                ("apk:clean" . "abuild clean"))))
138  :bind
139  ("C-c C-e" . compile-multi))
140
141(provide 'init-programing)
142;;; init-programing.el ends here