32 Commits

Author SHA1 Message Date
Fabio Scotto di Santolo
5ab4606691 Fix Bash configuration 2026-01-03 14:01:55 +01:00
Fabio Scotto di Santolo
f136aaa030 Added Orderless completion Emacs 2026-01-02 14:44:06 +01:00
Fabio Scotto di Santolo
8340512f17 Added Emacs dashboard 2026-01-02 14:05:58 +01:00
Fabio Scotto di Santolo
88f17ff438 Configuring Org Mode on Emacs 2025-12-27 14:19:57 +01:00
Fabio Scotto di Santolo
5948c1256a Added Emacs modes for JSON and Markdown 2025-12-27 14:11:16 +01:00
Fabio Scotto di Santolo
db4f52a064 Added snippets for Emacs 2025-12-27 13:53:55 +01:00
Fabio Scotto di Santolo
2d510d289c Added YAML and Dockerfile treesitter grammar 2025-12-25 09:54:19 +01:00
Fabio Scotto di Santolo
6e20358ad6 Compact Emacs C-lang configuration 2025-12-24 16:16:29 +01:00
Fabio Scotto di Santolo
fc6f51343d Organize Emacs configuration 2025-12-24 15:56:55 +01:00
Fabio Scotto di Santolo
0e396c05b2 Fix keybindings module 2025-12-23 15:55:26 +01:00
Fabio Scotto di Santolo
dc7a0d0987 Added declarative abstraction for loading module 2025-12-23 13:33:57 +01:00
Fabio Scotto di Santolo
7711e4156f Split Emacs configuration in modules 2025-12-23 10:29:49 +01:00
Fabio Scotto di Santolo
c793146ebb Intellij debug layout 2025-12-22 16:48:29 +01:00
Fabio Scotto di Santolo
56bfec57ca Configure LSP and DAP for Golang development 2025-12-19 22:26:37 +01:00
Fabio Scotto di Santolo
009385e3fd Fix Bash configuration 2025-12-17 23:17:42 +01:00
Fabio Scotto di Santolo
bf00633d7c Configure DAP for C/C++ 2025-12-16 22:26:37 +01:00
Fabio Scotto di Santolo
db782bb84a Configure LSP for Shell Development 2025-12-16 09:48:57 +01:00
Fabio Scotto di Santolo
70b7da4461 Configure LSP for C development 2025-12-15 16:33:56 +01:00
Fabio Scotto di Santolo
4b1509acf7 Improved init performance and added configuration for LSP and DAP 2025-12-15 00:07:51 +01:00
Fabio Scotto di Santolo
457fa93727 Added package Elfeed Org in the Emacs custom config 2025-12-12 21:33:03 +01:00
Fabio Scotto di Santolo
414317c19f Fix Starship prompt 2025-12-12 21:31:29 +01:00
Fabio Scotto di Santolo
2e14989a23 Add LSP, Flycheck and others in the Emacs configuration 2025-12-06 23:44:06 +01:00
Fabio Scotto di Santolo
1839f9e875 Change Emacs configuration 2025-12-06 00:01:31 +01:00
Fabio Scotto di Santolo
c80216989c Fix path loading in .profile 2025-12-02 09:57:56 +01:00
Fabio Scotto di Santolo
7c620dba19 Fix Mise commit 2025-12-02 09:51:37 +01:00
Fabio Scotto di Santolo
d1ee31378d Fix Mise loading 2025-12-02 09:47:53 +01:00
Fabio Scotto di Santolo
bf33a8bbd7 Align Sway and i3 configurations 2025-11-29 11:47:37 +01:00
Fabio Scotto di Santolo
42deab7c3e Added Wayland environment with Sway 2025-11-28 23:35:14 +01:00
Fabio Scotto di Santolo
ed2c9d2b6a Change Rofi theme 2025-11-22 18:01:10 +01:00
Fabio Scotto di Santolo
3e4baa2b63 Add Youtube RSS feeds 2025-11-08 21:26:36 +01:00
Fabio Scotto di Santolo
1d937b9316 Fix SMTP client config 2025-11-08 17:22:02 +01:00
Fabio Scotto di Santolo
75de8dcadb Update mu4e configuration
- Added ProtonMail account
- Added iCloud Mail account
- Remove Gmail account
2025-11-07 22:13:14 +01:00
201 changed files with 3451 additions and 411 deletions

View File

@@ -27,7 +27,7 @@ This repository contains my configuration files for the following tools:
- `alacritty` - `alacritty`
- `tmux` - `tmux`
- **Editors & CLI Tools** - **Editors & CLI Tools**
- `emacs` (Doom Emacs config) - `doom` (Doom Emacs config)
- `emacs` (Custom config) - `emacs` (Custom config)
- `git` - `git`
- **X11 Environment** - **X11 Environment**
@@ -36,6 +36,11 @@ This repository contains my configuration files for the following tools:
- `polybar` (status bar) - `polybar` (status bar)
- `rofi` (launcher) - `rofi` (launcher)
- `dunst` (notification daemon) - `dunst` (notification daemon)
- **Wayland Environment**
- `sway` (Window Manager)
- `waybar` (status bar)
- `rofi` (launcher)
- `dunst` (notification daemon)
- **Utilities** - **Utilities**
- `fastfetch` - `fastfetch`
- `zoxide` - `zoxide`

View File

