Merge staging-next into staging
This commit is contained in:
@@ -19511,6 +19511,12 @@
|
||||
githubId = 7536431;
|
||||
name = "Jonas Fierlings";
|
||||
};
|
||||
pilz = {
|
||||
name = "Pilz";
|
||||
email = "nix@pilz.foo";
|
||||
github = "pilz0";
|
||||
githubId = 48645439;
|
||||
};
|
||||
pimeys = {
|
||||
email = "julius@nauk.io";
|
||||
github = "pimeys";
|
||||
|
||||
@@ -56,6 +56,12 @@
|
||||
"module-services-opencloud-basic-usage": [
|
||||
"index.html#module-services-opencloud-basic-usage"
|
||||
],
|
||||
"module-services-networking-pihole-ftl-configuration-inherit-dnsmasq": [
|
||||
"index.html#module-services-networking-pihole-ftl-configuration-inherit-dnsmasq"
|
||||
],
|
||||
"module-services-networking-pihole-ftl-configuration-multiple-interfaces": [
|
||||
"index.html#module-services-networking-pihole-ftl-configuration-multiple-interfaces"
|
||||
],
|
||||
"module-services-strfry": [
|
||||
"index.html#module-services-strfry"
|
||||
],
|
||||
@@ -1448,6 +1454,21 @@
|
||||
"module-services-input-methods-kime": [
|
||||
"index.html#module-services-input-methods-kime"
|
||||
],
|
||||
"module-services-networking-pihole-ftl": [
|
||||
"index.html#module-services-networking-pihole-ftl"
|
||||
],
|
||||
"module-services-networking-pihole-ftl-administration": [
|
||||
"index.html#module-services-networking-pihole-ftl-administration"
|
||||
],
|
||||
"module-services-networking-pihole-ftl-configuration": [
|
||||
"index.html#module-services-networking-pihole-ftl-configuration"
|
||||
],
|
||||
"module-services-web-apps-pihole-web": [
|
||||
"index.html#module-services-web-apps-pihole-web"
|
||||
],
|
||||
"module-services-web-apps-pihole-web-configuration": [
|
||||
"index.html#module-services-web-apps-pihole-web-configuration"
|
||||
],
|
||||
"ch-profiles": [
|
||||
"index.html#ch-profiles"
|
||||
],
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
- [gtklock](https://github.com/jovanlanik/gtklock), a GTK-based lockscreen for Wayland. Available as [programs.gtklock](#opt-programs.gtklock.enable).
|
||||
- [Chrysalis](https://github.com/keyboardio/Chrysalis), a graphical configurator for Kaleidoscope-powered keyboards. Available as [programs.chrysalis](#opt-programs.chrysalis.enable).
|
||||
|
||||
- [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.
|
||||
|
||||
- [FileBrowser](https://filebrowser.org/), a web application for managing and sharing files. Available as [services.filebrowser](#opt-services.filebrowser.enable).
|
||||
|
||||
- [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).
|
||||
|
||||
@@ -1268,6 +1268,7 @@
|
||||
./services/networking/pdnsd.nix
|
||||
./services/networking/peroxide.nix
|
||||
./services/networking/picosnitch.nix
|
||||
./services/networking/pihole-ftl.nix
|
||||
./services/networking/pixiecore.nix
|
||||
./services/networking/pleroma.nix
|
||||
./services/networking/powerdns.nix
|
||||
@@ -1629,6 +1630,7 @@
|
||||
./services/web-apps/photoprism.nix
|
||||
./services/web-apps/phylactery.nix
|
||||
./services/web-apps/pict-rs.nix
|
||||
./services/web-apps/pihole-web.nix
|
||||
./services/web-apps/pingvin-share.nix
|
||||
./services/web-apps/pixelfed.nix
|
||||
./services/web-apps/plantuml-server.nix
|
||||
|
||||
@@ -25,7 +25,7 @@ let
|
||||
in
|
||||
{
|
||||
pg_dump_command =
|
||||
if d.name == "all" then
|
||||
if d.name == "all" && (!(d ? format) || isNull d.format) then
|
||||
"${as_user}${postgresql}/bin/pg_dumpall"
|
||||
else
|
||||
"${as_user}${postgresql}/bin/pg_dump";
|
||||
|
||||
@@ -79,8 +79,13 @@ in
|
||||
)
|
||||
|
||||
(mkRemovedOptionModule [ "services" "gitea" "ssh" "enable" ]
|
||||
"services.gitea.ssh.enable has been migrated into freeform setting services.gitea.settings.server.DISABLE_SSH. Keep in mind that the setting is inverted"
|
||||
"It has been migrated into freeform setting services.gitea.settings.server.DISABLE_SSH. Keep in mind that the setting is inverted."
|
||||
)
|
||||
(mkRemovedOptionModule [
|
||||
"services"
|
||||
"gitea"
|
||||
"useWizard"
|
||||
] "Has been removed because it was broken and lacked automated testing.")
|
||||
];
|
||||
|
||||
options = {
|
||||
@@ -93,12 +98,6 @@ in
|
||||
|
||||
package = mkPackageOption pkgs "gitea" { };
|
||||
|
||||
useWizard = mkOption {
|
||||
default = false;
|
||||
type = types.bool;
|
||||
description = "Do not generate a configuration and use gitea' installation wizard instead. The first registered user will be administrator.";
|
||||
};
|
||||
|
||||
stateDir = mkOption {
|
||||
default = "/var/lib/gitea";
|
||||
type = types.str;
|
||||
@@ -495,9 +494,7 @@ in
|
||||
This can be disabled by using this option.
|
||||
|
||||
*Note:* please keep in mind that this should be added after the initial
|
||||
deploy unless [](#opt-services.gitea.useWizard)
|
||||
is `true` as the first registered user will be the administrator if
|
||||
no install wizard is used.
|
||||
deploy as the first registered user will be the administrator.
|
||||
'';
|
||||
};
|
||||
};
|
||||
@@ -752,62 +749,60 @@ in
|
||||
in
|
||||
''
|
||||
# copy custom configuration and generate random secrets if needed
|
||||
${optionalString (!cfg.useWizard) ''
|
||||
function gitea_setup {
|
||||
cp -f '${configFile}' '${runConfig}'
|
||||
function gitea_setup {
|
||||
cp -f '${configFile}' '${runConfig}'
|
||||
|
||||
if [ ! -s '${secretKey}' ]; then
|
||||
${exe} generate secret SECRET_KEY > '${secretKey}'
|
||||
if [ ! -s '${secretKey}' ]; then
|
||||
${exe} generate secret SECRET_KEY > '${secretKey}'
|
||||
fi
|
||||
|
||||
# Migrate LFS_JWT_SECRET filename
|
||||
if [[ -s '${oldLfsJwtSecret}' && ! -s '${lfsJwtSecret}' ]]; then
|
||||
mv '${oldLfsJwtSecret}' '${lfsJwtSecret}'
|
||||
fi
|
||||
|
||||
if [ ! -s '${oauth2JwtSecret}' ]; then
|
||||
${exe} generate secret JWT_SECRET > '${oauth2JwtSecret}'
|
||||
fi
|
||||
|
||||
${lib.optionalString cfg.lfs.enable ''
|
||||
if [ ! -s '${lfsJwtSecret}' ]; then
|
||||
${exe} generate secret LFS_JWT_SECRET > '${lfsJwtSecret}'
|
||||
fi
|
||||
''}
|
||||
|
||||
# Migrate LFS_JWT_SECRET filename
|
||||
if [[ -s '${oldLfsJwtSecret}' && ! -s '${lfsJwtSecret}' ]]; then
|
||||
mv '${oldLfsJwtSecret}' '${lfsJwtSecret}'
|
||||
fi
|
||||
if [ ! -s '${internalToken}' ]; then
|
||||
${exe} generate secret INTERNAL_TOKEN > '${internalToken}'
|
||||
fi
|
||||
|
||||
if [ ! -s '${oauth2JwtSecret}' ]; then
|
||||
${exe} generate secret JWT_SECRET > '${oauth2JwtSecret}'
|
||||
fi
|
||||
chmod u+w '${runConfig}'
|
||||
${replaceSecretBin} '#secretkey#' '${secretKey}' '${runConfig}'
|
||||
${replaceSecretBin} '#dbpass#' '${cfg.database.passwordFile}' '${runConfig}'
|
||||
${replaceSecretBin} '#oauth2jwtsecret#' '${oauth2JwtSecret}' '${runConfig}'
|
||||
${replaceSecretBin} '#internaltoken#' '${internalToken}' '${runConfig}'
|
||||
|
||||
${lib.optionalString cfg.lfs.enable ''
|
||||
if [ ! -s '${lfsJwtSecret}' ]; then
|
||||
${exe} generate secret LFS_JWT_SECRET > '${lfsJwtSecret}'
|
||||
fi
|
||||
''}
|
||||
${lib.optionalString cfg.lfs.enable ''
|
||||
${replaceSecretBin} '#lfsjwtsecret#' '${lfsJwtSecret}' '${runConfig}'
|
||||
''}
|
||||
|
||||
if [ ! -s '${internalToken}' ]; then
|
||||
${exe} generate secret INTERNAL_TOKEN > '${internalToken}'
|
||||
fi
|
||||
${lib.optionalString (cfg.camoHmacKeyFile != null) ''
|
||||
${replaceSecretBin} '#hmackey#' '${cfg.camoHmacKeyFile}' '${runConfig}'
|
||||
''}
|
||||
|
||||
chmod u+w '${runConfig}'
|
||||
${replaceSecretBin} '#secretkey#' '${secretKey}' '${runConfig}'
|
||||
${replaceSecretBin} '#dbpass#' '${cfg.database.passwordFile}' '${runConfig}'
|
||||
${replaceSecretBin} '#oauth2jwtsecret#' '${oauth2JwtSecret}' '${runConfig}'
|
||||
${replaceSecretBin} '#internaltoken#' '${internalToken}' '${runConfig}'
|
||||
${lib.optionalString (cfg.mailerPasswordFile != null) ''
|
||||
${replaceSecretBin} '#mailerpass#' '${cfg.mailerPasswordFile}' '${runConfig}'
|
||||
''}
|
||||
|
||||
${lib.optionalString cfg.lfs.enable ''
|
||||
${replaceSecretBin} '#lfsjwtsecret#' '${lfsJwtSecret}' '${runConfig}'
|
||||
''}
|
||||
${lib.optionalString (cfg.metricsTokenFile != null) ''
|
||||
${replaceSecretBin} '#metricstoken#' '${cfg.metricsTokenFile}' '${runConfig}'
|
||||
''}
|
||||
|
||||
${lib.optionalString (cfg.camoHmacKeyFile != null) ''
|
||||
${replaceSecretBin} '#hmackey#' '${cfg.camoHmacKeyFile}' '${runConfig}'
|
||||
''}
|
||||
|
||||
${lib.optionalString (cfg.mailerPasswordFile != null) ''
|
||||
${replaceSecretBin} '#mailerpass#' '${cfg.mailerPasswordFile}' '${runConfig}'
|
||||
''}
|
||||
|
||||
${lib.optionalString (cfg.metricsTokenFile != null) ''
|
||||
${replaceSecretBin} '#metricstoken#' '${cfg.metricsTokenFile}' '${runConfig}'
|
||||
''}
|
||||
|
||||
${lib.optionalString (cfg.captcha.secretFile != null) ''
|
||||
${replaceSecretBin} '#captchasecret#' '${cfg.captcha.secretFile}' '${runConfig}'
|
||||
''}
|
||||
chmod u-w '${runConfig}'
|
||||
}
|
||||
(umask 027; gitea_setup)
|
||||
''}
|
||||
${lib.optionalString (cfg.captcha.secretFile != null) ''
|
||||
${replaceSecretBin} '#captchasecret#' '${cfg.captcha.secretFile}' '${runConfig}'
|
||||
''}
|
||||
chmod u-w '${runConfig}'
|
||||
}
|
||||
(umask 027; gitea_setup)
|
||||
|
||||
# run migrations/init the database
|
||||
${exe} migrate
|
||||
|
||||
@@ -115,6 +115,12 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
configFile = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = dnsmasqConf;
|
||||
internal = true;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
@@ -172,7 +178,7 @@ in
|
||||
serviceConfig = {
|
||||
Type = "dbus";
|
||||
BusName = "uk.org.thekelleys.dnsmasq";
|
||||
ExecStart = "${dnsmasq}/bin/dnsmasq -k --enable-dbus --user=dnsmasq -C ${dnsmasqConf}";
|
||||
ExecStart = "${dnsmasq}/bin/dnsmasq -k --enable-dbus --user=dnsmasq -C ${cfg.configFile}";
|
||||
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||
PrivateTmp = true;
|
||||
ProtectSystem = true;
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
cfg,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
}:
|
||||
|
||||
let
|
||||
pihole = pkgs.pihole;
|
||||
makePayload =
|
||||
list:
|
||||
builtins.toJSON {
|
||||
inherit (list) type enabled;
|
||||
address = list.url;
|
||||
comment = list.description;
|
||||
};
|
||||
payloads = map makePayload cfg.lists;
|
||||
in
|
||||
''
|
||||
# Can't use -u (unset) because api.sh uses API_URL before it is set
|
||||
set -eo pipefail
|
||||
pihole="${lib.getExe pihole}"
|
||||
jq="${lib.getExe pkgs.jq}"
|
||||
|
||||
# If the database doesn't exist, it needs to be created with gravity.sh
|
||||
if [ ! -f '${cfg.stateDirectory}'/gravity.db ]; then
|
||||
$pihole -g
|
||||
# Send SIGRTMIN to FTL, which makes it reload the database, opening the newly created one
|
||||
${pkgs.procps}/bin/kill -s SIGRTMIN $(systemctl show --property MainPID --value ${config.systemd.services.pihole-ftl.name})
|
||||
fi
|
||||
|
||||
source ${pihole}/usr/share/pihole/advanced/Scripts/api.sh
|
||||
source ${pihole}/usr/share/pihole/advanced/Scripts/utils.sh
|
||||
|
||||
any_failed=0
|
||||
|
||||
addList() {
|
||||
local payload="$1"
|
||||
|
||||
echo "Adding list: $payload"
|
||||
local result=$(PostFTLData "lists" "$payload")
|
||||
|
||||
local error="$($jq '.error' <<< "$result")"
|
||||
if [[ "$error" != "null" ]]; then
|
||||
echo "Error: $error"
|
||||
any_failed=1
|
||||
return
|
||||
fi
|
||||
|
||||
id="$($jq '.lists.[].id?' <<< "$result")"
|
||||
if [[ "$id" == "null" ]]; then
|
||||
any_failed=1
|
||||
error="$($jq '.processed.errors.[].error' <<< "$result")"
|
||||
echo "Error: $error"
|
||||
return
|
||||
fi
|
||||
|
||||
echo "Added list ID $id: $result"
|
||||
}
|
||||
|
||||
for i in 1 2 3; do
|
||||
(TestAPIAvailability) && break
|
||||
echo "Retrying API shortly..."
|
||||
${pkgs.coreutils}/bin/sleep .5s
|
||||
done;
|
||||
|
||||
LoginAPI
|
||||
|
||||
${builtins.concatStringsSep "\n" (
|
||||
map (
|
||||
payload:
|
||||
lib.pipe payload [
|
||||
lib.strings.escapeShellArg
|
||||
(payload: "addList ${payload}")
|
||||
]
|
||||
) payloads
|
||||
)}
|
||||
|
||||
# Run gravity.sh to load any new lists
|
||||
$pihole -g
|
||||
exit $any_failed
|
||||
''
|
||||
@@ -0,0 +1,128 @@
|
||||
# pihole-FTL {#module-services-networking-pihole-ftl}
|
||||
|
||||
*Upstream documentation*: <https://docs.pi-hole.net/ftldns/>
|
||||
|
||||
pihole-FTL is a fork of [Dnsmasq](index.html#module-services-networking-dnsmasq),
|
||||
providing some additional features, including an API for analysis and
|
||||
statistics.
|
||||
|
||||
Note that pihole-FTL and Dnsmasq cannot be enabled at
|
||||
the same time.
|
||||
|
||||
## Configuration {#module-services-networking-pihole-ftl-configuration}
|
||||
|
||||
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`.
|
||||
|
||||
The template pihole.toml is provided in `pihole-ftl.passthru.settingsTemplate`,
|
||||
which describes all settings.
|
||||
|
||||
Example configuration:
|
||||
|
||||
```nix
|
||||
{
|
||||
services.pihole-ftl = {
|
||||
enable = true;
|
||||
openFirewallDHCP = true;
|
||||
queryLogDeleter.enable = true;
|
||||
lists = [
|
||||
{
|
||||
url = "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts";
|
||||
# Alternatively, use the file from nixpkgs. Note its contents won't be
|
||||
# automatically updated by Pi-hole, as it would with an online URL.
|
||||
# url = "file://${pkgs.stevenblack-blocklist}/hosts";
|
||||
description = "Steven Black's unified adlist";
|
||||
}
|
||||
];
|
||||
settings = {
|
||||
dns = {
|
||||
domainNeeded = true;
|
||||
expandHosts = true;
|
||||
interface = "br-lan";
|
||||
listeningMode = "BIND";
|
||||
upstreams = [ "127.0.0.1#5053" ];
|
||||
};
|
||||
dhcp = {
|
||||
active = true;
|
||||
router = "192.168.10.1";
|
||||
start = "192.168.10.2";
|
||||
end = "192.168.10.254";
|
||||
leaseTime = "1d";
|
||||
ipv6 = true;
|
||||
multiDNS = true;
|
||||
hosts = [
|
||||
# Static address for the current host
|
||||
"aa:bb:cc:dd:ee:ff,192.168.10.1,${config.networking.hostName},infinite"
|
||||
];
|
||||
rapidCommit = true;
|
||||
};
|
||||
misc.dnsmasq_lines = [
|
||||
# This DHCP server is the only one on the network
|
||||
"dhcp-authoritative"
|
||||
# Source: https://data.iana.org/root-anchors/root-anchors.xml
|
||||
"trust-anchor=.,38696,8,2,683D2D0ACB8C9B712A1948B27F741219298D0A450D612C483AF444A4C0FB2B16"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Inheriting configuration from Dnsmasq {#module-services-networking-pihole-ftl-configuration-inherit-dnsmasq}
|
||||
|
||||
If [{option}`services.pihole-ftl.useDnsmasqConfig`](options.html#opt-services.pihole-ftl.useDnsmasqConfig) is enabled, the configuration [options of the Dnsmasq
|
||||
module](index.html#module-services-networking-dnsmasq) will be automatically
|
||||
used by pihole-FTL. Note that this may cause duplicate option errors
|
||||
depending on pihole-FTL settings.
|
||||
|
||||
See the [Dnsmasq
|
||||
example](index.html#module-services-networking-dnsmasq-configuration-home) for
|
||||
an exemplar Dnsmasq configuration. Make sure to set
|
||||
[{option}`services.dnsmasq.enable`](options.html#opt-services.dnsmasq.enable) to false and
|
||||
[{option}`services.pihole-ftl.enable`](options.html#opt-services.pihole-ftl.enable) to true instead:
|
||||
|
||||
```nix
|
||||
{
|
||||
services.pihole-ftl = {
|
||||
enable = true;
|
||||
useDnsmasqConfig = true;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Serving on multiple interfaces {#module-services-networking-pihole-ftl-configuration-multiple-interfaces}
|
||||
|
||||
Pi-hole's configuration only supports specifying a single interface. If you want
|
||||
to configure additional interfaces with different configuration, use
|
||||
`misc.dnsmasq_lines` to append extra Dnsmasq options.
|
||||
|
||||
```nix
|
||||
{
|
||||
services.pihole-ftl = {
|
||||
settings.misc.dnsmasq_lines = [
|
||||
# Specify the secondary interface
|
||||
"interface=enp1s0"
|
||||
# A different device is the router on this network, e.g. the one
|
||||
# provided by your ISP
|
||||
"dhcp-option=enp1s0,option:router,192.168.0.1"
|
||||
# Specify the IPv4 ranges to allocate, with a 1-day lease time
|
||||
"dhcp-range=enp1s0,192.168.0.10,192.168.0.253,1d"
|
||||
# Enable IPv6
|
||||
"dhcp-range=::f,::ff,constructor:enp1s0,ra-names,ra-stateless"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Administration {#module-services-networking-pihole-ftl-administration}
|
||||
|
||||
*pihole command documentation*: <https://docs.pi-hole.net/main/pihole-command>
|
||||
|
||||
Enabling pihole-FTL provides the `pihole` command, which can be used to control
|
||||
the daemon and some configuration.
|
||||
|
||||
Note that in NixOS the script has been patched to remove the reinstallation,
|
||||
update, and Dnsmasq configuration commands. In NixOS, Pi-hole's configuration is
|
||||
immutable and must be done with NixOS options.
|
||||
|
||||
For more convenient administration and monitoring, see [Pi-hole
|
||||
Dashboard](#module-services-web-apps-pihole-web)
|
||||
@@ -0,0 +1,483 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
with {
|
||||
inherit (lib)
|
||||
elemAt
|
||||
getExe
|
||||
hasAttrByPath
|
||||
mkEnableOption
|
||||
mkIf
|
||||
mkOption
|
||||
strings
|
||||
types
|
||||
;
|
||||
};
|
||||
|
||||
let
|
||||
mkDefaults = lib.mapAttrsRecursive (n: v: lib.mkDefault v);
|
||||
|
||||
cfg = config.services.pihole-ftl;
|
||||
|
||||
piholeScript = pkgs.writeScriptBin "pihole" ''
|
||||
sudo=exec
|
||||
if [[ "$USER" != '${cfg.user}' ]]; then
|
||||
sudo='exec /run/wrappers/bin/sudo -u ${cfg.user}'
|
||||
fi
|
||||
$sudo ${getExe cfg.piholePackage} "$@"
|
||||
'';
|
||||
|
||||
settingsFormat = pkgs.formats.toml { };
|
||||
settingsFile = settingsFormat.generate "pihole.toml" cfg.settings;
|
||||
in
|
||||
{
|
||||
options.services.pihole-ftl = {
|
||||
enable = mkEnableOption "Pi-hole FTL";
|
||||
|
||||
package = lib.mkPackageOption pkgs "pihole-ftl" { };
|
||||
piholePackage = lib.mkPackageOption pkgs "pihole" { };
|
||||
|
||||
privacyLevel = mkOption {
|
||||
type = types.numbers.between 0 3;
|
||||
description = ''
|
||||
Level of detail in generated statistics. 0 enables full statistics, 3
|
||||
shows only anonymous statistics.
|
||||
|
||||
See [the documentation](https://docs.pi-hole.net/ftldns/privacylevels).
|
||||
|
||||
Also see services.dnsmasq.settings.log-queries to completely disable
|
||||
query logging.
|
||||
'';
|
||||
default = 0;
|
||||
example = "3";
|
||||
};
|
||||
|
||||
openFirewallDHCP = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Open ports in the firewall for pihole-FTL's DHCP server.";
|
||||
};
|
||||
|
||||
openFirewallWebserver = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Open ports in the firewall for pihole-FTL's webserver, as configured in `settings.webserver.port`.
|
||||
'';
|
||||
};
|
||||
|
||||
configDirectory = mkOption {
|
||||
type = types.path;
|
||||
default = "/etc/pihole";
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
description = ''
|
||||
Path for pihole configuration.
|
||||
pihole does not currently support any path other than /etc/pihole.
|
||||
'';
|
||||
};
|
||||
|
||||
stateDirectory = mkOption {
|
||||
type = types.path;
|
||||
default = "/var/lib/pihole";
|
||||
description = ''
|
||||
Path for pihole state files.
|
||||
'';
|
||||
};
|
||||
|
||||
logDirectory = mkOption {
|
||||
type = types.path;
|
||||
default = "/var/log/pihole";
|
||||
description = "Path for Pi-hole log files";
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
type = settingsFormat.type;
|
||||
description = ''
|
||||
Configuration options for pihole.toml.
|
||||
See the upstream [documentation](https://docs.pi-hole.net/ftldns/configfile).
|
||||
'';
|
||||
};
|
||||
|
||||
useDnsmasqConfig = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Import options defined in [](#opt-services.dnsmasq.settings) via
|
||||
misc.dnsmasq_lines in Pi-hole's config.
|
||||
'';
|
||||
};
|
||||
|
||||
pihole = mkOption {
|
||||
type = types.package;
|
||||
default = piholeScript;
|
||||
internal = true;
|
||||
description = "Pi-hole admin script";
|
||||
};
|
||||
|
||||
lists =
|
||||
let
|
||||
adlistType = types.submodule {
|
||||
options = {
|
||||
url = mkOption {
|
||||
type = types.str;
|
||||
description = "URL of the domain list";
|
||||
};
|
||||
type = mkOption {
|
||||
type = types.enum [
|
||||
"allow"
|
||||
"block"
|
||||
];
|
||||
default = "block";
|
||||
description = "Whether domains on this list should be explicitly allowed, or blocked";
|
||||
};
|
||||
enabled = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Whether this list is enabled";
|
||||
};
|
||||
description = mkOption {
|
||||
type = types.str;
|
||||
description = "Description of the list";
|
||||
default = "";
|
||||
};
|
||||
};
|
||||
};
|
||||
in
|
||||
mkOption {
|
||||
type = with types; listOf adlistType;
|
||||
description = "Deny (or allow) domain lists to use";
|
||||
default = [ ];
|
||||
example = [
|
||||
{
|
||||
url = "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "pihole";
|
||||
description = "User to run the service as.";
|
||||
};
|
||||
|
||||
group = mkOption {
|
||||
type = types.str;
|
||||
default = "pihole";
|
||||
description = "Group to run the service as.";
|
||||
};
|
||||
|
||||
queryLogDeleter = {
|
||||
enable = mkEnableOption ("Pi-hole FTL DNS query log deleter");
|
||||
|
||||
age = mkOption {
|
||||
type = types.int;
|
||||
default = 90;
|
||||
description = ''
|
||||
Delete DNS query logs older than this many days, if
|
||||
[](#opt-services.pihole-ftl.queryLogDeleter.enable) is on.
|
||||
'';
|
||||
};
|
||||
|
||||
interval = mkOption {
|
||||
type = types.str;
|
||||
default = "weekly";
|
||||
description = ''
|
||||
How often the query log deleter is run. See systemd.time(7) for more
|
||||
information about the format.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = !config.services.dnsmasq.enable;
|
||||
message = "pihole-ftl conflicts with dnsmasq. Please disable one of them.";
|
||||
}
|
||||
|
||||
{
|
||||
assertion =
|
||||
builtins.length cfg.lists == 0
|
||||
|| (
|
||||
(hasAttrByPath [ "webserver" "port" ] cfg.settings)
|
||||
&& !builtins.elem cfg.settings.webserver.port [
|
||||
""
|
||||
null
|
||||
]
|
||||
);
|
||||
message = ''
|
||||
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.
|
||||
services.pihole-ftl.settings.port must be defined, e.g. by enabling services.pihole-web.enable and defining services.pihole-web.port.
|
||||
'';
|
||||
}
|
||||
|
||||
{
|
||||
assertion =
|
||||
builtins.length cfg.lists == 0
|
||||
|| !(hasAttrByPath [ "webserver" "api" "cli_pw" ] cfg.settings)
|
||||
|| cfg.settings.webserver.api.cli_pw == true;
|
||||
message = ''
|
||||
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.
|
||||
This enables an ephemeral password used by the pihole command.
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
services.pihole-ftl.settings = lib.mkMerge [
|
||||
# Defaults
|
||||
(mkDefaults {
|
||||
misc.readOnly = true; # Prevent config changes via API or CLI by default
|
||||
webserver.port = ""; # Disable the webserver by default
|
||||
misc.privacyLevel = cfg.privacyLevel;
|
||||
})
|
||||
|
||||
# Move state files to cfg.stateDirectory
|
||||
{
|
||||
# TODO: Pi-hole currently hardcodes dhcp-leasefile this in its
|
||||
# generated dnsmasq.conf, and we can't override it
|
||||
misc.dnsmasq_lines = [
|
||||
# "dhcp-leasefile=${cfg.stateDirectory}/dhcp.leases"
|
||||
# "hostsdir=${cfg.stateDirectory}/hosts"
|
||||
];
|
||||
|
||||
files = {
|
||||
database = "${cfg.stateDirectory}/pihole-FTL.db";
|
||||
gravity = "${cfg.stateDirectory}/gravity.db";
|
||||
macvendor = "${cfg.stateDirectory}/gravity.db";
|
||||
log.ftl = "${cfg.logDirectory}/FTL.log";
|
||||
log.dnsmasq = "${cfg.logDirectory}/pihole.log";
|
||||
log.webserver = "${cfg.logDirectory}/webserver.log";
|
||||
};
|
||||
|
||||
webserver.tls = "${cfg.stateDirectory}/tls.pem";
|
||||
}
|
||||
|
||||
(lib.optionalAttrs cfg.useDnsmasqConfig {
|
||||
misc.dnsmasq_lines = lib.pipe config.services.dnsmasq.configFile [
|
||||
builtins.readFile
|
||||
(lib.strings.splitString "\n")
|
||||
(builtins.filter (s: s != ""))
|
||||
];
|
||||
})
|
||||
];
|
||||
|
||||
systemd.tmpfiles.rules = [
|
||||
"d ${cfg.configDirectory} 0700 ${cfg.user} ${cfg.group} - -"
|
||||
"d ${cfg.stateDirectory} 0700 ${cfg.user} ${cfg.group} - -"
|
||||
"d ${cfg.logDirectory} 0700 ${cfg.user} ${cfg.group} - -"
|
||||
];
|
||||
|
||||
systemd.services = {
|
||||
pihole-ftl =
|
||||
let
|
||||
setupService = config.systemd.services.pihole-ftl-setup.name;
|
||||
in
|
||||
{
|
||||
description = "Pi-hole FTL";
|
||||
|
||||
after = [ "network.target" ];
|
||||
before = [ setupService ];
|
||||
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ setupService ];
|
||||
|
||||
environment = {
|
||||
# Currently unused, but allows the service to be reloaded
|
||||
# automatically when the config is changed.
|
||||
PIHOLE_CONFIG = settingsFile;
|
||||
|
||||
# pihole is executed by the /actions/gravity API endpoint
|
||||
PATH = lib.mkForce (
|
||||
lib.makeBinPath [
|
||||
cfg.piholePackage
|
||||
]
|
||||
);
|
||||
};
|
||||
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
AmbientCapabilities = [
|
||||
"CAP_NET_BIND_SERVICE"
|
||||
"CAP_NET_RAW"
|
||||
"CAP_NET_ADMIN"
|
||||
"CAP_SYS_NICE"
|
||||
"CAP_IPC_LOCK"
|
||||
"CAP_CHOWN"
|
||||
"CAP_SYS_TIME"
|
||||
];
|
||||
ExecStart = "${getExe cfg.package} no-daemon";
|
||||
Restart = "on-failure";
|
||||
RestartSec = 1;
|
||||
# Hardening
|
||||
NoNewPrivileges = true;
|
||||
PrivateTmp = true;
|
||||
PrivateDevices = true;
|
||||
DevicePolicy = "closed";
|
||||
ProtectSystem = "strict";
|
||||
ProtectHome = "read-only";
|
||||
ProtectControlGroups = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ReadWritePaths = [
|
||||
cfg.configDirectory
|
||||
cfg.stateDirectory
|
||||
cfg.logDirectory
|
||||
];
|
||||
RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK";
|
||||
RestrictNamespaces = true;
|
||||
RestrictRealtime = true;
|
||||
RestrictSUIDSGID = true;
|
||||
MemoryDenyWriteExecute = true;
|
||||
LockPersonality = true;
|
||||
};
|
||||
};
|
||||
|
||||
pihole-ftl-setup = {
|
||||
description = "Pi-hole FTL setup";
|
||||
# Wait for network so lists can be downloaded
|
||||
after = [ "network-online.target" ];
|
||||
requires = [ "network-online.target" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
|
||||
# Hardening
|
||||
NoNewPrivileges = true;
|
||||
PrivateTmp = true;
|
||||
PrivateDevices = true;
|
||||
DevicePolicy = "closed";
|
||||
ProtectSystem = "strict";
|
||||
ProtectHome = "read-only";
|
||||
ProtectControlGroups = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ReadWritePaths = [
|
||||
cfg.configDirectory
|
||||
cfg.stateDirectory
|
||||
cfg.logDirectory
|
||||
];
|
||||
RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK";
|
||||
RestrictNamespaces = true;
|
||||
RestrictRealtime = true;
|
||||
RestrictSUIDSGID = true;
|
||||
MemoryDenyWriteExecute = true;
|
||||
LockPersonality = true;
|
||||
};
|
||||
script = import ./pihole-ftl-setup-script.nix {
|
||||
inherit
|
||||
cfg
|
||||
config
|
||||
lib
|
||||
pkgs
|
||||
;
|
||||
};
|
||||
};
|
||||
|
||||
pihole-ftl-log-deleter = mkIf cfg.queryLogDeleter.enable {
|
||||
description = "Pi-hole FTL DNS query log deleter";
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
# Hardening
|
||||
NoNewPrivileges = true;
|
||||
PrivateTmp = true;
|
||||
PrivateDevices = true;
|
||||
DevicePolicy = "closed";
|
||||
ProtectSystem = "strict";
|
||||
ProtectHome = "read-only";
|
||||
ProtectControlGroups = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ReadWritePaths = [ cfg.stateDirectory ];
|
||||
RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK";
|
||||
RestrictNamespaces = true;
|
||||
RestrictRealtime = true;
|
||||
RestrictSUIDSGID = true;
|
||||
MemoryDenyWriteExecute = true;
|
||||
LockPersonality = true;
|
||||
};
|
||||
script =
|
||||
let
|
||||
days = toString cfg.queryLogDeleter.age;
|
||||
database = "${cfg.stateDirectory}/pihole-FTL.db";
|
||||
in
|
||||
''
|
||||
set -euo pipefail
|
||||
|
||||
echo "Deleting query logs older than ${days} days"
|
||||
${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"
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
systemd.timers.pihole-ftl-log-deleter = mkIf cfg.queryLogDeleter.enable {
|
||||
description = "Pi-hole FTL DNS query log deleter";
|
||||
before = [
|
||||
config.systemd.services.pihole-ftl.name
|
||||
config.systemd.services.pihole-ftl-setup.name
|
||||
];
|
||||
wantedBy = [ "timers.target" ];
|
||||
timerConfig = {
|
||||
OnCalendar = cfg.queryLogDeleter.interval;
|
||||
Unit = "pihole-ftl-log-deleter.service";
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall = lib.mkMerge [
|
||||
(mkIf cfg.openFirewallDHCP {
|
||||
allowedUDPPorts = [ 53 ];
|
||||
allowedTCPPorts = [ 53 ];
|
||||
})
|
||||
|
||||
(mkIf cfg.openFirewallWebserver {
|
||||
allowedTCPPorts = lib.pipe cfg.settings.webserver.port [
|
||||
(lib.splitString ",")
|
||||
(map (
|
||||
port:
|
||||
lib.pipe port [
|
||||
(builtins.split "[[:alpha:]]+")
|
||||
builtins.head
|
||||
lib.toInt
|
||||
]
|
||||
))
|
||||
];
|
||||
})
|
||||
];
|
||||
|
||||
users.users.${cfg.user} = {
|
||||
group = cfg.group;
|
||||
isSystemUser = true;
|
||||
};
|
||||
|
||||
users.groups.${cfg.group} = { };
|
||||
|
||||
environment.etc."pihole/pihole.toml" = {
|
||||
source = settingsFile;
|
||||
user = cfg.user;
|
||||
group = cfg.group;
|
||||
mode = "400";
|
||||
};
|
||||
|
||||
environment.systemPackages = [ cfg.pihole ];
|
||||
|
||||
services.logrotate.settings.pihole-ftl = {
|
||||
enable = true;
|
||||
files = [ "${cfg.logDirectory}/FTL.log" ];
|
||||
};
|
||||
};
|
||||
|
||||
meta = {
|
||||
doc = ./pihole-ftl.md;
|
||||
maintainers = with lib.maintainers; [ williamvds ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
# Pi-hole Web Dashboard {#module-services-web-apps-pihole-web}
|
||||
|
||||
The Pi-hole suite provides a web GUI for controlling and monitoring
|
||||
[pihole-FTL](index.html#module-services-networking-pihole-ftl).
|
||||
|
||||
## Configuration {#module-services-web-apps-pihole-web-configuration}
|
||||
|
||||
Example configuration:
|
||||
|
||||
```nix
|
||||
{
|
||||
services.pihole-web = {
|
||||
enable = true;
|
||||
ports = [ 80 ];
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
The dashboard can be configured using [{option}`services.pihole-ftl.settings`](options.html#opt-services.pihole-ftl.settings), in particular the `webserver` subsection.
|
||||
@@ -0,0 +1,104 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
cfg = config.services.pihole-web;
|
||||
in
|
||||
{
|
||||
options.services.pihole-web = {
|
||||
enable = lib.mkEnableOption "Pi-hole dashboard";
|
||||
|
||||
package = lib.mkPackageOption pkgs "pihole-web" { };
|
||||
|
||||
hostName = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = "Domain name for the website.";
|
||||
default = "pi.hole";
|
||||
};
|
||||
|
||||
ports =
|
||||
let
|
||||
portType = lib.types.submodule {
|
||||
options = {
|
||||
port = lib.mkOption {
|
||||
type = lib.types.port;
|
||||
description = "Port to bind";
|
||||
};
|
||||
optional = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Skip the port if it cannot be bound";
|
||||
};
|
||||
redirectSSL = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Redirect from this port to the first configured SSL port";
|
||||
};
|
||||
ssl = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Serve SSL on the port";
|
||||
};
|
||||
};
|
||||
};
|
||||
in
|
||||
lib.mkOption {
|
||||
type = lib.types.listOf (
|
||||
lib.types.oneOf [
|
||||
lib.types.port
|
||||
lib.types.str
|
||||
portType
|
||||
]
|
||||
);
|
||||
description = ''
|
||||
Port(s) for the webserver to serve on.
|
||||
|
||||
If provided as a string, optionally append suffixes to control behaviour:
|
||||
|
||||
- `o`: to make the port is optional - failure to bind will not be an error.
|
||||
- `s`: for the port to be used for SSL.
|
||||
- `r`: for a non-SSL port to redirect to the first available SSL port.
|
||||
'';
|
||||
example = [
|
||||
"80r"
|
||||
"443s"
|
||||
];
|
||||
apply =
|
||||
values:
|
||||
let
|
||||
convert =
|
||||
value:
|
||||
if (builtins.typeOf) value == "int" then
|
||||
toString value
|
||||
else if builtins.typeOf value == "set" then
|
||||
lib.strings.concatStrings [
|
||||
(toString value.port)
|
||||
(lib.optionalString value.optional "o")
|
||||
(lib.optionalString value.redirectSSL "r")
|
||||
(lib.optionalString value.ssl "s")
|
||||
]
|
||||
else
|
||||
value;
|
||||
in
|
||||
lib.strings.concatStringsSep "," (map convert values);
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.pihole-ftl.settings.webserver = {
|
||||
domain = cfg.hostName;
|
||||
port = cfg.ports;
|
||||
paths.webroot = "${cfg.package}/share/";
|
||||
paths.webhome = "/";
|
||||
};
|
||||
};
|
||||
|
||||
meta = {
|
||||
doc = ./pihole-web.md;
|
||||
maintainers = with lib.maintainers; [ williamvds ];
|
||||
};
|
||||
}
|
||||
+12
-19
@@ -53,45 +53,38 @@ let
|
||||
driver = Firefox(options=options)
|
||||
|
||||
driver.implicitly_wait(20)
|
||||
driver.get('http://localhost:8080/#/register')
|
||||
driver.get('http://localhost:8080/#/signup')
|
||||
|
||||
wait = WebDriverWait(driver, 10)
|
||||
|
||||
wait.until(EC.title_contains("Vaultwarden Web"))
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, 'input#register-form_input_email').send_keys(
|
||||
driver.find_element(By.CSS_SELECTOR, 'input#register-start_form_input_email').send_keys(
|
||||
'${userEmail}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, 'input#register-form_input_name').send_keys(
|
||||
driver.find_element(By.CSS_SELECTOR, 'input#register-start_form_input_name').send_keys(
|
||||
'A Cat'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, 'input#register-form_input_master-password').send_keys(
|
||||
driver.find_element(By.XPATH, "//button[contains(., 'Continue')]").click()
|
||||
driver.find_element(By.CSS_SELECTOR, 'input#input-password-form_new-password').send_keys(
|
||||
'${userPassword}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, 'input#register-form_input_confirm-master-password').send_keys(
|
||||
driver.find_element(By.CSS_SELECTOR, 'input#input-password-form_confirm-new-password').send_keys(
|
||||
'${userPassword}'
|
||||
)
|
||||
if driver.find_element(By.CSS_SELECTOR, 'input#checkForBreaches').is_selected():
|
||||
driver.find_element(By.CSS_SELECTOR, 'input#checkForBreaches').click()
|
||||
if driver.find_element(By.XPATH, '//input[@formcontrolname="checkForBreaches"]').is_selected():
|
||||
driver.find_element(By.XPATH, '//input[@formcontrolname="checkForBreaches"]').click()
|
||||
|
||||
driver.find_element(By.XPATH, "//button[contains(., 'Create account')]").click()
|
||||
|
||||
wait.until_not(EC.title_contains("Create account"))
|
||||
wait.until_not(EC.title_contains("Set a strong password"))
|
||||
|
||||
driver.find_element(By.XPATH, "//button[contains(., 'Continue')]").click()
|
||||
click_when_unobstructed((By.XPATH, "//button[contains(., 'New item')]"))
|
||||
|
||||
driver.find_element(By.XPATH, '//input[@type="password"]').send_keys(
|
||||
'${userPassword}'
|
||||
)
|
||||
driver.find_element(By.XPATH, "//button[contains(., 'Log in with master password')]").click()
|
||||
|
||||
click_when_unobstructed((By.CSS_SELECTOR, 'button#newItemDropdown'))
|
||||
driver.find_element(By.XPATH, "//button[contains(., 'Item')]").click()
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, 'input#name').send_keys(
|
||||
driver.find_element(By.XPATH, '//input[@formcontrolname="name"]').send_keys(
|
||||
'secrets'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, 'input#loginPassword').send_keys(
|
||||
driver.find_element(By.XPATH, '//input[@formcontrolname="password"]').send_keys(
|
||||
'${storedPassword}'
|
||||
)
|
||||
|
||||
|
||||
@@ -26,11 +26,11 @@ let
|
||||
|
||||
hash =
|
||||
{
|
||||
x86_64-linux = "sha256-6/ECgQbl7r4KI66BApOijIdJJP4nlDEgRE1JEMJcSDk=";
|
||||
x86_64-darwin = "sha256-t68Wkwo6p/S0hTf8BiR95nHC4qOLVtBkU0u3dco+jEc=";
|
||||
aarch64-linux = "sha256-KJ74qd0xOQV9EkoIdWGLCr57ZYJ9U0F2zyW6y9zWSY4=";
|
||||
aarch64-darwin = "sha256-CPPIYDxDiF07SdRaOe2Cp8fl4YvbVPeaVqobo0PZyrY=";
|
||||
armv7l-linux = "sha256-ob2Xlgvsk6KFo9stlmuGTPPRyXQpBUACuq5q48haGxs=";
|
||||
x86_64-linux = "sha256-4zLMqwIFMfeZBuHDmaORx+BK9vqxe0SMwSKUyqVYtb8=";
|
||||
x86_64-darwin = "sha256-RzvRknMzZPdM2sd/nRIYSWN7TUJ/uBl3NL4H3+ckAUI=";
|
||||
aarch64-linux = "sha256-rfsfgWmX24783VM9srcCZHNIeCSV1I9J7NoFjtXqdBc=";
|
||||
aarch64-darwin = "sha256-3fcO8Wy0703j4y2TCe6O5tSuAMSW3kLzxrZ5ztgN9r8=";
|
||||
armv7l-linux = "sha256-7Qk0V7sZeBohqCp1ciEtccGj073ZYXvvLsxMZ40ZqFg=";
|
||||
}
|
||||
.${system} or throwSystem;
|
||||
|
||||
@@ -41,7 +41,7 @@ callPackage ./generic.nix rec {
|
||||
|
||||
# Please backport all compatible updates to the stable release.
|
||||
# This is important for the extension ecosystem.
|
||||
version = "1.100.23258";
|
||||
version = "1.100.33714";
|
||||
pname = "vscodium";
|
||||
|
||||
executableName = "codium";
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -10,11 +10,11 @@
|
||||
buildMozillaMach rec {
|
||||
pname = "firefox-beta";
|
||||
binaryName = pname;
|
||||
version = "140.0b3";
|
||||
version = "140.0b4";
|
||||
applicationName = "Firefox Beta";
|
||||
src = fetchurl {
|
||||
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
|
||||
sha512 = "282b30284e9efa3909e1c1e8b01fd3c8ce5083668a01dea53487aa00d89734889e033051de3ce9aa66d7a84f4d4ac1c6e558fa4e3efe1e51077fc0831e989129";
|
||||
sha512 = "ec3d3377db8629742d428cceded3c7c92ba952f1b9cb6a15eae7f053213c3a377287a577c33b291a5e4d3cbbf918be52a31c3f4ac5f6d06c1f5edfc6312656fe";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
buildMozillaMach rec {
|
||||
pname = "firefox-devedition";
|
||||
binaryName = pname;
|
||||
version = "140.0b3";
|
||||
version = "140.0b4";
|
||||
applicationName = "Firefox Developer Edition";
|
||||
requireSigning = false;
|
||||
branding = "browser/branding/aurora";
|
||||
src = fetchurl {
|
||||
url = "mirror://mozilla/devedition/releases/${version}/source/firefox-${version}.source.tar.xz";
|
||||
sha512 = "f7e2382ba9ad9a6fbea4a99ab541a4b70dcc4dd78d52230f5e600e9812eb796c890d424805b9c4d2ad7c981e3e509d654e9ae4e4c79c6a50880388e1b4c83bbe";
|
||||
sha512 = "bc71e5183b7f527f006b82ba729cb9556a0c756059025392d31ace1e3e49c0a48f5f7c8b64615353c7ae72ab67eb77212f3b573ea06a278f806328093d1424a4";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
stdenv,
|
||||
lib,
|
||||
fetchurl,
|
||||
dpkg,
|
||||
squashfsTools,
|
||||
autoPatchelfHook,
|
||||
copyDesktopItems,
|
||||
pango,
|
||||
@@ -22,14 +22,12 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "bluemail";
|
||||
version = "1.140.8-1922";
|
||||
version = "1.140.93";
|
||||
|
||||
# Taking a snapshot of the DEB release because there are no tagged version releases.
|
||||
# For new versions, download the upstream release, extract it and check for the version string.
|
||||
# In case there's a new version, create a snapshot of it on https://archive.org before updating it here.
|
||||
# To update, check https://search.apps.ubuntu.com/api/v1/package/bluemail and copy the anon_download_url and version.
|
||||
src = fetchurl {
|
||||
url = "https://web.archive.org/web/20240208120704/https://download.bluemail.me/BlueMail/deb/BlueMail.deb";
|
||||
hash = "sha256-dnYOb3Q/9vSDssHGS2ywC/Q24Oq96/mvKF+eqd/4dVw=";
|
||||
url = "https://api.snapcraft.io/api/v1/snaps/download/ZVlj0qw0GOFd5JgTfL8kk2Y5eIG1IpiH_178.snap";
|
||||
hash = "sha512-xv7fn+VrtrxauejhgEMdTnmnDXb17TwanXZR6Lqfg5N40MbyDu76XQAWRB8xFU/+GdCTmjv47EaOC7SnnOw4EA==";
|
||||
};
|
||||
|
||||
desktopItems = [
|
||||
@@ -43,6 +41,7 @@ stdenv.mkDerivation rec {
|
||||
mimeTypes = [
|
||||
"x-scheme-handler/me.blueone.linux"
|
||||
"x-scheme-handler/mailto"
|
||||
"x-scheme-handler/bluemail-notif"
|
||||
];
|
||||
categories = [ "Office" ];
|
||||
})
|
||||
@@ -52,10 +51,24 @@ stdenv.mkDerivation rec {
|
||||
autoPatchelfHook
|
||||
copyDesktopItems
|
||||
makeWrapper
|
||||
dpkg
|
||||
squashfsTools
|
||||
wrapGAppsHook3
|
||||
];
|
||||
|
||||
unpackPhase = ''
|
||||
runHook preUnpack
|
||||
|
||||
unsquashfs $src
|
||||
|
||||
runHook postUnpack
|
||||
'';
|
||||
|
||||
sourceRoot = "squashfs-root";
|
||||
|
||||
postPatch = ''
|
||||
rm -rf usr libEGL.so libGLESv2.so libvk_swiftshader.so libvulkan.so.1
|
||||
'';
|
||||
|
||||
buildInputs = [
|
||||
pango
|
||||
gtk3
|
||||
@@ -75,12 +88,12 @@ stdenv.mkDerivation rec {
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/bin
|
||||
mv opt/BlueMail/* $out
|
||||
ln -s $out/bluemail $out/bin/bluemail
|
||||
mkdir -p $out/{bin,opt/bluemail}
|
||||
mv * $out/opt/bluemail
|
||||
ln -s $out/opt/bluemail/bluemail $out/bin/bluemail
|
||||
|
||||
mkdir -p $out/share/icons
|
||||
mv usr/share/icons/hicolor $out/share/icons/
|
||||
mkdir -p $out/share/icons/hicolor/1024x1024/apps
|
||||
ln -s $out/opt/bluemail/resources/assets/icons/bluemailx-icon.png $out/share/icons/hicolor/1024x1024/apps/bluemail.png
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
@@ -97,17 +110,19 @@ stdenv.mkDerivation rec {
|
||||
];
|
||||
|
||||
preFixup = ''
|
||||
wrapProgram $out/bin/bluemail \
|
||||
wrapProgram $out/opt/bluemail/bluemail \
|
||||
''${makeWrapperArgs[@]} \
|
||||
''${gappsWrapperArgs[@]}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Free, secure, universal email app, capable of managing an unlimited number of mail accounts";
|
||||
description = "Cross platform email and calendar app, with AI features and a modern design";
|
||||
homepage = "https://bluemail.me";
|
||||
license = licenses.unfree;
|
||||
platforms = platforms.linux;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
# Vendored copy of Electron.
|
||||
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
||||
maintainers = with maintainers; [ onny ];
|
||||
maintainers = with maintainers; [ ];
|
||||
mainProgram = "bluemail";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -3,24 +3,24 @@
|
||||
|
||||
let
|
||||
pname = "brave";
|
||||
version = "1.79.118";
|
||||
version = "1.79.119";
|
||||
|
||||
allArchives = {
|
||||
aarch64-linux = {
|
||||
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_arm64.deb";
|
||||
hash = "sha256-OI4B6Uu9TtbV58Eq3854cyC57JZ+j7tBZoDk+zHeeWM=";
|
||||
hash = "sha256-tz3pCToOqsO6SAu5NeUSmO0aRe31qw0sK2OxtkrYGlo=";
|
||||
};
|
||||
x86_64-linux = {
|
||||
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_amd64.deb";
|
||||
hash = "sha256-4lWsD9OfbgOaallAEc8x3zLSFoBAg4UCjBCiDc7ShDs=";
|
||||
hash = "sha256-8uX8byw/rp+yj6Y2qBemEHGwt4CQepWjVD8F9KuJZbI=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-v${version}-darwin-arm64.zip";
|
||||
hash = "sha256-5yOcEerPleZnRynxMAzeiPPmZAfU6O+wqsBfR+NOvUc=";
|
||||
hash = "sha256-ynLMWSWywJbmURBH60Nf7TJFERPNNzcI/wdW8AFk7ZA=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-v${version}-darwin-x64.zip";
|
||||
hash = "sha256-3q0vV9cAk8TEWluGYyH3FSw4zKHxl2Dn3eCg2pSs3zU=";
|
||||
hash = "sha256-ERhKzzabN3NiJQMaTLxdtHCbPMDbPifG56aBmAgke5o=";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
lib,
|
||||
buildGoModule,
|
||||
fetchFromGitHub,
|
||||
}:
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "buttplug-mcp";
|
||||
version = "0.0.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ConAcademy";
|
||||
repo = "buttplug-mcp";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-C4ZPTO+Gh6g19BrqHugSCF74aAZ888XRTk1AzNpEBok=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-EoLv7HpdAyEM83m/DTgu9jMh0Nn+v8b2buIavQFJbnY=";
|
||||
|
||||
ldflags = [
|
||||
"-s"
|
||||
"-w"
|
||||
"-X main.version=${finalAttrs.version}"
|
||||
];
|
||||
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
||||
meta = {
|
||||
description = "Buttplug.io Model Context Protocol (MCP) Server";
|
||||
homepage = "https://github.com/ConAcademy/buttplug-mcp";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ pilz ];
|
||||
mainProgram = "buttplug-mcp";
|
||||
};
|
||||
})
|
||||
@@ -8,17 +8,17 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "cargo-component";
|
||||
version = "0.20.0";
|
||||
version = "0.21.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bytecodealliance";
|
||||
repo = "cargo-component";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-pW3hhcsMzKSWmUX8HwAtZCB+v9B4qXw6WUGODhPtW+Q=";
|
||||
hash = "sha256-Tlx14q/2k/0jZZ1nECX7zF/xNTeMCZg/fN+fhRM4uhc=";
|
||||
};
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-Vnef3ApklZtN417dXhA+YWcsAeSTDSt6wA+7SjBKHm0=";
|
||||
cargoHash = "sha256-ZwxVhoqAzkaIgcH9GMR+IGkJ6IOQVtmt0qcDjdix6cU=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
|
||||
@@ -10,17 +10,17 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "cargo-udeps";
|
||||
version = "0.1.55";
|
||||
version = "0.1.56";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "est31";
|
||||
repo = "cargo-udeps";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-4/JfD2cH46it8PkU58buTHwFXBZI3sytyJCUWl+vSAE=";
|
||||
sha256 = "sha256-W9COzLyE7A/Yp88HTknSSa9WjufwHMgcmlsqwOYSSCw=";
|
||||
};
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-4fF5nW8G2XMvC2K2nW7fhZL9DvjW4/cZXSCJurSu9NE=";
|
||||
cargoHash = "sha256-ttIzCro9/oiF0ycRG/UzvgMT+3kXhkVAdkNCIVjIc2g=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
|
||||
@@ -7,16 +7,16 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "cirrus-cli";
|
||||
version = "0.144.0";
|
||||
version = "0.144.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cirruslabs";
|
||||
repo = "cirrus-cli";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-pbfLEoc9MF9Zo9P5D8R0WM/ZbzwhdIZhtcWR9tSKzX8=";
|
||||
hash = "sha256-xU1c7dDYCfzLao6TLQFSijwTnEz0afkcOQnlHeTgaVQ=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-PH28ZIubrJWk4qTrL9OSx/ylW1iEP0j0iq4uNg9d9ko=";
|
||||
vendorHash = "sha256-ZFvulF/glMq7Crp1d1lK602G34/anlT5yyyQQcgiuHg=";
|
||||
|
||||
ldflags = [
|
||||
"-X github.com/cirruslabs/cirrus-cli/internal/version.Version=v${version}"
|
||||
|
||||
@@ -7,16 +7,16 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "civo";
|
||||
version = "1.2.3";
|
||||
version = "1.3.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "civo";
|
||||
repo = "cli";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-NREiQA/zAxClwKZDq5SR43/AAT6HqdfR6/ud9Xhe5rM=";
|
||||
hash = "sha256-XK3FMgtAXOQYKa2il83blgdFhOdzbmP7VnIOijyDsK8=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-xSvq8ZrkdzRhfD2gPKSJkLnwVQuFuWnSYJ89iUDOpUU=";
|
||||
vendorHash = "sha256-fGAJUGYbPJ88Dnfi5XWXr2jd9hE6M8p2ZLq5ORMoyL0=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
||||
@@ -10,20 +10,19 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "countryfetch";
|
||||
version = "0.1.9";
|
||||
version = "0.2.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "nik-rev";
|
||||
repo = "countryfetch";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-KdFgY54vXLmq6IZfJzZ1IeZ2eQuNJoCRZUV3rVuPpcY=";
|
||||
hash = "sha256-povKd1Y/2Mi+6yJd9+RsJ4F19/wvXvBOK2Jgbs4UnP0=";
|
||||
};
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-XJI9k/5hdak8p0/J/x9u6lqJu/DIbX93Wwm3LALkAAw=";
|
||||
cargoHash = "sha256-0ZBhRheJGapPqVieXbIpoboVV4RLXan042u5SSgrYQk=";
|
||||
|
||||
env = {
|
||||
RUSTC_BOOTSTRAP = 1;
|
||||
OPENSSL_NO_VENDOR = true;
|
||||
};
|
||||
|
||||
|
||||
@@ -19,12 +19,12 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "dpkg";
|
||||
version = "1.22.11";
|
||||
version = "1.22.19";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://git.launchpad.net/ubuntu/+source/dpkg";
|
||||
rev = "applied/${version}";
|
||||
hash = "sha256-mKyS0lPTG3ROcw8AhB4IdjNjvZK2YTGV9pbpjz/OLAc=";
|
||||
hash = "sha256-lSuq5VqBj5yKusZaT50sOf82/wd2FeS4g2ILaZT0HPM=";
|
||||
};
|
||||
|
||||
configureFlags = [
|
||||
@@ -112,6 +112,7 @@ stdenv.mkDerivation rec {
|
||||
homepage = "https://wiki.debian.org/Teams/Dpkg";
|
||||
license = licenses.gpl2Plus;
|
||||
platforms = platforms.unix;
|
||||
broken = stdenv.hostPlatform.isDarwin;
|
||||
maintainers = with maintainers; [ siriobalmelli ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -34,11 +34,11 @@ buildGoModule rec {
|
||||
"-w"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Go-based tools for modifying UEFI firmware";
|
||||
homepage = "https://github.com/linuxboot/fiano";
|
||||
changelog = "https://github.com/linuxboot/fiano/blob/v${version}/RELEASES.md";
|
||||
license = licenses.bsd3;
|
||||
maintainers = [ maintainers.jmbaur ];
|
||||
license = lib.licenses.bsd3;
|
||||
maintainers = [ lib.maintainers.jmbaur ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
doCheck = true;
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Command line pastebin for sharing terminal output";
|
||||
longDescription = ''
|
||||
Fiche is a command line pastebin server for sharing terminal output.
|
||||
@@ -34,9 +34,9 @@ stdenv.mkDerivation rec {
|
||||
|
||||
homepage = "https://github.com/solusipse/fiche";
|
||||
changelog = "https://github.com/solusipse/fiche/releases/tag/${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = [ maintainers.pinpox ];
|
||||
platforms = platforms.all;
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.pinpox ];
|
||||
platforms = lib.platforms.all;
|
||||
mainProgram = "fiche";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -27,12 +27,12 @@ python3.pkgs.buildPythonApplication rec {
|
||||
|
||||
pythonImportsCheck = [ "fierce" ];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "DNS reconnaissance tool for locating non-contiguous IP space";
|
||||
homepage = "https://github.com/mschwager/fierce";
|
||||
changelog = "https://github.com/mschwager/fierce/blob/${version}/CHANGELOG.md";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = with maintainers; [ c0bw3b ];
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [ c0bw3b ];
|
||||
mainProgram = "fierce";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ rustPlatform.buildRustPackage rec {
|
||||
# There is a failure while the binary is checked
|
||||
doCheck = false;
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Host-based file integrity monitoring tool";
|
||||
longDescription = ''
|
||||
FIM is a File Integrity Monitoring tool that tracks any event over your
|
||||
@@ -56,8 +56,8 @@ rustPlatform.buildRustPackage rec {
|
||||
'';
|
||||
homepage = "https://github.com/Achiefs/fim";
|
||||
changelog = "https://github.com/Achiefs/fim/releases/tag/v${version}";
|
||||
license = licenses.gpl3Only;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = lib.licenses.gpl3Only;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
mainProgram = "fim";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -38,12 +38,12 @@ rustPlatform.buildRustPackage rec {
|
||||
installManPage findomain.1
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Fastest and cross-platform subdomain enumerator";
|
||||
homepage = "https://github.com/Findomain/Findomain";
|
||||
changelog = "https://github.com/Findomain/Findomain/releases/tag/${version}";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = with maintainers; [
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [
|
||||
Br1ght0ne
|
||||
figsoda
|
||||
];
|
||||
|
||||
@@ -25,12 +25,12 @@ buildGoModule rec {
|
||||
# Tests require network access
|
||||
doCheck = false;
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Standalone utility for service discovery on open ports";
|
||||
mainProgram = "fingerprintx";
|
||||
homepage = "https://github.com/praetorian-inc/fingerprintx";
|
||||
changelog = "https://github.com/praetorian-inc/fingerprintx/releases/tag/v${version}";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -83,14 +83,14 @@ rustPlatform.buildRustPackage rec {
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Secure, fast, minimal micro-container virtualization";
|
||||
homepage = "http://firecracker-microvm.io";
|
||||
changelog = "https://github.com/firecracker-microvm/firecracker/releases/tag/v${version}";
|
||||
mainProgram = "firecracker";
|
||||
license = licenses.asl20;
|
||||
license = lib.licenses.asl20;
|
||||
platforms = lib.platforms.linux;
|
||||
maintainers = with maintainers; [
|
||||
maintainers = with lib.maintainers; [
|
||||
usertam
|
||||
thoughtpolice
|
||||
qjoly
|
||||
|
||||
@@ -61,12 +61,12 @@ python3.pkgs.buildPythonPackage rec {
|
||||
export HOME=$(mktemp -d)
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Automatically extract obfuscated strings from malware";
|
||||
homepage = "https://github.com/mandiant/flare-floss";
|
||||
changelog = "https://github.com/mandiant/flare-floss/releases/tag/v${version}";
|
||||
license = licenses.asl20;
|
||||
license = lib.licenses.asl20;
|
||||
mainProgram = "floss";
|
||||
maintainers = with maintainers; [ fab ];
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -32,12 +32,12 @@ rustPlatform.buildRustPackage rec {
|
||||
--bash <($out/bin/flavours --completions bash)
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Easy to use base16 scheme manager/builder that integrates with any workflow";
|
||||
homepage = "https://github.com/Misterio77/flavours";
|
||||
changelog = "https://github.com/Misterio77/flavours/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [
|
||||
moni
|
||||
misterio77
|
||||
];
|
||||
|
||||
@@ -29,16 +29,16 @@ rustPlatform.buildRustPackage rec {
|
||||
"--skip should_verify_memory_layout"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Adds zero-cost stack overflow protection to your embedded programs";
|
||||
mainProgram = "flip-link";
|
||||
homepage = "https://github.com/knurling-rs/flip-link";
|
||||
changelog = "https://github.com/knurling-rs/flip-link/blob/v${version}/CHANGELOG.md";
|
||||
license = with licenses; [
|
||||
license = with lib.licenses; [
|
||||
asl20 # or
|
||||
mit
|
||||
];
|
||||
maintainers = with maintainers; [
|
||||
maintainers = with lib.maintainers; [
|
||||
FlorianFranzen
|
||||
newam
|
||||
];
|
||||
|
||||
@@ -53,13 +53,13 @@ stdenv.mkDerivation rec {
|
||||
wrapProgram $out/bin/flycast --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ vulkan-loader ]}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
homepage = "https://github.com/flyinghead/flycast";
|
||||
changelog = "https://github.com/flyinghead/flycast/releases/tag/v${version}";
|
||||
description = "Multi-platform Sega Dreamcast, Naomi and Atomiswave emulator";
|
||||
mainProgram = "flycast";
|
||||
license = licenses.gpl2Only;
|
||||
platforms = platforms.unix;
|
||||
maintainers = [ ];
|
||||
license = lib.licenses.gpl2Only;
|
||||
platforms = lib.platforms.unix;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -50,12 +50,12 @@ stdenv.mkDerivation rec {
|
||||
webkitgtk_6_0
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Simple and modern GTK eBook reader";
|
||||
homepage = "https://johnfactotum.github.io/foliate";
|
||||
changelog = "https://github.com/johnfactotum/foliate/releases/tag/${version}";
|
||||
license = licenses.gpl3Only;
|
||||
maintainers = with maintainers; [
|
||||
license = lib.licenses.gpl3Only;
|
||||
maintainers = with lib.maintainers; [
|
||||
onny
|
||||
aleksana
|
||||
];
|
||||
|
||||
@@ -58,7 +58,7 @@ rustPlatform.buildRustPackage rec {
|
||||
ln -s fortune-kind $out/bin/fortune
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Kinder, curated fortune, written in rust";
|
||||
longDescription = ''
|
||||
Historically, contributions to fortune-mod have had a less-than ideal
|
||||
@@ -70,9 +70,9 @@ rustPlatform.buildRustPackage rec {
|
||||
'';
|
||||
homepage = "https://github.com/cafkafk/fortune-kind";
|
||||
changelog = "https://github.com/cafkafk/fortune-kind/releases/tag/v${version}";
|
||||
license = licenses.gpl3Only;
|
||||
license = lib.licenses.gpl3Only;
|
||||
mainProgram = "fortune-kind";
|
||||
maintainers = with maintainers; [ cafkafk ];
|
||||
platforms = platforms.unix ++ platforms.windows;
|
||||
maintainers = with lib.maintainers; [ cafkafk ];
|
||||
platforms = lib.platforms.unix ++ lib.platforms.windows;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -55,13 +55,13 @@ stdenv.mkDerivation rec {
|
||||
updateScript = gnome.updateScript { packageName = "four-in-a-row"; };
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
homepage = "https://gitlab.gnome.org/GNOME/four-in-a-row";
|
||||
changelog = "https://gitlab.gnome.org/GNOME/four-in-a-row/-/blob/${version}/NEWS?ref_type=tags";
|
||||
description = "Make lines of the same color to win";
|
||||
mainProgram = "four-in-a-row";
|
||||
teams = [ teams.gnome ];
|
||||
license = licenses.gpl2;
|
||||
platforms = platforms.unix;
|
||||
teams = [ lib.teams.gnome ];
|
||||
license = lib.licenses.gpl2;
|
||||
platforms = lib.platforms.unix;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -107,13 +107,13 @@ stdenv.mkDerivation rec {
|
||||
updateScript = nix-update-script { };
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Matrix group messaging app";
|
||||
homepage = "https://gitlab.gnome.org/GNOME/fractal";
|
||||
changelog = "https://gitlab.gnome.org/World/fractal/-/releases/${version}";
|
||||
license = licenses.gpl3Plus;
|
||||
teams = [ teams.gnome ];
|
||||
platforms = platforms.linux;
|
||||
license = lib.licenses.gpl3Plus;
|
||||
teams = [ lib.teams.gnome ];
|
||||
platforms = lib.platforms.linux;
|
||||
mainProgram = "fractal";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -43,15 +43,15 @@ rustPlatform.buildRustPackage rec {
|
||||
# depends on cpu instructions that may not be available on builders
|
||||
doCheck = false;
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Small programming language for writing short programs processing textual data";
|
||||
mainProgram = "frawk";
|
||||
homepage = "https://github.com/ezrosent/frawk";
|
||||
changelog = "https://github.com/ezrosent/frawk/releases/tag/v${version}";
|
||||
license = with licenses; [
|
||||
license = with lib.licenses; [
|
||||
mit # or
|
||||
asl20
|
||||
];
|
||||
maintainers = with maintainers; [ figsoda ];
|
||||
maintainers = with lib.maintainers; [ figsoda ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -18,12 +18,12 @@ rustPlatform.buildRustPackage rec {
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-07qKG4ju2UOkTcgWAl2U0uqQZyiosK1UH/M2BvwMAaU=";
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "CLI tool for tracking your most-used directories and files";
|
||||
homepage = "https://github.com/camdencheek/fre";
|
||||
changelog = "https://github.com/camdencheek/fre/blob/${version}/CHANGELOG.md";
|
||||
license = with licenses; [ mit ];
|
||||
maintainers = with maintainers; [ gaykitty ];
|
||||
license = with lib.licenses; [ mit ];
|
||||
maintainers = with lib.maintainers; [ gaykitty ];
|
||||
mainProgram = "fre";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -70,12 +70,12 @@ rustPlatform.buildRustPackage rec {
|
||||
install -Dm644 "${desktopItem}/share/applications/"* -t $out/share/applications/
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Clone of the original Duke Nukum 1 Jump'n Run game";
|
||||
homepage = "https://salsa.debian.org/silwol/freenukum";
|
||||
changelog = "https://salsa.debian.org/silwol/freenukum/-/blob/v${version}/CHANGELOG.md";
|
||||
license = licenses.agpl3Plus;
|
||||
maintainers = with maintainers; [ _0x4A6F ];
|
||||
license = lib.licenses.agpl3Plus;
|
||||
maintainers = with lib.maintainers; [ _0x4A6F ];
|
||||
broken = stdenv.hostPlatform.isDarwin;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -31,12 +31,12 @@ stdenv.mkDerivation rec {
|
||||
pkg-config
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Libraries to natively talk to Microsoft SQL Server and Sybase databases";
|
||||
homepage = "https://www.freetds.org";
|
||||
changelog = "https://github.com/FreeTDS/freetds/releases/tag/v${version}";
|
||||
license = licenses.lgpl2;
|
||||
maintainers = with maintainers; [ peterhoeg ];
|
||||
platforms = platforms.all;
|
||||
license = lib.licenses.lgpl2;
|
||||
maintainers = with lib.maintainers; [ peterhoeg ];
|
||||
platforms = lib.platforms.all;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -48,16 +48,16 @@ stdenv.mkDerivation rec {
|
||||
|
||||
installFlags = [ "PREFIX=$(out)" ];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
homepage = "https://davidgriffith.gitlab.io/frotz/";
|
||||
changelog = "https://gitlab.com/DavidGriffith/frotz/-/raw/${version}/NEWS";
|
||||
description = "Z-machine interpreter for Infocom games and other interactive fiction";
|
||||
mainProgram = "frotz";
|
||||
platforms = platforms.unix;
|
||||
maintainers = with maintainers; [
|
||||
platforms = lib.platforms.unix;
|
||||
maintainers = with lib.maintainers; [
|
||||
nicknovitski
|
||||
ddelabru
|
||||
];
|
||||
license = licenses.gpl2Plus;
|
||||
license = lib.licenses.gpl2Plus;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -38,14 +38,14 @@ buildGoModule rec {
|
||||
tests.vm = nixosTests.galene.basic;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Videoconferencing server that is easy to deploy, written in Go";
|
||||
homepage = "https://github.com/jech/galene";
|
||||
changelog = "https://github.com/jech/galene/raw/galene-${version}/CHANGES";
|
||||
license = licenses.mit;
|
||||
platforms = platforms.linux;
|
||||
license = lib.licenses.mit;
|
||||
platforms = lib.platforms.linux;
|
||||
teams = [ lib.teams.ngi ];
|
||||
maintainers = with maintainers; [
|
||||
maintainers = with lib.maintainers; [
|
||||
rgrunbla
|
||||
erdnaxe
|
||||
];
|
||||
|
||||
@@ -17,12 +17,12 @@ buildGoModule rec {
|
||||
|
||||
vendorHash = "sha256-BS7ZUq8/swZpTaYGjiF5OuZXQpoosZ3mdF9v1euijxo=";
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Tool to fetch URLs from HTML attributes";
|
||||
homepage = "https://github.com/dwisiswant0/galer";
|
||||
changelog = "https://github.com/dwisiswant0/galer/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
mainProgram = "galer";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -46,15 +46,15 @@ python3.pkgs.buildPythonApplication rec {
|
||||
|
||||
pythonImportsCheck = [ "gallia" ];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Extendable Pentesting Framework for the Automotive Domain";
|
||||
homepage = "https://github.com/Fraunhofer-AISEC/gallia";
|
||||
changelog = "https://github.com/Fraunhofer-AISEC/gallia/releases/tag/v${version}";
|
||||
license = with licenses; [ asl20 ];
|
||||
maintainers = with maintainers; [
|
||||
license = with lib.licenses; [ asl20 ];
|
||||
maintainers = with lib.maintainers; [
|
||||
fab
|
||||
rumpelsepp
|
||||
];
|
||||
platforms = platforms.linux;
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -63,13 +63,13 @@ python3.pkgs.buildPythonApplication rec {
|
||||
runHook postCheck
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Command line management for Google Workspace";
|
||||
mainProgram = "gam";
|
||||
homepage = "https://github.com/GAM-team/GAM/wiki";
|
||||
changelog = "https://github.com/GAM-team/GAM/releases/tag/v${version}";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ thanegill ];
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ thanegill ];
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -23,12 +23,12 @@ rustPlatform.buildRustPackage rec {
|
||||
|
||||
propagatedBuildInputs = [ steam-run ];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Minimal CLI game launcher for linux";
|
||||
homepage = "https://github.com/amanse/game-rs";
|
||||
changelog = "https://github.com/Amanse/game-rs/releases/tag/v${version}";
|
||||
license = with licenses; [ mit ];
|
||||
maintainers = with maintainers; [ amanse ];
|
||||
platforms = platforms.linux;
|
||||
license = with lib.licenses; [ mit ];
|
||||
maintainers = with lib.maintainers; [ amanse ];
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -40,12 +40,12 @@ python3.pkgs.buildPythonApplication rec {
|
||||
"gato"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "GitHub Self-Hosted Runner Enumeration and Attack Tool";
|
||||
homepage = "https://github.com/praetorian-inc/gato";
|
||||
changelog = "https://github.com/praetorian-inc/gato/releases/tag/${version}";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
mainProgram = "gato";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -27,13 +27,13 @@ stdenv.mkDerivation rec {
|
||||
];
|
||||
buildInputs = [ curl ];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Portable Git(Hub|Lab|ea) CLI tool";
|
||||
homepage = "https://herrhotzenplotz.de/gcli/";
|
||||
changelog = "https://github.com/herrhotzenplotz/gcli/releases/tag/${version}";
|
||||
license = licenses.bsd2;
|
||||
license = lib.licenses.bsd2;
|
||||
mainProgram = "gcli";
|
||||
maintainers = with maintainers; [ kenran ];
|
||||
platforms = platforms.unix;
|
||||
maintainers = with lib.maintainers; [ kenran ];
|
||||
platforms = lib.platforms.unix;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -46,12 +46,12 @@ python3.pkgs.buildPythonApplication rec {
|
||||
"test_acceptance"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Comprehensive scanner for Google Cloud";
|
||||
homepage = "https://github.com/google/gcp_scanner";
|
||||
changelog = "https://github.com/google/gcp_scanner/blob/${version}/CHANGELOG.md";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
mainProgram = "gcp-scanner";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -44,12 +44,12 @@ buildGoModule rec {
|
||||
ln -s $out/bin/mount_gcsfuse $out/bin/mount.fuse.gcsfuse
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "User-space file system for interacting with Google Cloud Storage";
|
||||
homepage = "https://cloud.google.com/storage/docs/gcs-fuse";
|
||||
changelog = "https://github.com/GoogleCloudPlatform/gcsfuse/releases/tag/v${version}";
|
||||
license = licenses.asl20;
|
||||
maintainers = [ ];
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
# internal/cache/file/downloader/job.go:386:77: undefined: syscall.O_DIRECT
|
||||
broken = stdenv.hostPlatform.isDarwin;
|
||||
};
|
||||
|
||||
@@ -151,12 +151,12 @@ stdenv.mkDerivation rec {
|
||||
};
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
homepage = "https://gitlab.gnome.org/GNOME/geary";
|
||||
changelog = "https://gitlab.gnome.org/GNOME/geary/-/blob/${version}/NEWS?ref_type=tags";
|
||||
description = "Mail client for GNOME 3";
|
||||
teams = [ teams.gnome ];
|
||||
license = licenses.lgpl21Plus;
|
||||
platforms = platforms.linux;
|
||||
teams = [ lib.teams.gnome ];
|
||||
license = lib.licenses.lgpl21Plus;
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -32,12 +32,12 @@ rustPlatform.buildRustPackage rec {
|
||||
--zsh <($out/bin/genact --print-completions zsh)
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Nonsense activity generator";
|
||||
homepage = "https://github.com/svenstaro/genact";
|
||||
changelog = "https://github.com/svenstaro/genact/blob/v${version}/CHANGELOG.md";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ figsoda ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ figsoda ];
|
||||
mainProgram = "genact";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -165,7 +165,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
passthru.tests = { inherit (nixosTests) mediatomb; };
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
homepage = "https://docs.gerbera.io/";
|
||||
changelog = "https://github.com/gerbera/gerbera/releases/tag/v${version}";
|
||||
description = "UPnP Media Server for 2024";
|
||||
@@ -174,9 +174,9 @@ stdenv.mkDerivation rec {
|
||||
It allows to stream your digital media through your home network and consume it on all kinds
|
||||
of UPnP supporting devices.
|
||||
'';
|
||||
license = licenses.gpl2Only;
|
||||
maintainers = with maintainers; [ ardumont ];
|
||||
platforms = platforms.linux;
|
||||
license = lib.licenses.gpl2Only;
|
||||
maintainers = with lib.maintainers; [ ardumont ];
|
||||
platforms = lib.platforms.linux;
|
||||
mainProgram = "gerbera";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -19,12 +19,12 @@ buildGoModule rec {
|
||||
|
||||
ldflags = [ "-s" ];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Search github issues interactively";
|
||||
changelog = "https://github.com/gennaro-tedesco/gh-i/releases/tag/v${version}";
|
||||
homepage = "https://github.com/gennaro-tedesco/gh-i";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ phanirithvij ];
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ phanirithvij ];
|
||||
mainProgram = "gh-i";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -7,16 +7,16 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "gh-skyline";
|
||||
version = "0.1.5";
|
||||
version = "0.1.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "github";
|
||||
repo = "gh-skyline";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-jcdOLoyOXq270SaObMpCD+ts6Hj8wqSAjUZWEg3F9+w=";
|
||||
hash = "sha256-IMsq+IhuZUJ7JSWZJPvx2bQ9avFsjfc/kOW9Sre5jAo=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-rCFHYofUQlfRMP7bJav2se7oAkE7rS8KJl1n8kCsSag=";
|
||||
vendorHash = "sha256-iAqc8RlvpvP9Go8E/b+PnEgKRdpD3+IIQ1JUKVZ1Ces=";
|
||||
|
||||
ldflags = [
|
||||
"-s"
|
||||
|
||||
@@ -55,12 +55,12 @@ buildGoModule rec {
|
||||
package = gh;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "GitHub CLI tool";
|
||||
homepage = "https://cli.github.com/";
|
||||
changelog = "https://github.com/cli/cli/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
license = lib.licenses.mit;
|
||||
mainProgram = "gh";
|
||||
maintainers = with maintainers; [ zowoq ];
|
||||
maintainers = with lib.maintainers; [ zowoq ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -34,12 +34,12 @@ python3.pkgs.buildPythonApplication rec {
|
||||
"ghauri"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Tool for detecting and exploiting SQL injection security flaws";
|
||||
homepage = "https://github.com/r0oth3x49/ghauri";
|
||||
changelog = "https://github.com/r0oth3x49/ghauri/releases/tag/${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
mainProgram = "ghauri";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -38,12 +38,12 @@ rustPlatform.buildRustPackage rec {
|
||||
export HOME=$(mktemp -d)
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Github notifications in your terminal";
|
||||
homepage = "https://github.com/attriaayush/ghostie";
|
||||
changelog = "https://github.com/attriaayush/ghostie/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ matthiasbeyer ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ matthiasbeyer ];
|
||||
broken = stdenv.hostPlatform.isx86_64 && stdenv.hostPlatform.isDarwin;
|
||||
mainProgram = "ghostie";
|
||||
};
|
||||
|
||||
@@ -39,12 +39,12 @@ buildGoModule rec {
|
||||
podman = nixosTests.podman-tls-ghostunnel;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "TLS proxy with mutual authentication support for securing non-TLS backend applications";
|
||||
homepage = "https://github.com/ghostunnel/ghostunnel#readme";
|
||||
changelog = "https://github.com/ghostunnel/ghostunnel/releases/tag/v${version}";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [
|
||||
roberth
|
||||
mjm
|
||||
];
|
||||
|
||||
@@ -54,12 +54,12 @@ python3.pkgs.buildPythonApplication rec {
|
||||
"ghunt"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Offensive Google framework";
|
||||
mainProgram = "ghunt";
|
||||
homepage = "https://github.com/mxrch/ghunt";
|
||||
changelog = "https://github.com/mxrch/GHunt/releases/tag/v${version}";
|
||||
license = licenses.agpl3Only;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = lib.licenses.agpl3Only;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -26,11 +26,11 @@ buildGoModule rec {
|
||||
mv $out/bin/src $out/bin/$pname
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Automatically spawn a reverse shell fully interactive for Linux or Windows victim";
|
||||
homepage = "https://github.com/nodauf/Girsh";
|
||||
changelog = "https://github.com/nodauf/Girsh/releases/tag/v${version}";
|
||||
license = licenses.gpl2Only;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = lib.licenses.gpl2Only;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -40,12 +40,12 @@ rustPlatform.buildRustPackage rec {
|
||||
installManPage $OUT_DIR/git-cliff.1
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Highly customizable Changelog Generator that follows Conventional Commit specifications";
|
||||
homepage = "https://github.com/orhun/git-cliff";
|
||||
changelog = "https://github.com/orhun/git-cliff/blob/v${version}/CHANGELOG.md";
|
||||
license = licenses.gpl3Only;
|
||||
maintainers = with maintainers; [
|
||||
license = lib.licenses.gpl3Only;
|
||||
maintainers = with lib.maintainers; [
|
||||
siraben
|
||||
matthiasbeyer
|
||||
];
|
||||
|
||||
@@ -54,12 +54,12 @@ rustPlatform.buildRustPackage {
|
||||
--zsh <(${gitGr} completions zsh)
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
homepage = "https://github.com/9999years/git-gr";
|
||||
changelog = "https://github.com/9999years/git-gr/releases/tag/v${version}";
|
||||
description = "Gerrit CLI client";
|
||||
license = [ licenses.mit ];
|
||||
maintainers = [ maintainers._9999years ];
|
||||
license = [ lib.licenses.mit ];
|
||||
maintainers = [ lib.maintainers._9999years ];
|
||||
mainProgram = "git-gr";
|
||||
};
|
||||
|
||||
|
||||
@@ -22,12 +22,12 @@ rustPlatform.buildRustPackage rec {
|
||||
preCheck = "export GIRT_BUILD_GIT_HASH=${version}";
|
||||
postCheck = "unset GIRT_BUILD_GIT_HASH";
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
homepage = "https://github.com/MitMaro/git-interactive-rebase-tool";
|
||||
description = "Native cross platform full feature terminal based sequence editor for git interactive rebase";
|
||||
changelog = "https://github.com/MitMaro/git-interactive-rebase-tool/releases/tag/${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [
|
||||
SuperSandro2000
|
||||
zowoq
|
||||
ma27
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
pkg-config,
|
||||
gitMinimal,
|
||||
rustPlatform,
|
||||
openssl,
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "git-metrics";
|
||||
version = "0.2.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jdrouet";
|
||||
repo = "git-metrics";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-SdA/FpdrbC36Ny7aBpTUvFldbYXyajSqWGheaDPHYoE=";
|
||||
};
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-e4CdpwoFl8leV5HJWkWBpvPrVrk+7vq49yTPkpeQ2Ng=";
|
||||
|
||||
buildInputs = [
|
||||
openssl
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
pkg-config
|
||||
gitMinimal
|
||||
];
|
||||
|
||||
checkFlags = [
|
||||
# requires git author information to be detectable
|
||||
"--skip=tests::check_budget::execute::with_command_backend"
|
||||
"--skip=tests::check_budget::execute::with_git2_backend"
|
||||
"--skip=tests::conflict_different::execute::with_command_backend"
|
||||
"--skip=tests::conflict_different::execute::with_git2_backend"
|
||||
"--skip=tests::display_diff::execute"
|
||||
"--skip=tests::simple_use_case::execute::with_command_backend"
|
||||
"--skip=tests::simple_use_case::execute::with_git2_backend"
|
||||
];
|
||||
|
||||
meta = {
|
||||
homepage = "https://github.com/jdrouet/git-metrics";
|
||||
description = "Git extension to be able to track metrics about your project, within the git repository";
|
||||
license = [ lib.licenses.mit ];
|
||||
maintainers = with lib.maintainers; [
|
||||
matthiasbeyer
|
||||
];
|
||||
mainProgram = "git-metrics";
|
||||
};
|
||||
}
|
||||
@@ -44,11 +44,11 @@ rustPlatform.buildRustPackage {
|
||||
LIBGIT2_NO_VENDOR = 1;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Minimalist set of hooks to aid pairing and link commits to issues";
|
||||
homepage = "https://github.com/PurpleBooth/git-mit";
|
||||
changelog = "https://github.com/PurpleBooth/git-mit/releases/tag/v${version}";
|
||||
license = licenses.cc0;
|
||||
maintainers = with maintainers; [ figsoda ];
|
||||
license = lib.licenses.cc0;
|
||||
maintainers = with lib.maintainers; [ figsoda ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -21,12 +21,12 @@ rustPlatform.buildRustPackage rec {
|
||||
|
||||
nativeCheckInputs = [ git ];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Synchronize work-in-progress git branches in a light weight fashion";
|
||||
homepage = "https://github.com/rraval/git-nomad";
|
||||
changelog = "https://github.com/rraval/git-nomad/blob/v${version}/CHANGELOG.md";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ rraval ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ rraval ];
|
||||
mainProgram = "git-nomad";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -22,12 +22,12 @@ buildGoModule rec {
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Tool for creating Git releases based on Semantic Versioning";
|
||||
homepage = "https://github.com/git-releaser/git-releaser";
|
||||
changelog = "https://github.com/git-releaser/git-releaser/releases/tag/v${version}";
|
||||
maintainers = with maintainers; [ jakuzure ];
|
||||
license = licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ jakuzure ];
|
||||
license = lib.licenses.asl20;
|
||||
mainProgram = "git-releaser";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -27,12 +27,12 @@ rustPlatform.buildRustPackage rec {
|
||||
package = git-stack;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Stacked branch management for Git";
|
||||
homepage = "https://github.com/gitext-rs/git-stack";
|
||||
changelog = "https://github.com/gitext-rs/git-stack/releases/tag/v${version}";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ stehessel ];
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ stehessel ];
|
||||
mainProgram = "git-stack";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -25,12 +25,12 @@ rustPlatform.buildRustPackage rec {
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-5LKKjHzIlXw0bUmF7GDCVW0cptCxohq6CNPIrMZKorM=";
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
changelog = "https://github.com/kejadlen/git-together/releases/tag/v${version}";
|
||||
description = "Better commit attribution while pairing without messing with your git workflow";
|
||||
homepage = "https://github.com/kejadlen/git-together";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ sentientmonkey ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ sentientmonkey ];
|
||||
mainProgram = "git-together";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -19,12 +19,12 @@ buildGoModule rec {
|
||||
|
||||
ldflags = [ "-s" ];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Scan local git repositories and generate a visual contributions graph";
|
||||
changelog = "https://github.com/knbr13/gitcs/releases/tag/v${version}";
|
||||
homepage = "https://github.com/knbr13/gitcs";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ phanirithvij ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ phanirithvij ];
|
||||
mainProgram = "gitcs";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -31,10 +31,10 @@ buildGo123Module rec {
|
||||
version = "v${version}";
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
mainProgram = "act_runner";
|
||||
maintainers = with maintainers; [ techknowlogick ];
|
||||
license = licenses.mit;
|
||||
maintainers = with lib.maintainers; [ techknowlogick ];
|
||||
license = lib.licenses.mit;
|
||||
changelog = "https://gitea.com/gitea/act_runner/releases/tag/v${version}";
|
||||
homepage = "https://gitea.com/gitea/act_runner";
|
||||
description = "Runner for Gitea based on act";
|
||||
|
||||
@@ -89,16 +89,16 @@ stdenv.mkDerivation rec {
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
homepage = "https://gitlab.gnome.org/GNOME/gitg";
|
||||
changelog = "https://gitlab.gnome.org/GNOME/gitg/-/blob/v${version}/NEWS?ref_type=tags";
|
||||
description = "GNOME GUI client to view git repositories";
|
||||
mainProgram = "gitg";
|
||||
maintainers = with maintainers; [
|
||||
maintainers = with lib.maintainers; [
|
||||
domenkozar
|
||||
Luflosi
|
||||
];
|
||||
license = licenses.gpl2Plus;
|
||||
platforms = platforms.linux;
|
||||
license = lib.licenses.gpl2Plus;
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -335,12 +335,12 @@ buildDotnetModule (finalAttrs: {
|
||||
updateScript = ./update.sh;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
changelog = "https://github.com/actions/runner/releases/tag/v${version}";
|
||||
meta = {
|
||||
changelog = "https://github.com/actions/runner/releases/tag/v${finalAttrs.version}";
|
||||
description = "Self-hosted runner for GitHub Actions";
|
||||
homepage = "https://github.com/actions/runner";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [
|
||||
veehaitch
|
||||
kfollesdal
|
||||
aanderse
|
||||
@@ -352,6 +352,6 @@ buildDotnetModule (finalAttrs: {
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
};
|
||||
})
|
||||
|
||||
@@ -19,12 +19,12 @@ buildGoModule rec {
|
||||
vendorHash = "sha256-BjCwPt1duDINHP7L0qT2KNTjOZ62bWgVij88ztjjyPg=";
|
||||
subPackages = [ "." ];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Daemon used to serve static websites for GitLab users";
|
||||
mainProgram = "gitlab-pages";
|
||||
homepage = "https://gitlab.com/gitlab-org/gitlab-pages";
|
||||
changelog = "https://gitlab.com/gitlab-org/gitlab-pages/-/blob/v${version}/CHANGELOG.md";
|
||||
license = licenses.mit;
|
||||
teams = [ teams.gitlab ];
|
||||
license = lib.licenses.mit;
|
||||
teams = [ lib.teams.gitlab ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ buildGoModule rec {
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Scan git repos (or files) for secrets";
|
||||
longDescription = ''
|
||||
Gitleaks is a SAST tool for detecting hardcoded secrets like passwords,
|
||||
@@ -54,8 +54,8 @@ buildGoModule rec {
|
||||
'';
|
||||
homepage = "https://github.com/zricethezav/gitleaks";
|
||||
changelog = "https://github.com/zricethezav/gitleaks/releases/tag/v${version}";
|
||||
license = with licenses; [ mit ];
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = with lib.licenses; [ mit ];
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
mainProgram = "gitleaks";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -25,12 +25,12 @@ buildGoModule rec {
|
||||
version = "v${version}";
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Tools to enumerate git repository URL";
|
||||
homepage = "https://github.com/hahwul/gitls";
|
||||
changelog = "https://github.com/hahwul/gitls/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
mainProgram = "gitls";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -32,12 +32,12 @@ buildGoModule rec {
|
||||
|
||||
postInstall = "rm $out/bin/cli"; # remove gendoc cli binary
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
changelog = "https://github.com/gittuf/gittuf/blob/v${version}/CHANGELOG.md";
|
||||
description = "Security layer for Git repositories";
|
||||
homepage = "https://gittuf.dev";
|
||||
license = licenses.asl20;
|
||||
license = lib.licenses.asl20;
|
||||
mainProgram = "gittuf";
|
||||
maintainers = with maintainers; [ flandweber ];
|
||||
maintainers = with lib.maintainers; [ flandweber ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -10,13 +10,13 @@ buildDotnetGlobalTool rec {
|
||||
|
||||
nugetHash = "sha256-gtkD+egl9zAfJ4ZsOwb7u82IhBabjBFxU+nv9yQ1HHQ=";
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "From git log to SemVer in no time";
|
||||
homepage = "https://gitversion.net/";
|
||||
changelog = "https://github.com/GitTools/GitVersion/releases/tag/${version}";
|
||||
downloadPage = "https://github.com/GitTools/GitVersion";
|
||||
license = licenses.mit;
|
||||
platforms = platforms.linux ++ platforms.windows ++ platforms.darwin;
|
||||
maintainers = with maintainers; [ acesyde ];
|
||||
license = lib.licenses.mit;
|
||||
platforms = lib.platforms.linux ++ lib.platforms.windows ++ lib.platforms.darwin;
|
||||
maintainers = with lib.maintainers; [ acesyde ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -77,12 +77,12 @@ buildGo123Module rec {
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "The missing Package Manager for Kubernetes featuring a GUI and a CLI";
|
||||
homepage = "https://github.com/glasskube/glasskube";
|
||||
changelog = "https://github.com/glasskube/glasskube/releases/tag/v${version}";
|
||||
maintainers = with maintainers; [ jakuzure ];
|
||||
license = licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ jakuzure ];
|
||||
license = lib.licenses.asl20;
|
||||
mainProgram = "glasskube";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -34,12 +34,12 @@ rustPlatform.buildRustPackage rec {
|
||||
"runs_correctly"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Git wrapper that allows you to compress multiple commands into one";
|
||||
homepage = "https://github.com/milo123459/glitter";
|
||||
changelog = "https://github.com/Milo123459/glitter/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ figsoda ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ figsoda ];
|
||||
mainProgram = "glitter";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -36,12 +36,12 @@ buildGoModule rec {
|
||||
--zsh <($out/bin/glow completion zsh)
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Render markdown on the CLI, with pizzazz!";
|
||||
homepage = "https://github.com/charmbracelet/glow";
|
||||
changelog = "https://github.com/charmbracelet/glow/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [
|
||||
Br1ght0ne
|
||||
penguwin
|
||||
];
|
||||
|
||||
@@ -24,12 +24,12 @@ buildGoModule rec {
|
||||
"-w"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
homepage = "https://github.com/kevinburke/go-bindata";
|
||||
changelog = "https://github.com/kevinburke/go-bindata/blob/v${version}/CHANGELOG.md";
|
||||
description = "Small utility which generates Go code from any file, useful for embedding binary data in a Go program";
|
||||
mainProgram = "go-bindata";
|
||||
maintainers = [ ];
|
||||
license = licenses.cc0;
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
license = lib.licenses.cc0;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -43,12 +43,12 @@ buildGo124Module rec {
|
||||
rm pkg/camo/proxy_{,filter_}test.go
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Camo server is a special type of image proxy that proxies non-secure images over SSL/TLS";
|
||||
homepage = "https://github.com/cactus/go-camo";
|
||||
changelog = "https://github.com/cactus/go-camo/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
license = lib.licenses.mit;
|
||||
mainProgram = "go-camo";
|
||||
maintainers = with maintainers; [ viraptor ];
|
||||
maintainers = with lib.maintainers; [ viraptor ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ buildGoModule rec {
|
||||
# Tests requires network access
|
||||
doCheck = false;
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Lightweight CVE search tool";
|
||||
mainProgram = "go-cve-search";
|
||||
longDescription = ''
|
||||
@@ -29,7 +29,7 @@ buildGoModule rec {
|
||||
'';
|
||||
homepage = "https://github.com/s-index/go-cve-search";
|
||||
changelog = "https://github.com/s-index/go-cve-search/releases/tag/v${version}";
|
||||
license = with licenses; [ mit ];
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = with lib.licenses; [ mit ];
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -17,12 +17,12 @@ buildGoModule rec {
|
||||
|
||||
vendorHash = "sha256-6V58RRRPamBMDAf0gg4sQMQkoD5dWauCFtPrwf5EasI=";
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Dork scanner";
|
||||
homepage = "https://github.com/dwisiswant0/go-dork";
|
||||
changelog = "https://github.com/dwisiswant0/go-dork/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
mainProgram = "go-dork";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -23,12 +23,12 @@ buildGoModule rec {
|
||||
"-X=github.com/vulsio/go-exploitdb/config.Version=${version}"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Tool for searching Exploits from Exploit Databases, etc";
|
||||
mainProgram = "go-exploitdb";
|
||||
homepage = "https://github.com/vulsio/go-exploitdb";
|
||||
changelog = "https://github.com/vulsio/go-exploitdb/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -51,12 +51,12 @@ buildGoModule rec {
|
||||
# Tests require internet connection
|
||||
doCheck = false;
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
changelog = "https://github.com/google/go-licenses/releases/tag/v${version}";
|
||||
description = "Reports on the licenses used by a Go package and its dependencies";
|
||||
mainProgram = "go-licenses";
|
||||
homepage = "https://github.com/google/go-licenses";
|
||||
license = with licenses; [ asl20 ];
|
||||
maintainers = with maintainers; [ Luflosi ];
|
||||
license = with lib.licenses; [ asl20 ];
|
||||
maintainers = with lib.maintainers; [ Luflosi ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -22,12 +22,12 @@ buildGoModule rec {
|
||||
"-w"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Tool to remotely dump secrets from the Windows registry";
|
||||
homepage = "https://github.com/jfjallid/go-secdump";
|
||||
changelog = "https://github.com/jfjallid/go-secdump/releases/tag/${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
mainProgram = "go-secdump";
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
|
||||
@@ -28,12 +28,12 @@ buildGoModule rec {
|
||||
"-X github.com/go-swagger/go-swagger/cmd/swagger/commands.Commit=${src.rev}"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Golang implementation of Swagger 2.0, representation of your RESTful API";
|
||||
homepage = "https://github.com/go-swagger/go-swagger";
|
||||
changelog = "https://github.com/go-swagger/go-swagger/releases/tag/v${version}";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ kalbasit ];
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ kalbasit ];
|
||||
mainProgram = "swagger";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -26,12 +26,12 @@ buildGoModule rec {
|
||||
|
||||
doCheck = false; # tests fail
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MJPEG, HomeKit, FFmpeg, etc";
|
||||
homepage = "https://github.com/AlexxIT/go2rtc";
|
||||
changelog = "https://github.com/AlexxIT/go2rtc/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ hexa ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ hexa ];
|
||||
mainProgram = "go2rtc";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -45,12 +45,12 @@ buildGoModule rec {
|
||||
|
||||
doCheck = false;
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Cast media files to UPnP/DLNA Media Renderers and Smart TVs";
|
||||
homepage = "https://github.com/alexballas/go2tv";
|
||||
changelog = "https://github.com/alexballas/go2tv/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ gdamjan ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ gdamjan ];
|
||||
mainProgram = pname;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -22,12 +22,12 @@ buildGoModule rec {
|
||||
mv $out/bin/Go365 $out/bin/$pname
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Office 365 enumeration tool";
|
||||
homepage = "https://github.com/optiv/Go365";
|
||||
changelog = "https://github.com/optiv/Go365/releases/tag/v${version}";
|
||||
license = with licenses; [ mit ];
|
||||
maintainers = with maintainers; [ fab ];
|
||||
license = with lib.licenses; [ mit ];
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
mainProgram = "Go365";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -42,13 +42,13 @@ stdenv.mkDerivation rec {
|
||||
]
|
||||
);
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
description = "Real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems";
|
||||
homepage = "https://goaccess.io";
|
||||
changelog = "https://github.com/allinurl/goaccess/raw/v${version}/ChangeLog";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ ederoyd46 ];
|
||||
platforms = platforms.linux ++ platforms.darwin;
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ ederoyd46 ];
|
||||
platforms = lib.platforms.linux ++ lib.platforms.darwin;
|
||||
mainProgram = "goaccess";
|
||||
};
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user