2021-11-03 14:10:54 +01:00
|
|
|
|
{ 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" ''
|
2021-11-12 13:10:07 +01:00
|
|
|
|
${name}Phase = '''
|
|
|
|
|
runHook pre${upperName}
|
|
|
|
|
$1
|
|
|
|
|
runHook post${upperName}
|
|
|
|
|
''';'')
|
2021-11-03 14:10:54 +01:00
|
|
|
|
(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; };
|
|
|
|
|
};
|
2023-06-02 13:12:10 +02:00
|
|
|
|
java = {
|
|
|
|
|
CheckEmptyString = mkSnippet "chke" "Check for empty string" ''
|
|
|
|
|
if (''${1:var}.isEmpty()) {
|
|
|
|
|
throw new IllegalArgumentException("$1 can’t be empty");
|
|
|
|
|
}$0'';
|
|
|
|
|
CheckNull = mkSnippet "chkn" "Check for null" ''
|
|
|
|
|
if (''${1:var} == null) {
|
|
|
|
|
throw new NullPointerException("$1 can’t be null");
|
|
|
|
|
}$0'';
|
|
|
|
|
};
|
2021-11-03 14:10:54 +01:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
snippetsIndex = pkgs.writeTextDir "package.json" (builtins.toJSON {
|
|
|
|
|
contributes.snippets = lib.mapAttrs
|
|
|
|
|
(id: language: { inherit language; path = "./snippets/${id}.json"; })
|
|
|
|
|
{
|
2023-06-02 13:12:10 +02:00
|
|
|
|
java = [ "java" ];
|
2021-11-03 14:10:54 +01:00
|
|
|
|
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
|
|
|
|
|
''
|