Compare commits

...

3 Commits

Author SHA1 Message Date
Taryel Hlontsi bf95ce02e7 Update init.el 2025-05-23 21:18:13 +02:00
Taryel Hlontsi cea5e1d0fb Add python snippet 2025-05-23 21:13:57 +02:00
Taryel Hlontsi 379d90d9b5 Add shell snippets 2025-05-23 21:13:41 +02:00
10 changed files with 244 additions and 51 deletions

139
init.el
View File

@ -3,6 +3,24 @@
;; restore after startup
(setq gc-cons-threshold 800000)))
(defun my/copy-buffer-file-path ()
"Copy the current buffer's file path to kill ring.
For regular files, copies the full path.
For Dired buffers, copies the directory path.
Shows a message if no path is available."
(interactive)
(let ((path (cond
(buffer-file-truename
buffer-file-truename)
(dired-directory
dired-directory)
(t nil))))
(if path
(progn
(kill-new path)
(message "Copied: %s" path))
(message "No file path available"))))
(defun my/dired-open-current-file-directory ()
"Open the current file's directory in Dired, if possible."
(interactive)
@ -33,6 +51,12 @@
('nil (sgml-skip-tag-forward 1))
(submode (forward-sexp))))
(defun my/create-new-file ()
"Create a new file with prompt for filename using :>."
(interactive)
(let ((filename (read-string "Filename: ")))
(shell-command (concat ":> " filename))
(find-file filename)))
(custom-set-variables
;; custom-set-variables was added by Custom.
@ -43,7 +67,7 @@
'("b99e334a4019a2caa71e1d6445fc346c6f074a05fcbb989800ecbe54474ae1b0" default))
'(initial-frame-alist '((fullscreen . maximized)))
'(package-selected-packages
'(json-mode orderless prettier-js magit docker-compose-mode zig-mode treesit ef-themes dockerfile-mode dap-mode julia-ts-mode lsp-julia julia-mode marginalia vertico tide which-key use-package pyenv-mode flycheck exec-path-from-shell elpy doom-themes doom-modeline all-the-icons)))
'(vue-mode verb realgud json-mode orderless prettier-js magit docker-compose-mode zig-mode treesit ef-themes dockerfile-mode dap-mode julia-ts-mode lsp-julia julia-mode marginalia vertico tide which-key use-package pyenv-mode flycheck exec-path-from-shell elpy doom-themes doom-modeline all-the-icons)))
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
@ -104,7 +128,7 @@
;; EnvyCodeR Nerd Font
;; Binchotan_Sharp
;; Ubuntu Mono
(set-face-attribute 'default nil :font "Binchotan_Sharp" :height 130)
(set-face-attribute 'default nil :font "Binchotan_Sharp" :height 140)
;;(set-fontset-font t nil (font-spec :size 20 :name "VictorMono Nerd Font Mono"))
;;(set-face-attribute 'default nil :font "VictorMono Nerd Font Mono" :height 110)
@ -149,18 +173,13 @@
:config
(setq elpy-modules (delq 'elpy-module-flymake elpy-modules)))
;; (use-package exec-path-from-shell
;; :ensure t)
;; (exec-path-from-shell-copy-env "PATH")
;; (setq elpy-rpc-virtualenv-path 'current)
;; black or standard (flake8 ?) code formatter:
;; (add-hook 'elpy-mode-hook (lambda ()
;; (add-hook 'before-save-hook
;; 'elpy-format-code nil t)))
(add-hook 'elpy-mode-hook (lambda ()
(add-hook 'before-save-hook
'elpy-black-fix-code nil t)))
(use-package exec-path-from-shell
:ensure t
:config
(when (memq window-system '(mac ns x))
(exec-path-from-shell-initialize)))
(add-hook 'python-mode-hook
(lambda () (setq gud-pdb-command-name "python3 -m pdb")))
@ -171,6 +190,36 @@
(setq yas-snippet-dirs '("~/.emacs.d/snippets"))
(yas-reload-all))
(use-package meson-mode
:ensure t)
(use-package vala-mode
:ensure t
:defer t
:mode (("\\.vala\\'" . vala-mode)
("\\.vapi\\'" . vala-mode))
:config
(add-to-list 'file-coding-system-alist '("\\.vala\\'" . utf-8))
(add-to-list 'file-coding-system-alist '("\\.vapi\\'" . utf-8)))
(use-package lsp-dart
:ensure t
:defer t
:after lsp-mode)
(use-package dart-mode
:ensure t
:defer t)
(use-package verb
:ensure t
:defer t)
(use-package org
:mode ("\\.org\\'" . org-mode)
:config (define-key org-mode-map (kbd "C-c C-r") verb-command-map))
(use-package org-superstar
:ensure t
:defer t
@ -221,9 +270,10 @@
(global-set-key (kbd "<f5>") 'revert-buffer-no-confirm)
(global-set-key (kbd "<f12>") 'kill-buffer-no-confirm)
(global-set-key (kbd "C-b") 'list-buffers-please)
(global-set-key (kbd "C-n") 'dired-create-empty-file)
(global-set-key (kbd "C-n") 'my/create-new-file)
(global-set-key (kbd "C-d") 'my/duplicate-line-or-region)
(global-set-key (kbd "C-x d") 'my/dired-open-current-file-directory)
(global-set-key (kbd "C-p") 'my/copy-buffer-file-path)
(add-hook 'elpy-mode-hook
(lambda () (local-set-key [f2] 'elpy-refactor-rename)))
@ -252,6 +302,9 @@
(add-hook 'lsp-mode-hook
(lambda () (local-set-key (kbd "C-f") 'lsp-format-buffer)))
(add-hook 'elpy-mode-hook
(lambda () (local-set-key (kbd "C-f") 'elpy-black-fix-code))) ;elpy-format-code
;; (add-hook 'prog-mode-hook
;; (lambda () (local-set-key (kbd "C-;") 'comment-or-uncomment-region)))
@ -270,26 +323,12 @@
(add-hook 'prog-mode-hook 'hs-minor-mode)
(require 'display-line-numbers)
(defcustom display-line-numbers-exempt-modes
'(gud-mode inferior-python-mode dired-mode vterm-mode eshell-mode shell-mode term-mode ansi-tern-mode treemacs-mode)
"Major modes on which to disable line numbers."
:group 'display-line-numbers
:type 'list
:version "green")
(defun display-line-numbers--turn-on ()
"Turn on line numbers except for certain modes.
Exempt major modes are defined in `display-line-numbers-exempt-modes'."
(unless (or (minibufferp)
(member major-mode display-line-numbers-exempt-modes))
(display-line-numbers-mode)))
;; (global-display-line-numbers-mode)
;; theming starts here:
(use-package doom-modeline
:ensure t
:hook (after-init . doom-modeline-mode))
;; (use-package doom-themes
;; :ensure t
;; :config
@ -307,7 +346,7 @@ Exempt major modes are defined in `display-line-numbers-exempt-modes'."
(use-package ef-themes
:ensure t)
(setq ef-themes-to-toggle '(ef-day ef-autumn))
(setq ef-themes-to-toggle '(ef-elea-light ef-elea-dark))
(setq ef-themes-headings ; read the manual's entry or the doc string
'((0 . (variable-pitch light 1.9))
@ -345,20 +384,13 @@ ef-themes-variable-pitch-ui t)
:config
(setq magit-auto-revert-mode nil))
(use-package doom-modeline
:ensure t
:hook (after-init . doom-modeline-mode))
;; M-x nerd-icons-install-fonts
(use-package nerd-icons
:ensure t)
;; prettier setup goes here
(use-package prettier-js
:ensure t)
;; __________________________________________________
(use-package orderless
:ensure t
:custom
@ -371,6 +403,20 @@ ef-themes-variable-pitch-ui t)
:defer t
:commands json-mode)
(use-package lsp-mode
:ensure t)
(use-package dap-mode
:ensure t
;;:custom (lsp-enable-dap-auto-configure nil)
:commands dap-debug)
(use-package vue-mode
:ensure t
:defer t
:mode "\\.vue\\'"
:hook (vue-mode . lsp-deferred))
;; __________________________________________________
;; typescript setup starts here
(defun setup-tide-mode ()
@ -387,20 +433,13 @@ ef-themes-variable-pitch-ui t)
:hook ((typescript-ts-mode . setup-tide-mode)
(tsx-ts-mode . setup-tide-mode)
(typescript-ts-mode . tide-hl-identifier-mode)
(before-save . tide-format-before-save)))
(before-save . tide-format-before-save))
:config
(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-ts-mode))
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-ts-mode))
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . tsx-ts-mode)))
;;----------------------------------------
;; dotnet starts here
(use-package lsp-mode
:commands (lsp lsp-deferred))
(use-package dap-mode
:ensure t
;;:custom (lsp-enable-dap-auto-configure nil)
:commands dap-debug)
(use-package dap-netcore
:after dap-mode

View File

@ -0,0 +1,5 @@
# -*- mode: python -*-
# name: first-only
# key: fo
# --
$0 = next(filter(lambda x: x.__name__ == name, values), None)

View File

@ -0,0 +1,16 @@
# -*- mode: Shell-script -*-
# name:add-section
# key:adds
# --
#############################################################
# 1 - STEP NAME
#############################################################
${3:my_func}() {
local step_name='STEP ${1:1} ${2:STEP NAME}'
warn "Press enter to proceed with $step_name"; read
info "$step_name"
$0
info "done"
}

View File

@ -0,0 +1,7 @@
# -*- mode: Shell-script -*-
# name:cat-heredoc
# key:cat
# --
cat <<EOF | tee ${1:file-name.conf}
$0
EOF

9
snippets/sh-mode/read Normal file
View File

@ -0,0 +1,9 @@
# -*- mode: Shell-script -*-
# name:read
# key:read
# --
read -p "Enter ${1:name}: " ${2:input}
if [[ -z $$2 ]]; then
echo "Error: $1 cannot be empty"
exit 1
fi

View File

@ -0,0 +1,9 @@
# -*- mode: Shell-script -*-
# name:root-check
# key:root
# --
user=$(whoami)
if [ $user == root ]; then
error "You should NOT be using a root account"
exit 1
fi

72
snippets/sh-mode/script Normal file
View File

@ -0,0 +1,72 @@
# -*- mode: Shell-script -*-
# name:script
# key:script
# --
#!/usr/bin/env bash
#############################################################
# Author: Taryel Hlontsi, 2025
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>
#############################################################
doc=$(cat <<'EOF'
NOTES:
EOF
)
#############################################################
# SETUP SECTION
#############################################################
set -e
set -o pipefail
#############################################################
# HELPER FUNCTIONS
#############################################################
info() {
GREEN='\033[1;32m'
NC='\033[0m'
echo -e "\${GREEN}\${1}\${NC}"
}
trace() {
YELLOW='\033[1;33m'
NC='\033[0m'
echo -e "\${YELLOW}\${1}\${NC}"
}
warn() {
PURPLE='\033[1;35m'
NC='\033[0m'
echo -e "\${PURPLE}\${1}\${NC}"
}
error() {
RED='\033[1;31m'
NC='\033[0m'
echo -e "\${RED}\${1}\${NC}"
}
$0
#############################################################
# RUN SECTION
#############################################################
echo $(date +'%Y-%m-%d %H:%M')
info "$doc"
info "Bye!"
exit 0

View File

@ -0,0 +1,8 @@
# -*- mode: Shell-script -*-
# name:sourced-check
# key:sourced
# --
if [ \$0 == $BASH_SOURCE ]; then
error "Do not run the script in a subshell via ./ Instead you should 'source' it!"
exit 1
fi

23
snippets/sh-mode/systemd Normal file
View File

@ -0,0 +1,23 @@
# -*- mode: Shell-script -*-
# name:systemd
# key:systemd
# --
[Unit]
Description=Description goes here
Wants=network.target
[Service]
Environment="VAR_NAME=value"
EnvironmentFile=-/etc/environment
ExecStart=/usr/bin/bash /home/myuser/myscript.sh${1}
SyslogIdentifier=my.service
Restart=on-failure
RestartSec=5
# Should exist!
WorkingDirectory=/var/my.service${2}
TimeoutStopSec=30
Type=simple
User=root
[Install]
WantedBy=multi-user.target

5
snippets/sh-mode/wget Normal file
View File

@ -0,0 +1,5 @@
# -*- mode: Shell-script -*-
# name:wget
# key:wget
# --
wget --continue ${1:link} --output-document ${2:file}