diff options
| author | Natasha Moongrave <natasha@256phi.eu> | 2026-04-28 20:57:57 +0200 |
|---|---|---|
| committer | Natasha Moongrave <natasha@256phi.eu> | 2026-04-28 20:57:57 +0200 |
| commit | 4ae6a65545888e6d0fb25b59331b9ba91e37c676 (patch) | |
| tree | 376ba4328453b6723909bd1c231df24bb3dc114c | |
| parent | 372a69681523bcfa87d08165f43875b90c3b1f60 (diff) | |
| parent | be64e545d9f78ad23712eae2230711fab2eb9766 (diff) | |
Merge branch 'main' of 10.0.0.37:/srv/git/NixOS-config
| -rw-r--r-- | assets/texmf/tex/latex/scpzine/scpzine.sty | 467 | ||||
| -rwxr-xr-x | flake.lock | 54 | ||||
| -rw-r--r-- | flake.nix | 4 | ||||
| -rw-r--r-- | home/mun/default.nix | 1 | ||||
| -rw-r--r-- | home/mun/programs/firefox.nix | 411 | ||||
| -rw-r--r-- | home/mun/programs/nvim.nix | 389 | ||||
| -rw-r--r-- | pkgs/scpzine-texlive.nix | 38 |
7 files changed, 745 insertions, 619 deletions
diff --git a/assets/texmf/tex/latex/scpzine/scpzine.sty b/assets/texmf/tex/latex/scpzine/scpzine.sty new file mode 100644 index 0000000..a46f0e0 --- /dev/null +++ b/assets/texmf/tex/latex/scpzine/scpzine.sty @@ -0,0 +1,467 @@ +% ============================================================ +% scpzine.sty — SCP Foundation Zine Package +% Reusable formatting for SCP personnel briefing zines +% +% Usage: \usepackage[options]{scpzine} +% +% PRINTING: +% Compile TWICE (TikZ needs two passes). +% Print > Booklet > A3 paper > flip on long edge. +% ============================================================ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{scpzine}[2026/04/23 SCP Foundation Zine Package] + +% ── Package options ───────────────────────────────────────── +\newif\ifscpzine@impose\scpzine@imposefalse +\DeclareOption{impose}{\scpzine@imposetrue} +\ProcessOptions\relax + +% ── Required packages ────────────────────────────────────── +\RequirePackage[a5paper, + top=9mm, bottom=9mm, + left=9mm, right=9mm]{geometry} +\RequirePackage[T1]{fontenc} +\RequirePackage[utf8]{inputenc} +\RequirePackage{lmodern} +\RequirePackage{courier} +\renewcommand{\familydefault}{\ttdefault} +\RequirePackage{microtype} +\RequirePackage{parskip} +\setlength{\parskip}{2pt plus 1pt minus 1pt} +\setlength{\parindent}{0pt} +\RequirePackage{setspace} +\RequirePackage{ragged2e} +\sloppy +\setlength{\emergencystretch}{3em} +\RequirePackage{graphicx} +\RequirePackage{wrapfig} +\RequirePackage[dvipsnames]{xcolor} +\RequirePackage{tikz} +\usetikzlibrary{calc} +\RequirePackage{booktabs} +\RequirePackage{tabularx} +\RequirePackage{array} +\RequirePackage{soul} +\RequirePackage{textcase} +\RequirePackage{eso-pic} +\RequirePackage[hidelinks]{hyperref} +\RequirePackage{fancyhdr} +\RequirePackage{environ} + +% ── Imposition (optional) ────────────────────────────────── +\ifscpzine@impose + \RequirePackage{pgfpages} + \pgfpagesuselayout{2 on 1}[a3paper,landscape,border shrink=3mm] +\fi + +% ============================================================ +% COLOUR PALETTE +% ============================================================ +\definecolor{paperbg}{RGB}{240, 232, 208} +\definecolor{fadedink}{RGB}{48, 44, 36} +\definecolor{stampred}{RGB}{158, 26, 26} +\definecolor{rulercolor}{RGB}{100, 88, 68} +\definecolor{redactbg}{RGB}{10, 10, 10} + +% ============================================================ +% PAGE BACKGROUND — aged paper on every page +% ============================================================ +\AddToShipoutPictureBG{% + \AtPageLowerLeft{% + \textcolor{paperbg}{\rule{\paperwidth}{\paperheight}}% + }% +} + +% ============================================================ +% DOCUMENT METADATA — set these in your document preamble +% ============================================================ +\newcommand{\scpnumber}[1]{\def\scp@number{#1}} +\newcommand{\scpclass}[1]{\def\scp@class{#1}} +\newcommand{\scpsite}[1]{\def\scp@site{#1}} +\newcommand{\scpsector}[1]{\def\scp@sector{#1}} +\newcommand{\scpdocid}[1]{\def\scp@docid{#1}} +\newcommand{\scpissue}[1]{\def\scp@issue{#1}} +\newcommand{\scpclearance}[1]{\def\scp@clearance{#1}} +\newcommand{\scptype}[1]{\def\scp@type{#1}} +\newcommand{\scpseries}[1]{\def\scp@series{#1}} + +% Defaults +\def\scp@number{SCP-XXX} +\def\scp@class{Euclid} +\def\scp@site{Site-19} +\def\scp@sector{Sector C} +\def\scp@docid{PB-XXX-X} +\def\scp@issue{1} +\def\scp@clearance{LEVEL 2} +\def\scp@type{HUMANOID} +\def\scp@series{SECTOR ORIENTATION SERIES} + +% ============================================================ +% HEADERS / FOOTERS +% ============================================================ +\pagestyle{fancy} +\fancyhf{} +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} + +\fancyhead[L]{% + \scriptsize\underline{\texttt{RESTRICTED --- \scp@clearance\ PERSONNEL ONLY}}% +} +\fancyhead[R]{% + \scriptsize\underline{\texttt{\today}}% +} +\fancyfoot[R]{% + \scriptsize\textit{\texttt{continue to next page}}% +} +\fancyfoot[L]{% + \scriptsize\texttt{\scp@docid\ / ISSUE \scp@issue}% +} + +% Last page — no "continue" +\fancypagestyle{lastpage}{% + \fancyfoot[R]{}% + \fancyfoot[L]{\scriptsize\texttt{\scp@docid\ / ISSUE \scp@issue}}% +} + +% Cover pages — no header/footer +\fancypagestyle{coverpage}{% + \fancyhf{}% + \renewcommand{\headrulewidth}{0pt}% +} + +% Blank pages +\fancypagestyle{blankpage}{% + \fancyhf{}% + \renewcommand{\headrulewidth}{0pt}% +} + +% ============================================================ +% BASIC COMMANDS +% ============================================================ + +% Redaction — black box hiding text +\newcommand{\redact}[1]{% + \NoCaseChange{% + \mbox{\colorbox{redactbg}{\textcolor{redactbg}{\texttt{#1}}}}% + }% +} + +% [DATA EXPUNGED] +\newcommand{\expunged}{% + \NoCaseChange{% + \mbox{\colorbox{redactbg}{\textcolor{white}{\texttt{[DATA EXPUNGED]}}}}% + }% +} + +% [SEE LEVEL N FILE] — optional argument for clearance level +\newcommand{\seelevel}[1][3]{% + \NoCaseChange{% + \mbox{\colorbox{redactbg}% + {\textcolor{white}{\texttt{[SEE LEVEL #1 FILE]}}}}% + }% +} + +% Field label — bold inline label +\newcommand{\field}[1]{\textbf{#1}} + +% Horizontal rule +\newcommand{\ruleline}{% + \vspace{2pt}% + {\color{rulercolor}\hrule height 0.4pt}% + \vspace{2pt}% +} + +% Stamp overlay — \stampat[color]{rotation}{x}{y}{text} +\newcommand{\stampat}[5][stampred]{% + \begin{tikzpicture}[overlay, remember picture] + \node[ + rotate=#2, + text=#1, + font=\fontsize{13}{13}\selectfont\bfseries\ttfamily, + draw=#1, line width=1.6pt, + inner xsep=5pt, inner ysep=3pt, + opacity=0.55, anchor=center + ] at ($(current page.center)+(#3,#4)$) {#5}; + \end{tikzpicture}% +} + +% Photo with fallback placeholder +% Usage: \photoblock{filename}{caption} +\newcommand{\photoblock}[2]{% + \IfFileExists{#1}{% + \includegraphics[width=\linewidth, keepaspectratio]{#1}% + }{% + \begin{tikzpicture} + \draw[fill=black!5, draw=black!25, line width=0.5pt] + (0,0) rectangle (3.8cm, 3.2cm); + \draw[black!15, line width=0.4pt] + (0,0)--(3.8cm,3.2cm); + \draw[black!15, line width=0.4pt] + (3.8cm,0)--(0,3.2cm); + \node[font=\tiny\ttfamily, text=black!35] + at (1.9cm,1.7cm) {[PHOTO]}; + \node[font=\tiny\ttfamily, text=black!25] + at (1.9cm,1.3cm) {\texttt{#1}}; + \end{tikzpicture}% + }% + \par + \vspace{2pt} + {\tiny\texttt{#2}}% +} + +% Corner marks (used on covers) +\newcommand{\cornermarks}{% + \begin{tikzpicture}[overlay, remember picture] + \foreach \corner/\xd/\yd in { + north west/1/-1, north east/-1/-1, + south west/1/1, south east/-1/1}{ + \draw[fadedink, line width=1pt] + ($(current page.\corner)+(\xd*0.4cm,\yd*0.4cm)$) -- + ($(current page.\corner)+(\xd*0.9cm,\yd*0.4cm)$); + \draw[fadedink, line width=1pt] + ($(current page.\corner)+(\xd*0.4cm,\yd*0.4cm)$) -- + ($(current page.\corner)+(\xd*0.4cm,\yd*0.9cm)$); + } + \end{tikzpicture}% +} + +% ============================================================ +% ENVIRONMENTS +% ============================================================ + +% ── scpinterview — Interview/Dialog transcript ───────────── +% Usage: +% \begin{scpinterview}{Interview title}{Archive ref and notes} +% \say{Speaker}{Dialog text} +% \say{Speaker}{\textit{(action)} Dialog text} +% \end{scpinterview} +% +\newenvironment{scpinterview}[2]{% + \field{#1}% + \par\vspace{1pt}% + {\scriptsize\textit{#2}}% + \vspace{3pt}% + \ruleline% + \vspace{3pt}% +}{% + \vspace{3pt}% +} +\newcommand{\say}[2]{% + \vspace{2pt}% + \hspace{8pt}\field{#1:} #2% + \par% +} + +% ── scpextract — Interview sub-extract label ─────────────── +% Usage: \scpextract{Extract from Interview 049-INT-B-\redact{XX}:} +\newcommand{\scpextract}[1]{% + \textit{#1}% + \vspace{3pt}% +} + +% ── scptimeline — Incident timeline table ────────────────── +% Usage: +% \begin{scptimeline} +% \event{02:14}{Motion sensor alert.} +% \event{02:19}{Guard fails check-in.} +% \end{scptimeline} +% +\newenvironment{scptimeline}{% + \vspace{2pt}% + {\scriptsize% + \begin{tabular}{@{}p{1.1cm} p{6.1cm}@{}} + \toprule + \field{TIME} & \field{EVENT} \\ + \midrule +}{% + \bottomrule + \end{tabular}}% + \vspace{3pt}% +} +\newcommand{\event}[2]{% + \texttt{#1} & #2 \\[2pt]% +} + +% ── scpreftable — Reference/documentation table ─────────── +% Usage: +% \begin{scpreftable} +% \docref{049-INT-B}{Full interview series. Level 3.} +% \end{scpreftable} +% +\newenvironment{scpreftable}{% + \vspace{3pt}% + {\scriptsize% + \begin{tabular}{@{}p{2.4cm} p{4.8cm}@{}} + \toprule + \field{REFERENCE} & \field{CONTENTS} \\ + \midrule +}{% + \bottomrule + \end{tabular}}% +} +\newcommand{\docref}[2]{% + \texttt{#1} & #2 \\[2pt]% +} + +% ── scpincident — Incident summary header ───────────────── +% Usage: +% \begin{scpincident}{Breach BR-2012-049-\redact{7}} +% {Summarised for Level 2 distribution. Full report Level 3.} +% ... content ... +% \end{scpincident} +% +\newenvironment{scpincident}[2]{% + \field{Incident Summary: #1}% + \par\vspace{1pt}% + {\scriptsize\textit{#2}}% + \ruleline% +}{% +} + +% ── scpfoundnote — Hidden/found note ────────────────────── +% Usage: +% \begin{scpfoundnote}{Discovery context text}{Follow-up text} +% Note body text here... +% \end{scpfoundnote} +% +\NewEnviron{scpfoundnote}[2]{% + \begin{center} + \begin{minipage}{0.82\linewidth} + \setstretch{1.4} + {\scriptsize\textit{#1}}% + \vspace{8pt} + {\color{rulercolor}\hrule height 0.3pt} + \vspace{8pt} + {\small\itshape\BODY}% + \vspace{8pt} + {\color{rulercolor}\hrule height 0.3pt} + \vspace{5pt} + {\scriptsize\texttt{#2}}% + \end{minipage} + \end{center}% +} + +% ── scpaddendum — Classified addendum block ─────────────── +% Usage: +% \begin{scpaddendum}{Filed by \redact{XX}, Senior Researcher} +% \expunged +% {\scriptsize\textit{[Withheld from Level 2. Level 3 required.]}} +% \end{scpaddendum} +% +\newenvironment{scpaddendum}[1]{% + \vspace{3pt}% + \ruleline% + \field{Addendum --- #1:}% + \vspace{2pt}% +}{% +} + +% ── scpguidance — Personnel guidance numbered items ─────── +% Usage: +% \begin{scpguidance}{If SCP-049 Addresses You} +% \guidanceitem{Do not engage.}{Explanation text.} +% \guidanceitem{Do not argue.}{Explanation text.} +% \end{scpguidance} +% +\newenvironment{scpguidance}[1]{% + \field{Personnel Guidance --- #1:}% + \par% +}{% +} +\newcommand{\guidanceitem}[2]{% + \vspace{2pt}% + \field{#1} #2% + \par% +} + +% ── scpsidephoto — Wrapped sidebar photo ────────────────── +% Usage: \scpsidephoto{r}{0.42}{assets/photo.jpg}{Caption text} +\newcommand{\scpsidephoto}[4]{% + \begin{wrapfigure}{#1}{#2\linewidth} + \vspace{-4pt} + \photoblock{#3}{#4} + \vspace{-8pt} + \end{wrapfigure}% +} + +% ============================================================ +% COVER PAGE COMMANDS +% ============================================================ + +% Classification header (multilingual) +\newcommand{\classificationheader}[1]{% + \noindent + \begin{tabular*}{\linewidth}{@{}l@{\extracolsep{\fill}}r@{}} + {\scriptsize\texttt{RESTRICTED --- \scp@clearance\ PERSONNEL ONLY}} & + {\scriptsize\smash{\raisebox{-50pt}{\includegraphics[scale=0.03]{#1}}}} \\ + \end{tabular*}% + {\scriptsize\texttt{RESTREINT --- PERSONNEL DE NIVEAU 2 UNIQUEMENT}}\\ + {\scriptsize\texttt{VERTRAULICH --- NUR FUR PERSONAL DER STUFE 2}}\\ + {\scriptsize\texttt{RESERVADO --- SOLO PERSONAL DE NIVEL 2}}% +} + +% Cover metadata block +\newcommand{\covermetadata}{% + {\scriptsize\texttt{PERSONNEL BRIEFING DOCUMENT}}\\[1pt] + {\scriptsize\texttt{\MakeUppercase{\scp@series}}}\\[3pt] + {\normalsize\bfseries\texttt{\scp@number}}\\[1pt] + {\scriptsize\texttt{\MakeUppercase{\scp@type} / \MakeUppercase{\scp@class} / \MakeUppercase{\scp@sector}}}\\[3pt] + {\scriptsize\texttt{DOCUMENT: \scp@docid\quad ISSUE: \scp@issue}}% +} + +% Signature block +% Usage: \signatureblock{Name or \redact{XX}}{Title}{Location} +\newcommand{\signatureblock}[3]{% + \begin{tabular}{l} + {\scriptsize\texttt{Authorised for distribution by:}} \\[2pt] + \hline \\[-8pt] + {\scriptsize\texttt{#1, #2}} \\ + {\scriptsize\texttt{#3}} \\ + \hline \\[-4pt] + \end{tabular}% +} + +% Cover disclaimer block +\newcommand{\coverdisclaimer}[1]{% + \begin{minipage}{0.9\linewidth} + {\scriptsize\texttt{#1}}% + \end{minipage}% +} + +% Back cover info block +\newcommand{\backcoverbody}{% + {\small\bfseries\texttt{\scp@number}}\\[2pt] + {\scriptsize\texttt{\MakeUppercase{\scp@sector} PERSONNEL BRIEFING}}\\[1pt] + {\scriptsize\texttt{DOCUMENT \scp@docid\ / ISSUE \scp@issue}}\\[1pt] + {\scriptsize\texttt{\MakeUppercase{\scp@site} / CONTAINMENT DIVISION}}% +} + +% ============================================================ +% ITEM HEADER — standard SCP description header +% ============================================================ +% Usage: \scpheader (uses metadata set in preamble) +\newcommand{\scpheader}{% + \field{Item \#:} \scp@number \hfill + \field{Object Class:} \scp@class \hfill + \field{Site:} \scp@site% + \ruleline% +} + +% ============================================================ +% BLANK PAGE with centered message +% ============================================================ +\newcommand{\blankpagemessage}[1]{% + \thispagestyle{blankpage}% + \vspace*{\fill} + \begin{center} + {\small\texttt{#1}}% + \end{center} + \vfill% +} + +% ============================================================ +% SET DEFAULT TEXT COLOR +% ============================================================ +\AtBeginDocument{\color{fadedink}} + +\endinput @@ -70,11 +70,11 @@ }, "crane": { "locked": { - "lastModified": 1775839657, - "narHash": "sha256-SPm9ck7jh3Un9nwPuMGbRU04UroFmOHjLP56T10MOeM=", + "lastModified": 1777242778, + "narHash": "sha256-VWTeqWeb8Sel/QiWyaPvCa9luAbcGawR+Rw09FJoHz0=", "owner": "ipetkov", "repo": "crane", - "rev": "7cf72d978629469c4bd4206b95c402514c1f6000", + "rev": "ad8b31ad0ba8448bd958d7a5d50d811dc5d271c0", "type": "github" }, "original": { @@ -91,11 +91,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1776240401, - "narHash": "sha256-S9m5SrxUT6dNPZrCscuQR2zLD3QIAlUlvlXchPKBnxs=", + "lastModified": 1777279247, + "narHash": "sha256-xuY2eN11OcD7QOgM2IadfWDR8XIzMbYfbn6gMtF1deE=", "owner": "nix-community", "repo": "fenix", - "rev": "a30830ebacdf957690dd8ea9ade9f12809ae0982", + "rev": "6f6f1110eaeafbc9aea16d477c311491d0289977", "type": "github" }, "original": { @@ -237,11 +237,11 @@ "nixpkgs-nixcord": "nixpkgs-nixcord" }, "locked": { - "lastModified": 1776301329, - "narHash": "sha256-choqghSDGpczvOmIQg00goi+nPoZeOEFjzHDoXysqPs=", + "lastModified": 1777308297, + "narHash": "sha256-VHN+7WdQgqflxHuOqXzjD/zKTusMfywl4/rNxO6SPqk=", "owner": "FlameFlag", "repo": "nixcord", - "rev": "3f10a1597a6bc32525767f19ae831bd87559d4b0", + "rev": "8d3f6a5fca55840e9123fee3b11a605742489cac", "type": "github" }, "original": { @@ -252,11 +252,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1775595990, - "narHash": "sha256-OEf7YqhF9IjJFYZJyuhAypgU+VsRB5lD4DuiMws5Ltc=", + "lastModified": 1776734388, + "narHash": "sha256-vl3dkhlE5gzsItuHoEMVe+DlonsK+0836LIRDnm6MXQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4e92bbcdb030f3b4782be4751dc08e6b6cb6ccf2", + "rev": "10e7ad5bbcb421fe07e3a4ad53a634b0cd57ffac", "type": "github" }, "original": { @@ -283,11 +283,11 @@ }, "nixpkgs-nixcord": { "locked": { - "lastModified": 1775595990, - "narHash": "sha256-OEf7YqhF9IjJFYZJyuhAypgU+VsRB5lD4DuiMws5Ltc=", + "lastModified": 1776734388, + "narHash": "sha256-vl3dkhlE5gzsItuHoEMVe+DlonsK+0836LIRDnm6MXQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4e92bbcdb030f3b4782be4751dc08e6b6cb6ccf2", + "rev": "10e7ad5bbcb421fe07e3a4ad53a634b0cd57ffac", "type": "github" }, "original": { @@ -299,11 +299,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1776169885, - "narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=", + "lastModified": 1776877367, + "narHash": "sha256-EHq1/OX139R1RvBzOJ0aMRT3xnWyqtHBRUBuO1gFzjI=", "owner": "nixos", "repo": "nixpkgs", - "rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9", + "rev": "0726a0ecb6d4e08f6adced58726b95db924cef57", "type": "github" }, "original": { @@ -315,11 +315,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1776067740, - "narHash": "sha256-B35lpsqnSZwn1Lmz06BpwF7atPgFmUgw1l8KAV3zpVQ=", + "lastModified": 1777077449, + "narHash": "sha256-AIiMJiqvGrN4HyLEbKAoCSRRYn0rnlW5VbKNIMIYqm4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "7e495b747b51f95ae15e74377c5ce1fe69c1765f", + "rev": "a4bf06618f0b5ee50f14ed8f0da77d34ecc19160", "type": "github" }, "original": { @@ -368,11 +368,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1776173606, - "narHash": "sha256-o2ism66hEAnfWZSUMs22KX5zpMZDxS/Bg4N/HcDCkXM=", + "lastModified": 1776800521, + "narHash": "sha256-f8YJfwAOsLFpIoqZuX3yF69UvMLrkx7iVzMH1pJU7cM=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "17d028e9d7161cf6ebf21e21d3c4a1835099e039", + "rev": "8954b66d43225e62c92e8bbcc8500191b5cceb1e", "type": "github" }, "original": { @@ -403,11 +403,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1775935110, - "narHash": "sha256-twTHKUFXjNNsaAvX0KoaIClt+923jXDRbfCd9PC/f0o=", + "lastModified": 1776894428, + "narHash": "sha256-wuT915MyCtMTfLj+uo9y8wtCwkEgJXiXvcbSleFrlN0=", "owner": "danth", "repo": "stylix", - "rev": "14f248ad1a7668e7858c6d9163608c208b7daf02", + "rev": "f34be27ce83efaa1c85ad1e5b1f8b6dea65b147d", "type": "github" }, "original": { @@ -54,6 +54,10 @@ }) # Fenix Rust overlay fenix.overlays.default + # Local TeXLive packages + (final: prev: { + scpzine-texlive = final.callPackage ./pkgs/scpzine-texlive.nix {}; + }) ]; # Per-host home-manager configuration diff --git a/home/mun/default.nix b/home/mun/default.nix index 6193846..354200e 100644 --- a/home/mun/default.nix +++ b/home/mun/default.nix @@ -101,6 +101,7 @@ inherit (texlive) scheme-full; notestex = texlivePackages.notestex; screenplay = texlivePackages.screenplay; + scpzine = pkgs.scpzine-texlive; }) # RetroArch diff --git a/home/mun/programs/firefox.nix b/home/mun/programs/firefox.nix deleted file mode 100644 index be732c1..0000000 --- a/home/mun/programs/firefox.nix +++ /dev/null @@ -1,411 +0,0 @@ -{pkgs, ...}: { - home.file = { - ".tridactylrc" = { - text = '' - set editorcmd alacritty hx %f +%l - set newtab about:blank - ''; - }; - }; - programs.firefox = { - enable = true; - package = pkgs.librewolf.override { - nativeMessagingHosts = [ - pkgs.tridactyl-native - ]; - }; - policies = { - DefaultDownloadDirectory = "\${home}/Downloads"; - Extensions.Install = map (name: "https://addons.mozilla.org/firefox/downloads/latest/${name}") [ - "bitwarden-password-manager" - "darkreader" - "multi-account-containers" - "privacy-badger17" - "return-youtube-dislikes" - "sponsorblock" - "styl-us" - "tabby-cat-friend" - "torproject-snowflake" - "ublock-origin" - ]; - Extensions.Uninstall = [ - "ddg@search.mozilla.org" - "google@search.mozilla.org" - "bing@search.mozilla.org" - "amazondotcom@search.mozilla.org" - "ebay@search.mozilla.org" - "twitter@search.mozilla.org" - ]; - "DisableFirefoxStudies" = true; - "DisableTelemetry" = true; - "DisableFeedbackCommands" = true; - "DisablePocket" = true; - }; - profiles.jade = { - search = { - force = true; - default = "duckduckbleh"; - engines = { - "duckduckbleh" = { - urls = [ - { - template = "https://noai.duckduckgo.com/"; - params = [ - { - name = "q"; - value = "{searchTerms}"; - } - ]; - } - ]; - definedAliases = [ - "duck" - "d" - "ddg" - ]; - }; - "Nix Packages" = { - urls = [ - { - template = "https://search.nixos.org/packages"; - params = [ - { - name = "query"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["pkgs"]; - }; - "Nix Options" = { - urls = [ - { - template = "https://search.nixos.org/options"; - params = [ - { - name = "query"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["opts"]; - }; - "Home manager Options" = { - urls = [ - { - template = "https://home-manager-options.extranix.com/"; - params = [ - { - name = "query"; - value = "{searchTerms}"; - } - { - name = "release"; - value = "master"; - } - ]; - } - ]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["hm"]; - }; - "NixOS Wiki" = { - urls = [ - { - template = "https://nixos.wiki/index.php"; - params = [ - { - name = "search"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["nxwk"]; - }; - "Noogle" = { - urls = [ - { - template = "https://noogle.dev/q"; - params = [ - { - name = "term"; - value = "{searchTerms}"; - } - ]; - } - ]; - definedAliases = ["ngl"]; - }; - "lib.rs" = { - urls = [ - { - template = "https://lib.rs/search"; - params = [ - { - name = "q"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "https://lib.rs/favicon.png"; - definedAliases = ["libs"]; - }; - "gleam packages" = { - urls = [ - { - template = "https://packages.gleam.run/"; - params = [ - { - name = "search"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "https://packages.gleam.run/static/packages-icon.svg"; - definedAliases = ["libs"]; - }; - "rust docs" = { - urls = [ - { - template = "https://docs.rs/releases/search"; - params = [ - { - name = "query"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "https://docs.rs/-/static/favicon.ico"; - definedAliases = ["docs"]; - }; - "gleam docs direct open" = { - urls = [ - { - template = "https://hexdocs.pm/{searchTerms}"; - } - ]; - definedAliases = [ - "gd" - ]; - }; - "rust docs direct open" = { - urls = [ - { - template = "https://docs.rs/{searchTerms}"; - } - ]; - definedAliases = [ - "rd" - ]; - }; - "rust std docs" = { - urls = [ - { - template = "https://docs.rust-lang.org/std/index.html"; - params = [ - { - name = "search"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "https://doc.rust-lang.org/favicon.ico"; - definedAliases = ["std"]; - }; - "MDN" = { - urls = [ - { - template = "https://developer.mozilla.org/search"; - params = [ - { - name = "q"; - value = "{searchTerms}"; - } - ]; - } - ]; - }; - "bing".metaData.hidden = true; - "google".metaData.hidden = true; - "Amazon.de".metaData.hidden = true; - }; - }; - settings = { - "devtools.editor.keymap" = "vim"; - "devtools.toolbox.host" = "right"; - "devtools.theme" = "dark"; - "webgl.disabled" = false; - "browser.urlbar.decodeURLsOnCopy" = true; - "browser.urlbar.unitConversion.enabled" = true; - "browser.urlbar.suggest.calculator" = true; - "browser.compactmode.show" = true; - "browser.uidensity" = 1; - "screenshots.browser.component.enabled" = true; - "browser.aboutConfig.showWarning" = false; - "browser.aboutwelcome.showModal" = false; - "browser.aboutwelcome.enabled" = false; - "browser.preferences.moreFromMozilla" = false; - "browser.menu.showViewImageInfo" = true; - "browser.shopping.experience2023.active" = false; - "browser.shopping.experience2023.survey.enabled" = false; - - "identity.fxaccounts.enabled" = true; - "browser.tabs.firefox-view" = true; - "browser.tabs.firefox-view-next" = true; - "browser.newtabpage.activity-stream.showSponsored" = false; - "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; - "browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts" = false; - "privacy.trackingprotection.emailtracking.enabled" = true; - "privacy.trackingprotection.enabled" = true; - "privacy.trackingprotection.socialtracking.enabled" = true; - - "browser.ml.chat.enabled" = false; - "browser.ml.chat.hideLocalhost" = false; - "browser.ml.chat.prompt.prefix" = ""; - "browser.ml.chat.prompts.0" = ""; - "browser.ml.chat.prompts.1" = ""; - "browser.ml.chat.prompts.2" = ""; - "browser.ml.chat.prompts.3" = ""; - "browser.ml.chat.provider" = ""; - "browser.ml.chat.shortcuts" = false; - "browser.ml.chat.shortcuts.custom" = false; - "browser.ml.chat.shortcuts.longPress" = ""; - "browser.ml.chat.sidebar" = false; - - "geo.provider.network.logging.enabled" = true; - "extensions.getAddons.showPane" = false; - "extensions.htmlaboutaddons.recommendations.enabled" = false; - "browser.discovery.enabled" = false; - "browser.shopping.experience2023.enabled" = false; - "datareporting.policy.dataSubmissionEnabled" = false; - "datareporting.healthreport.uploadEnabled" = false; - "toolkit.telemetry.unified" = false; - "toolkit.telemetry.enabled" = false; - "toolkit.telemetry.server" = "data:,"; - "toolkit.telemetry.archive.enabled" = false; - "toolkit.telemetry.newProfilePing.enabled" = false; - "toolkit.telemetry.shutdownPingSender.enabled" = false; - "toolkit.telemetry.updatePing.enabled" = false; - "toolkit.telemetry.bhrPing.enabled" = false; - "toolkit.telemetry.firstShutdownPing.enabled" = false; - "toolkit.telemetry.coverage.opt-out" = true; - "toolkit.coverage.opt-out" = true; - "toolkit.coverage.endpoint.base" = ""; - "browser.ping-centre.telemetry" = false; - "browser.newtabpage.activity-stream.feeds.telemetry" = false; - "browser.newtabpage.activity-stream.telemetry" = false; - "app.shield.optoutstudies.enabled" = false; - "app.normandy.enabled" = false; - "app.normandy.api_url" = ""; - "dom.private-attribution.submission.enabled" = false; - "browser.newtabpage.activity-stream.feeds.showWeather" = false; - "browser.newtabpage.activity-stream.feeds.weatherfeed" = false; - - "browser.safebrowsing.malware.enabled" = false; - "browser.safebrowsing.phishing.enabled" = false; - "browser.safebrowsing.downloads.enabled" = false; - "browser.safebrowsing.downloads.remote.enabled" = false; - "browser.safebrowsing.downloads.remote.url" = ""; - "browser.safebrowsing.downloads.remote.block_potentially_unwanted" = false; - "browser.safebrowsing.downloads.remote.block_uncommon" = false; - "browser.safebrowsing.allowOverride" = false; - - "network.prefetch-next" = false; - "network.dns.disablePrefetch" = true; - "network.dns.disablePrefetchFromHTTPS" = true; - "network.predictor.enabled" = false; - "network.predictor.enable-prefetch" = false; - "network.http.speculative-parallel-limit" = 0; - "browser.places.speculativeConnect.enabled" = false; - "browser.send_pings" = false; - - "browser.urlbar.pocket.featureGate" = false; - "browser.urlbar.weather.featureGate" = false; - "browser.urlbar.speculativeConnect.enabled" = false; - "browser.urlbar.suggest.quicksuggest.nonsponsored" = false; - "browser.urlbar.suggest.quicksuggest.sponsored" = false; - "browser.search.suggest.enabled" = false; - "browser.urlbar.suggest.searches" = false; - "browser.urlbar.trending.featureGate" = false; - - "security.ssl.require_safe_negotiation" = true; - "security.remote_settings.crlite_filters.enabled" = true; - "security.pki.crlite_mode" = 2; - - "dom.security.https_only_mode" = true; - "dom.security.https_only_mode_pbm" = true; - "security.ssl.treat_unsafe_negotiation_as_broken" = true; - "browser.xul.error_pages.expert_bad_cert" = true; - "network.http.referer.XOriginTrimmingPolicy" = 2; - - "privacy.userContext.enabled" = true; - "privacy.userContext.ui.enabled" = true; - "privacy.userContext.newTabContainerOnLeftClick.enabled" = true; - - "dom.disable_window_move_resize" = true; - - "browser.uitour.enabled" = false; - - "browser.uitour.url" = ""; - "permissions.manager.defaultsUrl" = ""; - "webchannel.allowObject.urlWhitelist" = ""; - - "network.IDN_show_punycode" = true; - "pdfjs.disabled" = false; - "pdfjs.enableScripting" = false; - "browser.tabs.searchclipboardfor.middleclick" = false; - "browser.download.useDownloadDir" = false; - "browser.download.alwaysOpenPanel" = false; - - "browser.download.manager.addToRecentDocs" = false; - - "browser.download.always_ask_before_handling_new_types" = true; - "privacy.resistFingerprinting" = true; - "privacy.resistFingerprinting.pbmode" = true; - "privacy.resistFingerprinting.exemptedDomains" = let - domains = [ - "bahn.expert" - "flugzeug.expert" - "traewelling.de" - "katzen.cafe" - "catgirl.cloud" - "nekover.se" - "zug.network" - "girlcock.club" - "hamburg.ccc.de" - "codeberg.org" - ]; - in - domains ++ (map (domain: "*." + domain) domains); - "privacy.window.maxInnerWidth" = 1600; - "privacy.window.maxInnerHeight" = 900; - "privacy.resistFingerprinting.block_mozAddonManager" = true; - "privacy.resistFingerprinting.letterboxing" = false; - "widget.non-native-theme.enabled" = true; - "browser.link.open_newwindow" = 3; - "browser.link.open_newwindow.restriction" = 0; - "signon.rememberSignons" = false; - "dom.popup_allowed_events" = "click dblclick mousedown pointerdown"; - "browser.pagethumbnails.capturing_disabled" = true; - - "geo.enabled" = false; - "full-screen-api.enabled" = false; - "permissions.default.geo" = 0; - "permissions.default.camera" = 0; - "permissions.default.microphone" = 0; - "permissions.default.desktop-notification" = 0; - "permissions.default.xr" = 0; - }; - }; - }; -} diff --git a/home/mun/programs/nvim.nix b/home/mun/programs/nvim.nix index 9677c57..b1a41ce 100644 --- a/home/mun/programs/nvim.nix +++ b/home/mun/programs/nvim.nix @@ -77,183 +77,185 @@ ]; extraLuaConfig = '' - ------------------------------------------------- - -- LEADER - ------------------------------------------------- - vim.g.mapleader = " " - - ------------------------------------------------- - -- BASIC OPTIONS - ------------------------------------------------- - vim.opt.number = true - vim.opt.relativenumber = true - vim.opt.clipboard = "unnamedplus" - vim.opt.showtabline = 2 - vim.o.timeout = true - vim.o.timeoutlen = 300 - - ------------------------------------------------- - -- THEME - ------------------------------------------------- - require("catppuccin").setup({ - flavour = "mocha", - }) - vim.cmd.colorscheme("catppuccin") + ------------------------------------------------- + -- LEADER + ------------------------------------------------- + vim.g.mapleader = " " + + ------------------------------------------------- + -- BASIC OPTIONS + ------------------------------------------------- + vim.opt.number = true + vim.opt.relativenumber = true + vim.opt.clipboard = "unnamedplus" + vim.opt.showtabline = 2 + vim.o.timeout = true + vim.o.timeoutlen = 300 + + ------------------------------------------------- + -- THEME + ------------------------------------------------- + require("catppuccin").setup({ + flavour = "mocha", + }) + vim.cmd.colorscheme("catppuccin") + + ------------------------------------------------- + -- GITSIGNS + ------------------------------------------------- + require("gitsigns").setup() + + ------------------------------------------------- + -- TREESITTER + ------------------------------------------------- + require("nvim-treesitter.configs").setup({ + highlight = { enable = true }, + indent = { enable = true }, + }) + + vim.opt.foldmethod = "expr" + vim.opt.foldexpr = "nvim_treesitter#foldexpr()" + vim.opt.foldenable = false + + ------------------------------------------------- + -- SNIPPETS + ------------------------------------------------- + require("luasnip.loaders.from_vscode").lazy_load() + + ------------------------------------------------- + -- COMPLETION + ------------------------------------------------- + local cmp = require("cmp") + local luasnip = require("luasnip") + + cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + ["<C-Space>"] = cmp.mapping.complete(), + ["<CR>"] = cmp.mapping.confirm({ select = true }), + }), + sources = { + { name = "nvim_lsp" }, + { name = "luasnip" }, + }, + }) + + require("nvim-autopairs").setup({}) + + ------------------------------------------------- + -- LSP + ------------------------------------------------- + local capabilities = require("cmp_nvim_lsp").default_capabilities() + + local servers = { + "lua_ls", + "nil_ls", + "rust_analyzer", + "pyright", + "bashls", + "texlab", + } + + for _, server in ipairs(servers) do + vim.lsp.config(server, { + capabilities = capabilities + }) + vim.lsp.enable(server) + end + + ------------------------------------------------- + -- LSP KEYMAPS + ------------------------------------------------- + vim.keymap.set("n", "<leader>ld", vim.lsp.buf.definition) + vim.keymap.set("n", "<leader>lD", vim.lsp.buf.declaration) + vim.keymap.set("n", "<leader>li", vim.lsp.buf.implementation) + vim.keymap.set("n", "<leader>lr", vim.lsp.buf.references) + vim.keymap.set("n", "lh", vim.lsp.buf.hover) + vim.keymap.set("n", "ln", vim.lsp.buf.rename) + vim.keymap.set("n", "la", vim.lsp.buf.code_action) + vim.keymap.set("n", "lf", function() vim.lsp.buf.format() end) + + ------------------------------------------------- + -- DIAGNOSTICS + ------------------------------------------------- + vim.keymap.set("n", "lj", vim.diagnostic.goto_next) + vim.keymap.set("n", "lk", vim.diagnostic.goto_prev) + vim.keymap.set("n", "le", vim.diagnostic.open_float) + + ------------------------------------------------- + -- FORMATTER + ------------------------------------------------- + require("conform").setup({ + format_on_save = { + timeout_ms = 500, + lsp_format = "fallback", + }, + formatters_by_ft = { + lua = { "stylua" }, + nix = { "alejandra" }, + rust = { "rustfmt" }, + python = { "black" }, + bash = { "shfmt" }, + }, + }) + + require("Comment").setup() + + ------------------------------------------------- + -- TELESCOPE + ------------------------------------------------- + local builtin = require("telescope.builtin") + + require("telescope").setup({ + defaults = { + layout_strategy = "horizontal", + sorting_strategy = "ascending", + file_ignore_patterns = { "node_modules", ".git/" }, + }, + }) + + vim.keymap.set("n", "<leader><leader>", builtin.find_files) + vim.keymap.set("n", "<leader>fg", builtin.live_grep) + vim.keymap.set("n", "<leader>fb", builtin.buffers) + + ------------------------------------------------- + -- WHICH KEY + ------------------------------------------------- + local wk = require("which-key") + wk.add({ + { "<leader>l", desc = "LSP" } + { "<leader>o", desc = "Org" } + }) + + ------------------------------------------------- + -- NVIM TREE + ------------------------------------------------- + require("nvim-tree").setup({}) + vim.keymap.set("n", "<leader>e", "<cmd>NvimTreeToggle<CR>") + + ------------------------------------------------- + -- TERMINAL + ------------------------------------------------- + require("toggleterm").setup({ + direction = "float", + }) + + local Terminal = require("toggleterm.terminal").Terminal + + local lazygit = Terminal:new({ + cmd = "lazygit", + hidden = true, + direction = "float", + }) + + vim.keymap.set("n", "<leader>gg", function() + lazygit:toggle() + end) - ------------------------------------------------- - -- GITSIGNS - ------------------------------------------------- - require("gitsigns").setup() - - ------------------------------------------------- - -- TREESITTER - ------------------------------------------------- - require("nvim-treesitter.configs").setup({ - highlight = { enable = true }, - indent = { enable = true }, - }) - - vim.opt.foldmethod = "expr" - vim.opt.foldexpr = "nvim_treesitter#foldexpr()" - vim.opt.foldenable = false - - ------------------------------------------------- - -- SNIPPETS - ------------------------------------------------- - require("luasnip.loaders.from_vscode").lazy_load() - - ------------------------------------------------- - -- COMPLETION - ------------------------------------------------- - local cmp = require("cmp") - local luasnip = require("luasnip") - - cmp.setup({ - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, - mapping = cmp.mapping.preset.insert({ - ["<C-Space>"] = cmp.mapping.complete(), - ["<CR>"] = cmp.mapping.confirm({ select = true }), - }), - sources = { - { name = "nvim_lsp" }, - { name = "luasnip" }, - }, - }) - - require("nvim-autopairs").setup({}) - - ------------------------------------------------- - -- LSP - ------------------------------------------------- - local capabilities = require("cmp_nvim_lsp").default_capabilities() - - local servers = { - "lua_ls", - "nil_ls", - "rust_analyzer", - "pyright", - "bashls", - "texlab", - } - - for _, server in ipairs(servers) do - vim.lsp.config(server, { - capabilities = capabilities - }) - vim.lsp.enable(server) - end - - ------------------------------------------------- - -- LSP KEYMAPS - ------------------------------------------------- - vim.keymap.set("n", "<leader>ld", vim.lsp.buf.definition) - vim.keymap.set("n", "<leader>lD", vim.lsp.buf.declaration) - vim.keymap.set("n", "<leader>li", vim.lsp.buf.implementation) - vim.keymap.set("n", "<leader>lr", vim.lsp.buf.references) - vim.keymap.set("n", "lh", vim.lsp.buf.hover) - vim.keymap.set("n", "ln", vim.lsp.buf.rename) - vim.keymap.set("n", "la", vim.lsp.buf.code_action) - vim.keymap.set("n", "lf", function() vim.lsp.buf.format() end) - - ------------------------------------------------- - -- DIAGNOSTICS - ------------------------------------------------- - vim.keymap.set("n", "lj", vim.diagnostic.goto_next) - vim.keymap.set("n", "lk", vim.diagnostic.goto_prev) - vim.keymap.set("n", "le", vim.diagnostic.open_float) - - ------------------------------------------------- - -- FORMATTER - ------------------------------------------------- - require("conform").setup({ - format_on_save = { - timeout_ms = 500, - lsp_format = "fallback", - }, - formatters_by_ft = { - lua = { "stylua" }, - nix = { "alejandra" }, - rust = { "rustfmt" }, - python = { "black" }, - bash = { "shfmt" }, - }, - }) - - require("Comment").setup() - - ------------------------------------------------- - -- TELESCOPE - ------------------------------------------------- - local builtin = require("telescope.builtin") - - require("telescope").setup({ - defaults = { - layout_strategy = "horizontal", - sorting_strategy = "ascending", - file_ignore_patterns = { "node_modules", ".git/" }, - }, - }) - - vim.keymap.set("n", "<leader><leader>", builtin.find_files) - vim.keymap.set("n", "<leader>fg", builtin.live_grep) - vim.keymap.set("n", "<leader>fb", builtin.buffers) - - ------------------------------------------------- - -- WHICH KEY - ------------------------------------------------- - local wk = require("which-key") - wk.add({ - { "<leader>l", desc = "LSP" } - }) - - ------------------------------------------------- - -- NVIM TREE - ------------------------------------------------- - require("nvim-tree").setup({}) - vim.keymap.set("n", "<leader>e", "<cmd>NvimTreeToggle<CR>") - - ------------------------------------------------- - -- TERMINAL - ------------------------------------------------- - require("toggleterm").setup({ - direction = "float", - }) - - local Terminal = require("toggleterm.terminal").Terminal - - local lazygit = Terminal:new({ - cmd = "lazygit", - hidden = true, - direction = "float", - }) - - vim.keymap.set("n", "<leader>gg", function() - lazygit:toggle() - end) ------------------------------------------------- -- ORGMODE @@ -267,13 +269,38 @@ require("orgmode").setup({ org_agenda_files = projects, - org_default_notes_file = "~/INBOX.org" + org_default_notes_file = "~/ORG/inbox.org", -- move inbox inside ~/ORG + + org_capture_templates = { + t = { + description = "Todo", + template = "* TODO %?\n SCHEDULED: %t", + target = "~/ORG/todos.org", + }, + i = { + description = "Idea", + template = "* %? :idea:\n %U", + target = "~/ORG/ideas.org", + }, + n = { + description = "Note", + template = "* %?\n %U", + target = "~/ORG/inbox.org", + }, + j = { + description = "Journal", + template = "* %<%Y-%m-%d>\n %?", + target = "~/ORG/journal.org", + }, + }, }) - ------------------------------------------------- - -- VIMTEX - ------------------------------------------------- - vim.g.vimtex_view_method = "zathura" + vim.keymap.set("n", "<leader>oc", function() require("orgmode").action("capture.prompt") end, { desc = "Org Capture" }) + vim.keymap.set("n", "<leader>oa", function() require("orgmode").action("agenda.prompt") end, { desc = "Org Agenda" }) + ------------------------------------------------- + -- VIMTEX + ------------------------------------------------- + vim.g.vimtex_view_method = "zathura" ''; }; } diff --git a/pkgs/scpzine-texlive.nix b/pkgs/scpzine-texlive.nix new file mode 100644 index 0000000..b9ce910 --- /dev/null +++ b/pkgs/scpzine-texlive.nix @@ -0,0 +1,38 @@ +# Local TeXLive package for scpzine.sty +# Builds a texlivePackages-compatible derivation from the local .sty file. +{ + lib, + runCommand, + texlive, +}: let + scpzine-src = ../assets/texmf/tex/latex/scpzine; +in + runCommand "texlive-scpzine" { + passthru.tlDeps = with texlive; [ + courier + lm + microtype + parskip + setspace + ragged2e + graphics + wrapfig + xcolor + pgf # tikz + booktabs + tabularx + tools # array + soul + textcase + eso-pic + hyperref + fancyhdr + environ + geometry + fontenc + ]; + tlType = "run"; + } '' + mkdir -p "$out/tex/latex/scpzine" + cp ${scpzine-src}/scpzine.sty "$out/tex/latex/scpzine/" + '' |
