91 lines
2.9 KiB
Nix
91 lines
2.9 KiB
Nix
{ lib, pkgs }:
|
|
let
|
|
mkSnippet = prefix: description: body: mkSnippet' prefix description body { };
|
|
mkSnippet' = prefix: description: body: { autotrigger ? false }: {
|
|
inherit prefix description body;
|
|
luasnip = {
|
|
inherit autotrigger;
|
|
};
|
|
};
|
|
|
|
snippets = {
|
|
nix = {
|
|
Sha256Dummy = mkSnippet "sha256" "Dummy SHA256 hash" "sha256 = \"0000000000000000000000000000000000000000000000000000\";";
|
|
} // (lib.mapAttrs
|
|
(name: _:
|
|
let
|
|
upperName = (lib.toUpper (builtins.substring 0 1 name))
|
|
+ (builtins.substring 1 (builtins.stringLength name - 1) name);
|
|
in
|
|
mkSnippet "${name}Phase" "${name}Phase skeleton" ''
|
|
${name}Phase = '''
|
|
runHook pre${upperName}
|
|
$1
|
|
runHook post${upperName}
|
|
''';'')
|
|
(builtins.listToAttrs
|
|
(map
|
|
(name: lib.nameValuePair name { })
|
|
[ "unpack" "configure" "build" "install" ])));
|
|
rust = {
|
|
DisplayTrait = mkSnippet "disp" "Display trait implentation" ''
|
|
impl fmt::Display for ''${1:Struct} {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
write!(f, "$2", $3)
|
|
}
|
|
}$0'';
|
|
};
|
|
tex = {
|
|
Section = mkSnippet "s" "Section" ''
|
|
\section{$1}
|
|
|
|
'';
|
|
SubSection = mkSnippet "ss" "Subsection" ''
|
|
\subsection{$1}
|
|
|
|
'';
|
|
SubSubSection = mkSnippet "sss" "Subsubsection" ''
|
|
\subsubsection{$1}
|
|
|
|
'';
|
|
# Math
|
|
QuadraticFormula = mkSnippet
|
|
"qf"
|
|
"Quadratic formula (user is responsible for parentheses)"
|
|
''\frac{-''${2:b} \pm \sqrt{$2^2 - 4 \cdot ''${1:a} \cdot ''${3:c}}}{2 \cdot $1}$0'';
|
|
AlignedEnv = mkSnippet "aligned" "aligned environment (in math mode)" ''
|
|
\begin{aligned}
|
|
$1 &= $0 \\\\
|
|
\end{aligned}'';
|
|
SiUnit = mkSnippet
|
|
"si"
|
|
"Insert SI unit (only works with simple numbers)"
|
|
''\SI{''${1:amount}}{''${2:unit}}'';
|
|
MultiplicationSign = mkSnippet' "·" "Insert multiplication sign" ''\cdot $0'' { autotrigger = true; };
|
|
Fraction = mkSnippet' "//" "Fraction" ''\frac{$1}{$2}$0'' { autotrigger = true; };
|
|
};
|
|
};
|
|
|
|
snippetsIndex = pkgs.writeTextDir "package.json" (builtins.toJSON {
|
|
contributes.snippets = lib.mapAttrs
|
|
(id: language: { inherit language; path = "./snippets/${id}.json"; })
|
|
{
|
|
nix = [ "nix" ];
|
|
rust = [ "rust" ];
|
|
tex = [ "tex" ];
|
|
};
|
|
});
|
|
|
|
snippetsDir = pkgs.symlinkJoin {
|
|
name = "luasnip-snippets";
|
|
paths = (lib.mapAttrsToList
|
|
(ft: content: pkgs.writeTextDir "snippets/${ft}.json" (builtins.toJSON content))
|
|
snippets) ++ (lib.singleton snippetsIndex);
|
|
};
|
|
in
|
|
pkgs.writeText "snippets.lua" ''
|
|
require("luasnip/loaders/from_vscode").load({ paths = { '${snippetsDir}' } })
|
|
|
|
require("luasnip/loaders/from_vscode").lazy_load() -- other snippets
|
|
''
|