home/develop/emacs: add yasnippet snippets and make snippet dirs configurable
This commit makes two significant changes to the Emacs configuration:
1. Refactors emacs.nix to use proper NixOS module structure:
- Converts from simple configuration to a module with options/config
- Adds `tb.emacs.extraSnippetDirs` option to allow per-machine snippet
directories (defaults to ~/.emacs.d/snippets/)
- Moves yasnippet configuration from custom.el to nix-generated elisp,
enabling dynamic snippet directory configuration via Nix
2. Adds a comprehensive collection of yasnippet snippets for multiple modes:
- C++ mode: 50 snippets for common patterns (class, namespace, operators,
copy/move semantics, debug helpers, documentation, threading primitives)
- CC mode (shared C/C++): for, switch, main, include guards, etc.
- CMake mode: if/else, foreach, function, macro, project boilerplate
- LaTeX mode: document structure, beamer frames, figures, lists
- Perl mode: package boilerplate, shebang
- Python/Shell/Nix/Protobuf/Java/CSS/Dockerfile modes: horizontal rules
and common patterns
- Text mode: modeline snippets for locale settings
The snippets use yasnippet's inheritance system via .yas-parents files,
so c++-mode inherits from cc-mode and text-mode, reducing duplication.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
6
home/develop/emacs/snippets/cc-mode/c
Normal file
6
home/develop/emacs/snippets/cc-mode/c
Normal file
@@ -0,0 +1,6 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: c
|
||||
# key: c
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
/* $1 */
|
||||
7
home/develop/emacs/snippets/cc-mode/cc
Normal file
7
home/develop/emacs/snippets/cc-mode/cc
Normal file
@@ -0,0 +1,7 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: cc
|
||||
# key: cc
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
/** $1
|
||||
*/
|
||||
6
home/develop/emacs/snippets/cc-mode/comment-spacerline
Normal file
6
home/develop/emacs/snippets/cc-mode/comment-spacerline
Normal file
@@ -0,0 +1,6 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: comment-spacerline
|
||||
# key: ***
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
/******************************************************************************/
|
||||
8
home/develop/emacs/snippets/cc-mode/for
Normal file
8
home/develop/emacs/snippets/cc-mode/for
Normal file
@@ -0,0 +1,8 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: for
|
||||
# key: for
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
for ($1) {
|
||||
$0
|
||||
}
|
||||
7
home/develop/emacs/snippets/cc-mode/fori
Normal file
7
home/develop/emacs/snippets/cc-mode/fori
Normal file
@@ -0,0 +1,7 @@
|
||||
# -*- mode: snippet -*-
|
||||
# name: fori
|
||||
# key: fori
|
||||
# --
|
||||
for (${1:std::size_t} ${2:i} = ${3:0}; $2 ${4:!= size()}; ++$2) {
|
||||
$0
|
||||
}
|
||||
10
home/develop/emacs/snippets/cc-mode/guard
Normal file
10
home/develop/emacs/snippets/cc-mode/guard
Normal file
@@ -0,0 +1,10 @@
|
||||
# -*- mode: snippet -*-
|
||||
# name: guard
|
||||
# key: guard
|
||||
# --
|
||||
#ifndef ${1:NAME}_HEADER
|
||||
#define $1_HEADER
|
||||
|
||||
$0
|
||||
|
||||
#endif // $1_HEADER
|
||||
6
home/develop/emacs/snippets/cc-mode/in
Normal file
6
home/develop/emacs/snippets/cc-mode/in
Normal file
@@ -0,0 +1,6 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: in
|
||||
# key: in
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
#include <$0>
|
||||
6
home/develop/emacs/snippets/cc-mode/inc
Normal file
6
home/develop/emacs/snippets/cc-mode/inc
Normal file
@@ -0,0 +1,6 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: inc
|
||||
# key: inc
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
#include "$0"
|
||||
9
home/develop/emacs/snippets/cc-mode/main
Normal file
9
home/develop/emacs/snippets/cc-mode/main
Normal file
@@ -0,0 +1,9 @@
|
||||
# -*- mode: snippet -*-
|
||||
# name: main
|
||||
# key: main
|
||||
# --
|
||||
int main(${1:int argc, char *argv[]})
|
||||
{
|
||||
$0
|
||||
return 0;
|
||||
}
|
||||
5
home/develop/emacs/snippets/cc-mode/packed
Normal file
5
home/develop/emacs/snippets/cc-mode/packed
Normal file
@@ -0,0 +1,5 @@
|
||||
# -*- mode: snippet -*-
|
||||
# name: packed
|
||||
# key: packed
|
||||
# --
|
||||
__attribute__((__packed__))$0
|
||||
11
home/develop/emacs/snippets/cc-mode/switch
Normal file
11
home/develop/emacs/snippets/cc-mode/switch
Normal file
@@ -0,0 +1,11 @@
|
||||
# -*- mode: snippet -*-
|
||||
# name: switch
|
||||
# key: case
|
||||
# --
|
||||
switch (${1:ch}) {
|
||||
case ${2:const}:
|
||||
${3:a = b};
|
||||
break;
|
||||
${4:default:
|
||||
${5:action}}
|
||||
}
|
||||
Reference in New Issue
Block a user