diff --git a/type/__systemd_network/gencode-remote b/type/__systemd_network/gencode-remote
new file mode 100755
index 0000000..af16ca6
--- /dev/null
+++ b/type/__systemd_network/gencode-remote
@@ -0,0 +1,20 @@
+#!/bin/sh -e
+#
+# 2022 Joachim Desroches (joachim.desroches@epfl.ch)
+#
+# This file is part of cdist.
+#
+# cdist is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# cdist is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with cdist. If not, see .
+
+systemctl enable systemd-networkd
diff --git a/type/__systemd_network/man.rst b/type/__systemd_network/man.rst
new file mode 100644
index 0000000..1b7b7a6
--- /dev/null
+++ b/type/__systemd_network/man.rst
@@ -0,0 +1,68 @@
+cdist-type__systemd-network(7)
+==============================
+
+NAME
+----
+cdist-type__systemd-network - Configure systemd.network(5) file.
+
+
+DESCRIPTION
+-----------
+
+This type allows you to configure network interfaces by generating a
+systemd.network(5) file. It will enable systemd-networkd, so be sure to remove
+any conflicting network configuration tool if appropriate!
+
+Note that the systemd.network(5) system is very complete, and this type does
+not aim at providing every possible option. Are currently available only the
+most common options: feel free to add anything you need to this type which
+hopefully will grow over time.
+
+
+REQUIRED PARAMETERS
+-------------------
+None.
+
+
+OPTIONAL PARAMETERS
+-------------------
+description
+ A text field used when displaying details about this network.
+
+OPTIONAL MULTIPLE PARAMETERS
+----------------------------
+match-name
+ A text field that will be set in the `Name` option of the `[Match]` section.
+
+
+BOOLEAN PARAMETERS
+------------------
+ipv6ra-usedomains
+ Set the `UseDomains` option of the `[IPv6AcceptRA]` section to `True`.
+
+
+EXAMPLES
+--------
+
+.. code-block:: sh
+
+ # TODO
+ __systemd-network
+
+
+SEE ALSO
+--------
+`cdist-type_systemd-resolved`\ (7)
+`systemd.network`\ (5)
+
+AUTHORS
+-------
+Joachim Desroches
+
+
+COPYING
+-------
+Copyright \(C) 2022 Joachim Desroches. You can redistribute it
+and/or modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
diff --git a/type/__systemd_network/manifest b/type/__systemd_network/manifest
new file mode 100755
index 0000000..a2c1805
--- /dev/null
+++ b/type/__systemd_network/manifest
@@ -0,0 +1,84 @@
+#!/bin/sh -e
+#
+# 2022 Joachim Desroches (joachim.desroches@epfl.ch)
+#
+# This file is part of cdist.
+#
+# cdist is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# cdist is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with cdist. If not, see .
+#
+
+os=$(cat "${__global:?}/explorer/os")
+
+case "$os" in
+'debian' | 'ubuntu' | 'archlinux')
+ :
+ ;;
+*)
+ printf "Your operating system (%s) is currently not supported by systemd-network\n" "$os" >&2
+ printf "Please contribute an implementation for it if you can.\n" >&2
+ exit 1
+ ;;
+esac
+
+# XXX: Please keep the option parsing organized in order per-section, with
+# sections in the same order as they are in the manpage. This will make hacking
+# and maintaining this type much easier.
+
+output_file="${__object:?}/files/${__object_id:?}.network"
+
+cat << EOF > "$output_file"
+# This file is managed by cdist. Do not edit by hand!
+EOF
+
+# Match section
+# Ensure section is needed, OR existence of optional params.
+if [ -f "${__object:?}/parameter/match-name" ];
+then
+ printf "\n[Match]\n" >> "$output_file"
+
+ if [ -f "${__object:?}/parameter/match-name" ];
+ then
+ sed -e 's/^/Name=/' \
+ "${__object:?}/parameter/match-name" >> "$output_file"
+ fi
+fi
+
+# Network section
+# Ensure section is needed, OR existence of optional params.
+if [ -f "${__object:?}/parameter/description" ];
+then
+ printf "\n[Network]\n" >> "$output_file"
+
+ if [ -f "${__object:?}/parameter/description" ];
+ then
+ sed -e 's/^/Description=/' \
+ "${__object:?}/parameter/description" >> "$output_file"
+ fi
+fi
+
+# IPv6AcceptRA section
+# Ensure section is needed, OR existence of optional params.
+if [ -f "${__object:?}/parameter/ipv6ra-usedomains" ];
+then
+ printf "\n[IPv6AcceptRA]\n" >> "$output_file"
+
+ if [ -f "${__object:?}/parameter/ipv6ra-usedomains" ];
+ then
+ printf "UseDomains=True\n" >> "$output_file"
+ fi
+
+fi
+
+__file "/etc/systemd/network/${__object_id:?}.network" \
+ --source "$output_file"
diff --git a/type/__systemd_network/parameter/boolean b/type/__systemd_network/parameter/boolean
new file mode 100644
index 0000000..b23dcdc
--- /dev/null
+++ b/type/__systemd_network/parameter/boolean
@@ -0,0 +1 @@
+ipv6ra-usedomains
diff --git a/type/__systemd_network/parameter/optional b/type/__systemd_network/parameter/optional
new file mode 100644
index 0000000..e1b39b0
--- /dev/null
+++ b/type/__systemd_network/parameter/optional
@@ -0,0 +1 @@
+description
diff --git a/type/__systemd_network/parameter/optional_multiple b/type/__systemd_network/parameter/optional_multiple
new file mode 100644
index 0000000..c97c387
--- /dev/null
+++ b/type/__systemd_network/parameter/optional_multiple
@@ -0,0 +1 @@
+match-name