···13- [gtklock](https://github.com/jovanlanik/gtklock), a GTK-based lockscreen for Wayland. Available as [programs.gtklock](#opt-programs.gtklock.enable).
14- [Chrysalis](https://github.com/keyboardio/Chrysalis), a graphical configurator for Kaleidoscope-powered keyboards. Available as [programs.chrysalis](#opt-programs.chrysalis.enable).
150016- [FileBrowser](https://filebrowser.org/), a web application for managing and sharing files. Available as [services.filebrowser](#opt-services.filebrowser.enable).
1718- [LACT](https://github.com/ilya-zlobintsev/LACT), a GPU monitoring and configuration tool, can now be enabled through [services.lact.enable](#opt-services.lact.enable).
···13- [gtklock](https://github.com/jovanlanik/gtklock), a GTK-based lockscreen for Wayland. Available as [programs.gtklock](#opt-programs.gtklock.enable).
14- [Chrysalis](https://github.com/keyboardio/Chrysalis), a graphical configurator for Kaleidoscope-powered keyboards. Available as [programs.chrysalis](#opt-programs.chrysalis.enable).
1516+- [Pi-hole](https://pi-hole.net/), a DNS sinkhole for advertisements based on Dnsmasq. Available as [services.pihole-ftl](#opt-services.pihole-ftl.enable), and [services.pihole-web](#opt-services.pihole-web.enable) for the web GUI and API.
17+18- [FileBrowser](https://filebrowser.org/), a web application for managing and sharing files. Available as [services.filebrowser](#opt-services.filebrowser.enable).
1920- [LACT](https://github.com/ilya-zlobintsev/LACT), a GPU monitoring and configuration tool, can now be enabled through [services.lact.enable](#opt-services.lact.enable).
···1+# pihole-FTL {#module-services-networking-pihole-ftl}
2+3+*Upstream documentation*: <https://docs.pi-hole.net/ftldns/>
4+5+pihole-FTL is a fork of [Dnsmasq](index.html#module-services-networking-dnsmasq),
6+providing some additional features, including an API for analysis and
7+statistics.
8+9+Note that pihole-FTL and Dnsmasq cannot be enabled at
10+the same time.
11+12+## Configuration {#module-services-networking-pihole-ftl-configuration}
13+14+pihole-FTL can be configured with [{option}`services.pihole-ftl.settings`](options.html#opt-services.pihole-ftl.settings), which controls the content of `pihole.toml`.
15+16+The template pihole.toml is provided in `pihole-ftl.passthru.settingsTemplate`,
17+which describes all settings.
18+19+Example configuration:
20+21+```nix
22+{
23+ services.pihole-ftl = {
24+ enable = true;
25+ openFirewallDHCP = true;
26+ queryLogDeleter.enable = true;
27+ lists = [
28+ {
29+ url = "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts";
30+ # Alternatively, use the file from nixpkgs. Note its contents won't be
31+ # automatically updated by Pi-hole, as it would with an online URL.
32+ # url = "file://${pkgs.stevenblack-blocklist}/hosts";
33+ description = "Steven Black's unified adlist";
34+ }
35+ ];
36+ settings = {
37+ dns = {
38+ domainNeeded = true;
39+ expandHosts = true;
40+ interface = "br-lan";
41+ listeningMode = "BIND";
42+ upstreams = [ "127.0.0.1#5053" ];
43+ };
44+ dhcp = {
45+ active = true;
46+ router = "192.168.10.1";
47+ start = "192.168.10.2";
48+ end = "192.168.10.254";
49+ leaseTime = "1d";
50+ ipv6 = true;
51+ multiDNS = true;
52+ hosts = [
53+ # Static address for the current host
54+ "aa:bb:cc:dd:ee:ff,192.168.10.1,${config.networking.hostName},infinite"
55+ ];
56+ rapidCommit = true;
57+ };
58+ misc.dnsmasq_lines = [
59+ # This DHCP server is the only one on the network
60+ "dhcp-authoritative"
61+ # Source: https://data.iana.org/root-anchors/root-anchors.xml
62+ "trust-anchor=.,38696,8,2,683D2D0ACB8C9B712A1948B27F741219298D0A450D612C483AF444A4C0FB2B16"
63+ ];
64+ };
65+ };
66+}
67+```
68+69+### Inheriting configuration from Dnsmasq {#module-services-networking-pihole-ftl-configuration-inherit-dnsmasq}
70+71+If [{option}`services.pihole-ftl.useDnsmasqConfig`](options.html#opt-services.pihole-ftl.useDnsmasqConfig) is enabled, the configuration [options of the Dnsmasq
72+module](index.html#module-services-networking-dnsmasq) will be automatically
73+used by pihole-FTL. Note that this may cause duplicate option errors
74+depending on pihole-FTL settings.
75+76+See the [Dnsmasq
77+example](index.html#module-services-networking-dnsmasq-configuration-home) for
78+an exemplar Dnsmasq configuration. Make sure to set
79+[{option}`services.dnsmasq.enable`](options.html#opt-services.dnsmasq.enable) to false and
80+[{option}`services.pihole-ftl.enable`](options.html#opt-services.pihole-ftl.enable) to true instead:
81+82+```nix
83+{
84+ services.pihole-ftl = {
85+ enable = true;
86+ useDnsmasqConfig = true;
87+ };
88+}
89+```
90+91+### Serving on multiple interfaces {#module-services-networking-pihole-ftl-configuration-multiple-interfaces}
92+93+Pi-hole's configuration only supports specifying a single interface. If you want
94+to configure additional interfaces with different configuration, use
95+`misc.dnsmasq_lines` to append extra Dnsmasq options.
96+97+```nix
98+{
99+ services.pihole-ftl = {
100+ settings.misc.dnsmasq_lines = [
101+ # Specify the secondary interface
102+ "interface=enp1s0"
103+ # A different device is the router on this network, e.g. the one
104+ # provided by your ISP
105+ "dhcp-option=enp1s0,option:router,192.168.0.1"
106+ # Specify the IPv4 ranges to allocate, with a 1-day lease time
107+ "dhcp-range=enp1s0,192.168.0.10,192.168.0.253,1d"
108+ # Enable IPv6
109+ "dhcp-range=::f,::ff,constructor:enp1s0,ra-names,ra-stateless"
110+ ];
111+ };
112+ };
113+}
114+```
115+116+## Administration {#module-services-networking-pihole-ftl-administration}
117+118+*pihole command documentation*: <https://docs.pi-hole.net/main/pihole-command>
119+120+Enabling pihole-FTL provides the `pihole` command, which can be used to control
121+the daemon and some configuration.
122+123+Note that in NixOS the script has been patched to remove the reinstallation,
124+update, and Dnsmasq configuration commands. In NixOS, Pi-hole's configuration is
125+immutable and must be done with NixOS options.
126+127+For more convenient administration and monitoring, see [Pi-hole
128+Dashboard](#module-services-web-apps-pihole-web)
···1+{
2+ config,
3+ lib,
4+ pkgs,
5+ ...
6+}:
7+8+with {
9+ inherit (lib)
10+ elemAt
11+ getExe
12+ hasAttrByPath
13+ mkEnableOption
14+ mkIf
15+ mkOption
16+ strings
17+ types
18+ ;
19+};
20+21+let
22+ mkDefaults = lib.mapAttrsRecursive (n: v: lib.mkDefault v);
23+24+ cfg = config.services.pihole-ftl;
25+26+ piholeScript = pkgs.writeScriptBin "pihole" ''
27+ sudo=exec
28+ if [[ "$USER" != '${cfg.user}' ]]; then
29+ sudo='exec /run/wrappers/bin/sudo -u ${cfg.user}'
30+ fi
31+ $sudo ${getExe cfg.piholePackage} "$@"
32+ '';
33+34+ settingsFormat = pkgs.formats.toml { };
35+ settingsFile = settingsFormat.generate "pihole.toml" cfg.settings;
36+in
37+{
38+ options.services.pihole-ftl = {
39+ enable = mkEnableOption "Pi-hole FTL";
40+41+ package = lib.mkPackageOption pkgs "pihole-ftl" { };
42+ piholePackage = lib.mkPackageOption pkgs "pihole" { };
43+44+ privacyLevel = mkOption {
45+ type = types.numbers.between 0 3;
46+ description = ''
47+ Level of detail in generated statistics. 0 enables full statistics, 3
48+ shows only anonymous statistics.
49+50+ See [the documentation](https://docs.pi-hole.net/ftldns/privacylevels).
51+52+ Also see services.dnsmasq.settings.log-queries to completely disable
53+ query logging.
54+ '';
55+ default = 0;
56+ example = "3";
57+ };
58+59+ openFirewallDHCP = mkOption {
60+ type = types.bool;
61+ default = false;
62+ description = "Open ports in the firewall for pihole-FTL's DHCP server.";
63+ };
64+65+ openFirewallWebserver = mkOption {
66+ type = types.bool;
67+ default = false;
68+ description = ''
69+ Open ports in the firewall for pihole-FTL's webserver, as configured in `settings.webserver.port`.
70+ '';
71+ };
72+73+ configDirectory = mkOption {
74+ type = types.path;
75+ default = "/etc/pihole";
76+ internal = true;
77+ readOnly = true;
78+ description = ''
79+ Path for pihole configuration.
80+ pihole does not currently support any path other than /etc/pihole.
81+ '';
82+ };
83+84+ stateDirectory = mkOption {
85+ type = types.path;
86+ default = "/var/lib/pihole";
87+ description = ''
88+ Path for pihole state files.
89+ '';
90+ };
91+92+ logDirectory = mkOption {
93+ type = types.path;
94+ default = "/var/log/pihole";
95+ description = "Path for Pi-hole log files";
96+ };
97+98+ settings = mkOption {
99+ type = settingsFormat.type;
100+ description = ''
101+ Configuration options for pihole.toml.
102+ See the upstream [documentation](https://docs.pi-hole.net/ftldns/configfile).
103+ '';
104+ };
105+106+ useDnsmasqConfig = mkOption {
107+ type = types.bool;
108+ default = false;
109+ description = ''
110+ Import options defined in [](#opt-services.dnsmasq.settings) via
111+ misc.dnsmasq_lines in Pi-hole's config.
112+ '';
113+ };
114+115+ pihole = mkOption {
116+ type = types.package;
117+ default = piholeScript;
118+ internal = true;
119+ description = "Pi-hole admin script";
120+ };
121+122+ lists =
123+ let
124+ adlistType = types.submodule {
125+ options = {
126+ url = mkOption {
127+ type = types.str;
128+ description = "URL of the domain list";
129+ };
130+ type = mkOption {
131+ type = types.enum [
132+ "allow"
133+ "block"
134+ ];
135+ default = "block";
136+ description = "Whether domains on this list should be explicitly allowed, or blocked";
137+ };
138+ enabled = mkOption {
139+ type = types.bool;
140+ default = true;
141+ description = "Whether this list is enabled";
142+ };
143+ description = mkOption {
144+ type = types.str;
145+ description = "Description of the list";
146+ default = "";
147+ };
148+ };
149+ };
150+ in
151+ mkOption {
152+ type = with types; listOf adlistType;
153+ description = "Deny (or allow) domain lists to use";
154+ default = [ ];
155+ example = [
156+ {
157+ url = "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts";
158+ }
159+ ];
160+ };
161+162+ user = mkOption {
163+ type = types.str;
164+ default = "pihole";
165+ description = "User to run the service as.";
166+ };
167+168+ group = mkOption {
169+ type = types.str;
170+ default = "pihole";
171+ description = "Group to run the service as.";
172+ };
173+174+ queryLogDeleter = {
175+ enable = mkEnableOption ("Pi-hole FTL DNS query log deleter");
176+177+ age = mkOption {
178+ type = types.int;
179+ default = 90;
180+ description = ''
181+ Delete DNS query logs older than this many days, if
182+ [](#opt-services.pihole-ftl.queryLogDeleter.enable) is on.
183+ '';
184+ };
185+186+ interval = mkOption {
187+ type = types.str;
188+ default = "weekly";
189+ description = ''
190+ How often the query log deleter is run. See systemd.time(7) for more
191+ information about the format.
192+ '';
193+ };
194+ };
195+ };
196+197+ config = mkIf cfg.enable {
198+ assertions = [
199+ {
200+ assertion = !config.services.dnsmasq.enable;
201+ message = "pihole-ftl conflicts with dnsmasq. Please disable one of them.";
202+ }
203+204+ {
205+ assertion =
206+ builtins.length cfg.lists == 0
207+ || (
208+ (hasAttrByPath [ "webserver" "port" ] cfg.settings)
209+ && !builtins.elem cfg.settings.webserver.port [
210+ ""
211+ null
212+ ]
213+ );
214+ message = ''
215+ The Pi-hole webserver must be enabled for lists set in services.pihole-ftl.lists to be automatically loaded on startup via the web API.
216+ services.pihole-ftl.settings.port must be defined, e.g. by enabling services.pihole-web.enable and defining services.pihole-web.port.
217+ '';
218+ }
219+220+ {
221+ assertion =
222+ builtins.length cfg.lists == 0
223+ || !(hasAttrByPath [ "webserver" "api" "cli_pw" ] cfg.settings)
224+ || cfg.settings.webserver.api.cli_pw == true;
225+ message = ''
226+ services.pihole-ftl.settings.webserver.api.cli_pw must be true for lists set in services.pihole-ftl.lists to be automatically loaded on startup.
227+ This enables an ephemeral password used by the pihole command.
228+ '';
229+ }
230+ ];
231+232+ services.pihole-ftl.settings = lib.mkMerge [
233+ # Defaults
234+ (mkDefaults {
235+ misc.readOnly = true; # Prevent config changes via API or CLI by default
236+ webserver.port = ""; # Disable the webserver by default
237+ misc.privacyLevel = cfg.privacyLevel;
238+ })
239+240+ # Move state files to cfg.stateDirectory
241+ {
242+ # TODO: Pi-hole currently hardcodes dhcp-leasefile this in its
243+ # generated dnsmasq.conf, and we can't override it
244+ misc.dnsmasq_lines = [
245+ # "dhcp-leasefile=${cfg.stateDirectory}/dhcp.leases"
246+ # "hostsdir=${cfg.stateDirectory}/hosts"
247+ ];
248+249+ files = {
250+ database = "${cfg.stateDirectory}/pihole-FTL.db";
251+ gravity = "${cfg.stateDirectory}/gravity.db";
252+ macvendor = "${cfg.stateDirectory}/gravity.db";
253+ log.ftl = "${cfg.logDirectory}/FTL.log";
254+ log.dnsmasq = "${cfg.logDirectory}/pihole.log";
255+ log.webserver = "${cfg.logDirectory}/webserver.log";
256+ };
257+258+ webserver.tls = "${cfg.stateDirectory}/tls.pem";
259+ }
260+261+ (lib.optionalAttrs cfg.useDnsmasqConfig {
262+ misc.dnsmasq_lines = lib.pipe config.services.dnsmasq.configFile [
263+ builtins.readFile
264+ (lib.strings.splitString "\n")
265+ (builtins.filter (s: s != ""))
266+ ];
267+ })
268+ ];
269+270+ systemd.tmpfiles.rules = [
271+ "d ${cfg.configDirectory} 0700 ${cfg.user} ${cfg.group} - -"
272+ "d ${cfg.stateDirectory} 0700 ${cfg.user} ${cfg.group} - -"
273+ "d ${cfg.logDirectory} 0700 ${cfg.user} ${cfg.group} - -"
274+ ];
275+276+ systemd.services = {
277+ pihole-ftl =
278+ let
279+ setupService = config.systemd.services.pihole-ftl-setup.name;
280+ in
281+ {
282+ description = "Pi-hole FTL";
283+284+ after = [ "network.target" ];
285+ before = [ setupService ];
286+287+ wantedBy = [ "multi-user.target" ];
288+ wants = [ setupService ];
289+290+ environment = {
291+ # Currently unused, but allows the service to be reloaded
292+ # automatically when the config is changed.
293+ PIHOLE_CONFIG = settingsFile;
294+295+ # pihole is executed by the /actions/gravity API endpoint
296+ PATH = lib.mkForce (
297+ lib.makeBinPath [
298+ cfg.piholePackage
299+ ]
300+ );
301+ };
302+303+ serviceConfig = {
304+ Type = "simple";
305+ User = cfg.user;
306+ Group = cfg.group;
307+ AmbientCapabilities = [
308+ "CAP_NET_BIND_SERVICE"
309+ "CAP_NET_RAW"
310+ "CAP_NET_ADMIN"
311+ "CAP_SYS_NICE"
312+ "CAP_IPC_LOCK"
313+ "CAP_CHOWN"
314+ "CAP_SYS_TIME"
315+ ];
316+ ExecStart = "${getExe cfg.package} no-daemon";
317+ Restart = "on-failure";
318+ RestartSec = 1;
319+ # Hardening
320+ NoNewPrivileges = true;
321+ PrivateTmp = true;
322+ PrivateDevices = true;
323+ DevicePolicy = "closed";
324+ ProtectSystem = "strict";
325+ ProtectHome = "read-only";
326+ ProtectControlGroups = true;
327+ ProtectKernelModules = true;
328+ ProtectKernelTunables = true;
329+ ReadWritePaths = [
330+ cfg.configDirectory
331+ cfg.stateDirectory
332+ cfg.logDirectory
333+ ];
334+ RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK";
335+ RestrictNamespaces = true;
336+ RestrictRealtime = true;
337+ RestrictSUIDSGID = true;
338+ MemoryDenyWriteExecute = true;
339+ LockPersonality = true;
340+ };
341+ };
342+343+ pihole-ftl-setup = {
344+ description = "Pi-hole FTL setup";
345+ # Wait for network so lists can be downloaded
346+ after = [ "network-online.target" ];
347+ requires = [ "network-online.target" ];
348+ serviceConfig = {
349+ Type = "oneshot";
350+ User = cfg.user;
351+ Group = cfg.group;
352+353+ # Hardening
354+ NoNewPrivileges = true;
355+ PrivateTmp = true;
356+ PrivateDevices = true;
357+ DevicePolicy = "closed";
358+ ProtectSystem = "strict";
359+ ProtectHome = "read-only";
360+ ProtectControlGroups = true;
361+ ProtectKernelModules = true;
362+ ProtectKernelTunables = true;
363+ ReadWritePaths = [
364+ cfg.configDirectory
365+ cfg.stateDirectory
366+ cfg.logDirectory
367+ ];
368+ RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK";
369+ RestrictNamespaces = true;
370+ RestrictRealtime = true;
371+ RestrictSUIDSGID = true;
372+ MemoryDenyWriteExecute = true;
373+ LockPersonality = true;
374+ };
375+ script = import ./pihole-ftl-setup-script.nix {
376+ inherit
377+ cfg
378+ config
379+ lib
380+ pkgs
381+ ;
382+ };
383+ };
384+385+ pihole-ftl-log-deleter = mkIf cfg.queryLogDeleter.enable {
386+ description = "Pi-hole FTL DNS query log deleter";
387+ serviceConfig = {
388+ Type = "oneshot";
389+ User = cfg.user;
390+ Group = cfg.group;
391+ # Hardening
392+ NoNewPrivileges = true;
393+ PrivateTmp = true;
394+ PrivateDevices = true;
395+ DevicePolicy = "closed";
396+ ProtectSystem = "strict";
397+ ProtectHome = "read-only";
398+ ProtectControlGroups = true;
399+ ProtectKernelModules = true;
400+ ProtectKernelTunables = true;
401+ ReadWritePaths = [ cfg.stateDirectory ];
402+ RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK";
403+ RestrictNamespaces = true;
404+ RestrictRealtime = true;
405+ RestrictSUIDSGID = true;
406+ MemoryDenyWriteExecute = true;
407+ LockPersonality = true;
408+ };
409+ script =
410+ let
411+ days = toString cfg.queryLogDeleter.age;
412+ database = "${cfg.stateDirectory}/pihole-FTL.db";
413+ in
414+ ''
415+ set -euo pipefail
416+417+ echo "Deleting query logs older than ${days} days"
418+ ${getExe cfg.package} sqlite3 "${database}" "DELETE FROM query_storage WHERE timestamp <= CAST(strftime('%s', date('now', '-${days} day')) AS INT); select changes() from query_storage limit 1"
419+ '';
420+ };
421+ };
422+423+ systemd.timers.pihole-ftl-log-deleter = mkIf cfg.queryLogDeleter.enable {
424+ description = "Pi-hole FTL DNS query log deleter";
425+ before = [
426+ config.systemd.services.pihole-ftl.name
427+ config.systemd.services.pihole-ftl-setup.name
428+ ];
429+ wantedBy = [ "timers.target" ];
430+ timerConfig = {
431+ OnCalendar = cfg.queryLogDeleter.interval;
432+ Unit = "pihole-ftl-log-deleter.service";
433+ };
434+ };
435+436+ networking.firewall = lib.mkMerge [
437+ (mkIf cfg.openFirewallDHCP {
438+ allowedUDPPorts = [ 53 ];
439+ allowedTCPPorts = [ 53 ];
440+ })
441+442+ (mkIf cfg.openFirewallWebserver {
443+ allowedTCPPorts = lib.pipe cfg.settings.webserver.port [
444+ (lib.splitString ",")
445+ (map (
446+ port:
447+ lib.pipe port [
448+ (builtins.split "[[:alpha:]]+")
449+ builtins.head
450+ lib.toInt
451+ ]
452+ ))
453+ ];
454+ })
455+ ];
456+457+ users.users.${cfg.user} = {
458+ group = cfg.group;
459+ isSystemUser = true;
460+ };
461+462+ users.groups.${cfg.group} = { };
463+464+ environment.etc."pihole/pihole.toml" = {
465+ source = settingsFile;
466+ user = cfg.user;
467+ group = cfg.group;
468+ mode = "400";
469+ };
470+471+ environment.systemPackages = [ cfg.pihole ];
472+473+ services.logrotate.settings.pihole-ftl = {
474+ enable = true;
475+ files = [ "${cfg.logDirectory}/FTL.log" ];
476+ };
477+ };
478+479+ meta = {
480+ doc = ./pihole-ftl.md;
481+ maintainers = with lib.maintainers; [ williamvds ];
482+ };
483+}
+19
nixos/modules/services/web-apps/pihole-web.md
···0000000000000000000
···1+# Pi-hole Web Dashboard {#module-services-web-apps-pihole-web}
2+3+The Pi-hole suite provides a web GUI for controlling and monitoring
4+[pihole-FTL](index.html#module-services-networking-pihole-ftl).
5+6+## Configuration {#module-services-web-apps-pihole-web-configuration}
7+8+Example configuration:
9+10+```nix
11+{
12+ services.pihole-web = {
13+ enable = true;
14+ ports = [ 80 ];
15+ };
16+}
17+```
18+19+The dashboard can be configured using [{option}`services.pihole-ftl.settings`](options.html#opt-services.pihole-ftl.settings), in particular the `webserver` subsection.
···42 # There is a failure while the binary is checked
43 doCheck = false;
4445- meta = with lib; {
46 description = "Host-based file integrity monitoring tool";
47 longDescription = ''
48 FIM is a File Integrity Monitoring tool that tracks any event over your
···56 '';
57 homepage = "https://github.com/Achiefs/fim";
58 changelog = "https://github.com/Achiefs/fim/releases/tag/v${version}";
59- license = licenses.gpl3Only;
60- maintainers = with maintainers; [ fab ];
61 mainProgram = "fim";
62 };
63}
···42 # There is a failure while the binary is checked
43 doCheck = false;
4445+ meta = {
46 description = "Host-based file integrity monitoring tool";
47 longDescription = ''
48 FIM is a File Integrity Monitoring tool that tracks any event over your
···56 '';
57 homepage = "https://github.com/Achiefs/fim";
58 changelog = "https://github.com/Achiefs/fim/releases/tag/v${version}";
59+ license = lib.licenses.gpl3Only;
60+ maintainers = with lib.maintainers; [ fab ];
61 mainProgram = "fim";
62 };
63}
···43 # depends on cpu instructions that may not be available on builders
44 doCheck = false;
4546- meta = with lib; {
47 description = "Small programming language for writing short programs processing textual data";
48 mainProgram = "frawk";
49 homepage = "https://github.com/ezrosent/frawk";
50 changelog = "https://github.com/ezrosent/frawk/releases/tag/v${version}";
51- license = with licenses; [
52 mit # or
53 asl20
54 ];
55- maintainers = with maintainers; [ figsoda ];
56 };
57}
···43 # depends on cpu instructions that may not be available on builders
44 doCheck = false;
4546+ meta = {
47 description = "Small programming language for writing short programs processing textual data";
48 mainProgram = "frawk";
49 homepage = "https://github.com/ezrosent/frawk";
50 changelog = "https://github.com/ezrosent/frawk/releases/tag/v${version}";
51+ license = with lib.licenses; [
52 mit # or
53 asl20
54 ];
55+ maintainers = with lib.maintainers; [ figsoda ];
56 };
57}
+3-3
pkgs/by-name/fr/fre/package.nix
···18 useFetchCargoVendor = true;
19 cargoHash = "sha256-07qKG4ju2UOkTcgWAl2U0uqQZyiosK1UH/M2BvwMAaU=";
2021- meta = with lib; {
22 description = "CLI tool for tracking your most-used directories and files";
23 homepage = "https://github.com/camdencheek/fre";
24 changelog = "https://github.com/camdencheek/fre/blob/${version}/CHANGELOG.md";
25- license = with licenses; [ mit ];
26- maintainers = with maintainers; [ gaykitty ];
27 mainProgram = "fre";
28 };
29}
···18 useFetchCargoVendor = true;
19 cargoHash = "sha256-07qKG4ju2UOkTcgWAl2U0uqQZyiosK1UH/M2BvwMAaU=";
2021+ meta = {
22 description = "CLI tool for tracking your most-used directories and files";
23 homepage = "https://github.com/camdencheek/fre";
24 changelog = "https://github.com/camdencheek/fre/blob/${version}/CHANGELOG.md";
25+ license = with lib.licenses; [ mit ];
26+ maintainers = with lib.maintainers; [ gaykitty ];
27 mainProgram = "fre";
28 };
29}
+3-3
pkgs/by-name/fr/freenukum/package.nix
···70 install -Dm644 "${desktopItem}/share/applications/"* -t $out/share/applications/
71 '';
7273- meta = with lib; {
74 description = "Clone of the original Duke Nukum 1 Jump'n Run game";
75 homepage = "https://salsa.debian.org/silwol/freenukum";
76 changelog = "https://salsa.debian.org/silwol/freenukum/-/blob/v${version}/CHANGELOG.md";
77- license = licenses.agpl3Plus;
78- maintainers = with maintainers; [ _0x4A6F ];
79 broken = stdenv.hostPlatform.isDarwin;
80 };
81}
···70 install -Dm644 "${desktopItem}/share/applications/"* -t $out/share/applications/
71 '';
7273+ meta = {
74 description = "Clone of the original Duke Nukum 1 Jump'n Run game";
75 homepage = "https://salsa.debian.org/silwol/freenukum";
76 changelog = "https://salsa.debian.org/silwol/freenukum/-/blob/v${version}/CHANGELOG.md";
77+ license = lib.licenses.agpl3Plus;
78+ maintainers = with lib.maintainers; [ _0x4A6F ];
79 broken = stdenv.hostPlatform.isDarwin;
80 };
81}
+4-4
pkgs/by-name/fr/freetds/package.nix
···31 pkg-config
32 ];
3334- meta = with lib; {
35 description = "Libraries to natively talk to Microsoft SQL Server and Sybase databases";
36 homepage = "https://www.freetds.org";
37 changelog = "https://github.com/FreeTDS/freetds/releases/tag/v${version}";
38- license = licenses.lgpl2;
39- maintainers = with maintainers; [ peterhoeg ];
40- platforms = platforms.all;
41 };
42}
···31 pkg-config
32 ];
3334+ meta = {
35 description = "Libraries to natively talk to Microsoft SQL Server and Sybase databases";
36 homepage = "https://www.freetds.org";
37 changelog = "https://github.com/FreeTDS/freetds/releases/tag/v${version}";
38+ license = lib.licenses.lgpl2;
39+ maintainers = with lib.maintainers; [ peterhoeg ];
40+ platforms = lib.platforms.all;
41 };
42}
+4-4
pkgs/by-name/fr/frotz/package.nix
···4849 installFlags = [ "PREFIX=$(out)" ];
5051- meta = with lib; {
52 homepage = "https://davidgriffith.gitlab.io/frotz/";
53 changelog = "https://gitlab.com/DavidGriffith/frotz/-/raw/${version}/NEWS";
54 description = "Z-machine interpreter for Infocom games and other interactive fiction";
55 mainProgram = "frotz";
56- platforms = platforms.unix;
57- maintainers = with maintainers; [
58 nicknovitski
59 ddelabru
60 ];
61- license = licenses.gpl2Plus;
62 };
63}
···4849 installFlags = [ "PREFIX=$(out)" ];
5051+ meta = {
52 homepage = "https://davidgriffith.gitlab.io/frotz/";
53 changelog = "https://gitlab.com/DavidGriffith/frotz/-/raw/${version}/NEWS";
54 description = "Z-machine interpreter for Infocom games and other interactive fiction";
55 mainProgram = "frotz";
56+ platforms = lib.platforms.unix;
57+ maintainers = with lib.maintainers; [
58 nicknovitski
59 ddelabru
60 ];
61+ license = lib.licenses.gpl2Plus;
62 };
63}
+4-4
pkgs/by-name/ga/galene/package.nix
···38 tests.vm = nixosTests.galene.basic;
39 };
4041- meta = with lib; {
42 description = "Videoconferencing server that is easy to deploy, written in Go";
43 homepage = "https://github.com/jech/galene";
44 changelog = "https://github.com/jech/galene/raw/galene-${version}/CHANGES";
45- license = licenses.mit;
46- platforms = platforms.linux;
47 teams = [ lib.teams.ngi ];
48- maintainers = with maintainers; [
49 rgrunbla
50 erdnaxe
51 ];
···38 tests.vm = nixosTests.galene.basic;
39 };
4041+ meta = {
42 description = "Videoconferencing server that is easy to deploy, written in Go";
43 homepage = "https://github.com/jech/galene";
44 changelog = "https://github.com/jech/galene/raw/galene-${version}/CHANGES";
45+ license = lib.licenses.mit;
46+ platforms = lib.platforms.linux;
47 teams = [ lib.teams.ngi ];
48+ maintainers = with lib.maintainers; [
49 rgrunbla
50 erdnaxe
51 ];
+3-3
pkgs/by-name/ga/galer/package.nix
···1718 vendorHash = "sha256-BS7ZUq8/swZpTaYGjiF5OuZXQpoosZ3mdF9v1euijxo=";
1920- meta = with lib; {
21 description = "Tool to fetch URLs from HTML attributes";
22 homepage = "https://github.com/dwisiswant0/galer";
23 changelog = "https://github.com/dwisiswant0/galer/releases/tag/v${version}";
24- license = licenses.mit;
25- maintainers = with maintainers; [ fab ];
26 mainProgram = "galer";
27 };
28}
···1718 vendorHash = "sha256-BS7ZUq8/swZpTaYGjiF5OuZXQpoosZ3mdF9v1euijxo=";
1920+ meta = {
21 description = "Tool to fetch URLs from HTML attributes";
22 homepage = "https://github.com/dwisiswant0/galer";
23 changelog = "https://github.com/dwisiswant0/galer/releases/tag/v${version}";
24+ license = lib.licenses.mit;
25+ maintainers = with lib.maintainers; [ fab ];
26 mainProgram = "galer";
27 };
28}
+4-4
pkgs/by-name/ga/gallia/package.nix
···4647 pythonImportsCheck = [ "gallia" ];
4849- meta = with lib; {
50 description = "Extendable Pentesting Framework for the Automotive Domain";
51 homepage = "https://github.com/Fraunhofer-AISEC/gallia";
52 changelog = "https://github.com/Fraunhofer-AISEC/gallia/releases/tag/v${version}";
53- license = with licenses; [ asl20 ];
54- maintainers = with maintainers; [
55 fab
56 rumpelsepp
57 ];
58- platforms = platforms.linux;
59 };
60}
···4647 pythonImportsCheck = [ "gallia" ];
4849+ meta = {
50 description = "Extendable Pentesting Framework for the Automotive Domain";
51 homepage = "https://github.com/Fraunhofer-AISEC/gallia";
52 changelog = "https://github.com/Fraunhofer-AISEC/gallia/releases/tag/v${version}";
53+ license = with lib.licenses; [ asl20 ];
54+ maintainers = with lib.maintainers; [
55 fab
56 rumpelsepp
57 ];
58+ platforms = lib.platforms.linux;
59 };
60}
+3-3
pkgs/by-name/ga/gam/package.nix
···63 runHook postCheck
64 '';
6566- meta = with lib; {
67 description = "Command line management for Google Workspace";
68 mainProgram = "gam";
69 homepage = "https://github.com/GAM-team/GAM/wiki";
70 changelog = "https://github.com/GAM-team/GAM/releases/tag/v${version}";
71- license = licenses.asl20;
72- maintainers = with maintainers; [ thanegill ];
73 };
7475}
···63 runHook postCheck
64 '';
6566+ meta = {
67 description = "Command line management for Google Workspace";
68 mainProgram = "gam";
69 homepage = "https://github.com/GAM-team/GAM/wiki";
70 changelog = "https://github.com/GAM-team/GAM/releases/tag/v${version}";
71+ license = lib.licenses.asl20;
72+ maintainers = with lib.maintainers; [ thanegill ];
73 };
7475}
+4-4
pkgs/by-name/ga/game-rs/package.nix
···2324 propagatedBuildInputs = [ steam-run ];
2526- meta = with lib; {
27 description = "Minimal CLI game launcher for linux";
28 homepage = "https://github.com/amanse/game-rs";
29 changelog = "https://github.com/Amanse/game-rs/releases/tag/v${version}";
30- license = with licenses; [ mit ];
31- maintainers = with maintainers; [ amanse ];
32- platforms = platforms.linux;
33 };
34}
···2324 propagatedBuildInputs = [ steam-run ];
2526+ meta = {
27 description = "Minimal CLI game launcher for linux";
28 homepage = "https://github.com/amanse/game-rs";
29 changelog = "https://github.com/Amanse/game-rs/releases/tag/v${version}";
30+ license = with lib.licenses; [ mit ];
31+ maintainers = with lib.maintainers; [ amanse ];
32+ platforms = lib.platforms.linux;
33 };
34}
+3-3
pkgs/by-name/ga/gato/package.nix
···40 "gato"
41 ];
4243- meta = with lib; {
44 description = "GitHub Self-Hosted Runner Enumeration and Attack Tool";
45 homepage = "https://github.com/praetorian-inc/gato";
46 changelog = "https://github.com/praetorian-inc/gato/releases/tag/${version}";
47- license = licenses.asl20;
48- maintainers = with maintainers; [ fab ];
49 mainProgram = "gato";
50 };
51}
···165166 passthru.tests = { inherit (nixosTests) mediatomb; };
167168- meta = with lib; {
169 homepage = "https://docs.gerbera.io/";
170 changelog = "https://github.com/gerbera/gerbera/releases/tag/v${version}";
171 description = "UPnP Media Server for 2024";
···174 It allows to stream your digital media through your home network and consume it on all kinds
175 of UPnP supporting devices.
176 '';
177- license = licenses.gpl2Only;
178- maintainers = with maintainers; [ ardumont ];
179- platforms = platforms.linux;
180 mainProgram = "gerbera";
181 };
182}
···165166 passthru.tests = { inherit (nixosTests) mediatomb; };
167168+ meta = {
169 homepage = "https://docs.gerbera.io/";
170 changelog = "https://github.com/gerbera/gerbera/releases/tag/v${version}";
171 description = "UPnP Media Server for 2024";
···174 It allows to stream your digital media through your home network and consume it on all kinds
175 of UPnP supporting devices.
176 '';
177+ license = lib.licenses.gpl2Only;
178+ maintainers = with lib.maintainers; [ ardumont ];
179+ platforms = lib.platforms.linux;
180 mainProgram = "gerbera";
181 };
182}
···44 LIBGIT2_NO_VENDOR = 1;
45 };
4647- meta = with lib; {
48 description = "Minimalist set of hooks to aid pairing and link commits to issues";
49 homepage = "https://github.com/PurpleBooth/git-mit";
50 changelog = "https://github.com/PurpleBooth/git-mit/releases/tag/v${version}";
51- license = licenses.cc0;
52- maintainers = with maintainers; [ figsoda ];
53 };
54}
···44 LIBGIT2_NO_VENDOR = 1;
45 };
4647+ meta = {
48 description = "Minimalist set of hooks to aid pairing and link commits to issues";
49 homepage = "https://github.com/PurpleBooth/git-mit";
50 changelog = "https://github.com/PurpleBooth/git-mit/releases/tag/v${version}";
51+ license = lib.licenses.cc0;
52+ maintainers = with lib.maintainers; [ figsoda ];
53 };
54}
···7778 passthru.updateScript = nix-update-script { };
7980- meta = with lib; {
81 description = "The missing Package Manager for Kubernetes featuring a GUI and a CLI";
82 homepage = "https://github.com/glasskube/glasskube";
83 changelog = "https://github.com/glasskube/glasskube/releases/tag/v${version}";
84- maintainers = with maintainers; [ jakuzure ];
85- license = licenses.asl20;
86 mainProgram = "glasskube";
87 };
88}
···7778 passthru.updateScript = nix-update-script { };
7980+ meta = {
81 description = "The missing Package Manager for Kubernetes featuring a GUI and a CLI";
82 homepage = "https://github.com/glasskube/glasskube";
83 changelog = "https://github.com/glasskube/glasskube/releases/tag/v${version}";
84+ maintainers = with lib.maintainers; [ jakuzure ];
85+ license = lib.licenses.asl20;
86 mainProgram = "glasskube";
87 };
88}
+3-3
pkgs/by-name/gl/glitter/package.nix
···34 "runs_correctly"
35 ];
3637- meta = with lib; {
38 description = "Git wrapper that allows you to compress multiple commands into one";
39 homepage = "https://github.com/milo123459/glitter";
40 changelog = "https://github.com/Milo123459/glitter/releases/tag/v${version}";
41- license = licenses.mit;
42- maintainers = with maintainers; [ figsoda ];
43 mainProgram = "glitter";
44 };
45}
···34 "runs_correctly"
35 ];
3637+ meta = {
38 description = "Git wrapper that allows you to compress multiple commands into one";
39 homepage = "https://github.com/milo123459/glitter";
40 changelog = "https://github.com/Milo123459/glitter/releases/tag/v${version}";
41+ license = lib.licenses.mit;
42+ maintainers = with lib.maintainers; [ figsoda ];
43 mainProgram = "glitter";
44 };
45}
+3-3
pkgs/by-name/gl/glow/package.nix
···36 --zsh <($out/bin/glow completion zsh)
37 '';
3839- meta = with lib; {
40 description = "Render markdown on the CLI, with pizzazz!";
41 homepage = "https://github.com/charmbracelet/glow";
42 changelog = "https://github.com/charmbracelet/glow/releases/tag/v${version}";
43- license = licenses.mit;
44- maintainers = with maintainers; [
45 Br1ght0ne
46 penguwin
47 ];
···36 --zsh <($out/bin/glow completion zsh)
37 '';
3839+ meta = {
40 description = "Render markdown on the CLI, with pizzazz!";
41 homepage = "https://github.com/charmbracelet/glow";
42 changelog = "https://github.com/charmbracelet/glow/releases/tag/v${version}";
43+ license = lib.licenses.mit;
44+ maintainers = with lib.maintainers; [
45 Br1ght0ne
46 penguwin
47 ];
+3-3
pkgs/by-name/go/go-bindata/package.nix
···24 "-w"
25 ];
2627- meta = with lib; {
28 homepage = "https://github.com/kevinburke/go-bindata";
29 changelog = "https://github.com/kevinburke/go-bindata/blob/v${version}/CHANGELOG.md";
30 description = "Small utility which generates Go code from any file, useful for embedding binary data in a Go program";
31 mainProgram = "go-bindata";
32- maintainers = [ ];
33- license = licenses.cc0;
34 };
35}
···24 "-w"
25 ];
2627+ meta = {
28 homepage = "https://github.com/kevinburke/go-bindata";
29 changelog = "https://github.com/kevinburke/go-bindata/blob/v${version}/CHANGELOG.md";
30 description = "Small utility which generates Go code from any file, useful for embedding binary data in a Go program";
31 mainProgram = "go-bindata";
32+ maintainers = with lib.maintainers; [ ];
33+ license = lib.licenses.cc0;
34 };
35}
+3-3
pkgs/by-name/go/go-camo/package.nix
···43 rm pkg/camo/proxy_{,filter_}test.go
44 '';
4546- meta = with lib; {
47 description = "Camo server is a special type of image proxy that proxies non-secure images over SSL/TLS";
48 homepage = "https://github.com/cactus/go-camo";
49 changelog = "https://github.com/cactus/go-camo/releases/tag/v${version}";
50- license = licenses.mit;
51 mainProgram = "go-camo";
52- maintainers = with maintainers; [ viraptor ];
53 };
54}
···43 rm pkg/camo/proxy_{,filter_}test.go
44 '';
4546+ meta = {
47 description = "Camo server is a special type of image proxy that proxies non-secure images over SSL/TLS";
48 homepage = "https://github.com/cactus/go-camo";
49 changelog = "https://github.com/cactus/go-camo/releases/tag/v${version}";
50+ license = lib.licenses.mit;
51 mainProgram = "go-camo";
52+ maintainers = with lib.maintainers; [ viraptor ];
53 };
54}
+3-3
pkgs/by-name/go/go-cve-search/package.nix
···20 # Tests requires network access
21 doCheck = false;
2223- meta = with lib; {
24 description = "Lightweight CVE search tool";
25 mainProgram = "go-cve-search";
26 longDescription = ''
···29 '';
30 homepage = "https://github.com/s-index/go-cve-search";
31 changelog = "https://github.com/s-index/go-cve-search/releases/tag/v${version}";
32- license = with licenses; [ mit ];
33- maintainers = with maintainers; [ fab ];
34 };
35}
···23 "-X=github.com/vulsio/go-exploitdb/config.Version=${version}"
24 ];
2526- meta = with lib; {
27 description = "Tool for searching Exploits from Exploit Databases, etc";
28 mainProgram = "go-exploitdb";
29 homepage = "https://github.com/vulsio/go-exploitdb";
30 changelog = "https://github.com/vulsio/go-exploitdb/releases/tag/v${version}";
31- license = licenses.mit;
32- maintainers = with maintainers; [ fab ];
33 };
34}
···23 "-X=github.com/vulsio/go-exploitdb/config.Version=${version}"
24 ];
2526+ meta = {
27 description = "Tool for searching Exploits from Exploit Databases, etc";
28 mainProgram = "go-exploitdb";
29 homepage = "https://github.com/vulsio/go-exploitdb";
30 changelog = "https://github.com/vulsio/go-exploitdb/releases/tag/v${version}";
31+ license = lib.licenses.mit;
32+ maintainers = with lib.maintainers; [ fab ];
33 };
34}
+3-3
pkgs/by-name/go/go-licenses/package.nix
···51 # Tests require internet connection
52 doCheck = false;
5354- meta = with lib; {
55 changelog = "https://github.com/google/go-licenses/releases/tag/v${version}";
56 description = "Reports on the licenses used by a Go package and its dependencies";
57 mainProgram = "go-licenses";
58 homepage = "https://github.com/google/go-licenses";
59- license = with licenses; [ asl20 ];
60- maintainers = with maintainers; [ Luflosi ];
61 };
62}
···51 # Tests require internet connection
52 doCheck = false;
5354+ meta = {
55 changelog = "https://github.com/google/go-licenses/releases/tag/v${version}";
56 description = "Reports on the licenses used by a Go package and its dependencies";
57 mainProgram = "go-licenses";
58 homepage = "https://github.com/google/go-licenses";
59+ license = with lib.licenses; [ asl20 ];
60+ maintainers = with lib.maintainers; [ Luflosi ];
61 };
62}
+3-3
pkgs/by-name/go/go-secdump/package.nix
···22 "-w"
23 ];
2425- meta = with lib; {
26 description = "Tool to remotely dump secrets from the Windows registry";
27 homepage = "https://github.com/jfjallid/go-secdump";
28 changelog = "https://github.com/jfjallid/go-secdump/releases/tag/${version}";
29- license = licenses.mit;
30- maintainers = with maintainers; [ fab ];
31 mainProgram = "go-secdump";
32 platforms = lib.platforms.linux;
33 };
···22 "-w"
23 ];
2425+ meta = {
26 description = "Tool to remotely dump secrets from the Windows registry";
27 homepage = "https://github.com/jfjallid/go-secdump";
28 changelog = "https://github.com/jfjallid/go-secdump/releases/tag/${version}";
29+ license = lib.licenses.mit;
30+ maintainers = with lib.maintainers; [ fab ];
31 mainProgram = "go-secdump";
32 platforms = lib.platforms.linux;
33 };
+3-3
pkgs/by-name/go/go-swagger/package.nix
···28 "-X github.com/go-swagger/go-swagger/cmd/swagger/commands.Commit=${src.rev}"
29 ];
3031- meta = with lib; {
32 description = "Golang implementation of Swagger 2.0, representation of your RESTful API";
33 homepage = "https://github.com/go-swagger/go-swagger";
34 changelog = "https://github.com/go-swagger/go-swagger/releases/tag/v${version}";
35- license = licenses.asl20;
36- maintainers = with maintainers; [ kalbasit ];
37 mainProgram = "swagger";
38 };
39}
···28 "-X github.com/go-swagger/go-swagger/cmd/swagger/commands.Commit=${src.rev}"
29 ];
3031+ meta = {
32 description = "Golang implementation of Swagger 2.0, representation of your RESTful API";
33 homepage = "https://github.com/go-swagger/go-swagger";
34 changelog = "https://github.com/go-swagger/go-swagger/releases/tag/v${version}";
35+ license = lib.licenses.asl20;
36+ maintainers = with lib.maintainers; [ kalbasit ];
37 mainProgram = "swagger";
38 };
39}
+3-3
pkgs/by-name/go/go2rtc/package.nix
···2627 doCheck = false; # tests fail
2829- meta = with lib; {
30 description = "Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MJPEG, HomeKit, FFmpeg, etc";
31 homepage = "https://github.com/AlexxIT/go2rtc";
32 changelog = "https://github.com/AlexxIT/go2rtc/releases/tag/v${version}";
33- license = licenses.mit;
34- maintainers = with maintainers; [ hexa ];
35 mainProgram = "go2rtc";
36 };
37}
···30 # no tests
31 doCheck = false;
3233- meta = with lib; {
34 description = "LLMs for your CLI";
35 homepage = "https://github.com/gorilla-llm/gorilla-cli";
36 changelog = "https://github.com/gorilla-llm/gorilla-cli/releases/tag/${version}";
37- license = licenses.asl20;
38- maintainers = with maintainers; [ happysalada ];
39 mainProgram = "gorilla";
40 };
41}
···30 # no tests
31 doCheck = false;
3233+ meta = {
34 description = "LLMs for your CLI";
35 homepage = "https://github.com/gorilla-llm/gorilla-cli";
36 changelog = "https://github.com/gorilla-llm/gorilla-cli/releases/tag/${version}";
37+ license = lib.licenses.asl20;
38+ maintainers = with lib.maintainers; [ happysalada ];
39 mainProgram = "gorilla";
40 };
41}
+4-4
pkgs/by-name/go/goss/package.nix
···60 updateScript = nix-update-script { };
61 };
6263- meta = with lib; {
64 homepage = "https://github.com/goss-org/goss/";
65 changelog = "https://github.com/goss-org/goss/releases/tag/v${version}";
66 description = "Quick and easy server validation";
···69 It eases the process of writing tests by allowing the user to generate tests from the current system state.
70 Once the test suite is written they can be executed, waited-on, or served as a health endpoint.
71 '';
72- license = licenses.asl20;
73 mainProgram = "goss";
74- maintainers = with maintainers; [
75 hyzual
76 jk
77 anthonyroussel
78 ];
79- platforms = platforms.linux ++ platforms.darwin;
80 };
81}
···60 updateScript = nix-update-script { };
61 };
6263+ meta = {
64 homepage = "https://github.com/goss-org/goss/";
65 changelog = "https://github.com/goss-org/goss/releases/tag/v${version}";
66 description = "Quick and easy server validation";
···69 It eases the process of writing tests by allowing the user to generate tests from the current system state.
70 Once the test suite is written they can be executed, waited-on, or served as a health endpoint.
71 '';
72+ license = lib.licenses.asl20;
73 mainProgram = "goss";
74+ maintainers = with lib.maintainers; [
75 hyzual
76 jk
77 anthonyroussel
78 ];
79+ platforms = lib.platforms.linux ++ lib.platforms.darwin;
80 };
81}
+3-3
pkgs/by-name/go/gotestfmt/package.nix
···1718 vendorHash = null;
1920- meta = with lib; {
21 description = "Go test output for humans";
22 homepage = "https://github.com/gotesttools/gotestfmt";
23 changelog = "https://github.com/GoTestTools/gotestfmt/releases/tag/v${version}";
24- license = licenses.unlicense;
25- maintainers = with maintainers; [ urandom ];
26 };
27}
···1718 vendorHash = null;
1920+ meta = {
21 description = "Go test output for humans";
22 homepage = "https://github.com/gotesttools/gotestfmt";
23 changelog = "https://github.com/GoTestTools/gotestfmt/releases/tag/v${version}";
24+ license = lib.licenses.unlicense;
25+ maintainers = with lib.maintainers; [ urandom ];
26 };
27}
+3-3
pkgs/by-name/go/gotestwaf/package.nix
···3334 versionCheckProgramArg = "--version";
3536- meta = with lib; {
37 description = "Tool for API and OWASP attack simulation";
38 homepage = "https://github.com/wallarm/gotestwaf";
39 changelog = "https://github.com/wallarm/gotestwaf/releases/tag/v${version}";
40- license = licenses.mit;
41- maintainers = with maintainers; [ fab ];
42 mainProgram = "gotestwaf";
43 };
44}
···3334 versionCheckProgramArg = "--version";
3536+ meta = {
37 description = "Tool for API and OWASP attack simulation";
38 homepage = "https://github.com/wallarm/gotestwaf";
39 changelog = "https://github.com/wallarm/gotestwaf/releases/tag/v${version}";
40+ license = lib.licenses.mit;
41+ maintainers = with lib.maintainers; [ fab ];
42 mainProgram = "gotestwaf";
43 };
44}
+3-3
pkgs/by-name/go/gotosocial/package.nix
···6263 passthru.tests.gotosocial = nixosTests.gotosocial;
6465- meta = with lib; {
66 homepage = "https://gotosocial.org";
67 changelog = "https://codeberg.org/superseriousbusiness/gotosocial/releases/tag/v${version}";
68 description = "Fast, fun, ActivityPub server, powered by Go";
···73 advertised to! A light-weight alternative to Mastodon
74 and Pleroma, with support for clients!
75 '';
76- maintainers = with maintainers; [ blakesmith ];
77- license = licenses.agpl3Only;
78 };
79}
···6263 passthru.tests.gotosocial = nixosTests.gotosocial;
6465+ meta = {
66 homepage = "https://gotosocial.org";
67 changelog = "https://codeberg.org/superseriousbusiness/gotosocial/releases/tag/v${version}";
68 description = "Fast, fun, ActivityPub server, powered by Go";
···73 advertised to! A light-weight alternative to Mastodon
74 and Pleroma, with support for clients!
75 '';
76+ maintainers = with lib.maintainers; [ blakesmith ];
77+ license = lib.licenses.agpl3Only;
78 };
79}
+3-3
pkgs/by-name/go/goverview/package.nix
···35 # Tests require network access
36 doCheck = false;
3738- meta = with lib; {
39 description = "Tool to get an overview of the list of URLs";
40 mainProgram = "goverview";
41 homepage = "https://github.com/j3ssie/goverview";
42 changelog = "https://github.com/j3ssie/goverview/releases/tag/v${version}";
43- license = licenses.mit;
44- maintainers = with maintainers; [ fab ];
45 };
46}
···35 # Tests require network access
36 doCheck = false;
3738+ meta = {
39 description = "Tool to get an overview of the list of URLs";
40 mainProgram = "goverview";
41 homepage = "https://github.com/j3ssie/goverview";
42 changelog = "https://github.com/j3ssie/goverview/releases/tag/v${version}";
43+ license = lib.licenses.mit;
44+ maintainers = with lib.maintainers; [ fab ];
45 };
46}
+3-3
pkgs/by-name/go/govulncheck/package.nix
···37 "-w"
38 ];
3940- meta = with lib; {
41 homepage = "https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck";
42 downloadPage = "https://github.com/golang/vuln";
43 changelog = "https://github.com/golang/vuln/releases/tag/v${version}";
···64 example, a dependency with a Windows-specific vulnerability will not be
65 reported for a Linux build.
66 '';
67- license = with licenses; [ bsd3 ];
68- maintainers = with maintainers; [
69 jk
70 SuperSandro2000
71 ];
···37 "-w"
38 ];
3940+ meta = {
41 homepage = "https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck";
42 downloadPage = "https://github.com/golang/vuln";
43 changelog = "https://github.com/golang/vuln/releases/tag/v${version}";
···64 example, a dependency with a Windows-specific vulnerability will not be
65 reported for a Linux build.
66 '';
67+ license = with lib.licenses; [ bsd3 ];
68+ maintainers = with lib.maintainers; [
69 jk
70 SuperSandro2000
71 ];
+3-3
pkgs/by-name/gr/grafana-dash-n-grab/package.nix
···28 # you don't have grafana running.
29 doCheck = false;
3031- meta = with lib; {
32 description = "Grafana Dash-n-Grab (gdg) -- backup and restore Grafana dashboards, datasources, and other entities";
33- license = licenses.bsd3;
34 homepage = "https://github.com/esnet/gdg";
35- teams = [ teams.bitnomial ];
36 mainProgram = "gdg";
37 changelog = "https://github.com/esnet/gdg/releases/tag/v${version}";
38 };
···28 # you don't have grafana running.
29 doCheck = false;
3031+ meta = {
32 description = "Grafana Dash-n-Grab (gdg) -- backup and restore Grafana dashboards, datasources, and other entities";
33+ license = lib.licenses.bsd3;
34 homepage = "https://github.com/esnet/gdg";
35+ teams = [ lib.teams.bitnomial ];
36 mainProgram = "gdg";
37 changelog = "https://github.com/esnet/gdg/releases/tag/v${version}";
38 };
+3-3
pkgs/by-name/gr/grafana-loki/package.nix
···69 "-X ${t}.Revision=unknown"
70 ];
7172- meta = with lib; {
73 description = "Like Prometheus, but for logs";
74 mainProgram = "promtail";
75- license = with licenses; [
76 agpl3Only
77 asl20
78 ];
79 homepage = "https://grafana.com/oss/loki/";
80 changelog = "https://github.com/grafana/loki/releases/tag/v${version}";
81- maintainers = with maintainers; [
82 willibutz
83 globin
84 mmahut
···30 "IMDShift"
31 ];
3233- meta = with lib; {
34 description = "Tool to migrate workloads to IMDSv2";
35 mainProgram = "imdshift";
36 homepage = "https://github.com/ayushpriya10/IMDShift";
37 changelog = "https://github.com/ayushpriya10/IMDShift/releases/tag/v${version}";
38- license = licenses.gpl3Only;
39- maintainers = with maintainers; [ fab ];
40 };
41}
···30 "IMDShift"
31 ];
3233+ meta = {
34 description = "Tool to migrate workloads to IMDSv2";
35 mainProgram = "imdshift";
36 homepage = "https://github.com/ayushpriya10/IMDShift";
37 changelog = "https://github.com/ayushpriya10/IMDShift/releases/tag/v${version}";
38+ license = lib.licenses.gpl3Only;
39+ maintainers = with lib.maintainers; [ fab ];
40 };
41}
+4-4
pkgs/by-name/im/immer/package.nix
···3334 passthru.updateScript = nix-update-script { };
3536- meta = with lib; {
37 description = "Postmodern immutable and persistent data structures for C++ — value semantics at scale";
38 homepage = "https://sinusoid.es/immer";
39 changelog = "https://github.com/arximboldi/immer/releases/tag/v${version}";
40- license = licenses.boost;
41- maintainers = with maintainers; [ sifmelcara ];
42- platforms = platforms.all;
43 };
44}
···3334 passthru.updateScript = nix-update-script { };
3536+ meta = {
37 description = "Postmodern immutable and persistent data structures for C++ — value semantics at scale";
38 homepage = "https://sinusoid.es/immer";
39 changelog = "https://github.com/arximboldi/immer/releases/tag/v${version}";
40+ license = lib.licenses.boost;
41+ maintainers = with lib.maintainers; [ sifmelcara ];
42+ platforms = lib.platforms.all;
43 };
44}
+3-3
pkgs/by-name/in/inferno/package.nix
···29 "--skip=flamegraph_multiple_base_symbol"
30 ];
3132- meta = with lib; {
33 description = "Port of parts of the flamegraph toolkit to Rust";
34 homepage = "https://github.com/jonhoo/inferno";
35 changelog = "https://github.com/jonhoo/inferno/blob/v${version}/CHANGELOG.md";
36- license = licenses.cddl;
37- maintainers = with maintainers; [ figsoda ];
38 };
39}
···29 "--skip=flamegraph_multiple_base_symbol"
30 ];
3132+ meta = {
33 description = "Port of parts of the flamegraph toolkit to Rust";
34 homepage = "https://github.com/jonhoo/inferno";
35 changelog = "https://github.com/jonhoo/inferno/blob/v${version}/CHANGELOG.md";
36+ license = lib.licenses.cddl;
37+ maintainers = with lib.maintainers; [ figsoda ];
38 };
39}
+3-3
pkgs/by-name/in/inform6/package.nix
···21 "PREFIX=${placeholder "out"}"
22 ];
2324- meta = with lib; {
25 description = "Interactive fiction compiler and libraries";
26 longDescription = ''
27 Inform 6 is a C-like programming language for writing interactive fiction
···29 '';
30 homepage = "https://gitlab.com/DavidGriffith/inform6unix";
31 changelog = "https://gitlab.com/DavidGriffith/inform6unix/-/raw/${version}/NEWS";
32- license = licenses.artistic2;
33 maintainers = with lib.maintainers; [ ddelabru ];
34- platforms = platforms.all;
35 };
36}
···21 "PREFIX=${placeholder "out"}"
22 ];
2324+ meta = {
25 description = "Interactive fiction compiler and libraries";
26 longDescription = ''
27 Inform 6 is a C-like programming language for writing interactive fiction
···29 '';
30 homepage = "https://gitlab.com/DavidGriffith/inform6unix";
31 changelog = "https://gitlab.com/DavidGriffith/inform6unix/-/raw/${version}/NEWS";
32+ license = lib.licenses.artistic2;
33 maintainers = with lib.maintainers; [ ddelabru ];
34+ platforms = lib.platforms.all;
35 };
36}
+3-3
pkgs/by-name/in/infra/package.nix
···24 "-w"
25 ];
2627- meta = with lib; {
28 description = "Infra manages access to infrastructure such as Kubernetes";
29 homepage = "https://github.com/infrahq/infra";
30 changelog = "https://github.com/infrahq/infra/raw/v${version}/CHANGELOG.md";
31- license = licenses.elastic20;
32- maintainers = with maintainers; [ peterromfeldhk ];
33 mainProgram = "infra";
34 };
35}
···24 "-w"
25 ];
2627+ meta = {
28 description = "Infra manages access to infrastructure such as Kubernetes";
29 homepage = "https://github.com/infrahq/infra";
30 changelog = "https://github.com/infrahq/infra/raw/v${version}/CHANGELOG.md";
31+ license = lib.licenses.elastic20;
32+ maintainers = with lib.maintainers; [ peterromfeldhk ];
33 mainProgram = "infra";
34 };
35}
+3-3
pkgs/by-name/in/infracost/package.nix
···61 runHook postInstallCheck
62 '';
6364- meta = with lib; {
65 homepage = "https://infracost.io";
66 changelog = "https://github.com/infracost/infracost/releases/tag/v${version}";
67 description = "Cloud cost estimates for Terraform in your CLI and pull requests";
···70 This helps developers, DevOps et al. quickly see the cost breakdown and
71 compare different deployment options upfront.
72 '';
73- license = licenses.asl20;
74- maintainers = with maintainers; [
75 davegallant
76 jk
77 kashw2
···61 runHook postInstallCheck
62 '';
6364+ meta = {
65 homepage = "https://infracost.io";
66 changelog = "https://github.com/infracost/infracost/releases/tag/v${version}";
67 description = "Cloud cost estimates for Terraform in your CLI and pull requests";
···70 This helps developers, DevOps et al. quickly see the cost breakdown and
71 compare different deployment options upfront.
72 '';
73+ license = lib.licenses.asl20;
74+ maintainers = with lib.maintainers; [
75 davegallant
76 jk
77 kashw2
+4-4
pkgs/by-name/in/inih/package.nix
···22 ninja
23 ];
2425- meta = with lib; {
26 description = "Simple .INI file parser in C, good for embedded systems";
27 homepage = "https://github.com/benhoyt/inih";
28 changelog = "https://github.com/benhoyt/inih/releases/tag/r${version}";
29- license = licenses.bsd3;
30- maintainers = with maintainers; [ TredwellGit ];
31- platforms = platforms.all;
32 };
33}
···22 ninja
23 ];
2425+ meta = {
26 description = "Simple .INI file parser in C, good for embedded systems";
27 homepage = "https://github.com/benhoyt/inih";
28 changelog = "https://github.com/benhoyt/inih/releases/tag/r${version}";
29+ license = lib.licenses.bsd3;
30+ maintainers = with lib.maintainers; [ TredwellGit ];
31+ platforms = lib.platforms.all;
32 };
33}
+3-3
pkgs/by-name/in/initool/package.nix
···29 runHook postInstall
30 '';
3132- meta = with lib; {
33 inherit (mlton.meta) platforms;
3435 description = "Manipulate INI files from the command line";
36 mainProgram = "initool";
37 homepage = "https://github.com/dbohdan/initool";
38- license = licenses.mit;
39- maintainers = with maintainers; [ e1mo ];
40 changelog = "https://github.com/dbohdan/initool/releases/tag/v${version}";
41 };
42}
···29 runHook postInstall
30 '';
3132+ meta = {
33 inherit (mlton.meta) platforms;
3435 description = "Manipulate INI files from the command line";
36 mainProgram = "initool";
37 homepage = "https://github.com/dbohdan/initool";
38+ license = lib.licenses.mit;
39+ maintainers = with lib.maintainers; [ e1mo ];
40 changelog = "https://github.com/dbohdan/initool/releases/tag/v${version}";
41 };
42}
+3-3
pkgs/by-name/in/innernet/package.nix
···60 };
61 };
6263- meta = with lib; {
64 description = "Private network system that uses WireGuard under the hood";
65 homepage = "https://github.com/tonarino/innernet";
66 changelog = "https://github.com/tonarino/innernet/releases/tag/v${version}";
67- license = licenses.mit;
68- maintainers = with maintainers; [
69 tomberek
70 _0x4A6F
71 ];
···60 };
61 };
6263+ meta = {
64 description = "Private network system that uses WireGuard under the hood";
65 homepage = "https://github.com/tonarino/innernet";
66 changelog = "https://github.com/tonarino/innernet/releases/tag/v${version}";
67+ license = lib.licenses.mit;
68+ maintainers = with lib.maintainers; [
69 tomberek
70 _0x4A6F
71 ];
+3-3
pkgs/by-name/in/inql/package.nix
···32 "inql"
33 ];
3435- meta = with lib; {
36 description = "Security testing tool for GraphQL";
37 mainProgram = "inql";
38 homepage = "https://github.com/doyensec/inql";
39 changelog = "https://github.com/doyensec/inql/releases/tag/v${version}";
40- license = with licenses; [ asl20 ];
41- maintainers = with maintainers; [ fab ];
42 };
43}
···32 "inql"
33 ];
3435+ meta = {
36 description = "Security testing tool for GraphQL";
37 mainProgram = "inql";
38 homepage = "https://github.com/doyensec/inql";
39 changelog = "https://github.com/doyensec/inql/releases/tag/v${version}";
40+ license = with lib.licenses; [ asl20 ];
41+ maintainers = with lib.maintainers; [ fab ];
42 };
43}
+3-3
pkgs/by-name/in/insomnia/package.nix
···27 }
28 .${stdenv.system} or (throw "Unsupported system: ${stdenv.system}");
2930- meta = with lib; {
31 homepage = "https://insomnia.rest";
32 description = " The open-source, cross-platform API client for GraphQL, REST, WebSockets, SSE and gRPC. With Cloud, Local and Git storage.";
33 mainProgram = "insomnia";
34 changelog = "https://github.com/Kong/insomnia/releases/tag/core@${version}";
35- license = licenses.asl20;
36 platforms = [
37 "aarch64-darwin"
38 "x86_64-linux"
39 "x86_64-darwin"
40 ];
41- maintainers = with maintainers; [
42 markus1189
43 kashw2
44 DataHearth
···27 }
28 .${stdenv.system} or (throw "Unsupported system: ${stdenv.system}");
2930+ meta = {
31 homepage = "https://insomnia.rest";
32 description = " The open-source, cross-platform API client for GraphQL, REST, WebSockets, SSE and gRPC. With Cloud, Local and Git storage.";
33 mainProgram = "insomnia";
34 changelog = "https://github.com/Kong/insomnia/releases/tag/core@${version}";
35+ license = lib.licenses.asl20;
36 platforms = [
37 "aarch64-darwin"
38 "x86_64-linux"
39 "x86_64-darwin"
40 ];
41+ maintainers = with lib.maintainers; [
42 markus1189
43 kashw2
44 DataHearth
···9899 hardeningDisable = [ "bindnow" ];
100101- meta = with lib; {
102 changelog = "https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/v${version}/NEWS";
103 homepage = "https://drm.pages.freedesktop.org/igt-gpu-tools/";
104 description = "Tools for development and testing of the Intel DRM driver";
105- license = licenses.mit;
106 platforms = [
107 "x86_64-linux"
108 "i686-linux"
109 ];
110- maintainers = with maintainers; [ pSub ];
111 };
112}
···9899 hardeningDisable = [ "bindnow" ];
100101+ meta = {
102 changelog = "https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/v${version}/NEWS";
103 homepage = "https://drm.pages.freedesktop.org/igt-gpu-tools/";
104 description = "Tools for development and testing of the Intel DRM driver";
105+ license = lib.licenses.mit;
106 platforms = [
107 "x86_64-linux"
108 "i686-linux"
109 ];
110+ maintainers = with lib.maintainers; [ pSub ];
111 };
112}
+4-4
pkgs/by-name/in/intel-media-driver/package.nix
···72 inherit (pkgsi686Linux) intel-media-driver;
73 };
7475- meta = with lib; {
76 description = "Intel Media Driver for VAAPI — Broadwell+ iGPUs";
77 longDescription = ''
78 The Intel Media Driver for VAAPI is a new VA-API (Video Acceleration API)
···81 '';
82 homepage = "https://github.com/intel/media-driver";
83 changelog = "https://github.com/intel/media-driver/releases/tag/intel-media-${version}";
84- license = with licenses; [
85 bsd3
86 mit
87 ];
88- platforms = platforms.linux;
89- maintainers = with maintainers; [ SuperSandro2000 ];
90 };
91}
···72 inherit (pkgsi686Linux) intel-media-driver;
73 };
7475+ meta = {
76 description = "Intel Media Driver for VAAPI — Broadwell+ iGPUs";
77 longDescription = ''
78 The Intel Media Driver for VAAPI is a new VA-API (Video Acceleration API)
···81 '';
82 homepage = "https://github.com/intel/media-driver";
83 changelog = "https://github.com/intel/media-driver/releases/tag/intel-media-${version}";
84+ license = with lib.licenses; [
85 bsd3
86 mit
87 ];
88+ platforms = lib.platforms.linux;
89+ maintainers = with lib.maintainers; [ SuperSandro2000 ];
90 };
91}
+3-3
pkgs/by-name/in/interactsh/package.nix
···26 # Test files are not part of the release tarball
27 doCheck = false;
2829- meta = with lib; {
30 description = "Out of bounds interaction gathering server and client library";
31 longDescription = ''
32 Interactsh is an Open-Source Solution for Out of band Data Extraction,
···35 '';
36 homepage = "https://github.com/projectdiscovery/interactsh";
37 changelog = "https://github.com/projectdiscovery/interactsh/releases/tag/v${version}";
38- license = licenses.mit;
39- maintainers = with maintainers; [ hanemile ];
40 };
41}
···26 # Test files are not part of the release tarball
27 doCheck = false;
2829+ meta = {
30 description = "Out of bounds interaction gathering server and client library";
31 longDescription = ''
32 Interactsh is an Open-Source Solution for Out of band Data Extraction,
···35 '';
36 homepage = "https://github.com/projectdiscovery/interactsh";
37 changelog = "https://github.com/projectdiscovery/interactsh/releases/tag/v${version}";
38+ license = lib.licenses.mit;
39+ maintainers = with lib.maintainers; [ hanemile ];
40 };
41}
···1718 vendorHash = null;
1920- meta = with lib; {
21 description = "ircdog is a simple wrapper over the raw IRC protocol that can respond to pings, and interprets formatting codes";
22 mainProgram = "ircdog";
23 homepage = "https://github.com/ergochat/ircdog";
24 changelog = "https://github.com/ergochat/ircdog/releases/tag/v${version}";
25- license = licenses.isc;
26- maintainers = with maintainers; [ hexa ];
27 };
28}
···1718 vendorHash = null;
1920+ meta = {
21 description = "ircdog is a simple wrapper over the raw IRC protocol that can respond to pings, and interprets formatting codes";
22 mainProgram = "ircdog";
23 homepage = "https://github.com/ergochat/ircdog";
24 changelog = "https://github.com/ergochat/ircdog/releases/tag/v${version}";
25+ license = lib.licenses.isc;
26+ maintainers = with lib.maintainers; [ hexa ];
27 };
28}
+4-4
pkgs/by-name/ir/irqbalance/package.nix
···49 --replace-fail ' $IRQBALANCE_ARGS' ""
50 '';
5152- meta = with lib; {
53 homepage = "https://github.com/Irqbalance/irqbalance";
54 changelog = "https://github.com/Irqbalance/irqbalance/releases/tag/v${version}";
55 description = "Daemon to help balance the cpu load generated by interrupts across all of a systems cpus";
56- license = licenses.gpl2Only;
57- platforms = platforms.linux;
58- maintainers = with maintainers; [ moni ];
59 };
60}
···49 --replace-fail ' $IRQBALANCE_ARGS' ""
50 '';
5152+ meta = {
53 homepage = "https://github.com/Irqbalance/irqbalance";
54 changelog = "https://github.com/Irqbalance/irqbalance/releases/tag/v${version}";
55 description = "Daemon to help balance the cpu load generated by interrupts across all of a systems cpus";
56+ license = lib.licenses.gpl2Only;
57+ platforms = lib.platforms.linux;
58+ maintainers = with lib.maintainers; [ moni ];
59 };
60}
+3-3
pkgs/by-name/ir/irrd/package.nix
···174 "test_050_non_json_response"
175 ];
176177- meta = with lib; {
178 changelog = "https://irrd.readthedocs.io/en/v${version}/releases/";
179 description = "Internet Routing Registry database server, processing IRR objects in the RPSL format";
180- license = licenses.mit;
181 homepage = "https://github.com/irrdnet/irrd";
182- teams = [ teams.wdz ];
183 };
184}
···99 };
100 };
101102- meta = with lib; {
103 # error: implicit instantiation of undefined template 'std::char_traits<unsigned char>'
104 broken = stdenv.hostPlatform.isDarwin;
105 changelog = "https://downloads.isc.org/isc/kea/${version}/Kea-${version}-ReleaseNotes.txt";
···112 use by enterprises and service providers, either as is or with
113 extensions and modifications.
114 '';
115- license = licenses.mpl20;
116- platforms = platforms.unix;
117- maintainers = with maintainers; [
118 fpletz
119 hexa
120 ];
···99 };
100 };
101102+ meta = {
103 # error: implicit instantiation of undefined template 'std::char_traits<unsigned char>'
104 broken = stdenv.hostPlatform.isDarwin;
105 changelog = "https://downloads.isc.org/isc/kea/${version}/Kea-${version}-ReleaseNotes.txt";
···112 use by enterprises and service providers, either as is or with
113 extensions and modifications.
114 '';
115+ license = lib.licenses.mpl20;
116+ platforms = lib.platforms.unix;
117+ maintainers = with lib.maintainers; [
118 fpletz
119 hexa
120 ];
+3-3
pkgs/by-name/ke/keedump/package.nix
···18 useFetchCargoVendor = true;
19 cargoHash = "sha256-ogfLMkTzGwYADDfn05IOXiOSJzk5iN2GJ6kaT9L9sqM=";
2021- meta = with lib; {
22 description = "PoC KeePass master password dumper";
23 homepage = "https://github.com/ynuwenhof/keedump";
24 changelog = "https://github.com/ynuwenhof/keedump/releases/tag/v${version}";
25- license = with licenses; [
26 asl20
27 mit
28 ];
29- maintainers = with maintainers; [ fab ];
30 mainProgram = "keedump";
31 };
32}
···62 --zsh <($out/bin/ko completion zsh)
63 '';
6465- meta = with lib; {
66 homepage = "https://github.com/ko-build/ko";
67 changelog = "https://github.com/ko-build/ko/releases/tag/v${version}";
68 description = "Build and deploy Go applications";
···73 ko builds images by effectively executing go build on your local machine, and as such doesn't require docker to be installed. This can make it a good fit for lightweight CI/CD use cases.
74 ko makes multi-platform builds easy, produces SBOMs by default, and includes support for simple YAML templating which makes it a powerful tool for Kubernetes applications.
75 '';
76- license = licenses.asl20;
77- maintainers = with maintainers; [
78 nickcao
79 jk
80 vdemeester
···62 --zsh <($out/bin/ko completion zsh)
63 '';
6465+ meta = {
66 homepage = "https://github.com/ko-build/ko";
67 changelog = "https://github.com/ko-build/ko/releases/tag/v${version}";
68 description = "Build and deploy Go applications";
···73 ko builds images by effectively executing go build on your local machine, and as such doesn't require docker to be installed. This can make it a good fit for lightweight CI/CD use cases.
74 ko makes multi-platform builds easy, produces SBOMs by default, and includes support for simple YAML templating which makes it a powerful tool for Kubernetes applications.
75 '';
76+ license = lib.licenses.asl20;
77+ maintainers = with lib.maintainers; [
78 nickcao
79 jk
80 vdemeester
+3-3
pkgs/by-name/ko/konstraint/package.nix
···43 runHook postInstallCheck
44 '';
4546- meta = with lib; {
47 homepage = "https://github.com/plexsystems/konstraint";
48 changelog = "https://github.com/plexsystems/konstraint/releases/tag/v${version}";
49 description = "Policy management tool for interacting with Gatekeeper";
···53 Gatekeeper. Automatically copy Rego to the ConstraintTemplate. Automatically update all ConstraintTemplates with
54 library changes. Enable writing the same policies for Conftest and Gatekeeper.
55 '';
56- license = licenses.mit;
57- maintainers = with maintainers; [ jk ];
58 };
59}
···43 runHook postInstallCheck
44 '';
4546+ meta = {
47 homepage = "https://github.com/plexsystems/konstraint";
48 changelog = "https://github.com/plexsystems/konstraint/releases/tag/v${version}";
49 description = "Policy management tool for interacting with Gatekeeper";
···53 Gatekeeper. Automatically copy Rego to the ConstraintTemplate. Automatically update all ConstraintTemplates with
54 library changes. Enable writing the same policies for Conftest and Gatekeeper.
55 '';
56+ license = lib.licenses.mit;
57+ maintainers = with lib.maintainers; [ jk ];
58 };
59}
···44 runHook postInstallCheck
45 '';
4647- meta = with lib; {
48 homepage = "https://github.com/aquasecurity/kube-bench";
49 changelog = "https://github.com/aquasecurity/kube-bench/releases/tag/v${version}";
50 description = "Checks whether Kubernetes is deployed according to security best practices as defined in the CIS Kubernetes Benchmark";
51 mainProgram = "kube-bench";
52- license = licenses.asl20;
53- maintainers = with maintainers; [ jk ];
54 };
55}
···44 runHook postInstallCheck
45 '';
4647+ meta = {
48 homepage = "https://github.com/aquasecurity/kube-bench";
49 changelog = "https://github.com/aquasecurity/kube-bench/releases/tag/v${version}";
50 description = "Checks whether Kubernetes is deployed according to security best practices as defined in the CIS Kubernetes Benchmark";
51 mainProgram = "kube-bench";
52+ license = lib.licenses.asl20;
53+ maintainers = with lib.maintainers; [ jk ];
54 };
55}
+3-3
pkgs/by-name/ku/kube-capacity/package.nix
···1718 vendorHash = "sha256-YME4AXpHvr1bNuc/HoHxam+7ZkwLzjhIvFSfD4hga1A=";
1920- meta = with lib; {
21 description = "A simple CLI that provides an overview of the resource requests, limits, and utilization in a Kubernetes cluster";
22 mainProgram = "kube-capacity";
23 homepage = "https://github.com/robscott/kube-capacity";
24 changelog = "https://github.com/robscott/kube-capacity/releases/tag/v${version}";
25- license = licenses.asl20;
26- maintainers = [ maintainers.bryanasdev000 ];
27 };
28}
···1718 vendorHash = "sha256-YME4AXpHvr1bNuc/HoHxam+7ZkwLzjhIvFSfD4hga1A=";
1920+ meta = {
21 description = "A simple CLI that provides an overview of the resource requests, limits, and utilization in a Kubernetes cluster";
22 mainProgram = "kube-capacity";
23 homepage = "https://github.com/robscott/kube-capacity";
24 changelog = "https://github.com/robscott/kube-capacity/releases/tag/v${version}";
25+ license = lib.licenses.asl20;
26+ maintainers = [ lib.maintainers.bryanasdev000 ];
27 };
28}
···64 # Project has no tests
65 doCheck = false;
6667- meta = with lib; {
68 description = "Network based LED effect controller with support for advanced real-time audio effects";
69 homepage = "https://github.com/LedFx/LedFx";
70 changelog = "https://github.com/LedFx/LedFx/blob/${version}/CHANGELOG.rst";
71- license = licenses.gpl3Only;
72- teams = [ teams.c3d2 ];
73 mainProgram = "ledfx";
74 };
75}
···64 # Project has no tests
65 doCheck = false;
6667+ meta = {
68 description = "Network based LED effect controller with support for advanced real-time audio effects";
69 homepage = "https://github.com/LedFx/LedFx";
70 changelog = "https://github.com/LedFx/LedFx/blob/${version}/CHANGELOG.rst";
71+ license = lib.licenses.gpl3Only;
72+ teams = [ lib.teams.c3d2 ];
73 mainProgram = "ledfx";
74 };
75}
+3-3
pkgs/by-name/le/ledger-autosync/package.nix
···33 python3Packages.pytestCheckHook
34 ];
3536- meta = with lib; {
37 homepage = "https://github.com/egh/ledger-autosync";
38 changelog = "https://github.com/egh/ledger-autosync/releases/tag/v${version}";
39 description = "OFX/CSV autosync for ledger and hledger";
40- license = licenses.gpl3Plus;
41- maintainers = with maintainers; [ eamsden ];
42 };
43}
···33 python3Packages.pytestCheckHook
34 ];
3536+ meta = {
37 homepage = "https://github.com/egh/ledger-autosync";
38 changelog = "https://github.com/egh/ledger-autosync/releases/tag/v${version}";
39 description = "OFX/CSV autosync for ledger and hledger";
40+ license = lib.licenses.gpl3Plus;
41+ maintainers = with lib.maintainers; [ eamsden ];
42 };
43}
+4-4
pkgs/by-name/le/ledger/package.nix
···108 installShellCompletion --cmd ledger --bash $src/contrib/ledger-completion.bash
109 '';
110111- meta = with lib; {
112 description = "Double-entry accounting system with a command-line reporting interface";
113 mainProgram = "ledger";
114 homepage = "https://www.ledger-cli.org/";
115 changelog = "https://github.com/ledger/ledger/raw/v${version}/NEWS.md";
116- license = licenses.bsd3;
117 longDescription = ''
118 Ledger is a powerful, double-entry accounting system that is accessed
119 from the UNIX command-line. This may put off some users, as there is
120 no flashy UI, but for those who want unparalleled reporting access to
121 their data, there really is no alternative.
122 '';
123- platforms = platforms.all;
124- maintainers = with maintainers; [ jwiegley ];
125 };
126}
···108 installShellCompletion --cmd ledger --bash $src/contrib/ledger-completion.bash
109 '';
110111+ meta = {
112 description = "Double-entry accounting system with a command-line reporting interface";
113 mainProgram = "ledger";
114 homepage = "https://www.ledger-cli.org/";
115 changelog = "https://github.com/ledger/ledger/raw/v${version}/NEWS.md";
116+ license = lib.licenses.bsd3;
117 longDescription = ''
118 Ledger is a powerful, double-entry accounting system that is accessed
119 from the UNIX command-line. This may put off some users, as there is
120 no flashy UI, but for those who want unparalleled reporting access to
121 their data, there really is no alternative.
122 '';
123+ platforms = lib.platforms.all;
124+ maintainers = with lib.maintainers; [ jwiegley ];
125 };
126}
+3-3
pkgs/by-name/le/leetgo/package.nix
···35 --zsh <($out/bin/leetgo completion zsh)
36 '';
3738- meta = with lib; {
39 description = "A command-line tool for LeetCode";
40 homepage = "https://github.com/j178/leetgo";
41 changelog = "https://github.com/j178/leetgo/releases/tag/v${version}";
42- license = licenses.mit;
43- maintainers = with maintainers; [ Ligthiago ];
44 mainProgram = "leetgo";
45 };
46}
···20 useFetchCargoVendor = true;
21 cargoHash = "sha256-ZuLbdsZadEkY5M4LoHBn6gnKYklVbXpRa60EocYUH+A=";
2223- meta = with lib; {
24 description = "CLI for generating vim help docs from emmylua comments";
25 longDescription = ''
26 `lemmy-help` is an emmylua parser as well as a CLI which takes that parsed tree and converts it into vim help docs.
27 '';
28 homepage = "https://github.com/numToStr/lemmy-help";
29 changelog = "https://github.com/numToStr/lemmy-help/releases/tag/v${version}";
30- license = with licenses; [ mit ];
31- maintainers = with maintainers; [ figsoda ];
32 mainProgram = "lemmy-help";
33 };
34}
···20 useFetchCargoVendor = true;
21 cargoHash = "sha256-ZuLbdsZadEkY5M4LoHBn6gnKYklVbXpRa60EocYUH+A=";
2223+ meta = {
24 description = "CLI for generating vim help docs from emmylua comments";
25 longDescription = ''
26 `lemmy-help` is an emmylua parser as well as a CLI which takes that parsed tree and converts it into vim help docs.
27 '';
28 homepage = "https://github.com/numToStr/lemmy-help";
29 changelog = "https://github.com/numToStr/lemmy-help/releases/tag/v${version}";
30+ license = with lib.licenses; [ mit ];
31+ maintainers = with lib.maintainers; [ figsoda ];
32 mainProgram = "lemmy-help";
33 };
34}
···1718 vendorHash = "sha256-7xa2tdCDCXkOZCLL8YPtO7i1VqD61Mow7un0690I8mM=";
1920- meta = with lib; {
21 description = "Utility that provides an API and CLI to identify licenses and legal terms";
22 mainProgram = "license-scanner";
23 homepage = "https://github.com/CycloneDX/license-scanner";
24 changelog = "https://github.com/CycloneDX/license-scanner/blob/${version}/CHANGELOG.md";
25- license = licenses.asl20;
26- maintainers = with maintainers; [ fab ];
27 };
28}
···1718 vendorHash = "sha256-7xa2tdCDCXkOZCLL8YPtO7i1VqD61Mow7un0690I8mM=";
1920+ meta = {
21 description = "Utility that provides an API and CLI to identify licenses and legal terms";
22 mainProgram = "license-scanner";
23 homepage = "https://github.com/CycloneDX/license-scanner";
24 changelog = "https://github.com/CycloneDX/license-scanner/blob/${version}/CHANGELOG.md";
25+ license = lib.licenses.asl20;
26+ maintainers = with lib.maintainers; [ fab ];
27 };
28}
+4-4
pkgs/by-name/li/lightsoff/package.nix
···56 updateScript = gnome.updateScript { packageName = "lightsoff"; };
57 };
5859- meta = with lib; {
60 homepage = "https://gitlab.gnome.org/GNOME/lightsoff";
61 changelog = "https://gitlab.gnome.org/GNOME/lightsoff/-/blob/${version}/NEWS?ref_type=tags";
62 description = "Puzzle game, where the objective is to turn off all of the tiles on the board";
63 mainProgram = "lightsoff";
64- teams = [ teams.gnome ];
65- license = licenses.gpl2;
66- platforms = platforms.unix;
67 };
68}
···56 updateScript = gnome.updateScript { packageName = "lightsoff"; };
57 };
5859+ meta = {
60 homepage = "https://gitlab.gnome.org/GNOME/lightsoff";
61 changelog = "https://gitlab.gnome.org/GNOME/lightsoff/-/blob/${version}/NEWS?ref_type=tags";
62 description = "Puzzle game, where the objective is to turn off all of the tiles on the board";
63 mainProgram = "lightsoff";
64+ teams = [ lib.teams.gnome ];
65+ license = lib.licenses.gpl2;
66+ platforms = lib.platforms.unix;
67 };
68}
+2-2
pkgs/by-name/li/ligolo-ng/package.nix
···30 # Tests require network access
31 doCheck = false;
3233- meta = with lib; {
34 description = "Tunneling/pivoting tool that uses a TUN interface";
35 homepage = "https://github.com/tnpitsecurity/ligolo-ng";
36 changelog = "https://github.com/nicocha30/ligolo-ng/releases/tag/v${version}";
37- license = licenses.gpl3Only;
38 };
39}
···30 # Tests require network access
31 doCheck = false;
3233+ meta = {
34 description = "Tunneling/pivoting tool that uses a TUN interface";
35 homepage = "https://github.com/tnpitsecurity/ligolo-ng";
36 changelog = "https://github.com/nicocha30/ligolo-ng/releases/tag/v${version}";
37+ license = lib.licenses.gpl3Only;
38 };
39}
+4-4
pkgs/by-name/li/likwid/package.nix
···3334 makeFlags = [ "PREFIX=$(out)" ];
3536- meta = with lib; {
37 homepage = "https://hpc.fau.de/research/tools/likwid/";
38 changelog = "https://github.com/RRZE-HPC/likwid/releases/tag/v${version}";
39 description = "Performance monitoring and benchmarking suite";
40- license = licenses.gpl3Only;
41 # Might work on ARM by appropriately setting COMPILER in config.mk
42- platforms = intersectLists platforms.linux platforms.x86;
43- maintainers = [ maintainers.vbgl ];
44 mainProgram = "likwid-perfctr";
45 };
46}
···3334 makeFlags = [ "PREFIX=$(out)" ];
3536+ meta = {
37 homepage = "https://hpc.fau.de/research/tools/likwid/";
38 changelog = "https://github.com/RRZE-HPC/likwid/releases/tag/v${version}";
39 description = "Performance monitoring and benchmarking suite";
40+ license = lib.licenses.gpl3Only;
41 # Might work on ARM by appropriately setting COMPILER in config.mk
42+ platforms = lib.intersectLists lib.platforms.linux lib.platforms.x86;
43+ maintainers = [ lib.maintainers.vbgl ];
44 mainProgram = "likwid-perfctr";
45 };
46}
+3-3
pkgs/by-name/li/lil-pwny/package.nix
···23 "lil_pwny"
24 ];
2526- meta = with lib; {
27 description = "Offline auditing of Active Directory passwords";
28 mainProgram = "lil-pwny";
29 homepage = "https://github.com/PaperMtn/lil-pwny";
30 changelog = "https://github.com/PaperMtn/lil-pwny/blob/${version}/CHANGELOG.md";
31- license = licenses.gpl3Only;
32- maintainers = with maintainers; [ fab ];
33 };
34}
···23 "lil_pwny"
24 ];
2526+ meta = {
27 description = "Offline auditing of Active Directory passwords";
28 mainProgram = "lil-pwny";
29 homepage = "https://github.com/PaperMtn/lil-pwny";
30 changelog = "https://github.com/PaperMtn/lil-pwny/blob/${version}/CHANGELOG.md";
31+ license = lib.licenses.gpl3Only;
32+ maintainers = with lib.maintainers; [ fab ];
33 };
34}
···57 tests = { inherit (nixosTests) listmonk; };
58 };
5960- meta = with lib; {
61 description = "High performance, self-hosted, newsletter and mailing list manager with a modern dashboard";
62 mainProgram = "listmonk";
63 homepage = "https://github.com/knadh/listmonk";
64 changelog = "https://github.com/knadh/listmonk/releases/tag/v${version}";
65- maintainers = with maintainers; [ raitobezarius ];
66- license = licenses.agpl3Only;
67 };
68}
···57 tests = { inherit (nixosTests) listmonk; };
58 };
5960+ meta = {
61 description = "High performance, self-hosted, newsletter and mailing list manager with a modern dashboard";
62 mainProgram = "listmonk";
63 homepage = "https://github.com/knadh/listmonk";
64 changelog = "https://github.com/knadh/listmonk/releases/tag/v${version}";
65+ maintainers = with lib.maintainers; [ raitobezarius ];
66+ license = lib.licenses.agpl3Only;
67 };
68}
+3-3
pkgs/by-name/li/listmonk/stuffbin.nix
···23 "-X main.version=${version}"
24 ];
2526- meta = with lib; {
27 description = "Compress and embed static files and assets into Go binaries and access them with a virtual file system in production";
28 homepage = "https://github.com/knadh/stuffbin";
29 changelog = "https://github.com/knadh/stuffbin/releases/tag/v${version}";
30- maintainers = with maintainers; [ raitobezarius ];
31- license = licenses.mit;
32 };
33}
···23 "-X main.version=${version}"
24 ];
2526+ meta = {
27 description = "Compress and embed static files and assets into Go binaries and access them with a virtual file system in production";
28 homepage = "https://github.com/knadh/stuffbin";
29 changelog = "https://github.com/knadh/stuffbin/releases/tag/v${version}";
30+ maintainers = with lib.maintainers; [ raitobezarius ];
31+ license = lib.licenses.mit;
32 };
33}
···34 runHook postInstall
35 '';
3637- meta = with lib; {
38 description = "Web interface for managing and controlling 3D printers with Klipper";
39 homepage = "https://docs.mainsail.xyz";
40 changelog = "https://github.com/mainsail-crew/mainsail/releases/tag/v${version}";
41- license = licenses.gpl3Plus;
42- platforms = platforms.linux;
43- maintainers = with maintainers; [
44 shhht
45 lovesegfault
46 wulfsta
···34 runHook postInstall
35 '';
3637+ meta = {
38 description = "Web interface for managing and controlling 3D printers with Klipper";
39 homepage = "https://docs.mainsail.xyz";
40 changelog = "https://github.com/mainsail-crew/mainsail/releases/tag/v${version}";
41+ license = lib.licenses.gpl3Plus;
42+ platforms = lib.platforms.linux;
43+ maintainers = with lib.maintainers; [
44 shhht
45 lovesegfault
46 wulfsta
+3-3
pkgs/by-name/ma/malwoverview/package.nix
···43 "malwoverview"
44 ];
4546- meta = with lib; {
47 description = "Tool for threat hunting and gathering intel information from various sources";
48 homepage = "https://github.com/alexandreborges/malwoverview";
49 changelog = "https://github.com/alexandreborges/malwoverview/releases/tag/v${version}";
50- license = licenses.gpl3Only;
51- maintainers = with maintainers; [ fab ];
52 mainProgram = "malwoverview.py";
53 };
54}
···43 "malwoverview"
44 ];
4546+ meta = {
47 description = "Tool for threat hunting and gathering intel information from various sources";
48 homepage = "https://github.com/alexandreborges/malwoverview";
49 changelog = "https://github.com/alexandreborges/malwoverview/releases/tag/v${version}";
50+ license = lib.licenses.gpl3Only;
51+ maintainers = with lib.maintainers; [ fab ];
52 mainProgram = "malwoverview.py";
53 };
54}
+3-3
pkgs/by-name/ma/mantra/package.nix
···22 "-w"
23 ];
2425- meta = with lib; {
26 description = "Tool used to hunt down API key leaks in JS files and pages";
27 homepage = "https://github.com/MrEmpy/Mantra";
28 changelog = "https://github.com/MrEmpy/Mantra/releases/tag/v${version}";
29- license = licenses.gpl3Only;
30- maintainers = with maintainers; [ fab ];
31 mainProgram = "mantra";
32 };
33}
···22 "-w"
23 ];
2425+ meta = {
26 description = "Tool used to hunt down API key leaks in JS files and pages";
27 homepage = "https://github.com/MrEmpy/Mantra";
28 changelog = "https://github.com/MrEmpy/Mantra/releases/tag/v${version}";
29+ license = lib.licenses.gpl3Only;
30+ maintainers = with lib.maintainers; [ fab ];
31 mainProgram = "mantra";
32 };
33}
+3-3
pkgs/by-name/ma/mapcidr/package.nix
···22 "cmd/mapcidr"
23 ];
2425- meta = with lib; {
26 description = "Small utility program to perform multiple operations for a given subnet/CIDR ranges";
27 longDescription = ''
28 mapCIDR is developed to ease load distribution for mass scanning
···30 '';
31 homepage = "https://github.com/projectdiscovery/mapcidr";
32 changelog = "https://github.com/projectdiscovery/mapcidr/releases/tag/v${version}";
33- license = licenses.mit;
34- maintainers = with maintainers; [ hanemile ];
35 mainProgram = "mapcidr";
36 };
37}
···22 "cmd/mapcidr"
23 ];
2425+ meta = {
26 description = "Small utility program to perform multiple operations for a given subnet/CIDR ranges";
27 longDescription = ''
28 mapCIDR is developed to ease load distribution for mass scanning
···30 '';
31 homepage = "https://github.com/projectdiscovery/mapcidr";
32 changelog = "https://github.com/projectdiscovery/mapcidr/releases/tag/v${version}";
33+ license = lib.licenses.mit;
34+ maintainers = with lib.maintainers; [ hanemile ];
35 mainProgram = "mapcidr";
36 };
37}
+4-4
pkgs/by-name/ma/markdown-anki-decks/package.nix
···39 "markdown_anki_decks"
40 ];
4142- meta = with lib; {
43 description = "Tool to convert Markdown files into Anki Decks";
44 homepage = "https://github.com/lukesmurray/markdown-anki-decks";
45 changelog = "https://github.com/lukesmurray/markdown-anki-decks/blob/${version}/CHANGELOG.md";
46- license = licenses.mit;
47- maintainers = with maintainers; [ totoroot ];
48- platforms = platforms.unix;
49 mainProgram = "mdankideck";
50 };
51}
···39 "markdown_anki_decks"
40 ];
4142+ meta = {
43 description = "Tool to convert Markdown files into Anki Decks";
44 homepage = "https://github.com/lukesmurray/markdown-anki-decks";
45 changelog = "https://github.com/lukesmurray/markdown-anki-decks/blob/${version}/CHANGELOG.md";
46+ license = lib.licenses.mit;
47+ maintainers = with lib.maintainers; [ totoroot ];
48+ platforms = lib.platforms.unix;
49 mainProgram = "mdankideck";
50 };
51}
+4-4
pkgs/by-name/ma/marker/package.nix
···51 meson rewrite kwargs set project / version '${version}'
52 '';
5354- meta = with lib; {
55 homepage = "https://fabiocolacio.github.io/Marker/";
56 description = "Markdown editor for the Linux desktop made with GTK3";
57- maintainers = with maintainers; [
58 trepetti
59 aleksana
60 ];
61- license = licenses.gpl3Plus;
62- platforms = platforms.linux;
63 changelog = "https://github.com/fabiocolacio/Marker/releases/tag/${version}";
64 mainProgram = "marker";
65 };
···51 meson rewrite kwargs set project / version '${version}'
52 '';
5354+ meta = {
55 homepage = "https://fabiocolacio.github.io/Marker/";
56 description = "Markdown editor for the Linux desktop made with GTK3";
57+ maintainers = with lib.maintainers; [
58 trepetti
59 aleksana
60 ];
61+ license = lib.licenses.gpl3Plus;
62+ platforms = lib.platforms.linux;
63 changelog = "https://github.com/fabiocolacio/Marker/releases/tag/${version}";
64 mainProgram = "marker";
65 };
+4-4
pkgs/by-name/ma/martian-mono/package.nix
···28 runHook postInstall
29 '';
3031- meta = with lib; {
32 description = "Free and open-source monospaced font from Evil Martians";
33 homepage = "https://github.com/evilmartians/mono";
34 changelog = "https://github.com/evilmartians/mono/raw/v${version}/Changelog.md";
35- license = licenses.ofl;
36- maintainers = [ ];
37- platforms = platforms.all;
38 };
39}
···28 runHook postInstall
29 '';
3031+ meta = {
32 description = "Free and open-source monospaced font from Evil Martians";
33 homepage = "https://github.com/evilmartians/mono";
34 changelog = "https://github.com/evilmartians/mono/raw/v${version}/Changelog.md";
35+ license = lib.licenses.ofl;
36+ maintainers = with lib.maintainers; [ ];
37+ platforms = lib.platforms.all;
38 };
39}
+4-4
pkgs/by-name/ma/masscan/package.nix
···63 $out/bin/masscan --selftest
64 '';
6566- meta = with lib; {
67 description = "Fast scan of the Internet";
68 mainProgram = "masscan";
69 homepage = "https://github.com/robertdavidgraham/masscan";
70 changelog = "https://github.com/robertdavidgraham/masscan/releases/tag/${version}";
71- license = licenses.agpl3Only;
72- platforms = platforms.unix;
73- maintainers = with maintainers; [ rnhmjoj ];
74 };
75}
···3435 versionCheckProgramArg = "-version";
3637- meta = with lib; {
38 description = "Fast SYN/CONNECT port scanner";
39 longDescription = ''
40 Naabu is a port scanning tool written in Go that allows you to enumerate
···44 '';
45 homepage = "https://github.com/projectdiscovery/naabu";
46 changelog = "https://github.com/projectdiscovery/naabu/releases/tag/v${version}";
47- license = licenses.asl20;
48- maintainers = with maintainers; [ fab ];
49 mainProgram = "naabu";
50 };
51}
···3435 versionCheckProgramArg = "-version";
3637+ meta = {
38 description = "Fast SYN/CONNECT port scanner";
39 longDescription = ''
40 Naabu is a port scanning tool written in Go that allows you to enumerate
···44 '';
45 homepage = "https://github.com/projectdiscovery/naabu";
46 changelog = "https://github.com/projectdiscovery/naabu/releases/tag/v${version}";
47+ license = lib.licenses.asl20;
48+ maintainers = with lib.maintainers; [ fab ];
49 mainProgram = "naabu";
50 };
51}
+3-3
pkgs/by-name/na/namespace-cli/package.nix
···29 "-X namespacelabs.dev/foundation/internal/cli/version.Tag=v${version}"
30 ];
3132- meta = with lib; {
33 mainProgram = "nsc";
34- maintainers = with maintainers; [ techknowlogick ];
35- license = licenses.asl20;
36 changelog = "https://github.com/namespacelabs/foundation/releases/tag/v${version}";
37 homepage = "https://github.com/namespacelabs/foundation";
38 description = "Command line interface for the Namespaces platform";
···29 "-X namespacelabs.dev/foundation/internal/cli/version.Tag=v${version}"
30 ];
3132+ meta = {
33 mainProgram = "nsc";
34+ maintainers = with lib.maintainers; [ techknowlogick ];
35+ license = lib.licenses.asl20;
36 changelog = "https://github.com/namespacelabs/foundation/releases/tag/v${version}";
37 homepage = "https://github.com/namespacelabs/foundation";
38 description = "Command line interface for the Namespaces platform";
+3-3
pkgs/by-name/na/nanodbc/package.nix
···32 else
33 [ "-DBUILD_SHARED_LIBS=ON" ];
3435- meta = with lib; {
36 homepage = "https://github.com/nanodbc/nanodbc";
37 changelog = "https://github.com/nanodbc/nanodbc/raw/v${version}/CHANGELOG.md";
38 description = "Small C++ wrapper for the native C ODBC API";
39- license = licenses.mit;
40- maintainers = [ maintainers.bzizou ];
41 };
42}
···32 else
33 [ "-DBUILD_SHARED_LIBS=ON" ];
3435+ meta = {
36 homepage = "https://github.com/nanodbc/nanodbc";
37 changelog = "https://github.com/nanodbc/nanodbc/raw/v${version}/CHANGELOG.md";
38 description = "Small C++ wrapper for the native C ODBC API";
39+ license = lib.licenses.mit;
40+ maintainers = [ lib.maintainers.bzizou ];
41 };
42}
···34 runHook postInstall
35 '';
3637- meta = with lib; {
38 homepage = "https://www.elixir-tools.dev/next-ls/";
39 changelog = "https://github.com/elixir-tools/next-ls/releases/tag/v${version}";
40 description = "The language server for Elixir that just works";
41- license = licenses.mit;
42 mainProgram = "nextls";
43- maintainers = [ maintainers.adamcstephens ];
44 platforms = beamPackages.erlang.meta.platforms;
45 };
46}
···34 runHook postInstall
35 '';
3637+ meta = {
38 homepage = "https://www.elixir-tools.dev/next-ls/";
39 changelog = "https://github.com/elixir-tools/next-ls/releases/tag/v${version}";
40 description = "The language server for Elixir that just works";
41+ license = lib.licenses.mit;
42 mainProgram = "nextls";
43+ maintainers = [ lib.maintainers.adamcstephens ];
44 platforms = beamPackages.erlang.meta.platforms;
45 };
46}
+4-4
pkgs/by-name/nf/nfdump/package.nix
···50 "--enable-nfpcapd"
51 ];
5253- meta = with lib; {
54 description = "Tools for working with netflow data";
55 longDescription = ''
56 nfdump is a set of tools for working with netflow data.
57 '';
58 homepage = "https://github.com/phaag/nfdump";
59 changelog = "https://github.com/phaag/nfdump/releases/tag/v${version}";
60- license = licenses.bsd3;
61- maintainers = with maintainers; [ takikawa ];
62- platforms = platforms.unix;
63 };
64}
···50 "--enable-nfpcapd"
51 ];
5253+ meta = {
54 description = "Tools for working with netflow data";
55 longDescription = ''
56 nfdump is a set of tools for working with netflow data.
57 '';
58 homepage = "https://github.com/phaag/nfdump";
59 changelog = "https://github.com/phaag/nfdump/releases/tag/v${version}";
60+ license = lib.licenses.bsd3;
61+ maintainers = with lib.maintainers; [ takikawa ];
62+ platforms = lib.platforms.unix;
63 };
64}
+3-3
pkgs/by-name/nf/nfpm/package.nix
···41 --zsh <(${emulator} $out/bin/nfpm completion zsh)
42 '';
4344- meta = with lib; {
45 description = "Simple deb and rpm packager written in Go";
46 homepage = "https://github.com/goreleaser/nfpm";
47 changelog = "https://github.com/goreleaser/nfpm/releases/tag/v${version}";
48- maintainers = with maintainers; [
49 techknowlogick
50 caarlos0
51 ];
52- license = with licenses; [ mit ];
53 mainProgram = "nfpm";
54 };
55}
···41 --zsh <(${emulator} $out/bin/nfpm completion zsh)
42 '';
4344+ meta = {
45 description = "Simple deb and rpm packager written in Go";
46 homepage = "https://github.com/goreleaser/nfpm";
47 changelog = "https://github.com/goreleaser/nfpm/releases/tag/v${version}";
48+ maintainers = with lib.maintainers; [
49 techknowlogick
50 caarlos0
51 ];
52+ license = with lib.licenses; [ mit ];
53 mainProgram = "nfpm";
54 };
55}
···60 # be able to find updates through repology and we need this.
61 passthru.updateScript = nix-update-script { };
6263- meta = with lib; {
64 description = "Check Cache Availablility of NixOS Configurations";
65 longDescription = ''
66 Fast rust tool to check availability of your entire system in caches. It
···71 '';
72 homepage = "https://git.fem.gg/cafkafk/nix-weather";
73 changelog = "https://git.fem.gg/cafkafk/nix-weather/releases/tag/v${version}";
74- license = licenses.eupl12;
75 mainProgram = "nix-weather";
76- maintainers = with maintainers; [
77 cafkafk
78 freyacodes
79 ];
80- platforms = platforms.all;
81 };
82}
···60 # be able to find updates through repology and we need this.
61 passthru.updateScript = nix-update-script { };
6263+ meta = {
64 description = "Check Cache Availablility of NixOS Configurations";
65 longDescription = ''
66 Fast rust tool to check availability of your entire system in caches. It
···71 '';
72 homepage = "https://git.fem.gg/cafkafk/nix-weather";
73 changelog = "https://git.fem.gg/cafkafk/nix-weather/releases/tag/v${version}";
74+ license = lib.licenses.eupl12;
75 mainProgram = "nix-weather";
76+ maintainers = with lib.maintainers; [
77 cafkafk
78 freyacodes
79 ];
80+ platforms = lib.platforms.all;
81 };
82}
···1+[dns]
2+ # Array of upstream DNS servers used by Pi-hole
3+ # Example: [ "8.8.8.8", "127.0.0.1#5335", "docker-resolver" ]
4+ #
5+ # Possible values are:
6+ # array of IP addresses and/or hostnames, optionally with a port (#...)
7+ upstreams = []
8+9+ # Use this option to control deep CNAME inspection. Disabling it might be beneficial
10+ # for very low-end devices
11+ CNAMEdeepInspect = true
12+13+ # Should _esni. subdomains be blocked by default? Encrypted Server Name Indication
14+ # (ESNI) is certainly a good step into the right direction to enhance privacy on the
15+ # web. It prevents on-path observers, including ISPs, coffee shop owners and
16+ # firewalls, from intercepting the TLS Server Name Indication (SNI) extension by
17+ # encrypting it. This prevents the SNI from being used to determine which websites
18+ # users are visiting.
19+ # ESNI will obviously cause issues for pixelserv-tls which will be unable to generate
20+ # matching certificates on-the-fly when it cannot read the SNI. Cloudflare and Firefox
21+ # are already enabling ESNI. According to the IEFT draft (link above), we can easily
22+ # restore piselserv-tls's operation by replying NXDOMAIN to _esni. subdomains of
23+ # blocked domains as this mimics a "not configured for this domain" behavior.
24+ blockESNI = true
25+26+ # Should we overwrite the query source when client information is provided through
27+ # EDNS0 client subnet (ECS) information? This allows Pi-hole to obtain client IPs even
28+ # if they are hidden behind the NAT of a router. This feature has been requested and
29+ # discussed on Discourse where further information how to use it can be found:
30+ # https://discourse.pi-hole.net/t/support-for-add-subnet-option-from-dnsmasq-ecs-edns0-client-subnet/35940
31+ EDNS0ECS = true
32+33+ # Should FTL hide queries made by localhost?
34+ ignoreLocalhost = false
35+36+ # Should FTL analyze and show internally generated DNSSEC queries?
37+ showDNSSEC = true
38+39+ # Should FTL analyze *only* A and AAAA queries?
40+ analyzeOnlyAandAAAA = false
41+42+ # Controls whether and how FTL will reply with for address for which a local interface
43+ # exists. Changing this setting causes FTL to restart.
44+ #
45+ # Possible values are:
46+ # - "NONE"
47+ # Pi-hole will not respond automatically on PTR requests to local interface
48+ # addresses. Ensure pi.hole and/or hostname records exist elsewhere.
49+ # - "HOSTNAME"
50+ # Serve the machine's hostname. The hostname is queried from the kernel through
51+ # uname(2)->nodename. If the machine has multiple network interfaces, it can
52+ # also have multiple nodenames. In this case, it is unspecified and up to the
53+ # kernel which one will be returned. On Linux, the returned string is what has
54+ # been set using sethostname(2) which is typically what has been set in
55+ # /etc/hostname.
56+ # - "HOSTNAMEFQDN"
57+ # Serve the machine's hostname (see limitations above) as fully qualified domain
58+ # by adding the local domain. If no local domain has been defined (config option
59+ # dns.domain), FTL tries to query the domain name from the kernel using
60+ # getdomainname(2). If this fails, FTL appends ".no_fqdn_available" to the
61+ # hostname.
62+ # - "PI.HOLE"
63+ # Respond with "pi.hole".
64+ piholePTR = "PI.HOLE"
65+66+ # How should FTL handle queries when the gravity database is not available?
67+ #
68+ # Possible values are:
69+ # - "BLOCK"
70+ # Block all queries when the database is busy.
71+ # - "ALLOW"
72+ # Allow all queries when the database is busy.
73+ # - "REFUSE"
74+ # Refuse all queries which arrive while the database is busy.
75+ # - "DROP"
76+ # Just drop the queries, i.e., never reply to them at all. Despite "REFUSE"
77+ # sounding similar to "DROP", it turned out that many clients will just
78+ # immediately retry, causing up to several thousands of queries per second. This
79+ # does not happen in "DROP" mode.
80+ replyWhenBusy = "ALLOW"
81+82+ # FTL's internal TTL to be handed out for blocked queries in seconds. This settings
83+ # allows users to select a value different from the dnsmasq config option local-ttl.
84+ # This is useful in context of locally used hostnames that are known to stay constant
85+ # over long times (printers, etc.).
86+ # Note that large values may render whitelisting ineffective due to client-side
87+ # caching of blocked queries.
88+ blockTTL = 2
89+90+ # Array of custom DNS records
91+ # Example: hosts = [ "127.0.0.1 mylocal", "192.168.0.1 therouter" ]
92+ #
93+ # Possible values are:
94+ # Array of custom DNS records each one in HOSTS form: "IP HOSTNAME"
95+ hosts = []
96+97+ # If set, A and AAAA queries for plain names, without dots or domain parts, are never
98+ # forwarded to upstream nameservers
99+ domainNeeded = false
100+101+ # If set, the domain is added to simple names (without a period) in /etc/hosts in the
102+ # same way as for DHCP-derived names
103+ expandHosts = false
104+105+ # The DNS domain used by your Pi-hole.
106+ #
107+ # This DNS domain is purely local. FTL may answer queries from its local cache and
108+ # configuration but *never* forwards any requests upstream *unless* you have
109+ # configured a dns.revServer exactly for this domain. In the latter case, all queries
110+ # for this domain are sent exclusively to this server (including reverse lookups).
111+ #
112+ # For DHCP, this has two effects; firstly it causes the DHCP server to return the
113+ # domain to any hosts which request it, and secondly it sets the domain which it is
114+ # legal for DHCP-configured hosts to claim. The intention is to constrain hostnames so
115+ # that an untrusted host on the LAN cannot advertise its name via DHCP as e.g.
116+ # "google.com" and capture traffic not meant for it. If no domain suffix is specified,
117+ # then any DHCP hostname with a domain part (ie with a period) will be disallowed and
118+ # logged. If a domain is specified, then hostnames with a domain part are allowed,
119+ # provided the domain part matches the suffix. In addition, when a suffix is set then
120+ # hostnames without a domain part have the suffix added as an optional domain part.
121+ # For instance, we can set domain=mylab.com and have a machine whose DHCP hostname is
122+ # "laptop". The IP address for that machine is available both as "laptop" and
123+ # "laptop.mylab.com".
124+ #
125+ # You can disable setting a domain by setting this option to an empty string.
126+ #
127+ # Possible values are:
128+ # <any valid domain>
129+ domain = "lan"
130+131+ # Should all reverse lookups for private IP ranges (i.e., 192.168.x.y, etc) which are
132+ # not found in /etc/hosts or the DHCP leases file be answered with "no such domain"
133+ # rather than being forwarded upstream?
134+ bogusPriv = true
135+136+ # Validate DNS replies using DNSSEC?
137+ dnssec = false
138+139+ # Interface to use for DNS (see also dnsmasq.listening.mode) and DHCP (if enabled)
140+ #
141+ # Possible values are:
142+ # a valid interface name
143+ interface = ""
144+145+ # Add A, AAAA and PTR records to the DNS. This adds one or more names to the DNS with
146+ # associated IPv4 (A) and IPv6 (AAAA) records
147+ #
148+ # Possible values are:
149+ # <name>[,<name>....],[<IPv4-address>],[<IPv6-address>][,<TTL>]
150+ hostRecord = ""
151+152+ # Pi-hole interface listening modes
153+ #
154+ # Possible values are:
155+ # - "LOCAL"
156+ # Allow only local requests. This setting accepts DNS queries only from hosts
157+ # whose address is on a local subnet, i.e., a subnet for which an interface
158+ # exists on the server. It is intended to be set as a default on installation,
159+ # to allow unconfigured installations to be useful but also safe from being used
160+ # for DNS amplification attacks if (accidentally) running public.
161+ # - "SINGLE"
162+ # Permit all origins, accept only on the specified interface. Respond only to
163+ # queries arriving on the specified interface. The loopback (lo) interface is
164+ # automatically added to the list of interfaces to use when this option is used.
165+ # Make sure your Pi-hole is properly firewalled!
166+ # - "BIND"
167+ # By default, FTL binds the wildcard address. If this is not what you want, you
168+ # can use this option as it forces FTL to really bind only the interfaces it is
169+ # listening on. Note that this may result in issues when the interface may go
170+ # down (cable unplugged, etc.). About the only time when this is useful is when
171+ # running another nameserver on the same port on the same machine. This may also
172+ # happen if you run a virtualization API such as libvirt. When this option is
173+ # used, IP alias interface labels (e.g. enp2s0:0) are checked rather than
174+ # interface names.
175+ # - "ALL"
176+ # Permit all origins, accept on all interfaces. Make sure your Pi-hole is
177+ # properly firewalled! This truly allows any traffic to be replied to and is a
178+ # dangerous thing to do as your Pi-hole could become an open resolver. You
179+ # should always ask yourself if the first option doesn't work for you as well.
180+ # - "NONE"
181+ # Do not add any configuration concerning the listening mode to the dnsmasq
182+ # configuration file. This is useful if you want to manually configure the
183+ # listening mode in auxiliary configuration files. This option is really meant
184+ # for advanced users only, support for this option may be limited.
185+ listeningMode = "LOCAL"
186+187+ # Log DNS queries and replies to pihole.log
188+ queryLogging = true
189+190+ # List of CNAME records which indicate that <cname> is really <target>. If the <TTL> is
191+ # given, it overwrites the value of local-ttl
192+ #
193+ # Possible values are:
194+ # Array of CNAMEs each on in one of the following forms: "<cname>,<target>[,<TTL>]"
195+ cnameRecords = []
196+197+ # Port used by the DNS server
198+ port = 53
199+200+ # Reverse server (former also called "conditional forwarding") feature
201+ # Array of reverse servers each one in one of the following forms:
202+ # "<enabled>,<ip-address>[/<prefix-len>],<server>[#<port>][,<domain>]"
203+ #
204+ # Individual components:
205+ #
206+ # <enabled>: either "true" or "false"
207+ #
208+ # <ip-address>[/<prefix-len>]: Address range for the reverse server feature in CIDR
209+ # notation. If the prefix length is omitted, either 32 (IPv4) or 128 (IPv6) are
210+ # substituted (exact address match). This is almost certainly not what you want here.
211+ # Example: "192.168.0.0/24" for the range 192.168.0.1 - 192.168.0.255
212+ #
213+ # <server>[#<port>]: Target server to be used for the reverse server feature
214+ # Example: "192.168.0.1#53"
215+ #
216+ # <domain>: Domain used for the reverse server feature (e.g., "fritz.box")
217+ # Example: "fritz.box"
218+ #
219+ # Possible values are:
220+ # array of reverse servers each one in one of the following forms:
221+ # "<enabled>,<ip-address>[/<prefix-len>],<server>[#<port>][,<domain>]", e.g.,
222+ # "true,192.168.0.0/24,192.168.0.1,fritz.box"
223+ revServers = []
224+225+ [dns.cache]
226+ # Cache size of the DNS server. Note that expiring cache entries naturally make room
227+ # for new insertions over time. Setting this number too high will have an adverse
228+ # effect as not only more space is needed, but also lookup speed gets degraded in the
229+ # 10,000+ range. dnsmasq may issue a warning when you go beyond 10,000+ cache entries.
230+ size = 10000
231+232+ # Query cache optimizer: If a DNS name exists in the cache, but its time-to-live has
233+ # expired only recently, the data will be used anyway (a refreshing from upstream is
234+ # triggered). This can improve DNS query delays especially over unreliable Internet
235+ # connections. This feature comes at the expense of possibly sometimes returning
236+ # out-of-date data and less efficient cache utilization, since old data cannot be
237+ # flushed when its TTL expires, so the cache becomes mostly least-recently-used. To
238+ # mitigate issues caused by massively outdated DNS replies, the maximum overaging of
239+ # cached records is limited. We strongly recommend staying below 86400 (1 day) with
240+ # this option.
241+ # Setting the TTL excess time to zero will serve stale cache data regardless how long
242+ # it has expired. This is not recommended as it may lead to stale data being served
243+ # for a long time. Setting this option to any negative value will disable this feature
244+ # altogether.
245+ optimizer = 3600
246+247+ # This setting allows you to specify the TTL used for queries blocked upstream. Once
248+ # the TTL expires, the query will be forwarded to the upstream server again to check
249+ # if the block is still valid. Defaults to caching for one day (86400 seconds).
250+ # Setting this value to zero disables caching of queries blocked upstream.
251+ upstreamBlockedTTL = 86400
252+253+ [dns.blocking]
254+ # Should FTL block queries?
255+ active = true
256+257+ # How should FTL reply to blocked queries?
258+ #
259+ # Possible values are:
260+ # - "NULL"
261+ # In NULL mode, which is both the default and recommended mode for Pi-hole
262+ # FTLDNS, blocked queries will be answered with the "unspecified address"
263+ # (0.0.0.0 or ::). The "unspecified address" is a reserved IP address specified
264+ # by RFC 3513 - Internet Protocol Version 6 (IPv6) Addressing Architecture,
265+ # section 2.5.2.
266+ # - "IP_NODATA_AAAA"
267+ # In IP-NODATA-AAAA mode, blocked queries will be answered with the local IPv4
268+ # addresses of your Pi-hole. Blocked AAAA queries will be answered with
269+ # NODATA-IPV6 and clients will only try to reach your Pi-hole over its static
270+ # IPv4 address.
271+ # - "IP"
272+ # In IP mode, blocked queries will be answered with the local IP addresses of
273+ # your Pi-hole.
274+ # - "NX"
275+ # In NXDOMAIN mode, blocked queries will be answered with an empty response
276+ # (i.e., there won't be an answer section) and status NXDOMAIN. A NXDOMAIN
277+ # response should indicate that there is no such domain to the client making the
278+ # query.
279+ # - "NODATA"
280+ # In NODATA mode, blocked queries will be answered with an empty response (no
281+ # answer section) and status NODATA. A NODATA response indicates that the domain
282+ # exists, but there is no record for the requested query type.
283+ mode = "NULL"
284+285+ # Should FTL enrich blocked replies with EDNS0 information?
286+ #
287+ # Possible values are:
288+ # - "NONE"
289+ # In NONE mode, no additional EDNS information is added to blocked queries
290+ # - "CODE"
291+ # In CODE mode, blocked queries will be enriched with EDNS info-code BLOCKED (15)
292+ # - "TEXT"
293+ # In TEXT mode, blocked queries will be enriched with EDNS info-code BLOCKED (15)
294+ # and a text message describing the reason for the block
295+ edns = "TEXT"
296+297+ [dns.specialDomains]
298+ # Should Pi-hole always reply with NXDOMAIN to A and AAAA queries of
299+ # use-application-dns.net to disable Firefox automatic DNS-over-HTTP? This is
300+ # following the recommendation on
301+ # https://support.mozilla.org/en-US/kb/configuring-networks-disable-dns-over-https
302+ mozillaCanary = true
303+304+ # Should Pi-hole always reply with NXDOMAIN to A and AAAA queries of mask.icloud.com
305+ # and mask-h2.icloud.com to disable Apple's iCloud Private Relay to prevent Apple
306+ # devices from bypassing Pi-hole? This is following the recommendation on
307+ # https://developer.apple.com/support/prepare-your-network-for-icloud-private-relay
308+ iCloudPrivateRelay = true
309+310+ # Should Pi-hole always reply with NODATA to all queries to zone resolver.arpa to
311+ # prevent devices from bypassing Pi-hole using Discovery of Designated Resolvers? This
312+ # is based on recommendations at the end of RFC 9462, section 4.
313+ designatedResolver = true
314+315+ [dns.reply.host]
316+ # Use a specific IPv4 address for the Pi-hole host? By default, FTL determines the
317+ # address of the interface a query arrived on and uses this address for replying to A
318+ # queries with the most suitable address for the requesting client. This setting can
319+ # be used to use a fixed, rather than the dynamically obtained, address when Pi-hole
320+ # responds to the following names: [ "pi.hole", "<the device's hostname>",
321+ # "pi.hole.<local domain>", "<the device's hostname>.<local domain>" ]
322+ force4 = false
323+324+ # Custom IPv4 address for the Pi-hole host
325+ #
326+ # Possible values are:
327+ # <valid IPv4 address> or empty string ("")
328+ IPv4 = ""
329+330+ # Use a specific IPv6 address for the Pi-hole host? See description for the IPv4
331+ # variant above for further details.
332+ force6 = false
333+334+ # Custom IPv6 address for the Pi-hole host
335+ #
336+ # Possible values are:
337+ # <valid IPv6 address> or empty string ("")
338+ IPv6 = ""
339+340+ [dns.reply.blocking]
341+ # Use a specific IPv4 address in IP blocking mode? By default, FTL determines the
342+ # address of the interface a query arrived on and uses this address for replying to A
343+ # queries with the most suitable address for the requesting client. This setting can
344+ # be used to use a fixed, rather than the dynamically obtained, address when Pi-hole
345+ # responds in the following cases: IP blocking mode is used and this query is to be
346+ # blocked, regular expressions with the ;reply=IP regex extension.
347+ force4 = false
348+349+ # Custom IPv4 address for IP blocking mode
350+ #
351+ # Possible values are:
352+ # <valid IPv4 address> or empty string ("")
353+ IPv4 = ""
354+355+ # Use a specific IPv6 address in IP blocking mode? See description for the IPv4 variant
356+ # above for further details.
357+ force6 = false
358+359+ # Custom IPv6 address for IP blocking mode
360+ #
361+ # Possible values are:
362+ # <valid IPv6 address> or empty string ("")
363+ IPv6 = ""
364+365+ [dns.rateLimit]
366+ # Rate-limited queries are answered with a REFUSED reply and not further processed by
367+ # FTL.
368+ # The default settings for FTL's rate-limiting are to permit no more than 1000 queries
369+ # in 60 seconds. Both numbers can be customized independently. It is important to note
370+ # that rate-limiting is happening on a per-client basis. Other clients can continue to
371+ # use FTL while rate-limited clients are short-circuited at the same time.
372+ # For this setting, both numbers, the maximum number of queries within a given time,
373+ # and the length of the time interval (seconds) have to be specified. For instance, if
374+ # you want to set a rate limit of 1 query per hour, the option should look like
375+ # RATE_LIMIT=1/3600. The time interval is relative to when FTL has finished starting
376+ # (start of the daemon + possible delay by DELAY_STARTUP) then it will advance in
377+ # steps of the rate-limiting interval. If a client reaches the maximum number of
378+ # queries it will be blocked until the end of the current interval. This will be
379+ # logged to /var/log/pihole/FTL.log, e.g. Rate-limiting 10.0.1.39 for at least 44
380+ # seconds. If the client continues to send queries while being blocked already and
381+ # this number of queries during the blocking exceeds the limit the client will
382+ # continue to be blocked until the end of the next interval (FTL.log will contain
383+ # lines like Still rate-limiting 10.0.1.39 as it made additional 5007 queries). As
384+ # soon as the client requests less than the set limit, it will be unblocked (Ending
385+ # rate-limitation of 10.0.1.39).
386+ # Rate-limiting may be disabled altogether by setting both values to zero (this
387+ # results in the same behavior as before FTL v5.7).
388+ # How many queries are permitted...
389+ count = 1000
390+391+ # ... in the set interval before rate-limiting?
392+ interval = 60
393+394+[dhcp]
395+ # Is the embedded DHCP server enabled?
396+ active = false
397+398+ # Start address of the DHCP address pool
399+ #
400+ # Possible values are:
401+ # <valid IPv4 address> or empty string (""), e.g., "192.168.0.10"
402+ start = ""
403+404+ # End address of the DHCP address pool
405+ #
406+ # Possible values are:
407+ # <valid IPv4 address> or empty string (""), e.g., "192.168.0.250"
408+ end = ""
409+410+ # Address of the gateway to be used (typically the address of your router in a home
411+ # installation)
412+ #
413+ # Possible values are:
414+ # <valid IPv4 address> or empty string (""), e.g., "192.168.0.1"
415+ router = ""
416+417+ # The netmask used by your Pi-hole. For directly connected networks (i.e., networks on
418+ # which the machine running Pi-hole has an interface) the netmask is optional and may
419+ # be set to an empty string (""): it will then be determined from the interface
420+ # configuration itself. For networks which receive DHCP service via a relay agent, we
421+ # cannot determine the netmask itself, so it should explicitly be specified, otherwise
422+ # Pi-hole guesses based on the class (A, B or C) of the network address.
423+ #
424+ # Possible values are:
425+ # <any valid netmask> (e.g., "255.255.255.0") or empty string ("") for
426+ # auto-discovery
427+ netmask = ""
428+429+ # If the lease time is given, then leases will be given for that length of time. If not
430+ # given, the default lease time is one hour for IPv4 and one day for IPv6.
431+ #
432+ # Possible values are:
433+ # The lease time can be in seconds, or minutes (e.g., "45m") or hours (e.g., "1h")
434+ # or days (like "2d") or even weeks ("1w"). You may also use "infinite" as string
435+ # but be aware of the drawbacks
436+ leaseTime = ""
437+438+ # Should Pi-hole make an attempt to also satisfy IPv6 address requests (be aware that
439+ # IPv6 works a whole lot different than IPv4)
440+ ipv6 = false
441+442+ # Enable DHCPv4 Rapid Commit Option specified in RFC 4039. Should only be enabled if
443+ # either the server is the only server for the subnet to avoid conflicts
444+ rapidCommit = false
445+446+ # Advertise DNS server multiple times to clients. Some devices will add their own
447+ # proprietary DNS servers to the list of DNS servers, which can cause issues with
448+ # Pi-hole. This option will advertise the Pi-hole DNS server multiple times to
449+ # clients, which should prevent this from happening.
450+ multiDNS = false
451+452+ # Enable logging for DHCP. This will log all relevant DHCP-related activity, including,
453+ # e.g., all the options sent to DHCP clients and the tags used to determine them (if
454+ # any). This can be useful for debugging DHCP issues. The generated output is saved to
455+ # the file specified by files.log.dnsmasq below.
456+ logging = false
457+458+ # Ignore unknown DHCP clients.
459+ # If this option is set, Pi-hole ignores all clients which are not explicitly
460+ # configured through dhcp.hosts. This can be useful to prevent unauthorized clients
461+ # from getting an IP address from the DHCP server.
462+ # It should be noted that this option is not a security feature, as clients can still
463+ # assign themselves an IP address and use the network. It is merely a convenience
464+ # feature to prevent unknown clients from getting a valid IP configuration assigned
465+ # automatically.
466+ # Note that you will need to configure new clients manually in dhcp.hosts before they
467+ # can use the network when this feature is enabled.
468+ ignoreUnknownClients = false
469+470+ # Per host parameters for the DHCP server. This allows a machine with a particular
471+ # hardware address to be always allocated the same hostname, IP address and lease time
472+ # or to specify static DHCP leases
473+ #
474+ # Possible values are:
475+ # Array of static leases each on in one of the following forms:
476+ # "[<hwaddr>][,id:<client_id>|*][,set:<tag>][,tag:<tag>][,<ipaddr>][,<hostname>][,<lease_time>][,ignore]"
477+ hosts = []
478+479+ [ntp.ipv4]
480+ # Should FTL act as network time protocol (NTP) server (IPv4)?
481+ active = true
482+483+ # IPv4 address to listen on for NTP requests
484+ #
485+ # Possible values are:
486+ # <valid IPv4 address> or empty string ("") for wildcard (0.0.0.0)
487+ address = ""
488+489+ [ntp.ipv6]
490+ # Should FTL act as network time protocol (NTP) server (IPv6)?
491+ active = true
492+493+ # IPv6 address to listen on for NTP requests
494+ #
495+ # Possible values are:
496+ # <valid IPv6 address> or empty string ("") for wildcard (::)
497+ address = ""
498+499+ [ntp.sync]
500+ # Should FTL try to synchronize the system time with an upstream NTP server?
501+ active = true
502+503+ # NTP upstream server to sync with, e.g., "pool.ntp.org". Note that the NTP server
504+ # should be located as close as possible to you in order to minimize the time offset
505+ # possibly introduced by different routing paths.
506+ #
507+ # Possible values are:
508+ # valid NTP upstream server
509+ server = "pool.ntp.org"
510+511+ # Interval in seconds between successive synchronization attempts with the NTP server
512+ interval = 3600
513+514+ # Number of NTP syncs to perform and average before updating the system time
515+ count = 8
516+517+ [ntp.sync.rtc]
518+ # Should FTL update a real-time clock (RTC) if available?
519+ set = false
520+521+ # Path to the RTC device to update. Leave empty for auto-discovery
522+ #
523+ # Possible values are:
524+ # Path to the RTC device, e.g., "/dev/rtc0"
525+ device = ""
526+527+ # Should the RTC be set to UTC?
528+ utc = true
529+530+[resolver]
531+ # Should FTL try to resolve IPv4 addresses to hostnames?
532+ resolveIPv4 = true
533+534+ # Should FTL try to resolve IPv6 addresses to hostnames?
535+ resolveIPv6 = true
536+537+ # Control whether FTL should use the fallback option to try to obtain client names from
538+ # checking the network table. This behavior can be disabled with this option.
539+ # Assume an IPv6 client without a host names. However, the network table knows -
540+ # though the client's MAC address - that this is the same device where we have a host
541+ # name for another IP address (e.g., a DHCP server managed IPv4 address). In this
542+ # case, we use the host name associated to the other address as this is the same
543+ # device.
544+ networkNames = true
545+546+ # With this option, you can change how (and if) hourly PTR requests are made to check
547+ # for changes in client and upstream server hostnames.
548+ #
549+ # Possible values are:
550+ # - "IPV4_ONLY"
551+ # Do hourly PTR lookups only for IPv4 addresses. This is the new default since
552+ # Pi-hole FTL v5.3.2. It should resolve issues with more and more very
553+ # short-lived PE IPv6 addresses coming up in a lot of networks.
554+ # - "ALL"
555+ # Do hourly PTR lookups for all addresses. This was the default until FTL
556+ # v5.3(.1). It has been replaced as it can create a lot of PTR queries for those
557+ # with many IPv6 addresses in their networks.
558+ # - "UNKNOWN"
559+ # Only resolve unknown hostnames. Already existing hostnames are never refreshed,
560+ # i.e., there will be no PTR queries made for clients where hostnames are known.
561+ # This also means that known hostnames will not be updated once known.
562+ # - "NONE"
563+ # Don't do any hourly PTR lookups. This means we look host names up exactly once
564+ # (when we first see a client) and never again. You may miss future changes of
565+ # host names.
566+ refreshNames = "IPV4_ONLY"
567+568+[database]
569+ # Should FTL load information from the database on startup to be aware of the most
570+ # recent history?
571+ DBimport = true
572+573+ # How long should queries be stored in the database [days]?
574+ # Setting this value to 0 will disable the database.
575+ maxDBdays = 91
576+577+ # How often do we store queries in FTL's database [seconds]?
578+ DBinterval = 60
579+580+ # Should FTL enable Write-Ahead Log (WAL) mode for the on-disk query database
581+ # (configured via files.database)?
582+ # It is recommended to leave this setting enabled for performance reasons. About the
583+ # only reason to disable WAL mode is if you are experiencing specific issues with it,
584+ # e.g., when using a database that is accessed from multiple hosts via a network
585+ # share. When this setting is disabled, FTL will use SQLite3's default journal mode
586+ # (rollback journal in DELETE mode).
587+ useWAL = true
588+589+ [database.network]
590+ # Should FTL analyze the local ARP cache? When disabled, client identification and the
591+ # network table will stop working reliably.
592+ parseARPcache = true
593+594+ # How long should IP addresses be kept in the network_addresses table [days]? IP
595+ # addresses (and associated host names) older than the specified number of days are
596+ # removed to avoid dead entries in the network overview table.
597+ expire = 91
598+599+[webserver]
600+ # On which domain is the web interface served?
601+ #
602+ # Possible values are:
603+ # <valid domain>
604+ domain = "pi.hole"
605+606+ # Webserver access control list (ACL) allowing for restrictions to be put on the list
607+ # of IP addresses which have access to the web server. The ACL is a comma separated
608+ # list of IP subnets, where each subnet is prepended by either a - or a + sign. A plus
609+ # sign means allow, where a minus sign means deny. If a subnet mask is omitted, such
610+ # as -1.2.3.4, this means to deny only that single IP address. If this value is not
611+ # set (empty string), all accesses are allowed. Otherwise, the default setting is to
612+ # deny all accesses. On each request the full list is traversed, and the last (!)
613+ # match wins. IPv6 addresses may be specified in CIDR-form [a:b::c]/64.
614+ #
615+ # Example 1: acl = "+127.0.0.1,+[::1]"
616+ # ---> deny all access, except from 127.0.0.1 and ::1,
617+ # Example 2: acl = "+192.168.0.0/16"
618+ # ---> deny all accesses, except from the 192.168.0.0/16 subnet,
619+ # Example 3: acl = "+[::]/0" ---> allow only IPv6 access.
620+ #
621+ # Possible values are:
622+ # <valid ACL>
623+ acl = ""
624+625+ # Ports to be used by the webserver.
626+ # Comma-separated list of ports to listen on. It is possible to specify an IP address
627+ # to bind to. In this case, an IP address and a colon must be prepended to the port
628+ # number. For example, to bind to the loopback interface on port 80 (IPv4) and to all
629+ # interfaces port 8080 (IPv4), use "127.0.0.1:80,8080". "[::]:80" can be used to
630+ # listen to IPv6 connections to port 80. IPv6 addresses of network interfaces can be
631+ # specified as well, e.g. "[::1]:80" for the IPv6 loopback interface. [::]:80 will
632+ # bind to port 80 IPv6 only.
633+ # In order to use port 80 for all interfaces, both IPv4 and IPv6, use either the
634+ # configuration "80,[::]:80" (create one socket for IPv4 and one for IPv6 only), or
635+ # "+80" (create one socket for both, IPv4 and IPv6). The '+' notation to use IPv4 and
636+ # IPv6 will only work if no network interface is specified. Depending on your
637+ # operating system version and IPv6 network environment, some configurations might not
638+ # work as expected, so you have to test to find the configuration most suitable for
639+ # your needs. In case "+80" does not work for your environment, you need to use
640+ # "80,[::]:80".
641+ # If the port is TLS/SSL, a letter 's' (secure) must be appended, for example,
642+ # "80,443s" will open port 80 and port 443, and connections on port 443 will be
643+ # encrypted. For non-encrypted ports, it is allowed to append letter 'r' (as in
644+ # redirect). Redirected ports will redirect all their traffic to the first configured
645+ # SSL port. For example, if webserver.port is "80r,443s", then all HTTP traffic coming
646+ # at port 80 will be redirected to HTTPS port 443.
647+ # When specifying 'o' (optional) behind a port, inability to use this port is not
648+ # considered an error. For instance, specifying "80o,8080o" will allow the webserver
649+ # to listen on either 80, 8080, both or even none of the two ports. This flag may be
650+ # combined with 'r' and 's' like "80or,443os,8080,4443s" (80 redirecting to SSL if
651+ # available, 443 encrypted if available, 8080 mandatory and unencrypted, 4443
652+ # mandatory and encrypted).
653+ # If this value is not set (empty string), the web server will not be started and,
654+ # hence, the API will not be available.
655+ #
656+ # Possible values are:
657+ # comma-separated list of <[ip_address:]port>
658+ port = "80o,443os,[::]:80o,[::]:443os"
659+660+ # Maximum number of worker threads allowed.
661+ # The Pi-hole web server handles each incoming connection in a separate thread.
662+ # Therefore, the value of this option is effectively the number of concurrent HTTP
663+ # connections that can be handled. Any other connections are queued until they can be
664+ # processed by a unoccupied thread.
665+ # The total number of threads you see may be lower than the configured value as
666+ # threads are only created when needed due to incoming connections.
667+ # The value 0 means the number of threads is 50 (as per default settings of CivetWeb)
668+ # for backwards-compatible behavior.
669+ threads = 50
670+671+ # Additional HTTP headers added to the web server responses.
672+ # The headers are added to all responses, including those for the API.
673+ # Note about the default additional headers:
674+ # - X-DNS-Prefetch-Control: off: Usually browsers proactively perform domain name
675+ # resolution on links that the user may choose to follow. We disable DNS prefetching
676+ # here.
677+ # - Content-Security-Policy: [...] 'unsafe-inline' is both required by Chart.js
678+ # styling some elements directly, and index.html containing some inlined Javascript
679+ # code.
680+ # - X-Frame-Options: DENY: The page can not be displayed in a frame, regardless of the
681+ # site attempting to do so.
682+ # - X-Xss-Protection: 0: Disables XSS filtering in browsers that support it. This
683+ # header is usually enabled by default in browsers, and is not recommended as it can
684+ # hurt the security of the site.
685+ # (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection).
686+ # - X-Content-Type-Options: nosniff: Marker used by the server to indicate that the
687+ # MIME types advertised in the Content-Type headers should not be changed and be
688+ # followed. This allows to opt-out of MIME type sniffing, or, in other words, it is a
689+ # way to say that the webmasters knew what they were doing. Site security testers
690+ # usually expect this header to be set.
691+ # - Referrer-Policy: strict-origin-when-cross-origin: A referrer will be sent for
692+ # same-site origins, but cross-origin requests will send no referrer information.
693+ # The latter four headers are set as expected by https://securityheaders.io
694+ #
695+ # Possible values are:
696+ # array of HTTP headers
697+ headers = [
698+ "X-DNS-Prefetch-Control: off",
699+ "Content-Security-Policy: default-src 'self' 'unsafe-inline';",
700+ "X-Frame-Options: DENY",
701+ "X-XSS-Protection: 0",
702+ "X-Content-Type-Options: nosniff",
703+ "Referrer-Policy: strict-origin-when-cross-origin"
704+ ]
705+706+ # Should the web server serve all files in webserver.paths.webroot directory? If
707+ # disabled, only files within the path defined through webserver.paths.webhome and
708+ # /api will be served.
709+ serve_all = false
710+711+ [webserver.session]
712+ # Session timeout in seconds. If a session is inactive for more than this time, it will
713+ # be terminated. Sessions are continuously refreshed by the web interface, preventing
714+ # sessions from timing out while the web interface is open.
715+ # This option may also be used to make logins persistent for long times, e.g. 86400
716+ # seconds (24 hours), 604800 seconds (7 days) or 2592000 seconds (30 days). Note that
717+ # the total number of concurrent sessions is limited so setting this value too high
718+ # may result in users being rejected and unable to log in if there are already too
719+ # many sessions active.
720+ timeout = 1800
721+722+ # Should Pi-hole backup and restore sessions from the database? This is useful if you
723+ # want to keep your sessions after a restart of the web interface.
724+ restore = true
725+726+ [webserver.tls]
727+ # Path to the TLS (SSL) certificate file. All directories along the path must be
728+ # readable and accessible by the user running FTL (typically 'pihole'). This option is
729+ # only required when at least one of webserver.port is TLS. The file must be in PEM
730+ # format, and it must have both, private key and certificate (the *.pem file created
731+ # must contain a 'CERTIFICATE' section as well as a 'RSA PRIVATE KEY' section).
732+ # The *.pem file can be created using
733+ # cp server.crt server.pem
734+ # cat server.key >> server.pem
735+ # if you have these files instead
736+ #
737+ # Possible values are:
738+ # <valid TLS certificate file (*.pem)>
739+ cert = "/etc/pihole/tls.pem"
740+741+ [webserver.paths]
742+ # Server root on the host
743+ #
744+ # Possible values are:
745+ # <valid path>
746+ webroot = "/var/www/html"
747+748+ # Sub-directory of the root containing the web interface
749+ #
750+ # Possible values are:
751+ # <valid subpath>, both slashes are needed!
752+ webhome = "/admin/"
753+754+ # Prefix where the web interface is served
755+ # This is useful when you are using a reverse proxy serving the web interface, e.g.,
756+ # at http://<ip>/pihole/admin/ instead of http://<ip>/admin/. In this example, the
757+ # prefix would be "/pihole". Note that the prefix has to be stripped away by the
758+ # reverse proxy, e.g., for traefik:
759+ # - traefik.http.routers.pihole.rule=PathPrefix(`/pihole`)
760+ # - traefik.http.middlewares.piholehttp.stripprefix.prefixes=/pihole
761+ # The prefix should start with a slash. If you don't use a prefix, leave this field
762+ # empty. Setting this field to an incorrect value may result in the web interface not
763+ # being accessible.
764+ # Don't use this setting if you are not using a reverse proxy!
765+ #
766+ # Possible values are:
767+ # valid URL prefix or empty
768+ prefix = ""
769+770+ [webserver.interface]
771+ # Should the web interface use the boxed layout?
772+ boxed = true
773+774+ # Theme used by the Pi-hole web interface
775+ #
776+ # Possible values are:
777+ # - "default-auto"
778+ # Pi-hole auto
779+ # - "default-light"
780+ # Pi-hole day
781+ # - "default-dark"
782+ # Pi-hole midnight
783+ # - "default-darker"
784+ # Pi-hole deep-midnight
785+ # - "high-contrast"
786+ # High-contrast light
787+ # - "high-contrast-dark"
788+ # High-contrast dark
789+ # - "lcars"
790+ # Star Trek LCARS
791+ theme = "default-auto"
792+793+ [webserver.api]
794+ # Number of concurrent sessions allowed for the API. If the number of sessions exceeds
795+ # this value, no new sessions will be allowed until the number of sessions drops due
796+ # to session expiration or logout. Note that the number of concurrent sessions is
797+ # irrelevant if authentication is disabled as no sessions are used in this case.
798+ max_sessions = 16
799+800+ # Should FTL prettify the API output (add extra spaces, newlines and indentation)?
801+ prettyJSON = false
802+803+ # API password hash
804+ #
805+ # Possible values are:
806+ # <valid Pi-hole password hash>
807+ pwhash = ""
808+809+ # Pi-hole 2FA TOTP secret. When set to something different than "", 2FA authentication
810+ # will be enforced for the API and the web interface. This setting is write-only, you
811+ # can not read the secret back.
812+ #
813+ # Possible values are:
814+ # <valid TOTP secret (20 Bytes in Base32 encoding)>
815+ totp_secret = ""
816+817+ # Pi-hole application password.
818+ # After you turn on two-factor (2FA) verification and set up an Authenticator app, you
819+ # may run into issues if you use apps or other services that don't support two-step
820+ # verification. In this case, you can create and use an app password to sign in. An
821+ # app password is a long, randomly generated password that can be used instead of your
822+ # regular password + TOTP token when signing in to the API. The app password can be
823+ # generated through the API and will be shown only once. You can revoke the app
824+ # password at any time. If you revoke the app password, be sure to generate a new one
825+ # and update your app with the new password.
826+ #
827+ # Possible values are:
828+ # <valid Pi-hole password hash>
829+ app_pwhash = ""
830+831+ # Should application password API sessions be allowed to modify config settings?
832+ # Setting this to true allows third-party applications using the application password
833+ # to modify settings, e.g., the upstream DNS servers, DHCP server settings, or
834+ # changing passwords. This setting should only be enabled if really needed and only if
835+ # you trust the applications using the application password.
836+ app_sudo = false
837+838+ # Should FTL create a temporary CLI password? This password is stored in clear in
839+ # /etc/pihole and can be used by the CLI (pihole ... commands) to authenticate
840+ # against the API. Note that the password is only valid for the current session and
841+ # regenerated on each FTL restart. Sessions initiated with this password cannot modify
842+ # the Pi-hole configuration (change passwords, etc.) for security reasons but can
843+ # still use the API to query data and manage lists.
844+ cli_pw = true
845+846+ # Array of clients to be excluded from certain API responses (regex):
847+ # - Query Log (/api/queries)
848+ # - Top Clients (/api/stats/top_clients)
849+ # This setting accepts both IP addresses (IPv4 and IPv6) as well as hostnames.
850+ # Note that backslashes "\" need to be escaped, i.e. "\\" in this setting
851+ #
852+ # Example: [ "^192\\.168\\.2\\.56$", "^fe80::341:[0-9a-f]*$", "^localhost$" ]
853+ #
854+ # Possible values are:
855+ # array of regular expressions describing clients
856+ excludeClients = []
857+858+ # Array of domains to be excluded from certain API responses (regex):
859+ # - Query Log (/api/queries)
860+ # - Top Clients (/api/stats/top_domains)
861+ # Note that backslashes "\" need to be escaped, i.e. "\\" in this setting
862+ #
863+ # Example: [ "(^|\\.)\\.google\\.de$", "\\.pi-hole\\.net$" ]
864+ #
865+ # Possible values are:
866+ # array of regular expressions describing domains
867+ excludeDomains = []
868+869+ # How much history should be imported from the database and returned by the API
870+ # [seconds]? (max 24*60*60 = 86400)
871+ maxHistory = 86400
872+873+ # Up to how many clients should be returned in the activity graph endpoint
874+ # (/api/history/clients)?
875+ # This setting can be overwritten at run-time using the parameter N. Setting this to 0
876+ # will always send all clients. Be aware that this may be challenging for the GUI if
877+ # you have many (think > 1.000 clients) in your network
878+ maxClients = 10
879+880+ # How should the API compute the most active clients? If set to true, the API will
881+ # return the clients with the most queries globally (within 24 hours). If set to
882+ # false, the API will return the clients with the most queries per time slot
883+ # individually.
884+ client_history_global_max = true
885+886+ # Allow destructive API calls (e.g. deleting all queries, powering off the system, ...)
887+ allow_destructive = true
888+889+ [webserver.api.temp]
890+ # Which upper temperature limit should be used by Pi-hole? Temperatures above this
891+ # limit will be shown as "hot". The number specified here is in the unit defined below
892+ limit = 60.000000
893+894+ # Which temperature unit should be used for temperatures processed by FTL?
895+ #
896+ # Possible values are:
897+ # - "C"
898+ # Celsius
899+ # - "F"
900+ # Fahrenheit
901+ # - "K"
902+ # Kelvin
903+ unit = "C"
904+905+[files]
906+ # The file which contains the PID of FTL's main process.
907+ #
908+ # Possible values are:
909+ # <any writable file>
910+ pid = "/run/pihole-FTL.pid"
911+912+ # The location of FTL's long-term database
913+ #
914+ # Possible values are:
915+ # <any FTL database>
916+ database = "/etc/pihole/pihole-FTL.db"
917+918+ # The location of Pi-hole's gravity database
919+ #
920+ # Possible values are:
921+ # <any Pi-hole gravity database>
922+ gravity = "/etc/pihole/gravity.db"
923+924+ # A temporary directory where Pi-hole can store files during gravity updates. This
925+ # directory must be writable by the user running gravity (typically pihole).
926+ #
927+ # Possible values are:
928+ # <any existing world-writable writable directory>
929+ gravity_tmp = "/tmp"
930+931+ # The database containing MAC -> Vendor information for the network table
932+ #
933+ # Possible values are:
934+ # <any Pi-hole macvendor database>
935+ macvendor = "/etc/pihole/macvendor.db"
936+937+ # The old config file of Pi-hole used before v6.0
938+ #
939+ # Possible values are:
940+ # <any Pi-hole setupVars file>
941+ setupVars = "/etc/pihole/setupVars.conf"
942+943+ # An optional file containing a pcap capture of the network traffic. This file is used
944+ # for debugging purposes only. If you don't know what this is, you don't need it.
945+ # Setting this to an empty string disables pcap recording. The file must be writable
946+ # by the user running FTL (typically pihole). Failure to write to this file will
947+ # prevent the DNS resolver from starting. The file is appended to if it already
948+ # exists.
949+ #
950+ # Possible values are:
951+ # <any writable pcap file>
952+ pcap = ""
953+954+ [files.log]
955+ # The location of FTL's log file
956+ #
957+ # Possible values are:
958+ # <any writable file>
959+ ftl = "/var/log/pihole/FTL.log"
960+961+ # The log file used by the embedded dnsmasq DNS server
962+ #
963+ # Possible values are:
964+ # <any writable file>
965+ dnsmasq = "/var/log/pihole/pihole.log"
966+967+ # The log file used by the webserver
968+ #
969+ # Possible values are:
970+ # <any writable file>
971+ webserver = "/var/log/pihole/webserver.log"
972+973+[misc]
974+ # Using privacy levels you can specify which level of detail you want to see in your
975+ # Pi-hole statistics. Changing this setting will trigger a restart of FTL
976+ #
977+ # Possible values are:
978+ # - 0
979+ # Don't hide anything, all statistics are available.
980+ # - 1
981+ # Hide domains. This setting disables Top Domains and Top Ads
982+ # - 2
983+ # Hide domains and clients. This setting disables Top Domains, Top Ads, Top
984+ # Clients and Clients over time.
985+ # - 3
986+ # Anonymize everything. This setting disabled almost any statistics and query
987+ # analysis. There will be no long-term database logging and no Query Log. You
988+ # will also loose most regex features.
989+ privacylevel = 0
990+991+ # During startup, in some configurations, network interfaces appear only late during
992+ # system startup and are not ready when FTL tries to bind to them. Therefore, you may
993+ # want FTL to wait a given amount of time before trying to start the DNS revolver.
994+ # This setting takes any integer value between 0 and 300 seconds. To prevent delayed
995+ # startup while the system is already running and FTL is restarted, the delay only
996+ # takes place within the first 180 seconds (hard-coded) after booting.
997+ delay_startup = 0
998+999+ # Set niceness of pihole-FTL. Defaults to -10 and can be disabled altogether by setting
1000+ # a value of -999. The nice value is an attribute that can be used to influence the
1001+ # CPU scheduler to favor or disfavor a process in scheduling decisions. The range of
1002+ # the nice value varies across UNIX systems. On modern Linux, the range is -20 (high
1003+ # priority = not very nice to other processes) to +19 (low priority).
1004+ nice = -10
1005+1006+ # Should FTL translate its own stack addresses into code lines during the bug
1007+ # backtrace? This improves the analysis of crashed significantly. It is recommended to
1008+ # leave the option enabled. This option should only be disabled when addr2line is
1009+ # known to not be working correctly on the machine because, in this case, the
1010+ # malfunctioning addr2line can prevent from generating any backtrace at all.
1011+ addr2line = true
1012+1013+ # Should FTL load additional dnsmasq configuration files from /etc/dnsmasq.d/?
1014+ # Warning: This is an advanced setting and should only be used with care.
1015+ # Incorrectly formatted or config files specifying options which can only be defined
1016+ # once can result in conflicts with the automatic configuration of Pi-hole (see
1017+ # /etc/pihole/dnsmasq.conf) and may stop DNS resolution from working.
1018+ etc_dnsmasq_d = false
1019+1020+ # Additional lines to inject into the generated dnsmasq configuration.
1021+ # Warning: This is an advanced setting and should only be used with care. Incorrectly
1022+ # formatted or duplicated lines as well as lines conflicting with the automatic
1023+ # configuration of Pi-hole can break the embedded dnsmasq and will stop DNS resolution
1024+ # from working.
1025+ # Use this option with extra care.
1026+ #
1027+ # Possible values are:
1028+ # array of valid dnsmasq config line options
1029+ dnsmasq_lines = []
1030+1031+ # Log additional information about queries and replies to pihole.log
1032+ # When this setting is enabled, the log has extra information at the start of each
1033+ # line. This consists of a serial number which ties together the log lines associated
1034+ # with an individual query, and the IP address of the requestor. This setting is only
1035+ # effective if dns.queryLogging is enabled, too. This option is only useful for
1036+ # debugging and is not recommended for normal use.
1037+ extraLogging = false
1038+1039+ # Put configuration into read-only mode. This will prevent any changes to the
1040+ # configuration file via the API or CLI. This setting useful when a configuration is
1041+ # to be forced/modified by some third-party application (like infrastructure-as-code
1042+ # providers) and should not be changed by any means.
1043+ readOnly = false
1044+1045+ [misc.check]
1046+ # Pi-hole is very lightweight on resources. Nevertheless, this does not mean that you
1047+ # should run Pi-hole on a server that is otherwise extremely busy as queuing on the
1048+ # system can lead to unnecessary delays in DNS operation as the system becomes less
1049+ # and less usable as the system load increases because all resources are permanently
1050+ # in use. To account for this, FTL regularly checks the system load. To bring this to
1051+ # your attention, FTL warns about excessive load when the 15 minute system load
1052+ # average exceeds the number of cores.
1053+ # This check can be disabled with this setting.
1054+ load = true
1055+1056+ # FTL stores history in shared memory to allow inter-process communication with forked
1057+ # dedicated TCP workers. If FTL runs out of memory, it cannot continue to work as
1058+ # queries cannot be analyzed any further. Hence, FTL checks if enough shared memory is
1059+ # available on your system and warns you if this is not the case.
1060+ # By default, FTL warns if the shared-memory usage exceeds 90%. You can set any
1061+ # integer limit between 0 to 100 (interpreted as percentages) where 0 means that
1062+ # checking of shared-memory usage is disabled.
1063+ shmem = 90
1064+1065+ # FTL stores its long-term history in a database file on disk. Furthermore, FTL stores
1066+ # log files. By default, FTL warns if usage of the disk holding any crucial file
1067+ # exceeds 90%. You can set any integer limit between 0 to 100 (interpreted as
1068+ # percentages) where 0 means that checking of disk usage is disabled.
1069+ disk = 90
1070+1071+[debug]
1072+ # Print debugging information about database actions. This prints performed SQL
1073+ # statements as well as some general information such as the time it took to store the
1074+ # queries and how many have been saved to the database.
1075+ database = false
1076+1077+ # Prints a list of the detected interfaces on the startup of pihole-FTL. Also, prints
1078+ # whether these interfaces are IPv4 or IPv6 interfaces.
1079+ networking = false
1080+1081+ # Print information about shared memory locks. Messages will be generated when waiting,
1082+ # obtaining, and releasing a lock.
1083+ locks = false
1084+1085+ # Print extensive query information (domains, types, replies, etc.). This has always
1086+ # been part of the legacy debug mode of pihole-FTL.
1087+ queries = false
1088+1089+ # Print flags of queries received by the DNS hooks. Only effective when DEBUG_QUERIES
1090+ # is enabled as well.
1091+ flags = false
1092+1093+ # Print information about shared memory buffers. Messages are either about creating or
1094+ # enlarging shmem objects or string injections.
1095+ shmem = false
1096+1097+ # Print information about garbage collection (GC): What is to be removed, how many have
1098+ # been removed and how long did GC take.
1099+ gc = false
1100+1101+ # Print information about ARP table processing: How long did parsing take, whether read
1102+ # MAC addresses are valid, and if the macvendor.db file exists.
1103+ arp = false
1104+1105+ # Controls if FTLDNS should print extended details about regex matching into FTL.log.
1106+ regex = false
1107+1108+ # Print extra debugging information concerning API calls. This includes the request,
1109+ # the request parameters, and the internal details about how the algorithms decide
1110+ # which data to present and in what form. This very verbose output should only be used
1111+ # when debugging specific API issues and can be helpful, e.g., when a client cannot
1112+ # connect due to an obscure API error. Furthermore, this setting enables logging of
1113+ # all API requests (auth log) and details about user authentication attempts.
1114+ api = false
1115+1116+ # Print extra debugging information about TLS connections. This includes the TLS
1117+ # version, the cipher suite, the certificate chain and much more. This very verbose
1118+ # output should only be used when debugging specific TLS issues and can be helpful,
1119+ # e.g., when a client cannot connect due to an obscure TLS error as modern browsers do
1120+ # not provide much information about the underlying TLS connection and most often give
1121+ # only very generic error messages without much/any underlying technical information.
1122+ tls = false
1123+1124+ # Print information about overTime memory operations, such as initializing or moving
1125+ # overTime slots.
1126+ overtime = false
1127+1128+ # Print information about status changes for individual queries. This can be useful to
1129+ # identify unexpected unknown queries.
1130+ status = false
1131+1132+ # Print information about capabilities granted to the pihole-FTL process. The current
1133+ # capabilities are printed on receipt of SIGHUP, i.e., the current set of capabilities
1134+ # can be queried without restarting pihole-FTL (by setting DEBUG_CAPS=true and
1135+ # thereafter sending killall -HUP pihole-FTL).
1136+ caps = false
1137+1138+ # Print information about DNSSEC activity
1139+ dnssec = false
1140+1141+ # FTL uses dynamically allocated vectors for various tasks. This config option enables
1142+ # extensive debugging information such as information about allocation, referencing,
1143+ # deletion, and appending.
1144+ vectors = false
1145+1146+ # Extensive information about hostname resolution like which DNS servers are used in
1147+ # the first and second hostname resolving tries (only affecting internally generated
1148+ # PTR queries).
1149+ resolver = false
1150+1151+ # Print debugging information about received EDNS(0) data.
1152+ edns0 = false
1153+1154+ # Log various important client events such as change of interface (e.g., client
1155+ # switching from WiFi to wired or VPN connection), as well as extensive reporting
1156+ # about how clients were assigned to its groups.
1157+ clients = false
1158+1159+ # Log information related to alias-client processing.
1160+ aliasclients = false
1161+1162+ # Log information regarding FTL's embedded event handling queue.
1163+ events = false
1164+1165+ # Log information about script helpers, e.g., due to dhcp-script.
1166+ helper = false
1167+1168+ # Print config parsing details
1169+ config = false
1170+1171+ # Debug monitoring of /etc/pihole filesystem events
1172+ inotify = false
1173+1174+ # Debug monitoring of the webserver (CivetWeb) events
1175+ webserver = false
1176+1177+ # Temporary flag that may print additional information. This debug flag is meant to be
1178+ # used whenever needed for temporary investigations. The logged content may change
1179+ # without further notice at any time.
1180+ extra = false
1181+1182+ # Reserved debug flag
1183+ reserved = false
1184+1185+ # Print information about NTP synchronization
1186+ ntp = false
1187+1188+ # Print information about netlink communication and parsing
1189+ netlink = false
1190+1191+ # Set all debug flags at once. This is a convenience option to enable all debug flags
1192+ # at once. Note that this option is not persistent, setting it to true will enable all
1193+ # *remaining* debug flags but unsetting it will disable *all* debug flags.
1194+ all = false
···134 # APEI Generic Hardware Error Source
135 ACPI_APEI_GHES = (option yes);
136000000137 # Enable lazy RCUs for power savings:
138 # https://lore.kernel.org/rcu/20221019225138.GA2499943@paulmck-ThinkPad-P17-Gen-1/
139 # RCU_LAZY depends on RCU_NOCB_CPU depends on NO_HZ_FULL
···134 # APEI Generic Hardware Error Source
135 ACPI_APEI_GHES = (option yes);
136137+ # Without this, on some hardware the kernel fails at some
138+ # point after the EFI stub has executed but before a console
139+ # is set up. Regardless, it's good to have the extra debug
140+ # anyway.
141+ ACPI_DEBUG = yes;
142+143 # Enable lazy RCUs for power savings:
144 # https://lore.kernel.org/rcu/20221019225138.GA2499943@paulmck-ThinkPad-P17-Gen-1/
145 # RCU_LAZY depends on RCU_NOCB_CPU depends on NO_HZ_FULL