···143 => "/nix/store/am9ml4f4ywvivxnkiaqwr0hyxka1xjsf-mustache-go-1.3.0/bin/mustache"
144 */
145 getExe = x:
146- "${lib.getBin x}/bin/${x.meta.mainProgram or (
147- # This could be turned into an error when 23.05 is at end of life
148- lib.warn "getExe: Package ${lib.strings.escapeNixIdentifier x.meta.name or x.pname or x.name} does not have the meta.mainProgram attribute. We'll assume that the main program has the same name for now, but this behavior is deprecated, because it leads to surprising errors when the assumption does not hold. If the package has a main program, please set `meta.mainProgram` in its definition to make this warning go away. Otherwise, if the package does not have a main program, or if you don't control its definition, specify the full path to the program, such as \"\${lib.getBin foo}/bin/bar\"."
149- lib.getName x
150- )}";
000000000000000151}
···143 => "/nix/store/am9ml4f4ywvivxnkiaqwr0hyxka1xjsf-mustache-go-1.3.0/bin/mustache"
144 */
145 getExe = x:
146+ let
147+ y = x.meta.mainProgram or (
148+ # This could be turned into an error when 23.05 is at end of life
149+ lib.warn "getExe: Package ${lib.strings.escapeNixIdentifier x.meta.name or x.pname or x.name} does not have the meta.mainProgram attribute. We'll assume that the main program has the same name for now, but this behavior is deprecated, because it leads to surprising errors when the assumption does not hold. If the package has a main program, please set `meta.mainProgram` in its definition to make this warning go away. Otherwise, if the package does not have a main program, or if you don't control its definition, use getExe' to specify the name to the program, such as lib.getExe' foo \"bar\"."
150+ lib.getName
151+ x
152+ );
153+ in
154+ getExe' x y;
155+156+ /* Get the path of a program of a derivation.
157+158+ Type: getExe' :: derivation -> string -> string
159+ Example:
160+ getExe' pkgs.hello "hello"
161+ => "/nix/store/g124820p9hlv4lj8qplzxw1c44dxaw1k-hello-2.12/bin/hello"
162+ getExe' pkgs.imagemagick "convert"
163+ => "/nix/store/5rs48jamq7k6sal98ymj9l4k2bnwq515-imagemagick-7.1.1-15/bin/convert"
164+ */
165+ getExe' = x: y: "${lib.getBin x}/bin/${y}";
166}
+2-2
lib/strings.nix
···629 This behavior is deprecated and will throw an error in the future.''
630 (let
631 preLen = stringLength prefix;
632- sLen = stringLength str;
633 in
634 if substring 0 preLen str == prefix then
635- substring preLen (sLen - preLen) str
0636 else
637 str);
638
···629 This behavior is deprecated and will throw an error in the future.''
630 (let
631 preLen = stringLength prefix;
0632 in
633 if substring 0 preLen str == prefix then
634+ # -1 will take the string until the end
635+ substring preLen (-1) str
636 else
637 str);
638
···118Hence [garbage collection](#sec-nix-gc) will remove that file and you
119will wind up with a broken symlink in your systemd configuration, which
120in turn will not make the service / timer start on login.
000000000000000000000000000000
···118Hence [garbage collection](#sec-nix-gc) will remove that file and you
119will wind up with a broken symlink in your systemd configuration, which
120in turn will not make the service / timer start on login.
121+122+## Template units {#sect-nixos-systemd-template-units}
123+124+systemd supports templated units where a base unit can be started multiple
125+times with a different parameter. The syntax to accomplish this is
126+`service-name@instance-name.service`. Units get the instance name passed to
127+them (see `systemd.unit(5)`). NixOS has support for these kinds of units and
128+for template-specific overrides. A service needs to be defined twice, once
129+for the base unit and once for the instance. All instances must include
130+`overrideStrategy = "asDropin"` for the change detection to work. This
131+example illustrates this:
132+```nix
133+{
134+ systemd.services = {
135+ "base-unit@".serviceConfig = {
136+ ExecStart = "...";
137+ User = "...";
138+ };
139+ "base-unit@instance-a" = {
140+ overrideStrategy = "asDropin"; # needed for templates to work
141+ wantedBy = [ "multi-user.target" ]; # causes NixOS to manage the instance
142+ };
143+ "base-unit@instance-b" = {
144+ overrideStrategy = "asDropin"; # needed for templates to work
145+ wantedBy = [ "multi-user.target" ]; # causes NixOS to manage the instance
146+ serviceConfig.User = "root"; # also override something for this specific instance
147+ };
148+ };
149+}
150+```
+6-11
nixos/modules/services/networking/haproxy.nix
···17 options = {
18 services.haproxy = {
1920- enable = mkOption {
21- type = types.bool;
22- default = false;
23- description = lib.mdDoc ''
24- Whether to enable HAProxy, the reliable, high performance TCP/HTTP
25- load balancer.
26- '';
27- };
2829 user = mkOption {
30 type = types.str;
···70 ExecStartPre = [
71 # when the master process receives USR2, it reloads itself using exec(argv[0]),
72 # so we create a symlink there and update it before reloading
73- "${pkgs.coreutils}/bin/ln -sf ${pkgs.haproxy}/sbin/haproxy /run/haproxy/haproxy"
74 # when running the config test, don't be quiet so we can see what goes wrong
75 "/run/haproxy/haproxy -c -f ${haproxyCfg}"
76 ];
77 ExecStart = "/run/haproxy/haproxy -Ws -f /etc/haproxy.cfg -p /run/haproxy/haproxy.pid";
78 # support reloading
79 ExecReload = [
80- "${pkgs.haproxy}/sbin/haproxy -c -f ${haproxyCfg}"
81- "${pkgs.coreutils}/bin/ln -sf ${pkgs.haproxy}/sbin/haproxy /run/haproxy/haproxy"
82 "${pkgs.coreutils}/bin/kill -USR2 $MAINPID"
83 ];
84 KillMode = "mixed";
···17 options = {
18 services.haproxy = {
1920+ enable = mkEnableOption (lib.mdDoc "HAProxy, the reliable, high performance TCP/HTTP load balancer.");
21+22+ package = mkPackageOptionMD pkgs "haproxy" { };
000002324 user = mkOption {
25 type = types.str;
···65 ExecStartPre = [
66 # when the master process receives USR2, it reloads itself using exec(argv[0]),
67 # so we create a symlink there and update it before reloading
68+ "${pkgs.coreutils}/bin/ln -sf ${lib.getExe cfg.package} /run/haproxy/haproxy"
69 # when running the config test, don't be quiet so we can see what goes wrong
70 "/run/haproxy/haproxy -c -f ${haproxyCfg}"
71 ];
72 ExecStart = "/run/haproxy/haproxy -Ws -f /etc/haproxy.cfg -p /run/haproxy/haproxy.pid";
73 # support reloading
74 ExecReload = [
75+ "${lib.getExe cfg.package} -c -f ${haproxyCfg}"
76+ "${pkgs.coreutils}/bin/ln -sf ${lib.getExe cfg.package} /run/haproxy/haproxy"
77 "${pkgs.coreutils}/bin/kill -USR2 $MAINPID"
78 ];
79 KillMode = "mixed";
···253# If a directory with the same basename ending in .d exists next to the unit file, it will be
254# assumed to contain override files which will be parsed as well and handled properly.
255sub parse_unit {
256- my ($unit_path) = @_;
257258 # Parse the main unit and all overrides
259 my %unit_data;
260 # Replace \ with \\ so glob() still works with units that have a \ in them
261 # Valid characters in unit names are ASCII letters, digits, ":", "-", "_", ".", and "\"
0262 $unit_path =~ s/\\/\\\\/gmsx;
263- foreach (glob("${unit_path}{,.d/*.conf}")) {
0264 parse_systemd_ini(\%unit_data, "$_")
000000265 }
266 return %unit_data;
267}
···423# Called when a unit exists in both the old systemd and the new system and the units
424# differ. This figures out of what units are to be stopped, restarted, reloaded, started, and skipped.
425sub handle_modified_unit { ## no critic(Subroutines::ProhibitManyArgs, Subroutines::ProhibitExcessComplexity)
426- my ($unit, $base_name, $new_unit_file, $new_unit_info, $active_cur, $units_to_stop, $units_to_start, $units_to_reload, $units_to_restart, $units_to_skip) = @_;
427428 if ($unit eq "sysinit.target" || $unit eq "basic.target" || $unit eq "multi-user.target" || $unit eq "graphical.target" || $unit =~ /\.path$/msx || $unit =~ /\.slice$/msx) {
429 # Do nothing. These cannot be restarted directly.
···442 # Revert of the attempt: https://github.com/NixOS/nixpkgs/pull/147609
443 # More details: https://github.com/NixOS/nixpkgs/issues/74899#issuecomment-981142430
444 } else {
445- my %new_unit_info = $new_unit_info ? %{$new_unit_info} : parse_unit($new_unit_file);
446 if (parse_systemd_bool(\%new_unit_info, "Service", "X-ReloadIfChanged", 0) and not $units_to_restart->{$unit} and not $units_to_stop->{$unit}) {
447 $units_to_reload->{$unit} = 1;
448 record_unit($reload_list_file, $unit);
···538539my $active_cur = get_active_units();
540while (my ($unit, $state) = each(%{$active_cur})) {
000541 my $base_unit = $unit;
542-543- my $cur_unit_file = "/etc/systemd/system/$base_unit";
544- my $new_unit_file = "$toplevel/etc/systemd/system/$base_unit";
545546 # Detect template instances.
547 if (!-e $cur_unit_file && !-e $new_unit_file && $unit =~ /^(.*)@[^\.]*\.(.*)$/msx) {
548 $base_unit = "$1\@.$2";
549- $cur_unit_file = "/etc/systemd/system/$base_unit";
550- $new_unit_file = "$toplevel/etc/systemd/system/$base_unit";
551 }
552553 my $base_name = $base_unit;
554 $base_name =~ s/\.[[:lower:]]*$//msx;
555556- if (-e $cur_unit_file && ($state->{state} eq "active" || $state->{state} eq "activating")) {
557- if (! -e $new_unit_file || abs_path($new_unit_file) eq "/dev/null") {
558- my %cur_unit_info = parse_unit($cur_unit_file);
559 if (parse_systemd_bool(\%cur_unit_info, "Unit", "X-StopOnRemoval", 1)) {
560 $units_to_stop{$unit} = 1;
561 }
562 }
563564 elsif ($unit =~ /\.target$/msx) {
565- my %new_unit_info = parse_unit($new_unit_file);
566567 # Cause all active target units to be restarted below.
568 # This should start most changed units we stop here as
···596 }
597598 else {
599- my %cur_unit_info = parse_unit($cur_unit_file);
600- my %new_unit_info = parse_unit($new_unit_file);
601 my $diff = compare_units(\%cur_unit_info, \%new_unit_info);
602 if ($diff == 1) {
603- handle_modified_unit($unit, $base_name, $new_unit_file, \%new_unit_info, $active_cur, \%units_to_stop, \%units_to_start, \%units_to_reload, \%units_to_restart, \%units_to_skip);
604 } elsif ($diff == 2 and not $units_to_restart{$unit}) {
605 $units_to_reload{$unit} = 1;
606 record_unit($reload_list_file, $unit);
···710 # Handle the activation script requesting the restart or reload of a unit.
711 foreach (split(/\n/msx, read_file($dry_restart_by_activation_file, err_mode => "quiet") // "")) {
712 my $unit = $_;
0713 my $base_unit = $unit;
714- my $new_unit_file = "$toplevel/etc/systemd/system/$base_unit";
715716 # Detect template instances.
717 if (!-e $new_unit_file && $unit =~ /^(.*)@[^\.]*\.(.*)$/msx) {
718 $base_unit = "$1\@.$2";
719- $new_unit_file = "$toplevel/etc/systemd/system/$base_unit";
720 }
721722 my $base_name = $base_unit;
···728 next;
729 }
730731- handle_modified_unit($unit, $base_name, $new_unit_file, undef, $active_cur, \%units_to_restart, \%units_to_restart, \%units_to_reload, \%units_to_restart, \%units_to_skip);
732 }
733 unlink($dry_restart_by_activation_file);
734···782# Handle the activation script requesting the restart or reload of a unit.
783foreach (split(/\n/msx, read_file($restart_by_activation_file, err_mode => "quiet") // "")) {
784 my $unit = $_;
0785 my $base_unit = $unit;
786- my $new_unit_file = "$toplevel/etc/systemd/system/$base_unit";
787788 # Detect template instances.
789 if (!-e $new_unit_file && $unit =~ /^(.*)@[^\.]*\.(.*)$/msx) {
790 $base_unit = "$1\@.$2";
791- $new_unit_file = "$toplevel/etc/systemd/system/$base_unit";
792 }
793794 my $base_name = $base_unit;
···801 next;
802 }
803804- handle_modified_unit($unit, $base_name, $new_unit_file, undef, $active_cur, \%units_to_restart, \%units_to_restart, \%units_to_reload, \%units_to_restart, \%units_to_skip);
805}
806# We can remove the file now because it has been propagated to the other restart/reload files
807unlink($restart_by_activation_file);
···859 for my $unit (keys(%units_to_reload)) {
860 if (!unit_is_active($unit)) {
861 # Figure out if we need to start the unit
862- my %unit_info = parse_unit("$toplevel/etc/systemd/system/$unit");
863 if (!(parse_systemd_bool(\%unit_info, "Unit", "RefuseManualStart", 0) || parse_systemd_bool(\%unit_info, "Unit", "X-OnlyManualStart", 0))) {
864 $units_to_start{$unit} = 1;
865 record_unit($start_list_file, $unit);
···253# If a directory with the same basename ending in .d exists next to the unit file, it will be
254# assumed to contain override files which will be parsed as well and handled properly.
255sub parse_unit {
256+ my ($unit_path, $base_unit_path) = @_;
257258 # Parse the main unit and all overrides
259 my %unit_data;
260 # Replace \ with \\ so glob() still works with units that have a \ in them
261 # Valid characters in unit names are ASCII letters, digits, ":", "-", "_", ".", and "\"
262+ $base_unit_path =~ s/\\/\\\\/gmsx;
263 $unit_path =~ s/\\/\\\\/gmsx;
264+265+ foreach (glob("${base_unit_path}{,.d/*.conf}")) {
266 parse_systemd_ini(\%unit_data, "$_")
267+ }
268+ # Handle drop-in template-unit instance overrides
269+ if ($unit_path ne $base_unit_path) {
270+ foreach (glob("${unit_path}.d/*.conf")) {
271+ parse_systemd_ini(\%unit_data, "$_")
272+ }
273 }
274 return %unit_data;
275}
···431# Called when a unit exists in both the old systemd and the new system and the units
432# differ. This figures out of what units are to be stopped, restarted, reloaded, started, and skipped.
433sub handle_modified_unit { ## no critic(Subroutines::ProhibitManyArgs, Subroutines::ProhibitExcessComplexity)
434+ my ($unit, $base_name, $new_unit_file, $new_base_unit_file, $new_unit_info, $active_cur, $units_to_stop, $units_to_start, $units_to_reload, $units_to_restart, $units_to_skip) = @_;
435436 if ($unit eq "sysinit.target" || $unit eq "basic.target" || $unit eq "multi-user.target" || $unit eq "graphical.target" || $unit =~ /\.path$/msx || $unit =~ /\.slice$/msx) {
437 # Do nothing. These cannot be restarted directly.
···450 # Revert of the attempt: https://github.com/NixOS/nixpkgs/pull/147609
451 # More details: https://github.com/NixOS/nixpkgs/issues/74899#issuecomment-981142430
452 } else {
453+ my %new_unit_info = $new_unit_info ? %{$new_unit_info} : parse_unit($new_unit_file, $new_base_unit_file);
454 if (parse_systemd_bool(\%new_unit_info, "Service", "X-ReloadIfChanged", 0) and not $units_to_restart->{$unit} and not $units_to_stop->{$unit}) {
455 $units_to_reload->{$unit} = 1;
456 record_unit($reload_list_file, $unit);
···546547my $active_cur = get_active_units();
548while (my ($unit, $state) = each(%{$active_cur})) {
549+ my $cur_unit_file = "/etc/systemd/system/$unit";
550+ my $new_unit_file = "$toplevel/etc/systemd/system/$unit";
551+552 my $base_unit = $unit;
553+ my $cur_base_unit_file = $cur_unit_file;
554+ my $new_base_unit_file = $new_unit_file;
0555556 # Detect template instances.
557 if (!-e $cur_unit_file && !-e $new_unit_file && $unit =~ /^(.*)@[^\.]*\.(.*)$/msx) {
558 $base_unit = "$1\@.$2";
559+ $cur_base_unit_file = "/etc/systemd/system/$base_unit";
560+ $new_base_unit_file = "$toplevel/etc/systemd/system/$base_unit";
561 }
562563 my $base_name = $base_unit;
564 $base_name =~ s/\.[[:lower:]]*$//msx;
565566+ if (-e $cur_base_unit_file && ($state->{state} eq "active" || $state->{state} eq "activating")) {
567+ if (! -e $new_base_unit_file || abs_path($new_base_unit_file) eq "/dev/null") {
568+ my %cur_unit_info = parse_unit($cur_unit_file, $cur_base_unit_file);
569 if (parse_systemd_bool(\%cur_unit_info, "Unit", "X-StopOnRemoval", 1)) {
570 $units_to_stop{$unit} = 1;
571 }
572 }
573574 elsif ($unit =~ /\.target$/msx) {
575+ my %new_unit_info = parse_unit($new_unit_file, $new_base_unit_file);
576577 # Cause all active target units to be restarted below.
578 # This should start most changed units we stop here as
···606 }
607608 else {
609+ my %cur_unit_info = parse_unit($cur_unit_file, $cur_base_unit_file);
610+ my %new_unit_info = parse_unit($new_unit_file, $new_base_unit_file);
611 my $diff = compare_units(\%cur_unit_info, \%new_unit_info);
612 if ($diff == 1) {
613+ handle_modified_unit($unit, $base_name, $new_unit_file, $new_base_unit_file, \%new_unit_info, $active_cur, \%units_to_stop, \%units_to_start, \%units_to_reload, \%units_to_restart, \%units_to_skip);
614 } elsif ($diff == 2 and not $units_to_restart{$unit}) {
615 $units_to_reload{$unit} = 1;
616 record_unit($reload_list_file, $unit);
···720 # Handle the activation script requesting the restart or reload of a unit.
721 foreach (split(/\n/msx, read_file($dry_restart_by_activation_file, err_mode => "quiet") // "")) {
722 my $unit = $_;
723+ my $new_unit_file = "$toplevel/etc/systemd/system/$unit";
724 my $base_unit = $unit;
725+ my $new_base_unit_file = $new_unit_file;
726727 # Detect template instances.
728 if (!-e $new_unit_file && $unit =~ /^(.*)@[^\.]*\.(.*)$/msx) {
729 $base_unit = "$1\@.$2";
730+ $new_base_unit_file = "$toplevel/etc/systemd/system/$base_unit";
731 }
732733 my $base_name = $base_unit;
···739 next;
740 }
741742+ handle_modified_unit($unit, $base_name, $new_unit_file, $new_base_unit_file, undef, $active_cur, \%units_to_restart, \%units_to_restart, \%units_to_reload, \%units_to_restart, \%units_to_skip);
743 }
744 unlink($dry_restart_by_activation_file);
745···793# Handle the activation script requesting the restart or reload of a unit.
794foreach (split(/\n/msx, read_file($restart_by_activation_file, err_mode => "quiet") // "")) {
795 my $unit = $_;
796+ my $new_unit_file = "$toplevel/etc/systemd/system/$unit";
797 my $base_unit = $unit;
798+ my $new_base_unit_file = $new_unit_file;
799800 # Detect template instances.
801 if (!-e $new_unit_file && $unit =~ /^(.*)@[^\.]*\.(.*)$/msx) {
802 $base_unit = "$1\@.$2";
803+ $new_base_unit_file = "$toplevel/etc/systemd/system/$base_unit";
804 }
805806 my $base_name = $base_unit;
···813 next;
814 }
815816+ handle_modified_unit($unit, $base_name, $new_unit_file, $new_base_unit_file, undef, $active_cur, \%units_to_restart, \%units_to_restart, \%units_to_reload, \%units_to_restart, \%units_to_skip);
817}
818# We can remove the file now because it has been propagated to the other restart/reload files
819unlink($restart_by_activation_file);
···871 for my $unit (keys(%units_to_reload)) {
872 if (!unit_is_active($unit)) {
873 # Figure out if we need to start the unit
874+ my %unit_info = parse_unit("$toplevel/etc/systemd/system/$unit", "$toplevel/etc/systemd/system/$unit");
875 if (!(parse_systemd_bool(\%unit_info, "Unit", "RefuseManualStart", 0) || parse_systemd_bool(\%unit_info, "Unit", "X-OnlyManualStart", 0))) {
876 $units_to_start{$unit} = 1;
877 record_unit($start_list_file, $unit);
···1# Test configuration switching.
23-import ./make-test-python.nix ({ pkgs, ...} : let
45 # Simple service that can either be socket-activated or that will
6 # listen on port 1234 if not socket-activated.
···279 systemd.services.test-service.unitConfig.RefuseManualStart = true;
280 };
2810000000000000000000000282 restart-and-reload-by-activation-script.configuration = {
283 systemd.services = rec {
284 simple-service = {
···290 ExecReload = "${pkgs.coreutils}/bin/true";
291 };
292 };
00293294 simple-restart-service = simple-service // {
295 stopIfChanged = false;
296 };
00297298 simple-reload-service = simple-service // {
299 reloadIfChanged = true;
300 };
00301302 no-restart-service = simple-service // {
303 restartIfChanged = false;
304 };
00305306 reload-triggers = simple-service // {
307 wantedBy = [ "multi-user.target" ];
308 };
00000309310 reload-triggers-and-restart-by-as = simple-service;
00311312 reload-triggers-and-restart = simple-service // {
313 stopIfChanged = false; # easier to check for this
314 wantedBy = [ "multi-user.target" ];
315 };
000000316 };
317318 system.activationScripts.restart-and-reload-test = {
···332 simple-reload-service.service
333 no-restart-service.service
334 reload-triggers-and-restart-by-as.service
00000335 EOF
336337 cat <<EOF >> "$g"
338 reload-triggers.service
339 reload-triggers-and-restart-by-as.service
340 reload-triggers-and-restart.service
000341 EOF
342 '';
343 };
···346 restart-and-reload-by-activation-script-modified.configuration = {
347 imports = [ restart-and-reload-by-activation-script.configuration ];
348 systemd.services.reload-triggers-and-restart.serviceConfig.X-Modified = "test";
0000349 };
350351 simple-socket.configuration = {
···507 set -o pipefail
508 exec env -i "$@" | tee /dev/stderr
509 '';
0000510 in /* python */ ''
511 def switch_to_specialisation(system, name, action="test", fail=False):
512 if name == "":
···733 assert_contains(out, "\nstarting the following units: required-service.service\n")
734 assert_lacks(out, "the following new units were started:")
7350000000000736 with subtest("failing units"):
737 # Let the simple service fail
738 switch_to_specialisation("${machine}", "simpleServiceModified")
···896 assert_lacks(out, "NOT restarting the following changed units:")
897 assert_lacks(out, "reloading the following units:")
898 assert_lacks(out, "restarting the following units:")
899- assert_contains(out, "\nstarting the following units: no-restart-service.service, reload-triggers-and-restart-by-as.service, simple-reload-service.service, simple-restart-service.service, simple-service.service\n")
900- assert_contains(out, "the following new units were started: no-restart-service.service, reload-triggers-and-restart-by-as.service, reload-triggers-and-restart.service, reload-triggers.service, simple-reload-service.service, simple-restart-service.service, simple-service.service\n")
000000000000000000000000000000000901 # Switch to the same system where the example services get restarted
902 # and reloaded by the activation script
903 out = switch_to_specialisation("${machine}", "restart-and-reload-by-activation-script")
904 assert_lacks(out, "stopping the following units:")
905 assert_lacks(out, "NOT restarting the following changed units:")
906- assert_contains(out, "reloading the following units: reload-triggers-and-restart.service, reload-triggers.service, simple-reload-service.service\n")
907- assert_contains(out, "restarting the following units: reload-triggers-and-restart-by-as.service, simple-restart-service.service, simple-service.service\n")
00000000000000908 assert_lacks(out, "\nstarting the following units:")
909 assert_lacks(out, "the following new units were started:")
910 # Switch to the same system and see if the service gets restarted when it's modified
···912 out = switch_to_specialisation("${machine}", "restart-and-reload-by-activation-script-modified")
913 assert_lacks(out, "stopping the following units:")
914 assert_lacks(out, "NOT restarting the following changed units:")
915- assert_contains(out, "reloading the following units: reload-triggers.service, simple-reload-service.service\n")
916- assert_contains(out, "restarting the following units: reload-triggers-and-restart-by-as.service, reload-triggers-and-restart.service, simple-restart-service.service, simple-service.service\n")
00000000000000917 assert_lacks(out, "\nstarting the following units:")
918 assert_lacks(out, "the following new units were started:")
919 # The same, but in dry mode
920 out = switch_to_specialisation("${machine}", "restart-and-reload-by-activation-script", action="dry-activate")
921 assert_lacks(out, "would stop the following units:")
922 assert_lacks(out, "would NOT stop the following changed units:")
923- assert_contains(out, "would reload the following units: reload-triggers.service, simple-reload-service.service\n")
924- assert_contains(out, "would restart the following units: reload-triggers-and-restart-by-as.service, reload-triggers-and-restart.service, simple-restart-service.service, simple-service.service\n")
00000000000000925 assert_lacks(out, "\nwould start the following units:")
926927 with subtest("socket-activated services"):
···1# Test configuration switching.
23+import ./make-test-python.nix ({ lib, pkgs, ...} : let
45 # Simple service that can either be socket-activated or that will
6 # listen on port 1234 if not socket-activated.
···279 systemd.services.test-service.unitConfig.RefuseManualStart = true;
280 };
281282+ unitWithTemplate.configuration = {
283+ systemd.services."instantiated@".serviceConfig = {
284+ Type = "oneshot";
285+ RemainAfterExit = true;
286+ ExecStart = "${pkgs.coreutils}/bin/true";
287+ ExecReload = "${pkgs.coreutils}/bin/true";
288+ };
289+ systemd.services."instantiated@one" = {
290+ wantedBy = [ "multi-user.target" ];
291+ overrideStrategy = "asDropin";
292+ };
293+ systemd.services."instantiated@two" = {
294+ wantedBy = [ "multi-user.target" ];
295+ overrideStrategy = "asDropin";
296+ };
297+ };
298+299+ unitWithTemplateModified.configuration = {
300+ imports = [ unitWithTemplate.configuration ];
301+ systemd.services."instantiated@".serviceConfig.X-Test = "test";
302+ };
303+304 restart-and-reload-by-activation-script.configuration = {
305 systemd.services = rec {
306 simple-service = {
···312 ExecReload = "${pkgs.coreutils}/bin/true";
313 };
314 };
315+ "templated-simple-service@" = simple-service;
316+ "templated-simple-service@instance".overrideStrategy = "asDropin";
317318 simple-restart-service = simple-service // {
319 stopIfChanged = false;
320 };
321+ "templated-simple-restart-service@" = simple-restart-service;
322+ "templated-simple-restart-service@instance".overrideStrategy = "asDropin";
323324 simple-reload-service = simple-service // {
325 reloadIfChanged = true;
326 };
327+ "templated-simple-reload-service@" = simple-reload-service;
328+ "templated-simple-reload-service@instance".overrideStrategy = "asDropin";
329330 no-restart-service = simple-service // {
331 restartIfChanged = false;
332 };
333+ "templated-no-restart-service@" = no-restart-service;
334+ "templated-no-restart-service@instance".overrideStrategy = "asDropin";
335336 reload-triggers = simple-service // {
337 wantedBy = [ "multi-user.target" ];
338 };
339+ "templated-reload-triggers@" = simple-service;
340+ "templated-reload-triggers@instance" = {
341+ overrideStrategy = "asDropin";
342+ wantedBy = [ "multi-user.target" ];
343+ };
344345 reload-triggers-and-restart-by-as = simple-service;
346+ "templated-reload-triggers-and-restart-by-as@" = reload-triggers-and-restart-by-as;
347+ "templated-reload-triggers-and-restart-by-as@instance".overrideStrategy = "asDropin";
348349 reload-triggers-and-restart = simple-service // {
350 stopIfChanged = false; # easier to check for this
351 wantedBy = [ "multi-user.target" ];
352 };
353+ "templated-reload-triggers-and-restart@" = simple-service;
354+ "templated-reload-triggers-and-restart@instance" = {
355+ overrideStrategy = "asDropin";
356+ stopIfChanged = false; # easier to check for this
357+ wantedBy = [ "multi-user.target" ];
358+ };
359 };
360361 system.activationScripts.restart-and-reload-test = {
···375 simple-reload-service.service
376 no-restart-service.service
377 reload-triggers-and-restart-by-as.service
378+ templated-simple-service@instance.service
379+ templated-simple-restart-service@instance.service
380+ templated-simple-reload-service@instance.service
381+ templated-no-restart-service@instance.service
382+ templated-reload-triggers-and-restart-by-as@instance.service
383 EOF
384385 cat <<EOF >> "$g"
386 reload-triggers.service
387 reload-triggers-and-restart-by-as.service
388 reload-triggers-and-restart.service
389+ templated-reload-triggers@instance.service
390+ templated-reload-triggers-and-restart-by-as@instance.service
391+ templated-reload-triggers-and-restart@instance.service
392 EOF
393 '';
394 };
···397 restart-and-reload-by-activation-script-modified.configuration = {
398 imports = [ restart-and-reload-by-activation-script.configuration ];
399 systemd.services.reload-triggers-and-restart.serviceConfig.X-Modified = "test";
400+ systemd.services."templated-reload-triggers-and-restart@instance" = {
401+ overrideStrategy = "asDropin";
402+ serviceConfig.X-Modified = "test";
403+ };
404 };
405406 simple-socket.configuration = {
···562 set -o pipefail
563 exec env -i "$@" | tee /dev/stderr
564 '';
565+566+ # Returns a comma separated representation of the given list in sorted
567+ # order, that matches the output format of switch-to-configuration.pl
568+ sortedUnits = xs: lib.concatStringsSep ", " (builtins.sort builtins.lessThan xs);
569 in /* python */ ''
570 def switch_to_specialisation(system, name, action="test", fail=False):
571 if name == "":
···792 assert_contains(out, "\nstarting the following units: required-service.service\n")
793 assert_lacks(out, "the following new units were started:")
794795+ # Ensure templated units are restarted when the base unit changes
796+ switch_to_specialisation("${machine}", "unitWithTemplate")
797+ out = switch_to_specialisation("${machine}", "unitWithTemplateModified")
798+ assert_contains(out, "stopping the following units: instantiated@one.service, instantiated@two.service\n")
799+ assert_lacks(out, "NOT restarting the following changed units:")
800+ assert_lacks(out, "reloading the following units:")
801+ assert_lacks(out, "\nrestarting the following units:")
802+ assert_contains(out, "\nstarting the following units: instantiated@one.service, instantiated@two.service\n")
803+ assert_lacks(out, "the following new units were started:")
804+805 with subtest("failing units"):
806 # Let the simple service fail
807 switch_to_specialisation("${machine}", "simpleServiceModified")
···965 assert_lacks(out, "NOT restarting the following changed units:")
966 assert_lacks(out, "reloading the following units:")
967 assert_lacks(out, "restarting the following units:")
968+ assert_contains(out, "\nstarting the following units: ${sortedUnits [
969+ "no-restart-service.service"
970+ "reload-triggers-and-restart-by-as.service"
971+ "simple-reload-service.service"
972+ "simple-restart-service.service"
973+ "simple-service.service"
974+ "templated-no-restart-service@instance.service"
975+ "templated-reload-triggers-and-restart-by-as@instance.service"
976+ "templated-simple-reload-service@instance.service"
977+ "templated-simple-restart-service@instance.service"
978+ "templated-simple-service@instance.service"
979+ ]}\n")
980+ assert_contains(out, "the following new units were started: ${sortedUnits [
981+ "no-restart-service.service"
982+ "reload-triggers-and-restart-by-as.service"
983+ "reload-triggers-and-restart.service"
984+ "reload-triggers.service"
985+ "simple-reload-service.service"
986+ "simple-restart-service.service"
987+ "simple-service.service"
988+ "system-templated\\\\x2dno\\\\x2drestart\\\\x2dservice.slice"
989+ "system-templated\\\\x2dreload\\\\x2dtriggers.slice"
990+ "system-templated\\\\x2dreload\\\\x2dtriggers\\\\x2dand\\\\x2drestart.slice"
991+ "system-templated\\\\x2dreload\\\\x2dtriggers\\\\x2dand\\\\x2drestart\\\\x2dby\\\\x2das.slice"
992+ "system-templated\\\\x2dsimple\\\\x2dreload\\\\x2dservice.slice"
993+ "system-templated\\\\x2dsimple\\\\x2drestart\\\\x2dservice.slice"
994+ "system-templated\\\\x2dsimple\\\\x2dservice.slice"
995+ "templated-no-restart-service@instance.service"
996+ "templated-reload-triggers-and-restart-by-as@instance.service"
997+ "templated-reload-triggers-and-restart@instance.service"
998+ "templated-reload-triggers@instance.service"
999+ "templated-simple-reload-service@instance.service"
1000+ "templated-simple-restart-service@instance.service"
1001+ "templated-simple-service@instance.service"
1002+ ]}\n")
1003 # Switch to the same system where the example services get restarted
1004 # and reloaded by the activation script
1005 out = switch_to_specialisation("${machine}", "restart-and-reload-by-activation-script")
1006 assert_lacks(out, "stopping the following units:")
1007 assert_lacks(out, "NOT restarting the following changed units:")
1008+ assert_contains(out, "reloading the following units: ${sortedUnits [
1009+ "reload-triggers-and-restart.service"
1010+ "reload-triggers.service"
1011+ "simple-reload-service.service"
1012+ "templated-reload-triggers-and-restart@instance.service"
1013+ "templated-reload-triggers@instance.service"
1014+ "templated-simple-reload-service@instance.service"
1015+ ]}\n")
1016+ assert_contains(out, "restarting the following units: ${sortedUnits [
1017+ "reload-triggers-and-restart-by-as.service"
1018+ "simple-restart-service.service"
1019+ "simple-service.service"
1020+ "templated-reload-triggers-and-restart-by-as@instance.service"
1021+ "templated-simple-restart-service@instance.service"
1022+ "templated-simple-service@instance.service"
1023+ ]}\n")
1024 assert_lacks(out, "\nstarting the following units:")
1025 assert_lacks(out, "the following new units were started:")
1026 # Switch to the same system and see if the service gets restarted when it's modified
···1028 out = switch_to_specialisation("${machine}", "restart-and-reload-by-activation-script-modified")
1029 assert_lacks(out, "stopping the following units:")
1030 assert_lacks(out, "NOT restarting the following changed units:")
1031+ assert_contains(out, "reloading the following units: ${sortedUnits [
1032+ "reload-triggers.service"
1033+ "simple-reload-service.service"
1034+ "templated-reload-triggers@instance.service"
1035+ "templated-simple-reload-service@instance.service"
1036+ ]}\n")
1037+ assert_contains(out, "restarting the following units: ${sortedUnits [
1038+ "reload-triggers-and-restart-by-as.service"
1039+ "reload-triggers-and-restart.service"
1040+ "simple-restart-service.service"
1041+ "simple-service.service"
1042+ "templated-reload-triggers-and-restart-by-as@instance.service"
1043+ "templated-reload-triggers-and-restart@instance.service"
1044+ "templated-simple-restart-service@instance.service"
1045+ "templated-simple-service@instance.service"
1046+ ]}\n")
1047 assert_lacks(out, "\nstarting the following units:")
1048 assert_lacks(out, "the following new units were started:")
1049 # The same, but in dry mode
1050 out = switch_to_specialisation("${machine}", "restart-and-reload-by-activation-script", action="dry-activate")
1051 assert_lacks(out, "would stop the following units:")
1052 assert_lacks(out, "would NOT stop the following changed units:")
1053+ assert_contains(out, "would reload the following units: ${sortedUnits [
1054+ "reload-triggers.service"
1055+ "simple-reload-service.service"
1056+ "templated-reload-triggers@instance.service"
1057+ "templated-simple-reload-service@instance.service"
1058+ ]}\n")
1059+ assert_contains(out, "would restart the following units: ${sortedUnits [
1060+ "reload-triggers-and-restart-by-as.service"
1061+ "reload-triggers-and-restart.service"
1062+ "simple-restart-service.service"
1063+ "simple-service.service"
1064+ "templated-reload-triggers-and-restart-by-as@instance.service"
1065+ "templated-reload-triggers-and-restart@instance.service"
1066+ "templated-simple-restart-service@instance.service"
1067+ "templated-simple-service@instance.service"
1068+ ]}\n")
1069 assert_lacks(out, "\nwould start the following units:")
10701071 with subtest("socket-activated services"):
+1-1
nixos/tests/web-servers/agate.nix
···20 geminiserver.wait_for_open_port(1965)
2122 with subtest("check is serving over gemini"):
23- response = geminiserver.succeed("${pkgs.gmni}/bin/gmni -j once -i -N gemini://localhost:1965")
24 print(response)
25 assert "Hello NixOS!" in response
26 '';
···20 geminiserver.wait_for_open_port(1965)
2122 with subtest("check is serving over gemini"):
23+ response = geminiserver.succeed("${pkgs.gemget}/bin/gemget --header -o - gemini://localhost:1965")
24 print(response)
25 assert "Hello NixOS!" in response
26 '';
···64 url = "https://github.com/doronbehar/MuseScore/commit/f48448a3ede46f5a7ef470940072fbfb6742487c.patch";
65 hash = "sha256-UEc7auscnW0KMfWkLKQtm+UstuTNsuFeoNJYIidIlwM=";
66 })
00000000000067 ];
6869 cmakeFlags = [
···73 # https://github.com/musescore/MuseScore/issues/15571
74 "-DMUE_BUILD_CRASHPAD_CLIENT=OFF"
75 # Use our freetype
76- "-DUSE_SYSTEM_FREETYPE=ON"
77 # From some reason, in $src/build/cmake/SetupBuildEnvironment.cmake,
78 # upstream defaults to compiling to x86_64 only, unless this cmake flag is
79 # set
···140 mkdir -p $out/bin
141 ln -s $out/Applications/mscore.app/Contents/MacOS/mscore $out/bin/mscore.
142 '';
000143144 passthru.tests = nixosTests.musescore;
145
···64 url = "https://github.com/doronbehar/MuseScore/commit/f48448a3ede46f5a7ef470940072fbfb6742487c.patch";
65 hash = "sha256-UEc7auscnW0KMfWkLKQtm+UstuTNsuFeoNJYIidIlwM=";
66 })
67+ # Upstream removed the option to use system freetype library in v4.1.0,
68+ # causing the app to crash on systems when the outdated bundled freetype
69+ # tries to load the Noto Sans font. For more info on the crash itself,
70+ # see #244409 and https://github.com/musescore/MuseScore/issues/18795.
71+ # For now, re-add the option ourselves. The fix has been merged upstream,
72+ # so we can remove this patch with the next version. In the future, we
73+ # may replace the other bundled thirdparty libs with system libs, see
74+ # https://github.com/musescore/MuseScore/issues/11572.
75+ (fetchpatch {
76+ url = "https://github.com/musescore/MuseScore/commit/9ab6b32b1c3b990cfa7bb172ee8112521dc2269c.patch";
77+ hash = "sha256-5GA29Z+o3I/uDTTDbkauZ8/xSdCE6yY93phMSY0ea7s=";
78+ })
79 ];
8081 cmakeFlags = [
···85 # https://github.com/musescore/MuseScore/issues/15571
86 "-DMUE_BUILD_CRASHPAD_CLIENT=OFF"
87 # Use our freetype
88+ "-DMUE_COMPILE_USE_SYSTEM_FREETYPE=ON"
89 # From some reason, in $src/build/cmake/SetupBuildEnvironment.cmake,
90 # upstream defaults to compiling to x86_64 only, unless this cmake flag is
91 # set
···152 mkdir -p $out/bin
153 ln -s $out/Applications/mscore.app/Contents/MacOS/mscore $out/bin/mscore.
154 '';
155+156+ # Don't run bundled upstreams tests, as they require a running X window system.
157+ doCheck = false;
158159 passthru.tests = nixosTests.musescore;
160
···8 /* Do not use "dev" as a version. If you do, Tilt will consider itself
9 running in development environment and try to serve assets from the
10 source tree, which is not there once build completes. */
11- version = "0.33.3";
1213 src = fetchFromGitHub {
14 owner = "tilt-dev";
15 repo = "tilt";
16 rev = "v${version}";
17- hash = "sha256-TNZE335tH50E96yJzD26U+JbVxjU746Wa/8YDGHFeto=";
18 };
1920 vendorHash = null;
···8 /* Do not use "dev" as a version. If you do, Tilt will consider itself
9 running in development environment and try to serve assets from the
10 source tree, which is not there once build completes. */
11+ version = "0.33.4";
1213 src = fetchFromGitHub {
14 owner = "tilt-dev";
15 repo = "tilt";
16 rev = "v${version}";
17+ hash = "sha256-rQ5g5QyGyuJAHmE8zGFzqtpqW2xEju5JV386y9Cn+cs=";
18 };
1920 vendorHash = null;
+2-2
pkgs/applications/networking/flexget/default.nix
···67python3.pkgs.buildPythonApplication rec {
8 pname = "flexget";
9- version = "3.8.6";
10 format = "pyproject";
1112 # Fetch from GitHub in order to use `requirements.in`
···14 owner = "Flexget";
15 repo = "Flexget";
16 rev = "refs/tags/v${version}";
17- hash = "sha256-KF5d9SjKUkkHoYWmNWNBMe567w2StgEFsZprS+SFw7Y=";
18 };
1920 postPatch = ''
···67python3.pkgs.buildPythonApplication rec {
8 pname = "flexget";
9+ version = "3.8.7";
10 format = "pyproject";
1112 # Fetch from GitHub in order to use `requirements.in`
···14 owner = "Flexget";
15 repo = "Flexget";
16 rev = "refs/tags/v${version}";
17+ hash = "sha256-WfOLDTwmHPfg4UkrPC7gvDNJtAorrateQ4W59NmhdHc=";
18 };
1920 postPatch = ''
···2021buildGoModule rec {
22 pname = "gitea";
23- version = "1.20.1";
2425 # not fetching directly from the git repo, because that lacks several vendor files for the web UI
26 src = fetchurl {
27 url = "https://dl.gitea.com/gitea/${version}/gitea-src-${version}.tar.gz";
28- hash = "sha256-LYOCNZJiGuMM1ly1Sp+0F8Us8LtAXzH5NzJf2CLcHck=";
29 };
3031 vendorHash = null;
···2021buildGoModule rec {
22 pname = "gitea";
23+ version = "1.20.2";
2425 # not fetching directly from the git repo, because that lacks several vendor files for the web UI
26 src = fetchurl {
27 url = "https://dl.gitea.com/gitea/${version}/gitea-src-${version}.tar.gz";
28+ hash = "sha256-a88ltflOcZQVWcEjC3r6rbPSk6LRtATcEQecYt/wg04=";
29 };
3031 vendorHash = null;
···1+From 505391a31aa353b8f1cc5d3feb9861582554d9f1 Mon Sep 17 00:00:00 2001
2+From: =?UTF-8?q?Juan=20Pedro=20Bol=C3=ADvar=20Puente?= <raskolnikov@gnu.org>
3+Date: Wed, 9 Aug 2023 16:16:21 +0200
4+Subject: [PATCH 1/3] Find qmlimportscanner in macdeployqt via environment
5+6+The qmlimportscanner tool is provided by qtdeclarative. Because of the
7+modularized installation in Nix, it can not be found via the usual
8+mechanisms. Also, hard-coding it like we do for Qt5 would also not
9+work, as it would require making qtbase depend on qtdeclarative.
10+11+Here we add an option to provide its location via the environment.
12+While this means macdeployqt does not work out of the box, it provides
13+a workaround for users.
14+---
15+ src/tools/macdeployqt/shared/shared.cpp | 4 ++++
16+ 1 file changed, 4 insertions(+)
17+18+diff --git a/src/tools/macdeployqt/shared/shared.cpp b/src/tools/macdeployqt/shared/shared.cpp
19+index 643fe5390a..b8fcc9c9bd 100644
20+--- a/src/tools/macdeployqt/shared/shared.cpp
21++++ b/src/tools/macdeployqt/shared/shared.cpp
22+@@ -1270,6 +1270,10 @@ bool deployQmlImports(const QString &appBundlePath, DeploymentInfo deploymentInf
23+ if (!QFile::exists(qmlImportScannerPath))
24+ qmlImportScannerPath = QCoreApplication::applicationDirPath() + "/qmlimportscanner";
25+26++ // Fallback: Pass qml import scanner via environment variable
27++ if (!QFile::exists(qmlImportScannerPath))
28++ qmlImportScannerPath = ::qgetenv("NIX_QMLIMPORTSCANNER");
29++
30+ // Verify that we found a qmlimportscanner binary
31+ if (!QFile::exists(qmlImportScannerPath)) {
32+ LogError() << "qmlimportscanner not found at" << qmlImportScannerPath;
33+--
34+2.26.2
35+
···1+From 39eb99dcd66f8ffb632fed6308a49896fe5ad2d3 Mon Sep 17 00:00:00 2001
2+From: =?UTF-8?q?Juan=20Pedro=20Bol=C3=ADvar=20Puente?= <raskolnikov@gnu.org>
3+Date: Thu, 10 Aug 2023 14:17:03 +0200
4+Subject: [PATCH 3/3] Pass to qmlimportscanner the QML2_IMPORT_PATH
5+6+---
7+ src/tools/macdeployqt/shared/shared.cpp | 7 +++++++
8+ 1 file changed, 7 insertions(+)
9+10+diff --git a/src/tools/macdeployqt/shared/shared.cpp b/src/tools/macdeployqt/shared/shared.cpp
11+index 676d34d545..7908b07b3c 100644
12+--- a/src/tools/macdeployqt/shared/shared.cpp
13++++ b/src/tools/macdeployqt/shared/shared.cpp
14+@@ -1297,6 +1297,13 @@ bool deployQmlImports(const QString &appBundlePath, DeploymentInfo deploymentInf
15+ argumentList.append(qmlImportsPath);
16+ }
17+18++ // In a modularized installation of qt as we have in Nix, instead, we will
19++ // read the paths from the environment, as they are spread in multiple
20++ // locations and normally set in the environment like this
21++ auto envQmlImportPaths = ::qgetenv("QML2_IMPORT_PATH").split(':');
22++ for (const QString &importPath : envQmlImportPaths)
23++ argumentList << "-importPath" << importPath;
24++
25+ // run qmlimportscanner
26+ QProcess qmlImportScanner;
27+ qmlImportScanner.start(qmlImportScannerPath, argumentList);
28+--
29+2.26.2
30+
+4-1
pkgs/development/ocaml-modules/linol/default.nix
···16 sha256 = "sha256-51k+Eo3buzby9cWtbl+/0wbAxa2QSS+Oq0aEao0VBCM=";
17 };
1819- propagatedBuildInputs = [ yojson logs lsp ppx_yojson_conv_lib ];
0002021 meta = with lib; {
22 description = "LSP server library";
···16 sha256 = "sha256-51k+Eo3buzby9cWtbl+/0wbAxa2QSS+Oq0aEao0VBCM=";
17 };
1819+ lsp_v = lsp.override {
20+ version = "1.14.2";
21+ };
22+ propagatedBuildInputs = [ yojson logs lsp_v ppx_yojson_conv_lib ];
2324 meta = with lib; {
25 description = "LSP server library";
···53 homepage = "https://github.com/cgarciae/treeo";
54 license = licenses.mit;
55 maintainers = with maintainers; [ ndl ];
56+ # obsolete as of 2023-02-27 and not updated for more than a year as of 2023-08
57+ broken = true;
58 };
59}
···2, testers, buck2 # for passthru.tests
3}:
45-let
6- # NOTE (aseipp): buck2 uses a precompiled binary build for good reason — the
7- # upstream codebase extensively uses unstable `rustc` nightly features, and as
8- # a result can't be built upstream in any sane manner. it is only ever tested
9- # and integrated against a single version of the compiler, which produces all
10- # usable binaries. you shouldn't try to workaround this or get clever and
11- # think you can patch it to work; just accept it for now. it is extremely
12- # unlikely buck2 will build with a stable compiler anytime soon; see related
13- # upstream issues:
14- #
15- # - NixOS/nixpkgs#226677
16- # - NixOS/nixpkgs#232471
17- # - facebook/buck2#265
18- # - facebook/buck2#322
19- #
20- # worth noting: it *is* possible to build buck2 from source using
21- # buildRustPackage, and it works fine, but only if you are using flakes and
22- # can import `rust-overlay` from somewhere else to vendor your compiler. See
23- # nixos/nixpkgs#226677 for more information about that.
2425- # map our platform name to the rust toolchain suffix
26- suffix = {
27- x86_64-darwin = "x86_64-apple-darwin";
28- aarch64-darwin = "aarch64-apple-darwin";
29- x86_64-linux = "x86_64-unknown-linux-musl";
30- aarch64-linux = "aarch64-unknown-linux-musl";
31- }."${stdenv.hostPlatform.system}" or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
003233- allHashes = builtins.fromJSON (builtins.readFile ./hashes.json);
000003435 # our version of buck2; this should be a git tag
36- buck2-version = "2023-08-01";
00037 src =
38 let
39- hash = allHashes."${stdenv.hostPlatform.system}";
40- url = "https://github.com/facebook/buck2/releases/download/${buck2-version}/buck2-${suffix}.zst";
41- in fetchurl { inherit url hash; };
00000000004243- # compatible version of buck2 prelude; a git revision in the buck2-prelude repository
44- buck2-prelude = "acf49faaa61fd6ad9facd9e1418eed514bbb2ec8";
045 prelude-src =
46 let
47- hash = allHashes."_prelude";
48- url = "https://github.com/facebook/buck2-prelude/archive/${buck2-prelude}.tar.gz";
49- in fetchurl { inherit url hash; };
005051-in
52-stdenv.mkDerivation rec {
53 pname = "buck2";
54- version = "unstable-${buck2-version}"; # TODO (aseipp): kill 'unstable' once a non-prerelease is made
55 inherit src;
5657 nativeBuildInputs = [ zstd ];
···88 meta = with lib; {
89 description = "Fast, hermetic, multi-language build system";
90 homepage = "https://buck2.build";
91- changelog = "https://github.com/facebook/buck2/releases/tag/${buck2-version}";
92 license = with licenses; [ asl20 /* or */ mit ];
93- mainProgram = pname;
94 maintainers = with maintainers; [ thoughtpolice ];
95 platforms = [
96 "x86_64-linux" "aarch64-linux"
···2, testers, buck2 # for passthru.tests
3}:
45+# NOTE (aseipp): buck2 uses a precompiled binary build for good reason — the
6+# upstream codebase extensively uses unstable `rustc` nightly features, and as a
7+# result can't be built upstream in any sane manner. it is only ever tested and
8+# integrated against a single version of the compiler, which produces all usable
9+# binaries. you shouldn't try to workaround this or get clever and think you can
10+# patch it to work; just accept it for now. it is extremely unlikely buck2 will
11+# build with a stable compiler anytime soon; see related upstream issues:
12+#
13+# - NixOS/nixpkgs#226677
14+# - NixOS/nixpkgs#232471
15+# - facebook/buck2#265
16+# - facebook/buck2#322
17+#
18+# worth noting: it *is* possible to build buck2 from source using
19+# buildRustPackage, and it works fine, but only if you are using flakes and can
20+# import `rust-overlay` from somewhere else to vendor your compiler. See
21+# nixos/nixpkgs#226677 for more information about that.
002223+# NOTE (aseipp): this expression is mostly automated, and you are STRONGLY
24+# RECOMMENDED to use to nix-update for updating this expression when new
25+# releases come out, which runs the sibling `update.sh` script.
26+#
27+# from the root of the nixpkgs git repository, run:
28+#
29+# nix-shell maintainers/scripts/update.nix \
30+# --argstr commit true \
31+# --argstr package buck2
3233+let
34+35+ # build hashes, which correspond to the hashes of the precompiled binaries
36+ # procued by GitHub Actions. this also includes the hash for a download of a
37+ # compatible buck2-prelude
38+ buildHashes = builtins.fromJSON (builtins.readFile ./hashes.json);
3940 # our version of buck2; this should be a git tag
41+ version = "2023-08-15";
42+43+ # the platform-specific, statically linked binary — which is also
44+ # zstd-compressed
45 src =
46 let
47+ suffix = {
48+ # map our platform name to the rust toolchain suffix
49+ # NOTE (aseipp): must be synchronized with update.sh!
50+ x86_64-darwin = "x86_64-apple-darwin";
51+ aarch64-darwin = "aarch64-apple-darwin";
52+ x86_64-linux = "x86_64-unknown-linux-musl";
53+ aarch64-linux = "aarch64-unknown-linux-musl";
54+ }."${stdenv.hostPlatform.system}" or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
55+56+ name = "buck2-${version}-${suffix}.zst";
57+ hash = buildHashes."${stdenv.hostPlatform.system}";
58+ url = "https://github.com/facebook/buck2/releases/download/${version}/buck2-${suffix}.zst";
59+ in fetchurl { inherit name url hash; };
6061+ # compatible version of buck2 prelude; this is exported via passthru.prelude
62+ # for downstream consumers to use when they need to automate any kind of
63+ # tooling
64 prelude-src =
65 let
66+ prelude-hash = "40d6fffd01f224d25a62d982f4a3f00b275a5677";
67+ name = "buck2-prelude-${version}.tar.gz";
68+ hash = buildHashes."_prelude";
69+ url = "https://github.com/facebook/buck2-prelude/archive/${prelude-hash}.tar.gz";
70+ in fetchurl { inherit name url hash; };
7172+in stdenv.mkDerivation {
073 pname = "buck2";
74+ version = "unstable-${version}"; # TODO (aseipp): kill 'unstable' once a non-prerelease is made
75 inherit src;
7677 nativeBuildInputs = [ zstd ];
···108 meta = with lib; {
109 description = "Fast, hermetic, multi-language build system";
110 homepage = "https://buck2.build";
111+ changelog = "https://github.com/facebook/buck2/releases/tag/${version}";
112 license = with licenses; [ asl20 /* or */ mit ];
113+ mainProgram = "buck2";
114 maintainers = with maintainers; [ thoughtpolice ];
115 platforms = [
116 "x86_64-linux" "aarch64-linux"
···63 };
6465 meta = with lib; {
066 homepage = "https://github.com/openai/chatgpt-retrieval-plugin";
67 description = "Tool to search and find personal or work documents by asking questions in everyday language";
68 license = licenses.mit;
···63 };
6465 meta = with lib; {
66+ broken = true; # dependencies are not up to date, the project doesn't look well maintained, this doesn't look like it's going in the right direction. I'm happy to handle maintainership to whoever wants to.
67 homepage = "https://github.com/openai/chatgpt-retrieval-plugin";
68 description = "Tool to search and find personal or work documents by asking questions in everyday language";
69 license = licenses.mit;
···97 cp -r config/sql $out/share/invidious/config
98 '';
99100- # Invidious tries to open config/config.yml and connect to the database, even
101- # when running --help. This specifies a minimal configuration in an
102- # environment variable. Even though the database is bogus, --help still
103- # works.
104 installCheckPhase = ''
105- INVIDIOUS_CONFIG="database_url: sqlite3:///dev/null" $out/bin/invidious --help
0000106 '';
107108 passthru = {
···97 cp -r config/sql $out/share/invidious/config
98 '';
99100+ # Invidious tries to open and validate config/config.yml, even when
101+ # running --help. This specifies a minimal configuration in an
102+ # environment variable. Even though the database and hmac_key are
103+ # bogus, --help still works.
104 installCheckPhase = ''
105+ INVIDIOUS_CONFIG="$(cat <<EOF
106+ database_url: sqlite3:///dev/null
107+ hmac_key: "this-is-required"
108+ EOF
109+ )" $out/bin/invidious --help
110 '';
111112 passthru = {
···1+{ python3, lib, overlay ? (_: _: {}) }:
23python3.override {
4+ packageOverrides = lib.composeExtensions
5+ (self: super: {
6+ /*
7+ This overlay can be used whenever we need to override
8+ dependencies specific to the mailman ecosystem: in the past
9+ this was necessary for e.g. psycopg2[1] or sqlalchemy[2].
1011+ In such a large ecosystem this sort of issue is expected
12+ to arise again. Since we don't want to clutter the python package-set
13+ itself with version overrides and don't want to change the APIs
14+ in here back and forth every time this comes up (and as a result
15+ force users to change their code accordingly), this overlay
16+ is kept on purpose, even when empty.
17+18+ [1] 72a14ea563a3f5bf85db659349a533fe75a8b0ce
19+ [2] f931bc81d63f5cfda55ac73d754c87b3fd63b291
20+ */
21+ django = super.django_3;
22+ })
23+24+ overlay;
25}
···10 ]
11 },
12 "calendar": {
13- "sha256": "00m00jm6x6kkwbn8v7v0yjmr7m5isizsyll4nqy409c1jvmhq2rq",
14- "url": "https://github.com/nextcloud-releases/calendar/releases/download/v4.4.3/calendar-v4.4.3.tar.gz",
15- "version": "4.4.3",
16 "description": "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.",
17 "homepage": "https://github.com/nextcloud/calendar/",
18 "licenses": [
···80 ]
81 },
82 "groupfolders": {
83- "sha256": "1mcb3dw1kx7fd35hm30af88wkfwc5q6jfqph2vmf1a0k5nkjg7vc",
84- "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v13.1.4/groupfolders-v13.1.4.tar.gz",
85- "version": "13.1.4",
86 "description": "Admin configured folders shared with everyone in a group.\n\nFolders can be configured from *Group folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.\n\nNote: Encrypting the contents of group folders is currently not supported.",
87 "homepage": "https://github.com/nextcloud/groupfolders",
88 "licenses": [
···120 ]
121 },
122 "maps": {
123- "sha256": "0517kakkk7lr7ays6rrnl276709kcm5yvkp8g6cwjnfih7pmnkn9",
124- "url": "https://github.com/nextcloud/maps/releases/download/v1.1.0-2a-nightly/maps-1.1.0-2a-nightly.tar.gz",
125 "version": "1.1.0",
126 "description": "**The whole world fits inside your cloud!**\n\n- **🗺 Beautiful map:** Using [OpenStreetMap](https://www.openstreetmap.org) and [Leaflet](https://leafletjs.com), you can choose between standard map, satellite, topographical, dark mode or even watercolor! 🎨\n- **⭐ Favorites:** Save your favorite places, privately! Sync with [GNOME Maps](https://github.com/nextcloud/maps/issues/30) and mobile apps is planned.\n- **🧭 Routing:** Possible using either [OSRM](http://project-osrm.org), [GraphHopper](https://www.graphhopper.com) or [Mapbox](https://www.mapbox.com).\n- **🖼 Photos on the map:** No more boring slideshows, just show directly where you were!\n- **🙋 Contacts on the map:** See where your friends live and plan your next visit.\n- **📱 Devices:** Lost your phone? Check the map!\n- **〰 Tracks:** Load GPS tracks or past trips. Recording with [PhoneTrack](https://f-droid.org/en/packages/net.eneiluj.nextcloud.phonetrack/) or [OwnTracks](https://owntracks.org) is planned.",
127 "homepage": "https://github.com/nextcloud/maps",
···140 ]
141 },
142 "news": {
143- "sha256": "0fr72j4al8mi6fr7cdsyvvnp5cc39mphaaf3bcpkxy4a2v2hn2k0",
144- "url": "https://github.com/nextcloud/news/releases/download/21.2.0/news.tar.gz",
145- "version": "21.2.0",
146 "description": "📰 A RSS/Atom Feed reader App for Nextcloud\n\n- 📲 Synchronize your feeds with multiple mobile or desktop [clients](https://nextcloud.github.io/news/clients/)\n- 🔄 Automatic updates of your news feeds\n- 🆓 Free and open source under AGPLv3, no ads or premium functions\n\n**System Cron is currently required for this app to work**\n\nRequirements can be found [here](https://nextcloud.github.io/news/install/#dependencies)\n\nThe Changelog is available [here](https://github.com/nextcloud/news/blob/master/CHANGELOG.md)\n\nCreate a [bug report](https://github.com/nextcloud/news/issues/new/choose)\n\nCreate a [feature request](https://github.com/nextcloud/news/discussions/new)\n\nReport a [feed issue](https://github.com/nextcloud/news/discussions/new)",
147 "homepage": "https://github.com/nextcloud/news",
148 "licenses": [
···280 ]
281 },
282 "user_saml": {
283- "sha256": "0kf8h6z32x2gr87lm0l2cc7lghs8s222553lczxlfgj1xbi7486n",
284- "url": "https://github.com/nextcloud-releases/user_saml/releases/download/v5.2.1/user_saml-v5.2.1.tar.gz",
285- "version": "5.2.1",
286 "description": "Using the SSO & SAML app of your Nextcloud you can make it easily possible to integrate your existing Single-Sign-On solution with Nextcloud. In addition, you can use the Nextcloud LDAP user provider to keep the convenience for users. (e.g. when sharing)\nThe following providers are supported and tested at the moment:\n\n* **SAML 2.0**\n\t* OneLogin\n\t* Shibboleth\n\t* Active Directory Federation Services (ADFS)\n\n* **Authentication via Environment Variable**\n\t* Kerberos (mod_auth_kerb)\n\t* Any other provider that authenticates using the environment variable\n\nWhile theoretically any other authentication provider implementing either one of those standards is compatible, we like to note that they are not part of any internal test matrix.",
287 "homepage": "https://github.com/nextcloud/user_saml",
288 "licenses": [
···10 ]
11 },
12 "calendar": {
13+ "sha256": "0liws0xkndrx5qd06hn3n5jg7yl02w38j0nj37wyrv4qjk9w6n7v",
14+ "url": "https://github.com/nextcloud-releases/calendar/releases/download/v4.4.4/calendar-v4.4.4.tar.gz",
15+ "version": "4.4.4",
16 "description": "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.",
17 "homepage": "https://github.com/nextcloud/calendar/",
18 "licenses": [
···80 ]
81 },
82 "groupfolders": {
83+ "sha256": "1yfhy14cfz16ax5i8d6zhl4m161qzy98xzm36y1656rh96i2ksbx",
84+ "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v13.1.5/groupfolders-v13.1.5.tar.gz",
85+ "version": "13.1.5",
86 "description": "Admin configured folders shared with everyone in a group.\n\nFolders can be configured from *Group folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.\n\nNote: Encrypting the contents of group folders is currently not supported.",
87 "homepage": "https://github.com/nextcloud/groupfolders",
88 "licenses": [
···120 ]
121 },
122 "maps": {
123+ "sha256": "12dg1bklv2jhmj5dnz4ram6zvgf8kipfz77g1lcn77fyhzqw6y1z",
124+ "url": "https://github.com/nextcloud/maps/releases/download/v1.1.0/maps-1.1.0.tar.gz",
125 "version": "1.1.0",
126 "description": "**The whole world fits inside your cloud!**\n\n- **🗺 Beautiful map:** Using [OpenStreetMap](https://www.openstreetmap.org) and [Leaflet](https://leafletjs.com), you can choose between standard map, satellite, topographical, dark mode or even watercolor! 🎨\n- **⭐ Favorites:** Save your favorite places, privately! Sync with [GNOME Maps](https://github.com/nextcloud/maps/issues/30) and mobile apps is planned.\n- **🧭 Routing:** Possible using either [OSRM](http://project-osrm.org), [GraphHopper](https://www.graphhopper.com) or [Mapbox](https://www.mapbox.com).\n- **🖼 Photos on the map:** No more boring slideshows, just show directly where you were!\n- **🙋 Contacts on the map:** See where your friends live and plan your next visit.\n- **📱 Devices:** Lost your phone? Check the map!\n- **〰 Tracks:** Load GPS tracks or past trips. Recording with [PhoneTrack](https://f-droid.org/en/packages/net.eneiluj.nextcloud.phonetrack/) or [OwnTracks](https://owntracks.org) is planned.",
127 "homepage": "https://github.com/nextcloud/maps",
···140 ]
141 },
142 "news": {
143+ "sha256": "1z08k8xnyv71zj0djlv339faq9lx23mlqgjanf2jhv6jhh8cy5c6",
144+ "url": "https://github.com/nextcloud/news/releases/download/22.0.0/news.tar.gz",
145+ "version": "22.0.0",
146 "description": "📰 A RSS/Atom Feed reader App for Nextcloud\n\n- 📲 Synchronize your feeds with multiple mobile or desktop [clients](https://nextcloud.github.io/news/clients/)\n- 🔄 Automatic updates of your news feeds\n- 🆓 Free and open source under AGPLv3, no ads or premium functions\n\n**System Cron is currently required for this app to work**\n\nRequirements can be found [here](https://nextcloud.github.io/news/install/#dependencies)\n\nThe Changelog is available [here](https://github.com/nextcloud/news/blob/master/CHANGELOG.md)\n\nCreate a [bug report](https://github.com/nextcloud/news/issues/new/choose)\n\nCreate a [feature request](https://github.com/nextcloud/news/discussions/new)\n\nReport a [feed issue](https://github.com/nextcloud/news/discussions/new)",
147 "homepage": "https://github.com/nextcloud/news",
148 "licenses": [
···280 ]
281 },
282 "user_saml": {
283+ "sha256": "1gsq5mcn5nnxd56jlp4j2610gqq2gk3ma9yvhgy74wl0sqil98jd",
284+ "url": "https://github.com/nextcloud-releases/user_saml/releases/download/v5.2.2/user_saml-v5.2.2.tar.gz",
285+ "version": "5.2.2",
286 "description": "Using the SSO & SAML app of your Nextcloud you can make it easily possible to integrate your existing Single-Sign-On solution with Nextcloud. In addition, you can use the Nextcloud LDAP user provider to keep the convenience for users. (e.g. when sharing)\nThe following providers are supported and tested at the moment:\n\n* **SAML 2.0**\n\t* OneLogin\n\t* Shibboleth\n\t* Active Directory Federation Services (ADFS)\n\n* **Authentication via Environment Variable**\n\t* Kerberos (mod_auth_kerb)\n\t* Any other provider that authenticates using the environment variable\n\nWhile theoretically any other authentication provider implementing either one of those standards is compatible, we like to note that they are not part of any internal test matrix.",
287 "homepage": "https://github.com/nextcloud/user_saml",
288 "licenses": [
+15-15
pkgs/servers/nextcloud/packages/26.json
···10 ]
11 },
12 "calendar": {
13- "sha256": "00m00jm6x6kkwbn8v7v0yjmr7m5isizsyll4nqy409c1jvmhq2rq",
14- "url": "https://github.com/nextcloud-releases/calendar/releases/download/v4.4.3/calendar-v4.4.3.tar.gz",
15- "version": "4.4.3",
16 "description": "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.",
17 "homepage": "https://github.com/nextcloud/calendar/",
18 "licenses": [
···80 ]
81 },
82 "groupfolders": {
83- "sha256": "1nmc6b4bv66b3dp1qfgw19qml70b81gb2bql5ff33jhamd8ihdh0",
84- "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v14.0.3/groupfolders-v14.0.3.tar.gz",
85- "version": "14.0.3",
86 "description": "Admin configured folders shared with everyone in a group.\n\nFolders can be configured from *Group folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.\n\nNote: Encrypting the contents of group folders is currently not supported.",
87 "homepage": "https://github.com/nextcloud/groupfolders",
88 "licenses": [
···110 ]
111 },
112 "mail": {
113- "sha256": "1scx48g1h209pp4flq837njdgcdh4dxwh2n9jzv48zax8i9yz961",
114- "url": "https://github.com/nextcloud-releases/mail/releases/download/v3.2.4/mail-v3.2.4.tar.gz",
115- "version": "3.2.4",
116 "description": "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n### Rating: 🟢\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).",
117 "homepage": "https://github.com/nextcloud/mail#readme",
118 "licenses": [
···140 ]
141 },
142 "news": {
143- "sha256": "0fr72j4al8mi6fr7cdsyvvnp5cc39mphaaf3bcpkxy4a2v2hn2k0",
144- "url": "https://github.com/nextcloud/news/releases/download/21.2.0/news.tar.gz",
145- "version": "21.2.0",
146 "description": "📰 A RSS/Atom Feed reader App for Nextcloud\n\n- 📲 Synchronize your feeds with multiple mobile or desktop [clients](https://nextcloud.github.io/news/clients/)\n- 🔄 Automatic updates of your news feeds\n- 🆓 Free and open source under AGPLv3, no ads or premium functions\n\n**System Cron is currently required for this app to work**\n\nRequirements can be found [here](https://nextcloud.github.io/news/install/#dependencies)\n\nThe Changelog is available [here](https://github.com/nextcloud/news/blob/master/CHANGELOG.md)\n\nCreate a [bug report](https://github.com/nextcloud/news/issues/new/choose)\n\nCreate a [feature request](https://github.com/nextcloud/news/discussions/new)\n\nReport a [feed issue](https://github.com/nextcloud/news/discussions/new)",
147 "homepage": "https://github.com/nextcloud/news",
148 "licenses": [
···270 ]
271 },
272 "user_saml": {
273- "sha256": "0kf8h6z32x2gr87lm0l2cc7lghs8s222553lczxlfgj1xbi7486n",
274- "url": "https://github.com/nextcloud-releases/user_saml/releases/download/v5.2.1/user_saml-v5.2.1.tar.gz",
275- "version": "5.2.1",
276 "description": "Using the SSO & SAML app of your Nextcloud you can make it easily possible to integrate your existing Single-Sign-On solution with Nextcloud. In addition, you can use the Nextcloud LDAP user provider to keep the convenience for users. (e.g. when sharing)\nThe following providers are supported and tested at the moment:\n\n* **SAML 2.0**\n\t* OneLogin\n\t* Shibboleth\n\t* Active Directory Federation Services (ADFS)\n\n* **Authentication via Environment Variable**\n\t* Kerberos (mod_auth_kerb)\n\t* Any other provider that authenticates using the environment variable\n\nWhile theoretically any other authentication provider implementing either one of those standards is compatible, we like to note that they are not part of any internal test matrix.",
277 "homepage": "https://github.com/nextcloud/user_saml",
278 "licenses": [
···10 ]
11 },
12 "calendar": {
13+ "sha256": "0liws0xkndrx5qd06hn3n5jg7yl02w38j0nj37wyrv4qjk9w6n7v",
14+ "url": "https://github.com/nextcloud-releases/calendar/releases/download/v4.4.4/calendar-v4.4.4.tar.gz",
15+ "version": "4.4.4",
16 "description": "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.",
17 "homepage": "https://github.com/nextcloud/calendar/",
18 "licenses": [
···80 ]
81 },
82 "groupfolders": {
83+ "sha256": "00w3ri03d8kwnzzjgfbx8c5882gnw666nyxpjp4nq5rmr05m14s1",
84+ "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v14.0.4/groupfolders-v14.0.4.tar.gz",
85+ "version": "14.0.4",
86 "description": "Admin configured folders shared with everyone in a group.\n\nFolders can be configured from *Group folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.\n\nNote: Encrypting the contents of group folders is currently not supported.",
87 "homepage": "https://github.com/nextcloud/groupfolders",
88 "licenses": [
···110 ]
111 },
112 "mail": {
113+ "sha256": "044adgcsix1lkisk6lr6y1z7hiqb0p3sipwn16xilxy1cdnxwf5h",
114+ "url": "https://github.com/nextcloud-releases/mail/releases/download/v3.2.6/mail-v3.2.6.tar.gz",
115+ "version": "3.2.6",
116 "description": "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n### Rating: 🟢\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).",
117 "homepage": "https://github.com/nextcloud/mail#readme",
118 "licenses": [
···140 ]
141 },
142 "news": {
143+ "sha256": "1z08k8xnyv71zj0djlv339faq9lx23mlqgjanf2jhv6jhh8cy5c6",
144+ "url": "https://github.com/nextcloud/news/releases/download/22.0.0/news.tar.gz",
145+ "version": "22.0.0",
146 "description": "📰 A RSS/Atom Feed reader App for Nextcloud\n\n- 📲 Synchronize your feeds with multiple mobile or desktop [clients](https://nextcloud.github.io/news/clients/)\n- 🔄 Automatic updates of your news feeds\n- 🆓 Free and open source under AGPLv3, no ads or premium functions\n\n**System Cron is currently required for this app to work**\n\nRequirements can be found [here](https://nextcloud.github.io/news/install/#dependencies)\n\nThe Changelog is available [here](https://github.com/nextcloud/news/blob/master/CHANGELOG.md)\n\nCreate a [bug report](https://github.com/nextcloud/news/issues/new/choose)\n\nCreate a [feature request](https://github.com/nextcloud/news/discussions/new)\n\nReport a [feed issue](https://github.com/nextcloud/news/discussions/new)",
147 "homepage": "https://github.com/nextcloud/news",
148 "licenses": [
···270 ]
271 },
272 "user_saml": {
273+ "sha256": "1gsq5mcn5nnxd56jlp4j2610gqq2gk3ma9yvhgy74wl0sqil98jd",
274+ "url": "https://github.com/nextcloud-releases/user_saml/releases/download/v5.2.2/user_saml-v5.2.2.tar.gz",
275+ "version": "5.2.2",
276 "description": "Using the SSO & SAML app of your Nextcloud you can make it easily possible to integrate your existing Single-Sign-On solution with Nextcloud. In addition, you can use the Nextcloud LDAP user provider to keep the convenience for users. (e.g. when sharing)\nThe following providers are supported and tested at the moment:\n\n* **SAML 2.0**\n\t* OneLogin\n\t* Shibboleth\n\t* Active Directory Federation Services (ADFS)\n\n* **Authentication via Environment Variable**\n\t* Kerberos (mod_auth_kerb)\n\t* Any other provider that authenticates using the environment variable\n\nWhile theoretically any other authentication provider implementing either one of those standards is compatible, we like to note that they are not part of any internal test matrix.",
277 "homepage": "https://github.com/nextcloud/user_saml",
278 "licenses": [
+28-18
pkgs/servers/nextcloud/packages/27.json
···10 ]
11 },
12 "calendar": {
13- "sha256": "00m00jm6x6kkwbn8v7v0yjmr7m5isizsyll4nqy409c1jvmhq2rq",
14- "url": "https://github.com/nextcloud-releases/calendar/releases/download/v4.4.3/calendar-v4.4.3.tar.gz",
15- "version": "4.4.3",
16 "description": "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.",
17 "homepage": "https://github.com/nextcloud/calendar/",
18 "licenses": [
···80 ]
81 },
82 "groupfolders": {
83- "sha256": "13d4zqlfg2sq8j1jrq6lvsn8vx17825h3i3r88wi66ndsijz11dq",
84- "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v15.0.1/groupfolders-v15.0.1.tar.gz",
85- "version": "15.0.1",
86 "description": "Admin configured folders shared with everyone in a group.\n\nFolders can be configured from *Group folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.\n\nNote: Encrypting the contents of group folders is currently not supported.",
87 "homepage": "https://github.com/nextcloud/groupfolders",
88 "licenses": [
···110 ]
111 },
112 "mail": {
113- "sha256": "1scx48g1h209pp4flq837njdgcdh4dxwh2n9jzv48zax8i9yz961",
114- "url": "https://github.com/nextcloud-releases/mail/releases/download/v3.2.4/mail-v3.2.4.tar.gz",
115- "version": "3.2.4",
116 "description": "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n### Rating: 🟢\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).",
117 "homepage": "https://github.com/nextcloud/mail#readme",
118 "licenses": [
···139 "agpl"
140 ]
141 },
0000000000142 "notes": {
143 "sha256": "1g4ibrymsfd2bcvmyfyrl23z2kh4bgkwrgyacvdx1glk44di6sgc",
144 "url": "https://github.com/nextcloud-releases/notes/releases/download/v4.8.1/notes.tar.gz",
···160 ]
161 },
162 "onlyoffice": {
163- "sha256": "16vdbpylicdb8gz76j9sr8p15frwhdk0sd7sp0s3g6f49lb7fdrz",
164- "url": "https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v8.1.0/onlyoffice.tar.gz",
165- "version": "8.1.0",
166 "description": "ONLYOFFICE connector allows you to view, edit and collaborate on text documents, spreadsheets and presentations within Nextcloud using ONLYOFFICE Docs. This will create a new Edit in ONLYOFFICE action within the document library for Office documents. This allows multiple users to co-author documents in real time from the familiar web interface and save the changes back to your file storage.",
167 "homepage": "https://www.onlyoffice.com",
168 "licenses": [
···210 ]
211 },
212 "spreed": {
213- "sha256": "07bf6vmz957m2myazkvw63q40lisi14kyb42w4gpg3860ihr16sc",
214- "url": "https://github.com/nextcloud-releases/spreed/releases/download/v17.0.2/spreed-v17.0.2.tar.gz",
215- "version": "17.0.2",
216 "description": "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat integration!** Nextcloud Talk comes with a simple text chat. Allowing you to share files from your Nextcloud and mentioning other participants.\n* 👥 **Private, group, public and password protected calls!** Just invite somebody, a whole group or send a public link to invite to a call.\n* 💻 **Screen sharing!** Share your screen with participants of your call. You just need to use Firefox version 66 (or newer), latest Edge or Chrome 72 (or newer, also possible using Chrome 49 with this [Chrome extension](https://chrome.google.com/webstore/detail/screensharing-for-nextclo/kepnpjhambipllfmgmbapncekcmabkol)).\n* 🚀 **Integration with other Nextcloud apps** like Files, Contacts and Deck. More to come.\n\nAnd in the works for the [coming versions](https://github.com/nextcloud/spreed/milestones/):\n* ✋ [Federated calls](https://github.com/nextcloud/spreed/issues/21), to call people on other Nextclouds",
217 "homepage": "https://github.com/nextcloud/spreed",
218 "licenses": [
···260 ]
261 },
262 "user_saml": {
263- "sha256": "0kf8h6z32x2gr87lm0l2cc7lghs8s222553lczxlfgj1xbi7486n",
264- "url": "https://github.com/nextcloud-releases/user_saml/releases/download/v5.2.1/user_saml-v5.2.1.tar.gz",
265- "version": "5.2.1",
266 "description": "Using the SSO & SAML app of your Nextcloud you can make it easily possible to integrate your existing Single-Sign-On solution with Nextcloud. In addition, you can use the Nextcloud LDAP user provider to keep the convenience for users. (e.g. when sharing)\nThe following providers are supported and tested at the moment:\n\n* **SAML 2.0**\n\t* OneLogin\n\t* Shibboleth\n\t* Active Directory Federation Services (ADFS)\n\n* **Authentication via Environment Variable**\n\t* Kerberos (mod_auth_kerb)\n\t* Any other provider that authenticates using the environment variable\n\nWhile theoretically any other authentication provider implementing either one of those standards is compatible, we like to note that they are not part of any internal test matrix.",
267 "homepage": "https://github.com/nextcloud/user_saml",
268 "licenses": [
···10 ]
11 },
12 "calendar": {
13+ "sha256": "0liws0xkndrx5qd06hn3n5jg7yl02w38j0nj37wyrv4qjk9w6n7v",
14+ "url": "https://github.com/nextcloud-releases/calendar/releases/download/v4.4.4/calendar-v4.4.4.tar.gz",
15+ "version": "4.4.4",
16 "description": "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.",
17 "homepage": "https://github.com/nextcloud/calendar/",
18 "licenses": [
···80 ]
81 },
82 "groupfolders": {
83+ "sha256": "1ghq09ym82i6w4w11zarx5m64axa3m1abwyzmmhz9zv1rlz5xjm4",
84+ "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v15.0.2/groupfolders-v15.0.2.tar.gz",
85+ "version": "15.0.2",
86 "description": "Admin configured folders shared with everyone in a group.\n\nFolders can be configured from *Group folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.\n\nNote: Encrypting the contents of group folders is currently not supported.",
87 "homepage": "https://github.com/nextcloud/groupfolders",
88 "licenses": [
···110 ]
111 },
112 "mail": {
113+ "sha256": "044adgcsix1lkisk6lr6y1z7hiqb0p3sipwn16xilxy1cdnxwf5h",
114+ "url": "https://github.com/nextcloud-releases/mail/releases/download/v3.2.6/mail-v3.2.6.tar.gz",
115+ "version": "3.2.6",
116 "description": "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n### Rating: 🟢\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).",
117 "homepage": "https://github.com/nextcloud/mail#readme",
118 "licenses": [
···139 "agpl"
140 ]
141 },
142+ "news": {
143+ "sha256": "1z08k8xnyv71zj0djlv339faq9lx23mlqgjanf2jhv6jhh8cy5c6",
144+ "url": "https://github.com/nextcloud/news/releases/download/22.0.0/news.tar.gz",
145+ "version": "22.0.0",
146+ "description": "📰 A RSS/Atom Feed reader App for Nextcloud\n\n- 📲 Synchronize your feeds with multiple mobile or desktop [clients](https://nextcloud.github.io/news/clients/)\n- 🔄 Automatic updates of your news feeds\n- 🆓 Free and open source under AGPLv3, no ads or premium functions\n\n**System Cron is currently required for this app to work**\n\nRequirements can be found [here](https://nextcloud.github.io/news/install/#dependencies)\n\nThe Changelog is available [here](https://github.com/nextcloud/news/blob/master/CHANGELOG.md)\n\nCreate a [bug report](https://github.com/nextcloud/news/issues/new/choose)\n\nCreate a [feature request](https://github.com/nextcloud/news/discussions/new)\n\nReport a [feed issue](https://github.com/nextcloud/news/discussions/new)",
147+ "homepage": "https://github.com/nextcloud/news",
148+ "licenses": [
149+ "agpl"
150+ ]
151+ },
152 "notes": {
153 "sha256": "1g4ibrymsfd2bcvmyfyrl23z2kh4bgkwrgyacvdx1glk44di6sgc",
154 "url": "https://github.com/nextcloud-releases/notes/releases/download/v4.8.1/notes.tar.gz",
···170 ]
171 },
172 "onlyoffice": {
173+ "sha256": "1872y2fpz3hrmafhcc6n84d63j5wgzx2plpirr91z3a8650frf3m",
174+ "url": "https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v8.2.0/onlyoffice.tar.gz",
175+ "version": "8.2.0",
176 "description": "ONLYOFFICE connector allows you to view, edit and collaborate on text documents, spreadsheets and presentations within Nextcloud using ONLYOFFICE Docs. This will create a new Edit in ONLYOFFICE action within the document library for Office documents. This allows multiple users to co-author documents in real time from the familiar web interface and save the changes back to your file storage.",
177 "homepage": "https://www.onlyoffice.com",
178 "licenses": [
···220 ]
221 },
222 "spreed": {
223+ "sha256": "02npdw77xbpmxr8nff4wpiz08155zcxbkd3awhzhl6gq00pigwrw",
224+ "url": "https://github.com/nextcloud-releases/spreed/releases/download/v17.0.3/spreed-v17.0.3.tar.gz",
225+ "version": "17.0.3",
226 "description": "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat integration!** Nextcloud Talk comes with a simple text chat. Allowing you to share files from your Nextcloud and mentioning other participants.\n* 👥 **Private, group, public and password protected calls!** Just invite somebody, a whole group or send a public link to invite to a call.\n* 💻 **Screen sharing!** Share your screen with participants of your call. You just need to use Firefox version 66 (or newer), latest Edge or Chrome 72 (or newer, also possible using Chrome 49 with this [Chrome extension](https://chrome.google.com/webstore/detail/screensharing-for-nextclo/kepnpjhambipllfmgmbapncekcmabkol)).\n* 🚀 **Integration with other Nextcloud apps** like Files, Contacts and Deck. More to come.\n\nAnd in the works for the [coming versions](https://github.com/nextcloud/spreed/milestones/):\n* ✋ [Federated calls](https://github.com/nextcloud/spreed/issues/21), to call people on other Nextclouds",
227 "homepage": "https://github.com/nextcloud/spreed",
228 "licenses": [
···270 ]
271 },
272 "user_saml": {
273+ "sha256": "1gsq5mcn5nnxd56jlp4j2610gqq2gk3ma9yvhgy74wl0sqil98jd",
274+ "url": "https://github.com/nextcloud-releases/user_saml/releases/download/v5.2.2/user_saml-v5.2.2.tar.gz",
275+ "version": "5.2.2",
276 "description": "Using the SSO & SAML app of your Nextcloud you can make it easily possible to integrate your existing Single-Sign-On solution with Nextcloud. In addition, you can use the Nextcloud LDAP user provider to keep the convenience for users. (e.g. when sharing)\nThe following providers are supported and tested at the moment:\n\n* **SAML 2.0**\n\t* OneLogin\n\t* Shibboleth\n\t* Active Directory Federation Services (ADFS)\n\n* **Authentication via Environment Variable**\n\t* Kerberos (mod_auth_kerb)\n\t* Any other provider that authenticates using the environment variable\n\nWhile theoretically any other authentication provider implementing either one of those standards is compatible, we like to note that they are not part of any internal test matrix.",
277 "homepage": "https://github.com/nextcloud/user_saml",
278 "licenses": [
···23stdenv.mkDerivation rec {
4 pname = "wiki-js";
5- version = "2.5.299";
67 src = fetchurl {
8 url = "https://github.com/Requarks/wiki/releases/download/v${version}/${pname}.tar.gz";
9- sha256 = "sha256-GYe05dbR8RwCzPedeCMUQTWZ51roM/V2jUPPv7o7UEU=";
10 };
11-12- # Implements nodejs 18 support as it's not planned to fix this before
13- # the release of v3[1] which is planned to happen in 2023, but not before
14- # NixOS 23.05. However, in the lifespan of 23.05 v16 will get EOLed, so
15- # we have to hack this on our own.
16- #
17- # The problem we fix here is that `exports."/public/"` in a `package.json`
18- # is prohibited, i.e. you cannot export full directories anymore.
19- #
20- # Unfortunately it's non-trivial to fix this because v10 of `extract-files`
21- # (where the problem is fixed) doesn't work for graphql-tools (which depends
22- # on this). Updating this as well is also quite complex because in later
23- # versions the package was split up into multiple smaller packages and
24- # thus a lot of parts of the code-base would need to be changed accordingly.
25- #
26- # Since this is the only breaking change of nodejs 17/18[2][3], this workaround
27- # will be necessary until we can upgrade to v3.
28- #
29- # [1] https://github.com/requarks/wiki/discussions/6388
30- # [2] https://nodejs.org/en/blog/release/v17.0.0
31- # [3] https://nodejs.org/en/blog/release/v18.0.0
32- patches = [ ./drop-node-check.patch ];
33- nativeBuildInputs = [ jq moreutils ];
34- postPatch = ''
35- # Dirty hack to implement nodejs-18 support.
36- <./node_modules/extract-files/package.json jq '
37- # error out loud if the structure has changed and we need to change
38- # this expression
39- if .exports|has("./public/")|not then
40- halt_error(1)
41- else
42- .exports."./public/*" = "./public/*.js" | del(.exports."./public/")
43- end
44- ' | sponge ./node_modules/extract-files/package.json
45- '';
4647 sourceRoot = ".";
48
···1213stdenv.mkDerivation (finalAttrs: {
14 pname = "keymapper";
15- version = "2.6.2";
1617 src = fetchFromGitHub {
18 owner = "houmain";
19 repo = "keymapper";
20 rev = finalAttrs.version;
21- hash = "sha256-XCrEM9TR2nxw1GjkpDzXl4eYXu8peaJAIYXRCltSCj4=";
22 };
2324 # all the following must be in nativeBuildInputs
···1213stdenv.mkDerivation (finalAttrs: {
14 pname = "keymapper";
15+ version = "2.7.0";
1617 src = fetchFromGitHub {
18 owner = "houmain";
19 repo = "keymapper";
20 rev = finalAttrs.version;
21+ hash = "sha256-45/Y+uFmdjTdZuAX5we5QrcKH/PjC5fvXiNqJscyTGY=";
22 };
2324 # all the following must be in nativeBuildInputs
+22-13
pkgs/tools/misc/debianutils/default.nix
···1-{ lib, stdenv, fetchurl }:
00023-stdenv.mkDerivation rec {
4 pname = "debianutils";
5- version = "5.7";
67 src = fetchurl {
8- url = "mirror://debian/pool/main/d/${pname}/${pname}_${version}.orig.tar.gz";
9- sha256 = "sha256-J+yeDn5E3Iq2EapXYzBHG6ywfkSR/+zw06ppCckvkCI=";
10 };
1112- meta = with lib; {
00013 description = "Miscellaneous utilities specific to Debian";
14 longDescription = ''
15- This package provides a number of small utilities which are used primarily by the installation scripts of Debian packages, although you may use them directly.
001617- The specific utilities included are: add-shell installkernel ischroot remove-shell run-parts savelog tempfile which
018 '';
19- downloadPage = "https://packages.debian.org/sid/debianutils";
20- license = with licenses; [ gpl2Plus publicDomain smail ];
21- maintainers = [];
22- platforms = platforms.all;
23 };
24-}
···1+{ lib
2+, stdenv
3+, fetchurl
4+}:
56+stdenv.mkDerivation (finalAttrs: {
7 pname = "debianutils";
8+ version = "5.8";
910 src = fetchurl {
11+ url = "mirror://debian/pool/main/d/debianutils/debianutils_${finalAttrs.version}.orig.tar.gz";
12+ hash = "sha256-WwhtJ+uQY95NdGdg0PrrQNlGT7hV/IqOf7k7A+/OxiI=";
13 };
1415+ outputs = [ "out" "man" ];
16+17+ meta = {
18+ homepage = "https://packages.debian.org/sid/debianutils";
19 description = "Miscellaneous utilities specific to Debian";
20 longDescription = ''
21+ This package provides a number of small utilities which are used
22+ primarily by the installation scripts of Debian packages, although you
23+ may use them directly.
2425+ The specific utilities included are: add-shell installkernel ischroot
26+ remove-shell run-parts savelog tempfile which
27 '';
28+ license = with lib.licenses; [ gpl2Plus publicDomain smail ];
29+ mainProgram = "ischroot";
30+ maintainers = with lib.maintainers; [ AndersonTorres ];
31+ platforms = lib.platforms.all;
32 };
33+})
···1571 shared_mime_info = throw "'shared_mime_info' has been renamed to/replaced by 'shared-mime-info'"; # Converted to throw 2022-02-22
1572 inherit (libsForQt5.mauiPackages) shelf; # added 2022-05-17
1573 shellinabox = throw "shellinabox has been removed from nixpkgs, as it was unmaintained upstream"; # Added 2021-12-15
01574 shipyard = jumppad; # Added 2023-06-06
1575 sickbeard = throw "sickbeard has been removed from nixpkgs, as it was unmaintained"; # Added 2022-01-01
1576 sickrage = throw "sickbeard has been removed from nixpkgs, as it was unmaintained"; # Added 2022-01-01
···1571 shared_mime_info = throw "'shared_mime_info' has been renamed to/replaced by 'shared-mime-info'"; # Converted to throw 2022-02-22
1572 inherit (libsForQt5.mauiPackages) shelf; # added 2022-05-17
1573 shellinabox = throw "shellinabox has been removed from nixpkgs, as it was unmaintained upstream"; # Added 2021-12-15
1574+ shhgit = throw "shhgit is broken and is no longer maintained. See https://github.com/eth0izzle/shhgit#-shhgit-is-no-longer-maintained-" ; # Added 2023-08-08
1575 shipyard = jumppad; # Added 2023-06-06
1576 sickbeard = throw "sickbeard has been removed from nixpkgs, as it was unmaintained"; # Added 2022-01-01
1577 sickrage = throw "sickbeard has been removed from nixpkgs, as it was unmaintained"; # Added 2022-01-01