@@ -1,7 +1,7 @@
# Enable the subsequent settings only in interactive sessions # Enable the subsequent settings only in interactive sessions
case $- in case $- in
*i*) ;; *i*) ;;
*) return;; *) return ;;
esac esac
# Path to your oh-my-bash installation. # Path to your oh-my-bash installation.
@@ -91,18 +91,27 @@ OMB_USE_SUDO=true
# Add wisely, as too many completions slow down shell startup. # Add wisely, as too many completions slow down shell startup.
completions=( completions=(
asdf asdf
brew
docker docker
docker-compose docker-compose
gh gh
git git
go go
helm
kubectl
makefile makefile
maven
minikube
npm npm
nvm
oc
pip3 pip3
pip
sdkman
ssh
system system
tmux tmux
composer vagrant
ssh
) )
# Which aliases would you like to load? (aliases can be found in ~/.oh-my-bash/aliases/*) # Which aliases would you like to load? (aliases can be found in ~/.oh-my-bash/aliases/*)
@@ -118,12 +127,8 @@ aliases=(
# Example format: plugins=(rails git textmate ruby lighthouse) # Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup. # Add wisely, as too many plugins slow down shell startup.
plugins=( plugins=(
bashmarks
bash-preexec bash-preexec
cargo
colored-man-pages colored-man-pages
git
zoxide
) )
# Which plugins would you like to conditionally load? (plugins can be found in ~/.oh-my-bash/plugins/*) # Which plugins would you like to conditionally load? (plugins can be found in ~/.oh-my-bash/plugins/*)
@@ -166,7 +171,11 @@ source "$OSH"/oh-my-bash.sh
# users are encouraged to define aliases within the OSH_CUSTOM folder. # users are encouraged to define aliases within the OSH_CUSTOM folder.
# For a full list of active aliases, run ` # For a full list of active aliases, run `
# export EDITOR="emacs -nw"
# export VISUAL="emacs"
alias ls='ls --color=auto --group-directories-first' alias ls='ls --color=auto --group-directories-first'
alias lsx='ls -AXF'
# Replace grep command tool # Replace grep command tool
alias grep='grep --color=auto' alias grep='grep --color=auto'
@@ -179,12 +188,12 @@ alias userlist="cut -d: -f1 /etc/passwd | sort"
alias ip='ip -color' alias ip='ip -color'
alias stow='stow -d $DOTFILES ' alias stow='stow -d $DOTFILES '
# Starship prompt # User specific aliases and functions
if command -v starship > /dev/null 2>&1; then if [ -d ~/.bashrc.d ]; then
eval "$(starship init bash)" for rc in ~/.bashrc.d/*; do
fi if [ -f "$rc" ]; then
. "$rc"
# Load Mise en dev fi
if command -v mise > /dev/null 2>&1; then done
eval "$(mise activate bash)"
fi fi
unset rc

5
bash/.bashrc.d/homebrew.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
if command -v /home/linuxbrew/.linuxbrew/bin/brew >/dev/null 2>&1; then
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
fi

6
bash/.bashrc.d/java.sh Executable file
View File

@@ -0,0 +1,6 @@
#!/usr/bin/env bash
if command -v java > /dev/null 2>&1; then
JAVA_HOME="$(dirname $(mise bin-paths | grep -i java))"
export JAVA_HOME
fi

6
bash/.bashrc.d/mise.sh Executable file
View File

@@ -0,0 +1,6 @@
#!/usr/bin/env sh
# Load Mise en dev
if command -v mise > /dev/null 2>&1; then
eval "$(mise activate bash)"
fi

6
bash/.bashrc.d/starship.sh Executable file
View File

@@ -0,0 +1,6 @@
#!/usr/bin/env bash
# Starship prompt
if command -v starship >/dev/null 2>&1; then
eval "$(starship init bash)"
fi

5
bash/.bashrc.d/zoxide.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
if command -v /home/linuxbrew/.linuxbrew/bin/zoxide >/dev/null 2>&1; then
eval "$(/home/linuxbrew/.linuxbrew/bin/zoxide init bash)"
fi

View File

@@ -38,9 +38,6 @@ export VIRTUAL_ENV_DISABLE_PROMPT=1
export GOPATH="$HOME/.local/share/Go" export GOPATH="$HOME/.local/share/Go"
export GOBIN="$GOPATH/bin" export GOBIN="$GOPATH/bin"
source "$HOME/.profile.d/homebrew.sh"
source "$HOME/.profile.d/java.sh"
appendpath() { appendpath() {
local location="${1}" local location="${1}"
case ":$PATH:" in case ":$PATH:" in
@@ -49,9 +46,8 @@ appendpath() {
esac esac
} }
# appendpath "/home/linuxbrew/.linuxbrew/bin"
appendpath "$HOME/.local/bin" appendpath "$HOME/.local/bin"
appendpath "$GOBIN" appendpath "$GOBIN"
appendpath "$HOME/.cargo/bin" # appendpath "$HOME/.cargo/bin"
appendpath "/home/linuxbrew/.linuxbrew/bin"
appendpath "$HOME/.config/emacs/bin"
unset appendpath unset appendpath

View File

@@ -1,5 +0,0 @@
#!/usr/bin/env bash
if command -v brew > /dev/null 2>&1; then
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
fi

View File

@@ -1,5 +0,0 @@
#!/usr/bin/env bash
if command -v java > /dev/null 2>&1; then
export JAVA_HOME="$(dirname $(mise bin-paths | grep -i java))"
fi

View File

@@ -1,5 +0,0 @@
#!/usr/bin/env zsh
if command -v tmux &> /dev/null && [ -z "$TMUX" ]; then
tmux attach-session -t default || tmux new-session -s default
fi

View File

@@ -43,7 +43,7 @@
;; If you use `org' and don't want your org files in the default location below, ;; If you use `org' and don't want your org files in the default location below,
;; change `org-directory'. It must be set before org loads! ;; change `org-directory'. It must be set before org loads!
(setq org-directory "~/Org/") (setq org-directory "~/Remotes/pCloud/Org")
;; Whenever you reconfigure a package, make sure to wrap your config in an ;; Whenever you reconfigure a package, make sure to wrap your config in an
;; `after!' block, otherwise Doom's defaults may override your settings. E.g. ;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
@@ -81,6 +81,7 @@
(add-to-list 'default-frame-alist '(fullscreen . maximized)) (add-to-list 'default-frame-alist '(fullscreen . maximized))
(after! mu4e (after! mu4e
;; This is set to 't' to avoid mail syncing issues when using mbsync ;; This is set to 't' to avoid mail syncing issues when using mbsync
(setq mu4e-change-filenames-when-moving t) (setq mu4e-change-filenames-when-moving t)
@@ -89,20 +90,38 @@
(setq mu4e-get-mail-command "~/.config/doom/scripts/email_sync.sh") (setq mu4e-get-mail-command "~/.config/doom/scripts/email_sync.sh")
(setq mu4e-maildir "~/Maildir") (setq mu4e-maildir "~/Maildir")
(setq mu4e-drafts-folder "/GmailAccount/[Gmail]/Bozze") ;; Configure email accounts
(setq mu4e-sent-folder "/GmailAccount/[Gmail]/Posta inviata") (setq mu4e-contexts
(setq mu4e-refile-folder "/GmailAccount/[Gmail]/Tutti i messaggi") (list
(setq mu4e-trash-folder "/GmailAccount/[Gmail]/Cestino") ;; Protonmail Account
(setq user-email-address "fabio.scottodisantolo@gmail.com") (make-mu4e-context
(setq user-full-name "Fabio Scotto di Santolo") :name "Protonmail"
:match-func
(lambda (msg)
(when msg
(string-prefix-p "/ProtonMailAccount" (mu4e-message-field msg :maildir))))
:vars '((user-mail-address . "fscottodisantolo@protonmail.com")
(user-full-name . "Fabio Scotto di Santolo")
(mu4e-drafts-folder . "/ProtonMailAccount/Drafts")
(mu4e-sent-folder . "/ProtonMailAccount/Sent")
(mu4e-refile-folder . "/ProtonMailAccount/All Mail")
(mu4e-trash-folder . "/ProtonMailAccount/Trash")))
(setq mu4e-maildir-shortcuts ;; iCloud Account
'(("/GmailAccount/Inbox" . ?i) (make-mu4e-context
("/GmailAccount/[Gmail]/Posta inviata" . ?s) :name "iCloud Mail"
("/GmailAccount/[Gmail]/Cestino" . ?t) :match-func
("/GmailAccount/[Gmail]/Bozze" . ?d) (lambda (msg)
("/GmailAccount/[Gmail]/Tutti i messaggi" . ?a))) (when msg
(string-prefix-p "/iCloudAccount" (mu4e-message-field msg :maildir))))
:vars '((user-mail-address . "fscottodisantolo@icloud.com")
(user-full-name . "Fabio Scotto di Santolo")
(mu4e-drafts-folder . "/iCloudAccount/Drafts")
(mu4e-sent-folder . "/iCloudAccount/Sent Messages")
(mu4e-refile-folder . "/iCloudAccount/INBOX")
(mu4e-trash-folder . "/iCloudAccount/Junk")))))
;; Configure SMTP client for send emails
(setq sendmail-program "/usr/bin/msmtp" (setq sendmail-program "/usr/bin/msmtp"
send-mail-function 'sendmail-send-it send-mail-function 'sendmail-send-it
message-sendmail-f-is-evil t message-sendmail-f-is-evil t
@@ -115,12 +134,23 @@
(setq elfeed-db-directory "~/.elfeed") (setq elfeed-db-directory "~/.elfeed")
(setq elfeed-enclosure-default-dir "~/Downloads/") (setq elfeed-enclosure-default-dir "~/Downloads/")
(setq elfeed-sort-order 'descending) (setq elfeed-sort-order 'descending)
(setq elfeed-search-filter "1-week-ago +unread") (setq elfeed-search-filter "6-months-ago +unread")
;; ;; Key bindings ;; Key bindings
;; (map! :map elfeed-search-mode-map (map! :map elfeed-search-mode-map
;; :n "d" #'elfeed-download-current-entry :n "d" #'elfeed-download-current-entry
;; :n "O" #'elfeed-search-browse-url) :n "O" #'elfeed-search-browse-url)
;; Update hourly ;; Update hourly
(run-at-time nil (* 60 60) #'elfeed-update)) (run-at-time nil (* 60 60) #'elfeed-update))
(after! elfeed-tube
(elfeed-tube-setup))
;; PDF config
(after! pdf-tools
:defer t
:commands (pdf-loader-install)
:mode "\\.pdf\\'"
:init (pdf-loader-install)
:config (add-to-list 'revert-without-query ".pdf"))

View File

@@ -0,0 +1,21 @@
(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.
'(elfeed-feeds
'("https://www.youtube.com/feeds/videos.xml?channel_id=UCqZe2cxQNCvgkQxUuqsIaig" "https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg"
("https://www.youtube.com/feeds/videos.xml?channel_id=UCrqM0Ym_NbK1fqeQG2VIohg" youtube programming)
("https://www.youtube.com/feeds/videos.xml?channel_id=UCDDG9vOcmgwlslJJpCWjqOg" youtube programming)
("https://www.youtube.com/feeds/videos.xml?channel_id=UCnDDucQDLncrauOCmanCIgw" youtube foss)
("https://www.youtube.com/feeds/videos.xml?channel_id=UCqZe2cxQNCvgkQxUuqsIaig" youtube programming)
("https://www.youtube.com/feeds/videos.xml?channel_id=UCABhVAlCkcEG9a2UVruq9vw" youtube fashion)
("https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg" youtube linux)
("https://blog.linuxmint.com/?feed=rss2" news linuxmint)
("https://feeds.feedburner.com/TheHackersNews" programming security))))
(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.
)

View File

@@ -7,3 +7,10 @@
*** [[https://feeds.feedburner.com/TheHackersNews][Hacker News]] :news: :security: *** [[https://feeds.feedburner.com/TheHackersNews][Hacker News]] :news: :security:
** FOSS News :news: ** FOSS News :news:
*** [[https://blog.linuxmint.com/?feed=rss2][Linux Mint Blog]] :blog: :linux: :linuxmint: *** [[https://blog.linuxmint.com/?feed=rss2][Linux Mint Blog]] :blog: :linux: :linuxmint:
** Youtube :youtube:
*** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg][DistroTube]] :emacs: :foss: :linux:
*** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCABhVAlCkcEG9a2UVruq9vw][Douglas Mortimer]] :fashion:
*** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCqZe2cxQNCvgkQxUuqsIaig][Esadecimale]] :emacs: :programming:
*** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCnDDucQDLncrauOCmanCIgw][MorroLinux]] :linux: :foss:
*** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCDDG9vOcmgwlslJJpCWjqOg][Salvatore Sanfilippo]] :programming:
*** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCrqM0Ym_NbK1fqeQG2VIohg][Tsoding Daily]] :emacs: :programming:

View File

@@ -54,3 +54,6 @@
;; (unpin! t) ;; (unpin! t)
(package! catppuccin-theme) (package! catppuccin-theme)
(package! org-caldav)
(package! elfeed-tube)
(package! elfeed-tube-mpv)

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env sh #!/usr/bin/env sh
mbsync Gmail & pid1=$! mbsync -a & pid1=$!
wait $pid1 wait $pid1
mu index mu index

View File

@@ -1,233 +0,0 @@
;; Initial greeting for debugging
(message "Welcome to Emacs")
(message "Loading user configuration...")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; LOOK AND FEEL ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Setting default font
(set-frame-font "0xProto Nerd Font 13" nil t)
;; Remove toolbar
(tool-bar-mode -1)
;; Remove menu
(menu-bar-mode -1)
;; Disable startup screen
(setq inhibit-startup-screen t)
;; Disable splash screen
(setq inhibit-splash-screen t)
;; Start all frames maximized
(add-to-list 'default-frame-alist '(fullscreen . maximized))
;; Remove scrollbar
(scroll-bar-mode -1)
;; Simple 'y' for 'yes' and 'n' for 'no'
(defalias 'yes-or-no-p 'y-or-n-p)
;; Set global value for paragraph witdh
(setq-default fill-column 120)
;; Stop Emacs from losing informations
(setq undo-limit 2000000)
(setq undo-strong-limit 4000000000)
;; Smooth scroll
(setq scroll-step 3)
(setq ring-bell-function 'ignore)
;; Add column number in the status line
(column-number-mode)
;; View clock in the status line
(display-time)
;; Enable line numbers in the programming mode only
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
;; Enable line numbers in the configuration mode only
(add-hook 'conf-mode-hook 'display-line-numbers-mode)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; EDITOR OPTIONS ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq standard-indent 4)
(setq tab-stop-list nil)
(setq indent-tabs-mode nil)
;; Setting variables
(setq vc-follow-symlinks 't)
(prefer-coding-system 'utf-8-unix)
(setq custom-file (null-device))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PACKAGES ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Initialize package system via use-package
(package-initialize)
(require 'use-package)
(use-package package
:config
;; Setting repo priorities
(setq package-archive-priorities
'(("melpa-stable" . 2)
("MELPA" . 1)
("gnu" . 0)))
;; Setting repo URL
(setq package-archives
'(("melpa-stable" . "https://stable.melpa.org/packages/")
("MELPA" . "https://melpa.org/packages/")
("gnu" . "https://elpa.gnu.org/packages/")))
)
(use-package catppuccin-theme
:ensure t
:config
(load-theme 'catppuccin :no-confirm)
(setq catppuccin-flavor 'mocha))
;; Status line like Doom Emacs
(use-package doom-modeline
:ensure t
:init (doom-modeline-mode 1))
;; Help to remember or discover keybindings
(use-package which-key
:ensure t
:commands (which-key-mode)
:init (which-key-mode))
;; Configuration for mu4e, an interface for mu email index, running inside Emacs
(use-package mu4e
:ensure nil
;; :load-path "/usr/share/emacs/site-lisp/mu4e/"
:defer 20 ; Wait until 20 seconds after startup
:bind (:map global-map ("C-c e" . mu4e))
:config
;; This is set to 't' to avoid mail syncing issues when using mbsync
(setq mu4e-change-filenames-when-moving t)
;; Refresh mail using isync every 10 minutes
(setq mu4e-update-interval (* 10 60))
(setq mu4e-get-mail-command "~/.config/emacs/scripts/email_sync.sh")
(setq mu4e-maildir "~/Maildir")
(setq mu4e-drafts-folder "/GmailAccount/[Gmail]/Bozze")
(setq mu4e-sent-folder "/GmailAccount/[Gmail]/Posta inviata")
(setq mu4e-refile-folder "/GmailAccount/[Gmail]/Tutti i messaggi")
(setq mu4e-trash-folder "/GmailAccount/[Gmail]/Cestino")
(setq user-email-address "fabio.scottodisantolo@gmail.com")
(setq user-full-name "Fabio Scotto di Santolo")
(setq mu4e-maildir-shortcuts
'(("/GmailAccount/Inbox" . ?i)
("/GmailAccount/[Gmail]/Posta inviata" . ?s)
("/GmailAccount/[Gmail]/Cestino" . ?t)
("/GmailAccount/[Gmail]/Bozze" . ?d)
("/GmailAccount/[Gmail]/Tutti i messaggi" . ?a))))
(setq user-mail-address "fabio.scottodisantolo@gmail.com")
(setq sendmail-program "/usr/bin/msmtp"
send-mail-function 'sendmail-send-it
message-sendmail-f-is-evil t
message-sendmail-extra-arguments '("--read-envelope-from")
message-send-mail-function 'message-send-mail-with-sendmail)
;; Configure elfeed for RSS feed
(use-package elfeed
:ensure t
:custom
(elfeed-db-directory "~/.cache/elfeed")
(elfeed-enclosure-default-dir "~/Downloads/")
(elfeed-search-remain-on-entry t)
(elfeed-search-title-max-width 100)
(elfeed-search-title-min-width 30)
(elfeed-search-trailing-width 25)
(elfeed-show-truncate-long-urls t)
(elfeed-sort-order 'descending)
(elfeed-search-filter "1-week-ago +unread")
(elfeed-feeds
'(("https://blog.linuxmint.com/?feed=rss2" linux linuxmint)
("https://feeds.feedburner.com/TheHackersNews" hackernews news security programming)))
:bind (("C-c f" . elfeed)))
;; Terminal
(use-package vterm
:ensure t
:bind (:map global-map
("C-c t" . vterm)
("C-c c" . vterm-copy-mode)))
;; PDF viewer with annotations
(use-package pdf-tools
:ensure t
:config
(pdf-tools-install))
;; EPub viewer
(use-package nov
:ensure t
:mode ("\\.epub\\'" . nov-mode))
(use-package visual-fill-column
:ensure t)
;; Git plugin
(use-package magit
:ensure t
:bind (:map global-map ("M-G" . magit-status)))
(use-package magit-delta
:ensure t)
;; Highlight keywords to remember the activity when coding.
(use-package hl-todo
:ensure t
:commands (global-hl-todo-mode)
:init (global-hl-todo-mode))
(setq hl-todo-keyword-faces
'(("TODO" . "#94e2d5")
("FIXME" . "#f38ba8")
("DEBUG" . "#cba6f7")
("GOTCHA" . "#eba0ac")
("STUB" . "#89b4fa")))
(keymap-set hl-todo-mode-map "C-c p" #'hl-todo-previous)
(keymap-set hl-todo-mode-map "C-c n" #'hl-todo-next)
(keymap-set hl-todo-mode-map "C-c o" #'hl-todo-occur)
(keymap-set hl-todo-mode-map "C-c i" #'hl-todo-insert)
;; Highlight for i3 config file
(use-package i3wm-config-mode
:ensure t)
;; Add autocomplete feature to Emacs
(use-package company
:ensure t
:commands (global-company-mode)
:init (global-company-mode)
:custom
(company-tooltip-align-annotations 't)
(company-minimum-prefix-length 1)
(company-idle-delay 0.1))
;; TODO adding lsp-mode, dap-mode, autocomplete and project handling for C, Go, Bash and Python
(use-package lsp-mode
:ensure t
:init
;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
(setq lsp-keymap-prefix "C-c l")
:hook ((c-mode . lsp))
:commands lsp)
(message "...user configuration loaded")

View File

@@ -14,6 +14,11 @@ tramp
eln-cache eln-cache
projects projects
transient/ transient/
.dap-breakpoints
.lsp-session-v1
/.extension/**
url/**
**/*.bak
# Org-mode # Org-mode
.org-id-locations .org-id-locations
@@ -47,6 +52,7 @@ flycheck_*.el
# projectiles files # projectiles files
.projectile .projectile
/projectile-bookmarks.eld
# directory configuration # directory configuration
.dir-locals.el .dir-locals.el

View File

@@ -0,0 +1,23 @@
;;=====================================================================================
;; Define loader functions
;;=====================================================================================
(defconst fscotto/modules-dir
(expand-file-name "lisp" user-emacs-directory))
(defun fscotto/load-module (module)
"Load a MODULE from symbol."
(let* ((module-name (symbol-name module))
(path (expand-file-name
(concat (replace-regexp-in-string "/" "/" module-name)
".el")
fscotto/modules-dir)))
(unless (file-exists-p path)
(error "Module not found: %s" path))
(load path nil 'nomessage)))
(defun fscotto/load-modules (&rest modules)
"Load MODULES."
(mapc #'fscotto/load-module modules))
(defvar fscotto/emacs-profile
(or (getenv "EMACS_PROFILE") "full"))

16
emacs/.emacs.d/elfeed.org Normal file
View File

@@ -0,0 +1,16 @@
#+TITLE: RSS Urls
#+AUTHOR: Fabio Scotto di Santolo
#+DATE: <2025-10-25 Sat>
* root :elfeed:
** Programming :programming:
*** [[https://feeds.feedburner.com/TheHackersNews][Hacker News]] :news: :security:
** FOSS News :news:
*** [[https://blog.linuxmint.com/?feed=rss2][Linux Mint Blog]] :blog: :linux: :linuxmint:
** Youtube :youtube:
*** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg][DistroTube]] :emacs: :foss: :linux:
*** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCABhVAlCkcEG9a2UVruq9vw][Douglas Mortimer]] :fashion:
*** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCqZe2cxQNCvgkQxUuqsIaig][Esadecimale]] :emacs: :programming:
*** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCnDDucQDLncrauOCmanCIgw][MorroLinux]] :linux: :foss:
*** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCDDG9vOcmgwlslJJpCWjqOg][Salvatore Sanfilippo]] :programming:
*** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCrqM0Ym_NbK1fqeQG2VIohg][Tsoding Daily]] :emacs: :programming:

