]> git.ipfire.org Git - talks.git/commitdiff
Create an IPFire design for the presentation with example content
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 18 Feb 2026 17:23:37 +0000 (17:23 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 18 Feb 2026 17:23:37 +0000 (17:23 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
beamerthemeIPFire.sty [new file with mode: 0644]
images/.gitkeep [new file with mode: 0644]
presentation.tex
slides/01-introduction.tex [new file with mode: 0644]
slides/02-content.tex [new file with mode: 0644]
slides/99-closing.tex [new file with mode: 0644]

index 4b2a4d8d5301cbbced9ef5ebe52da95af4c5bec1..81e7db3ed608fcb54aa1e2f53198c0ed56053dea 100644 (file)
@@ -6,6 +6,7 @@ BUILD_DIR = build
 
 TEX_INPUT  = presentation.tex
 PDF_OUTPUT = presentation.pdf
+THEME      = beamerthemeIPFire.sty
 
 # ---------------------------------------------------------------------------
 # xelatex flags
@@ -22,7 +23,7 @@ XELATEX_FLAGS = \
 
 all-local: $(PDF_OUTPUT)
 
-$(PDF_OUTPUT): $(TEX_INPUT) $(THEME_STY)
+$(PDF_OUTPUT): $(TEX_INPUT) $(THEME) slides/*.tex
        @mkdir -p $(BUILD_DIR)
        @echo "  XELATEX  [pass 1]  $(TEX_INPUT)"
        @$(XELATEX) $(XELATEX_FLAGS) -no-pdf $(TEX_INPUT) \
diff --git a/beamerthemeIPFire.sty b/beamerthemeIPFire.sty
new file mode 100644 (file)
index 0000000..f221632
--- /dev/null
@@ -0,0 +1,224 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{beamerthemeIPFire}[IPFire Beamer Theme]
+
+% ---------------------------------------------------------------------------
+% Required packages
+% ---------------------------------------------------------------------------
+
+\RequirePackage{fontspec}
+\RequirePackage{hyperref}
+\RequirePackage{minted}
+\RequirePackage{tikz}
+\RequirePackage{xcolor}
+
+\usetikzlibrary{calc}
+
+% ---------------------------------------------------------------------------
+% Fonts
+% ---------------------------------------------------------------------------
+
+\setsansfont{Prompt}[
+       Path           = fonts/Prompt/font/,
+       Extension      = .ttf,
+       UprightFont    = *-Regular,
+       BoldFont       = *-Bold,
+       ItalicFont     = *-Italic,
+       BoldItalicFont = *-BoldItalic,
+]
+
+\renewcommand{\familydefault}{\sfdefault}
+
+% Hyperref options
+\hypersetup{
+       colorlinks = true,
+       linkcolor  = primary,
+       urlcolor   = primary,
+       citecolor  = primary,
+}
+
+% Minted defaults for code blocks
+\setminted{
+       fontsize    = \footnotesize,
+       breaklines  = true,
+       bgcolor     = grey-lighter,
+       frame       = none,
+       linenos     = false,
+}
+
+% ---------------------------------------------------------------------------
+% Colours
+% ---------------------------------------------------------------------------
+
+\definecolor{primary}{HTML}{ff2e52}
+
+\definecolor{grey}{HTML}{4a4a4a}
+\definecolor{grey-lighter}{HTML}{ededed}
+
+\definecolor{danger}{HTML}{ac001a}
+
+% ---------------------------------------------------------------------------
+% Beamer base theme
+% ---------------------------------------------------------------------------
+
+\useinnertheme{default}
+\useoutertheme{default}
+\usecolortheme{default}
+
+% Disable navigation symbols
+\setbeamertemplate{navigation symbols}{}
+
+\setbeamercolor{normal text}{fg=grey, bg=white}
+\setbeamercolor{structure}{fg=primary}
+\setbeamercolor{alerted text}{fg=danger}
+\setbeamercolor{example text}{fg=grey}
+\setbeamercolor{background canvas}{bg=white}
+\setbeamercolor{frametitle}{fg=white, bg=primary}
+\setbeamercolor{block title}{fg=white, bg=primary}
+\setbeamercolor{block body}{fg=grey, bg=grey-lighter}
+\setbeamercolor{block title alerted}{fg=white, bg=danger}
+\setbeamercolor{block body alerted}{fg=grey, bg=grey-lighter}
+\setbeamercolor{itemize item}{fg=primary}
+\setbeamercolor{itemize subitem}{fg=grey}
+\setbeamercolor{enumerate item}{fg=primary}
+\setbeamercolor{footline}{fg=grey, bg=grey-lighter}
+
+% ---------------------------------------------------------------------------
+% Fonts in beamer
+% ---------------------------------------------------------------------------
+
+\setbeamerfont{title}{size=\LARGE, series=\bfseries}
+\setbeamerfont{subtitle}{size=\large, series=\normalfont}
+\setbeamerfont{author}{size=\normalsize}
+\setbeamerfont{date}{size=\small}
+\setbeamerfont{frametitle}{size=\large, series=\bfseries}
+\setbeamerfont{block title}{size=\normalsize, series=\bfseries}
+\setbeamerfont{footline}{size=\tiny}
+
+% ---------------------------------------------------------------------------
+% Title Slide
+% ---------------------------------------------------------------------------
+
+\defbeamertemplate*{title page}{IPFire}{%
+       \begin{tikzpicture}[remember picture, overlay]
+               % Background stripe
+               \fill[primary]
+                       (current page.north west) rectangle
+                       ([yshift=-0.45\paperheight] current page.north east);
+               % Bottom bar
+               \fill[grey-lighter]
+                       (current page.south west) rectangle
+                       ([yshift=0.08\paperheight] current page.south east);
+               % Logo (top-right of red area)
+               \node[anchor=north east, inner sep=8pt] at
+                       ([xshift=-8pt, yshift=-8pt] current page.north east) {%
+                               \textcolor{white}{\textbf{\large IPFire}}%
+                       };
+               % Title text
+               \node[anchor=west, text width=0.85\paperwidth, inner sep=0pt] at
+                       ([xshift=0.06\paperwidth, yshift=-0.15\paperheight] current page.north west) {%
+                               \usebeamerfont{title}\usebeamercolor[fg]{title page}\color{white}%
+                               \inserttitle%
+                       };
+               % Subtitle
+               \node[anchor=west, text width=0.85\paperwidth, inner sep=0pt] at
+                       ([xshift=0.06\paperwidth, yshift=-0.27\paperheight] current page.north west) {%
+                               \usebeamerfont{subtitle}\color{white!85!primary}%
+                               \insertsubtitle%
+                       };
+               % Author / date block (on white/light area)
+               \node[anchor=west, inner sep=0pt] at
+                       ([xshift=0.06\paperwidth, yshift=0.18\paperheight] current page.south west) {%
+                               \color{grey}\usebeamerfont{author}\insertauthor
+                               \ifx\insertinstitute\empty\else
+                                       ~\textbar~\insertinstitute
+                               \fi
+               };
+               \node[anchor=west, inner sep=0pt] at
+                       ([xshift=0.06\paperwidth, yshift=0.12\paperheight] current page.south west) {%
+                               \color{grey!70}\usebeamerfont{date}\insertdate%
+               };
+       \end{tikzpicture}%
+}
+
+% ---------------------------------------------------------------------------
+% Frame Title
+% ---------------------------------------------------------------------------
+
+\defbeamertemplate*{frametitle}{IPFire}{%
+       \nointerlineskip
+       \begin{beamercolorbox}[wd=\paperwidth, ht=0.55cm, dp=0.25cm, leftskip=0.5cm]{frametitle}
+               \usebeamerfont{frametitle}\insertframetitle
+               \ifx\insertframesubtitle\empty\else
+                       \hspace{0.5em}{\small\usebeamerfont{framesubtitle}\insertframesubtitle}
+               \fi
+       \end{beamercolorbox}
+       % Thin accent line under frame title
+       \begin{tikzpicture}[overlay]
+               \draw[primary, line width=0.4pt]
+                       (0, 0) -- (\paperwidth, 0);
+       \end{tikzpicture}%
+}
+
+% ---------------------------------------------------------------------------
+% Footline
+% ---------------------------------------------------------------------------
+
+\defbeamertemplate*{footline}{IPFire}{%
+       \begin{beamercolorbox}[
+               wd=\paperwidth,
+               ht=0.3cm,
+               dp=0.2cm,
+               leftskip=0.5cm,
+               rightskip=0.5cm
+       ]{footline}
+       \usebeamerfont{footline}%
+       \color{grey}%
+       \insertshorttitle
+       \hfill
+       \insertshortauthor
+       \hspace{1em}%
+       \textcolor{primary}{\insertframenumber\,/\,\inserttotalframenumber}%
+       \end{beamercolorbox}%
+}
+
+% ---------------------------------------------------------------------------
+% Itemize Bullets
+% ---------------------------------------------------------------------------
+
+\setbeamertemplate{itemize item}{%
+       \tikz[baseline=-0.5ex]{\fill[primary] (0,0) circle (0.12em);}%
+}
+
+\setbeamertemplate{itemize subitem}{%
+       \tikz[baseline=-0.5ex]{\draw[primary, line width=0.6pt] (0,0) circle (0.1em);}%
+}
+
+\setbeamertemplate{itemize subsubitem}{%
+       \tikz[baseline=-0.5ex]{\fill[grey] (0,-0.08em) -- (0.2em,-0.08em) -- (0.1em,0.08em) -- cycle;}%
+}
+
+% ---------------------------------------------------------------------------
+% Section Divider Slide
+% ---------------------------------------------------------------------------
+
+% \sectionframe{Title}{Subtitle (optional)}
+\newcommand{\sectionframe}[2][]{%
+       \begin{frame}[plain, noframenumbering]
+               \begin{tikzpicture}[remember picture, overlay]
+                       \fill[primary]
+                               (current page.north west) rectangle (current page.south east);
+                       \node[anchor=center, text width=0.8\paperwidth, align=center] at
+                                       ([yshift=0.04\paperheight] current page.center) {%
+                               \color{white}\usebeamerfont{title}\textbf{#2}%
+                       };
+                       \ifx\empty#1\else
+                               \node[anchor=center, text width=0.8\paperwidth, align=center] at
+                                               ([yshift=-0.06\paperheight] current page.center) {%
+                                       \color{white!80!primary}\usebeamerfont{subtitle}#1%
+                               };
+                       \fi
+               \end{tikzpicture}
+       \end{frame}
+}
+
+\endinput
diff --git a/images/.gitkeep b/images/.gitkeep
new file mode 100644 (file)
index 0000000..e69de29
index b3b52969f7c6b1fd63694908f1a66a070c079c0c..c1476ef96883cbb6271d2b6680d7d13ee31366f8 100644 (file)
@@ -1,11 +1,32 @@
 %% presentation.tex — IPFire Beamer Presentation Template
 
 \documentclass[
-  aspectratio=169,   % 16:9 widescreen; use 43 for 4:3 classic
-  t,                 % top-align frame content by default
-  10pt,
+       aspectratio=169,   % 16:9 widescreen; use 43 for 4:3 classic
+       t,                 % top-align frame content by default
+       10pt,
 ]{beamer}
 
+% ---------------------------------------------------------------------------
+% Theme
+% ---------------------------------------------------------------------------
+
+% Load our IPFire theme
+\usetheme{IPFire}
+
+% ---------------------------------------------------------------------------
+% Packages
+% ---------------------------------------------------------------------------
+
+\usepackage{csquotes}
+\usepackage{graphicx}
+
+% ---------------------------------------------------------------------------
+% Language
+% ---------------------------------------------------------------------------
+
+\usepackage{polyglossia}
+       \setdefaultlanguage{english}
+
 % ---------------------------------------------------------------------------
 % Metadata
 % ---------------------------------------------------------------------------
          \tableofcontents[hideallsubsections]
        \end{frame}
 
+       % ---------------------------------------------------------------------------
+       % Slides are split into individual files under slides/
+       % Add or remove \input lines as needed.
+       % ---------------------------------------------------------------------------
+
+       \input{slides/01-introduction}
+       \input{slides/02-content}
+       \input{slides/99-closing}
+
        % ---------------------------------------------------------------------------
        % Appendix (optional)
        % ---------------------------------------------------------------------------
diff --git a/slides/01-introduction.tex b/slides/01-introduction.tex
new file mode 100644 (file)
index 0000000..e5a4429
--- /dev/null
@@ -0,0 +1,65 @@
+\sectionframe[Background \& Motivation]{Introduction}
+
+\section{Introduction}
+
+% ---------------------------------------------------------------------------
+% A basic content slide
+% ---------------------------------------------------------------------------
+
+\begin{frame}{What is IPFire?}
+       IPFire is a hardened, versatile, state-of-the-art Open Source firewall
+       based on Linux. Its ease of use, high performance in any scenario and
+       extensibility make it usable for everyone.
+
+       \bigskip
+
+       \begin{itemize}
+               \item Stateful Packet Inspection (SPI) Firewall
+               \item Intrusion Detection and Prevention
+               \item Web Proxy with Content Filtering
+               \item VPN support (IPsec, OpenVPN, WireGuard)
+       \end{itemize}
+\end{frame}
+
+% ---------------------------------------------------------------------------
+% Two-column layout
+% ---------------------------------------------------------------------------
+
+\begin{frame}{IPFire at a Glance}
+       \begin{columns}[T]
+               \begin{column}{0.48\textwidth}
+                       \textbf{Designed for security}
+                       \begin{itemize}
+                               \item Minimal attack surface
+                               \item Regular security updates
+                               \item Kernel hardening
+                       \end{itemize}
+               \end{column}
+               \begin{column}{0.48\textwidth}
+                       \textbf{Community-driven}
+                       \begin{itemize}
+                               \item Open Source (GPL)
+                               \item Active mailing lists \& forums
+                               \item \href{https://www.ipfire.org}{ipfire.org}
+                       \end{itemize}
+               \end{column}
+       \end{columns}
+\end{frame}
+
+% ---------------------------------------------------------------------------
+% Slide with a block
+% ---------------------------------------------------------------------------
+
+\begin{frame}{Key Principle}
+       \begin{block}{Security by Default}
+               IPFire ships in a secure configuration out of the box. Administrators
+               open only what is explicitly needed — not the other way around.
+       \end{block}
+
+       \bigskip
+
+       \begin{alertblock}{Important}
+               Always keep your IPFire installation up to date to benefit from the
+               latest security patches.
+       \end{alertblock}
+\end{frame}
diff --git a/slides/02-content.tex b/slides/02-content.tex
new file mode 100644 (file)
index 0000000..612938c
--- /dev/null
@@ -0,0 +1,46 @@
+\sectionframe[Demos, code, and data]{Content Examples}
+
+\section{Content Examples}
+
+% ---------------------------------------------------------------------------
+% Code listing (minted — requires --shell-escape when building)
+% If you don't want --shell-escape, replace \begin{minted}{bash}
+% with \begin{verbatim} or use the listings package instead.
+% ---------------------------------------------------------------------------
+
+\begin{frame}[fragile]{Checking Firewall Status}
+       You can inspect the active firewall rules from the shell:
+
+       \begin{minted}{bash}
+# List all iptables rules with counters
+iptables -nvL --line-numbers
+
+# Check INPUT chain only
+iptables -nvL INPUT
+
+# Show NAT rules
+iptables -t nat -nvL
+       \end{minted}
+\end{frame}
+
+% ---------------------------------------------------------------------------
+% Overlays / incremental reveal
+% ---------------------------------------------------------------------------
+
+\begin{frame}{How IPFire Handles a Packet}
+       \begin{enumerate}
+               \item<1-> Packet arrives on an interface
+               \item<2-> Connection tracking checks state table
+               \item<3-> Firewall rules evaluated top-to-bottom
+               \item<4-> \alert{Intrusion detection} inspects payload (optional)
+               \item<5-> Packet forwarded, dropped, or rejected
+       \end{enumerate}
+
+       \onslide<5->{%
+               \bigskip
+               \begin{block}{Stateful Inspection}
+                       IPFire tracks connection state so return traffic for established
+                       connections is allowed automatically — without explicit rules.
+               \end{block}
+       }
+\end{frame}
diff --git a/slides/99-closing.tex b/slides/99-closing.tex
new file mode 100644 (file)
index 0000000..ff8ec3c
--- /dev/null
@@ -0,0 +1,42 @@
+\sectionframe{Closing}
+
+\section{Closing}
+
+\begin{frame}{Summary}
+       \begin{itemize}
+               \item IPFire is a production-ready, hardened Linux firewall distribution
+               \item Zone-based architecture provides clear network separation
+               \item Regular updates and an active community keep it secure
+               \item Extensible via Add-ons without compromising core security
+       \end{itemize}
+
+       \bigskip
+
+       \begin{block}{Get Involved}
+               \begin{itemize}
+                       \item Website: \href{https://www.ipfire.org}{www.ipfire.org}
+                       \item Development: \href{https://git.ipfire.org}{git.ipfire.org}
+                       \item Community: \href{https://community.ipfire.org}{community.ipfire.org}
+               \end{itemize}
+       \end{block}
+\end{frame}
+
+% ---------------------------------------------------------------------------
+% Q & A — plain slide, no frame number
+% ---------------------------------------------------------------------------
+
+\begin{frame}[plain, noframenumbering]
+       \begin{tikzpicture}[remember picture, overlay]
+               \fill[primary]
+                       (current page.north west) rectangle (current page.south east);
+               \node[anchor=center] at ([yshift=0.05\paperheight] current page.center) {%
+                       \color{white}\Huge\textbf{Questions?}%
+               };
+               \node[anchor=center] at ([yshift=-0.07\paperheight] current page.center) {%
+                       \color{white!80!primary}\large\insertauthor%
+               };
+               \node[anchor=center] at ([yshift=-0.15\paperheight] current page.center) {%
+                       \color{white!70!primary}\normalsize\href{https://www.ipfire.org}{www.ipfire.org}%
+               };
+       \end{tikzpicture}
+\end{frame}