Merge staging-next into staging

authored by github-actions[bot] and committed by GitHub 98d7aac5 5e177b16

+941 -368
+17
nixos/doc/manual/release-notes/rl-2105.xml
··· 840 default in the CLI tooling which in turn enables us to use 841 <literal>unbound-control</literal> without passing a custom configuration location. 842 </para> 843 </listitem> 844 <listitem> 845 <para>
··· 840 default in the CLI tooling which in turn enables us to use 841 <literal>unbound-control</literal> without passing a custom configuration location. 842 </para> 843 + 844 + <para> 845 + The module has also been reworked to be <link 846 + xlink:href="https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md">RFC 847 + 0042</link> compliant. As such, 848 + <option>sevices.unbound.extraConfig</option> has been removed and replaced 849 + by <xref linkend="opt-services.unbound.settings"/>. <option>services.unbound.interfaces</option> 850 + has been renamed to <option>services.unbound.settings.server.interface</option>. 851 + </para> 852 + 853 + <para> 854 + <option>services.unbound.forwardAddresses</option> and 855 + <option>services.unbound.allowedAccess</option> have also been changed to 856 + use the new settings interface. You can follow the instructions when 857 + executing <literal>nixos-rebuild</literal> to upgrade your configuration to 858 + use the new interface. 859 + </para> 860 </listitem> 861 <listitem> 862 <para>
+7 -2
nixos/lib/testing-python.nix
··· 54 }; 55 56 # Run an automated test suite in the given virtual network. 57 - # `driver' is the script that runs the network. 58 - runTests = { driver, pos }: 59 stdenv.mkDerivation { 60 name = "vm-test-run-${driver.testName}"; 61
··· 54 }; 55 56 # Run an automated test suite in the given virtual network. 57 + runTests = { 58 + # the script that runs the network 59 + driver, 60 + # a source position in the format of builtins.unsafeGetAttrPos 61 + # for meta.position 62 + pos, 63 + }: 64 stdenv.mkDerivation { 65 name = "vm-test-run-${driver.testName}"; 66
+3
nixos/modules/module-list.nix
··· 114 ./programs/autojump.nix 115 ./programs/bandwhich.nix 116 ./programs/bash/bash.nix 117 ./programs/bash-my-aws.nix 118 ./programs/bcc.nix 119 ./programs/browserpass.nix
··· 114 ./programs/autojump.nix 115 ./programs/bandwhich.nix 116 ./programs/bash/bash.nix 117 + ./programs/bash/bash-completion.nix 118 + ./programs/bash/ls-colors.nix 119 + ./programs/bash/undistract-me.nix 120 ./programs/bash-my-aws.nix 121 ./programs/bcc.nix 122 ./programs/browserpass.nix
+37
nixos/modules/programs/bash/bash-completion.nix
···
··· 1 + { config, lib, pkgs, ... }: 2 + 3 + with lib; 4 + 5 + let 6 + enable = config.programs.bash.enableCompletion; 7 + in 8 + { 9 + options = { 10 + programs.bash.enableCompletion = mkEnableOption "Bash completion for all interactive bash shells" // { 11 + default = true; 12 + }; 13 + }; 14 + 15 + config = mkIf enable { 16 + programs.bash.promptPluginInit = '' 17 + # Check whether we're running a version of Bash that has support for 18 + # programmable completion. If we do, enable all modules installed in 19 + # the system and user profile in obsolete /etc/bash_completion.d/ 20 + # directories. Bash loads completions in all 21 + # $XDG_DATA_DIRS/bash-completion/completions/ 22 + # on demand, so they do not need to be sourced here. 23 + if shopt -q progcomp &>/dev/null; then 24 + . "${pkgs.bash-completion}/etc/profile.d/bash_completion.sh" 25 + nullglobStatus=$(shopt -p nullglob) 26 + shopt -s nullglob 27 + for p in $NIX_PROFILES; do 28 + for m in "$p/etc/bash_completion.d/"*; do 29 + . $m 30 + done 31 + done 32 + eval "$nullglobStatus" 33 + unset nullglobStatus p m 34 + fi 35 + ''; 36 + }; 37 + }
+6 -39
nixos/modules/programs/bash/bash.nix
··· 11 12 cfg = config.programs.bash; 13 14 - bashCompletion = optionalString cfg.enableCompletion '' 15 - # Check whether we're running a version of Bash that has support for 16 - # programmable completion. If we do, enable all modules installed in 17 - # the system and user profile in obsolete /etc/bash_completion.d/ 18 - # directories. Bash loads completions in all 19 - # $XDG_DATA_DIRS/bash-completion/completions/ 20 - # on demand, so they do not need to be sourced here. 21 - if shopt -q progcomp &>/dev/null; then 22 - . "${pkgs.bash-completion}/etc/profile.d/bash_completion.sh" 23 - nullglobStatus=$(shopt -p nullglob) 24 - shopt -s nullglob 25 - for p in $NIX_PROFILES; do 26 - for m in "$p/etc/bash_completion.d/"*; do 27 - . $m 28 - done 29 - done 30 - eval "$nullglobStatus" 31 - unset nullglobStatus p m 32 - fi 33 - ''; 34 - 35 - lsColors = optionalString cfg.enableLsColors '' 36 - eval "$(${pkgs.coreutils}/bin/dircolors -b)" 37 - ''; 38 - 39 bashAliases = concatStringsSep "\n" ( 40 mapAttrsFlatten (k: v: "alias ${k}=${escapeShellArg v}") 41 (filterAttrs (k: v: v != null) cfg.shellAliases) ··· 123 type = types.lines; 124 }; 125 126 - enableCompletion = mkOption { 127 - default = true; 128 description = '' 129 - Enable Bash completion for all interactive bash shells. 130 ''; 131 - type = types.bool; 132 - }; 133 - 134 - enableLsColors = mkOption { 135 - default = true; 136 - description = '' 137 - Enable extra colors in directory listings. 138 - ''; 139 - type = types.bool; 140 }; 141 142 }; ··· 167 set +h 168 169 ${cfg.promptInit} 170 - ${bashCompletion} 171 - ${lsColors} 172 ${bashAliases} 173 174 ${cfge.interactiveShellInit}
··· 11 12 cfg = config.programs.bash; 13 14 bashAliases = concatStringsSep "\n" ( 15 mapAttrsFlatten (k: v: "alias ${k}=${escapeShellArg v}") 16 (filterAttrs (k: v: v != null) cfg.shellAliases) ··· 98 type = types.lines; 99 }; 100 101 + promptPluginInit = mkOption { 102 + default = ""; 103 description = '' 104 + Shell script code used to initialise bash prompt plugins. 105 ''; 106 + type = types.lines; 107 + internal = true; 108 }; 109 110 }; ··· 135 set +h 136 137 ${cfg.promptInit} 138 + ${cfg.promptPluginInit} 139 ${bashAliases} 140 141 ${cfge.interactiveShellInit}
+20
nixos/modules/programs/bash/ls-colors.nix
···
··· 1 + { config, lib, pkgs, ... }: 2 + 3 + with lib; 4 + 5 + let 6 + enable = config.programs.bash.enableLsColors; 7 + in 8 + { 9 + options = { 10 + programs.bash.enableLsColors = mkEnableOption "extra colors in directory listings" // { 11 + default = true; 12 + }; 13 + }; 14 + 15 + config = mkIf enable { 16 + programs.bash.promptPluginInit = '' 17 + eval "$(${pkgs.coreutils}/bin/dircolors -b)" 18 + ''; 19 + }; 20 + }
+36
nixos/modules/programs/bash/undistract-me.nix
···
··· 1 + { config, lib, pkgs, ... }: 2 + 3 + with lib; 4 + 5 + let 6 + cfg = config.programs.bash.undistractMe; 7 + in 8 + { 9 + options = { 10 + programs.bash.undistractMe = { 11 + enable = mkEnableOption "notifications when long-running terminal commands complete"; 12 + 13 + playSound = mkEnableOption "notification sounds when long-running terminal commands complete"; 14 + 15 + timeout = mkOption { 16 + default = 10; 17 + description = '' 18 + Number of seconds it would take for a command to be considered long-running. 19 + ''; 20 + type = types.int; 21 + }; 22 + }; 23 + }; 24 + 25 + config = mkIf cfg.enable { 26 + programs.bash.promptPluginInit = '' 27 + export LONG_RUNNING_COMMAND_TIMEOUT=${toString cfg.timeout} 28 + export UDM_PLAY_SOUND=${if cfg.playSound then "1" else "0"} 29 + . "${pkgs.undistract-me}/etc/profile.d/undistract-me.sh" 30 + ''; 31 + }; 32 + 33 + meta = { 34 + maintainers = with maintainers; [ metadark ]; 35 + }; 36 + }
+1 -1
nixos/modules/services/misc/airsonic.nix
··· 118 ''; 119 serviceConfig = { 120 ExecStart = '' 121 - ${pkgs.jre}/bin/java -Xmx${toString cfg.maxMemory}m \ 122 -Dairsonic.home=${cfg.home} \ 123 -Dserver.address=${cfg.listenAddress} \ 124 -Dserver.port=${toString cfg.port} \
··· 118 ''; 119 serviceConfig = { 120 ExecStart = '' 121 + ${pkgs.jre8}/bin/java -Xmx${toString cfg.maxMemory}m \ 122 -Dairsonic.home=${cfg.home} \ 123 -Dserver.address=${cfg.listenAddress} \ 124 -Dserver.port=${toString cfg.port} \
+42 -36
nixos/modules/services/networking/bind.nix
··· 8 9 bindUser = "named"; 10 11 - bindZoneOptions = { 12 - name = mkOption { 13 - type = types.str; 14 - description = "Name of the zone."; 15 - }; 16 - master = mkOption { 17 - description = "Master=false means slave server"; 18 - type = types.bool; 19 - }; 20 - file = mkOption { 21 - type = types.either types.str types.path; 22 - description = "Zone file resource records contain columns of data, separated by whitespace, that define the record."; 23 - }; 24 - masters = mkOption { 25 - type = types.listOf types.str; 26 - description = "List of servers for inclusion in stub and secondary zones."; 27 - }; 28 - slaves = mkOption { 29 - type = types.listOf types.str; 30 - description = "Addresses who may request zone transfers."; 31 - default = []; 32 - }; 33 - extraConfig = mkOption { 34 - type = types.str; 35 - description = "Extra zone config to be appended at the end of the zone section."; 36 - default = ""; 37 }; 38 }; 39 ··· 84 ${extraConfig} 85 }; 86 '') 87 - cfg.zones } 88 ''; 89 90 in ··· 153 154 zones = mkOption { 155 default = []; 156 - type = types.listOf (types.submodule [ { options = bindZoneOptions; } ]); 157 description = " 158 List of zones we claim authority over. 159 "; 160 - example = [{ 161 - name = "example.com"; 162 - master = false; 163 - file = "/var/dns/example.com"; 164 - masters = ["192.168.0.1"]; 165 - slaves = []; 166 - extraConfig = ""; 167 - }]; 168 }; 169 170 extraConfig = mkOption {
··· 8 9 bindUser = "named"; 10 11 + bindZoneCoerce = list: builtins.listToAttrs (lib.forEach list (zone: { name = zone.name; value = zone; })); 12 + 13 + bindZoneOptions = { name, config, ... }: { 14 + options = { 15 + name = mkOption { 16 + type = types.str; 17 + default = name; 18 + description = "Name of the zone."; 19 + }; 20 + master = mkOption { 21 + description = "Master=false means slave server"; 22 + type = types.bool; 23 + }; 24 + file = mkOption { 25 + type = types.either types.str types.path; 26 + description = "Zone file resource records contain columns of data, separated by whitespace, that define the record."; 27 + }; 28 + masters = mkOption { 29 + type = types.listOf types.str; 30 + description = "List of servers for inclusion in stub and secondary zones."; 31 + }; 32 + slaves = mkOption { 33 + type = types.listOf types.str; 34 + description = "Addresses who may request zone transfers."; 35 + default = []; 36 + }; 37 + extraConfig = mkOption { 38 + type = types.str; 39 + description = "Extra zone config to be appended at the end of the zone section."; 40 + default = ""; 41 + }; 42 }; 43 }; 44 ··· 89 ${extraConfig} 90 }; 91 '') 92 + (attrValues cfg.zones) } 93 ''; 94 95 in ··· 158 159 zones = mkOption { 160 default = []; 161 + type = with types; coercedTo (listOf attrs) bindZoneCoerce (attrsOf (types.submodule bindZoneOptions)); 162 description = " 163 List of zones we claim authority over. 164 "; 165 + example = { 166 + "example.com" = { 167 + master = false; 168 + file = "/var/dns/example.com"; 169 + masters = ["192.168.0.1"]; 170 + slaves = []; 171 + extraConfig = ""; 172 + }; 173 + }; 174 }; 175 176 extraConfig = mkOption {
+164 -79
nixos/modules/services/networking/unbound.nix
··· 4 let 5 cfg = config.services.unbound; 6 7 - stateDir = "/var/lib/unbound"; 8 9 - access = concatMapStringsSep "\n " (x: "access-control: ${x} allow") cfg.allowedAccess; 10 11 - interfaces = concatMapStringsSep "\n " (x: "interface: ${x}") cfg.interfaces; 12 13 - isLocalAddress = x: substring 0 3 x == "::1" || substring 0 9 x == "127.0.0.1"; 14 15 - forward = 16 - optionalString (any isLocalAddress cfg.forwardAddresses) '' 17 - do-not-query-localhost: no 18 - '' 19 - + optionalString (cfg.forwardAddresses != []) '' 20 - forward-zone: 21 - name: . 22 - '' 23 - + concatMapStringsSep "\n" (x: " forward-addr: ${x}") cfg.forwardAddresses; 24 25 - rootTrustAnchorFile = "${stateDir}/root.key"; 26 - 27 - trustAnchor = optionalString cfg.enableRootTrustAnchor 28 - "auto-trust-anchor-file: ${rootTrustAnchorFile}"; 29 - 30 - confFile = pkgs.writeText "unbound.conf" '' 31 - server: 32 - ip-freebind: yes 33 - directory: "${stateDir}" 34 - username: unbound 35 - chroot: "" 36 - pidfile: "" 37 - # when running under systemd there is no need to daemonize 38 - do-daemonize: no 39 - ${interfaces} 40 - ${access} 41 - ${trustAnchor} 42 - ${lib.optionalString (cfg.localControlSocketPath != null) '' 43 - remote-control: 44 - control-enable: yes 45 - control-interface: ${cfg.localControlSocketPath} 46 - ''} 47 - ${cfg.extraConfig} 48 - ${forward} 49 - ''; 50 - in 51 - { 52 53 ###### interface 54 ··· 64 description = "The unbound package to use"; 65 }; 66 67 - allowedAccess = mkOption { 68 - default = [ "127.0.0.0/24" ]; 69 - type = types.listOf types.str; 70 - description = "What networks are allowed to use unbound as a resolver."; 71 }; 72 73 - interfaces = mkOption { 74 - default = [ "127.0.0.1" ] ++ optional config.networking.enableIPv6 "::1"; 75 - type = types.listOf types.str; 76 - description = '' 77 - What addresses the server should listen on. This supports the interface syntax documented in 78 - <citerefentry><refentrytitle>unbound.conf</refentrytitle><manvolnum>8</manvolnum></citerefentry>. 79 - ''; 80 }; 81 82 - forwardAddresses = mkOption { 83 - default = []; 84 - type = types.listOf types.str; 85 - description = "What servers to forward queries to."; 86 }; 87 88 enableRootTrustAnchor = mkOption { ··· 106 and group will be <literal>nogroup</literal>. 107 108 Users that should be permitted to access the socket must be in the 109 - <literal>unbound</literal> group. 110 111 If this option is <literal>null</literal> remote control will not be 112 - configured at all. Unbounds default values apply. 113 ''; 114 }; 115 116 - extraConfig = mkOption { 117 - default = ""; 118 - type = types.lines; 119 description = '' 120 - Extra unbound config. See 121 - <citerefentry><refentrytitle>unbound.conf</refentrytitle><manvolnum>8 122 - </manvolnum></citerefentry>. 123 ''; 124 }; 125 - 126 }; 127 }; 128 ··· 130 131 config = mkIf cfg.enable { 132 133 environment.systemPackages = [ cfg.package ]; 134 135 - users.users.unbound = { 136 - description = "unbound daemon user"; 137 - isSystemUser = true; 138 - group = lib.mkIf (cfg.localControlSocketPath != null) (lib.mkDefault "unbound"); 139 }; 140 141 - # We need a group so that we can give users access to the configured 142 - # control socket. Unbound allows access to the socket only to the unbound 143 - # user and the primary group. 144 - users.groups = lib.mkIf (cfg.localControlSocketPath != null) { 145 unbound = {}; 146 }; 147 148 - networking.resolvconf.useLocalResolver = mkDefault true; 149 150 151 environment.etc."unbound/unbound.conf".source = confFile; 152 ··· 156 before = [ "nss-lookup.target" ]; 157 wantedBy = [ "multi-user.target" "nss-lookup.target" ]; 158 159 - preStart = lib.mkIf cfg.enableRootTrustAnchor '' 160 - ${cfg.package}/bin/unbound-anchor -a ${rootTrustAnchorFile} || echo "Root anchor updated!" 161 ''; 162 163 restartTriggers = [ ··· 181 "CAP_SYS_RESOURCE" 182 ]; 183 184 - User = "unbound"; 185 - Group = lib.mkIf (cfg.localControlSocketPath != null) (lib.mkDefault "unbound"); 186 187 MemoryDenyWriteExecute = true; 188 NoNewPrivileges = true; ··· 211 RestrictNamespaces = true; 212 LockPersonality = true; 213 RestrictSUIDSGID = true; 214 }; 215 }; 216 - # If networkmanager is enabled, ask it to interface with unbound. 217 - networking.networkmanager.dns = "unbound"; 218 }; 219 }
··· 4 let 5 cfg = config.services.unbound; 6 7 + yesOrNo = v: if v then "yes" else "no"; 8 9 + toOption = indent: n: v: "${indent}${toString n}: ${v}"; 10 11 + toConf = indent: n: v: 12 + if builtins.isFloat v then (toOption indent n (builtins.toJSON v)) 13 + else if isInt v then (toOption indent n (toString v)) 14 + else if isBool v then (toOption indent n (yesOrNo v)) 15 + else if isString v then (toOption indent n v) 16 + else if isList v then (concatMapStringsSep "\n" (toConf indent n) v) 17 + else if isAttrs v then (concatStringsSep "\n" ( 18 + ["${indent}${n}:"] ++ ( 19 + mapAttrsToList (toConf "${indent} ") v 20 + ) 21 + )) 22 + else throw (traceSeq v "services.unbound.settings: unexpected type"); 23 24 + confFile = pkgs.writeText "unbound.conf" (concatStringsSep "\n" ((mapAttrsToList (toConf "") cfg.settings) ++ [""])); 25 26 + rootTrustAnchorFile = "${cfg.stateDir}/root.key"; 27 28 + in { 29 30 ###### interface 31 ··· 41 description = "The unbound package to use"; 42 }; 43 44 + user = mkOption { 45 + type = types.str; 46 + default = "unbound"; 47 + description = "User account under which unbound runs."; 48 }; 49 50 + group = mkOption { 51 + type = types.str; 52 + default = "unbound"; 53 + description = "Group under which unbound runs."; 54 + }; 55 + 56 + stateDir = mkOption { 57 + default = "/var/lib/unbound"; 58 + description = "Directory holding all state for unbound to run."; 59 }; 60 61 + resolveLocalQueries = mkOption { 62 + type = types.bool; 63 + default = true; 64 + description = '' 65 + Whether unbound should resolve local queries (i.e. add 127.0.0.1 to 66 + /etc/resolv.conf). 67 + ''; 68 }; 69 70 enableRootTrustAnchor = mkOption { ··· 88 and group will be <literal>nogroup</literal>. 89 90 Users that should be permitted to access the socket must be in the 91 + <literal>config.services.unbound.group</literal> group. 92 93 If this option is <literal>null</literal> remote control will not be 94 + enabled. Unbounds default values apply. 95 ''; 96 }; 97 98 + settings = mkOption { 99 + default = {}; 100 + type = with types; submodule { 101 + 102 + freeformType = let 103 + validSettingsPrimitiveTypes = oneOf [ int str bool float ]; 104 + validSettingsTypes = oneOf [ validSettingsPrimitiveTypes (listOf validSettingsPrimitiveTypes) ]; 105 + settingsType = (attrsOf validSettingsTypes); 106 + in attrsOf (oneOf [ string settingsType (listOf settingsType) ]) 107 + // { description = '' 108 + unbound.conf configuration type. The format consist of an attribute 109 + set of settings. Each settings can be either one value, a list of 110 + values or an attribute set. The allowed values are integers, 111 + strings, booleans or floats. 112 + ''; 113 + }; 114 + 115 + options = { 116 + remote-control.control-enable = mkOption { 117 + type = bool; 118 + default = false; 119 + internal = true; 120 + }; 121 + }; 122 + }; 123 + example = literalExample '' 124 + { 125 + server = { 126 + interface = [ "127.0.0.1" ]; 127 + }; 128 + forward-zone = [ 129 + { 130 + name = "."; 131 + forward-addr = "1.1.1.1@853#cloudflare-dns.com"; 132 + } 133 + { 134 + name = "example.org."; 135 + forward-addr = [ 136 + "1.1.1.1@853#cloudflare-dns.com" 137 + "1.0.0.1@853#cloudflare-dns.com" 138 + ]; 139 + } 140 + ]; 141 + remote-control.control-enable = true; 142 + }; 143 + ''; 144 description = '' 145 + Declarative Unbound configuration 146 + See the <citerefentry><refentrytitle>unbound.conf</refentrytitle> 147 + <manvolnum>5</manvolnum></citerefentry> manpage for a list of 148 + available options. 149 ''; 150 }; 151 }; 152 }; 153 ··· 155 156 config = mkIf cfg.enable { 157 158 + services.unbound.settings = { 159 + server = { 160 + directory = mkDefault cfg.stateDir; 161 + username = cfg.user; 162 + chroot = ''""''; 163 + pidfile = ''""''; 164 + # when running under systemd there is no need to daemonize 165 + do-daemonize = false; 166 + interface = mkDefault ([ "127.0.0.1" ] ++ (optional config.networking.enableIPv6 "::1")); 167 + access-control = mkDefault ([ "127.0.0.0/8 allow" ] ++ (optional config.networking.enableIPv6 "::1/128 allow")); 168 + auto-trust-anchor-file = mkIf cfg.enableRootTrustAnchor rootTrustAnchorFile; 169 + tls-cert-bundle = mkDefault "/etc/ssl/certs/ca-certificates.crt"; 170 + # prevent race conditions on system startup when interfaces are not yet 171 + # configured 172 + ip-freebind = mkDefault true; 173 + }; 174 + remote-control = { 175 + control-enable = mkDefault false; 176 + control-interface = mkDefault ([ "127.0.0.1" ] ++ (optional config.networking.enableIPv6 "::1")); 177 + server-key-file = mkDefault "${cfg.stateDir}/unbound_server.key"; 178 + server-cert-file = mkDefault "${cfg.stateDir}/unbound_server.pem"; 179 + control-key-file = mkDefault "${cfg.stateDir}/unbound_control.key"; 180 + control-cert-file = mkDefault "${cfg.stateDir}/unbound_control.pem"; 181 + } // optionalAttrs (cfg.localControlSocketPath != null) { 182 + control-enable = true; 183 + control-interface = cfg.localControlSocketPath; 184 + }; 185 + }; 186 + 187 environment.systemPackages = [ cfg.package ]; 188 189 + users.users = mkIf (cfg.user == "unbound") { 190 + unbound = { 191 + description = "unbound daemon user"; 192 + isSystemUser = true; 193 + group = cfg.group; 194 + }; 195 }; 196 197 + users.groups = mkIf (cfg.group == "unbound") { 198 unbound = {}; 199 }; 200 201 + networking = mkIf cfg.resolveLocalQueries { 202 + resolvconf = { 203 + useLocalResolver = mkDefault true; 204 + }; 205 206 + networkmanager.dns = "unbound"; 207 + }; 208 209 environment.etc."unbound/unbound.conf".source = confFile; 210 ··· 214 before = [ "nss-lookup.target" ]; 215 wantedBy = [ "multi-user.target" "nss-lookup.target" ]; 216 217 + path = mkIf cfg.settings.remote-control.control-enable [ pkgs.openssl ]; 218 + 219 + preStart = '' 220 + ${optionalString cfg.enableRootTrustAnchor '' 221 + ${cfg.package}/bin/unbound-anchor -a ${rootTrustAnchorFile} || echo "Root anchor updated!" 222 + ''} 223 + ${optionalString cfg.settings.remote-control.control-enable '' 224 + ${cfg.package}/bin/unbound-control-setup -d ${cfg.stateDir} 225 + ''} 226 ''; 227 228 restartTriggers = [ ··· 246 "CAP_SYS_RESOURCE" 247 ]; 248 249 + User = cfg.user; 250 + Group = cfg.group; 251 252 MemoryDenyWriteExecute = true; 253 NoNewPrivileges = true; ··· 276 RestrictNamespaces = true; 277 LockPersonality = true; 278 RestrictSUIDSGID = true; 279 + 280 + Restart = "on-failure"; 281 + RestartSec = "5s"; 282 }; 283 }; 284 }; 285 + 286 + imports = [ 287 + (mkRenamedOptionModule [ "services" "unbound" "interfaces" ] [ "services" "unbound" "settings" "server" "interface" ]) 288 + (mkChangedOptionModule [ "services" "unbound" "allowedAccess" ] [ "services" "unbound" "settings" "server" "access-control" ] ( 289 + config: map (value: "${value} allow") (getAttrFromPath [ "services" "unbound" "allowedAccess" ] config) 290 + )) 291 + (mkRemovedOptionModule [ "services" "unbound" "forwardAddresses" ] '' 292 + Add a new setting: 293 + services.unbound.settings.forward-zone = [{ 294 + name = "."; 295 + forward-addr = [ # Your current services.unbound.forwardAddresses ]; 296 + }]; 297 + If any of those addresses are local addresses (127.0.0.1 or ::1), you must 298 + also set services.unbound.settings.server.do-not-query-localhost to false. 299 + '') 300 + (mkRemovedOptionModule [ "services" "unbound" "extraConfig" ] '' 301 + You can use services.unbound.settings to add any configuration you want. 302 + '') 303 + ]; 304 }
+6 -3
nixos/modules/services/web-apps/bookstack.nix
··· 292 WorkingDirectory = "${bookstack}"; 293 }; 294 script = '' 295 # create .env file 296 echo " 297 APP_KEY=base64:$(head -n1 ${cfg.appKeyFile}) ··· 317 ${optionalString (cfg.nginx.addSSL || cfg.nginx.forceSSL || cfg.nginx.onlySSL || cfg.nginx.enableACME) "SESSION_SECURE_COOKIE=true"} 318 ${toString cfg.extraConfig} 319 " > "${cfg.dataDir}/.env" 320 - # set permissions 321 - chmod 700 "${cfg.dataDir}/.env" 322 323 # migrate db 324 ${pkgs.php}/bin/php artisan migrate --force 325 326 - # create caches 327 ${pkgs.php}/bin/php artisan config:cache 328 ${pkgs.php}/bin/php artisan route:cache 329 ${pkgs.php}/bin/php artisan view:cache
··· 292 WorkingDirectory = "${bookstack}"; 293 }; 294 script = '' 295 + # set permissions 296 + umask 077 297 # create .env file 298 echo " 299 APP_KEY=base64:$(head -n1 ${cfg.appKeyFile}) ··· 319 ${optionalString (cfg.nginx.addSSL || cfg.nginx.forceSSL || cfg.nginx.onlySSL || cfg.nginx.enableACME) "SESSION_SECURE_COOKIE=true"} 320 ${toString cfg.extraConfig} 321 " > "${cfg.dataDir}/.env" 322 323 # migrate db 324 ${pkgs.php}/bin/php artisan migrate --force 325 326 + # clear & create caches (needed in case of update) 327 + ${pkgs.php}/bin/php artisan cache:clear 328 + ${pkgs.php}/bin/php artisan config:clear 329 + ${pkgs.php}/bin/php artisan view:clear 330 ${pkgs.php}/bin/php artisan config:cache 331 ${pkgs.php}/bin/php artisan route:cache 332 ${pkgs.php}/bin/php artisan view:cache
+32
nixos/tests/airsonic.nix
···
··· 1 + import ./make-test-python.nix ({ pkgs, ... }: { 2 + name = "airsonic"; 3 + meta = with pkgs.lib.maintainers; { 4 + maintainers = [ sumnerevans ]; 5 + }; 6 + 7 + machine = 8 + { pkgs, ... }: 9 + { 10 + services.airsonic = { 11 + enable = true; 12 + maxMemory = 800; 13 + }; 14 + 15 + # Airsonic is a Java application, and unfortunately requires a significant 16 + # amount of memory. 17 + virtualisation.memorySize = 1024; 18 + }; 19 + 20 + testScript = '' 21 + def airsonic_is_up(_) -> bool: 22 + return machine.succeed("curl --fail http://localhost:4040/login") 23 + 24 + 25 + machine.start() 26 + machine.wait_for_unit("airsonic.service") 27 + machine.wait_for_open_port(4040) 28 + 29 + with machine.nested("Waiting for UI to work"): 30 + retry(airsonic_is_up) 31 + ''; 32 + })
+1
nixos/tests/all-tests.nix
··· 24 _3proxy = handleTest ./3proxy.nix {}; 25 acme = handleTest ./acme.nix {}; 26 agda = handleTest ./agda.nix {}; 27 amazon-init-shell = handleTest ./amazon-init-shell.nix {}; 28 ammonite = handleTest ./ammonite.nix {}; 29 apparmor = handleTest ./apparmor.nix {};
··· 24 _3proxy = handleTest ./3proxy.nix {}; 25 acme = handleTest ./acme.nix {}; 26 agda = handleTest ./agda.nix {}; 27 + airsonic = handleTest ./airsonic.nix {}; 28 amazon-init-shell = handleTest ./amazon-init-shell.nix {}; 29 ammonite = handleTest ./ammonite.nix {}; 30 apparmor = handleTest ./apparmor.nix {};
+153 -13
nixos/tests/jellyfin.nix
··· 1 - import ./make-test-python.nix ({ lib, ...}: 2 3 - { 4 - name = "jellyfin"; 5 - meta.maintainers = with lib.maintainers; [ minijackson ]; 6 7 - machine = 8 - { ... }: 9 - { services.jellyfin.enable = true; }; 10 11 - testScript = '' 12 - machine.wait_for_unit("jellyfin.service") 13 - machine.wait_for_open_port(8096) 14 - machine.succeed("curl --fail http://localhost:8096/") 15 - ''; 16 - })
··· 1 + import ./make-test-python.nix ({ lib, pkgs, ... }: 2 + 3 + { 4 + name = "jellyfin"; 5 + meta.maintainers = with lib.maintainers; [ minijackson ]; 6 + 7 + machine = 8 + { ... }: 9 + { 10 + services.jellyfin.enable = true; 11 + environment.systemPackages = with pkgs; [ ffmpeg ]; 12 + }; 13 + 14 + # Documentation of the Jellyfin API: https://api.jellyfin.org/ 15 + # Beware, this link can be resource intensive 16 + testScript = 17 + let 18 + payloads = { 19 + auth = pkgs.writeText "auth.json" (builtins.toJSON { 20 + Username = "jellyfin"; 21 + }); 22 + empty = pkgs.writeText "empty.json" (builtins.toJSON { }); 23 + }; 24 + in 25 + '' 26 + import json 27 + import time 28 + from urllib.parse import urlencode 29 + 30 + machine.wait_for_unit("jellyfin.service") 31 + machine.wait_for_open_port(8096) 32 + machine.succeed("curl --fail http://localhost:8096/") 33 + 34 + machine.wait_until_succeeds("curl --fail http://localhost:8096/health | grep Healthy") 35 + 36 + auth_header = 'MediaBrowser Client="NixOS Integration Tests", DeviceId="1337", Device="Apple II", Version="20.09"' 37 + 38 + 39 + def api_get(path): 40 + return f"curl --fail 'http://localhost:8096{path}' -H 'X-Emby-Authorization:{auth_header}'" 41 + 42 + 43 + def api_post(path, json_file=None): 44 + if json_file: 45 + return f"curl --fail -X post 'http://localhost:8096{path}' -d '@{json_file}' -H Content-Type:application/json -H 'X-Emby-Authorization:{auth_header}'" 46 + else: 47 + return f"curl --fail -X post 'http://localhost:8096{path}' -H 'X-Emby-Authorization:{auth_header}'" 48 + 49 + 50 + with machine.nested("Wizard completes"): 51 + machine.wait_until_succeeds(api_get("/Startup/Configuration")) 52 + machine.succeed(api_get("/Startup/FirstUser")) 53 + machine.succeed(api_post("/Startup/Complete")) 54 55 + with machine.nested("Can login"): 56 + auth_result = machine.succeed( 57 + api_post( 58 + "/Users/AuthenticateByName", 59 + "${payloads.auth}", 60 + ) 61 + ) 62 + auth_result = json.loads(auth_result) 63 + auth_token = auth_result["AccessToken"] 64 + auth_header += f", Token={auth_token}" 65 66 + sessions_result = machine.succeed(api_get("/Sessions")) 67 + sessions_result = json.loads(sessions_result) 68 69 + this_session = [ 70 + session for session in sessions_result if session["DeviceId"] == "1337" 71 + ] 72 + if len(this_session) != 1: 73 + raise Exception("Session not created") 74 + 75 + me = machine.succeed(api_get("/Users/Me")) 76 + me = json.loads(me)["Id"] 77 + 78 + with machine.nested("Can add library"): 79 + tempdir = machine.succeed("mktemp -d -p /var/lib/jellyfin").strip() 80 + machine.succeed(f"chmod 755 '{tempdir}'") 81 + 82 + # Generate a dummy video that we can test later 83 + videofile = f"{tempdir}/Big Buck Bunny (2008) [1080p].mkv" 84 + machine.succeed(f"ffmpeg -f lavfi -i testsrc2=duration=5 '{videofile}'") 85 + 86 + add_folder_query = urlencode( 87 + { 88 + "name": "My Library", 89 + "collectionType": "Movies", 90 + "paths": tempdir, 91 + "refreshLibrary": "true", 92 + } 93 + ) 94 + 95 + machine.succeed( 96 + api_post( 97 + f"/Library/VirtualFolders?{add_folder_query}", 98 + "${payloads.empty}", 99 + ) 100 + ) 101 + 102 + 103 + def is_refreshed(_): 104 + folders = machine.succeed(api_get(f"/Library/VirtualFolders")) 105 + folders = json.loads(folders) 106 + print(folders) 107 + return all(folder["RefreshStatus"] == "Idle" for folder in folders) 108 + 109 + 110 + retry(is_refreshed) 111 + 112 + with machine.nested("Can identify videos"): 113 + items = [] 114 + 115 + # For some reason, having the folder refreshed doesn't mean the 116 + # movie was scanned 117 + def has_movie(_): 118 + global items 119 + 120 + items = machine.succeed( 121 + api_get(f"/Users/{me}/Items?IncludeItemTypes=Movie&Recursive=true") 122 + ) 123 + items = json.loads(items)["Items"] 124 + 125 + return len(items) == 1 126 + 127 + retry(has_movie) 128 + 129 + video = items[0]["Id"] 130 + 131 + item_info = machine.succeed(api_get(f"/Users/{me}/Items/{video}")) 132 + item_info = json.loads(item_info) 133 + 134 + if item_info["Name"] != "Big Buck Bunny": 135 + raise Exception("Jellyfin failed to properly identify file") 136 + 137 + with machine.nested("Can read videos"): 138 + media_source_id = item_info["MediaSources"][0]["Id"] 139 + 140 + machine.succeed( 141 + "ffmpeg" 142 + + f" -headers 'X-Emby-Authorization:{auth_header}'" 143 + + f" -i http://localhost:8096/Videos/{video}/master.m3u8?mediaSourceId={media_source_id}" 144 + + f" /tmp/test.mkv" 145 + ) 146 + 147 + duration = machine.succeed( 148 + "ffprobe /tmp/test.mkv" 149 + + " -show_entries format=duration" 150 + + " -of compact=print_section=0:nokey=1" 151 + ) 152 + 153 + if duration.strip() != "5.000000": 154 + raise Exception("Downloaded video has wrong duration") 155 + ''; 156 + })
+36 -1
nixos/tests/prometheus-exporters.nix
··· 334 services.knot = { 335 enable = true; 336 extraArgs = [ "-v" ]; 337 }; 338 }; 339 exporterTest = '' 340 wait_for_unit("knot.service") 341 wait_for_unit("prometheus-knot-exporter.service") 342 wait_for_open_port(9433) 343 - succeed("curl -sSf 'localhost:9433' | grep -q 'knot_server_zone_count 0.0'") 344 ''; 345 }; 346
··· 334 services.knot = { 335 enable = true; 336 extraArgs = [ "-v" ]; 337 + extraConfig = '' 338 + server: 339 + listen: 127.0.0.1@53 340 + 341 + template: 342 + - id: default 343 + global-module: mod-stats 344 + dnssec-signing: off 345 + zonefile-sync: -1 346 + journal-db: /var/lib/knot/journal 347 + kasp-db: /var/lib/knot/kasp 348 + timer-db: /var/lib/knot/timer 349 + zonefile-load: difference 350 + storage: ${pkgs.buildEnv { 351 + name = "foo"; 352 + paths = [ 353 + (pkgs.writeTextDir "test.zone" '' 354 + @ SOA ns.example.com. noc.example.com. 2019031301 86400 7200 3600000 172800 355 + @ NS ns1 356 + @ NS ns2 357 + ns1 A 192.168.0.1 358 + '') 359 + ]; 360 + }} 361 + 362 + mod-stats: 363 + - id: custom 364 + edns-presence: on 365 + query-type: on 366 + 367 + zone: 368 + - domain: test 369 + file: test.zone 370 + module: mod-stats/custom 371 + ''; 372 }; 373 }; 374 exporterTest = '' 375 wait_for_unit("knot.service") 376 wait_for_unit("prometheus-knot-exporter.service") 377 wait_for_open_port(9433) 378 + succeed("curl -sSf 'localhost:9433' | grep -q 'knot_server_zone_count 1.0'") 379 ''; 380 }; 381
+40 -28
nixos/tests/unbound.nix
··· 61 62 services.unbound = { 63 enable = true; 64 - interfaces = [ "192.168.0.1" "fd21::1" "::1" "127.0.0.1" ]; 65 - allowedAccess = [ "192.168.0.0/24" "fd21::/64" "::1" "127.0.0.0/8" ]; 66 - extraConfig = '' 67 - server: 68 - local-data: "example.local. IN A 1.2.3.4" 69 - local-data: "example.local. IN AAAA abcd::eeff" 70 - ''; 71 }; 72 }; 73 ··· 90 91 services.unbound = { 92 enable = true; 93 - allowedAccess = [ "192.168.0.0/24" "fd21::/64" "::1" "127.0.0.0/8" ]; 94 - interfaces = [ "::1" "127.0.0.1" "192.168.0.2" "fd21::2" 95 - "192.168.0.2@853" "fd21::2@853" "::1@853" "127.0.0.1@853" 96 - "192.168.0.2@443" "fd21::2@443" "::1@443" "127.0.0.1@443" ]; 97 - forwardAddresses = [ 98 - (lib.head nodes.authoritative.config.networking.interfaces.eth1.ipv6.addresses).address 99 - (lib.head nodes.authoritative.config.networking.interfaces.eth1.ipv4.addresses).address 100 - ]; 101 - extraConfig = '' 102 - server: 103 - tls-service-pem: ${cert}/cert.pem 104 - tls-service-key: ${cert}/key.pem 105 - ''; 106 }; 107 }; 108 ··· 122 123 services.unbound = { 124 enable = true; 125 - allowedAccess = [ "::1" "127.0.0.0/8" ]; 126 - interfaces = [ "::1" "127.0.0.1" ]; 127 localControlSocketPath = "/run/unbound/unbound.ctl"; 128 - extraConfig = '' 129 - include: "/etc/unbound/extra*.conf" 130 - ''; 131 }; 132 133 users.users = { ··· 143 unauthorizeduser = { isSystemUser = true; }; 144 }; 145 146 environment.etc = { 147 "unbound-extra1.conf".text = '' 148 forward-zone: 149 - name: "example.local." 150 - forward-addr: ${(lib.head nodes.resolver.config.networking.interfaces.eth1.ipv6.addresses).address} 151 - forward-addr: ${(lib.head nodes.resolver.config.networking.interfaces.eth1.ipv4.addresses).address} 152 ''; 153 "unbound-extra2.conf".text = '' 154 auth-zone:
··· 61 62 services.unbound = { 63 enable = true; 64 + settings = { 65 + server = { 66 + interface = [ "192.168.0.1" "fd21::1" "::1" "127.0.0.1" ]; 67 + access-control = [ "192.168.0.0/24 allow" "fd21::/64 allow" "::1 allow" "127.0.0.0/8 allow" ]; 68 + local-data = [ 69 + ''"example.local. IN A 1.2.3.4"'' 70 + ''"example.local. IN AAAA abcd::eeff"'' 71 + ]; 72 + }; 73 + }; 74 }; 75 }; 76 ··· 93 94 services.unbound = { 95 enable = true; 96 + settings = { 97 + server = { 98 + interface = [ "::1" "127.0.0.1" "192.168.0.2" "fd21::2" 99 + "192.168.0.2@853" "fd21::2@853" "::1@853" "127.0.0.1@853" 100 + "192.168.0.2@443" "fd21::2@443" "::1@443" "127.0.0.1@443" ]; 101 + access-control = [ "192.168.0.0/24 allow" "fd21::/64 allow" "::1 allow" "127.0.0.0/8 allow" ]; 102 + tls-service-pem = "${cert}/cert.pem"; 103 + tls-service-key = "${cert}/key.pem"; 104 + }; 105 + forward-zone = [ 106 + { 107 + name = "."; 108 + forward-addr = [ 109 + (lib.head nodes.authoritative.config.networking.interfaces.eth1.ipv6.addresses).address 110 + (lib.head nodes.authoritative.config.networking.interfaces.eth1.ipv4.addresses).address 111 + ]; 112 + } 113 + ]; 114 + }; 115 }; 116 }; 117 ··· 131 132 services.unbound = { 133 enable = true; 134 + settings = { 135 + server = { 136 + interface = [ "::1" "127.0.0.1" ]; 137 + access-control = [ "::1 allow" "127.0.0.0/8 allow" ]; 138 + }; 139 + include = "/etc/unbound/extra*.conf"; 140 + }; 141 localControlSocketPath = "/run/unbound/unbound.ctl"; 142 }; 143 144 users.users = { ··· 154 unauthorizeduser = { isSystemUser = true; }; 155 }; 156 157 + # Used for testing configuration reloading 158 environment.etc = { 159 "unbound-extra1.conf".text = '' 160 forward-zone: 161 + name: "example.local." 162 + forward-addr: ${(lib.head nodes.resolver.config.networking.interfaces.eth1.ipv6.addresses).address} 163 + forward-addr: ${(lib.head nodes.resolver.config.networking.interfaces.eth1.ipv4.addresses).address} 164 ''; 165 "unbound-extra2.conf".text = '' 166 auth-zone:
+2 -1
pkgs/applications/editors/emacs-modes/melpa-packages.nix
··· 362 zmq = super.zmq.overrideAttrs (old: { 363 stripDebugList = [ "share" ]; 364 preBuild = '' 365 make 366 ''; 367 nativeBuildInputs = [ ··· 372 (pkgs.zeromq.override { enableDrafts = true; }) 373 ]; 374 postInstall = '' 375 - mv $out/share/emacs/site-lisp/elpa/zmq-*/src/.libs/emacs-zmq.so $out/share/emacs/site-lisp/elpa/zmq-* 376 rm -r $out/share/emacs/site-lisp/elpa/zmq-*/src 377 rm $out/share/emacs/site-lisp/elpa/zmq-*/Makefile 378 '';
··· 362 zmq = super.zmq.overrideAttrs (old: { 363 stripDebugList = [ "share" ]; 364 preBuild = '' 365 + export EZMQ_LIBDIR=$(mktemp -d) 366 make 367 ''; 368 nativeBuildInputs = [ ··· 373 (pkgs.zeromq.override { enableDrafts = true; }) 374 ]; 375 postInstall = '' 376 + mv $EZMQ_LIBDIR/emacs-zmq.* $out/share/emacs/site-lisp/elpa/zmq-* 377 rm -r $out/share/emacs/site-lisp/elpa/zmq-*/src 378 rm $out/share/emacs/site-lisp/elpa/zmq-*/Makefile 379 '';
+6 -3
pkgs/applications/misc/mako/default.nix
··· 5 6 stdenv.mkDerivation rec { 7 pname = "mako"; 8 - version = "1.4.1"; 9 10 src = fetchFromGitHub { 11 owner = "emersion"; 12 repo = pname; 13 rev = "v${version}"; 14 - sha256 = "0hwvibpnrximb628w9dsfjpi30b5jy7nfkm4d94z5vhp78p43vxh"; 15 }; 16 17 nativeBuildInputs = [ meson ninja pkg-config scdoc wayland-protocols wrapGAppsHook ]; 18 buildInputs = [ systemd pango cairo gdk-pixbuf wayland ]; 19 20 - mesonFlags = [ "-Dzsh-completions=true" ]; 21 22 meta = with lib; { 23 description = "A lightweight Wayland notification daemon";
··· 5 6 stdenv.mkDerivation rec { 7 pname = "mako"; 8 + version = "1.5"; 9 10 src = fetchFromGitHub { 11 owner = "emersion"; 12 repo = pname; 13 rev = "v${version}"; 14 + sha256 = "0f92krcgybl4113g2gawf7lcbh1fss7bq4cx81h1zyn7yvxlwx2b"; 15 }; 16 17 nativeBuildInputs = [ meson ninja pkg-config scdoc wayland-protocols wrapGAppsHook ]; 18 buildInputs = [ systemd pango cairo gdk-pixbuf wayland ]; 19 20 + mesonFlags = [ 21 + "-Dzsh-completions=true" 22 + "-Dsd-bus-provider=libsystemd" 23 + ]; 24 25 meta = with lib; { 26 description = "A lightweight Wayland notification daemon";
+1
pkgs/applications/networking/browsers/chromium/browser.nix
··· 85 else [ primeos thefloweringash bendlas ]; 86 license = if enableWideVine then licenses.unfree else licenses.bsd3; 87 platforms = platforms.linux; 88 hydraPlatforms = if (channel == "stable" || channel == "ungoogled-chromium") 89 then ["aarch64-linux" "x86_64-linux"] 90 else [];
··· 85 else [ primeos thefloweringash bendlas ]; 86 license = if enableWideVine then licenses.unfree else licenses.bsd3; 87 platforms = platforms.linux; 88 + mainProgram = "chromium"; 89 hydraPlatforms = if (channel == "stable" || channel == "ungoogled-chromium") 90 then ["aarch64-linux" "x86_64-linux"] 91 else [];
+4 -3
pkgs/applications/science/physics/xfitter/default.nix
··· 39 40 nativeBuildInputs = [ gfortran which ]; 41 buildInputs = 42 - [ apfel apfelgrid applgrid blas lhapdf lapack mela root5 qcdnum libtirpc ] 43 # pdf2yaml requires fmemopen and open_memstream which are not readily available on Darwin 44 ++ lib.optional (!stdenv.isDarwin) libyaml 45 ; 46 propagatedBuildInputs = [ lynx ]; 47 ··· 49 50 hardeningDisable = [ "format" ]; 51 52 - NIX_CFLAGS_COMPILE = [ "-I${libtirpc.dev}/include/tirpc" ]; 53 - NIX_LDFLAGS = [ "-ltirpc" ]; 54 55 meta = with lib; { 56 description = "The xFitter project is an open source QCD fit framework ready to extract PDFs and assess the impact of new data";
··· 39 40 nativeBuildInputs = [ gfortran which ]; 41 buildInputs = 42 + [ apfel apfelgrid applgrid blas lhapdf lapack mela root5 qcdnum ] 43 # pdf2yaml requires fmemopen and open_memstream which are not readily available on Darwin 44 ++ lib.optional (!stdenv.isDarwin) libyaml 45 + ++ lib.optional (stdenv.hostPlatform.libc == "glibc") libtirpc 46 ; 47 propagatedBuildInputs = [ lynx ]; 48 ··· 50 51 hardeningDisable = [ "format" ]; 52 53 + NIX_CFLAGS_COMPILE = lib.optional (stdenv.hostPlatform.libc == "glibc") "-I${libtirpc.dev}/include/tirpc"; 54 + NIX_LDFLAGS = lib.optional (stdenv.hostPlatform.libc == "glibc") "-ltirpc"; 55 56 meta = with lib; { 57 description = "The xFitter project is an open source QCD fit framework ready to extract PDFs and assess the impact of new data";
+2 -2
pkgs/applications/version-management/git-and-tools/git-machete/default.nix
··· 4 5 buildPythonApplication rec { 6 pname = "git-machete"; 7 - version = "3.1.0"; 8 9 src = fetchPypi { 10 inherit pname version; 11 - sha256 = "0bb6ap8sdp4ad0xkh3y8vj46a363g5gdw0dzf9ycw0z9ah8ispfx"; 12 }; 13 14 nativeBuildInputs = [ installShellFiles pbr ];
··· 4 5 buildPythonApplication rec { 6 pname = "git-machete"; 7 + version = "3.1.1"; 8 9 src = fetchPypi { 10 inherit pname version; 11 + sha256 = "00f1rq80vya464dkvf3mzs9zpvkz15ki8srwg08snsm5kb7amwlm"; 12 }; 13 14 nativeBuildInputs = [ installShellFiles pbr ];
+2 -2
pkgs/applications/video/kodi-packages/inputstream-ffmpegdirect/default.nix
··· 3 buildKodiBinaryAddon rec { 4 pname = "inputstream-ffmpegdirect"; 5 namespace = "inputstream.ffmpegdirect"; 6 - version = "1.21.1"; 7 8 src = fetchFromGitHub { 9 owner = "xbmc"; 10 repo = "inputstream.ffmpegdirect"; 11 rev = "${version}-${rel}"; 12 - sha256 = "1x5gj7iq74ysyfrzvp135m0pjz47zamcgw1v1334xd7xcx5q178p"; 13 }; 14 15 extraBuildInputs = [ bzip2 zlib kodi.ffmpeg ];
··· 3 buildKodiBinaryAddon rec { 4 pname = "inputstream-ffmpegdirect"; 5 namespace = "inputstream.ffmpegdirect"; 6 + version = "1.21.2"; 7 8 src = fetchFromGitHub { 9 owner = "xbmc"; 10 repo = "inputstream.ffmpegdirect"; 11 rev = "${version}-${rel}"; 12 + sha256 = "sha256-FXtjR/4/f434gp78PBSt+QrYtMYcnljO3Htxss/wH7U="; 13 }; 14 15 extraBuildInputs = [ bzip2 zlib kodi.ffmpeg ];
+2 -2
pkgs/applications/video/kodi-packages/pvr-iptvsimple/default.nix
··· 6 buildKodiBinaryAddon rec { 7 pname = "pvr-iptvsimple"; 8 namespace = "pvr.iptvsimple"; 9 - version = "7.6.1"; 10 11 src = fetchFromGitHub { 12 owner = "kodi-pvr"; 13 repo = "pvr.iptvsimple"; 14 rev = "${version}-${rel}"; 15 - sha256 = "1g1ildl2l6nl63qbfhijcbmvr6z84nqhjsy2lgx3dy25cmcqzir9"; 16 }; 17 18 extraBuildInputs = [
··· 6 buildKodiBinaryAddon rec { 7 pname = "pvr-iptvsimple"; 8 namespace = "pvr.iptvsimple"; 9 + version = "7.6.2"; 10 11 src = fetchFromGitHub { 12 owner = "kodi-pvr"; 13 repo = "pvr.iptvsimple"; 14 rev = "${version}-${rel}"; 15 + sha256 = "sha256-MdgPUKkbqNt/WKUTrYNetlyUBQcYLSn0J8EHH2Z9I+g="; 16 }; 17 18 extraBuildInputs = [
+60
pkgs/development/python-modules/authcaptureproxy/default.nix
···
··· 1 + { lib 2 + , buildPythonPackage 3 + , fetchFromGitHub 4 + , poetry-core 5 + , aiohttp 6 + , beautifulsoup4 7 + , httpx 8 + , importlib-metadata 9 + , multidict 10 + , typer 11 + , yarl 12 + , pytest-asyncio 13 + , pytestCheckHook 14 + }: 15 + 16 + buildPythonPackage rec { 17 + pname = "authcaptureproxy"; 18 + version = "1.0.1"; 19 + format = "pyproject"; 20 + 21 + src = fetchFromGitHub { 22 + owner = "alandtse"; 23 + repo = "auth_capture_proxy"; 24 + rev = "v${version}"; 25 + sha256 = "1fbrmh6qa3dm3q3zdxaa0fls94wardbcvnjgwxk686wpjgs1xrs4"; 26 + }; 27 + 28 + postPatch = '' 29 + # https://github.com/alandtse/auth_capture_proxy/issues/14 30 + substituteInPlace pyproject.toml --replace \ 31 + "poetry.masonry.api" \ 32 + "poetry.core.masonry.api" 33 + ''; 34 + 35 + nativeBuildInputs = [ 36 + poetry-core 37 + ]; 38 + 39 + propagatedBuildInputs = [ 40 + aiohttp 41 + beautifulsoup4 42 + httpx 43 + importlib-metadata 44 + multidict 45 + typer 46 + yarl 47 + ]; 48 + 49 + checkInputs = [ 50 + pytest-asyncio 51 + pytestCheckHook 52 + ]; 53 + 54 + meta = with lib; { 55 + description = "A proxy to capture authentication information from a webpage"; 56 + homepage = "https://github.com/alandtse/auth_capture_proxy"; 57 + license = licenses.asl20; 58 + maintainers = with maintainers; [ graham33 hexa ]; 59 + }; 60 + }
+2 -2
pkgs/development/python-modules/bellows/default.nix
··· 14 15 buildPythonPackage rec { 16 pname = "bellows"; 17 - version = "0.23.1"; 18 19 src = fetchFromGitHub { 20 owner = "zigpy"; 21 repo = "bellows"; 22 rev = version; 23 - sha256 = "sha256-c9rKRmGMlYrzVQmUuM9P3c/Jm4QVM2aBRSZ0OkyrPTY="; 24 }; 25 26 prePatch = ''
··· 14 15 buildPythonPackage rec { 16 pname = "bellows"; 17 + version = "0.24.0"; 18 19 src = fetchFromGitHub { 20 owner = "zigpy"; 21 repo = "bellows"; 22 rev = version; 23 + sha256 = "00sa4x1qzv861z9d83lk4lp1g2pqiv9hpawj92w4qn1wnqxbz6rw"; 24 }; 25 26 prePatch = ''
+9 -3
pkgs/development/python-modules/flask-httpauth/default.nix
··· 1 - { lib, buildPythonPackage, fetchPypi, flask }: 2 3 buildPythonPackage rec { 4 pname = "Flask-HTTPAuth"; 5 - version = "4.2.0"; 6 7 src = fetchPypi { 8 inherit pname version; 9 - sha256 = "8c7e49e53ce7dc14e66fe39b9334e4b7ceb8d0b99a6ba1c3562bb528ef9da84a"; 10 }; 11 12 propagatedBuildInputs = [ flask ]; 13 14 meta = with lib; { 15 description = "Extension that provides HTTP authentication for Flask routes";
··· 1 + { lib, python, buildPythonPackage, fetchPypi, flask }: 2 3 buildPythonPackage rec { 4 pname = "Flask-HTTPAuth"; 5 + version = "4.3.0"; 6 7 src = fetchPypi { 8 inherit pname version; 9 + sha256 = "05j1mckwhgicrlj4j7ni2rhcf9w4i7phll06jbjjyvs3rj1l4q1f"; 10 }; 11 12 propagatedBuildInputs = [ flask ]; 13 + 14 + pythonImportsCheck = [ "flask_httpauth" ]; 15 + 16 + checkPhase = '' 17 + ${python.interpreter} -m unittest discover 18 + ''; 19 20 meta = with lib; { 21 description = "Extension that provides HTTP authentication for Flask routes";
+2 -2
pkgs/development/python-modules/pysmappee/default.nix
··· 11 12 buildPythonPackage rec { 13 pname = "pysmappee"; 14 - version = "0.2.24"; 15 disabled = pythonOlder "3.7"; 16 17 src = fetchFromGitHub { 18 owner = "smappee"; 19 repo = pname; 20 rev = version; 21 - sha256 = "sha256-M1qzwGf8q4WgkEL0nK1yjn3JSBbP7mr75IV45Oa+ypM="; 22 }; 23 24 propagatedBuildInputs = [
··· 11 12 buildPythonPackage rec { 13 pname = "pysmappee"; 14 + version = "0.2.25"; 15 disabled = pythonOlder "3.7"; 16 17 src = fetchFromGitHub { 18 owner = "smappee"; 19 repo = pname; 20 rev = version; 21 + sha256 = "0ld3pb86dq61fcvr6zigdz1vjjcwf7izzkajyg82nmb508a570d7"; 22 }; 23 24 propagatedBuildInputs = [
+2 -2
pkgs/development/python-modules/pysonos/default.nix
··· 14 15 buildPythonPackage rec { 16 pname = "pysonos"; 17 - version = "0.0.43"; 18 19 disabled = !isPy3k; 20 ··· 23 owner = "amelchio"; 24 repo = pname; 25 rev = "v${version}"; 26 - sha256 = "sha256-OobKlAymXXvQH6m77Uqn2eoTlWgs8EBxYIDFJ5wwMKA="; 27 }; 28 29 propagatedBuildInputs = [ ifaddr requests xmltodict ];
··· 14 15 buildPythonPackage rec { 16 pname = "pysonos"; 17 + version = "0.0.44"; 18 19 disabled = !isPy3k; 20 ··· 23 owner = "amelchio"; 24 repo = pname; 25 rev = "v${version}"; 26 + sha256 = "108818mkb037zs4ikilrskfppcbmqslsm6zaxmy8pphjh7c299mz"; 27 }; 28 29 propagatedBuildInputs = [ ifaddr requests xmltodict ];
+2 -2
pkgs/development/python-modules/simplisafe-python/default.nix
··· 18 19 buildPythonPackage rec { 20 pname = "simplisafe-python"; 21 - version = "9.6.9"; 22 format = "pyproject"; 23 disabled = pythonOlder "3.6"; 24 ··· 26 owner = "bachya"; 27 repo = pname; 28 rev = version; 29 - sha256 = "1q5w5pvrgj94bzd5wig79l4hipkfrcdah54rvwyi7b8q46gw77sg"; 30 }; 31 32 nativeBuildInputs = [ poetry-core ];
··· 18 19 buildPythonPackage rec { 20 pname = "simplisafe-python"; 21 + version = "9.6.10"; 22 format = "pyproject"; 23 disabled = pythonOlder "3.6"; 24 ··· 26 owner = "bachya"; 27 repo = pname; 28 rev = version; 29 + sha256 = "0cc5kxxishxhkg1nqmgbh36yxs8yjfynmimzjnaqkqfrs9iq46mr"; 30 }; 31 32 nativeBuildInputs = [ poetry-core ];
+8 -8
pkgs/development/python-modules/teslajsonpy/default.nix
··· 1 { lib 2 , aiohttp 3 , backoff 4 , beautifulsoup4 5 , buildPythonPackage 6 , fetchFromGitHub 7 , fetchpatch 8 , pytest-asyncio 9 , pytestCheckHook 10 , wrapt ··· 12 13 buildPythonPackage rec { 14 pname = "teslajsonpy"; 15 - version = "0.11.5"; 16 17 src = fetchFromGitHub { 18 owner = "zabuldon"; 19 repo = pname; 20 rev = "v${version}"; 21 - sha256 = "sha256-s0IZ1UNldYddaR3zJoYS6ey8Kjxd1fr4fOwf0gNNbow="; 22 }; 23 24 - patches = [ 25 - (fetchpatch { 26 - name = "dont-use-dummpy-module-bs4.patch"; 27 - url = "https://github.com/zabuldon/teslajsonpy/pull/138/commits/f5a788e47d8338c8ebb06d954f802ba1ec614db3.patch"; 28 - sha256 = "0rws7fhxmca8d5w0bkygx8scvzah3yvb3yfhn05qmp73mn3pmcb3"; 29 - }) 30 ]; 31 32 propagatedBuildInputs = [ 33 aiohttp 34 backoff 35 beautifulsoup4
··· 1 { lib 2 , aiohttp 3 + , authcaptureproxy 4 , backoff 5 , beautifulsoup4 6 , buildPythonPackage 7 , fetchFromGitHub 8 , fetchpatch 9 + , poetry-core 10 , pytest-asyncio 11 , pytestCheckHook 12 , wrapt ··· 14 15 buildPythonPackage rec { 16 pname = "teslajsonpy"; 17 + version = "0.18.3"; 18 + format = "pyproject"; 19 20 src = fetchFromGitHub { 21 owner = "zabuldon"; 22 repo = pname; 23 rev = "v${version}"; 24 + sha256 = "1hdc5gm6dg1vw6qfs3z6mg2m94scrvjphj0lin6pi8n3zqj1h26k"; 25 }; 26 27 + nativeBuildInputs = [ 28 + poetry-core 29 ]; 30 31 propagatedBuildInputs = [ 32 + authcaptureproxy 33 aiohttp 34 backoff 35 beautifulsoup4
+3 -3
pkgs/development/python-modules/yeelight/default.nix
··· 9 10 buildPythonPackage rec { 11 pname = "yeelight"; 12 - version = "0.6.1"; 13 disabled = pythonOlder "3.4"; 14 15 src = fetchFromGitLab { 16 owner = "stavros"; 17 repo = "python-yeelight"; 18 rev = "v${version}"; 19 - sha256 = "sha256-LB7A8E22hyqhVBElrOwtC3IPNkyQkU7ZJ1ScqaXQ6zs="; 20 }; 21 22 propagatedBuildInputs = [ ··· 35 meta = with lib; { 36 description = "Python library for controlling YeeLight RGB bulbs"; 37 homepage = "https://gitlab.com/stavros/python-yeelight/"; 38 - license = licenses.asl20; 39 maintainers = with maintainers; [ nyanloutre ]; 40 }; 41 }
··· 9 10 buildPythonPackage rec { 11 pname = "yeelight"; 12 + version = "0.6.2"; 13 disabled = pythonOlder "3.4"; 14 15 src = fetchFromGitLab { 16 owner = "stavros"; 17 repo = "python-yeelight"; 18 rev = "v${version}"; 19 + sha256 = "0v0i0s8d5z6b63f2sy42wf85drdzrzswlm1hknzr7v6lfr52pwwm"; 20 }; 21 22 propagatedBuildInputs = [ ··· 35 meta = with lib; { 36 description = "Python library for controlling YeeLight RGB bulbs"; 37 homepage = "https://gitlab.com/stavros/python-yeelight/"; 38 + license = licenses.bsd2; 39 maintainers = with maintainers; [ nyanloutre ]; 40 }; 41 }
+2 -2
pkgs/development/tools/rep/default.nix
··· 2 3 stdenv.mkDerivation rec { 4 pname = "rep"; 5 - version = "0.2.1"; 6 7 src = fetchFromGitHub { 8 owner = "eraserhd"; 9 repo = pname; 10 rev = "v${version}"; 11 - sha256 = "1p0dbaj7f4irzzw1m44x3b3j3jjij9i4rs83wkrpiamlq61077di"; 12 }; 13 14 nativeBuildInputs = [
··· 2 3 stdenv.mkDerivation rec { 4 pname = "rep"; 5 + version = "0.2.2"; 6 7 src = fetchFromGitHub { 8 owner = "eraserhd"; 9 repo = pname; 10 rev = "v${version}"; 11 + sha256 = "pqmISVm3rYGxRuwKieVpRwXE8ufWnBHEA6h2hrob51s="; 12 }; 13 14 nativeBuildInputs = [
+1
pkgs/servers/home-assistant/default.nix
··· 389 "tasmota" 390 "tcp" 391 "template" 392 "threshold" 393 "time_date" 394 "timer"
··· 389 "tasmota" 390 "tcp" 391 "template" 392 + "tesla" 393 "threshold" 394 "time_date" 395 "timer"
+5 -1
pkgs/servers/misc/airsonic/default.nix
··· 1 - { lib, stdenv, fetchurl }: 2 3 stdenv.mkDerivation rec { 4 pname = "airsonic"; ··· 13 mkdir -p "$out/webapps" 14 cp "$src" "$out/webapps/airsonic.war" 15 ''; 16 17 meta = with lib; { 18 description = "Personal media streamer";
··· 1 + { lib, stdenv, fetchurl, nixosTests }: 2 3 stdenv.mkDerivation rec { 4 pname = "airsonic"; ··· 13 mkdir -p "$out/webapps" 14 cp "$src" "$out/webapps/airsonic.war" 15 ''; 16 + 17 + passthru.tests = { 18 + airsonic-starts = nixosTests.airsonic; 19 + }; 20 21 meta = with lib; { 22 description = "Personal media streamer";
+10 -1
pkgs/servers/monitoring/prometheus/knot-exporter.nix
··· 1 - { stdenv, fetchFromGitHub, lib, python3, nixosTests }: 2 3 stdenv.mkDerivation rec { 4 pname = "knot-exporter"; ··· 10 rev = "21dd46b401e0c1aea0b173e19462cdf89e1f444e"; 11 sha256 = "sha256-4au4lpaq3jcqC2JXdCcf8h+YN8Nmm4eE0kZwA+1rWlc="; 12 }; 13 14 dontBuild = true; 15
··· 1 + { stdenv, fetchFromGitHub, lib, python3, nixosTests, fetchpatch }: 2 3 stdenv.mkDerivation rec { 4 pname = "knot-exporter"; ··· 10 rev = "21dd46b401e0c1aea0b173e19462cdf89e1f444e"; 11 sha256 = "sha256-4au4lpaq3jcqC2JXdCcf8h+YN8Nmm4eE0kZwA+1rWlc="; 12 }; 13 + 14 + patches = [ 15 + # Fixes a crash with all metrics enabled. See 16 + # https://github.com/ghedo/knot_exporter/pull/6 for further context. 17 + (fetchpatch { 18 + url = "https://github.com/ghedo/knot_exporter/commit/2317476e080369450ae51a707ccd30d4b89d680f.patch"; 19 + sha256 = "sha256-yEPu8EE1V/draNx9DeMrPj+bMfJRxauweo33dITl4AA="; 20 + }) 21 + ]; 22 23 dontBuild = true; 24
+2 -2
pkgs/servers/web-apps/bookstack/default.nix
··· 15 16 in package.override rec { 17 name = "bookstack"; 18 - version = "0.31.7"; 19 20 src = fetchFromGitHub { 21 owner = "bookstackapp"; 22 repo = name; 23 rev = "v${version}"; 24 - sha256 = "1jak6g2q4zbr0gxqj0bqhks687whmmw8ylzwm4saws7ikcxkwna4"; 25 }; 26 27 meta = with lib; {
··· 15 16 in package.override rec { 17 name = "bookstack"; 18 + version = "21.04.3"; 19 20 src = fetchFromGitHub { 21 owner = "bookstackapp"; 22 repo = name; 23 rev = "v${version}"; 24 + sha256 = "1vkl0v3c5q0734xvvqinq4zikhy37wjys6nj1h9qdbbka0h39592"; 25 }; 26 27 meta = with lib; {
+112 -102
pkgs/servers/web-apps/bookstack/php-packages.nix
··· 5 "aws/aws-sdk-php" = { 6 targetDir = ""; 7 src = composerEnv.buildZipPackage { 8 - name = "aws-aws-sdk-php-3e6143f5c12986d727307d5d19d6aec21575d903"; 9 src = fetchurl { 10 - url = https://api.github.com/repos/aws/aws-sdk-php/zipball/3e6143f5c12986d727307d5d19d6aec21575d903; 11 - sha256 = "16hbw8gqscbc3bcvnfdsll6x1653lq2s4dga3d5jbpczil3ws9yb"; 12 }; 13 }; 14 }; 15 "barryvdh/laravel-dompdf" = { 16 targetDir = ""; 17 src = composerEnv.buildZipPackage { 18 - name = "barryvdh-laravel-dompdf-30310e0a675462bf2aa9d448c8dcbf57fbcc517d"; 19 src = fetchurl { 20 - url = https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/30310e0a675462bf2aa9d448c8dcbf57fbcc517d; 21 - sha256 = "1fnan9b2g4xhqqvlfsn3alb4nx5jjlrapgiad2kca13b3gizv7zr"; 22 }; 23 }; 24 }; ··· 45 "doctrine/dbal" = { 46 targetDir = ""; 47 src = composerEnv.buildZipPackage { 48 - name = "doctrine-dbal-47433196b6390d14409a33885ee42b6208160643"; 49 src = fetchurl { 50 - url = https://api.github.com/repos/doctrine/dbal/zipball/47433196b6390d14409a33885ee42b6208160643; 51 - sha256 = "0bcg9494hr31902zcmq5kk7ji78yxk074d5bd9chxn9q0xz4g2h8"; 52 }; 53 }; 54 }; ··· 85 "dompdf/dompdf" = { 86 targetDir = ""; 87 src = composerEnv.buildZipPackage { 88 - name = "dompdf-dompdf-db91d81866c69a42dad1d2926f61515a1e3f42c5"; 89 src = fetchurl { 90 - url = https://api.github.com/repos/dompdf/dompdf/zipball/db91d81866c69a42dad1d2926f61515a1e3f42c5; 91 - sha256 = "10nsmaiqfk6wgv0l9wjsh7h8nigdfabygkhjk7wdbxdfvlvniddd"; 92 }; 93 }; 94 }; ··· 115 "facade/flare-client-php" = { 116 targetDir = ""; 117 src = composerEnv.buildZipPackage { 118 - name = "facade-flare-client-php-ef0f5bce23b30b32d98fd9bb49c6fa37b40eb546"; 119 src = fetchurl { 120 - url = https://api.github.com/repos/facade/flare-client-php/zipball/ef0f5bce23b30b32d98fd9bb49c6fa37b40eb546; 121 - sha256 = "1car7k8zzkgib9wpi9lzw1dj9qgjak8s9dmiimxaigvb7q4bc5vk"; 122 }; 123 }; 124 }; ··· 135 "facade/ignition-contracts" = { 136 targetDir = ""; 137 src = composerEnv.buildZipPackage { 138 - name = "facade-ignition-contracts-aeab1ce8b68b188a43e81758e750151ad7da796b"; 139 src = fetchurl { 140 - url = https://api.github.com/repos/facade/ignition-contracts/zipball/aeab1ce8b68b188a43e81758e750151ad7da796b; 141 - sha256 = "0b5hv56758fh2y6fqbygwn94qgqwjan8d2s1i10m242x80h9jjiw"; 142 }; 143 }; 144 }; ··· 155 "filp/whoops" = { 156 targetDir = ""; 157 src = composerEnv.buildZipPackage { 158 - name = "filp-whoops-df7933820090489623ce0be5e85c7e693638e536"; 159 src = fetchurl { 160 - url = https://api.github.com/repos/filp/whoops/zipball/df7933820090489623ce0be5e85c7e693638e536; 161 - sha256 = "0azpv2r8hc9s5pbk9wh2qk52qzycsbvpijr8w68l311igpcj4f78"; 162 }; 163 }; 164 }; 165 "guzzlehttp/guzzle" = { 166 targetDir = ""; 167 src = composerEnv.buildZipPackage { 168 - name = "guzzlehttp-guzzle-0aa74dfb41ae110835923ef10a9d803a22d50e79"; 169 src = fetchurl { 170 - url = https://api.github.com/repos/guzzle/guzzle/zipball/0aa74dfb41ae110835923ef10a9d803a22d50e79; 171 - sha256 = "0gba1711dpi147fzi2ab2pg0k1g6zfanm5w5hf4c7w0b3h4ya5gj"; 172 }; 173 }; 174 }; 175 "guzzlehttp/promises" = { 176 targetDir = ""; 177 src = composerEnv.buildZipPackage { 178 - name = "guzzlehttp-promises-60d379c243457e073cff02bc323a2a86cb355631"; 179 src = fetchurl { 180 - url = https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631; 181 - sha256 = "0lvcr64bx9sb90qggxk7g7fsplz403gm3i8lnlcaifyjrlmdj5wb"; 182 }; 183 }; 184 }; 185 "guzzlehttp/psr7" = { 186 targetDir = ""; 187 src = composerEnv.buildZipPackage { 188 - name = "guzzlehttp-psr7-53330f47520498c0ae1f61f7e2c90f55690c06a3"; 189 src = fetchurl { 190 - url = https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3; 191 - sha256 = "0948mbbqn1xcz39diajhvlr9a7586vx3091kzx96m0z4ki3lhv7g"; 192 }; 193 }; 194 }; ··· 215 "laravel/framework" = { 216 targetDir = ""; 217 src = composerEnv.buildZipPackage { 218 - name = "laravel-framework-d0e4731e92ca88f4a78fe9e0c2c426a3e8c063c8"; 219 src = fetchurl { 220 - url = https://api.github.com/repos/laravel/framework/zipball/d0e4731e92ca88f4a78fe9e0c2c426a3e8c063c8; 221 - sha256 = "15zjpq6lbxs019vd0mm2nbfi91yyw40wsf5fl0jbw3s1ffvaq898"; 222 }; 223 }; 224 }; 225 "laravel/socialite" = { 226 targetDir = ""; 227 src = composerEnv.buildZipPackage { 228 - name = "laravel-socialite-8d25d574b4f2005411c0b9cb527ef5e745c1b07d"; 229 src = fetchurl { 230 - url = https://api.github.com/repos/laravel/socialite/zipball/8d25d574b4f2005411c0b9cb527ef5e745c1b07d; 231 - sha256 = "0ash56za1flniq9nnk3siyb8l0m2cjwn2n25315qfhmdgbxxjz68"; 232 }; 233 }; 234 }; 235 "league/commonmark" = { 236 targetDir = ""; 237 src = composerEnv.buildZipPackage { 238 - name = "league-commonmark-11df9b36fd4f1d2b727a73bf14931d81373b9a54"; 239 src = fetchurl { 240 - url = https://api.github.com/repos/thephpleague/commonmark/zipball/11df9b36fd4f1d2b727a73bf14931d81373b9a54; 241 - sha256 = "15chm1sa65b58b47am00ik03s2agnx49i8yww3mhqlijvbrjvxc3"; 242 }; 243 }; 244 }; ··· 305 "nesbot/carbon" = { 306 targetDir = ""; 307 src = composerEnv.buildZipPackage { 308 - name = "nesbot-carbon-528783b188bdb853eb21239b1722831e0f000a8d"; 309 src = fetchurl { 310 - url = https://api.github.com/repos/briannesbitt/Carbon/zipball/528783b188bdb853eb21239b1722831e0f000a8d; 311 - sha256 = "18pvfwjvclfj0mrgqvycgrbyx5jfcp1hks4yljc6mp66yxr787x4"; 312 }; 313 }; 314 }; ··· 325 "onelogin/php-saml" = { 326 targetDir = ""; 327 src = composerEnv.buildZipPackage { 328 - name = "onelogin-php-saml-a7328b11887660ad248ea10952dd67a5aa73ba3b"; 329 src = fetchurl { 330 - url = https://api.github.com/repos/onelogin/php-saml/zipball/a7328b11887660ad248ea10952dd67a5aa73ba3b; 331 - sha256 = "0ycj3n22k5i3h8p7gn0xff6a7smjypazl2k5qvyzg86fjr7s3vfv"; 332 }; 333 }; 334 }; 335 "opis/closure" = { 336 targetDir = ""; 337 src = composerEnv.buildZipPackage { 338 - name = "opis-closure-943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5"; 339 src = fetchurl { 340 - url = https://api.github.com/repos/opis/closure/zipball/943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5; 341 - sha256 = "0y47ldgzzv22c5dnsdzqmbrsicq6acjyba0119d3dc6wa3n7zqi6"; 342 }; 343 }; 344 }; ··· 405 "predis/predis" = { 406 targetDir = ""; 407 src = composerEnv.buildZipPackage { 408 - name = "predis-predis-9930e933c67446962997b05201c69c2319bf26de"; 409 src = fetchurl { 410 - url = https://api.github.com/repos/predis/predis/zipball/9930e933c67446962997b05201c69c2319bf26de; 411 - sha256 = "0qnpiyv96gs8yzy3b1ba918yw1pv8bgzw7skcf3k40ffpxsmkxv6"; 412 }; 413 }; 414 }; 415 "psr/container" = { 416 targetDir = ""; 417 src = composerEnv.buildZipPackage { 418 - name = "psr-container-b7ce3b176482dbbc1245ebf52b181af44c2cf55f"; 419 src = fetchurl { 420 - url = https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f; 421 - sha256 = "0rkz64vgwb0gfi09klvgay4qnw993l1dc03vyip7d7m2zxi6cy4j"; 422 }; 423 }; 424 }; ··· 565 "socialiteproviders/slack" = { 566 targetDir = ""; 567 src = composerEnv.buildZipPackage { 568 - name = "socialiteproviders-slack-8efb25c71d98bedf4010a829d1e41ff9fe449bcc"; 569 src = fetchurl { 570 - url = https://api.github.com/repos/SocialiteProviders/Slack/zipball/8efb25c71d98bedf4010a829d1e41ff9fe449bcc; 571 - sha256 = "0ax3n4s1djidkhgvrcgv1qipv3k0fhfd0cvs273h6wh66bjniq66"; 572 }; 573 }; 574 }; ··· 595 "swiftmailer/swiftmailer" = { 596 targetDir = ""; 597 src = composerEnv.buildZipPackage { 598 - name = "swiftmailer-swiftmailer-698a6a9f54d7eb321274de3ad19863802c879fb7"; 599 src = fetchurl { 600 - url = https://api.github.com/repos/swiftmailer/swiftmailer/zipball/698a6a9f54d7eb321274de3ad19863802c879fb7; 601 - sha256 = "1zmyr6szxvbc77rs4q1cp7f3vzw1wfx9rbbj7x9s65gh37z9fd1w"; 602 }; 603 }; 604 }; 605 "symfony/console" = { 606 targetDir = ""; 607 src = composerEnv.buildZipPackage { 608 - name = "symfony-console-24026c44fc37099fa145707fecd43672831b837a"; 609 src = fetchurl { 610 - url = https://api.github.com/repos/symfony/console/zipball/24026c44fc37099fa145707fecd43672831b837a; 611 - sha256 = "19c5yczwxk0965pdg7ka8sa8wsr569r6l725rj4y9sabfd6mg6jf"; 612 }; 613 }; 614 }; ··· 625 "symfony/debug" = { 626 targetDir = ""; 627 src = composerEnv.buildZipPackage { 628 - name = "symfony-debug-af4987aa4a5630e9615be9d9c3ed1b0f24ca449c"; 629 src = fetchurl { 630 - url = https://api.github.com/repos/symfony/debug/zipball/af4987aa4a5630e9615be9d9c3ed1b0f24ca449c; 631 - sha256 = "15y1bgdrzq3859ql37ymx4fsvd28kyck69ncm6zyg84q3fhd8i19"; 632 }; 633 }; 634 }; 635 "symfony/deprecation-contracts" = { 636 targetDir = ""; 637 src = composerEnv.buildZipPackage { 638 - name = "symfony-deprecation-contracts-5fa56b4074d1ae755beb55617ddafe6f5d78f665"; 639 src = fetchurl { 640 - url = https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665; 641 - sha256 = "0ny59x0aaipqaj956wx7ak5f6d5rn90766swp5m18019v9cppg10"; 642 }; 643 }; 644 }; 645 "symfony/error-handler" = { 646 targetDir = ""; 647 src = composerEnv.buildZipPackage { 648 - name = "symfony-error-handler-d603654eaeb713503bba3e308b9e748e5a6d3f2e"; 649 src = fetchurl { 650 - url = https://api.github.com/repos/symfony/error-handler/zipball/d603654eaeb713503bba3e308b9e748e5a6d3f2e; 651 - sha256 = "15xdk9bbyfdm8yf19jfb3zr1yaj0lprf9pmxgj630vbpbqkgsd8f"; 652 }; 653 }; 654 }; ··· 675 "symfony/finder" = { 676 targetDir = ""; 677 src = composerEnv.buildZipPackage { 678 - name = "symfony-finder-25d79cfccfc12e84e7a63a248c3f0720fdd92db6"; 679 src = fetchurl { 680 - url = https://api.github.com/repos/symfony/finder/zipball/25d79cfccfc12e84e7a63a248c3f0720fdd92db6; 681 - sha256 = "04fwddn12sj6vzr5xr4xd25m86cn4l15079490h3q3igprzvrqk8"; 682 }; 683 }; 684 }; 685 "symfony/http-client-contracts" = { 686 targetDir = ""; 687 src = composerEnv.buildZipPackage { 688 - name = "symfony-http-client-contracts-41db680a15018f9c1d4b23516059633ce280ca33"; 689 src = fetchurl { 690 - url = https://api.github.com/repos/symfony/http-client-contracts/zipball/41db680a15018f9c1d4b23516059633ce280ca33; 691 - sha256 = "1iia9rpbri1whp2dw4qfhh90gmkdvxhgjwxi54q7wlnlhijgga81"; 692 }; 693 }; 694 }; 695 "symfony/http-foundation" = { 696 targetDir = ""; 697 src = composerEnv.buildZipPackage { 698 - name = "symfony-http-foundation-8888741b633f6c3d1e572b7735ad2cae3e03f9c5"; 699 src = fetchurl { 700 - url = https://api.github.com/repos/symfony/http-foundation/zipball/8888741b633f6c3d1e572b7735ad2cae3e03f9c5; 701 - sha256 = "0qs389nxxqc6nwx5x6b9kz8ykdlhdx7k8k6nd2apppxpqalvk6sw"; 702 }; 703 }; 704 }; 705 "symfony/http-kernel" = { 706 targetDir = ""; 707 src = composerEnv.buildZipPackage { 708 - name = "symfony-http-kernel-07ea794a327d7c8c5d76e3058fde9fec6a711cb4"; 709 src = fetchurl { 710 - url = https://api.github.com/repos/symfony/http-kernel/zipball/07ea794a327d7c8c5d76e3058fde9fec6a711cb4; 711 - sha256 = "0mnay6nn299ljjgaqqbk8kcl431wrzvzsqybvl648pf513mp9vy9"; 712 }; 713 }; 714 }; 715 "symfony/mime" = { 716 targetDir = ""; 717 src = composerEnv.buildZipPackage { 718 - name = "symfony-mime-7dee6a43493f39b51ff6c5bb2bd576fe40a76c86"; 719 src = fetchurl { 720 - url = https://api.github.com/repos/symfony/mime/zipball/7dee6a43493f39b51ff6c5bb2bd576fe40a76c86; 721 - sha256 = "0931zsmnpx75b9b34a03l0sfp22mailaa2y5az3cgx9v0bkc0vka"; 722 }; 723 }; 724 }; ··· 815 "symfony/routing" = { 816 targetDir = ""; 817 src = composerEnv.buildZipPackage { 818 - name = "symfony-routing-87529f6e305c7acb162840d1ea57922038072425"; 819 src = fetchurl { 820 - url = https://api.github.com/repos/symfony/routing/zipball/87529f6e305c7acb162840d1ea57922038072425; 821 - sha256 = "0qrgacividsp7c61y03qh8lb4vj30g0mvljnm5k60h4zzdmivlgc"; 822 }; 823 }; 824 }; 825 "symfony/service-contracts" = { 826 targetDir = ""; 827 src = composerEnv.buildZipPackage { 828 - name = "symfony-service-contracts-d15da7ba4957ffb8f1747218be9e1a121fd298a1"; 829 src = fetchurl { 830 - url = https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1; 831 - sha256 = "168iq1lp2r5qb5h8j0s17da09iaj2h5hrrdc9rw2p73hq8rvm1w2"; 832 }; 833 }; 834 }; 835 "symfony/translation" = { 836 targetDir = ""; 837 src = composerEnv.buildZipPackage { 838 - name = "symfony-translation-e1d0c67167a553556d9f974b5fa79c2448df317a"; 839 src = fetchurl { 840 - url = https://api.github.com/repos/symfony/translation/zipball/e1d0c67167a553556d9f974b5fa79c2448df317a; 841 - sha256 = "1b6fj278i1wdf4l7py9n86lmhrqmzvjy7kapjpfkz03adn2ps127"; 842 }; 843 }; 844 }; 845 "symfony/translation-contracts" = { 846 targetDir = ""; 847 src = composerEnv.buildZipPackage { 848 - name = "symfony-translation-contracts-e2eaa60b558f26a4b0354e1bbb25636efaaad105"; 849 src = fetchurl { 850 - url = https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105; 851 - sha256 = "1k26yvgk84rz6ja9ml6l6iwbbi68qsqnq2cpky044g9ymvlg8d5g"; 852 }; 853 }; 854 }; 855 "symfony/var-dumper" = { 856 targetDir = ""; 857 src = composerEnv.buildZipPackage { 858 - name = "symfony-var-dumper-a1eab2f69906dc83c5ddba4632180260d0ab4f7f"; 859 src = fetchurl { 860 - url = https://api.github.com/repos/symfony/var-dumper/zipball/a1eab2f69906dc83c5ddba4632180260d0ab4f7f; 861 - sha256 = "1yw12jbx6gf5mvg7jrr1v57ah3b2s4hflz2p1m98nayi4qhdp20m"; 862 }; 863 }; 864 };
··· 5 "aws/aws-sdk-php" = { 6 targetDir = ""; 7 src = composerEnv.buildZipPackage { 8 + name = "aws-aws-sdk-php-0aa83b522d5ffa794c02e7411af87a0e241a3082"; 9 src = fetchurl { 10 + url = https://api.github.com/repos/aws/aws-sdk-php/zipball/0aa83b522d5ffa794c02e7411af87a0e241a3082; 11 + sha256 = "03qahdj01bz76aar21limham7xnv5r0d61gfk1fph8ljf2gbg33i"; 12 }; 13 }; 14 }; 15 "barryvdh/laravel-dompdf" = { 16 targetDir = ""; 17 src = composerEnv.buildZipPackage { 18 + name = "barryvdh-laravel-dompdf-5b99e1f94157d74e450f4c97e8444fcaffa2144b"; 19 src = fetchurl { 20 + url = https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/5b99e1f94157d74e450f4c97e8444fcaffa2144b; 21 + sha256 = "1r82fzrnjrjy5jgpyc071miiw1rwhwys9ccj81gs3yydq9hi4crw"; 22 }; 23 }; 24 }; ··· 45 "doctrine/dbal" = { 46 targetDir = ""; 47 src = composerEnv.buildZipPackage { 48 + name = "doctrine-dbal-c800380457948e65bbd30ba92cc17cda108bf8c9"; 49 src = fetchurl { 50 + url = https://api.github.com/repos/doctrine/dbal/zipball/c800380457948e65bbd30ba92cc17cda108bf8c9; 51 + sha256 = "1x6bij89yaj0d52ffx683rlpxrgxl0vx9q6a121mkz1zplnif647"; 52 + }; 53 + }; 54 + }; 55 + "doctrine/deprecations" = { 56 + targetDir = ""; 57 + src = composerEnv.buildZipPackage { 58 + name = "doctrine-deprecations-9504165960a1f83cc1480e2be1dd0a0478561314"; 59 + src = fetchurl { 60 + url = https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314; 61 + sha256 = "04kpbzk5iw86imspkg7dgs54xx877k9b5q0dfg2h119mlfkvxil6"; 62 }; 63 }; 64 }; ··· 95 "dompdf/dompdf" = { 96 targetDir = ""; 97 src = composerEnv.buildZipPackage { 98 + name = "dompdf-dompdf-8768448244967a46d6e67b891d30878e0e15d25c"; 99 src = fetchurl { 100 + url = https://api.github.com/repos/dompdf/dompdf/zipball/8768448244967a46d6e67b891d30878e0e15d25c; 101 + sha256 = "0mgsry4mq5bx6b74h3akay1bp03rnsl8ppcjxjkfjlq4svq7m5yf"; 102 }; 103 }; 104 }; ··· 125 "facade/flare-client-php" = { 126 targetDir = ""; 127 src = composerEnv.buildZipPackage { 128 + name = "facade-flare-client-php-6bf380035890cb0a09b9628c491ae3866b858522"; 129 src = fetchurl { 130 + url = https://api.github.com/repos/facade/flare-client-php/zipball/6bf380035890cb0a09b9628c491ae3866b858522; 131 + sha256 = "1y0rjlpd71jkl0zzl3q4flv5s9gbk87947xgfi8w62sg5g7jjgl2"; 132 }; 133 }; 134 }; ··· 145 "facade/ignition-contracts" = { 146 targetDir = ""; 147 src = composerEnv.buildZipPackage { 148 + name = "facade-ignition-contracts-3c921a1cdba35b68a7f0ccffc6dffc1995b18267"; 149 src = fetchurl { 150 + url = https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267; 151 + sha256 = "1nsjwd1k9q8qmfvh7m50rs42yxzxyq4f56r6dq205gwcmqsjb2j0"; 152 }; 153 }; 154 }; ··· 165 "filp/whoops" = { 166 targetDir = ""; 167 src = composerEnv.buildZipPackage { 168 + name = "filp-whoops-d501fd2658d55491a2295ff600ae5978eaad7403"; 169 src = fetchurl { 170 + url = https://api.github.com/repos/filp/whoops/zipball/d501fd2658d55491a2295ff600ae5978eaad7403; 171 + sha256 = "1mpgkl7yzw9j4pxkw404fvykapr42347lyz7jgrl1ks61pk6s9v5"; 172 }; 173 }; 174 }; 175 "guzzlehttp/guzzle" = { 176 targetDir = ""; 177 src = composerEnv.buildZipPackage { 178 + name = "guzzlehttp-guzzle-7008573787b430c1c1f650e3722d9bba59967628"; 179 src = fetchurl { 180 + url = https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628; 181 + sha256 = "10fiv9ifhz5vg78z4xa41dkwic5ql4m6xf8bglyvpw3x7b76l81m"; 182 }; 183 }; 184 }; 185 "guzzlehttp/promises" = { 186 targetDir = ""; 187 src = composerEnv.buildZipPackage { 188 + name = "guzzlehttp-promises-8e7d04f1f6450fef59366c399cfad4b9383aa30d"; 189 src = fetchurl { 190 + url = https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d; 191 + sha256 = "158wd8nmvvl386c24lkr4jkwdhqpdj0dxdbjwh8iv6a2rgccjr2q"; 192 }; 193 }; 194 }; 195 "guzzlehttp/psr7" = { 196 targetDir = ""; 197 src = composerEnv.buildZipPackage { 198 + name = "guzzlehttp-psr7-35ea11d335fd638b5882ff1725228b3d35496ab1"; 199 src = fetchurl { 200 + url = https://api.github.com/repos/guzzle/psr7/zipball/35ea11d335fd638b5882ff1725228b3d35496ab1; 201 + sha256 = "1nsd7sla2jpx9kzg0lzk4kvc66d30bnkf2yfzdp7gghb67wvajfa"; 202 }; 203 }; 204 }; ··· 225 "laravel/framework" = { 226 targetDir = ""; 227 src = composerEnv.buildZipPackage { 228 + name = "laravel-framework-d94c07d72c14f07e7d2027458e7f0a76f9ceb0d9"; 229 src = fetchurl { 230 + url = https://api.github.com/repos/laravel/framework/zipball/d94c07d72c14f07e7d2027458e7f0a76f9ceb0d9; 231 + sha256 = "02cml6rg3qxnr8gynnd8iqwdyzflqwnyivxw034dzbm60xpg6w93"; 232 }; 233 }; 234 }; 235 "laravel/socialite" = { 236 targetDir = ""; 237 src = composerEnv.buildZipPackage { 238 + name = "laravel-socialite-1960802068f81e44b2ae9793932181cf1cb91b5c"; 239 src = fetchurl { 240 + url = https://api.github.com/repos/laravel/socialite/zipball/1960802068f81e44b2ae9793932181cf1cb91b5c; 241 + sha256 = "1v68icdk7x1qbnhzsvpzv4nj0hwdw70s75g2bzbvmli6ah0kvvck"; 242 }; 243 }; 244 }; 245 "league/commonmark" = { 246 targetDir = ""; 247 src = composerEnv.buildZipPackage { 248 + name = "league-commonmark-08fa59b8e4e34ea8a773d55139ae9ac0e0aecbaf"; 249 src = fetchurl { 250 + url = https://api.github.com/repos/thephpleague/commonmark/zipball/08fa59b8e4e34ea8a773d55139ae9ac0e0aecbaf; 251 + sha256 = "10bs8r0qiq9bybypnascvk7a7181699cnwl27yq4m108cj1i223h"; 252 }; 253 }; 254 }; ··· 315 "nesbot/carbon" = { 316 targetDir = ""; 317 src = composerEnv.buildZipPackage { 318 + name = "nesbot-carbon-2fd2c4a77d58a4e95234c8a61c5df1f157a91bf4"; 319 src = fetchurl { 320 + url = https://api.github.com/repos/briannesbitt/Carbon/zipball/2fd2c4a77d58a4e95234c8a61c5df1f157a91bf4; 321 + sha256 = "0riizvfqxvvbkhhfadcqr8717s0q12p00qmffv26664h5kckl58r"; 322 }; 323 }; 324 }; ··· 335 "onelogin/php-saml" = { 336 targetDir = ""; 337 src = composerEnv.buildZipPackage { 338 + name = "onelogin-php-saml-f30f5062f3653c4d2082892d207f4dc3e577d979"; 339 src = fetchurl { 340 + url = https://api.github.com/repos/onelogin/php-saml/zipball/f30f5062f3653c4d2082892d207f4dc3e577d979; 341 + sha256 = "0nl431rx1gngc2g92w4hjf2y26vjvscgbrwhq0m6kzm9kq043qzh"; 342 }; 343 }; 344 }; 345 "opis/closure" = { 346 targetDir = ""; 347 src = composerEnv.buildZipPackage { 348 + name = "opis-closure-06e2ebd25f2869e54a306dda991f7db58066f7f6"; 349 src = fetchurl { 350 + url = https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6; 351 + sha256 = "0fpa1w0rmwywj67jgaldmw563p7gycahs8gpkpjvrra9zhhj4yyc"; 352 }; 353 }; 354 }; ··· 415 "predis/predis" = { 416 targetDir = ""; 417 src = composerEnv.buildZipPackage { 418 + name = "predis-predis-b240daa106d4e02f0c5b7079b41e31ddf66fddf8"; 419 src = fetchurl { 420 + url = https://api.github.com/repos/predis/predis/zipball/b240daa106d4e02f0c5b7079b41e31ddf66fddf8; 421 + sha256 = "0wbsmq5c449vwfvsriyjwqaq5sjf9kw2chr4f2xlh3vqc4kw720j"; 422 }; 423 }; 424 }; 425 "psr/container" = { 426 targetDir = ""; 427 src = composerEnv.buildZipPackage { 428 + name = "psr-container-8622567409010282b7aeebe4bb841fe98b58dcaf"; 429 src = fetchurl { 430 + url = https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf; 431 + sha256 = "0qfvyfp3mli776kb9zda5cpc8cazj3prk0bg0gm254kwxyfkfrwn"; 432 }; 433 }; 434 }; ··· 575 "socialiteproviders/slack" = { 576 targetDir = ""; 577 src = composerEnv.buildZipPackage { 578 + name = "socialiteproviders-slack-2b781c95daf06ec87a8f3deba2ab613d6bea5e8d"; 579 src = fetchurl { 580 + url = https://api.github.com/repos/SocialiteProviders/Slack/zipball/2b781c95daf06ec87a8f3deba2ab613d6bea5e8d; 581 + sha256 = "1xilg7l1wc1vgwyakhfl8dpvgkjqx90g4khvzi411j9xa2wvpprh"; 582 }; 583 }; 584 }; ··· 605 "swiftmailer/swiftmailer" = { 606 targetDir = ""; 607 src = composerEnv.buildZipPackage { 608 + name = "swiftmailer-swiftmailer-15f7faf8508e04471f666633addacf54c0ab5933"; 609 src = fetchurl { 610 + url = https://api.github.com/repos/swiftmailer/swiftmailer/zipball/15f7faf8508e04471f666633addacf54c0ab5933; 611 + sha256 = "1xiisdaxlmkzi16szh7lm3ay9vr9pdz0q2ah7vqaqrm2b4mwd90g"; 612 }; 613 }; 614 }; 615 "symfony/console" = { 616 targetDir = ""; 617 src = composerEnv.buildZipPackage { 618 + name = "symfony-console-1ba4560dbbb9fcf5ae28b61f71f49c678086cf23"; 619 src = fetchurl { 620 + url = https://api.github.com/repos/symfony/console/zipball/1ba4560dbbb9fcf5ae28b61f71f49c678086cf23; 621 + sha256 = "1zsmv0p0xxdp44301yd3n1w9j79g631bvvfp04zniqk4h5q6kvg9"; 622 }; 623 }; 624 }; ··· 635 "symfony/debug" = { 636 targetDir = ""; 637 src = composerEnv.buildZipPackage { 638 + name = "symfony-debug-157bbec4fd773bae53c5483c50951a5530a2cc16"; 639 src = fetchurl { 640 + url = https://api.github.com/repos/symfony/debug/zipball/157bbec4fd773bae53c5483c50951a5530a2cc16; 641 + sha256 = "0v7l7081fw2wr96xv472nhi1d0xzw6lnl8hnjgi9g3gnksfagwq8"; 642 }; 643 }; 644 }; 645 "symfony/deprecation-contracts" = { 646 targetDir = ""; 647 src = composerEnv.buildZipPackage { 648 + name = "symfony-deprecation-contracts-5f38c8804a9e97d23e0c8d63341088cd8a22d627"; 649 src = fetchurl { 650 + url = https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627; 651 + sha256 = "11k6a8v9b6p0j788fgykq6s55baba29lg37fwvmn4igxxkfwmbp3"; 652 }; 653 }; 654 }; 655 "symfony/error-handler" = { 656 targetDir = ""; 657 src = composerEnv.buildZipPackage { 658 + name = "symfony-error-handler-48e81a375525872e788c2418430f54150d935810"; 659 src = fetchurl { 660 + url = https://api.github.com/repos/symfony/error-handler/zipball/48e81a375525872e788c2418430f54150d935810; 661 + sha256 = "17hpwx8arv3h4cw4fwzkm7a39lsa92vwxsinyqmx723v1nr5z1d2"; 662 }; 663 }; 664 }; ··· 685 "symfony/finder" = { 686 targetDir = ""; 687 src = composerEnv.buildZipPackage { 688 + name = "symfony-finder-2543795ab1570df588b9bbd31e1a2bd7037b94f6"; 689 src = fetchurl { 690 + url = https://api.github.com/repos/symfony/finder/zipball/2543795ab1570df588b9bbd31e1a2bd7037b94f6; 691 + sha256 = "0scclnfc9aphjsric1xaj51vbqqz56kiz6l8l6ldqv6cvyg8zlyi"; 692 }; 693 }; 694 }; 695 "symfony/http-client-contracts" = { 696 targetDir = ""; 697 src = composerEnv.buildZipPackage { 698 + name = "symfony-http-client-contracts-7e82f6084d7cae521a75ef2cb5c9457bbda785f4"; 699 src = fetchurl { 700 + url = https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4; 701 + sha256 = "04mszmb94y0xjs0cwqxzhpf65kfqhhqznldifbxvrrlxb9nn23qc"; 702 }; 703 }; 704 }; 705 "symfony/http-foundation" = { 706 targetDir = ""; 707 src = composerEnv.buildZipPackage { 708 + name = "symfony-http-foundation-02d968647fe61b2f419a8dc70c468a9d30a48d3a"; 709 src = fetchurl { 710 + url = https://api.github.com/repos/symfony/http-foundation/zipball/02d968647fe61b2f419a8dc70c468a9d30a48d3a; 711 + sha256 = "1bq4why2v8p7wy8801bdml43xh7kb5fli16cv74bvqpwlp4cdv9f"; 712 }; 713 }; 714 }; 715 "symfony/http-kernel" = { 716 targetDir = ""; 717 src = composerEnv.buildZipPackage { 718 + name = "symfony-http-kernel-0248214120d00c5f44f1cd5d9ad65f0b38459333"; 719 src = fetchurl { 720 + url = https://api.github.com/repos/symfony/http-kernel/zipball/0248214120d00c5f44f1cd5d9ad65f0b38459333; 721 + sha256 = "032ljl732x0bs3my26wjfmxrxplz8vlxs0xzlqsxrh18lnyv6z3h"; 722 }; 723 }; 724 }; 725 "symfony/mime" = { 726 targetDir = ""; 727 src = composerEnv.buildZipPackage { 728 + name = "symfony-mime-1b2092244374cbe48ae733673f2ca0818b37197b"; 729 src = fetchurl { 730 + url = https://api.github.com/repos/symfony/mime/zipball/1b2092244374cbe48ae733673f2ca0818b37197b; 731 + sha256 = "0d2vhmd25d7yvh9xzl2vazx2bfsb8qyvd2kgvl9cry1va4vrpkj3"; 732 }; 733 }; 734 }; ··· 825 "symfony/routing" = { 826 targetDir = ""; 827 src = composerEnv.buildZipPackage { 828 + name = "symfony-routing-69919991c845b34626664ddc9b3aef9d09d2a5df"; 829 src = fetchurl { 830 + url = https://api.github.com/repos/symfony/routing/zipball/69919991c845b34626664ddc9b3aef9d09d2a5df; 831 + sha256 = "0ghynrw6d9dpskhgyf3ljlz4pfmi68r3bzhr45lygadx21yacddw"; 832 }; 833 }; 834 }; 835 "symfony/service-contracts" = { 836 targetDir = ""; 837 src = composerEnv.buildZipPackage { 838 + name = "symfony-service-contracts-f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"; 839 src = fetchurl { 840 + url = https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb; 841 + sha256 = "1i573rmajc33a9nrgwgc4k3svg29yp9xv17gp133rd1i705hwv1y"; 842 }; 843 }; 844 }; 845 "symfony/translation" = { 846 targetDir = ""; 847 src = composerEnv.buildZipPackage { 848 + name = "symfony-translation-eb8f5428cc3b40d6dffe303b195b084f1c5fbd14"; 849 src = fetchurl { 850 + url = https://api.github.com/repos/symfony/translation/zipball/eb8f5428cc3b40d6dffe303b195b084f1c5fbd14; 851 + sha256 = "0x80ijdhpfv9is847pp09jlr0g0hwg9sil95jknil7dgx5pjsa5z"; 852 }; 853 }; 854 }; 855 "symfony/translation-contracts" = { 856 targetDir = ""; 857 src = composerEnv.buildZipPackage { 858 + name = "symfony-translation-contracts-95c812666f3e91db75385749fe219c5e494c7f95"; 859 src = fetchurl { 860 + url = https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95; 861 + sha256 = "073l1pbmwbkaviwwjq9ypb1w7dk366nn2vn1vancbal0zqk0zx7b"; 862 }; 863 }; 864 }; 865 "symfony/var-dumper" = { 866 targetDir = ""; 867 src = composerEnv.buildZipPackage { 868 + name = "symfony-var-dumper-0da0e174f728996f5d5072d6a9f0a42259dbc806"; 869 src = fetchurl { 870 + url = https://api.github.com/repos/symfony/var-dumper/zipball/0da0e174f728996f5d5072d6a9f0a42259dbc806; 871 + sha256 = "1qmv99bvq10siy8bbszqmn488cjcm70vip4xs8vxwm6x6x5cw1ia"; 872 }; 873 }; 874 };
+79
pkgs/shells/bash/undistract-me/default.nix
···
··· 1 + { lib 2 + , stdenvNoCC 3 + , fetchFromGitHub 4 + , fetchpatch 5 + , coreutils 6 + , gnused 7 + , libnotify 8 + , pulseaudio 9 + , sound-theme-freedesktop 10 + , xprop 11 + }: 12 + 13 + stdenvNoCC.mkDerivation rec { 14 + pname = "undistract-me"; 15 + version = "unstable-2020-08-09"; 16 + 17 + src = fetchFromGitHub { 18 + owner = "jml"; 19 + repo = pname; 20 + rev = "2f8ac25c6ad8efcf160d2b480825b1cbb6772aab"; 21 + hash = "sha256-Qw7Cu9q0ZgK/RTvyDdHM5N3eBaKjtYqYH0J+hKMUZX8="; 22 + }; 23 + 24 + patches = [ 25 + # Don't block the terminal when notification sound is played 26 + # 27 + # See https://github.com/jml/undistract-me/pull/69 28 + (fetchpatch { 29 + url = "https://github.com/jml/undistract-me/commit/2356ebbe8bf2bcb4b95af1ae2bcdc786ce7cc6e8.patch"; 30 + sha256 = "sha256-Ij3OXTOnIQsYhKVmqjChhN1q4ASZ7waOkfQTTp5XfPo="; 31 + }) 32 + 33 + # Fix showing notifications when using Wayland apps with XWayland 34 + # running, or connection to X server fails. 35 + # 36 + # NOTE: Without a real X server, notifications will not be 37 + # suppressed when the window running the command is focused. 38 + # 39 + # See https://github.com/jml/undistract-me/pull/71 40 + (fetchpatch { 41 + url = "https://github.com/jml/undistract-me/commit/3f4ceaf5a4eba8e3cb02236c48247f87e3d1124f.patch"; 42 + sha256 = "sha256-9AK9Jp3TXJ75Y+jwZXlwQ6j54FW1rOBddoktrm0VX68="; 43 + }) 44 + ]; 45 + 46 + # Patch in dependencies. Can't use makeWrapper because the bash 47 + # functions will be sourced and invoked in a different environment 48 + # for each command invocation. 49 + postPatch = '' 50 + for script in *.bash *.sh; do 51 + substituteInPlace "$script" \ 52 + --replace /usr/share/undistract-me "$out/share/undistract-me" \ 53 + --replace basename ${coreutils}/bin/basename \ 54 + --replace 'cut ' '${coreutils}/bin/cut ' \ 55 + --replace date ${coreutils}/bin/date \ 56 + --replace dirname ${coreutils}/bin/dirname \ 57 + --replace sed ${gnused}/bin/sed \ 58 + --replace notify-send ${libnotify}/bin/notify-send \ 59 + --replace paplay ${pulseaudio}/bin/paplay \ 60 + --replace /usr/share/sounds/freedesktop ${sound-theme-freedesktop}/share/sounds/freedesktop \ 61 + --replace xprop ${xprop}/bin/xprop 62 + done 63 + ''; 64 + 65 + installPhase = '' 66 + mkdir -p "$out/share/undistract-me" "$out/etc/profile.d" "$out/share/licenses/undistract-me" 67 + cp long-running.bash "$out/share/undistract-me" 68 + cp preexec.bash "$out/share/undistract-me" 69 + cp undistract-me.sh "$out/etc/profile.d" 70 + cp LICENSE "$out/share/licenses/undistract-me" 71 + ''; 72 + 73 + meta = with lib; { 74 + description = "Notifies you when long-running terminal commands complete"; 75 + homepage = "https://github.com/jml/undistract-me"; 76 + license = licenses.mit; 77 + maintainers = with maintainers; [ metadark ]; 78 + }; 79 + }
+17 -21
pkgs/tools/typesetting/tex/texlive/bin.nix
··· 3 , zlib, libiconv, libpng, libX11 4 , freetype, gd, libXaw, icu, ghostscript, libXpm, libXmu, libXext 5 , perl, perlPackages, python3Packages, pkg-config 6 - , poppler, libpaper, graphite2, zziplib, harfbuzz, potrace, gmp, mpfr 7 , brotli, cairo, pixman, xorg, clisp, biber, woff2, xxHash 8 , makeWrapper, shortenPerlShebang 9 }: ··· 14 let 15 withSystemLibs = map (libname: "--with-system-${libname}"); 16 17 - year = "2020"; 18 version = year; # keep names simple for now 19 20 common = { 21 src = fetchurl { 22 urls = [ 23 - "http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/${year}/texlive-${year}0406-source.tar.xz" 24 - "ftp://tug.ctan.org/pub/tex/historic/systems/texlive/${year}/texlive-${year}0406-source.tar.xz" 25 ]; 26 - sha256 = "0y4h4j2qg714srhvf1hvn165w7sanr1j2vzrsgc23kxvrc43sbz3"; 27 }; 28 29 prePatch = '' 30 for i in texk/kpathsea/mktex*; do 31 sed -i '/^mydir=/d' "$i" 32 done 33 - cp -pv texk/web2c/pdftexdir/pdftoepdf{-poppler0.86.0,}.cc 34 - cp -pv texk/web2c/pdftexdir/pdftosrc{-poppler0.83.0,}.cc 35 ''; 36 37 configureFlags = [ ··· 43 ] 44 ++ withSystemLibs [ 45 # see "from TL tree" vs. "Using installed" in configure output 46 - "zziplib" "xpdf" "poppler" "mpfr" "gmp" 47 "pixman" "potrace" "gd" "freetype2" "libpng" "libpaper" "zlib" 48 - # beware: xpdf means to use stuff from poppler :-/ 49 ]; 50 51 # clean broken links to stuff not built ··· 73 74 nativeBuildInputs = [ pkg-config ]; 75 buildInputs = [ 76 - /*teckit*/ zziplib poppler mpfr gmp 77 pixman gd freetype libpng libpaper zlib 78 perl 79 ]; ··· 82 83 preConfigure = '' 84 rm -r libs/{cairo,freetype2,gd,gmp,graphite2,harfbuzz,icu,libpaper,libpng} \ 85 - libs/{lua53,luajit,mpfr,pixman,poppler,xpdf,zlib,zziplib} 86 mkdir WorkDir 87 cd WorkDir 88 ''; ··· 178 luajit = lib.optionalString withLuaJIT ",luajit"; 179 in '' 180 mkdir ./WorkDir && cd ./WorkDir 181 - for path in libs/{teckit,lua53${luajit}} texk/web2c; do 182 ( 183 if [[ "$path" =~ "libs/lua" ]]; then 184 extraConfig="--enable-static --disable-shared" ··· 247 248 dvisvgm = stdenv.mkDerivation rec { 249 pname = "texlive-dvisvgm.bin"; 250 - version = "2.11"; 251 - # TODO: dvisvgm was switched to build from upstream sources 252 - # to address https://github.com/NixOS/nixpkgs/issues/104847 253 - # We might want to consider reverting that change in the future. 254 255 - src = fetchurl { 256 - url = "https://github.com/mgieseki/dvisvgm/releases/download/${version}/dvisvgm-${version}.tar.gz"; 257 - sha256 = "12b6h0h8rc487yjh3sq9zsdabm9cs2vqcrb0znnfi8277f87zf3j"; 258 - }; 259 260 nativeBuildInputs = [ pkg-config ]; 261 - buildInputs = [ core/*kpathsea*/ brotli ghostscript zlib freetype woff2 potrace xxHash ]; 262 263 enableParallelBuilding = true; 264 };
··· 3 , zlib, libiconv, libpng, libX11 4 , freetype, gd, libXaw, icu, ghostscript, libXpm, libXmu, libXext 5 , perl, perlPackages, python3Packages, pkg-config 6 + , libpaper, graphite2, zziplib, harfbuzz, potrace, gmp, mpfr 7 , brotli, cairo, pixman, xorg, clisp, biber, woff2, xxHash 8 , makeWrapper, shortenPerlShebang 9 }: ··· 14 let 15 withSystemLibs = map (libname: "--with-system-${libname}"); 16 17 + year = "2021"; 18 version = year; # keep names simple for now 19 20 common = { 21 src = fetchurl { 22 urls = [ 23 + "http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/${year}/texlive-${year}0325-source.tar.xz" 24 + "ftp://tug.ctan.org/pub/tex/historic/systems/texlive/${year}/texlive-${year}0325-source.tar.xz" 25 ]; 26 + sha256 = "0jsq1p66l46k2qq0gbqmx25flj2nprsz4wrd1ybn286p11kdkvvs"; 27 }; 28 29 prePatch = '' 30 for i in texk/kpathsea/mktex*; do 31 sed -i '/^mydir=/d' "$i" 32 done 33 ''; 34 35 configureFlags = [ ··· 41 ] 42 ++ withSystemLibs [ 43 # see "from TL tree" vs. "Using installed" in configure output 44 + "zziplib" "mpfr" "gmp" 45 "pixman" "potrace" "gd" "freetype2" "libpng" "libpaper" "zlib" 46 ]; 47 48 # clean broken links to stuff not built ··· 70 71 nativeBuildInputs = [ pkg-config ]; 72 buildInputs = [ 73 + /*teckit*/ zziplib mpfr gmp 74 pixman gd freetype libpng libpaper zlib 75 perl 76 ]; ··· 79 80 preConfigure = '' 81 rm -r libs/{cairo,freetype2,gd,gmp,graphite2,harfbuzz,icu,libpaper,libpng} \ 82 + libs/{lua53,luajit,mpfr,pixman,zlib,zziplib} 83 mkdir WorkDir 84 cd WorkDir 85 ''; ··· 175 luajit = lib.optionalString withLuaJIT ",luajit"; 176 in '' 177 mkdir ./WorkDir && cd ./WorkDir 178 + for path in libs/{pplib,teckit,lua53${luajit}} texk/web2c; do 179 ( 180 if [[ "$path" =~ "libs/lua" ]]; then 181 extraConfig="--enable-static --disable-shared" ··· 244 245 dvisvgm = stdenv.mkDerivation rec { 246 pname = "texlive-dvisvgm.bin"; 247 + inherit version; 248 + 249 + inherit (common) src; 250 + 251 + preConfigure = "cd texk/dvisvgm"; 252 253 + configureFlags = common.configureFlags 254 + ++ [ "--with-system-kpathsea" ]; 255 256 nativeBuildInputs = [ pkg-config ]; 257 + buildInputs = [ core brotli ghostscript zlib freetype woff2 potrace xxHash ]; 258 259 enableParallelBuilding = true; 260 };
+1 -2
pkgs/tools/typesetting/tex/texlive/default.nix
··· 3 - current html: https://nixos.org/nixpkgs/manual/#sec-language-texlive 4 */ 5 { stdenv, lib, fetchurl, runCommand, writeText, buildEnv 6 - , callPackage, ghostscriptX, harfbuzz, poppler_min 7 , makeWrapper, python3, ruby, perl 8 , useFixedHashes ? true 9 , recurseIntoAttrs ··· 11 let 12 # various binaries (compiled) 13 bin = callPackage ./bin.nix { 14 - poppler = poppler_min; # otherwise depend on various X stuff 15 ghostscript = ghostscriptX; 16 harfbuzz = harfbuzz.override { 17 withIcu = true; withGraphite2 = true;
··· 3 - current html: https://nixos.org/nixpkgs/manual/#sec-language-texlive 4 */ 5 { stdenv, lib, fetchurl, runCommand, writeText, buildEnv 6 + , callPackage, ghostscriptX, harfbuzz 7 , makeWrapper, python3, ruby, perl 8 , useFixedHashes ? true 9 , recurseIntoAttrs ··· 11 let 12 # various binaries (compiled) 13 bin = callPackage ./bin.nix { 14 ghostscript = ghostscriptX; 15 harfbuzz = harfbuzz.override { 16 withIcu = true; withGraphite2 = true;
+2
pkgs/top-level/all-packages.nix
··· 9923 9924 nix-bash-completions = callPackage ../shells/bash/nix-bash-completions { }; 9925 9926 dash = callPackage ../shells/dash { }; 9927 9928 dasht = callPackage ../tools/misc/dasht { };
··· 9923 9924 nix-bash-completions = callPackage ../shells/bash/nix-bash-completions { }; 9925 9926 + undistract-me = callPackage ../shells/bash/undistract-me { }; 9927 + 9928 dash = callPackage ../shells/dash { }; 9929 9930 dasht = callPackage ../tools/misc/dasht { };
+2
pkgs/top-level/python-packages.nix
··· 605 606 auth0-python = callPackage ../development/python-modules/auth0-python { }; 607 608 authheaders = callPackage ../development/python-modules/authheaders { }; 609 610 authlib = callPackage ../development/python-modules/authlib { };
··· 605 606 auth0-python = callPackage ../development/python-modules/auth0-python { }; 607 608 + authcaptureproxy = callPackage ../development/python-modules/authcaptureproxy { }; 609 + 610 authheaders = callPackage ../development/python-modules/authheaders { }; 611 612 authlib = callPackage ../development/python-modules/authlib { };