diff --git a/doc/manpage-urls.json b/doc/manpage-urls.json index e878caf042a4..ba18e98376f4 100644 --- a/doc/manpage-urls.json +++ b/doc/manpage-urls.json @@ -322,5 +322,6 @@ "nix-shell(1)": "https://nixos.org/manual/nix/stable/command-ref/nix-shell.html", "mksquashfs(1)": "https://man.archlinux.org/man/extra/squashfs-tools/mksquashfs.1.en", "curl(1)": "https://curl.se/docs/manpage.html", - "netrc(5)": "https://man.cx/netrc" + "netrc(5)": "https://man.cx/netrc", + "cat(1)": "https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html" } diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index ef7bad7e6075..e0cf67ab44f2 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -15886,6 +15886,12 @@ github = "niklaskorz"; githubId = 590517; }; + NiklasVousten = { + name = "Niklas Vousten"; + email = "nixpkgs@vousten.dev"; + github = "NiklasVousten"; + githubId = 24965952; + }; nikstur = { email = "nikstur@outlook.com"; name = "nikstur"; diff --git a/nixos/doc/manual/redirects.json b/nixos/doc/manual/redirects.json index 6f897ce7a991..f792750a1ea4 100644 --- a/nixos/doc/manual/redirects.json +++ b/nixos/doc/manual/redirects.json @@ -2,6 +2,45 @@ "book-nixos-manual": [ "index.html#book-nixos-manual" ], + "module-services-crab-hole": [ + "index.html#module-services-crab-hole" + ], + "module-services-crab-hole-api": [ + "index.html#module-services-crab-hole-api" + ], + "module-services-crab-hole-configuration": [ + "index.html#module-services-crab-hole-configuration" + ], + "module-services-crab-hole-dnssec": [ + "index.html#module-services-crab-hole-dnssec" + ], + "module-services-crab-hole-downstream": [ + "index.html#module-services-crab-hole-downstream" + ], + "module-services-crab-hole-https": [ + "index.html#module-services-crab-hole-https" + ], + "module-services-crab-hole-invalid-config": [ + "index.html#module-services-crab-hole-invalid-config" + ], + "module-services-crab-hole-permission-error": [ + "index.html#module-services-crab-hole-permission-error" + ], + "module-services-crab-hole-quic": [ + "index.html#module-services-crab-hole-quic" + ], + "module-services-crab-hole-tls": [ + "index.html#module-services-crab-hole-tls" + ], + "module-services-crab-hole-troubleshooting": [ + "index.html#module-services-crab-hole-troubleshooting" + ], + "module-services-crab-hole-udp": [ + "index.html#module-services-crab-hole-udp" + ], + "module-services-crab-hole-upstream-options": [ + "index.html#module-services-crab-hole-upstream-options" + ], "preface": [ "index.html#preface" ], diff --git a/nixos/doc/manual/release-notes/rl-2505.section.md b/nixos/doc/manual/release-notes/rl-2505.section.md index c0262c04c829..e04ac20b8ba1 100644 --- a/nixos/doc/manual/release-notes/rl-2505.section.md +++ b/nixos/doc/manual/release-notes/rl-2505.section.md @@ -31,8 +31,12 @@ - [Traccar](https://www.traccar.org/), a modern GPS Tracking Platform. Available as [services.traccar](#opt-services.traccar.enable). +- [crab-hole](https://github.com/LuckyTurtleDev/crab-hole), a cross platform Pi-hole clone written in Rust using hickory-dns/trust-dns. Available as [services.crab-hole](#opt-services.crab-hole.enable). + - [Amazon CloudWatch Agent](https://github.com/aws/amazon-cloudwatch-agent), the official telemetry collector for AWS CloudWatch and AWS X-Ray. Available as [services.amazon-cloudwatch-agent](options.html#opt-services.amazon-cloudwatch-agent.enable). +- [Bat](https://github.com/sharkdp/bat), a {manpage}`cat(1)` clone with wings. Available as [programs.bat](options.html#opt-programs.bat). + - [agorakit](https://github.com/agorakit/agorakit), an organization tool for citizens' collectives. Available with [services.agorakit](options.html#opt-services.agorakit.enable). - [mqtt-exporter](https://github.com/kpetremann/mqtt-exporter/), a Prometheus exporter for exposing messages from MQTT. Available as [services.prometheus.exporters.mqtt](#opt-services.prometheus.exporters.mqtt.enable). diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index b285e3f7c7ae..31d370ef6ccf 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -161,6 +161,7 @@ ./programs/bash/ls-colors.nix ./programs/bash/undistract-me.nix ./programs/bazecor.nix + ./programs/bat.nix ./programs/bcc.nix ./programs/benchexec.nix ./programs/browserpass.nix @@ -1027,6 +1028,7 @@ ./services/networking/coredns.nix ./services/networking/corerad.nix ./services/networking/coturn.nix + ./services/networking/crab-hole.nix ./services/networking/create_ap.nix ./services/networking/croc.nix ./services/networking/dae.nix diff --git a/nixos/modules/programs/bat.nix b/nixos/modules/programs/bat.nix new file mode 100644 index 000000000000..5ccc87baf2c4 --- /dev/null +++ b/nixos/modules/programs/bat.nix @@ -0,0 +1,122 @@ +{ + pkgs, + config, + lib, + ... +}: +let + inherit (builtins) isList elem; + inherit (lib) + getExe + literalExpression + maintainers + mapAttrs' + mkEnableOption + mkIf + mkOption + mkPackageOption + nameValuePair + optionalString + types + ; + inherit (types) listOf package; + + cfg = config.programs.bat; + + settingsFormat = pkgs.formats.keyValue { listsAsDuplicateKeys = true; }; + inherit (settingsFormat) generate type; + + initScript = + { + program, + shell, + flags ? [ ], + }: + if (shell != "fish") then + '' + eval "$(${getExe program} ${toString flags})" + '' + else + '' + ${getExe program} ${toString flags} | source + ''; + + shellInit = + shell: + optionalString (elem pkgs.bat-extras.batpipe cfg.extraPackages) (initScript { + program = pkgs.bat-extras.batpipe; + inherit shell; + }) + + optionalString (elem pkgs.bat-extras.batman cfg.extraPackages) (initScript { + program = pkgs.bat-extras.batman; + inherit shell; + flags = [ "--export-env" ]; + }); +in +{ + options.programs.bat = { + enable = mkEnableOption "`bat`, a {manpage}`cat(1)` clone with wings"; + + package = mkPackageOption pkgs "bat" { }; + + extraPackages = mkOption { + default = [ ]; + example = literalExpression '' + with pkgs.bat-extras; [ + batdiff + batman + prettybat + ]; + ''; + description = '' + Extra `bat` scripts to be added to the system configuration. + ''; + type = listOf package; + }; + + settings = mkOption { + default = { }; + example = { + theme = "TwoDark"; + italic-text = "always"; + paging = "never"; + pager = "less --RAW-CONTROL-CHARS --quit-if-one-screen --mouse"; + map-syntax = [ + "*.ino:C++" + ".ignore:Git Ignore" + ]; + }; + description = '' + Parameters to be written to the system-wide `bat` configuration file. + ''; + inherit type; + }; + }; + + config = mkIf cfg.enable { + environment = { + systemPackages = [ cfg.package ] ++ cfg.extraPackages; + etc."bat/config".source = generate "bat-config" ( + mapAttrs' ( + name: value: + nameValuePair ("--" + name) ( + if (isList value) then map (str: "\"${str}\"") value else "\"${value}\"" + ) + ) cfg.settings + ); + }; + + programs = { + bash = mkIf (!config.programs.fish.enable) { + interactiveShellInit = shellInit "bash"; + }; + fish = mkIf config.programs.fish.enable { + interactiveShellInit = shellInit "fish"; + }; + zsh = mkIf (!config.programs.fish.enable && config.programs.zsh.enable) { + interactiveShellInit = shellInit "zsh"; + }; + }; + }; + meta.maintainers = with maintainers; [ sigmasquadron ]; +} diff --git a/nixos/modules/services/networking/crab-hole.md b/nixos/modules/services/networking/crab-hole.md new file mode 100644 index 000000000000..3226caec2545 --- /dev/null +++ b/nixos/modules/services/networking/crab-hole.md @@ -0,0 +1,215 @@ +# 🦀 crab-hole {#module-services-crab-hole} + +Crab-hole is a cross platform Pi-hole clone written in Rust using [hickory-dns/trust-dns](https://github.com/hickory-dns/hickory-dns). +It can be used as a network wide ad and spy blocker or run on your local PC. + +For a secure and private communication, crab-hole has builtin support for DoH(HTTPS), DoQ(QUIC) and DoT(TLS) for down- and upstreams and DNSSEC for upstreams. +It also comes with privacy friendly default logging settings. + +## Configuration {#module-services-crab-hole-configuration} +As an example config file using Cloudflare as DoT upstream, you can use this [crab-hole.toml](https://github.com/LuckyTurtleDev/crab-hole/blob/main/example-config.toml) + + +The following is a basic nix config using UDP as a downstream and Cloudflare as upstream. + +```nix +{ + services.crab-hole = { + enable = true; + + settings = { + blocklist = { + include_subdomains = true; + lists = [ + "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn/hosts" + "https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt" + ]; + }; + + downstream = [ + { + protocol = "udp"; + listen = "127.0.0.1"; + port = 53; + } + { + protocol = "udp"; + listen = "::1"; + port = 53; + } + ]; + + upstream = { + name_servers = [ + { + socket_addr = "1.1.1.1:853"; + protocol = "tls"; + tls_dns_name = "1dot1dot1dot1.cloudflare-dns.com"; + trust_nx_responses = false; + } + { + socket_addr = "[2606:4700:4700::1111]:853"; + protocol = "tls"; + tls_dns_name = "1dot1dot1dot1.cloudflare-dns.com"; + trust_nx_responses = false; + } + ]; + }; + }; + }; +} +``` + +To test your setup, just query the DNS server with any domain like `example.com`. +To test if a domain gets blocked, just choose one of the domains from the blocklist. +If the server does not return an IP, this worked correctly. + +### Downstream options {#module-services-crab-hole-downstream} +There are multiple protocols which are supported for the downstream: +UDP, TLS, HTTPS and QUIC. +Below you can find a brief overview over the various protocol options together with an example for each protocol. + +#### UDP {#module-services-crab-hole-udp} +UDP is the simplest downstream, but it is not encrypted. +If you want encryption, you need to use another protocol. +***Note:** This also opens a TCP port* +```nix +{ + services.crab-hole.settings.downstream = [ + { + protocol = "udp"; + listen = "localhost"; + port = 53; + } + ]; +} +``` + +#### TLS {#module-services-crab-hole-tls} +TLS is a simple encrypted options to serve DNS. +It comes with similar settings to UDP, +but you additionally need a valid TLS certificate and its private key. +The later are specified via a path to the files. +A valid TLS certificate and private key can be obtained using services like ACME. +Make sure the crab-hole service user has access to these files. +Additionally you can set an optional timeout value. +```nix +{ + services.crab-hole.settings.downstream = [ + { + protocol = "tls"; + listen = "[::]"; + port = 853; + certificate = ./dns.example.com.crt; + key = "/dns.example.com.key"; + # optional (default = 3000) + timeout_ms = 3000 + } + ]; +} +``` + +#### HTTPS {#module-services-crab-hole-https} +HTTPS has similar settings to TLS, with the only difference being the additional `dns_hostname` option. +This protocol might need a reverse proxy if other HTTPS services are to share the same port. +Make sure the service has permissions to access the certificate and key. + +***Note:** this config is untested* +```nix +{ + services.crab-hole.settings.downstream = [ + { + protocol = "https"; + listen = "[::]"; + port = 443; + certificate = ./dns.example.com.crt; + key = "/dns.example.com.key"; + # optional + dns_hostname = "dns.example.com"; + # optional (default = 3000) + timeout_ms = 3000; + } + ]; +} +``` + +#### QUIC {#module-services-crab-hole-quic} +QUIC has identical settings to the HTTPS protocol. +Since by default it doesn't run on the standard HTTPS port, you shouldn't need a reverse proxy. +Make sure the service has permissions to access the certificate and key. +```nix +{ + services.crab-hole.settings.downstream = [ + { + protocol = "quic"; + listen = "127.0.0.1"; + port = 853; + certificate = ./dns.example.com.crt; + key = "/dns.example.com.key"; + # optional + dns_hostname = "dns.example.com"; + # optional (default = 3000) + timeout_ms = 3000; + } + ]; +} +``` + +### Upstream options {#module-services-crab-hole-upstream-options} +You can set additional options of the underlying DNS server. A full list of all the options can be found in the [hickory-dns documentation](https://docs.rs/trust-dns-resolver/0.23.0/trust_dns_resolver/config/struct.ResolverOpts.html). + +This can look like the following example. +```nix +{ + services.crab-hole.settings.upstream.options = { + validate = false; + }; +} +``` + +#### DNSSEC Issues {#module-services-crab-hole-dnssec} +Due to an upstream issue of [hickory-dns](https://github.com/hickory-dns/hickory-dns/issues/2429), sites without DNSSEC will not be resolved if `validate = true`. +Only DNSSEC capable sites will be resolved with this setting. +To prevent this, set `validate = false` or omit the `[upstream.options]`. + +### API {#module-services-crab-hole-api} +The API allows a user to fetch statistic and information about the crab-hole instance. +Basic information is availablee for everyone, while more detailed information is secured by a key, which will be set with the `admin_key` option. + +```nix +{ + services.crab-hole.settings.api = { + listen = "127.0.0.1"; + port = 8080; + # optional (default = false) + show_doc = true; # OpenAPI doc loads content from third party websites + # optional + admin_key = "1234"; + }; +} + +``` + +The documentation can be enabled seperately for the instance with `show_doc`. +This will then create an additional webserver, which hosts the API documentation. +An additional resource is in work in the [crab-hole repository](https://github.com/LuckyTurtleDev/crab-hole). + +## Troubleshooting {#module-services-crab-hole-troubleshooting} +You can check for errors using `systemctl status crab-hole` or `journalctl -xeu crab-hole.service`. + +### Invalid config {#module-services-crab-hole-invalid-config} +Some options of the service are in freeform and not type checked. +This can lead to a config which is not valid or cannot be parsed by crab-hole. +The error message will tell you what config value could not be parsed. +For more information check the [example config](https://github.com/LuckyTurtleDev/crab-hole/blob/main/example-config.toml). + +### Permission Error {#module-services-crab-hole-permission-error} +It can happen that the created certificates for TLS, HTTPS or QUIC are owned by another user or group. +For ACME for example this would be `acme:acme`. +To give the crab-hole service access to these files, the group which owns the certificate can be added as a supplementary group to the service. +For ACME for example: +```nix +{ + services.crab-hole.supplementaryGroups = [ "acme" ]; +} +``` diff --git a/nixos/modules/services/networking/crab-hole.nix b/nixos/modules/services/networking/crab-hole.nix new file mode 100644 index 000000000000..7e68c649ad5b --- /dev/null +++ b/nixos/modules/services/networking/crab-hole.nix @@ -0,0 +1,180 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.services.crab-hole; + + settingsFormat = pkgs.formats.toml { }; + + checkConfig = + file: + pkgs.runCommand "check-config" + { + nativeBuildInputs = [ + cfg.package + pkgs.cacert + pkgs.dig + ]; + } + '' + ln -s ${file} $out + + ln -s ${file} ./config.toml + export CRAB_HOLE_DIR=$(pwd) + + ${lib.getExe cfg.package} validate-config + ''; +in +{ + options = { + services.crab-hole = { + enable = lib.mkEnableOption "Crab-hole Service"; + + package = lib.mkPackageOption pkgs "crab-hole" { }; + + supplementaryGroups = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + example = [ "acme" ]; + description = "Adds additional groups to the crab-hole service. Can be useful to prevent permission issues."; + }; + + settings = lib.mkOption { + description = "Crab-holes config. See big example https://github.com/LuckyTurtleDev/crab-hole/blob/main/example-config.toml"; + + example = { + downstream = [ + { + listen = "localhost"; + port = 8080; + protocol = "udp"; + } + { + certificate = "dns.example.com.crt"; + dns_hostname = "dns.example.com"; + key = "dns.example.com.key"; + listen = "[::]"; + port = 8055; + protocol = "https"; + timeout_ms = 3000; + } + ]; + api = { + admin_key = "1234"; + listen = "127.0.0.1"; + port = 8080; + show_doc = true; + }; + blocklist = { + allow_list = [ + "file:///allowed.txt" + ]; + include_subdomains = true; + lists = [ + "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn/hosts" + "https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt" + "file:///blocked.txt" + ]; + }; + upstream = { + name_servers = [ + { + protocol = "tls"; + socket_addr = "[2606:4700:4700::1111]:853"; + tls_dns_name = "1dot1dot1dot1.cloudflare-dns.com"; + trust_nx_responses = false; + } + { + protocol = "tls"; + socket_addr = "1.1.1.1:853"; + tls_dns_name = "1dot1dot1dot1.cloudflare-dns.com"; + trust_nx_responses = false; + } + ]; + options = { + validate = false; + }; + }; + }; + + type = lib.types.submodule { + freeformType = settingsFormat.type; + options = { + blocklist = + let + listOption = + name: + lib.mkOption { + type = lib.types.listOf (lib.types.either lib.types.str lib.types.path); + default = [ ]; + description = "List of ${name}. If files are added via url, make sure the service has access to them!"; + apply = map (v: if builtins.isPath v then "file://${v}" else v); + }; + in + { + include_subdomains = lib.mkEnableOption "Include subdomains"; + lists = listOption "blocklists"; + allow_list = listOption "allowlists"; + }; + }; + }; + }; + + configFile = lib.mkOption { + type = lib.types.path; + description = '' + The config file of crab-hole. + + If files are added via url, make sure the service has access to them. + Setting this option will override any configuration applied by the settings option. + ''; + }; + }; + }; + + config = lib.mkIf cfg.enable { + # Warning due to DNSSec issue in crab-hole + warnings = lib.optional (cfg.settings.upstream.options.validate or false) '' + Validate options will ONLY allow DNSSec domains. See https://github.com/LuckyTurtleDev/crab-hole/issues/29 + ''; + + services.crab-hole.configFile = lib.mkDefault ( + checkConfig (settingsFormat.generate "crab-hole.toml" cfg.settings) + ); + environment.etc."crab-hole.toml".source = cfg.configFile; + + systemd.services.crab-hole = { + wantedBy = [ "multi-user.target" ]; + after = [ "network-online.target" ]; + wants = [ "network-online.target" ]; + description = "Crab-hole dns server"; + environment.HOME = "/var/lib/crab-hole"; + restartTriggers = [ cfg.configFile ]; + serviceConfig = { + Type = "simple"; + DynamicUser = true; + SupplementaryGroups = cfg.supplementaryGroups; + + StateDirectory = "crab-hole"; + WorkingDirectory = "/var/lib/crab-hole"; + + ExecStart = lib.getExe cfg.package; + + AmbientCapabilities = "CAP_NET_BIND_SERVICE"; + CapabilityBoundingSet = "CAP_NET_BIND_SERVICE"; + + Restart = "on-failure"; + RestartSec = 1; + }; + }; + }; + + meta.maintainers = [ + lib.maintainers.NiklasVousten + ]; + # Readme from upstream + meta.doc = ./crab-hole.md; +} diff --git a/pkgs/by-name/cr/crab-hole/package.nix b/pkgs/by-name/cr/crab-hole/package.nix new file mode 100644 index 000000000000..0ad403277bb4 --- /dev/null +++ b/pkgs/by-name/cr/crab-hole/package.nix @@ -0,0 +1,30 @@ +{ + lib, + fetchFromGitHub, + rustPlatform, +}: + +rustPlatform.buildRustPackage rec { + pname = "crab-hole"; + version = "0.1.10"; + + src = fetchFromGitHub { + owner = "LuckyTurtleDev"; + repo = "crab-hole"; + rev = "refs/tags/v${version}"; + hash = "sha256-OyZ+GkWU+OMnS6X7yk7H1e1MzfQQQkhOkoxUmWn6k7I="; + }; + + cargoHash = "sha256-NeVCGN2ZIyrufa3geO8bbwV7ncenguftnr5SClRZLi8="; + + meta = { + description = "Pi-Hole clone written in Rust using Hickory DNS"; + homepage = "https://github.com/LuckyTurtleDev/crab-hole"; + license = lib.licenses.agpl3Plus; + mainProgram = "crab-hole"; + maintainers = [ + lib.maintainers.NiklasVousten + ]; + platforms = lib.platforms.linux; + }; +} diff --git a/pkgs/by-name/li/libvarlink/package.nix b/pkgs/by-name/li/libvarlink/package.nix index 28a80052def8..fd672aec1e35 100644 --- a/pkgs/by-name/li/libvarlink/package.nix +++ b/pkgs/by-name/li/libvarlink/package.nix @@ -10,13 +10,13 @@ stdenv.mkDerivation (finalAttrs: { pname = "libvarlink"; - version = "23"; + version = "24"; src = fetchFromGitHub { owner = "varlink"; repo = "libvarlink"; rev = finalAttrs.version; - sha256 = "sha256-oUy9HhybNMjRBWoqqal1Mw8cC5RddgN4izxAl0cgnKE="; + sha256 = "sha256-/BWbbDFLxa1da5ewrt3DG/+096dZ+s6p8VdcRGDiEiU="; }; nativeBuildInputs = [ meson ninja python3 ]; diff --git a/pkgs/by-name/pk/pkcs11-provider/package.nix b/pkgs/by-name/pk/pkcs11-provider/package.nix index 334431587708..f27bd11a934d 100644 --- a/pkgs/by-name/pk/pkcs11-provider/package.nix +++ b/pkgs/by-name/pk/pkcs11-provider/package.nix @@ -1,26 +1,60 @@ -{ lib, stdenv, fetchFromGitHub -, openssl, nss, p11-kit -, opensc, gnutls, expect -, meson, ninja, pkg-config -, nix-update-script +{ + lib, + stdenv, + fetchFromGitHub, + openssl, + nss, + p11-kit, + opensc, + gnutls, + expect, + which, + meson, + ninja, + pkg-config, + valgrind, + python3, + nix-update-script, }: +let + pkcs11ProviderPython3 = python3.withPackages (pythonPkgs: with pythonPkgs; [ six ]); +in stdenv.mkDerivation rec { pname = "pkcs11-provider"; - version = "0.5"; + version = "0.6"; src = fetchFromGitHub { owner = "latchset"; repo = "pkcs11-provider"; rev = "v${version}"; - hash = "sha256-ii2xQPBgqIjrAP27qTQR9IXbEGZcc79M/cYzFwcAajQ="; + fetchSubmodules = true; + hash = "sha256-wYqmxxAzraaVR2+mbsRfgyvD/tapn8UOO0UzBX2ZJH4="; }; - buildInputs = [ openssl nss p11-kit ]; - nativeBuildInputs = [ meson ninja pkg-config ]; + buildInputs = [ + openssl + nss + p11-kit + ]; + nativeBuildInputs = [ + meson + ninja + pkg-config + which + ]; # don't add SoftHSM to here: https://github.com/openssl/openssl/issues/22508 - nativeCheckInputs = [ p11-kit.bin opensc nss.tools gnutls openssl.bin expect ]; + nativeCheckInputs = [ + p11-kit.bin + opensc + nss.tools + gnutls + openssl.bin + expect + valgrind + pkcs11ProviderPython3 + ]; postPatch = '' patchShebangs --build . @@ -44,7 +78,10 @@ stdenv.mkDerivation rec { doCheck = true; passthru.updateScript = nix-update-script { - extraArgs = [ "--version-regex" "v(\d\.\d)"]; + extraArgs = [ + "--version-regex" + "v(\d\.\d)" + ]; }; meta = with lib; { diff --git a/pkgs/by-name/ta/tana/package.nix b/pkgs/by-name/ta/tana/package.nix index d13f17f25635..048493af1758 100644 --- a/pkgs/by-name/ta/tana/package.nix +++ b/pkgs/by-name/ta/tana/package.nix @@ -55,7 +55,7 @@ let ]; buildInputs = glLibs ++ libs; runpathPackages = glLibs ++ [ stdenv.cc.cc stdenv.cc.libc ]; - version = "1.0.17"; + version = "1.0.18"; in stdenv.mkDerivation { pname = "tana"; @@ -63,7 +63,7 @@ stdenv.mkDerivation { src = fetchurl { url = "https://github.com/tanainc/tana-desktop-releases/releases/download/v${version}/tana_${version}_amd64.deb"; - hash = "sha256-IgF4VWCp3M6tQBfFAPR9u9UgGFs6f7qU3s94nGYEKkY="; + hash = "sha256-74jQkOTTRfyM7uy74xqx0sYZWy/vndBfLbwjcW8L1D0="; }; nativeBuildInputs = [ diff --git a/pkgs/servers/web-apps/moodle/default.nix b/pkgs/servers/web-apps/moodle/default.nix index fb24592e1625..c1fdf27b7a60 100644 --- a/pkgs/servers/web-apps/moodle/default.nix +++ b/pkgs/servers/web-apps/moodle/default.nix @@ -1,7 +1,7 @@ { lib, stdenv, fetchurl, writeText, plugins ? [ ], nixosTests }: let - version = "4.4.3"; + version = "4.4.4"; versionParts = lib.take 2 (lib.splitVersion version); # 4.2 -> 402, 3.11 -> 311 @@ -15,7 +15,7 @@ in stdenv.mkDerivation rec { src = fetchurl { url = "https://download.moodle.org/download.php/direct/stable${stableVersion}/${pname}-${version}.tgz"; - hash = "sha256-SFysVBGGJKQFzm3pV25+wHaF7R1trqAOFQ1BLBTIzWk="; + hash = "sha256-9ZMQvv0fL6JwUD5ZJnzfzZkiGOfOV9zMc0hX3PKttBw="; }; phpConfig = writeText "config.php" ''