48
emacs/.emacs.d/init.el Normal file
View File

@@ -0,0 +1,48 @@
(message "Welcome to Emacs")
(message "Loading user configuration...")
(message "Emacs profile: %s" fscotto/emacs-profile)
;;=====================================================================================
;; Load modules
;;=====================================================================================
(fscotto/load-modules
;; Core
'core/packages
'core/ui
'core/performance
'core/editor
'core/keybindings
'core/buffer
;; Tools
'tools/completion
'tools/project
'tools/lsp
'tools/dap
'tools/treesitter
;; Languages
'lang/c
'lang/docker
'lang/golang
'lang/json
'lang/markdown
'lang/org
'lang/shell
'lang/yaml
;; Misc
'misc/dashboard
'misc/custom-functions
'misc/doom-modeline
'misc/which-key
'misc/email
'misc/rss
'misc/terminal
'misc/vcs
;; FIXME PDF viewer with annotations
;; 'misc/pdf
'misc/epub
'misc/i3-config)
(message "...user configuration loaded")

View File

@@ -0,0 +1,21 @@
;;; buffer.el -*- lexical-binding: t; -*-
(use-package ibuffer
:ensure t)
(use-package ibuffer-tramp
:ensure t)
(use-package ibuffer-vc
:ensure t)
(use-package ibuffer-projectile
:ensure t)
(add-hook 'ibuffer-mode-hook
(lambda ()
(ibuffer-projectile-set-filter-groups)))
(provide 'buffer)
;;; buffer.el ends here

View File

@@ -0,0 +1,14 @@
;;; core-editor
(setq standard-indent 4)
(setq tab-stop-list nil)
(setq indent-tabs-mode nil)
;; Setting variables
(setq vc-follow-symlinks 't)
(prefer-coding-system 'utf-8-unix)
(setq custom-file (null-device))
(provide 'editor)
;;; editor.el ends here

View File

@@ -0,0 +1,161 @@
;;; keybindings.el -*- lexical-binding: t; -*-
;;;; Global / Core
(global-set-key (kbd "C-x C-b") #'ibuffer)
(global-set-key (kbd "C-<return>") 'company-complete)
(defvar fscotto/leader-map (make-sparse-keymap)
"Keymap per comandi sotto C-c.")
(define-key global-map (kbd "C-c") fscotto/leader-map)
;;;; Git / Magit
(defun fscotto/enable-magit-keymap ()
"Enable Git keybindings if current buffer is inside a Git repository."
(when (and (require 'magit nil 'noerror)
(magit-toplevel))
(local-set-key (kbd "C-c g") fscotto/git-map)))
(defvar fscotto/git-map (make-sparse-keymap)
"Keymap for Git commands under C-c g.")
(add-hook 'find-file-hook #'fscotto/enable-magit-keymap)
(add-hook 'prog-mode-hook #'fscotto/enable-magit-keymap)
(add-hook 'conf-mode-hook #'fscotto/enable-magit-keymap)
;; autoload: il tasto carica magit
(autoload 'magit-status "magit" nil t)
(autoload 'magit-branch "magit" nil t)
(autoload 'magit-commit "magit" nil t)
(autoload 'magit-push "magit" nil t)
(autoload 'magit-fetch "magit" nil t)
;; keybinding (sempre definite nella mappa)
(define-key fscotto/git-map (kbd "s") #'magit-status)
(define-key fscotto/git-map (kbd "b") #'magit-branch)
(define-key fscotto/git-map (kbd "c") #'magit-commit)
(define-key fscotto/git-map (kbd "p") #'magit-push)
(define-key fscotto/git-map (kbd "f") #'magit-fetch)
;;;; Open / Tools
(defvar fscotto/open (make-sparse-keymap))
(define-key fscotto/leader-map (kbd "o") fscotto/open)
;; -------- vterm --------
(autoload 'vterm "vterm" nil t)
(define-key fscotto/open (kbd "T") #'vterm)
(with-eval-after-load 'vterm
(define-key vterm-mode-map (kbd "C-c C-t") #'vterm-copy-mode))
;; -------- mu4e --------
(autoload 'mu4e "mu4e" nil t)
(define-key fscotto/open (kbd "m") #'mu4e)
;; -------- elfeed --------
(autoload 'elfeed "elfeed" nil t)
(define-key fscotto/open (kbd "f") #'elfeed)
;;;; Elfeed mode maps
(with-eval-after-load 'elfeed
(define-key elfeed-search-mode-map (kbd "w") #'elfeed-search-yank)
(define-key elfeed-search-mode-map (kbd "R") #'elfeed-update)
(define-key elfeed-search-mode-map (kbd "q") #'elfeed-kill-buffer)
(define-key elfeed-show-mode-map (kbd "S") #'elfeed-show-new-live-search)
(define-key elfeed-show-mode-map (kbd "f") #'elfeed-show-fetch-full-text)
(define-key elfeed-show-mode-map (kbd "w") #'elfeed-show-yank))
;;;; hl-todo
(with-eval-after-load 'hl-todo
(define-key hl-todo-mode-map (kbd "C-t p") #'hl-todo-previous)
(define-key hl-todo-mode-map (kbd "C-t n") #'hl-todo-next)
(define-key hl-todo-mode-map (kbd "C-t o") #'hl-todo-occur)
(define-key hl-todo-mode-map (kbd "C-t i") #'hl-todo-insert))
;; Projectile keybindings
(define-key fscotto/leader-map (kbd "p") 'projectile-command-map)
(with-eval-after-load 'projectile
(define-key projectile-command-map (kbd "v") #'fscotto/project-vterm)
(define-key projectile-command-map (kbd "g") #'fscotto/project-magit-status))
;;;; LSP
(defvar fscotto/lsp-map (make-sparse-keymap))
(autoload 'lsp-find-definition "lsp-mode" nil t)
(autoload 'lsp-find-type-definition "lsp-mode" nil t)
(autoload 'lsp-find-implementation "lsp-mode" nil t)
(autoload 'lsp-execute-code-action "lsp-mode" nil t)
(autoload 'lsp-rename "lsp-mode" nil t)
(autoload 'lsp-format-buffer "lsp-mode" nil t)
(autoload 'lsp-restart-workspace "lsp-mode" nil t)
(autoload 'consult-lsp-symbols "consult-lsp" nil t)
(autoload 'consult-lsp-diagnostics "consult-lsp" nil t)
(define-key fscotto/lsp-map (kbd "s") #'consult-lsp-symbols)
(define-key fscotto/lsp-map (kbd "e") #'consult-lsp-diagnostics)
(define-key fscotto/lsp-map (kbd "d") #'lsp-find-definition)
(define-key fscotto/lsp-map (kbd "D") #'lsp-find-type-definition)
(define-key fscotto/lsp-map (kbd "i") #'lsp-find-implementation)
(define-key fscotto/lsp-map (kbd "a") #'lsp-execute-code-action)
(define-key fscotto/lsp-map (kbd "r") #'lsp-rename)
(define-key fscotto/lsp-map (kbd "f") #'lsp-format-buffer)
(define-key fscotto/lsp-map (kbd "R") #'lsp-restart-workspace)
(defun fscotto/enable-lsp-keymap ()
"Enable LSP keybindings if LSP is active in the current buffer."
(when (and (bound-and-true-p lsp-mode)
(lsp-workspaces))
(local-set-key (kbd "C-c l") fscotto/lsp-map)))
(add-hook 'lsp-mode-hook #'fscotto/enable-lsp-keymap)
(add-hook 'lsp-after-initialize-hook #'fscotto/enable-lsp-keymap)
(add-hook 'lsp-after-open-hook #'fscotto/enable-lsp-keymap)
;;;; DAP
(defvar fscotto/dap-map (make-sparse-keymap)
"Keymap for DAP commands under C-c d.")
(autoload 'dap-debug "dap-mode" nil t)
(autoload 'dap-breakpoint-toggle "dap-mode" nil t)
(autoload 'dap-continue "dap-mode" nil t)
(autoload 'dap-next "dap-mode" nil t)
(autoload 'dap-step-in "dap-mode" nil t)
(autoload 'dap-step-out "dap-mode" nil t)
(autoload 'dap-restart-frame "dap-mode" nil t)
(autoload 'dap-disconnect "dap-mode" nil t)
(define-key fscotto/dap-map (kbd "d") #'dap-debug)
(define-key fscotto/dap-map (kbd "b") #'dap-breakpoint-toggle)
(define-key fscotto/dap-map (kbd "c") #'dap-continue)
(define-key fscotto/dap-map (kbd "n") #'dap-next)
(define-key fscotto/dap-map (kbd "i") #'dap-step-in)
(define-key fscotto/dap-map (kbd "o") #'dap-step-out)
(define-key fscotto/dap-map (kbd "r") #'dap-restart-frame)
(define-key fscotto/dap-map (kbd "q") #'dap-disconnect)
(defun fscotto/enable-dap-keymap ()
"Enable DAP keybindings if dap-mode is active in the current buffer."
(when (bound-and-true-p dap-mode)
(local-set-key (kbd "C-c d") fscotto/dap-map)))
(add-hook 'dap-mode-hook #'fscotto/enable-dap-keymap)
(add-hook 'dap-session-created-hook #'fscotto/enable-dap-keymap)
(add-hook 'dap-terminated-hook #'fscotto/enable-dap-keymap)
;;;; Go
(with-eval-after-load 'go-ts-mode
(define-key go-ts-mode-map (kbd "C-c m t") #'fscotto/go-mod-tidy)
(define-key go-ts-mode-map (kbd "C-c m d") #'fscotto/go-mod-download)
(define-key go-ts-mode-map (kbd "C-c t p") #'fscotto/go-test-package)
(define-key go-ts-mode-map (kbd "C-c t a") #'fscotto/go-test-module)
(define-key go-ts-mode-map (kbd "C-c t t") #'fscotto/go-test-current-test)
(define-key go-ts-mode-map (kbd "C-c d t") #'dap-debug))
(provide 'core/keybindings)
;;; keybindings.el ends here

View File

@@ -0,0 +1,15 @@
;; core-packages.el -*- lexical-binding: t; -*-
(require 'use-package)
(use-package package
:config
;; Setting repo priorities
(setq package-archive-priorities
'(("melpa-stable" . 2)
("MELPA" . 1)
("gnu" . 0)))
;; Setting repo URL
(setq package-archives
'(("melpa-stable" . "https://stable.melpa.org/packages/")
("MELPA" . "https://melpa.org/packages/")
("gnu" . "https://elpa.gnu.org/packages/"))))

View File

@@ -0,0 +1,22 @@
;;; core-performance.el -*-
;; --- Startup speed tweaks ----------------------------------------------------
;; Temporarily increase GC threshold during init
(defvar fscotto/gc-cons-threshold-orig gc-cons-threshold)
(setq gc-cons-threshold (* 50 1000 1000)) ;; 50MB for init
;; Speedup file-name-handler during init
(defvar fscotto/file-name-handler-alist-orig file-name-handler-alist)
(setq file-name-handler-alist nil)
;; Restore after init
(add-hook 'emacs-startup-hook
(lambda ()
(setq gc-cons-threshold fscotto/gc-cons-threshold-orig)
(setq file-name-handler-alist fscotto/file-name-handler-alist-orig)
(garbage-collect)))
;; LSP responsiveness
(setq read-process-output-max (* 1024 1024)) ;; 1MB, utile per lsp-mode
(setq lsp-idle-delay 0.5) ;; meno ritardo prima che LSP aggiorni info
(setq inhibit-compacting-font-caches t)

View File

@@ -0,0 +1,67 @@
;;;; core-ui.el -*-
;; Load default theme
(load-theme 'wombat)
;; Setting default font
(set-frame-font "Iosevka Nerd Font 14" nil t)
;; Remove toolbar
(tool-bar-mode -1)
;; Remove menu
(menu-bar-mode -1)
;; Disable startup screen
(setq inhibit-startup-screen t)
;; Disable splash screen
(setq inhibit-splash-screen t)
;; Start all frames maximized
(add-to-list 'default-frame-alist '(fullscreen . maximized))
;; Remove scrollbar
(scroll-bar-mode -1)
;; Simple 'y' for 'yes' and 'n' for 'no'
(defalias 'yes-or-no-p 'y-or-n-p)
;; Set global value for paragraph witdh
(setq-default fill-column 120)
;; Stop Emacs from losing informations
(setq undo-limit 8000000)
(setq undo-strong-limit 12000000)
;; Smooth scroll
(setq scroll-step 3)
(setq ring-bell-function 'ignore)
;; Add column number in the status line
(column-number-mode)
;; View clock in the status line
(display-time)
;; Enable line numbers in the programming mode only
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
;; Enable line numbers in the configuration mode only
(add-hook 'conf-mode-hook 'display-line-numbers-mode)
;; Highlight keywords to remember the activity when coding.
(use-package hl-todo
:ensure t
:commands (global-hl-todo-mode)
:init (global-hl-todo-mode))
(setq hl-todo-keyword-faces
'(("TODO" . "#94e2d5")
("FIXME" . "#f38ba8")
("DEBUG" . "#cba6f7")
("GOTCHA" . "#eba0ac")
("STUB" . "#89b4fa")))
(provide 'ui)
;;; ui.el ends here

View File

@@ -0,0 +1,39 @@
;; c.el -*- lexical-binding: t; -*-
;; C / C++ fallback style (Linux-like)
(setq c-default-style "linux"
c-basic-offset 4
tab-width 8)
(add-hook 'c-mode-common-hook
(lambda ()
(setq indent-tabs-mode t)))
;; Tree-sitter C/C++
(setq c-ts-mode-indent-offset 4)
(setq c++-ts-mode-indent-offset 4)
(with-eval-after-load 'lsp
;; Clangd configurations
(setq lsp-clients-clangd-args
'("--background-index"
"--clang-tidy"
"--completion-style=detailed"
"--header-insertion=never"
"--header-insertion-decorators"
"--pch-storage=memory"
"--log=error"
"--ranking-model=heuristics"
"--malloc-trim"
"--limit-results=500"
"--limit-references=2000")))
(with-eval-after-load 'dap-mode
(require 'dap-cpptools))
(add-hook 'c-ts-mode-hook #'fscotto/disable-c-formatting)
(add-hook 'c-mode-hook #'fscotto/disable-c-formatting)
(provide 'c)
;;; c.el ends here

View File

@@ -0,0 +1,8 @@
;;; docker.el -*- lexical-binding: t; -*-
(use-package dockerfile-mode
:ensure t)
(provide 'docker)
;;; docker.el ends here

View File

@@ -0,0 +1,89 @@
;;=================================================================
;; Go Language Support
;;=================================================================
(use-package go-ts-mode
:ensure nil
:mode "\\.go\\'"
:hook
((go-ts-mode . lsp-deferred)
(go-ts-mode . fscotto/go-format-on-save)))
(use-package go-mod-ts-mode
:ensure nil
:mode
(("/go\\.mod\\'" . go-mod-ts-mode)
("/go\\.sum\\'" . go-mod-ts-mode))
:hook
((go-mod-ts-mode . lsp-deferred)
;; restart gopls only when go.mod/go.sum are saved (buffer-local)
(go-mod-ts-mode . (lambda ()
(add-hook 'after-save-hook
(lambda ()
(when (lsp-workspaces)
(lsp-restart-workspace)))
nil t)))))
(with-eval-after-load 'project
(add-to-list 'project-vc-extra-root-markers "go.mod"))
(with-eval-after-load 'lsp-mode
;; gopls settings (single source of truth)
(lsp-register-custom-settings
'(("gopls.staticcheck" t)
("gopls.gofumpt" t)
;; ("gopls.experimentalWorkspaceModule" t)
("gopls.expandWorkspaceToModule" t)
("gopls.directoryFilters" ["-vendor"])
("gopls.analyses.unusedparams" t)
("gopls.analyses.shadow" t)
("gopls.analyses.nilness" t)
("gopls.analyses.useany" t)
("gopls.env" ((GO111MODULE . "on"))))))
(with-eval-after-load 'flycheck
;; Usa golangci-lint in Go
(add-hook 'go-ts-mode-hook
(lambda ()
(setq-local flycheck-checker 'golangci-lint)
(setq-local flycheck-check-syntax-automatically '(save mode-enabled))
(flycheck-mode 1))))
(use-package dap-dlv-go
:after (dap-mode go-ts-mode))
(with-eval-after-load 'dap-dlv-go
;; Debug all tests in module
(dap-register-debug-template
"Go :: Debug all tests"
(list :type "go"
:request "launch"
:name "Go :: Debug all tests"
:mode "test"
:program "${workspaceFolder}"
:cwd "${workspaceFolder}"))
;; Debug tests in current package
(dap-register-debug-template
"Go :: Debug package tests"
(list :type "go"
:request "launch"
:name "Go :: Debug package tests"
:mode "test"
:program "${fileDirname}"
:cwd "${fileDirname}"))
;; Debug test at point
(dap-register-debug-template
"Go :: Debug test at point"
(list :type "go"
:request "launch"
:name "Go :: Debug test at point"
:mode "test"
:program "${fileDirname}"
:cwd "${fileDirname}"
:args (list "-test.run" "${input:testName}"))))
(add-hook 'dap-terminated-hook
(lambda (_)
(delete-other-windows)))

View File

@@ -0,0 +1,7 @@
;;; json.el -*- lexical-binding: t -*-
(use-package json-mode
:ensure t)
(provide 'json)
;;; json.el ends here

View File

@@ -0,0 +1,8 @@
;;; markdown.el -*- lexical-binding: t; -*-
(use-package markdown-mode
:ensure t
:mode ("README\\.md\\'" . gfm-mode)
:init (setq markdown-command "multimarkdown"))
(provide 'markdown)
;;; markdown.el ends here

View File

@@ -0,0 +1,46 @@
;;; org.el -*- lexical-binding: t; -*-
(use-package htmlize
:ensure t)
(use-package org
:init
(setq org-clock-mode-line-total 'today
org-fontify-quote-and-verse-blocks t
org-indent-mode t
org-return-follows-link t
org-startup-folded 'content
org-todo-keywords '((sequence "🆕(t)" "▶️(s)" "⏳(w)" "🔎(p)" "|" "✅(d)" "🗑(c)" "👨(g)")))
:config
(add-hook 'org-mode-hook 'org-indent-mode)
(add-hook 'org-mode-hook 'flyspell-mode))
(use-package org-bullets
:ensure t
:init
(setq org-bullets-bullet-list '("" "" "" "" ""))
:config
(add-hook 'org-mode-hook 'org-bullets-mode))
(use-package org-re-reveal
:ensure t
:init
(setq org-re-reveal-transition 'none
org-re-reveal-theme "dracula"))
(use-package ob-mermaid
:ensure t
:init
(setq ob-mermaid-cli-path "mmdc")
(org-babel-do-load-languages
'org-babel-load-languages
'((mermaid . t)
(scheme . t))))
;; Setting default directory for Org files
(setq org-directory "~/Remotes/pCloud/Org")
(provide 'org)
;;; org.el ends here

View File

@@ -0,0 +1,11 @@
(with-eval-after-load 'flycheck
(add-hook 'bash-ts-mode-hook 'flycheck-mode))
(use-package reformatter
:ensure t
:config
(reformatter-define shfmt-format
:program "shfmt"
:args '("-i" "2" "-ci")))
(add-hook 'bash-ts-mode-hook #'shfmt-format-on-save-mode)

View File

@@ -0,0 +1,8 @@
;;; yaml.el -*- lexical-binding: t; -*-
(use-package yaml-mode
:ensure t)
(provide 'yaml)
;;; yaml.el ends here

View File

@@ -0,0 +1,89 @@
;;functions to support syncing .elfeed between machines
;;makes sure elfeed reads index from disk before launching
(defun fscotto/elfeed-load-db-and-open ()
"Wrapper to load the elfeed db from disk before opening URL https://pragmaticemacs.wordpress.com/2016/08/17/read-your-rss-feeds-in-emacs-with-elfeed/
Created: 2016-08-17
Updated: 2025-06-13"
(interactive)
(elfeed)
(elfeed-db-load)
;; (elfeed-search-update--force)
(elfeed-update)
(elfeed-db-save))
(defun fscotto/project-root ()
"Return projectile project root or fallback to default-directory."
(if (featurep 'projectile)
(or (projectile-project-root) default-directory)
default-directory))
(defun fscotto/project-vterm ()
"Open vterm in project root."
(interactive)
(let ((default-directory (fscotto/project-root)))
(vterm)))
(defun fscotto/project-magit-status ()
"Open magit-status in project root."
(interactive)
(let ((default-directory (fscotto/project-root)))
(magit-status)))
(defun fscotto/magit-dispatch ()
"Load Magit if necessary and open magit-dispatch."
(interactive)
(require 'magit)
(call-interactively #'magit-dispatch))
(defun fscotto/disable-c-formatting ()
(setq-local lsp-enable-on-type-formatting nil))
;; Golang development support functions
(defun fscotto/go-format-on-save ()
"Format Go buffers on save using gofmt."
(add-hook 'before-save-hook #'lsp-format-buffer nil t))
(defun fscotto/go-mod-tidy ()
"Esegue go mod tidy nella root del progetto."
(interactive)
(let ((default-directory (project-root (project-current t))))
(compile "go mod tidy")))
(defun fscotto/go-mod-download ()
"Scarica i moduli Go."
(interactive)
(let ((default-directory (project-root (project-current t))))
(compile "go mod download")))
(defun fscotto/go-mod-after-save ()
(when (and (eq major-mode 'go-mod-ts-mode)
(lsp-workspaces))
(lsp-restart-workspace)))
(defun fscotto/go-test-package ()
"Run `go test` in the current package."
(interactive)
(let ((default-directory (project-root (project-current t))))
(compile "go test")))
(defun fscotto/go-test-module ()
"Run `go test ./...` in the current Go module."
(interactive)
(let ((default-directory (project-root (project-current t))))
(compile "go test ./...")))
(defun fscotto/go-test-current-test ()
"Run `go test -run` for the test at point."
(interactive)
(let* ((test-name (thing-at-point 'symbol t))
(default-directory (project-root (project-current t))))
(unless test-name
(user-error "No test name at point"))
(compile (format "go test -run '^%s$'" test-name))))
(defun fscotto/go-test-at-point ()
"Return Go test name at point."
(let ((sym (thing-at-point 'symbol t)))
(unless (and sym (string-prefix-p "Test" sym))
(user-error "No Go test at point"))
sym))

View File

@@ -0,0 +1,17 @@
;;; dashboard.el --- Startup dashboard -*- lexical-binding: t; -*-
(use-package dashboard
:ensure t
:init
(setq dashboard-startup-banner 'logo
dashboard-center-content t
dashboard-set-heading-icons t
dashboard-set-file-icons t
dashboard-items '((recents . 8)
(projects . 5)))
:config
(dashboard-setup-startup-hook))
(provide 'dashboard)
;;; misc-dashboard.el ends here

View File

@@ -0,0 +1,9 @@
;;; doom-modeline.el -*-
(use-package doom-modeline
:ensure t
:config
(setq doom-modeline-height 25
doom-modeline-bar-width 3
doom-modeline-project-detection 'projectile)
:init (doom-modeline-mode 1))

View File

@@ -0,0 +1,51 @@
;;; email.el -*-
(use-package mu4e
:ensure nil
;; :load-path "/usr/share/emacs/site-lisp/mu4e/"
:defer 20 ; Wait until 20 seconds after startup
:config
;; This is set to 't' to avoid mail syncing issues when using mbsync
(setq mu4e-change-filenames-when-moving t)
;; Refresh mail using isync every 10 minutes
(setq mu4e-update-interval (* 10 60))
(setq mu4e-get-mail-command "~/.emacs.d/scripts/email_sync.sh")
(setq mu4e-maildir "~/Maildir")
;; Configure email accounts
(setq mu4e-contexts
(list
;; Protonmail Account
(make-mu4e-context
:name "Protonmail"
:match-func
(lambda (msg)
(when msg
(string-prefix-p "/ProtonMailAccount" (mu4e-message-field msg :maildir))))
:vars '((user-mail-address . "fscottodisantolo@protonmail.com")
(user-full-name . "Fabio Scotto di Santolo")
(mu4e-drafts-folder . "/ProtonMailAccount/Drafts")
(mu4e-sent-folder . "/ProtonMailAccount/Sent")
(mu4e-refile-folder . "/ProtonMailAccount/All Mail")
(mu4e-trash-folder . "/ProtonMailAccount/Trash")))
;; iCloud Account
(make-mu4e-context
:name "iCloud Mail"
:match-func
(lambda (msg)
(when msg
(string-prefix-p "/iCloudAccount" (mu4e-message-field msg :maildir))))
:vars '((user-mail-address . "fscottodisantolo@icloud.com")
(user-full-name . "Fabio Scotto di Santolo")
(mu4e-drafts-folder . "/iCloudAccount/Drafts")
(mu4e-sent-folder . "/iCloudAccount/Sent Messages")
(mu4e-refile-folder . "/iCloudAccount/INBOX")
(mu4e-trash-folder . "/iCloudAccount/Junk")))))
(setq sendmail-program "/usr/bin/msmtp"
send-mail-function 'sendmail-send-it
message-sendmail-f-is-evil t
message-sendmail-extra-arguments '("--read-envelope-from")
message-send-mail-function 'message-send-mail-with-sendmail))

View File

@@ -0,0 +1,3 @@
(use-package nov
:ensure t
:mode ("\\.epub\\'" . nov-mode))

View File

@@ -0,0 +1,2 @@
(use-package i3wm-config-mode
:ensure t)

View File

@@ -0,0 +1,4 @@
(use-package pdf-tools
:ensure t
:config
(pdf-tools-install))

View File

@@ -0,0 +1,27 @@
;;; rss.el -*-
(use-package elfeed
:ensure t
:custom
(elfeed-enclosure-default-dir "~/Downloads/")
(elfeed-search-remain-on-entry t)
(elfeed-search-title-max-width 100)
(elfeed-search-title-min-width 30)
(elfeed-search-trailing-width 25)
(elfeed-show-truncate-long-urls t)
(elfeed-sort-order 'descending)
(elfeed-search-filter "+unread")
:hook
(elfeed-show-mode . visual-line-mode))
(use-package elfeed-org
:ensure t
:after elfeed
:custom
;; Optionally specify a number of files containing elfeed
;; configuration. If not set then the location below is used.
;; Note: The customize interface is also supported.
(rmh-elfeed-org-files (list "~/.emacs.d/elfeed.org")))
(with-eval-after-load 'elfeed
(elfeed-org))

View File

@@ -0,0 +1,4 @@
;;; terminal.el -*-
(use-package vterm
:ensure t)

View File

@@ -0,0 +1,16 @@
(use-package magit
:ensure t
:commands (magit-status magit-log)
:init
;; Entry point principale
(setq magit-display-buffer-function #'magit-display-buffer-fullframe-status-v1)
:config
;; Performance & UX
(setq magit-refresh-status-buffer nil)
(setq magit-repository-directories
'(("~/Projects" . 2)
("~/Work" . 2))))
(provide 'vcs)
;;; vcs.el ends here

View File

@@ -0,0 +1,161 @@
;;; which-key.el -*-
(use-package which-key
:ensure t
:defer 1
:config
(which-key-mode)
(setq which-key-idle-delay 0.45
which-key-idle-secondary-delay 0.05
which-key-max-display-columns 3
which-key-max-description-length 45))
(with-eval-after-load 'which-key
;; --------------------------------------------------------------------------
;; Top-level prefixes
;; --------------------------------------------------------------------------
(which-key-add-key-based-replacements
"C-c !" "Analyze"
"C-c o" "Open"
"C-c v" "Version control"
"C-c l" "LSP"
"C-c t" "TODO / Annotations"
"C-c b" "Buffers"
"C-c p" "Project"
"C-c d" "Debug"
"C-c g" "Git"
"C-c e" "Email / Elfeed")
;; --------------------------------------------------------------------------
;; Open (C-c o …)
;; --------------------------------------------------------------------------
(which-key-add-key-based-replacements
"C-c o f" "RSS (Elfeed)"
"C-c o m" "mu4e (Email Client)"
"C-c o T" "Terminal (vterm)")
;; --------------------------------------------------------------------------
;; Version control
;; --------------------------------------------------------------------------
(which-key-add-key-based-replacements
"C-c v g" "Magit status (legacy)")
(which-key-add-key-based-replacements
;; Core
"C-c g g" "Status"
"C-c g s" "Status"
;; "C-c g b" "Branch"
;; "C-c g c" "Commit"
"C-c g p" "Push / Pull"
"C-c g f" "Fetch"
"C-c g l" "Log"
"C-c g S" "Stash"
;; Files
"C-c g d" "Diff"
"C-c g D" "Diff (cached)"
"C-c g B" "Blame"
;; Rebase / Reset
"C-c g r" "Rebase"
"C-c g R" "Reset"
;; Remote
"C-c g y" "Show refs"
"C-c g o" "Browse remote")
;; --------------------------------------------------------------------------
;; Buffers
;; --------------------------------------------------------------------------
(which-key-add-key-based-replacements
"C-x C-b" "ibuffer")
;; --------------------------------------------------------------------------
;; TODO / hl-todo
;; --------------------------------------------------------------------------
(which-key-add-key-based-replacements
"C-t" "hl-todo"
"C-t p" "Previous TODO"
"C-t n" "Next TODO"
"C-t o" "Occur (list)"
"C-t i" "Insert TODO")
;; --------------------------------------------------------------------------
;; LSP (C-c l …)
;; --------------------------------------------------------------------------
(which-key-add-key-based-replacements
;; Navigation
"C-c l d" "Go to definition"
"C-c l D" "Go to type definition"
"C-c l i" "Go to implementation"
;; Symbols / diagnostics
"C-c l s" "Workspace symbols"
"C-c l e" "Diagnostics"
;; Actions
"C-c l a" "Code actions"
"C-c l r" "Rename symbol"
"C-c l f" "Format buffer"
;; Control
"C-c l R" "Restart workspace")
;; --------------------------------------------------------------------------
;; Elfeed modes
;; --------------------------------------------------------------------------
(which-key-add-key-based-replacements
"w" "Yank"
"R" "Update feeds"
"q" "Quit")
;; --------------------------------------------------------------------------
;; Debug / DAP
;; --------------------------------------------------------------------------
(which-key-add-key-based-replacements
"C-c d d" "Start debug session"
"C-c d b" "Toggle breakpoint")
;; "C-c d c" "Continue"
;; "C-c d n" "Next"
;; "C-c d i" "Step in"
;; "C-c d o" "Step out")
;; --------------------------------------------------------------------------
;; Project (future)
;; --------------------------------------------------------------------------
(which-key-add-key-based-replacements
;; Core
"C-c p p" "Switch project"
"C-c p f" "Find file"
"C-c p d" "Find directory"
"C-c p b" "Switch buffer"
"C-c p k" "Kill project buffers"
"C-c p r" "Recent files"
;; Search
"C-c p s" "Search"
"C-c p s g" "Grep (ripgrep)"
"C-c p s r" "Replace in project"
;; Actions
"C-c p c" "Compile"
"C-c p t" "Test"
"C-c p v" "Open term in project"
"C-c p e" "Edit project config"
"C-c p g" "Project Git status"
"C-c p x" "Open Terminal"
"C-c p 4" "Other Window"
"C-c p 5" "Other Frame"
"C-c p x 4" "Other Window"
;; Cache
"C-c p i" "Invalidate cache")
;; --------------------------------------------------------------------------
;; Cleanup annoying +prefix
;; --------------------------------------------------------------------------
(which-key-add-key-based-replacements
"+prefix" "Prefix"
"+lsp" "LSP"
"+debug" "Debug"
"+project" "Project"))

View File

@@ -0,0 +1,63 @@
;;; completion.el -*- lexical-binding: t; -*-
(use-package ivy
:ensure t
:config
(ivy-mode 1))
(use-package consult
:ensure t
:defer t)
(use-package company
:ensure t
:custom
(company-tooltip-align-annotations 't)
(company-minimum-prefix-length 1)
(company-idle-delay 0.1)
:hook (prog-mode . company-mode))
(with-eval-after-load 'company
(add-hook 'bash-ts-mode-hook 'company-mode))
;; Static analysis for code base
(use-package flycheck
:ensure t
:hook (prog-mode . flycheck-mode)
:config
(setq flycheck-check-syntax-automatically '(save mode-enabled)))
;; Snippets
(use-package yasnippet
:ensure t
:config
(setq yas/root-directory
(list "~/.emacs.d/snippets") yas-indent-line 'fixed)
(yas-global-mode))
(use-package orderless
:ensure t
:custom
(completion-styles '(orderless basic))
(completion-category-overrides '((file (styles partial-completion))))
(completion-pcm-leading-wildcard t)
:config
(setq ivy-re-builders-alist '((t . orderless-ivy-re-builder)))
(add-to-list 'ivy-highlight-functions-alist '(orderless-ivy-re-builder . orderless-ivy-highlight)))
(defun just-one-face (fn &rest args)
(let ((orderless-match-faces [completions-common-part]))
(apply fn args)))
(advice-add 'company-capf--candidates :around #'just-one-face)
(use-package smartparens
:ensure smartparens ;; install the package
:hook (prog-mode text-mode markdown-mode) ;; add `smartparens-mode` to these hooks
:config
;; load default config
(require 'smartparens-config))
(provide 'completion)
;;; completion.el ends here

View File

@@ -0,0 +1,24 @@
(use-package dap-mode
:ensure t
:after lsp-mode
:hook (lsp-mode . dap-mode)
:init
;; Enabling only some features
(setq dap-auto-configure-features '(sessions locals expressions repl))
:config
(dap-mode 1)
(dap-ui-mode 1)
(dap-ui-controls-mode 1)
;; Auto show breakpoints + REPL
(setq dap-ui-buffer-configurations
'(;; RIGHT SIDE — Debug data (like IntelliJ)
(dap-ui-locals . ((side . right) (slot . 1) (window-width . 0.30)))
(dap-ui-sessions . ((side . right) (slot . 2) (window-width . 0.30)))
(dap-ui-expressions . ((side . right) (slot . 3) (window-width . 0.30)))
;; BOTTOM — Console / REPL
(dap-ui-repl . ((side . bottom) (slot . 1) (window-height . 0.25)))
(dap-ui-console . ((side . bottom) (slot . 2) (window-height . 0.25)))))
;; Loading DAP adapters
;; For Python
(require 'dap-python)
(setq dap-python-debugger 'debugpy))

View File

@@ -0,0 +1,49 @@
;;; lsp.el -*- lexical-binding: t; -*-
(use-package lsp-mode
:ensure t
:commands (lsp lsp-deferred)
:hook
((c-mode
c-ts-mode
c++-mode
c++-ts-mode
python-mode
python-ts-mode
sh-mode
bash-ts-mode) . lsp-deferred)
:config
;; Performance
(setq lsp-enable-symbol-highlighting t
lsp-enable-snippet t
lsp-log-io nil
lsp-modeline-code-actions-enable nil
lsp-modeline-diagnostics-enable nil
lsp-signature-auto-activate nil
lsp-enable-on-type-formatting nil
lsp-completion-provider :capf
lsp-diagnostics-provider :flycheck
lsp-headerline-breadcrumb-enable nil
lsp-enable-indentation nil
;; Disable for huge projects
lsp-enable-file-watchers nil
lsp-idle-delay 0.5))
(use-package lsp-ui
:ensure t
:config
(setq lsp-ui-doc-enable t
lsp-ui-doc-delay 0.3
lsp-ui-sideline-enable t
lsp-ui-sideline-show-code-actions t))
(use-package consult-lsp
:ensure t
:after (consult lsp-mode)
:commands
(consult-lsp-symbols
consult-lsp-diagnostics))
(provide 'lsp)
;;; lsp.el ends here

View File

@@ -0,0 +1,25 @@
;;; project.el - lexical-binding *-*
(use-package projectile
:ensure t
:defer 1
:init
;; Root detection
(setq projectile-project-search-path '("~/Projects" "~/Work"))
(setq projectile-completion-system 'ivy)
:config
;; Performance
(setq projectile-enable-caching t)
(setq projectile-indexing-method 'hybrid)
(setq projectile-sort-order 'recently-active)
;; Projectile as single source of truth
(setq projectile-switch-project-action #'projectile-dired)
;; Use ripgrep if available
(when (executable-find "rg")
(setq projectile-generic-command "rg --files --hidden --glob '!.git'"))
;; Enable globally
(projectile-mode 1))
(provide 'project)
;;; project.el ends here

View File

@@ -0,0 +1,29 @@
;;; treesitter.el -*- lexical-binding: t; -*-
(use-package treesit
:ensure nil
:config
(setq treesit-font-lock-level 4)
(setq treesit-auto-install t)
(setq major-mode-remap-alist
'((c-mode . c-ts-mode)
(c++-mode . c++-ts-mode)
(go-mode . go-ts-mode)
(go-mod-mode . go-mod-ts-mode)
(python-mode . python-ts-mode)
(sh-mode . bash-ts-mode)))
(setq treesit-language-source-alist
'((bash "https://github.com/tree-sitter/tree-sitter-bash")
(c "https://github.com/tree-sitter/tree-sitter-c")
(cpp "https://github.com/tree-sitter/tree-sitter-cpp")
(dockerfile "https://github.com/camdencheek/tree-sitter-dockerfile")
(go "https://github.com/tree-sitter/tree-sitter-go")
(gomod "https://github.com/camdencheek/tree-sitter-go-mod")
(js "https://github.com/tree-sitter/tree-sitter-javascript")
(json "https://github.com/tree-sitter/tree-sitter-json")
(node "https://github.com/tree-sitter/node-tree-sitter")
(python "https://github.com/tree-sitter/tree-sitter-python"))))
(provide 'treesitter)
;;; treesitter.el ends here

10
emacs/.emacs.d/recentf Normal file
View File

@@ -0,0 +1,10 @@
;;; Automatically generated by recentf on Fri Jan 2 14:42:01 2026.
(setq recentf-list 'nil)
(setq recentf-filter-changer-current 'nil)
;; Local Variables:
;; coding: utf-8-emacs
;; End:

View File

@@ -0,0 +1,3 @@
func main() {
$0
}

View File

@@ -0,0 +1 @@
fmt.Printf("%v\n", $0)

View File

@@ -0,0 +1,23 @@
func Test$0 {
tests := []struct {
name string
req string
expected string
}{
{
name: "happy path",
req: "answer to life, the universe and everything"
expected: "42"
}
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
actual := foo(t, tt.req)
assertEquals(t, tt.want, expected)
})
}
}

View File

@@ -0,0 +1,3 @@
#name : author
# --
@author <a href="mailto:torstein@skybert.net">Torstein Krause Johansen</a>$0

View File

@@ -0,0 +1,6 @@
#name : debug
# --
if (mLogger.isDebugEnabled()) {
mLogger.debug(String.format("${1:result}=%s", ${2:result}));
}
$0

View File

@@ -0,0 +1,31 @@
#name : dwmain
# --
package ${1:net.skybert.dw};
import io.dropwizard.Application;
import io.dropwizard.assets.AssetsBundle;
import io.dropwizard.configuration.SubstitutingSourceProvider;
import io.dropwizard.jetty.ConnectorFactory;
import io.dropwizard.jetty.HttpConnectorFactory;
import io.dropwizard.lifecycle.Managed;
import io.dropwizard.server.DefaultServerFactory;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
/**
* Main
*/
public class Main extends Application<${2:SkybertConf}> {
public static void main(final String[] args) throws Exception {
new Main().run(args);
}
@Override
public void run(
final $2 pConfiguration,
final Environment pEnvironment)
throws Exception {
$0
}
}

View File

@@ -0,0 +1,5 @@
#name : new method/function
# --
${1:public} ${2:void} ${3:update}(final ${4:String} ${5:pName}) {
$0
}

View File

@@ -0,0 +1,5 @@
#name : for (...; ...; ...) { ... }
# --
for (${1:Object} ${downcase-word 1} ; ${2:list}) {
$0
}

View File

@@ -0,0 +1,5 @@
#name : for loop with index
# --
for (int ${1:i} = 0; $1 < ${2:args.length}; $1${3:++}) {
$0
}

View File

@@ -0,0 +1,13 @@
#name : get/set/member variable
# --
private ${1:String} ${2:name};
public void set${2:$(capitalize text)}(final $1 p${2:$(capitalize text)}) {
$2 = p${2:$(capitalize text)};
}
public $1 get${2:$(capitalize text)}() {
return $2;
}
$0

View File

@@ -0,0 +1,6 @@
#name : if
# --
if (${1:result} ${2:!=} ${3:null}) {
$0
}

View File

@@ -0,0 +1,4 @@
#name : static import of isBlank
# --
import static org.apache.commons.lang.StringUtils.isBlank;
$0

View File

@@ -0,0 +1,21 @@
#name : junitwrapperfns
# --
private void assertTrue(final String pMessage, final boolean pConditition) {
Assertions.assertTrue(pConditition, pMessage);
}
private void assertFalse(final String pMessage, final boolean pConditition) {
Assertions.assertFalse(pConditition, pMessage);
}
private void assertNotNull(final String pMessage, final Object pActual) {
Assertions.assertNotNull(pActual, pMessage);
}
private void assertNull(final String pMessage, final Object pActual) {
Assertions.assertNull(pActual, pMessage);
}
private void assertEquals(final String pMessage, final Object pExpected, final Object pActual) {
Assertions.assertEquals(pExpected, pActual, pMessage);
}

View File

@@ -0,0 +1,5 @@
#name : main
# --
public static void main(String[] args) {
$0
}

View File

@@ -0,0 +1,3 @@
#name : np
# --
// NOPMD

View File

@@ -0,0 +1,3 @@
#name : get ObjectLoader
# --
$0ObjectLoader objectLoader = IOAPI.getAPI().getObjectLoader();

View File

@@ -0,0 +1,6 @@
#name : req
# --
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create($0))
.timeout(Duration.ofMillis(getResponseTimeout()))
.build();

View File

@@ -0,0 +1,3 @@
#name : res
# --
HttpResponse<String> response = mHttpClient.send(request, ofString());$0

View File

@@ -0,0 +1,3 @@
#name : sf
# --
String.format("%s", $0)

View File

@@ -0,0 +1,3 @@
#name : System.out.println
# --
System.out.println($0);

View File

@@ -0,0 +1,4 @@
@Test
void ${1:can}() throws Exception {
$0
}

View File

@@ -0,0 +1,12 @@
#name : try, catch & finally
# --
try {
$0
}
catch (${1:Exception} ${2:e}) {
mLogger.error($2);
}
finally {
}

View File

@@ -0,0 +1,8 @@
#name : try & catch
# --
try {
$0
}
catch (${1:Exception} ${2:e}) {
mLogger.error($2);
}

View File

@@ -0,0 +1,4 @@
#name : new array
# --
var ${1:myArray} = new Array();
$0

View File

@@ -0,0 +1,6 @@
#name : function
# --
function ${1:test}(${2:pValue}) {
$0
}

View File

@@ -0,0 +1,5 @@
#name : for (...; ...; ...) { ... }
# --
for (var ${1:i} = 0; $1 < ${2:args.length}; $1${3:++}) {
$0
}

View File

@@ -0,0 +1,6 @@
#name : if
# --
if (${1:s} == ${2:undefined}) {
$0
}

View File

@@ -0,0 +1,3 @@
#name : log
# --
console.log("$0");

View File

@@ -0,0 +1,3 @@
#name : a
# --
[${1}](${2})${0}

View File

@@ -0,0 +1,9 @@
#name : img snippet
# --
<img
class="centered"
src="${1:foo.png}"
alt="${2:alt img text}"
/>
$0

View File

@@ -0,0 +1,3 @@
# name : me
# --
[@skybert](https://skybert.net) ${1:says:}$0

View File

@@ -0,0 +1,17 @@
#name : pelican article
# --
title: ${1:`(s-replace "-" " " (file-name-base (buffer-file-name)))`}
date: ${2:`(format-time-string "%Y-%m-%d" (current-time))`}
category: ${3:`(file-name-nondirectory
(substring
(file-name-directory (buffer-file-name))
0
(- (length (file-name-directory (buffer-file-name))) 1)
))`}
tags: ${4:`(file-name-nondirectory
(substring
(file-name-directory (buffer-file-name))
0
(- (length (file-name-directory (buffer-file-name))) 1)
))`}
$0

View File

@@ -0,0 +1,6 @@
#name : src code snippet
# --
\`\`\`${1:text}
$0
\`\`\`

View File

@@ -0,0 +1,4 @@
#name : strong element
# --
<strong>${1:text}</strong>$0

View File

@@ -0,0 +1,3 @@
#name: cdata
# --
<![CDATA[$0]]>

View File

@@ -0,0 +1,8 @@
#name : cha
# --
<chapter xml:id="t_${1:$(replace-regexp-in-string " " "_" (downcase text))}">
<title>${1:My Title}</title>
<para>
$0
</para>
</chapter>

View File

@@ -0,0 +1,7 @@
#name : dep
# --
<dependency>
<groupId>$1</groupId>
<artifactId>$2</artifactId>
<version>$0</version>
</dependency>

View File

@@ -0,0 +1,10 @@
#name : diary
# --
<!--#include virtual="/ssi/header.shtml" -->
<h1>$1</h1>
<div id="main">
<p>
$0
</p>
</div>
<!--#include virtual="/ssi/footer.shtml" -->

View File

@@ -0,0 +1,6 @@
#name : exclusion
# --
<exclusion>
<groupId>$1</groupId>
<artifactId>$2</artifactId>
</exclusion>$0

View File

@@ -0,0 +1,8 @@
#name : exclusions
# --
<exclusions>
<exclusion>
<groupId>$1</groupId>
<artifactId>$2</artifactId>
</exclusion>$0
</exclusions>

View File

@@ -0,0 +1,3 @@
#name : incvar
# --
<xi:include href="local-variables.ebk" xpointer="${1:l-product-um}"/>$0

View File

@@ -0,0 +1,10 @@
#name : list
# --
<itemizedlist>
<listitem>
<para>
$0
</para>
</listitem>
</itemizedlist>

View File

@@ -0,0 +1,4 @@
#name : listi
# --
<listitem><para>$0</para></listitem>

View File

@@ -0,0 +1,3 @@
#name : lit
# --
<literal>$0</literal>

View File

@@ -0,0 +1,5 @@
#name : ol with a li
# --
<ol>
<li>$0</li>
</ol>

View File

@@ -0,0 +1,5 @@
#name : para
# --
<para>
$0
</para>

Some files were not shown because too many files have changed in this diff Show More