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:
1
home/develop/emacs/snippets/latex-mode/.yas-parents
Normal file
1
home/develop/emacs/snippets/latex-mode/.yas-parents
Normal file
@@ -0,0 +1 @@
|
||||
text-mode
|
||||
8
home/develop/emacs/snippets/latex-mode/begin
Normal file
8
home/develop/emacs/snippets/latex-mode/begin
Normal file
@@ -0,0 +1,8 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: begin
|
||||
# key: begin
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
\begin{${1:environment}}
|
||||
$0
|
||||
\end{$1}
|
||||
12
home/develop/emacs/snippets/latex-mode/cols
Normal file
12
home/develop/emacs/snippets/latex-mode/cols
Normal file
@@ -0,0 +1,12 @@
|
||||
# -*- mode: snippet -*-
|
||||
# name: cols
|
||||
# key: cols
|
||||
# --
|
||||
\begin{columns}
|
||||
\begin{column}{${1:.5}\linewidth}
|
||||
column 1
|
||||
\end{column}
|
||||
\begin{column}{${2:.5}\linewidth}
|
||||
column 2
|
||||
\end{column}
|
||||
\end{columns}
|
||||
8
home/develop/emacs/snippets/latex-mode/enumerate
Normal file
8
home/develop/emacs/snippets/latex-mode/enumerate
Normal file
@@ -0,0 +1,8 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: enumerate
|
||||
# key: enumerate
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
\begin{enumerate}
|
||||
\item $0
|
||||
\end{enumerate}
|
||||
9
home/develop/emacs/snippets/latex-mode/figure
Normal file
9
home/develop/emacs/snippets/latex-mode/figure
Normal file
@@ -0,0 +1,9 @@
|
||||
# -*- mode: snippet -*-
|
||||
# name: figure
|
||||
# key: figure
|
||||
# --
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\includegraphics[${1:options}]{figures/${2:path.pdf}}
|
||||
\caption{\label{fig:${3:label}} $0}
|
||||
\end{figure}
|
||||
10
home/develop/emacs/snippets/latex-mode/frame
Normal file
10
home/develop/emacs/snippets/latex-mode/frame
Normal file
@@ -0,0 +1,10 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: frame
|
||||
# key: frame
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
% ------------------------------------------------------------------------------
|
||||
|
||||
\begin{frame}{${1:title}}
|
||||
|
||||
\end{frame}
|
||||
5
home/develop/emacs/snippets/latex-mode/ho
Normal file
5
home/develop/emacs/snippets/latex-mode/ho
Normal file
@@ -0,0 +1,5 @@
|
||||
# -*- mode: snippet -*-
|
||||
# name: ho
|
||||
# key: ho
|
||||
# --
|
||||
% ---[ $1 ]-------------------------------------------------
|
||||
6
home/develop/emacs/snippets/latex-mode/hr
Normal file
6
home/develop/emacs/snippets/latex-mode/hr
Normal file
@@ -0,0 +1,6 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: hr
|
||||
# key: hr
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
% `(make-string (- 80 (current-column)) ?-)`
|
||||
6
home/develop/emacs/snippets/latex-mode/hrr
Normal file
6
home/develop/emacs/snippets/latex-mode/hrr
Normal file
@@ -0,0 +1,6 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: hrr
|
||||
# key: hrr
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
% ==============================================================================
|
||||
9
home/develop/emacs/snippets/latex-mode/hrx
Normal file
9
home/develop/emacs/snippets/latex-mode/hrx
Normal file
@@ -0,0 +1,9 @@
|
||||
# -*- mode: snippet -*-
|
||||
# name: hrx
|
||||
# key: hrx
|
||||
# --
|
||||
% %
|
||||
%% %%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%% %%
|
||||
% %
|
||||
5
home/develop/emacs/snippets/latex-mode/hx
Normal file
5
home/develop/emacs/snippets/latex-mode/hx
Normal file
@@ -0,0 +1,5 @@
|
||||
# -*- mode: snippet -*-
|
||||
# name: hx
|
||||
# key: hx
|
||||
# --
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
8
home/develop/emacs/snippets/latex-mode/itemize
Normal file
8
home/develop/emacs/snippets/latex-mode/itemize
Normal file
@@ -0,0 +1,8 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: itemize
|
||||
# key: itemize
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
\begin{itemize}
|
||||
\item $0
|
||||
\end{itemize}
|
||||
5
home/develop/emacs/snippets/latex-mode/modeline-de_DE
Normal file
5
home/develop/emacs/snippets/latex-mode/modeline-de_DE
Normal file
@@ -0,0 +1,5 @@
|
||||
# -*- mode: snippet -*-
|
||||
# name: emacs modeline de_DE dictionary
|
||||
# key: modeline
|
||||
# --
|
||||
% -*- mode: latex; mode: flyspell; ispell-local-dictionary: "de_DE"; coding: utf-8 -*-
|
||||
5
home/develop/emacs/snippets/latex-mode/noex
Normal file
5
home/develop/emacs/snippets/latex-mode/noex
Normal file
@@ -0,0 +1,5 @@
|
||||
# -*- mode: snippet -*-
|
||||
# name: noex
|
||||
# key: noex
|
||||
# --
|
||||
\tikzset{external/export=false}
|
||||
6
home/develop/emacs/snippets/latex-mode/noexternal
Normal file
6
home/develop/emacs/snippets/latex-mode/noexternal
Normal file
@@ -0,0 +1,6 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: noexternal
|
||||
# key: noexternal
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
\tikzset{external/export=false}
|
||||
73
home/develop/emacs/snippets/latex-mode/template
Normal file
73
home/develop/emacs/snippets/latex-mode/template
Normal file
@@ -0,0 +1,73 @@
|
||||
# -*- mode: snippet; require-final-newline: nil -*-
|
||||
# name: template
|
||||
# key: template
|
||||
# binding: direct-keybinding
|
||||
# --
|
||||
% -*- mode: latex; mode: flyspell; ispell-local-dictionary: "en_US"; coding: utf-8 -*-
|
||||
|
||||
\documentclass[a4paper,12pt,twoside]{scrartcl}
|
||||
|
||||
\setlength\overfullrule{14pt} % this enables big black bars on overlong lines.
|
||||
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[T1]{fontenc}
|
||||
|
||||
\usepackage{lmodern}
|
||||
\usepackage[english]{babel}
|
||||
|
||||
\title{${1:title}}
|
||||
\author{${2:Timo Bingmann}}
|
||||
|
||||
% small margin
|
||||
\usepackage[tmargin=20mm,bmargin=20mm,lmargin=20mm,rmargin=20mm]{geometry}
|
||||
|
||||
% set default paragraph skip and indention
|
||||
\setlength\parskip{\smallskipamount}
|
||||
\setlength\parindent{0pt}
|
||||
|
||||
% math support
|
||||
\usepackage{amsmath,amssymb,array,mathtools}
|
||||
|
||||
% smaller enumerations
|
||||
\usepackage{enumitem}
|
||||
\setlist[enumerate]{topsep=\smallskipamount,parsep=0pt}
|
||||
\setlist[itemize]{topsep=\smallskipamount,parsep=0pt}
|
||||
\setlist[enumerate,1]{topsep=\smallskipamount,parsep=0pt,label=(\roman*)}
|
||||
|
||||
% for graphics
|
||||
\usepackage{graphicx}
|
||||
|
||||
% for nice graphics
|
||||
\usepackage{tikz}
|
||||
\usetikzlibrary{calc}
|
||||
|
||||
% Hyperref
|
||||
\usepackage{xcolor,hyperref}
|
||||
|
||||
\hypersetup{
|
||||
colorlinks=true,
|
||||
pdfborder={0 0 0},
|
||||
bookmarksopen=true,
|
||||
bookmarksopenlevel=1,
|
||||
bookmarksnumbered=true,
|
||||
linkcolor=blue!60!black,
|
||||
%linkcolor=black,
|
||||
urlcolor=blue!60!black,
|
||||
filecolor=green!60!black,
|
||||
citecolor=blue!60!black,
|
||||
pdfpagemode=UseNone,
|
||||
unicode=true,
|
||||
setpagesize=false,
|
||||
bookmarksdepth=subsection,
|
||||
pdftitle={$1},
|
||||
pdfauthor={$2},
|
||||
pdfsubject={},
|
||||
}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
|
||||
$0
|
||||
|
||||
\end{document}
|
||||
Reference in New Issue
Block a user