Merge staging-next into staging
This commit is contained in:
		
						commit
						c9a19b5f7e
					
				
							
								
								
									
										5
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							@ -6,9 +6,8 @@ under the terms of [COPYING](../COPYING), which is an MIT-like license.
 | 
			
		||||
## Opening issues
 | 
			
		||||
 | 
			
		||||
* Make sure you have a [GitHub account](https://github.com/signup/free)
 | 
			
		||||
* [Submit an issue](https://github.com/NixOS/nixpkgs/issues) - assuming one does not already exist.
 | 
			
		||||
  * Clearly describe the issue including steps to reproduce when it is a bug.
 | 
			
		||||
  * Include information what version of nixpkgs and Nix are you using (nixos-version or git revision).
 | 
			
		||||
* Make sure there is no open issue on the topic
 | 
			
		||||
* [Submit a new issue](https://github.com/NixOS/nixpkgs/issues/new/choose) by choosing the kind of topic and fill out the template
 | 
			
		||||
 | 
			
		||||
## Submitting changes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@
 | 
			
		||||
  Nixpkgs provides a couple of functions that help with building derivations. The most important one, <function>stdenv.mkDerivation</function>, has already been documented above. The following functions wrap <function>stdenv.mkDerivation</function>, making it easier to use in certain cases.
 | 
			
		||||
 </para>
 | 
			
		||||
 <variablelist>
 | 
			
		||||
  <varlistentry>
 | 
			
		||||
  <varlistentry xml:id="trivial-builder-runCommand">
 | 
			
		||||
   <term>
 | 
			
		||||
    <literal>runCommand</literal>
 | 
			
		||||
   </term>
 | 
			
		||||
@ -40,7 +40,7 @@
 | 
			
		||||
</programlisting>
 | 
			
		||||
   </listitem>
 | 
			
		||||
  </varlistentry>
 | 
			
		||||
  <varlistentry>
 | 
			
		||||
  <varlistentry xml:id="trivial-builder-runCommandCC">
 | 
			
		||||
   <term>
 | 
			
		||||
    <literal>runCommandCC</literal>
 | 
			
		||||
   </term>
 | 
			
		||||
@ -50,7 +50,20 @@
 | 
			
		||||
    </para>
 | 
			
		||||
   </listitem>
 | 
			
		||||
  </varlistentry>
 | 
			
		||||
  <varlistentry>
 | 
			
		||||
  <varlistentry xml:id="trivial-builder-runCommandLocal">
 | 
			
		||||
   <term>
 | 
			
		||||
    <literal>runCommandLocal</literal>
 | 
			
		||||
   </term>
 | 
			
		||||
   <listitem>
 | 
			
		||||
    <para>
 | 
			
		||||
     Variant of <literal>runCommand</literal> that forces the derivation to be built locally, it is not substituted. This is intended for very cheap commands (<1s execution time). It saves on the network roundrip and can speed up a build.
 | 
			
		||||
    </para>
 | 
			
		||||
    <note><para>
 | 
			
		||||
      This sets <link xlink:href="https://nixos.org/nix/manual/#adv-attr-allowSubstitutes"><literal>allowSubstitutes</literal> to <literal>false</literal></link>, so only use <literal>runCommandLocal</literal> if you are certain the user will always have a builder for the <literal>system</literal> of the derivation. This should be true for most trivial use cases (e.g. just copying some files to a different location or adding symlinks), because there the <literal>system</literal> is usually the same as <literal>builtins.currentSystem</literal>.
 | 
			
		||||
    </para></note>
 | 
			
		||||
   </listitem>
 | 
			
		||||
  </varlistentry>
 | 
			
		||||
  <varlistentry xml:id="trivial-builder-writeText">
 | 
			
		||||
   <term>
 | 
			
		||||
    <literal>writeTextFile</literal>, <literal>writeText</literal>, <literal>writeTextDir</literal>, <literal>writeScript</literal>, <literal>writeScriptBin</literal>
 | 
			
		||||
   </term>
 | 
			
		||||
@ -63,7 +76,7 @@
 | 
			
		||||
    </para>
 | 
			
		||||
   </listitem>
 | 
			
		||||
  </varlistentry>
 | 
			
		||||
  <varlistentry>
 | 
			
		||||
  <varlistentry xml:id="trivial-builder-symlinkJoin">
 | 
			
		||||
   <term>
 | 
			
		||||
    <literal>symlinkJoin</literal>
 | 
			
		||||
   </term>
 | 
			
		||||
 | 
			
		||||
@ -3225,6 +3225,12 @@
 | 
			
		||||
    githubId = 2195834;
 | 
			
		||||
    name = "Jaakko Luttinen";
 | 
			
		||||
  };
 | 
			
		||||
  jm2dev = {
 | 
			
		||||
    email = "jomarcar@gmail.com";
 | 
			
		||||
    github = "jm2dev";
 | 
			
		||||
    githubId = 474643;
 | 
			
		||||
    name = "José Miguel Martínez Carrasco";
 | 
			
		||||
  };
 | 
			
		||||
  jmagnusj = {
 | 
			
		||||
    email = "jmagnusj@gmail.com";
 | 
			
		||||
    github = "magnusjonsson";
 | 
			
		||||
 | 
			
		||||
@ -77,6 +77,12 @@
 | 
			
		||||
    be set if the hostname of the node should be non default.
 | 
			
		||||
    </para>
 | 
			
		||||
   </listitem>
 | 
			
		||||
   <listitem>
 | 
			
		||||
    <para>
 | 
			
		||||
    UPower's configuration is now managed by NixOS and can be customized
 | 
			
		||||
    via <option>services.upower</option>.
 | 
			
		||||
    </para>
 | 
			
		||||
   </listitem>
 | 
			
		||||
  </itemizedlist>
 | 
			
		||||
 | 
			
		||||
 </section>
 | 
			
		||||
 | 
			
		||||
@ -312,8 +312,13 @@ class Machine:
 | 
			
		||||
        self.monitor.send(message)
 | 
			
		||||
        return self.wait_for_monitor_prompt()
 | 
			
		||||
 | 
			
		||||
    def wait_for_unit(self, unit: str, user: Optional[str] = None) -> bool:
 | 
			
		||||
        while True:
 | 
			
		||||
    def wait_for_unit(self, unit: str, user: Optional[str] = None) -> None:
 | 
			
		||||
        """Wait for a systemd unit to get into "active" state.
 | 
			
		||||
        Throws exceptions on "failed" and "inactive" states as well as
 | 
			
		||||
        after timing out.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        def check_active(_: Any) -> bool:
 | 
			
		||||
            info = self.get_unit_info(unit, user)
 | 
			
		||||
            state = info["ActiveState"]
 | 
			
		||||
            if state == "failed":
 | 
			
		||||
@ -329,8 +334,10 @@ class Machine:
 | 
			
		||||
                                'unit "{}" is inactive and there ' "are no pending jobs"
 | 
			
		||||
                            ).format(unit)
 | 
			
		||||
                        )
 | 
			
		||||
            if state == "active":
 | 
			
		||||
                return True
 | 
			
		||||
 | 
			
		||||
            return state == "active"
 | 
			
		||||
 | 
			
		||||
        retry(check_active)
 | 
			
		||||
 | 
			
		||||
    def get_unit_info(self, unit: str, user: Optional[str] = None) -> Dict[str, str]:
 | 
			
		||||
        status, lines = self.systemctl('--no-pager show "{}"'.format(unit), user)
 | 
			
		||||
@ -421,18 +428,34 @@ class Machine:
 | 
			
		||||
                    )
 | 
			
		||||
 | 
			
		||||
    def wait_until_succeeds(self, command: str) -> str:
 | 
			
		||||
        """Wait until a command returns success and return its output.
 | 
			
		||||
        Throws an exception on timeout.
 | 
			
		||||
        """
 | 
			
		||||
        output = ""
 | 
			
		||||
 | 
			
		||||
        def check_success(_: Any) -> bool:
 | 
			
		||||
            nonlocal output
 | 
			
		||||
            status, output = self.execute(command)
 | 
			
		||||
            return status == 0
 | 
			
		||||
 | 
			
		||||
        with self.nested("waiting for success: {}".format(command)):
 | 
			
		||||
            while True:
 | 
			
		||||
                status, output = self.execute(command)
 | 
			
		||||
                if status == 0:
 | 
			
		||||
                    return output
 | 
			
		||||
            retry(check_success)
 | 
			
		||||
            return output
 | 
			
		||||
 | 
			
		||||
    def wait_until_fails(self, command: str) -> str:
 | 
			
		||||
        """Wait until a command returns failure.
 | 
			
		||||
        Throws an exception on timeout.
 | 
			
		||||
        """
 | 
			
		||||
        output = ""
 | 
			
		||||
 | 
			
		||||
        def check_failure(_: Any) -> bool:
 | 
			
		||||
            nonlocal output
 | 
			
		||||
            status, output = self.execute(command)
 | 
			
		||||
            return status != 0
 | 
			
		||||
 | 
			
		||||
        with self.nested("waiting for failure: {}".format(command)):
 | 
			
		||||
            while True:
 | 
			
		||||
                status, output = self.execute(command)
 | 
			
		||||
                if status != 0:
 | 
			
		||||
                    return output
 | 
			
		||||
            retry(check_failure)
 | 
			
		||||
            return output
 | 
			
		||||
 | 
			
		||||
    def wait_for_shutdown(self) -> None:
 | 
			
		||||
        if not self.booted:
 | 
			
		||||
@ -453,25 +476,38 @@ class Machine:
 | 
			
		||||
        )
 | 
			
		||||
        return output
 | 
			
		||||
 | 
			
		||||
    def wait_until_tty_matches(self, tty: str, regexp: str) -> bool:
 | 
			
		||||
    def wait_until_tty_matches(self, tty: str, regexp: str) -> None:
 | 
			
		||||
        """Wait until the visible output on the chosen TTY matches regular
 | 
			
		||||
        expression. Throws an exception on timeout.
 | 
			
		||||
        """
 | 
			
		||||
        matcher = re.compile(regexp)
 | 
			
		||||
 | 
			
		||||
        def tty_matches(last: bool) -> bool:
 | 
			
		||||
            text = self.get_tty_text(tty)
 | 
			
		||||
            if last:
 | 
			
		||||
                self.log(
 | 
			
		||||
                    f"Last chance to match /{regexp}/ on TTY{tty}, "
 | 
			
		||||
                    f"which currently contains: {text}"
 | 
			
		||||
                )
 | 
			
		||||
            return len(matcher.findall(text)) > 0
 | 
			
		||||
 | 
			
		||||
        with self.nested("waiting for {} to appear on tty {}".format(regexp, tty)):
 | 
			
		||||
            while True:
 | 
			
		||||
                text = self.get_tty_text(tty)
 | 
			
		||||
                if len(matcher.findall(text)) > 0:
 | 
			
		||||
                    return True
 | 
			
		||||
            retry(tty_matches)
 | 
			
		||||
 | 
			
		||||
    def send_chars(self, chars: List[str]) -> None:
 | 
			
		||||
        with self.nested("sending keys ‘{}‘".format(chars)):
 | 
			
		||||
            for char in chars:
 | 
			
		||||
                self.send_key(char)
 | 
			
		||||
 | 
			
		||||
    def wait_for_file(self, filename: str) -> bool:
 | 
			
		||||
    def wait_for_file(self, filename: str) -> None:
 | 
			
		||||
        """Waits until the file exists in machine's file system."""
 | 
			
		||||
 | 
			
		||||
        def check_file(_: Any) -> bool:
 | 
			
		||||
            status, _ = self.execute("test -e {}".format(filename))
 | 
			
		||||
            return status == 0
 | 
			
		||||
 | 
			
		||||
        with self.nested("waiting for file ‘{}‘".format(filename)):
 | 
			
		||||
            while True:
 | 
			
		||||
                status, _ = self.execute("test -e {}".format(filename))
 | 
			
		||||
                if status == 0:
 | 
			
		||||
                    return True
 | 
			
		||||
            retry(check_file)
 | 
			
		||||
 | 
			
		||||
    def wait_for_open_port(self, port: int) -> None:
 | 
			
		||||
        def port_is_open(_: Any) -> bool:
 | 
			
		||||
@ -494,8 +530,8 @@ class Machine:
 | 
			
		||||
    def stop_job(self, jobname: str, user: Optional[str] = None) -> Tuple[int, str]:
 | 
			
		||||
        return self.systemctl("stop {}".format(jobname), user)
 | 
			
		||||
 | 
			
		||||
    def wait_for_job(self, jobname: str) -> bool:
 | 
			
		||||
        return self.wait_for_unit(jobname)
 | 
			
		||||
    def wait_for_job(self, jobname: str) -> None:
 | 
			
		||||
        self.wait_for_unit(jobname)
 | 
			
		||||
 | 
			
		||||
    def connect(self) -> None:
 | 
			
		||||
        if self.connected:
 | 
			
		||||
@ -700,18 +736,20 @@ class Machine:
 | 
			
		||||
        """Wait until it is possible to connect to the X server.  Note that
 | 
			
		||||
        testing the existence of /tmp/.X11-unix/X0 is insufficient.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        def check_x(_: Any) -> bool:
 | 
			
		||||
            cmd = (
 | 
			
		||||
                "journalctl -b SYSLOG_IDENTIFIER=systemd | "
 | 
			
		||||
                + 'grep "Reached target Current graphical"'
 | 
			
		||||
            )
 | 
			
		||||
            status, _ = self.execute(cmd)
 | 
			
		||||
            if status != 0:
 | 
			
		||||
                return False
 | 
			
		||||
            status, _ = self.execute("[ -e /tmp/.X11-unix/X0 ]")
 | 
			
		||||
            return status == 0
 | 
			
		||||
 | 
			
		||||
        with self.nested("waiting for the X11 server"):
 | 
			
		||||
            while True:
 | 
			
		||||
                cmd = (
 | 
			
		||||
                    "journalctl -b SYSLOG_IDENTIFIER=systemd | "
 | 
			
		||||
                    + 'grep "Reached target Current graphical"'
 | 
			
		||||
                )
 | 
			
		||||
                status, _ = self.execute(cmd)
 | 
			
		||||
                if status != 0:
 | 
			
		||||
                    continue
 | 
			
		||||
                status, _ = self.execute("[ -e /tmp/.X11-unix/X0 ]")
 | 
			
		||||
                if status == 0:
 | 
			
		||||
                    return
 | 
			
		||||
            retry(check_x)
 | 
			
		||||
 | 
			
		||||
    def get_window_names(self) -> List[str]:
 | 
			
		||||
        return self.succeed(
 | 
			
		||||
 | 
			
		||||
@ -37,6 +37,172 @@ in
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      enableWattsUpPro = mkOption {
 | 
			
		||||
        type = types.bool;
 | 
			
		||||
        default = false;
 | 
			
		||||
        description = ''
 | 
			
		||||
          Enable the Watts Up Pro device.
 | 
			
		||||
 | 
			
		||||
          The Watts Up Pro contains a generic FTDI USB device without a specific
 | 
			
		||||
          vendor and product ID. When we probe for WUP devices, we can cause
 | 
			
		||||
          the user to get a perplexing "Device or resource busy" error when
 | 
			
		||||
          attempting to use their non-WUP device.
 | 
			
		||||
 | 
			
		||||
          The generic FTDI device is known to also be used on:
 | 
			
		||||
 | 
			
		||||
          <itemizedlist>
 | 
			
		||||
            <listitem><para>Sparkfun FT232 breakout board</para></listitem>
 | 
			
		||||
            <listitem><para>Parallax Propeller</para></listitem>
 | 
			
		||||
          </itemizedlist>
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      noPollBatteries = mkOption {
 | 
			
		||||
        type = types.bool;
 | 
			
		||||
        default = false;
 | 
			
		||||
        description = ''
 | 
			
		||||
          Don't poll the kernel for battery level changes.
 | 
			
		||||
 | 
			
		||||
          Some hardware will send us battery level changes through
 | 
			
		||||
          events, rather than us having to poll for it. This option
 | 
			
		||||
          allows disabling polling for hardware that sends out events.
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      ignoreLid = mkOption {
 | 
			
		||||
        type = types.bool;
 | 
			
		||||
        default = false;
 | 
			
		||||
        description = ''
 | 
			
		||||
          Do we ignore the lid state
 | 
			
		||||
 | 
			
		||||
          Some laptops are broken. The lid state is either inverted, or stuck
 | 
			
		||||
          on or off. We can't do much to fix these problems, but this is a way
 | 
			
		||||
          for users to make the laptop panel vanish, a state that might be used
 | 
			
		||||
          by a couple of user-space daemons. On Linux systems, see also
 | 
			
		||||
          logind.conf(5).
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      usePercentageForPolicy = mkOption {
 | 
			
		||||
        type = types.bool;
 | 
			
		||||
        default = true;
 | 
			
		||||
        description = ''
 | 
			
		||||
          Policy for warnings and action based on battery levels
 | 
			
		||||
 | 
			
		||||
          Whether battery percentage based policy should be used. The default
 | 
			
		||||
          is to use the percentage, which
 | 
			
		||||
          should work around broken firmwares. It is also more reliable than
 | 
			
		||||
          the time left (frantically saving all your files is going to use more
 | 
			
		||||
          battery than letting it rest for example).
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      percentageLow = mkOption {
 | 
			
		||||
        type = types.ints.unsigned;
 | 
			
		||||
        default = 10;
 | 
			
		||||
        description = ''
 | 
			
		||||
          When <literal>usePercentageForPolicy</literal> is
 | 
			
		||||
          <literal>true</literal>, the levels at which UPower will consider the
 | 
			
		||||
          battery low.
 | 
			
		||||
 | 
			
		||||
          This will also be used for batteries which don't have time information
 | 
			
		||||
          such as that of peripherals.
 | 
			
		||||
 | 
			
		||||
          If any value (of <literal>percentageLow</literal>,
 | 
			
		||||
          <literal>percentageCritical</literal> and
 | 
			
		||||
          <literal>percentageAction</literal>) is invalid, or not in descending
 | 
			
		||||
          order, the defaults will be used.
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      percentageCritical = mkOption {
 | 
			
		||||
        type = types.ints.unsigned;
 | 
			
		||||
        default = 3;
 | 
			
		||||
        description = ''
 | 
			
		||||
          When <literal>usePercentageForPolicy</literal> is
 | 
			
		||||
          <literal>true</literal>, the levels at which UPower will consider the
 | 
			
		||||
          battery critical.
 | 
			
		||||
 | 
			
		||||
          This will also be used for batteries which don't have time information
 | 
			
		||||
          such as that of peripherals.
 | 
			
		||||
 | 
			
		||||
          If any value (of <literal>percentageLow</literal>,
 | 
			
		||||
          <literal>percentageCritical</literal> and
 | 
			
		||||
          <literal>percentageAction</literal>) is invalid, or not in descending
 | 
			
		||||
          order, the defaults will be used.
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      percentageAction = mkOption {
 | 
			
		||||
        type = types.ints.unsigned;
 | 
			
		||||
        default = 2;
 | 
			
		||||
        description = ''
 | 
			
		||||
          When <literal>usePercentageForPolicy</literal> is
 | 
			
		||||
          <literal>true</literal>, the levels at which UPower will take action
 | 
			
		||||
          for the critical battery level.
 | 
			
		||||
 | 
			
		||||
          This will also be used for batteries which don't have time information
 | 
			
		||||
          such as that of peripherals.
 | 
			
		||||
 | 
			
		||||
          If any value (of <literal>percentageLow</literal>,
 | 
			
		||||
          <literal>percentageCritical</literal> and
 | 
			
		||||
          <literal>percentageAction</literal>) is invalid, or not in descending
 | 
			
		||||
          order, the defaults will be used.
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      timeLow = mkOption {
 | 
			
		||||
        type = types.ints.unsigned;
 | 
			
		||||
        default = 1200;
 | 
			
		||||
        description = ''
 | 
			
		||||
          When <literal>usePercentageForPolicy</literal> is
 | 
			
		||||
          <literal>false</literal>, the time remaining at which UPower will
 | 
			
		||||
          consider the battery low.
 | 
			
		||||
 | 
			
		||||
          If any value (of <literal>timeLow</literal>,
 | 
			
		||||
          <literal>timeCritical</literal> and <literal>timeAction</literal>) is
 | 
			
		||||
          invalid, or not in descending order, the defaults will be used.
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      timeCritical = mkOption {
 | 
			
		||||
        type = types.ints.unsigned;
 | 
			
		||||
        default = 300;
 | 
			
		||||
        description = ''
 | 
			
		||||
          When <literal>usePercentageForPolicy</literal> is
 | 
			
		||||
          <literal>false</literal>, the time remaining at which UPower will
 | 
			
		||||
          consider the battery critical.
 | 
			
		||||
 | 
			
		||||
          If any value (of <literal>timeLow</literal>,
 | 
			
		||||
          <literal>timeCritical</literal> and <literal>timeAction</literal>) is
 | 
			
		||||
          invalid, or not in descending order, the defaults will be used.
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      timeAction = mkOption {
 | 
			
		||||
        type = types.ints.unsigned;
 | 
			
		||||
        default = 120;
 | 
			
		||||
        description = ''
 | 
			
		||||
          When <literal>usePercentageForPolicy</literal> is
 | 
			
		||||
          <literal>false</literal>, the time remaining at which UPower will
 | 
			
		||||
          take action for the critical battery level.
 | 
			
		||||
 | 
			
		||||
          If any value (of <literal>timeLow</literal>,
 | 
			
		||||
          <literal>timeCritical</literal> and <literal>timeAction</literal>) is
 | 
			
		||||
          invalid, or not in descending order, the defaults will be used.
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      criticalPowerAction = mkOption {
 | 
			
		||||
        type = types.enum [ "PowerOff" "Hibernate" "HybridSleep" ];
 | 
			
		||||
        default = "HybridSleep";
 | 
			
		||||
        description = ''
 | 
			
		||||
          The action to take when <literal>timeAction</literal> or
 | 
			
		||||
          <literal>percentageAction</literal> has been reached for the batteries
 | 
			
		||||
          (UPS or laptop batteries) supplying the computer
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  };
 | 
			
		||||
@ -54,6 +220,21 @@ in
 | 
			
		||||
 | 
			
		||||
    systemd.packages = [ cfg.package ];
 | 
			
		||||
 | 
			
		||||
    environment.etc."UPower/UPower.conf".text = generators.toINI {} {
 | 
			
		||||
      UPower = {
 | 
			
		||||
        EnableWattsUpPro = cfg.enableWattsUpPro;
 | 
			
		||||
        NoPollBatteries = cfg.noPollBatteries;
 | 
			
		||||
        IgnoreLid = cfg.ignoreLid;
 | 
			
		||||
        UsePercentageForPolicy = cfg.usePercentageForPolicy;
 | 
			
		||||
        PercentageLow = cfg.percentageLow;
 | 
			
		||||
        PercentageCritical = cfg.percentageCritical;
 | 
			
		||||
        PercentageAction = cfg.percentageAction;
 | 
			
		||||
        TimeLow = cfg.timeLow;
 | 
			
		||||
        TimeCritical = cfg.timeCritical;
 | 
			
		||||
        TimeAction = cfg.timeAction;
 | 
			
		||||
        CriticalPowerAction = cfg.criticalPowerAction;
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -180,4 +180,6 @@ in
 | 
			
		||||
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ rnhmjoj ];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -197,4 +197,7 @@ in {
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ rnhmjoj ];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -60,4 +60,6 @@ in
 | 
			
		||||
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ rnhmjoj ];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -224,15 +224,17 @@ in
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
   assertions = singleton {
 | 
			
		||||
     assertion = cfg.mining.enable -> cfg.mining.address != "";
 | 
			
		||||
     message   = ''
 | 
			
		||||
    assertions = singleton {
 | 
			
		||||
      assertion = cfg.mining.enable -> cfg.mining.address != "";
 | 
			
		||||
      message   = ''
 | 
			
		||||
       You need a Monero address to receive mining rewards:
 | 
			
		||||
       specify one using option monero.mining.address.
 | 
			
		||||
    '';
 | 
			
		||||
   };
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ rnhmjoj ];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -201,4 +201,6 @@ in
 | 
			
		||||
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ rnhmjoj ];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -219,4 +219,6 @@ in {
 | 
			
		||||
     "To change extra Recursor settings use services.pdns-recursor.settings instead.")
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ rnhmjoj ];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -109,4 +109,6 @@ in
 | 
			
		||||
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ rnhmjoj ];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -75,4 +75,6 @@ in
 | 
			
		||||
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ rnhmjoj ];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -213,4 +213,6 @@ in {
 | 
			
		||||
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ rnhmjoj ];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -127,7 +127,7 @@ let
 | 
			
		||||
            <note><para>These themes need to be packaged before use, see example.</para></note>
 | 
			
		||||
          '';
 | 
			
		||||
          example = ''
 | 
			
		||||
            # For shits and giggles, let's package the responsive theme
 | 
			
		||||
            # Let's package the responsive theme
 | 
			
		||||
            responsiveTheme = pkgs.stdenv.mkDerivation {
 | 
			
		||||
              name = "responsive-theme";
 | 
			
		||||
              # Download the theme from the wordpress site
 | 
			
		||||
 | 
			
		||||
@ -207,6 +207,7 @@ with lib;
 | 
			
		||||
      default = null;
 | 
			
		||||
      description = ''
 | 
			
		||||
        Basic Auth password file for a vhost.
 | 
			
		||||
        Can be created via: <command>htpasswd -c <filename> <username></command>
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -284,4 +284,6 @@ in {
 | 
			
		||||
    environment.systemPackages = [ pkgs.compton ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ rnhmjoj ];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -71,4 +71,7 @@ in {
 | 
			
		||||
      serviceConfig.Restart = "always";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ rnhmjoj ];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -45,4 +45,6 @@ in {
 | 
			
		||||
    environment.variables.RXVT_SOCKET = "/run/user/$(id -u)/urxvtd-socket";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ rnhmjoj ];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -12,6 +12,7 @@ let
 | 
			
		||||
  cfgSnapFlags = cfgSnapshots.flags;
 | 
			
		||||
  cfgScrub = config.services.zfs.autoScrub;
 | 
			
		||||
  cfgTrim = config.services.zfs.trim;
 | 
			
		||||
  cfgZED = config.services.zfs.zed;
 | 
			
		||||
 | 
			
		||||
  inInitrd = any (fs: fs == "zfs") config.boot.initrd.supportedFilesystems;
 | 
			
		||||
  inSystem = any (fs: fs == "zfs") config.boot.supportedFilesystems;
 | 
			
		||||
@ -87,6 +88,17 @@ let
 | 
			
		||||
    }
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  zedConf = generators.toKeyValue {
 | 
			
		||||
    mkKeyValue = generators.mkKeyValueDefault {
 | 
			
		||||
      mkValueString = v:
 | 
			
		||||
        if isInt           v then toString v
 | 
			
		||||
        else if isString   v then "\"${v}\""
 | 
			
		||||
        else if true  ==   v then "1"
 | 
			
		||||
        else if false ==   v then "0"
 | 
			
		||||
        else if isList     v then "\"" + (concatStringsSep " " v) + "\""
 | 
			
		||||
        else err "this value is" (toString v);
 | 
			
		||||
    } "=";
 | 
			
		||||
  } cfgZED.settings;
 | 
			
		||||
in
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
@ -312,6 +324,32 @@ in
 | 
			
		||||
        '';
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    services.zfs.zed.settings = mkOption {
 | 
			
		||||
      type = with types; attrsOf (oneOf [ str int bool (listOf str) ]);
 | 
			
		||||
      example = literalExample ''
 | 
			
		||||
        {
 | 
			
		||||
          ZED_DEBUG_LOG = "/tmp/zed.debug.log";
 | 
			
		||||
 | 
			
		||||
          ZED_EMAIL_ADDR = [ "root" ];
 | 
			
		||||
          ZED_EMAIL_PROG = "mail";
 | 
			
		||||
          ZED_EMAIL_OPTS = "-s '@SUBJECT@' @ADDRESS@";
 | 
			
		||||
 | 
			
		||||
          ZED_NOTIFY_INTERVAL_SECS = 3600;
 | 
			
		||||
          ZED_NOTIFY_VERBOSE = false;
 | 
			
		||||
 | 
			
		||||
          ZED_USE_ENCLOSURE_LEDS = true;
 | 
			
		||||
          ZED_SCRUB_AFTER_RESILVER = false;
 | 
			
		||||
        }
 | 
			
		||||
      '';
 | 
			
		||||
      description = ''
 | 
			
		||||
        ZFS Event Daemon /etc/zfs/zed.d/zed.rc content
 | 
			
		||||
 | 
			
		||||
        See
 | 
			
		||||
        <citerefentry><refentrytitle>zed</refentrytitle><manvolnum>8</manvolnum></citerefentry>
 | 
			
		||||
        for details on ZED and the scripts in /etc/zfs/zed.d to find the possible variables
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  ###### implementation
 | 
			
		||||
@ -389,8 +427,32 @@ in
 | 
			
		||||
        zfsSupport = true;
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      environment.etc."zfs/zed.d".source = "${packages.zfsUser}/etc/zfs/zed.d/";
 | 
			
		||||
      environment.etc."zfs/zpool.d".source = "${packages.zfsUser}/etc/zfs/zpool.d/";
 | 
			
		||||
      services.zfs.zed.settings = {
 | 
			
		||||
        ZED_EMAIL_PROG = mkDefault "${pkgs.mailutils}/bin/mail";
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      environment.etc = genAttrs
 | 
			
		||||
        (map
 | 
			
		||||
          (file: "zfs/zed.d/${file}")
 | 
			
		||||
          [
 | 
			
		||||
            "all-syslog.sh"
 | 
			
		||||
            "pool_import-led.sh"
 | 
			
		||||
            "resilver_finish-start-scrub.sh"
 | 
			
		||||
            "statechange-led.sh"
 | 
			
		||||
            "vdev_attach-led.sh"
 | 
			
		||||
            "zed-functions.sh"
 | 
			
		||||
            "data-notify.sh"
 | 
			
		||||
            "resilver_finish-notify.sh"
 | 
			
		||||
            "scrub_finish-notify.sh"
 | 
			
		||||
            "statechange-notify.sh"
 | 
			
		||||
            "vdev_clear-led.sh"
 | 
			
		||||
          ]
 | 
			
		||||
        )
 | 
			
		||||
        (file: { source = "${packages.zfsUser}/etc/${file}"; })
 | 
			
		||||
      // {
 | 
			
		||||
        "zfs/zed.d/zed.rc".text = zedConf;
 | 
			
		||||
        "zfs/zpool.d".source = "${packages.zfsUser}/etc/zfs/zpool.d/";
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      system.fsPackages = [ packages.zfsUser ]; # XXX: needed? zfs doesn't have (need) a fsck
 | 
			
		||||
      environment.systemPackages = [ packages.zfsUser ]
 | 
			
		||||
 | 
			
		||||
@ -103,6 +103,7 @@ in
 | 
			
		||||
  grafana = handleTest ./grafana.nix {};
 | 
			
		||||
  graphite = handleTest ./graphite.nix {};
 | 
			
		||||
  graylog = handleTest ./graylog.nix {};
 | 
			
		||||
  gvisor = handleTest ./gvisor.nix {};
 | 
			
		||||
  hadoop.hdfs = handleTestOn [ "x86_64-linux" ] ./hadoop/hdfs.nix {};
 | 
			
		||||
  hadoop.yarn = handleTestOn [ "x86_64-linux" ] ./hadoop/yarn.nix {};
 | 
			
		||||
  handbrake = handleTestOn ["x86_64-linux"] ./handbrake.nix {};
 | 
			
		||||
 | 
			
		||||
@ -9,14 +9,18 @@ let
 | 
			
		||||
  header = "Accept: application/vnd.go.cd.v2+json";
 | 
			
		||||
in
 | 
			
		||||
 | 
			
		||||
import ./make-test.nix ({ pkgs, ...} : {
 | 
			
		||||
import ./make-test-python.nix ({ pkgs, ...} : {
 | 
			
		||||
  name = "gocd-agent";
 | 
			
		||||
  meta = with pkgs.stdenv.lib.maintainers; {
 | 
			
		||||
    maintainers = [ grahamc swarren83 ];
 | 
			
		||||
 | 
			
		||||
    # gocd agent needs to register with the autoregister key created on first server startup,
 | 
			
		||||
    # but NixOS module doesn't seem to allow to pass during runtime currently
 | 
			
		||||
    broken = true;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  nodes = {
 | 
			
		||||
    gocd_agent =
 | 
			
		||||
    agent =
 | 
			
		||||
      { ... }:
 | 
			
		||||
      {
 | 
			
		||||
        virtualisation.memorySize = 2046;
 | 
			
		||||
@ -30,11 +34,15 @@ import ./make-test.nix ({ pkgs, ...} : {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  testScript = ''
 | 
			
		||||
    startAll;
 | 
			
		||||
    $gocd_agent->waitForUnit("gocd-server");
 | 
			
		||||
    $gocd_agent->waitForOpenPort("8153");
 | 
			
		||||
    $gocd_agent->waitForUnit("gocd-agent");
 | 
			
		||||
    $gocd_agent->waitUntilSucceeds("curl ${serverUrl} -H '${header}' | ${pkgs.jq}/bin/jq -e ._embedded.agents[0].uuid");
 | 
			
		||||
    $gocd_agent->succeed("curl ${serverUrl} -H '${header}' | ${pkgs.jq}/bin/jq -e ._embedded.agents[0].agent_state | grep -q Idle");
 | 
			
		||||
    start_all()
 | 
			
		||||
    agent.wait_for_unit("gocd-server")
 | 
			
		||||
    agent.wait_for_open_port("8153")
 | 
			
		||||
    agent.wait_for_unit("gocd-agent")
 | 
			
		||||
    agent.wait_until_succeeds(
 | 
			
		||||
        "curl ${serverUrl} -H '${header}' | ${pkgs.jq}/bin/jq -e ._embedded.agents[0].uuid"
 | 
			
		||||
    )
 | 
			
		||||
    agent.succeed(
 | 
			
		||||
        "curl ${serverUrl} -H '${header}' | ${pkgs.jq}/bin/jq -e ._embedded.agents[0].agent_state | grep -q Idle"
 | 
			
		||||
    )
 | 
			
		||||
  '';
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
#   1. GoCD server starts
 | 
			
		||||
#   2. GoCD server responds
 | 
			
		||||
 | 
			
		||||
import ./make-test.nix ({ pkgs, ...} :
 | 
			
		||||
import ./make-test-python.nix ({ pkgs, ...} :
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  name = "gocd-server";
 | 
			
		||||
@ -10,19 +10,19 @@ import ./make-test.nix ({ pkgs, ...} :
 | 
			
		||||
    maintainers = [ swarren83 ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
nodes = {
 | 
			
		||||
  gocd_server =
 | 
			
		||||
    { ... }:
 | 
			
		||||
    {
 | 
			
		||||
      virtualisation.memorySize = 2046;
 | 
			
		||||
      services.gocd-server.enable = true;
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
  nodes = {
 | 
			
		||||
    server =
 | 
			
		||||
      { ... }:
 | 
			
		||||
      {
 | 
			
		||||
        virtualisation.memorySize = 2046;
 | 
			
		||||
        services.gocd-server.enable = true;
 | 
			
		||||
      };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  testScript = ''
 | 
			
		||||
    $gocd_server->start;
 | 
			
		||||
    $gocd_server->waitForUnit("gocd-server");
 | 
			
		||||
    $gocd_server->waitForOpenPort("8153");
 | 
			
		||||
    $gocd_server->waitUntilSucceeds("curl -s -f localhost:8153/go");
 | 
			
		||||
    server.start()
 | 
			
		||||
    server.wait_for_unit("gocd-server")
 | 
			
		||||
    server.wait_for_open_port(8153)
 | 
			
		||||
    server.wait_until_succeeds("curl -s -f localhost:8153/go")
 | 
			
		||||
  '';
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										49
									
								
								nixos/tests/gvisor.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								nixos/tests/gvisor.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
			
		||||
# This test runs a container through gvisor and checks if simple container starts
 | 
			
		||||
 | 
			
		||||
import ./make-test-python.nix ({ pkgs, ...} : {
 | 
			
		||||
  name = "gvisor";
 | 
			
		||||
  meta = with pkgs.stdenv.lib.maintainers; {
 | 
			
		||||
    maintainers = [ andrew-d ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  nodes = {
 | 
			
		||||
    gvisor =
 | 
			
		||||
      { pkgs, ... }:
 | 
			
		||||
        {
 | 
			
		||||
          virtualisation.docker = {
 | 
			
		||||
            enable = true;
 | 
			
		||||
            extraOptions = "--add-runtime runsc=${pkgs.gvisor}/bin/runsc";
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          networking = {
 | 
			
		||||
            dhcpcd.enable = false;
 | 
			
		||||
            defaultGateway = "192.168.1.1";
 | 
			
		||||
            interfaces.eth1.ipv4.addresses = pkgs.lib.mkOverride 0 [
 | 
			
		||||
              { address = "192.168.1.2"; prefixLength = 24; }
 | 
			
		||||
            ];
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  testScript = ''
 | 
			
		||||
    start_all()
 | 
			
		||||
 | 
			
		||||
    gvisor.wait_for_unit("network.target")
 | 
			
		||||
    gvisor.wait_for_unit("sockets.target")
 | 
			
		||||
 | 
			
		||||
    # Start by verifying that gvisor itself works
 | 
			
		||||
    output = gvisor.succeed(
 | 
			
		||||
        "${pkgs.gvisor}/bin/runsc -alsologtostderr do ${pkgs.coreutils}/bin/echo hello world"
 | 
			
		||||
    )
 | 
			
		||||
    assert output.strip() == "hello world"
 | 
			
		||||
 | 
			
		||||
    # Also test the Docker runtime
 | 
			
		||||
    gvisor.succeed("tar cv --files-from /dev/null | docker import - scratchimg")
 | 
			
		||||
    gvisor.succeed(
 | 
			
		||||
        "docker run -d --name=sleeping --runtime=runsc -v /nix/store:/nix/store -v /run/current-system/sw/bin:/bin scratchimg /bin/sleep 10"
 | 
			
		||||
    )
 | 
			
		||||
    gvisor.succeed("docker ps | grep sleeping")
 | 
			
		||||
    gvisor.succeed("docker stop sleeping")
 | 
			
		||||
  '';
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
import ./make-test.nix ({ pkgs, ...} : {
 | 
			
		||||
import ./make-test-python.nix ({ pkgs, ...} : {
 | 
			
		||||
  name = "i3wm";
 | 
			
		||||
  meta = with pkgs.stdenv.lib.maintainers; {
 | 
			
		||||
    maintainers = [ aszlig ];
 | 
			
		||||
@ -12,24 +12,35 @@ import ./make-test.nix ({ pkgs, ...} : {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  testScript = { ... }: ''
 | 
			
		||||
    $machine->waitForX;
 | 
			
		||||
    $machine->waitForFile("/home/alice/.Xauthority");
 | 
			
		||||
    $machine->succeed("xauth merge ~alice/.Xauthority");
 | 
			
		||||
    $machine->waitForWindow(qr/first configuration/);
 | 
			
		||||
    $machine->sleep(2);
 | 
			
		||||
    $machine->screenshot("started");
 | 
			
		||||
    $machine->sendKeys("ret");
 | 
			
		||||
    $machine->sleep(2);
 | 
			
		||||
    $machine->sendKeys("alt");
 | 
			
		||||
    $machine->sleep(2);
 | 
			
		||||
    $machine->screenshot("configured");
 | 
			
		||||
    $machine->sendKeys("ret");
 | 
			
		||||
    # make sure the config file is created before we continue
 | 
			
		||||
    $machine->waitForFile("/home/alice/.config/i3/config");
 | 
			
		||||
    $machine->sleep(2);
 | 
			
		||||
    $machine->sendKeys("alt-ret");
 | 
			
		||||
    $machine->waitForWindow(qr/alice.*machine/);
 | 
			
		||||
    $machine->sleep(2);
 | 
			
		||||
    $machine->screenshot("terminal");
 | 
			
		||||
    with subtest("ensure x starts"):
 | 
			
		||||
        machine.wait_for_x()
 | 
			
		||||
        machine.wait_for_file("/home/alice/.Xauthority")
 | 
			
		||||
        machine.succeed("xauth merge ~alice/.Xauthority")
 | 
			
		||||
 | 
			
		||||
    with subtest("ensure we get first configuration window"):
 | 
			
		||||
        machine.wait_for_window(r".*?first configuration.*?")
 | 
			
		||||
        machine.sleep(2)
 | 
			
		||||
        machine.screenshot("started")
 | 
			
		||||
 | 
			
		||||
    with subtest("ensure we generate and save a config"):
 | 
			
		||||
        # press return to indicate we want to gen a new config
 | 
			
		||||
        machine.send_key("\n")
 | 
			
		||||
        machine.sleep(2)
 | 
			
		||||
        machine.screenshot("preconfig")
 | 
			
		||||
        # press alt then return to indicate we want to use alt as our Mod key
 | 
			
		||||
        machine.send_key("alt")
 | 
			
		||||
        machine.send_key("\n")
 | 
			
		||||
        machine.sleep(2)
 | 
			
		||||
        # make sure the config file is created before we continue
 | 
			
		||||
        machine.wait_for_file("/home/alice/.config/i3/config")
 | 
			
		||||
        machine.screenshot("postconfig")
 | 
			
		||||
        machine.sleep(2)
 | 
			
		||||
 | 
			
		||||
    with subtest("ensure we can open a new terminal"):
 | 
			
		||||
        machine.send_key("alt-ret")
 | 
			
		||||
        machine.sleep(2)
 | 
			
		||||
        machine.wait_for_window(r"alice.*?machine")
 | 
			
		||||
        machine.sleep(2)
 | 
			
		||||
        machine.screenshot("terminal")
 | 
			
		||||
  '';
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
import ./make-test.nix ({ pkgs, lib, ...} :
 | 
			
		||||
import ./make-test-python.nix ({ pkgs, lib, ...} :
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  unlines = lib.concatStringsSep "\n";
 | 
			
		||||
@ -288,108 +288,118 @@ in
 | 
			
		||||
 | 
			
		||||
    client1 = mkClient true; # use nss_pam_ldapd
 | 
			
		||||
    client2 = mkClient false; # use nss_ldap and pam_ldap
 | 
			
		||||
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  testScript = ''
 | 
			
		||||
    $server->start;
 | 
			
		||||
    $server->waitForUnit("default.target");
 | 
			
		||||
    def expect_script(*commands):
 | 
			
		||||
        script = ";".join(commands)
 | 
			
		||||
        return f"${pkgs.expect}/bin/expect -c '{script}'"
 | 
			
		||||
 | 
			
		||||
    subtest "slapd", sub {
 | 
			
		||||
      subtest "auth as database admin with SASL and check a POSIX account", sub {
 | 
			
		||||
        $server->succeed(join ' ', 'test',
 | 
			
		||||
         '"$(ldapsearch -LLL -H ldapi:// -Y EXTERNAL',
 | 
			
		||||
             '-b \'uid=${ldapUser},ou=accounts,ou=posix,${dbSuffix}\' ',
 | 
			
		||||
             '-s base uidNumber |',
 | 
			
		||||
           'sed -ne \'s/^uidNumber: \\(.*\\)/\\1/p\' ',
 | 
			
		||||
         ')" -eq ${toString ldapUserId}');
 | 
			
		||||
      };
 | 
			
		||||
      subtest "auth as database admin with password and check a POSIX account", sub {
 | 
			
		||||
        $server->succeed(join ' ', 'test',
 | 
			
		||||
         '"$(ldapsearch -LLL -H ldap://server',
 | 
			
		||||
             '-D \'cn=admin,${dbSuffix}\' -w \'${dbAdminPwd}\' ',
 | 
			
		||||
             '-b \'uid=${ldapUser},ou=accounts,ou=posix,${dbSuffix}\' ',
 | 
			
		||||
             '-s base uidNumber |',
 | 
			
		||||
           'sed -ne \'s/^uidNumber: \\(.*\\)/\\1/p\' ',
 | 
			
		||||
         ')" -eq ${toString ldapUserId}');
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    $client1->start;
 | 
			
		||||
    $client1->waitForUnit("default.target");
 | 
			
		||||
    server.start()
 | 
			
		||||
    server.wait_for_unit("default.target")
 | 
			
		||||
 | 
			
		||||
    subtest "password", sub {
 | 
			
		||||
      subtest "su with password to a POSIX account", sub {
 | 
			
		||||
        $client1->succeed("${pkgs.expect}/bin/expect -c '" . join ';',
 | 
			
		||||
          'spawn su "${ldapUser}"',
 | 
			
		||||
          'expect "Password:"',
 | 
			
		||||
          'send "${ldapUserPwd}\n"',
 | 
			
		||||
          'expect "*"',
 | 
			
		||||
          'send "whoami\n"',
 | 
			
		||||
          'expect -ex "${ldapUser}" {exit}',
 | 
			
		||||
          'exit 1' . "'");
 | 
			
		||||
      };
 | 
			
		||||
      subtest "change password of a POSIX account as root", sub {
 | 
			
		||||
        $client1->succeed("chpasswd <<<'${ldapUser}:new-password'");
 | 
			
		||||
        $client1->succeed("${pkgs.expect}/bin/expect -c '" . join ';',
 | 
			
		||||
          'spawn su "${ldapUser}"',
 | 
			
		||||
          'expect "Password:"',
 | 
			
		||||
          'send "new-password\n"',
 | 
			
		||||
          'expect "*"',
 | 
			
		||||
          'send "whoami\n"',
 | 
			
		||||
          'expect -ex "${ldapUser}" {exit}',
 | 
			
		||||
          'exit 1' . "'");
 | 
			
		||||
        $client1->succeed('chpasswd <<<\'${ldapUser}:${ldapUserPwd}\' ');
 | 
			
		||||
      };
 | 
			
		||||
      subtest "change password of a POSIX account from itself", sub {
 | 
			
		||||
        $client1->succeed('chpasswd <<<\'${ldapUser}:${ldapUserPwd}\' ');
 | 
			
		||||
        $client1->succeed("${pkgs.expect}/bin/expect -c '" . join ';',
 | 
			
		||||
          'spawn su --login ${ldapUser} -c passwd',
 | 
			
		||||
          'expect "Password: "',
 | 
			
		||||
          'send "${ldapUserPwd}\n"',
 | 
			
		||||
          'expect "(current) UNIX password: "',
 | 
			
		||||
          'send "${ldapUserPwd}\n"',
 | 
			
		||||
          'expect "New password: "',
 | 
			
		||||
          'send "new-password\n"',
 | 
			
		||||
          'expect "Retype new password: "',
 | 
			
		||||
          'send "new-password\n"',
 | 
			
		||||
          'expect "passwd: password updated successfully" {exit}',
 | 
			
		||||
          'exit 1' . "'");
 | 
			
		||||
        $client1->succeed("${pkgs.expect}/bin/expect -c '" . join ';',
 | 
			
		||||
          'spawn su "${ldapUser}"',
 | 
			
		||||
          'expect "Password:"',
 | 
			
		||||
          'send "${ldapUserPwd}\n"',
 | 
			
		||||
          'expect "su: Authentication failure" {exit}',
 | 
			
		||||
          'exit 1' . "'");
 | 
			
		||||
        $client1->succeed("${pkgs.expect}/bin/expect -c '" . join ';',
 | 
			
		||||
          'spawn su "${ldapUser}"',
 | 
			
		||||
          'expect "Password:"',
 | 
			
		||||
          'send "new-password\n"',
 | 
			
		||||
          'expect "*"',
 | 
			
		||||
          'send "whoami\n"',
 | 
			
		||||
          'expect -ex "${ldapUser}" {exit}',
 | 
			
		||||
          'exit 1' . "'");
 | 
			
		||||
        $client1->succeed('chpasswd <<<\'${ldapUser}:${ldapUserPwd}\' ');
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
    with subtest("slapd: auth as database admin with SASL and check a POSIX account"):
 | 
			
		||||
        server.succeed(
 | 
			
		||||
            'test "$(ldapsearch -LLL -H ldapi:// -Y EXTERNAL '
 | 
			
		||||
            + "-b 'uid=${ldapUser},ou=accounts,ou=posix,${dbSuffix}' "
 | 
			
		||||
            + "-s base uidNumber | "
 | 
			
		||||
            + "sed -ne 's/^uidNumber: \\(.*\\)/\\1/p')\" -eq ${toString ldapUserId}"
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    $client2->start;
 | 
			
		||||
    $client2->waitForUnit("default.target");
 | 
			
		||||
    with subtest("slapd: auth as database admin with password and check a POSIX account"):
 | 
			
		||||
        server.succeed(
 | 
			
		||||
            "test \"$(ldapsearch -LLL -H ldap://server -D 'cn=admin,${dbSuffix}' "
 | 
			
		||||
            + "-w '${dbAdminPwd}' -b 'uid=${ldapUser},ou=accounts,ou=posix,${dbSuffix}' "
 | 
			
		||||
            + "-s base uidNumber | "
 | 
			
		||||
            + "sed -ne 's/^uidNumber: \\(.*\\)/\\1/p')\" -eq ${toString ldapUserId}"
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    subtest "NSS", sub {
 | 
			
		||||
        $client1->succeed("test \"\$(id -u '${ldapUser}')\" -eq ${toString ldapUserId}");
 | 
			
		||||
        $client1->succeed("test \"\$(id -u -n '${ldapUser}')\" = '${ldapUser}'");
 | 
			
		||||
        $client1->succeed("test \"\$(id -g '${ldapUser}')\" -eq ${toString ldapGroupId}");
 | 
			
		||||
        $client1->succeed("test \"\$(id -g -n '${ldapUser}')\" = '${ldapGroup}'");
 | 
			
		||||
        $client2->succeed("test \"\$(id -u '${ldapUser}')\" -eq ${toString ldapUserId}");
 | 
			
		||||
        $client2->succeed("test \"\$(id -u -n '${ldapUser}')\" = '${ldapUser}'");
 | 
			
		||||
        $client2->succeed("test \"\$(id -g '${ldapUser}')\" -eq ${toString ldapGroupId}");
 | 
			
		||||
        $client2->succeed("test \"\$(id -g -n '${ldapUser}')\" = '${ldapGroup}'");
 | 
			
		||||
    };
 | 
			
		||||
    client1.start()
 | 
			
		||||
    client1.wait_for_unit("default.target")
 | 
			
		||||
 | 
			
		||||
    subtest "PAM", sub {
 | 
			
		||||
        $client1->succeed("echo ${ldapUserPwd} | su -l '${ldapUser}' -c true");
 | 
			
		||||
        $client2->succeed("echo ${ldapUserPwd} | su -l '${ldapUser}' -c true");
 | 
			
		||||
    };
 | 
			
		||||
    with subtest("password: su with password to a POSIX account"):
 | 
			
		||||
        client1.succeed(
 | 
			
		||||
            expect_script(
 | 
			
		||||
                'spawn su "${ldapUser}"',
 | 
			
		||||
                'expect "Password:"',
 | 
			
		||||
                'send "${ldapUserPwd}\n"',
 | 
			
		||||
                'expect "*"',
 | 
			
		||||
                'send "whoami\n"',
 | 
			
		||||
                'expect -ex "${ldapUser}" {exit}',
 | 
			
		||||
                "exit 1",
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    with subtest("password: change password of a POSIX account as root"):
 | 
			
		||||
        client1.succeed(
 | 
			
		||||
            "chpasswd <<<'${ldapUser}:new-password'",
 | 
			
		||||
            expect_script(
 | 
			
		||||
                'spawn su "${ldapUser}"',
 | 
			
		||||
                'expect "Password:"',
 | 
			
		||||
                'send "new-password\n"',
 | 
			
		||||
                'expect "*"',
 | 
			
		||||
                'send "whoami\n"',
 | 
			
		||||
                'expect -ex "${ldapUser}" {exit}',
 | 
			
		||||
                "exit 1",
 | 
			
		||||
            ),
 | 
			
		||||
            "chpasswd <<<'${ldapUser}:${ldapUserPwd}'",
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    with subtest("password: change password of a POSIX account from itself"):
 | 
			
		||||
        client1.succeed(
 | 
			
		||||
            "chpasswd <<<'${ldapUser}:${ldapUserPwd}' ",
 | 
			
		||||
            expect_script(
 | 
			
		||||
                "spawn su --login ${ldapUser} -c passwd",
 | 
			
		||||
                'expect "Password: "',
 | 
			
		||||
                'send "${ldapUserPwd}\n"',
 | 
			
		||||
                'expect "(current) UNIX password: "',
 | 
			
		||||
                'send "${ldapUserPwd}\n"',
 | 
			
		||||
                'expect "New password: "',
 | 
			
		||||
                'send "new-password\n"',
 | 
			
		||||
                'expect "Retype new password: "',
 | 
			
		||||
                'send "new-password\n"',
 | 
			
		||||
                'expect "passwd: password updated successfully" {exit}',
 | 
			
		||||
                "exit 1",
 | 
			
		||||
            ),
 | 
			
		||||
            expect_script(
 | 
			
		||||
                'spawn su "${ldapUser}"',
 | 
			
		||||
                'expect "Password:"',
 | 
			
		||||
                'send "${ldapUserPwd}\n"',
 | 
			
		||||
                'expect "su: Authentication failure" {exit}',
 | 
			
		||||
                "exit 1",
 | 
			
		||||
            ),
 | 
			
		||||
            expect_script(
 | 
			
		||||
                'spawn su "${ldapUser}"',
 | 
			
		||||
                'expect "Password:"',
 | 
			
		||||
                'send "new-password\n"',
 | 
			
		||||
                'expect "*"',
 | 
			
		||||
                'send "whoami\n"',
 | 
			
		||||
                'expect -ex "${ldapUser}" {exit}',
 | 
			
		||||
                "exit 1",
 | 
			
		||||
            ),
 | 
			
		||||
            "chpasswd <<<'${ldapUser}:${ldapUserPwd}'",
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    client2.start()
 | 
			
		||||
    client2.wait_for_unit("default.target")
 | 
			
		||||
 | 
			
		||||
    with subtest("NSS"):
 | 
			
		||||
        client1.succeed(
 | 
			
		||||
            "test \"$(id -u    '${ldapUser}')\" -eq ${toString ldapUserId}",
 | 
			
		||||
            "test \"$(id -u -n '${ldapUser}')\" =  '${ldapUser}'",
 | 
			
		||||
            "test \"$(id -g    '${ldapUser}')\" -eq ${toString ldapGroupId}",
 | 
			
		||||
            "test \"$(id -g -n '${ldapUser}')\" =  '${ldapGroup}'",
 | 
			
		||||
            "test \"$(id -u    '${ldapUser}')\" -eq ${toString ldapUserId}",
 | 
			
		||||
            "test \"$(id -u -n '${ldapUser}')\" =  '${ldapUser}'",
 | 
			
		||||
            "test \"$(id -g    '${ldapUser}')\" -eq ${toString ldapGroupId}",
 | 
			
		||||
            "test \"$(id -g -n '${ldapUser}')\" =  '${ldapGroup}'",
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    with subtest("PAM"):
 | 
			
		||||
        client1.succeed(
 | 
			
		||||
            "echo ${ldapUserPwd} | su -l '${ldapUser}' -c true",
 | 
			
		||||
            "echo ${ldapUserPwd} | su -l '${ldapUser}' -c true",
 | 
			
		||||
        )
 | 
			
		||||
  '';
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
import ./make-test.nix ({ pkgs, lib, ... }: {
 | 
			
		||||
import ./make-test-python.nix ({ pkgs, lib, ... }: {
 | 
			
		||||
  name = "moinmoin";
 | 
			
		||||
  meta.maintainers = [ ]; # waiting for https://github.com/NixOS/nixpkgs/pull/65397
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ mmilata ];
 | 
			
		||||
 | 
			
		||||
  machine =
 | 
			
		||||
    { ... }:
 | 
			
		||||
@ -13,12 +13,16 @@ import ./make-test.nix ({ pkgs, lib, ... }: {
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  testScript = ''
 | 
			
		||||
    startAll;
 | 
			
		||||
    start_all()
 | 
			
		||||
 | 
			
		||||
    $machine->waitForUnit('moin-ExampleWiki.service');
 | 
			
		||||
    $machine->waitForUnit('nginx.service');
 | 
			
		||||
    $machine->waitForFile('/run/moin/ExampleWiki/gunicorn.sock');
 | 
			
		||||
    $machine->succeed('curl -L http://localhost/') =~ /If you have just installed/ or die;
 | 
			
		||||
    $machine->succeed('moin-ExampleWiki account create --name=admin --email=admin@example.com --password=foo 2>&1') =~ /status success/ or die;
 | 
			
		||||
    machine.wait_for_unit("moin-ExampleWiki.service")
 | 
			
		||||
    machine.wait_for_unit("nginx.service")
 | 
			
		||||
    machine.wait_for_file("/run/moin/ExampleWiki/gunicorn.sock")
 | 
			
		||||
 | 
			
		||||
    assert "If you have just installed" in machine.succeed("curl -L http://localhost/")
 | 
			
		||||
 | 
			
		||||
    assert "status success" in machine.succeed(
 | 
			
		||||
        "moin-ExampleWiki account create --name=admin --email=admin@example.com --password=foo 2>&1"
 | 
			
		||||
    )
 | 
			
		||||
  '';
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
import ./make-test.nix {
 | 
			
		||||
import ./make-test-python.nix {
 | 
			
		||||
  name = "openldap";
 | 
			
		||||
 | 
			
		||||
  machine = { pkgs, ... }: {
 | 
			
		||||
@ -24,8 +24,10 @@ import ./make-test.nix {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  testScript = ''
 | 
			
		||||
    $machine->waitForUnit('openldap.service');
 | 
			
		||||
    $machine->succeed('systemctl status openldap.service');
 | 
			
		||||
    $machine->succeed('ldapsearch -LLL -D "cn=root,dc=example" -w notapassword -b "dc=example"');
 | 
			
		||||
    machine.wait_for_unit("openldap.service")
 | 
			
		||||
    machine.succeed(
 | 
			
		||||
        "systemctl status openldap.service",
 | 
			
		||||
        'ldapsearch -LLL -D "cn=root,dc=example" -w notapassword -b "dc=example"',
 | 
			
		||||
    )
 | 
			
		||||
  '';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
import ./make-test.nix ({ ... }:
 | 
			
		||||
import ./make-test-python.nix ({ ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  oathSnakeoilSecret = "cdd4083ef8ff1fa9178c6d46bfb1a3";
 | 
			
		||||
@ -55,70 +55,54 @@ in
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  testScript =
 | 
			
		||||
    ''
 | 
			
		||||
      $machine->waitForUnit('multi-user.target');
 | 
			
		||||
      $machine->waitUntilSucceeds("pgrep -f 'agetty.*tty1'");
 | 
			
		||||
      $machine->screenshot("postboot");
 | 
			
		||||
  testScript = ''
 | 
			
		||||
    def switch_to_tty(tty_number):
 | 
			
		||||
        machine.fail(f"pgrep -f 'agetty.*tty{tty_number}'")
 | 
			
		||||
        machine.send_key(f"alt-f{tty_number}")
 | 
			
		||||
        machine.wait_until_succeeds(f"[ $(fgconsole) = {tty_number} ]")
 | 
			
		||||
        machine.wait_for_unit(f"getty@tty{tty_number}.service")
 | 
			
		||||
        machine.wait_until_succeeds(f"pgrep -f 'agetty.*tty{tty_number}'")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      subtest "Invalid password", sub {
 | 
			
		||||
        $machine->fail("pgrep -f 'agetty.*tty2'");
 | 
			
		||||
        $machine->sendKeys("alt-f2");
 | 
			
		||||
        $machine->waitUntilSucceeds("[ \$(fgconsole) = 2 ]");
 | 
			
		||||
        $machine->waitForUnit('getty@tty2.service');
 | 
			
		||||
        $machine->waitUntilSucceeds("pgrep -f 'agetty.*tty2'");
 | 
			
		||||
    def enter_user_alice(tty_number):
 | 
			
		||||
        machine.wait_until_tty_matches(tty_number, "login: ")
 | 
			
		||||
        machine.send_chars("alice\n")
 | 
			
		||||
        machine.wait_until_tty_matches(tty_number, "login: alice")
 | 
			
		||||
        machine.wait_until_succeeds("pgrep login")
 | 
			
		||||
        machine.wait_until_tty_matches(tty_number, "One-time password")
 | 
			
		||||
 | 
			
		||||
        $machine->waitUntilTTYMatches(2, "login: ");
 | 
			
		||||
        $machine->sendChars("alice\n");
 | 
			
		||||
        $machine->waitUntilTTYMatches(2, "login: alice");
 | 
			
		||||
        $machine->waitUntilSucceeds("pgrep login");
 | 
			
		||||
 | 
			
		||||
        $machine->waitUntilTTYMatches(2, "One-time password");
 | 
			
		||||
        $machine->sendChars("${oathSnakeOilPassword1}\n");
 | 
			
		||||
        $machine->waitUntilTTYMatches(2, "Password: ");
 | 
			
		||||
        $machine->sendChars("blorg\n");
 | 
			
		||||
        $machine->waitUntilTTYMatches(2, "Login incorrect");
 | 
			
		||||
      };
 | 
			
		||||
    machine.wait_for_unit("multi-user.target")
 | 
			
		||||
    machine.wait_until_succeeds("pgrep -f 'agetty.*tty1'")
 | 
			
		||||
    machine.screenshot("postboot")
 | 
			
		||||
 | 
			
		||||
      subtest "Invalid oath token", sub {
 | 
			
		||||
        $machine->fail("pgrep -f 'agetty.*tty3'");
 | 
			
		||||
        $machine->sendKeys("alt-f3");
 | 
			
		||||
        $machine->waitUntilSucceeds("[ \$(fgconsole) = 3 ]");
 | 
			
		||||
        $machine->waitForUnit('getty@tty3.service');
 | 
			
		||||
        $machine->waitUntilSucceeds("pgrep -f 'agetty.*tty3'");
 | 
			
		||||
    with subtest("Invalid password"):
 | 
			
		||||
        switch_to_tty(2)
 | 
			
		||||
        enter_user_alice(2)
 | 
			
		||||
 | 
			
		||||
        $machine->waitUntilTTYMatches(3, "login: ");
 | 
			
		||||
        $machine->sendChars("alice\n");
 | 
			
		||||
        $machine->waitUntilTTYMatches(3, "login: alice");
 | 
			
		||||
        $machine->waitUntilSucceeds("pgrep login");
 | 
			
		||||
        $machine->waitUntilTTYMatches(3, "One-time password");
 | 
			
		||||
        $machine->sendChars("000000\n");
 | 
			
		||||
        $machine->waitUntilTTYMatches(3, "Login incorrect");
 | 
			
		||||
        $machine->waitUntilTTYMatches(3, "login:");
 | 
			
		||||
      };
 | 
			
		||||
        machine.send_chars("${oathSnakeOilPassword1}\n")
 | 
			
		||||
        machine.wait_until_tty_matches(2, "Password: ")
 | 
			
		||||
        machine.send_chars("blorg\n")
 | 
			
		||||
        machine.wait_until_tty_matches(2, "Login incorrect")
 | 
			
		||||
 | 
			
		||||
      subtest "Happy path (both passwords are mandatory to get us in)", sub {
 | 
			
		||||
        $machine->fail("pgrep -f 'agetty.*tty4'");
 | 
			
		||||
        $machine->sendKeys("alt-f4");
 | 
			
		||||
        $machine->waitUntilSucceeds("[ \$(fgconsole) = 4 ]");
 | 
			
		||||
        $machine->waitForUnit('getty@tty4.service');
 | 
			
		||||
        $machine->waitUntilSucceeds("pgrep -f 'agetty.*tty4'");
 | 
			
		||||
    with subtest("Invalid oath token"):
 | 
			
		||||
        switch_to_tty(3)
 | 
			
		||||
        enter_user_alice(3)
 | 
			
		||||
 | 
			
		||||
        $machine->waitUntilTTYMatches(4, "login: ");
 | 
			
		||||
        $machine->sendChars("alice\n");
 | 
			
		||||
        $machine->waitUntilTTYMatches(4, "login: alice");
 | 
			
		||||
        $machine->waitUntilSucceeds("pgrep login");
 | 
			
		||||
        $machine->waitUntilTTYMatches(4, "One-time password");
 | 
			
		||||
        $machine->sendChars("${oathSnakeOilPassword2}\n");
 | 
			
		||||
        $machine->waitUntilTTYMatches(4, "Password: ");
 | 
			
		||||
        $machine->sendChars("${alicePassword}\n");
 | 
			
		||||
        machine.send_chars("000000\n")
 | 
			
		||||
        machine.wait_until_tty_matches(3, "Login incorrect")
 | 
			
		||||
        machine.wait_until_tty_matches(3, "login:")
 | 
			
		||||
 | 
			
		||||
        $machine->waitUntilSucceeds("pgrep -u alice bash");
 | 
			
		||||
        $machine->sendChars("touch  done4\n");
 | 
			
		||||
        $machine->waitForFile("/home/alice/done4");
 | 
			
		||||
      };
 | 
			
		||||
    with subtest("Happy path: Both passwords are mandatory to get us in"):
 | 
			
		||||
        switch_to_tty(4)
 | 
			
		||||
        enter_user_alice(4)
 | 
			
		||||
 | 
			
		||||
        machine.send_chars("${oathSnakeOilPassword2}\n")
 | 
			
		||||
        machine.wait_until_tty_matches(4, "Password: ")
 | 
			
		||||
        machine.send_chars("${alicePassword}\n")
 | 
			
		||||
 | 
			
		||||
        machine.wait_until_succeeds("pgrep -u alice bash")
 | 
			
		||||
        machine.send_chars("touch  done4\n")
 | 
			
		||||
        machine.wait_for_file("/home/alice/done4")
 | 
			
		||||
    '';
 | 
			
		||||
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
import ./make-test.nix ({ ... }: {
 | 
			
		||||
import ./make-test-python.nix ({ ... }: {
 | 
			
		||||
  name = "tiddlywiki";
 | 
			
		||||
  nodes = {
 | 
			
		||||
    default = {
 | 
			
		||||
@ -20,48 +20,50 @@ import ./make-test.nix ({ ... }: {
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  testScript = ''
 | 
			
		||||
    startAll;
 | 
			
		||||
  testScript =
 | 
			
		||||
    ''
 | 
			
		||||
      start_all()
 | 
			
		||||
 | 
			
		||||
    subtest "by default works without configuration", sub {
 | 
			
		||||
      $default->waitForUnit("tiddlywiki.service");
 | 
			
		||||
    };
 | 
			
		||||
      with subtest("by default works without configuration"):
 | 
			
		||||
          default.wait_for_unit("tiddlywiki.service")
 | 
			
		||||
 | 
			
		||||
    subtest "by default available on port 8080 without auth", sub {
 | 
			
		||||
      $default->waitForUnit("tiddlywiki.service");
 | 
			
		||||
      $default->waitForOpenPort(8080);
 | 
			
		||||
      $default->succeed("curl --fail 127.0.0.1:8080");
 | 
			
		||||
    };
 | 
			
		||||
      with subtest("by default available on port 8080 without auth"):
 | 
			
		||||
          default.wait_for_unit("tiddlywiki.service")
 | 
			
		||||
          default.wait_for_open_port(8080)
 | 
			
		||||
          # we output to /dev/null here to avoid a python UTF-8 decode error
 | 
			
		||||
          # but the check will still fail if the service doesn't respond
 | 
			
		||||
          default.succeed("curl --fail -o /dev/null 127.0.0.1:8080")
 | 
			
		||||
 | 
			
		||||
    subtest "by default creates empty wiki", sub {
 | 
			
		||||
      $default->succeed("test -f /var/lib/tiddlywiki/tiddlywiki.info");
 | 
			
		||||
    };
 | 
			
		||||
      with subtest("by default creates empty wiki"):
 | 
			
		||||
          default.succeed("test -f /var/lib/tiddlywiki/tiddlywiki.info")
 | 
			
		||||
 | 
			
		||||
    subtest "configured on port 3000 with basic auth", sub {
 | 
			
		||||
      $configured->waitForUnit("tiddlywiki.service");
 | 
			
		||||
      $configured->waitForOpenPort(3000);
 | 
			
		||||
      $configured->fail("curl --fail 127.0.0.1:3000");
 | 
			
		||||
      $configured->succeed("curl --fail 127.0.0.1:3000 --user somelogin:somesecret");
 | 
			
		||||
    };
 | 
			
		||||
      with subtest("configured on port 3000 with basic auth"):
 | 
			
		||||
          configured.wait_for_unit("tiddlywiki.service")
 | 
			
		||||
          configured.wait_for_open_port(3000)
 | 
			
		||||
          configured.fail("curl --fail -o /dev/null 127.0.0.1:3000")
 | 
			
		||||
          configured.succeed(
 | 
			
		||||
              "curl --fail -o /dev/null 127.0.0.1:3000 --user somelogin:somesecret"
 | 
			
		||||
          )
 | 
			
		||||
      
 | 
			
		||||
      with subtest("restart preserves changes"):
 | 
			
		||||
          # given running wiki
 | 
			
		||||
          default.wait_for_unit("tiddlywiki.service")
 | 
			
		||||
          # with some changes
 | 
			
		||||
          default.succeed(
 | 
			
		||||
              'curl --fail --request PUT --header \'X-Requested-With:TiddlyWiki\' \
 | 
			
		||||
              --data \'{ "title": "title", "text": "content" }\' \
 | 
			
		||||
              --url 127.0.0.1:8080/recipes/default/tiddlers/somepage '
 | 
			
		||||
          )
 | 
			
		||||
          default.succeed("sleep 2")
 | 
			
		||||
 | 
			
		||||
    subtest "configured with different wikifolder", sub {
 | 
			
		||||
      $configured->succeed("test -f /var/lib/tiddlywiki/tiddlywiki.info");
 | 
			
		||||
    };
 | 
			
		||||
          # when wiki is cycled
 | 
			
		||||
          default.systemctl("restart tiddlywiki.service")
 | 
			
		||||
          default.wait_for_unit("tiddlywiki.service")
 | 
			
		||||
          default.wait_for_open_port(8080)
 | 
			
		||||
 | 
			
		||||
    subtest "restart preserves changes", sub {
 | 
			
		||||
      # given running wiki
 | 
			
		||||
      $default->waitForUnit("tiddlywiki.service");
 | 
			
		||||
      # with some changes
 | 
			
		||||
      $default->succeed("curl --fail --request PUT --header 'X-Requested-With:TiddlyWiki' --data '{ \"title\": \"title\", \"text\": \"content\" }' --url 127.0.0.1:8080/recipes/default/tiddlers/somepage ");
 | 
			
		||||
      $default->succeed("sleep 2"); # server syncs to filesystem on timer
 | 
			
		||||
 | 
			
		||||
      # when wiki is cycled
 | 
			
		||||
      $default->systemctl("restart tiddlywiki.service");
 | 
			
		||||
      $default->waitForUnit("tiddlywiki.service");
 | 
			
		||||
      $default->waitForOpenPort(8080);
 | 
			
		||||
 | 
			
		||||
      # the change is preserved
 | 
			
		||||
      $default->succeed("curl --fail 127.0.0.1:8080/recipes/default/tiddlers/somepage");
 | 
			
		||||
    };
 | 
			
		||||
  '';
 | 
			
		||||
          # the change is preserved
 | 
			
		||||
          default.succeed(
 | 
			
		||||
              "curl --fail -o /dev/null 127.0.0.1:8080/recipes/default/tiddlers/somepage"
 | 
			
		||||
          )
 | 
			
		||||
    '';
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@ -80,7 +80,7 @@ in mkDerivation {
 | 
			
		||||
    homepage    = https://github.com/cdrummond/cantata;
 | 
			
		||||
    description = "A graphical client for MPD";
 | 
			
		||||
    license     = licenses.gpl3;
 | 
			
		||||
    maintainers = with maintainers; [ fuuzetsu peterhoeg ];
 | 
			
		||||
    maintainers = with maintainers; [ peterhoeg ];
 | 
			
		||||
    # Technically Cantata can run on Windows so if someone wants to
 | 
			
		||||
    # bother figuring that one out, be my guest.
 | 
			
		||||
    platforms   = platforms.linux;
 | 
			
		||||
 | 
			
		||||
@ -35,7 +35,7 @@ in stdenv.mkDerivation rec {
 | 
			
		||||
    description = "View and edit tags for various audio files";
 | 
			
		||||
    homepage = https://wiki.gnome.org/Apps/EasyTAG;
 | 
			
		||||
    license = licenses.gpl2Plus;
 | 
			
		||||
    maintainers = with maintainers; [ fuuzetsu ];
 | 
			
		||||
    maintainers = with maintainers; [ ];
 | 
			
		||||
    platforms = platforms.linux;
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    description = "Tools to work with opus encoded audio streams";
 | 
			
		||||
    homepage = http://www.opus-codec.org/;
 | 
			
		||||
    license = stdenv.lib.licenses.bsd2;
 | 
			
		||||
    maintainers = with stdenv.lib.maintainers; [ fuuzetsu ];
 | 
			
		||||
    maintainers = with stdenv.lib.maintainers; [ ];
 | 
			
		||||
    platforms = with stdenv.lib.platforms; unix;
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,6 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    homepage = http://www.opus-codec.org/;
 | 
			
		||||
    license = licenses.bsd3;
 | 
			
		||||
    platforms = platforms.linux ++ platforms.darwin;
 | 
			
		||||
    maintainers = with maintainers; [ fuuzetsu ];
 | 
			
		||||
    maintainers = with maintainers; [ ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    homepage = http://ccrma.stanford.edu/software/snd;
 | 
			
		||||
    platforms = stdenv.lib.platforms.linux;
 | 
			
		||||
    license = stdenv.lib.licenses.free;
 | 
			
		||||
    maintainers = with stdenv.lib.maintainers; [ fuuzetsu ];
 | 
			
		||||
    maintainers = with stdenv.lib.maintainers; [ ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,19 +1,19 @@
 | 
			
		||||
{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook, openssl, db53, boost
 | 
			
		||||
{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, autoreconfHook, openssl, db53, boost
 | 
			
		||||
, zlib, miniupnpc, qtbase ? null , qttools ? null, utillinux, protobuf, qrencode, libevent
 | 
			
		||||
, withGui }:
 | 
			
		||||
 | 
			
		||||
with stdenv.lib;
 | 
			
		||||
 | 
			
		||||
stdenv.mkDerivation rec {
 | 
			
		||||
mkDerivation rec {
 | 
			
		||||
 | 
			
		||||
  name = "bitcoin" + (toString (optional (!withGui) "d")) + "-abc-" + version;
 | 
			
		||||
  version = "0.20.6";
 | 
			
		||||
  version = "0.20.7";
 | 
			
		||||
 | 
			
		||||
  src = fetchFromGitHub {
 | 
			
		||||
    owner = "bitcoin-ABC";
 | 
			
		||||
    repo = "bitcoin-abc";
 | 
			
		||||
    rev = "v${version}";
 | 
			
		||||
    sha256 = "1a65pykdjkiic67fcs8cg2qrvzzrqifa93r1bzza3gdyfdvgv3ww";
 | 
			
		||||
    sha256 = "1d17ry9906zmwj2n3mh77b6rqmdg0dgm7b7ybh8d7q2ml0196ilj";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  patches = [ ./fix-bitcoin-qt-build.patch ];
 | 
			
		||||
 | 
			
		||||
@ -1,24 +1,24 @@
 | 
			
		||||
{ stdenv, fetchurl, pkgconfig, autoreconfHook, openssl, db48, boost, zeromq, rapidcheck
 | 
			
		||||
, zlib, miniupnpc, qtbase ? null, qttools ? null, wrapQtAppsHook ? null, utillinux, protobuf, python3, qrencode, libevent
 | 
			
		||||
, zlib, miniupnpc, qtbase ? null, qttools ? null, wrapQtAppsHook ? null, utillinux, python3, qrencode, libevent
 | 
			
		||||
, withGui }:
 | 
			
		||||
 | 
			
		||||
with stdenv.lib;
 | 
			
		||||
stdenv.mkDerivation rec{
 | 
			
		||||
  name = "bitcoin" + (toString (optional (!withGui) "d")) + "-" + version;
 | 
			
		||||
  version = "0.18.1";
 | 
			
		||||
  pname = if withGui then "bitcoin" else "bitcoind";
 | 
			
		||||
  version = "0.19.0.1";
 | 
			
		||||
 | 
			
		||||
  src = fetchurl {
 | 
			
		||||
    urls = [ "https://bitcoincore.org/bin/bitcoin-core-${version}/bitcoin-${version}.tar.gz"
 | 
			
		||||
             "https://bitcoin.org/bin/bitcoin-core-${version}/bitcoin-${version}.tar.gz"
 | 
			
		||||
           ];
 | 
			
		||||
    sha256 = "5c7d93f15579e37aa2d1dc79e8f5ac675f59045fceddf604ae0f1550eb03bf96";
 | 
			
		||||
    sha256 = "7ac9f972249a0a16ed01352ca2a199a5448fe87a4ea74923404a40b4086de284";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  nativeBuildInputs =
 | 
			
		||||
    [ pkgconfig autoreconfHook ]
 | 
			
		||||
    ++ optional withGui wrapQtAppsHook;
 | 
			
		||||
  buildInputs = [ openssl db48 boost zlib zeromq
 | 
			
		||||
                  miniupnpc protobuf libevent]
 | 
			
		||||
                  miniupnpc libevent]
 | 
			
		||||
                  ++ optionals stdenv.isLinux [ utillinux ]
 | 
			
		||||
                  ++ optionals withGui [ qtbase qttools qrencode ];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -40,6 +40,9 @@ self: let
 | 
			
		||||
      cl-lib = null; # builtin
 | 
			
		||||
      tle = null; # builtin
 | 
			
		||||
      advice = null; # builtin
 | 
			
		||||
      seq = if lib.versionAtLeast self.emacs.version "27"
 | 
			
		||||
            then null
 | 
			
		||||
            else super.seq;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    elpaPackages = super // overrides;
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,6 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    homepage = http://flpsed.org/flpsed.html;
 | 
			
		||||
    license = licenses.gpl3;
 | 
			
		||||
    platforms = platforms.linux;
 | 
			
		||||
    maintainers = with maintainers; [ fuuzetsu ];
 | 
			
		||||
    maintainers = with maintainers; [ ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -2,11 +2,11 @@
 | 
			
		||||
 | 
			
		||||
stdenv.mkDerivation rec {
 | 
			
		||||
  pname = "kdev-php";
 | 
			
		||||
  version = "5.4.4";
 | 
			
		||||
  version = "5.4.5";
 | 
			
		||||
 | 
			
		||||
  src = fetchurl {
 | 
			
		||||
    url = "https://github.com/KDE/${pname}/archive/v${version}.tar.gz";
 | 
			
		||||
    sha256 = "1q80vh2b4bmpa3sh94b6jsa5ymqr6hcn76mr2lyw30h2ppy5hm5l";
 | 
			
		||||
    sha256 = "12j0l2k6ii9ajp90lil3apk0xsz56cb549ighabik73a1w3c6ib6";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  nativeBuildInputs = [ cmake extra-cmake-modules ];
 | 
			
		||||
 | 
			
		||||
@ -2,11 +2,11 @@
 | 
			
		||||
 | 
			
		||||
stdenv.mkDerivation rec {
 | 
			
		||||
  pname = "kdev-python";
 | 
			
		||||
  version = "5.4.4";
 | 
			
		||||
  version = "5.4.5";
 | 
			
		||||
 | 
			
		||||
  src = fetchurl {
 | 
			
		||||
    url = "https://github.com/KDE/${pname}/archive/v${version}.tar.gz";
 | 
			
		||||
    sha256 = "04ig8vmn85z15mlngha4ybynjlmv9g9dn48y58wqrkif2ssliq7m";
 | 
			
		||||
    sha256 = "1iq4lxbl8gq4qvydyz34ild4izw21cp22adlz9dc054v0wis331j";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  cmakeFlags = [
 | 
			
		||||
 | 
			
		||||
@ -10,11 +10,11 @@
 | 
			
		||||
 | 
			
		||||
mkDerivation rec {
 | 
			
		||||
  pname = "kdevelop";
 | 
			
		||||
  version = "5.4.4";
 | 
			
		||||
  version = "5.4.5";
 | 
			
		||||
 | 
			
		||||
  src = fetchurl {
 | 
			
		||||
    url = "mirror://kde/stable/${pname}/${version}/src/${pname}-${version}.tar.xz";
 | 
			
		||||
    sha256 = "1cangz3ghz39sxxggp2p7kqy2ncgs0r3i19c341b5xbkcxw2y20h";
 | 
			
		||||
    sha256 = "08vhbg9ql0402bw3y3xw1kdxhig9sv3ss8g0h4477vy3z17m1h4j";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  nativeBuildInputs = [
 | 
			
		||||
 | 
			
		||||
@ -27,7 +27,7 @@ stdenv.mkDerivation {
 | 
			
		||||
    description = "Allows Yi to find libraries and the compiler easily";
 | 
			
		||||
    # This wrapper and wrapper only is under PD
 | 
			
		||||
    license = licenses.publicDomain;
 | 
			
		||||
    maintainers = with maintainers; [ fuuzetsu ];
 | 
			
		||||
    maintainers = with maintainers; [ ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										76
									
								
								pkgs/applications/graphics/akira/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								pkgs/applications/graphics/akira/default.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,76 @@
 | 
			
		||||
{ stdenv
 | 
			
		||||
, lib
 | 
			
		||||
, fetchFromGitHub
 | 
			
		||||
, appstream-glib
 | 
			
		||||
, desktop-file-utils
 | 
			
		||||
, meson
 | 
			
		||||
, ninja
 | 
			
		||||
, pantheon
 | 
			
		||||
, pkgconfig
 | 
			
		||||
, python3
 | 
			
		||||
, vala
 | 
			
		||||
, vala-lint
 | 
			
		||||
, wrapGAppsHook
 | 
			
		||||
, cairo
 | 
			
		||||
, glib
 | 
			
		||||
, goocanvas2
 | 
			
		||||
, gtk3
 | 
			
		||||
, gtksourceview3
 | 
			
		||||
, json-glib
 | 
			
		||||
, libarchive
 | 
			
		||||
, libgee
 | 
			
		||||
, libxml2 }:
 | 
			
		||||
 | 
			
		||||
stdenv.mkDerivation rec {
 | 
			
		||||
  pname = "akira";
 | 
			
		||||
  version = "2019-10-12";
 | 
			
		||||
 | 
			
		||||
  src = fetchFromGitHub {
 | 
			
		||||
    owner = "akiraux";
 | 
			
		||||
    repo = "Akira";
 | 
			
		||||
    rev = "cab952dee4591b6bde34d670c1f853f5a3ff6b19";
 | 
			
		||||
    sha256 = "1fp3a79hkh6xwwqqdrx4zqq2zhsm236c6fhhl5f2nmi108yxz04q";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  nativeBuildInputs = [
 | 
			
		||||
    appstream-glib
 | 
			
		||||
    desktop-file-utils
 | 
			
		||||
    meson
 | 
			
		||||
    ninja
 | 
			
		||||
    pkgconfig
 | 
			
		||||
    python3
 | 
			
		||||
    vala
 | 
			
		||||
    vala-lint
 | 
			
		||||
    wrapGAppsHook
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  buildInputs = [
 | 
			
		||||
    cairo
 | 
			
		||||
    glib
 | 
			
		||||
    goocanvas2
 | 
			
		||||
    pantheon.granite
 | 
			
		||||
    gtk3
 | 
			
		||||
    gtksourceview3
 | 
			
		||||
    json-glib
 | 
			
		||||
    libarchive
 | 
			
		||||
    libgee
 | 
			
		||||
    libxml2
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  mesonFlags = [ "-Dprofile=default" ];
 | 
			
		||||
 | 
			
		||||
  patches = [ ./fix-build-with-vala-0-44-or-later.patch ];
 | 
			
		||||
 | 
			
		||||
  postPatch = ''
 | 
			
		||||
    chmod +x build-aux/meson/post_install.py
 | 
			
		||||
    patchShebangs build-aux/meson/post_install.py
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  meta = with lib; {
 | 
			
		||||
    description = "Native Linux Design application built in Vala and GTK";
 | 
			
		||||
    homepage = "https://github.com/akiraux/Akira";
 | 
			
		||||
    license = licenses.gpl3;
 | 
			
		||||
    maintainers = with maintainers; [ filalex77 ] ++ pantheon.maintainers;
 | 
			
		||||
    platforms = platforms.linux;
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,88 @@
 | 
			
		||||
From bcda8fd53f6f232db0b6411269ba108af551629f Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Alberto Fanjul <albertofanjul@gmail.com>
 | 
			
		||||
Date: Tue, 9 Apr 2019 09:45:36 +0200
 | 
			
		||||
Subject: [PATCH] Build on vala >= 0.44.2
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 src/FileFormat/JsonObject.vala        |  2 +-
 | 
			
		||||
 src/FileFormat/JsonObjectArray.vala   |  2 +-
 | 
			
		||||
 src/FileFormat/ZipArchiveHandler.vala | 18 +++++++++++++++++-
 | 
			
		||||
 3 files changed, 19 insertions(+), 3 deletions(-)
 | 
			
		||||
 | 
			
		||||
diff --git a/src/FileFormat/JsonObject.vala b/src/FileFormat/JsonObject.vala
 | 
			
		||||
index 7bfe46f..805fbad 100644
 | 
			
		||||
--- a/src/FileFormat/JsonObject.vala
 | 
			
		||||
+++ b/src/FileFormat/JsonObject.vala
 | 
			
		||||
@@ -31,7 +31,7 @@ public abstract class Akira.FileFormat.JsonObject : GLib.Object {
 | 
			
		||||
 
 | 
			
		||||
     private ObjectClass obj_class;
 | 
			
		||||
 
 | 
			
		||||
-    public JsonObject.from_object (Json.Object object) {
 | 
			
		||||
+    protected JsonObject.from_object (Json.Object object) {
 | 
			
		||||
         Object (object: object);
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
diff --git a/src/FileFormat/JsonObjectArray.vala b/src/FileFormat/JsonObjectArray.vala
 | 
			
		||||
index 4f6e573..d0a7dad 100644
 | 
			
		||||
--- a/src/FileFormat/JsonObjectArray.vala
 | 
			
		||||
+++ b/src/FileFormat/JsonObjectArray.vala
 | 
			
		||||
@@ -31,7 +31,7 @@ public abstract class Akira.FileFormat.JsonObjectArray : Object {
 | 
			
		||||
      *
 | 
			
		||||
      * Your JsonObject implementation should have it's own list of items
 | 
			
		||||
      */
 | 
			
		||||
-    public JsonObjectArray (Json.Object object, string property_name) {
 | 
			
		||||
+    protected JsonObjectArray (Json.Object object, string property_name) {
 | 
			
		||||
         Object (object: object, property_name: property_name);
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
diff --git a/src/FileFormat/ZipArchiveHandler.vala b/src/FileFormat/ZipArchiveHandler.vala
 | 
			
		||||
index ca60dd0..5d65aa2 100644
 | 
			
		||||
--- a/src/FileFormat/ZipArchiveHandler.vala
 | 
			
		||||
+++ b/src/FileFormat/ZipArchiveHandler.vala
 | 
			
		||||
@@ -262,11 +262,17 @@ public class Akira.FileFormat.ZipArchiveHandler : GLib.Object {
 | 
			
		||||
                 continue;
 | 
			
		||||
             }
 | 
			
		||||
 
 | 
			
		||||
+            Posix.off_t offset;
 | 
			
		||||
+#if VALA_0_42
 | 
			
		||||
+            uint8[] buffer;
 | 
			
		||||
+            while (archive.read_data_block (out buffer, out offset) == Archive.Result.OK) {
 | 
			
		||||
+                if (extractor.write_data_block (buffer, offset) != Archive.Result.OK) {
 | 
			
		||||
+#else
 | 
			
		||||
             void* buffer = null;
 | 
			
		||||
             size_t buffer_length;
 | 
			
		||||
-            Posix.off_t offset;
 | 
			
		||||
             while (archive.read_data_block (out buffer, out buffer_length, out offset) == Archive.Result.OK) {
 | 
			
		||||
                 if (extractor.write_data_block (buffer, buffer_length, offset) != Archive.Result.OK) {
 | 
			
		||||
+#endif
 | 
			
		||||
                     break;
 | 
			
		||||
                 }
 | 
			
		||||
             }
 | 
			
		||||
@@ -316,9 +322,15 @@ public class Akira.FileFormat.ZipArchiveHandler : GLib.Object {
 | 
			
		||||
                     // Add an entry to the archive
 | 
			
		||||
                     Archive.Entry entry = new Archive.Entry ();
 | 
			
		||||
                     entry.set_pathname (initial_folder.get_relative_path (current_file));
 | 
			
		||||
+#if VALA_0_42
 | 
			
		||||
+                    entry.set_size ((Archive.int64_t) file_info.get_size ());
 | 
			
		||||
+                    entry.set_filetype (Archive.FileType.IFREG);
 | 
			
		||||
+                    entry.set_perm (Archive.FileType.IFREG);
 | 
			
		||||
+#else
 | 
			
		||||
                     entry.set_size (file_info.get_size ());
 | 
			
		||||
                     entry.set_filetype ((uint) Posix.S_IFREG);
 | 
			
		||||
                     entry.set_perm (0644);
 | 
			
		||||
+#endif
 | 
			
		||||
 
 | 
			
		||||
                     if (archive.write_header (entry) != Archive.Result.OK) {
 | 
			
		||||
                         critical ("Error writing '%s': %s (%d)", current_file.get_path (), archive.error_string (), archive.errno ());
 | 
			
		||||
@@ -333,7 +345,11 @@ public class Akira.FileFormat.ZipArchiveHandler : GLib.Object {
 | 
			
		||||
                             break;
 | 
			
		||||
                         }
 | 
			
		||||
 
 | 
			
		||||
+#if VALA_0_42
 | 
			
		||||
+                        archive.write_data (buffer[0:bytes_read]);
 | 
			
		||||
+#else
 | 
			
		||||
                         archive.write_data (buffer, bytes_read);
 | 
			
		||||
+#endif
 | 
			
		||||
                     }
 | 
			
		||||
                 }
 | 
			
		||||
             }
 | 
			
		||||
@ -11,11 +11,11 @@
 | 
			
		||||
 | 
			
		||||
stdenv.mkDerivation rec {
 | 
			
		||||
  pname = "drawio";
 | 
			
		||||
  version = "12.2.2";
 | 
			
		||||
  version = "12.3.2";
 | 
			
		||||
 | 
			
		||||
  src = fetchurl {
 | 
			
		||||
    url = "https://github.com/jgraph/drawio-desktop/releases/download/v${version}/draw.io-x86_64-${version}.rpm";
 | 
			
		||||
    sha256 = "04h11gdy78py9zrs3v6y0hhhc2n1h4s0ymbvf6qn4vv4r3r9vbaw";
 | 
			
		||||
    sha256 = "1hh4616dbq0fqldlph7vyl8vkibwc3xpcv9r1m2v949kn84yi2j3";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  nativeBuildInputs = [
 | 
			
		||||
 | 
			
		||||
@ -157,6 +157,8 @@ in stdenv.mkDerivation rec {
 | 
			
		||||
    "--without-webkit" # old version is required
 | 
			
		||||
    "--with-bug-report-url=https://github.com/NixOS/nixpkgs/issues/new"
 | 
			
		||||
    "--with-icc-directory=/run/current-system/sw/share/color/icc"
 | 
			
		||||
    # fix libdir in pc files (${exec_prefix} needs to be passed verbatim)
 | 
			
		||||
    "--libdir=\${exec_prefix}/lib"
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  # on Darwin,
 | 
			
		||||
 | 
			
		||||
@ -27,7 +27,7 @@ python27Packages.buildPythonApplication rec {
 | 
			
		||||
      '';
 | 
			
		||||
      homepage = http://mcomix.sourceforge.net/;
 | 
			
		||||
      license = stdenv.lib.licenses.gpl2;
 | 
			
		||||
      maintainers = with stdenv.lib.maintainers; [ fuuzetsu AndersonTorres ];
 | 
			
		||||
      maintainers = with stdenv.lib.maintainers; [ AndersonTorres ];
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
# TODO:
 | 
			
		||||
 | 
			
		||||
@ -33,6 +33,6 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    homepage = https://github.com/muennich/sxiv;
 | 
			
		||||
    license = stdenv.lib.licenses.gpl2Plus;
 | 
			
		||||
    platforms = stdenv.lib.platforms.linux;
 | 
			
		||||
    maintainers = with maintainers; [ jfrankenau fuuzetsu ];
 | 
			
		||||
    maintainers = with maintainers; [ jfrankenau ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,14 +1,14 @@
 | 
			
		||||
{ lib, fetchurl, python3Packages, qtbase, wrapQtAppsHook }:
 | 
			
		||||
{ lib, fetchFromGitHub, python3Packages, qtbase, wrapQtAppsHook }:
 | 
			
		||||
 | 
			
		||||
python3Packages.buildPythonApplication rec {
 | 
			
		||||
  pname = "electron-cash";
 | 
			
		||||
  version = "4.0.10";
 | 
			
		||||
  version = "4.0.11";
 | 
			
		||||
 | 
			
		||||
  src = fetchurl {
 | 
			
		||||
    url = "https://electroncash.org/downloads/${version}/win-linux/Electron-Cash-${version}.tar.gz";
 | 
			
		||||
    # Verified using official SHA-1 and signature from
 | 
			
		||||
    # https://github.com/fyookball/keys-n-hashes
 | 
			
		||||
    sha256 = "48270e12956a2f4ef4d2b0cb60611e47f136b734a3741dab176542a32ae59ee5";
 | 
			
		||||
  src = fetchFromGitHub {
 | 
			
		||||
    owner = "Electron-Cash";
 | 
			
		||||
    repo = "Electron-Cash";
 | 
			
		||||
    rev = version;
 | 
			
		||||
    sha256 = "1k4zbaj0g8bgk1l5vrb835a8bqfay2707bcb4ql2vx4igcwpb680";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  propagatedBuildInputs = with python3Packages; [
 | 
			
		||||
 | 
			
		||||
@ -2,18 +2,18 @@
 | 
			
		||||
 | 
			
		||||
buildGoModule rec {
 | 
			
		||||
  pname = "hugo";
 | 
			
		||||
  version = "0.60.0";
 | 
			
		||||
  version = "0.60.1";
 | 
			
		||||
 | 
			
		||||
  goPackagePath = "github.com/gohugoio/hugo";
 | 
			
		||||
 | 
			
		||||
  src = fetchFromGitHub {
 | 
			
		||||
    owner  = "gohugoio";
 | 
			
		||||
    repo   = pname;
 | 
			
		||||
    rev    = "v${version}";
 | 
			
		||||
    sha256 = "0g8rq79xp7c9p31xc0anfjyz7xp8n7qzv3vmvg2nmzl7nayg88aa";
 | 
			
		||||
    owner = "gohugoio";
 | 
			
		||||
    repo = pname;
 | 
			
		||||
    rev = "v${version}";
 | 
			
		||||
    sha256 = "0l8n87y5zrs09s693rqvqwz0233wlr4jwib7r36ilss1qgm7x6n5";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  modSha256 = "12h1ik1hgs4lkmk699wpa34rnycnm03qyr2vp1y5lywz1h93by20";
 | 
			
		||||
  modSha256 = "1an4plbx06fzz2iqzgs08r6vsjpkl5lbqck5jqmv6fv7b7psf7iw";
 | 
			
		||||
 | 
			
		||||
  buildFlags = "-tags extended";
 | 
			
		||||
 | 
			
		||||
@ -21,8 +21,8 @@ buildGoModule rec {
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "A fast and modern static website engine.";
 | 
			
		||||
    homepage = https://gohugo.io;
 | 
			
		||||
    homepage = "https://gohugo.io";
 | 
			
		||||
    license = licenses.asl20;
 | 
			
		||||
    maintainers = with maintainers; [ schneefux ];
 | 
			
		||||
    maintainers = with maintainers; [ schneefux filalex77 ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -4,13 +4,13 @@ with stdenv.lib;
 | 
			
		||||
 | 
			
		||||
stdenv.mkDerivation rec {
 | 
			
		||||
  pname = "nnn";
 | 
			
		||||
  version = "2.7";
 | 
			
		||||
  version = "2.8.1";
 | 
			
		||||
 | 
			
		||||
  src = fetchFromGitHub {
 | 
			
		||||
    owner = "jarun";
 | 
			
		||||
    repo = pname;
 | 
			
		||||
    rev = "v${version}";
 | 
			
		||||
    sha256 = "19kiikjblkq3bx2j6h3f2d467p2v582albqr7nbrm9c1yg4qx38z";
 | 
			
		||||
    sha256 = "0h7j0wcpwwd2fibggr1nwkqpvhv2i1qnk54c4x6hixx31yidy2l0";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  configFile = optionalString (conf!=null) (builtins.toFile "nnn.h" conf);
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,15 @@
 | 
			
		||||
{ stdenv, fetchurl
 | 
			
		||||
{ stdenv, fetchurl, makeWrapper
 | 
			
		||||
, pkgconfig
 | 
			
		||||
, ncurses, libX11
 | 
			
		||||
, utillinux, file, which, groff
 | 
			
		||||
 | 
			
		||||
  # adds support for handling removable media (vifm-media). Linux only!
 | 
			
		||||
, mediaSupport ? false, python3 ? null, udisks2 ? null, lib ? null 
 | 
			
		||||
}:
 | 
			
		||||
 | 
			
		||||
stdenv.mkDerivation rec {
 | 
			
		||||
  pname = "vifm";
 | 
			
		||||
let isFullPackage = mediaSupport;
 | 
			
		||||
in stdenv.mkDerivation rec {
 | 
			
		||||
  pname = if isFullPackage then "vifm-full" else "vifm";
 | 
			
		||||
  version = "0.10.1";
 | 
			
		||||
 | 
			
		||||
  src = fetchurl {
 | 
			
		||||
@ -13,13 +17,24 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    sha256 = "0fyhxh7ndjn8fyjhj14ymkr3pjcs3k1xbs43g7xvvq85vdb6y04r";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  nativeBuildInputs = [ pkgconfig ];
 | 
			
		||||
  nativeBuildInputs = [ pkgconfig makeWrapper ];
 | 
			
		||||
  buildInputs = [ ncurses libX11 utillinux file which groff ];
 | 
			
		||||
 | 
			
		||||
  postFixup = let
 | 
			
		||||
    path = lib.makeBinPath 
 | 
			
		||||
      [ udisks2 
 | 
			
		||||
        (python3.withPackages (p: [p.dbus-python]))
 | 
			
		||||
      ];
 | 
			
		||||
 | 
			
		||||
    wrapVifmMedia = "wrapProgram $out/share/vifm/vifm-media --prefix PATH : ${path}";
 | 
			
		||||
  in ''
 | 
			
		||||
    ${if mediaSupport then wrapVifmMedia else ""}
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "A vi-like file manager";
 | 
			
		||||
    description = ''A vi-like file manager${if isFullPackage then "; Includes support for optional features" else ""}'';
 | 
			
		||||
    maintainers = with maintainers; [ raskin ];
 | 
			
		||||
    platforms = platforms.unix;
 | 
			
		||||
    platforms = if mediaSupport then platforms.linux else platforms.unix;
 | 
			
		||||
    license = licenses.gpl2;
 | 
			
		||||
    downloadPage = "https://vifm.info/downloads.shtml";
 | 
			
		||||
    homepage = https://vifm.info/;
 | 
			
		||||
 | 
			
		||||
@ -9,8 +9,7 @@ stdenv.mkDerivation rec {
 | 
			
		||||
  pname = "workrave";
 | 
			
		||||
  version = "1.10.31";
 | 
			
		||||
 | 
			
		||||
  src = let
 | 
			
		||||
  in fetchFromGitHub {
 | 
			
		||||
  src = fetchFromGitHub {
 | 
			
		||||
    sha256 = "0v2mx2idaxlsyv5w66b7pknlill9j9i2gqcs3vq54gak7ix9fj1p";
 | 
			
		||||
    rev = with stdenv.lib;
 | 
			
		||||
      "v" + concatStringsSep "_" (splitVersion version);
 | 
			
		||||
 | 
			
		||||
@ -1,33 +1,43 @@
 | 
			
		||||
{ stdenv, fetchFromGitHub, txt2tags, python2Packages }:
 | 
			
		||||
{ stdenv, fetchFromGitHub, txt2tags, python3Packages, glib, gobject-introspection, wrapGAppsHook }:
 | 
			
		||||
 | 
			
		||||
stdenv.mkDerivation rec {
 | 
			
		||||
python3Packages.buildPythonApplication rec {
 | 
			
		||||
  pname = "xdgmenumaker";
 | 
			
		||||
  version = "1.5";
 | 
			
		||||
 | 
			
		||||
  src = fetchFromGitHub {
 | 
			
		||||
    owner = "gapan";
 | 
			
		||||
    repo = "xdgmenumaker";
 | 
			
		||||
    repo = pname;
 | 
			
		||||
    rev = version;
 | 
			
		||||
    sha256 = "1vrsp5c1ah7p4dpwd6aqvinpwzd8crdimvyyr3lbm3c6cwpyjmif";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  format = "other";
 | 
			
		||||
 | 
			
		||||
  strictDeps = false;
 | 
			
		||||
 | 
			
		||||
  nativeBuildInputs = [
 | 
			
		||||
    gobject-introspection
 | 
			
		||||
    txt2tags
 | 
			
		||||
    python2Packages.wrapPython
 | 
			
		||||
    wrapGAppsHook
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  pythonPath = [
 | 
			
		||||
    python2Packages.pyxdg
 | 
			
		||||
    python2Packages.pygtk
 | 
			
		||||
  buildInputs = [
 | 
			
		||||
    glib
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  pythonPath = with python3Packages; [
 | 
			
		||||
    pyxdg
 | 
			
		||||
    pygobject3
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  makeFlags = [
 | 
			
		||||
    "PREFIX=${placeholder "out"}"
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  installFlags = [
 | 
			
		||||
    "DESTDIR="
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  installPhase = ''
 | 
			
		||||
    make install PREFIX=$out DESTDIR=
 | 
			
		||||
    wrapProgram "$out/bin/xdgmenumaker" \
 | 
			
		||||
      --prefix XDG_DATA_DIRS : "$out/share"
 | 
			
		||||
    wrapPythonPrograms
 | 
			
		||||
  '';
 | 
			
		||||
  
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Command line tool that generates XDG menus for several window managers";
 | 
			
		||||
    homepage = https://github.com/gapan/xdgmenumaker;
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
{ stdenv, lib, fetchFromGitHub, buildGoPackage, makeWrapper }:
 | 
			
		||||
{ stdenv, lib, fetchFromGitHub, buildGoModule, makeWrapper }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
 | 
			
		||||
@ -7,10 +7,10 @@ let
 | 
			
		||||
  schema = stdenv.mkDerivation {
 | 
			
		||||
    name = "kubeval-schema";
 | 
			
		||||
    src = fetchFromGitHub {
 | 
			
		||||
      owner = "garethr";
 | 
			
		||||
      owner = "instrumenta";
 | 
			
		||||
      repo = "kubernetes-json-schema";
 | 
			
		||||
      rev = "c7672fd48e1421f0060dd54b6620baa2ab7224ba";
 | 
			
		||||
      sha256 = "0picr3wvjx4qv158jy4f60pl225rm4mh0l97pf8nqi9h9x4x888p";
 | 
			
		||||
      rev = "6a498a60dc68c5f6a1cc248f94b5cd1e7241d699";
 | 
			
		||||
      sha256 = "1y9m2ma3n4h7sf2lg788vjw6pkfyi0fa7gzc870faqv326n6x2jr";
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    installPhase = ''
 | 
			
		||||
@ -21,26 +21,26 @@ let
 | 
			
		||||
 | 
			
		||||
in
 | 
			
		||||
 | 
			
		||||
buildGoPackage rec {
 | 
			
		||||
buildGoModule rec {
 | 
			
		||||
  pname = "kubeval";
 | 
			
		||||
  version = "0.7.3";
 | 
			
		||||
  version = "0.14.0";
 | 
			
		||||
 | 
			
		||||
  goPackagePath = "github.com/garethr/kubeval";
 | 
			
		||||
  src = fetchFromGitHub {
 | 
			
		||||
    owner = "garethr";
 | 
			
		||||
    owner = "instrumenta";
 | 
			
		||||
    repo = "kubeval";
 | 
			
		||||
    rev = version;
 | 
			
		||||
    sha256 = "042v4mc5p80vmk56wp6aw89yiibjnfqn79c0zcd6y179br4gpfnb";
 | 
			
		||||
    rev = "${version}";
 | 
			
		||||
    sha256 = "0kpwk7bv36m3i8vavm1pqc8l611c6l9qbagcc64v6r85qig4w5xv";
 | 
			
		||||
  };
 | 
			
		||||
  goDeps = ./deps.nix;
 | 
			
		||||
 | 
			
		||||
  buildInputs = [ makeWrapper ];
 | 
			
		||||
 | 
			
		||||
  postFixup = "wrapProgram $bin/bin/kubeval --set KUBEVAL_SCHEMA_LOCATION file:///${schema}";
 | 
			
		||||
  modSha256 = "0y9x44y3bchi8xg0a6jmp2rmi8dybkl6qlywb6nj1viab1s8dd4y";
 | 
			
		||||
 | 
			
		||||
  postFixup = "wrapProgram $out/bin/kubeval --set KUBEVAL_SCHEMA_LOCATION file:///${schema}/kubernetes-json-schema/master";
 | 
			
		||||
 | 
			
		||||
  meta = with lib; {
 | 
			
		||||
    description = "Validate your Kubernetes configuration files";
 | 
			
		||||
    homepage = https://github.com/garethr/kubeval;
 | 
			
		||||
    homepage = https://github.com/instrumenta/kubeval;
 | 
			
		||||
    license = licenses.asl20;
 | 
			
		||||
    maintainers = with maintainers; [ nicknovitski ];
 | 
			
		||||
    platforms = platforms.all;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										174
									
								
								pkgs/applications/networking/cluster/kubeval/deps.nix
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										174
									
								
								pkgs/applications/networking/cluster/kubeval/deps.nix
									
									
									
										generated
									
									
									
								
							@ -1,174 +0,0 @@
 | 
			
		||||
# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/fatih/color";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/fatih/color";
 | 
			
		||||
      rev = "5b77d2a35fb0ede96d138fc9a99f5c9b6aef11b4";
 | 
			
		||||
      sha256 = "0v8msvg38r8d1iiq2i5r4xyfx0invhc941kjrsg5gzwvagv55inv";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/fsnotify/fsnotify";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/fsnotify/fsnotify";
 | 
			
		||||
      rev = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9";
 | 
			
		||||
      sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/hashicorp/go-multierror";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/hashicorp/go-multierror";
 | 
			
		||||
      rev = "b7773ae218740a7be65057fc60b366a49b538a44";
 | 
			
		||||
      sha256 = "09904bk7ac6qs9dgiv23rziq9h3makb9qg4jvxr71rlydsd7psfd";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/hashicorp/hcl";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/hashicorp/hcl";
 | 
			
		||||
      rev = "ef8a98b0bbce4a65b5aa4c368430a80ddc533168";
 | 
			
		||||
      sha256 = "1qalfsc31fra7hcw2lc3s20aj7al62fq3j5fn5kga3mg99b82nyr";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/magiconair/properties";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/magiconair/properties";
 | 
			
		||||
      rev = "c2353362d570a7bfa228149c62842019201cfb71";
 | 
			
		||||
      sha256 = "1a10362wv8a8qwb818wygn2z48lgzch940hvpv81hv8gc747ajxn";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/mitchellh/mapstructure";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/mitchellh/mapstructure";
 | 
			
		||||
      rev = "bb74f1db0675b241733089d5a1faa5dd8b0ef57b";
 | 
			
		||||
      sha256 = "1aqk9qr46bwgdc5j7n7als61xvssvyjf4qzfsvhacl4izpygqnw7";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/pelletier/go-toml";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/pelletier/go-toml";
 | 
			
		||||
      rev = "66540cf1fcd2c3aee6f6787dfa32a6ae9a870f12";
 | 
			
		||||
      sha256 = "1n8na0yg90gm0rpifmzrby5r385vvd62cdam3ls7ssy02bjvfw15";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/spf13/afero";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/spf13/afero";
 | 
			
		||||
      rev = "787d034dfe70e44075ccc060d346146ef53270ad";
 | 
			
		||||
      sha256 = "0138rjiacl71h7kvhzinviwvy6qa2m6rflpv9lgqv15hnjvhwvg1";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/spf13/cast";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/spf13/cast";
 | 
			
		||||
      rev = "8965335b8c7107321228e3e3702cab9832751bac";
 | 
			
		||||
      sha256 = "177bk7lq40jbgv9p9r80aydpaccfk8ja3a7jjhfwiwk9r1pa4rr2";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/spf13/cobra";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/spf13/cobra";
 | 
			
		||||
      rev = "1e58aa3361fd650121dceeedc399e7189c05674a";
 | 
			
		||||
      sha256 = "1d6dy60dw7i2mcab10yp99wi5w28jzhzzf16w4ys6bna7ymndiin";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/spf13/jwalterweatherman";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/spf13/jwalterweatherman";
 | 
			
		||||
      rev = "7c0cea34c8ece3fbeb2b27ab9b59511d360fb394";
 | 
			
		||||
      sha256 = "132p84i20b9s5r6fs597lsa6648vd415ch7c0d018vm8smzqpd0h";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/spf13/pflag";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/spf13/pflag";
 | 
			
		||||
      rev = "3ebe029320b2676d667ae88da602a5f854788a8a";
 | 
			
		||||
      sha256 = "11yxs0wqy70wj106fkz8r923yg4ncnc2mbw33v48zmlg4a1rasgp";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/spf13/viper";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/spf13/viper";
 | 
			
		||||
      rev = "b5e8006cbee93ec955a89ab31e0e3ce3204f3736";
 | 
			
		||||
      sha256 = "0y3r6ysi5vn0yq5c7pbl62yg2i64fkv54xgj2jf1hn3v6zzyimis";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/xeipuuv/gojsonpointer";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/xeipuuv/gojsonpointer";
 | 
			
		||||
      rev = "4e3ac2762d5f479393488629ee9370b50873b3a6";
 | 
			
		||||
      sha256 = "13y6iq2nzf9z4ls66bfgnnamj2m3438absmbpqry64bpwjfbsi9q";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/xeipuuv/gojsonreference";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/xeipuuv/gojsonreference";
 | 
			
		||||
      rev = "bd5ef7bd5415a7ac448318e64f11a24cd21e594b";
 | 
			
		||||
      sha256 = "1xby79padc7bmyb8rfbad8wfnfdzpnh51b1n8c0kibch0kwc1db5";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/xeipuuv/gojsonschema";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/xeipuuv/gojsonschema";
 | 
			
		||||
      rev = "9ff6d6c47f3f5de55acc6f464d6e3719b02818ae";
 | 
			
		||||
      sha256 = "0rpkya4lnpv9g33bs0z3vd5dlnadkyq1lg7114nbd73vm878s6sw";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "golang.org/x/sys";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://go.googlesource.com/sys";
 | 
			
		||||
      rev = "2d6f6f883a06fc0d5f4b14a81e4c28705ea64c15";
 | 
			
		||||
      sha256 = "1a6x6n1fk5k013w5r4b0bxws1d2fh0s69mbzpi1vkyfpcxabwjhj";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "golang.org/x/text";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://go.googlesource.com/text";
 | 
			
		||||
      rev = "5c1cf69b5978e5a34c5f9ba09a83e56acc4b7877";
 | 
			
		||||
      sha256 = "03br8p1sb1ffr02l8hyrgcyib7ms0z06wy3v4r1dj2l6q4ghwzfs";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "gopkg.in/yaml.v2";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://gopkg.in/yaml.v2";
 | 
			
		||||
      rev = "5420a8b6744d3b0345ab293f6fcba19c978f1183";
 | 
			
		||||
      sha256 = "0dwjrs2lp2gdlscs7bsrmyc5yf6mm4fvgw71bzr9mv2qrd2q73s1";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
@ -12,9 +12,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-alicloud";
 | 
			
		||||
      rev     = "v1.60.0";
 | 
			
		||||
      version = "1.60.0";
 | 
			
		||||
      sha256  = "14k96ccjrjiqfrdrj9kd090ms1p15z71qv60gm05bhffviyplmgw";
 | 
			
		||||
      rev     = "v1.63.0";
 | 
			
		||||
      version = "1.63.0";
 | 
			
		||||
      sha256  = "0353zsga4ic7rsgnk243v202l4hpy0xlzp95fnbmrz7p5wy2k8js";
 | 
			
		||||
    };
 | 
			
		||||
  archive =
 | 
			
		||||
    {
 | 
			
		||||
@ -44,25 +44,25 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-aws";
 | 
			
		||||
      rev     = "v2.34.0";
 | 
			
		||||
      version = "2.34.0";
 | 
			
		||||
      sha256  = "1kmy6hn1d3padfnix17ibmrm1339q4li0740dlfgjlxjv179bv34";
 | 
			
		||||
      rev     = "v2.41.0";
 | 
			
		||||
      version = "2.41.0";
 | 
			
		||||
      sha256  = "0i9bh78ihmxj7hjbqzkkj7k6lvr3xdakf8qv0bfckcinwpzwzbxa";
 | 
			
		||||
    };
 | 
			
		||||
  azuread =
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-azuread";
 | 
			
		||||
      rev     = "v0.6.0";
 | 
			
		||||
      version = "0.6.0";
 | 
			
		||||
      sha256  = "1s3k2plka1lzfij4vhr30vc549zysa6v8j5mphra7fjxy236v40j";
 | 
			
		||||
      rev     = "v0.7.0";
 | 
			
		||||
      version = "0.7.0";
 | 
			
		||||
      sha256  = "1a7w31dvjz5498445ia4m5gd1js3k7ghz6qqfq51f2n86iafs0xq";
 | 
			
		||||
    };
 | 
			
		||||
  azurerm =
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-azurerm";
 | 
			
		||||
      rev     = "v1.36.1";
 | 
			
		||||
      version = "1.36.1";
 | 
			
		||||
      sha256  = "1mnbmbfsnc859j6ahcph80z0v1jl82dnbjqmqg2q0kiappz2g2lm";
 | 
			
		||||
      rev     = "v1.37.0";
 | 
			
		||||
      version = "1.37.0";
 | 
			
		||||
      sha256  = "0n0582v8g3np8glyxnpnayps014jxclzrglcxf35wszfz9mspryg";
 | 
			
		||||
    };
 | 
			
		||||
  azurestack =
 | 
			
		||||
    {
 | 
			
		||||
@ -76,9 +76,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-bigip";
 | 
			
		||||
      rev     = "v1.0.0";
 | 
			
		||||
      version = "1.0.0";
 | 
			
		||||
      sha256  = "0dz5dfv3glx7898a9bi9vi3g0ghyi96pc45brrj41and5835jvdc";
 | 
			
		||||
      rev     = "v1.1.0";
 | 
			
		||||
      version = "1.1.0";
 | 
			
		||||
      sha256  = "15fmxr1c39xx6ix38nigf8izrqzlmjjr6hvlkf7yhb5z7485nvsg";
 | 
			
		||||
    };
 | 
			
		||||
  bitbucket =
 | 
			
		||||
    {
 | 
			
		||||
@ -108,9 +108,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-circonus";
 | 
			
		||||
      rev     = "v0.2.0";
 | 
			
		||||
      version = "0.2.0";
 | 
			
		||||
      sha256  = "1vcia3p31cgdwjs06k4244bk7ib2qp1f2lhc7hmyhdfi1c8jym45";
 | 
			
		||||
      rev     = "v0.4.0";
 | 
			
		||||
      version = "0.4.0";
 | 
			
		||||
      sha256  = "0iz7v7gfjgbca47vjnvcv9159kgladkad7cmjw2hpncrn2jjinwg";
 | 
			
		||||
    };
 | 
			
		||||
  clc =
 | 
			
		||||
    {
 | 
			
		||||
@ -124,17 +124,17 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-cloudflare";
 | 
			
		||||
      rev     = "v2.0.1";
 | 
			
		||||
      version = "2.0.1";
 | 
			
		||||
      sha256  = "18cxyxgv6x5s1xsd5l460hnl1xdvrvkwb36lhvk3dgziaw2xxr81";
 | 
			
		||||
      rev     = "v2.1.0";
 | 
			
		||||
      version = "2.1.0";
 | 
			
		||||
      sha256  = "1ll06p4fz88mr4a51rqgvxykivx9xina6507mflyxaic59xlkdz4";
 | 
			
		||||
    };
 | 
			
		||||
  cloudscale =
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-cloudscale";
 | 
			
		||||
      rev     = "v2.0.0";
 | 
			
		||||
      version = "2.0.0";
 | 
			
		||||
      sha256  = "145hj4pbi5zrkgamicy3m1n3380fpd2ndd6ym7mwd65d95g39vwb";
 | 
			
		||||
      rev     = "v2.1.0";
 | 
			
		||||
      version = "2.1.0";
 | 
			
		||||
      sha256  = "12vxzhpsivvq343mqkmnwklvnv6dc9h2ah0ixla9svdwjp91xfcd";
 | 
			
		||||
    };
 | 
			
		||||
  cloudstack =
 | 
			
		||||
    {
 | 
			
		||||
@ -172,9 +172,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-digitalocean";
 | 
			
		||||
      rev     = "v1.10.0";
 | 
			
		||||
      version = "1.10.0";
 | 
			
		||||
      sha256  = "1c53g32mk41lvq4ikfj04m89nhzrdk8d6h35aq3z07yyqp6ap2a0";
 | 
			
		||||
      rev     = "v1.11.0";
 | 
			
		||||
      version = "1.11.0";
 | 
			
		||||
      sha256  = "0s8z0zsfibclx0431fcqbi9yqkhwj4w0rz780z1dwv50xpgnmzql";
 | 
			
		||||
    };
 | 
			
		||||
  dme =
 | 
			
		||||
    {
 | 
			
		||||
@ -204,9 +204,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-docker";
 | 
			
		||||
      rev     = "v2.5.0";
 | 
			
		||||
      version = "2.5.0";
 | 
			
		||||
      sha256  = "1nril7qy1nm1dq19vg6mm0zc0sgkjrm1s39n7p9gxf4s4j78ig1n";
 | 
			
		||||
      rev     = "v2.6.0";
 | 
			
		||||
      version = "2.6.0";
 | 
			
		||||
      sha256  = "12qq7m75yxfczik78klqaimrzhp70m2vk5q0h3v8b2dwvvynj0dg";
 | 
			
		||||
    };
 | 
			
		||||
  dyn =
 | 
			
		||||
    {
 | 
			
		||||
@ -252,25 +252,25 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-gitlab";
 | 
			
		||||
      rev     = "v2.3.0";
 | 
			
		||||
      version = "2.3.0";
 | 
			
		||||
      sha256  = "012pbgfdmwyq8y8ddrhyf14jc6s7v24f1w3mrpi6mp4glqc5yfqx";
 | 
			
		||||
      rev     = "v2.4.0";
 | 
			
		||||
      version = "2.4.0";
 | 
			
		||||
      sha256  = "0409n8miva205wkx968ggzmz0y121s99iybsjlkx0gja20x68yxx";
 | 
			
		||||
    };
 | 
			
		||||
  google =
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-google";
 | 
			
		||||
      rev     = "v2.19.0";
 | 
			
		||||
      version = "2.19.0";
 | 
			
		||||
      sha256  = "00pqkysic3x8iygcxb232dwbpmy5ldf7fdfi6ldiv3g6gbvlcaf7";
 | 
			
		||||
      rev     = "v2.20.0";
 | 
			
		||||
      version = "2.20.0";
 | 
			
		||||
      sha256  = "1b19hql244lv74gxdwgqh9955d3zkwj7riaq6kj5ylbj44spcpjy";
 | 
			
		||||
    };
 | 
			
		||||
  google-beta =
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-google-beta";
 | 
			
		||||
      rev     = "v2.19.0";
 | 
			
		||||
      version = "2.19.0";
 | 
			
		||||
      sha256  = "03im9h7r2vyx4y9qnc3l0hsvcqy7rai5dlkmj1za3npm98vpx2d7";
 | 
			
		||||
      rev     = "v2.20.0";
 | 
			
		||||
      version = "2.20.0";
 | 
			
		||||
      sha256  = "0zkhyn17kji6yyl5582g5vhqj3rcbin73ym6vn6f0m7sf5yaplky";
 | 
			
		||||
    };
 | 
			
		||||
  grafana =
 | 
			
		||||
    {
 | 
			
		||||
@ -284,17 +284,17 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-hcloud";
 | 
			
		||||
      rev     = "v1.14.0";
 | 
			
		||||
      version = "1.14.0";
 | 
			
		||||
      sha256  = "13zxrjx4im25g7m45z95d3py85nzs2k8r9grilxshr6x95bxk2f0";
 | 
			
		||||
      rev     = "v1.15.0";
 | 
			
		||||
      version = "1.15.0";
 | 
			
		||||
      sha256  = "0l554mf6s248j0453b4r5pafshcvhn2smk4pp23y9kq5g1xd0xmd";
 | 
			
		||||
    };
 | 
			
		||||
  hedvig =
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-hedvig";
 | 
			
		||||
      rev     = "v1.0.4";
 | 
			
		||||
      version = "1.0.4";
 | 
			
		||||
      sha256  = "0y6brzznxp8khdfbnpmnbjqf140411z0pvnp88p8mj2kmbk7kkjd";
 | 
			
		||||
      rev     = "v1.0.5";
 | 
			
		||||
      version = "1.0.5";
 | 
			
		||||
      sha256  = "0dic4kqjwi3s8pss1pmgixnr7xi503gl5i7pcx66fam5y5ar92v5";
 | 
			
		||||
    };
 | 
			
		||||
  helm =
 | 
			
		||||
    {
 | 
			
		||||
@ -324,9 +324,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-huaweicloud";
 | 
			
		||||
      rev     = "v1.9.0";
 | 
			
		||||
      version = "1.9.0";
 | 
			
		||||
      sha256  = "06blhsbv5pxlb1m07qanrq5qmbai33dlk89ghzscrqwnvv1nnszr";
 | 
			
		||||
      rev     = "v1.10.0";
 | 
			
		||||
      version = "1.10.0";
 | 
			
		||||
      sha256  = "0aa83y0bzfldijd4jbmhqppc13jdqaax83p75kffwaxw1rmxrana";
 | 
			
		||||
    };
 | 
			
		||||
  icinga2 =
 | 
			
		||||
    {
 | 
			
		||||
@ -340,9 +340,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-ignition";
 | 
			
		||||
      rev     = "v1.1.0";
 | 
			
		||||
      version = "1.1.0";
 | 
			
		||||
      sha256  = "0vpjbb70wnlrvw7z2zc92fbisgjk49ivdmv10ahyqlgvc23js5va";
 | 
			
		||||
      rev     = "v1.2.0";
 | 
			
		||||
      version = "1.2.0";
 | 
			
		||||
      sha256  = "0dg5xak02rv7h9z07kjqxf55al188ligzq3m6711rlh62zam2cjc";
 | 
			
		||||
    };
 | 
			
		||||
  influxdb =
 | 
			
		||||
    {
 | 
			
		||||
@ -356,9 +356,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-kubernetes";
 | 
			
		||||
      rev     = "v1.9.0";
 | 
			
		||||
      version = "1.9.0";
 | 
			
		||||
      sha256  = "1ai8w853k4pgr43g9dwdsimw0g0c6vg6vg2f20d9ch7bx8ii4nhf";
 | 
			
		||||
      rev     = "v1.10.0";
 | 
			
		||||
      version = "1.10.0";
 | 
			
		||||
      sha256  = "04hd9n9jm72fi81cmdz0yf374fg52r8yinsxy0ag29rd3r2l1k81";
 | 
			
		||||
    };
 | 
			
		||||
  librato =
 | 
			
		||||
    {
 | 
			
		||||
@ -372,9 +372,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-linode";
 | 
			
		||||
      rev     = "v1.8.0";
 | 
			
		||||
      version = "1.8.0";
 | 
			
		||||
      sha256  = "1jgh2ij58a5mr6ns604cfpvfvr19qr0q51j57gvchz53iv683m9q";
 | 
			
		||||
      rev     = "v1.9.1";
 | 
			
		||||
      version = "1.9.1";
 | 
			
		||||
      sha256  = "10f7nij91fhgf1808r6rv3l13nz7p37mcln5p3nfvhsxskss3vxn";
 | 
			
		||||
    };
 | 
			
		||||
  local =
 | 
			
		||||
    {
 | 
			
		||||
@ -412,9 +412,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-mysql";
 | 
			
		||||
      rev     = "v1.8.0";
 | 
			
		||||
      version = "1.8.0";
 | 
			
		||||
      sha256  = "1llcg2mp6jbj386liinly62pgy934v0c2g5z976n0xwfdiybyhwx";
 | 
			
		||||
      rev     = "v1.9.0";
 | 
			
		||||
      version = "1.9.0";
 | 
			
		||||
      sha256  = "14gxxki3jhncv3s2x828ns2vgmf2xxzigdyp9b54mbkw5rnv1k2g";
 | 
			
		||||
    };
 | 
			
		||||
  netlify =
 | 
			
		||||
    {
 | 
			
		||||
@ -428,9 +428,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-newrelic";
 | 
			
		||||
      rev     = "v1.5.2";
 | 
			
		||||
      version = "1.5.2";
 | 
			
		||||
      sha256  = "1q2vlpzxz04xhmf2wi5pc501454qwzh59kdhfhs8yjg1d1489jng";
 | 
			
		||||
      rev     = "v1.8.0";
 | 
			
		||||
      version = "1.8.0";
 | 
			
		||||
      sha256  = "16fdif6hshdb1aswv22k590rcr3f6b3a9gmg8vc4lbyi6l2dfabd";
 | 
			
		||||
    };
 | 
			
		||||
  nomad =
 | 
			
		||||
    {
 | 
			
		||||
@ -444,17 +444,17 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-ns1";
 | 
			
		||||
      rev     = "v1.6.0";
 | 
			
		||||
      version = "1.6.0";
 | 
			
		||||
      sha256  = "1v075wc48pq9kp9rp4kanlfshnxgan9h914nqalq90xgzyl2gf3v";
 | 
			
		||||
      rev     = "v1.6.1";
 | 
			
		||||
      version = "1.6.1";
 | 
			
		||||
      sha256  = "0zyn165h42p640k1q85x3n8fw1fs9j72z9lnfa8pas89jy2fmi8b";
 | 
			
		||||
    };
 | 
			
		||||
  nsxt =
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-nsxt";
 | 
			
		||||
      rev     = "v1.1.1";
 | 
			
		||||
      version = "1.1.1";
 | 
			
		||||
      sha256  = "19bbycify25bshpyq65qjxnl72b6wmwwwdb7hxl94hhbgx2c9z29";
 | 
			
		||||
      rev     = "v1.1.2";
 | 
			
		||||
      version = "1.1.2";
 | 
			
		||||
      sha256  = "1hnxivad7371j363sp3460mfzl5alb3dhxsbp0qwfl5mzvriwrbl";
 | 
			
		||||
    };
 | 
			
		||||
  null =
 | 
			
		||||
    {
 | 
			
		||||
@ -476,9 +476,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-oci";
 | 
			
		||||
      rev     = "v3.50.0-rc1";
 | 
			
		||||
      version = "3.50.0-rc1";
 | 
			
		||||
      sha256  = "0nzz62zyx5xf2qlvjcbsqnafdhmq194yhyipcab1n2ckji8zb03z";
 | 
			
		||||
      rev     = "v3.54.0-rc1";
 | 
			
		||||
      version = "3.54.0-rc1";
 | 
			
		||||
      sha256  = "14mfkjjpq4sfw0j4w1mnh37x9kwn76rs1y6cjqq9zb8fnhva6gax";
 | 
			
		||||
    };
 | 
			
		||||
  oneandone =
 | 
			
		||||
    {
 | 
			
		||||
@ -508,17 +508,17 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-opentelekomcloud";
 | 
			
		||||
      rev     = "v1.13.1";
 | 
			
		||||
      version = "1.13.1";
 | 
			
		||||
      sha256  = "1mxbfskxf9zwm55r3s6fhk634pnyk0sx5pgwk3kmw4sgjv88i1ny";
 | 
			
		||||
      rev     = "v1.14.0";
 | 
			
		||||
      version = "1.14.0";
 | 
			
		||||
      sha256  = "1mjb6br8iy76q417lmg04xnv4hkgi2fgdn3qnr3nvlwnnccp230k";
 | 
			
		||||
    };
 | 
			
		||||
  opsgenie =
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-opsgenie";
 | 
			
		||||
      rev     = "v0.2.4";
 | 
			
		||||
      version = "0.2.4";
 | 
			
		||||
      sha256  = "1kgvbx39v6f3hszwrqjsaq3wvwzkxf4gwwfix2m6bprfr5q5vn0d";
 | 
			
		||||
      rev     = "v0.2.5";
 | 
			
		||||
      version = "0.2.5";
 | 
			
		||||
      sha256  = "0brjqnlnxqss285n2g1z006bibbdh5v47g75l5kyhyhhchavccma";
 | 
			
		||||
    };
 | 
			
		||||
  oraclepaas =
 | 
			
		||||
    {
 | 
			
		||||
@ -540,9 +540,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-packet";
 | 
			
		||||
      rev     = "v2.6.1";
 | 
			
		||||
      version = "2.6.1";
 | 
			
		||||
      sha256  = "198lkw5b4xfyf82yzym66fna7j0wl3hzvkdr9b9q7f0nffx47xri";
 | 
			
		||||
      rev     = "v2.7.1";
 | 
			
		||||
      version = "2.7.1";
 | 
			
		||||
      sha256  = "1hmja9c8ab66yr814psz1zsa4y0nbmd5rcnp3qxdgizp45yrvz3i";
 | 
			
		||||
    };
 | 
			
		||||
  pagerduty =
 | 
			
		||||
    {
 | 
			
		||||
@ -556,9 +556,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-panos";
 | 
			
		||||
      rev     = "v1.6.0";
 | 
			
		||||
      version = "1.6.0";
 | 
			
		||||
      sha256  = "0qszdyrj84c8i195y45cnanzmkn8ypi1gi5a03pf3gsf2fdcj9gq";
 | 
			
		||||
      rev     = "v1.6.1";
 | 
			
		||||
      version = "1.6.1";
 | 
			
		||||
      sha256  = "06hwi426x7ipmn4dbg5dyv9z84sxaa8q1jlcd2l264n9s2y3xhiq";
 | 
			
		||||
    };
 | 
			
		||||
  postgresql =
 | 
			
		||||
    {
 | 
			
		||||
@ -700,9 +700,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-tencentcloud";
 | 
			
		||||
      rev     = "v1.22.0";
 | 
			
		||||
      version = "1.22.0";
 | 
			
		||||
      sha256  = "0lamj77n9b5m80201wim0zcjgdcbihcaq27z49himh2qi5j8lxiz";
 | 
			
		||||
      rev     = "v1.25.2";
 | 
			
		||||
      version = "1.25.2";
 | 
			
		||||
      sha256  = "1pf4l9rvkarl4vhf51np4kdqcgs4jhsr5gw7vs6rn8gv97lb40kw";
 | 
			
		||||
    };
 | 
			
		||||
  terraform =
 | 
			
		||||
    {
 | 
			
		||||
@ -756,9 +756,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-vault";
 | 
			
		||||
      rev     = "v2.5.0";
 | 
			
		||||
      version = "2.5.0";
 | 
			
		||||
      sha256  = "0h3q2zifjgm05kvdans88dl8wx9hr21c1s64fmfs4an07gkg8947";
 | 
			
		||||
      rev     = "v2.6.0";
 | 
			
		||||
      version = "2.6.0";
 | 
			
		||||
      sha256  = "0sw1swy2j9n3ji48sxmj093zzlq7sdmp8ixmz488ps3m4jjyfk6k";
 | 
			
		||||
    };
 | 
			
		||||
  vcd =
 | 
			
		||||
    {
 | 
			
		||||
@ -780,9 +780,9 @@
 | 
			
		||||
    {
 | 
			
		||||
      owner   = "terraform-providers";
 | 
			
		||||
      repo    = "terraform-provider-yandex";
 | 
			
		||||
      rev     = "v0.23.0";
 | 
			
		||||
      version = "0.23.0";
 | 
			
		||||
      sha256  = "0vv8lp834q8i7fam2s8pvs7slfwlf8m4g080i9cij5z2lgipja32";
 | 
			
		||||
      rev     = "v0.24.0";
 | 
			
		||||
      version = "0.24.0";
 | 
			
		||||
      sha256  = "0a9isivn3ni0d1id8ww97xbcwrxc0c4pn1m1q21cipqs6mwksq9m";
 | 
			
		||||
    };
 | 
			
		||||
  segment =
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
@ -14,11 +14,11 @@ assert pulseaudioSupport -> libpulseaudio != null;
 | 
			
		||||
let
 | 
			
		||||
  inherit (stdenv.lib) concatStringsSep makeBinPath optional;
 | 
			
		||||
 | 
			
		||||
  version = "3.0.317369.1110";
 | 
			
		||||
  version = "3.5.330166.1202";
 | 
			
		||||
  srcs = {
 | 
			
		||||
    x86_64-linux = fetchurl {
 | 
			
		||||
      url = "https://zoom.us/client/${version}/zoom_x86_64.tar.xz";
 | 
			
		||||
      sha256 = "0r4wp9qb1739xwr24kglc4sj8qaxwr4nh5p1igi3x6f1f8gczia7";
 | 
			
		||||
      sha256 = "1fjirl4hmxvy4kp3b0n97mn8sz355ik10297qx6hcr0fhn2v0nig";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -19,6 +19,6 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    description = "Mail filtering utility";
 | 
			
		||||
    license = stdenv.lib.licenses.mit;
 | 
			
		||||
    platforms = stdenv.lib.platforms.unix;
 | 
			
		||||
    maintainers = with stdenv.lib.maintainers; [ fuuzetsu ];
 | 
			
		||||
    maintainers = with stdenv.lib.maintainers; [ ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -185,7 +185,7 @@ stdenv.mkDerivation {
 | 
			
		||||
      free = false;
 | 
			
		||||
      url = http://www.mozilla.org/en-US/foundation/trademarks/policy/;
 | 
			
		||||
    };
 | 
			
		||||
    maintainers = with stdenv.lib.maintainers; [ fuuzetsu ];
 | 
			
		||||
    maintainers = with stdenv.lib.maintainers; [ ];
 | 
			
		||||
    platforms = platforms.linux;
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
{ stdenv, fetchurl, pam, python3, libxslt, perl, ArchiveZip, gettext
 | 
			
		||||
{ stdenv, fetchurl, fetchpatch, pam, python3, libxslt, perl, ArchiveZip, gettext
 | 
			
		||||
, IOCompress, zlib, libjpeg, expat, freetype, libwpd
 | 
			
		||||
, libxml2, db, curl, fontconfig, libsndfile, neon
 | 
			
		||||
, bison, flex, zip, unzip, gtk3, gtk2, libmspack, getopt, file, cairo, which
 | 
			
		||||
@ -73,6 +73,19 @@ in stdenv.mkDerivation rec {
 | 
			
		||||
 | 
			
		||||
  patches = [
 | 
			
		||||
    ./xdg-open-brief.patch
 | 
			
		||||
 | 
			
		||||
    # Poppler-0.82 compatibility
 | 
			
		||||
    # https://gerrit.libreoffice.org/81545
 | 
			
		||||
    (fetchpatch {
 | 
			
		||||
      url = "https://github.com/LibreOffice/core/commit/2eadd46ab81058087af95bdfc1fea28fcdb65998.patch";
 | 
			
		||||
      sha256 = "1mpipdfxvixjziizbhfbpybpzlg1ijw7s0yqjpmq5d7pf3pvkm4n";
 | 
			
		||||
    })
 | 
			
		||||
    # Poppler-0.83 compatibility
 | 
			
		||||
    # https://gerrit.libreoffice.org/84384
 | 
			
		||||
    (fetchpatch {
 | 
			
		||||
      url = "https://github.com/LibreOffice/core/commit/9065cd8d9a19864f6b618f2dc10daf577badd9ee.patch";
 | 
			
		||||
      sha256 = "0nd0gck8ra3ffw936a7ri0s6a0ii5cyglnhip2prcjh5yf7vw2i2";
 | 
			
		||||
    })
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  tarballPath = "external/tarballs";
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
{ stdenv, fetchurl, pam, python3, libxslt, perl, ArchiveZip, gettext
 | 
			
		||||
{ stdenv, fetchurl, fetchpatch, pam, python3, libxslt, perl, ArchiveZip, gettext
 | 
			
		||||
, IOCompress, zlib, libjpeg, expat, freetype, libwpd
 | 
			
		||||
, libxml2, db, curl, fontconfig, libsndfile, neon
 | 
			
		||||
, bison, flex, zip, unzip, gtk3, gtk2, libmspack, getopt, file, cairo, which
 | 
			
		||||
@ -73,6 +73,19 @@ in stdenv.mkDerivation rec {
 | 
			
		||||
 | 
			
		||||
  patches = [
 | 
			
		||||
    ./xdg-open-brief.patch
 | 
			
		||||
 | 
			
		||||
    # Poppler-0.82 compatibility
 | 
			
		||||
    # https://gerrit.libreoffice.org/81545
 | 
			
		||||
    (fetchpatch {
 | 
			
		||||
      url = "https://github.com/LibreOffice/core/commit/2eadd46ab81058087af95bdfc1fea28fcdb65998.patch";
 | 
			
		||||
      sha256 = "1mpipdfxvixjziizbhfbpybpzlg1ijw7s0yqjpmq5d7pf3pvkm4n";
 | 
			
		||||
    })
 | 
			
		||||
    # Poppler-0.83 compatibility
 | 
			
		||||
    # https://gerrit.libreoffice.org/84384
 | 
			
		||||
    (fetchpatch {
 | 
			
		||||
      url = "https://github.com/LibreOffice/core/commit/9065cd8d9a19864f6b618f2dc10daf577badd9ee.patch";
 | 
			
		||||
      sha256 = "0nd0gck8ra3ffw936a7ri0s6a0ii5cyglnhip2prcjh5yf7vw2i2";
 | 
			
		||||
    })
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  tarballPath = "external/tarballs";
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
{ stdenv, fetchurl, mkDerivation, pkgconfig, cmake, qtbase, cairo, pixman,
 | 
			
		||||
{ stdenv, fetchurl, fetchpatch, mkDerivation, pkgconfig, cmake, qtbase, cairo, pixman,
 | 
			
		||||
boost, cups, fontconfig, freetype, hunspell, libjpeg, libtiff, libxml2, lcms2,
 | 
			
		||||
podofo, poppler, poppler_data, python2, qtimageformats, qttools, harfbuzzFull }:
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,19 @@ mkDerivation rec {
 | 
			
		||||
    sha256 = "eQiyGmzoQyafWM7fX495GJMlfmIBzOX73ccNrKL+P3E=";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  patches = [
 | 
			
		||||
    # fix build with Poppler 0.82
 | 
			
		||||
    (fetchpatch {
 | 
			
		||||
      url = "https://github.com/scribusproject/scribus/commit/6db15ec1af791377b28981601f8c296006de3c6f.patch";
 | 
			
		||||
      sha256 = "1y6g3avmsmiyaj8xry1syaz8sfznsavh6l2rp13pj2bwsxfcf939";
 | 
			
		||||
    })
 | 
			
		||||
    # fix build with Poppler 0.83
 | 
			
		||||
    (fetchpatch {
 | 
			
		||||
      url = "https://github.com/scribusproject/scribus/commit/b51c2bab4d57d685f96d427d6816bdd4ecfb4674.patch";
 | 
			
		||||
      sha256 = "031yy9ylzksczfnpcc4glfccz025sn47zg6fqqzjnqqrc16bgdlx";
 | 
			
		||||
    })
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  enableParallelBuilding = true;
 | 
			
		||||
 | 
			
		||||
  nativeBuildInputs = [ pkgconfig cmake  ];
 | 
			
		||||
 | 
			
		||||
@ -7,8 +7,8 @@ let
 | 
			
		||||
in
 | 
			
		||||
 | 
			
		||||
stdenv.mkDerivation rec {
 | 
			
		||||
  srcVersion = "oct19a";
 | 
			
		||||
  version = "20191001_a";
 | 
			
		||||
  srcVersion = "dec19a";
 | 
			
		||||
  version = "20191201_a";
 | 
			
		||||
  pname = "gildas";
 | 
			
		||||
 | 
			
		||||
  src = fetchurl {
 | 
			
		||||
@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    # source code of the previous release to a different directory
 | 
			
		||||
    urls = [ "http://www.iram.fr/~gildas/dist/gildas-src-${srcVersion}.tar.xz"
 | 
			
		||||
      "http://www.iram.fr/~gildas/dist/archive/gildas/gildas-src-${srcVersion}.tar.xz" ];
 | 
			
		||||
    sha256 = "0h6g16ra7v8x15j21z5hnb3midwm0asc7bjm9gs5v5sw66vn3wc1";
 | 
			
		||||
    sha256 = "0kwq5gzgzx5hkbabwvbrw2958pqz4m2s501k5cbllgxh4sqp86b1";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  enableParallelBuilding = true;
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
{ stdenv, fetchFromGitHub, yosys, bash, python3 }:
 | 
			
		||||
{ stdenv, fetchFromGitHub, yosys, bash, python3, yices }:
 | 
			
		||||
 | 
			
		||||
stdenv.mkDerivation {
 | 
			
		||||
  pname = "symbiyosys";
 | 
			
		||||
@ -13,6 +13,8 @@ stdenv.mkDerivation {
 | 
			
		||||
 | 
			
		||||
  buildInputs = [ python3 yosys ];
 | 
			
		||||
 | 
			
		||||
  propagatedBuildInputs = [ yices ];
 | 
			
		||||
 | 
			
		||||
  buildPhase = "true";
 | 
			
		||||
  installPhase = ''
 | 
			
		||||
    mkdir -p $out/bin $out/share/yosys/python3
 | 
			
		||||
 | 
			
		||||
@ -56,6 +56,6 @@ stdenv.mkDerivation {
 | 
			
		||||
    export GLIBC_TUNABLES=glibc.malloc.arena_max=4
 | 
			
		||||
 | 
			
		||||
    echo "Running sage tests with arguments ${timeSpecifier} ${patienceSpecifier} ${testArgs}"
 | 
			
		||||
    "sage" -t --nthreads "$NIX_BUILD_CORES" --optional=sage ${timeSpecifier} ${patienceSpecifier} ${testArgs}
 | 
			
		||||
    "sage" -t --timeout=0 --nthreads "$NIX_BUILD_CORES" --optional=sage ${timeSpecifier} ${patienceSpecifier} ${testArgs}
 | 
			
		||||
  '';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,7 @@ stdenv.mkDerivation {
 | 
			
		||||
 | 
			
		||||
    homepage = http://vite.gforge.inria.fr/;
 | 
			
		||||
    license = stdenv.lib.licenses.cecill20;
 | 
			
		||||
    maintainers = with stdenv.lib.maintainers; [ fuuzetsu ];
 | 
			
		||||
    maintainers = with stdenv.lib.maintainers; [ ];
 | 
			
		||||
    platforms = stdenv.lib.platforms.linux;
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "version": "12.5.2",
 | 
			
		||||
  "repo_hash": "18mviak37rkpj92m0hzh79rjbfsk8p91r5zzjp7y3y4qjnsf2a8p",
 | 
			
		||||
  "version": "12.5.3",
 | 
			
		||||
  "repo_hash": "1q76yhg4ygs9w5hb8hbv1908d5pfqzr8idmjp06pa4dw5qqqkv97",
 | 
			
		||||
  "owner": "gitlab-org",
 | 
			
		||||
  "repo": "gitlab",
 | 
			
		||||
  "rev": "v12.5.2-ee",
 | 
			
		||||
  "rev": "v12.5.3-ee",
 | 
			
		||||
  "passthru": {
 | 
			
		||||
    "GITALY_SERVER_VERSION": "1.72.1",
 | 
			
		||||
    "GITLAB_PAGES_VERSION": "1.12.0",
 | 
			
		||||
 | 
			
		||||
@ -306,6 +306,15 @@
 | 
			
		||||
      sha256 = "0jb2834rw5sykfr937fxi8hxi2zy80sj2bdn9b3jb4b26ksqng30";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/golang/lint";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/golang/lint";
 | 
			
		||||
      rev = "06c8688daad7";
 | 
			
		||||
      sha256 = "0xi94dwvz50a66bq1hp9fyqkym5mcpdxdb1hrfvicldgjf37lc47";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/golang/mock";
 | 
			
		||||
    fetch = {
 | 
			
		||||
@ -540,6 +549,15 @@
 | 
			
		||||
      sha256 = "1zcq480ig7wbg4378qcfxznp2gzqmk7x6rbxizflvg9v2f376vrw";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/kisielk/gotool";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/kisielk/gotool";
 | 
			
		||||
      rev = "v1.0.0";
 | 
			
		||||
      sha256 = "14af2pa0ssyp8bp2mvdw184s5wcysk6akil3wzxmr05wwy951iwn";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/klauspost/compress";
 | 
			
		||||
    fetch = {
 | 
			
		||||
 | 
			
		||||
@ -162,6 +162,15 @@
 | 
			
		||||
      sha256 = "0jb2834rw5sykfr937fxi8hxi2zy80sj2bdn9b3jb4b26ksqng30";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/golang/lint";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/golang/lint";
 | 
			
		||||
      rev = "06c8688daad7";
 | 
			
		||||
      sha256 = "0xi94dwvz50a66bq1hp9fyqkym5mcpdxdb1hrfvicldgjf37lc47";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/golang/mock";
 | 
			
		||||
    fetch = {
 | 
			
		||||
@ -252,6 +261,15 @@
 | 
			
		||||
      sha256 = "1zcq480ig7wbg4378qcfxznp2gzqmk7x6rbxizflvg9v2f376vrw";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/kisielk/gotool";
 | 
			
		||||
    fetch = {
 | 
			
		||||
      type = "git";
 | 
			
		||||
      url = "https://github.com/kisielk/gotool";
 | 
			
		||||
      rev = "v1.0.0";
 | 
			
		||||
      sha256 = "14af2pa0ssyp8bp2mvdw184s5wcysk6akil3wzxmr05wwy951iwn";
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    goPackagePath = "github.com/konsorten/go-windows-terminal-sequences";
 | 
			
		||||
    fetch = {
 | 
			
		||||
 | 
			
		||||
@ -61,7 +61,7 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    description = "Cross-platform tools for Matroska";
 | 
			
		||||
    homepage    = http://www.bunkus.org/videotools/mkvtoolnix/;
 | 
			
		||||
    license     = licenses.gpl2;
 | 
			
		||||
    maintainers = with maintainers; [ codyopel fuuzetsu rnhmjoj ];
 | 
			
		||||
    maintainers = with maintainers; [ codyopel rnhmjoj ];
 | 
			
		||||
    platforms   = platforms.linux
 | 
			
		||||
      ++ optionals (!withGUI) platforms.darwin;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
@ -235,7 +235,7 @@ in stdenv.mkDerivation rec {
 | 
			
		||||
    description = "A media player that supports many video formats (MPlayer and mplayer2 fork)";
 | 
			
		||||
    homepage = https://mpv.io;
 | 
			
		||||
    license = licenses.gpl2Plus;
 | 
			
		||||
    maintainers = with maintainers; [ AndersonTorres fuuzetsu fpletz globin ivan ];
 | 
			
		||||
    maintainers = with maintainers; [ AndersonTorres fpletz globin ivan ];
 | 
			
		||||
    platforms = platforms.darwin ++ platforms.linux;
 | 
			
		||||
 | 
			
		||||
    longDescription = ''
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										36
									
								
								pkgs/applications/virtualization/gvisor/containerd-shim.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								pkgs/applications/virtualization/gvisor/containerd-shim.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
			
		||||
{ lib, fetchFromGitHub, buildGoModule, go-bindata }:
 | 
			
		||||
 | 
			
		||||
buildGoModule rec {
 | 
			
		||||
  name = "gvisor-containerd-shim-${version}";
 | 
			
		||||
  version = "2019-10-09";
 | 
			
		||||
 | 
			
		||||
  src = fetchFromGitHub {
 | 
			
		||||
    owner  = "google";
 | 
			
		||||
    repo   = "gvisor-containerd-shim";
 | 
			
		||||
    rev    = "f299b553afdd8455a0057862004061ea12e660f5";
 | 
			
		||||
    sha256 = "077bhrmjrpcxv1z020yxhx2c4asn66j21gxlpa6hz0av3lfck9lm";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  modSha256 = "1jdhgbrn59ahnabwnig99i21f6kimmqx9f3dg10ffwfs3dx0gzlg";
 | 
			
		||||
 | 
			
		||||
  buildPhase = ''
 | 
			
		||||
    make
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  doCheck = true;
 | 
			
		||||
  checkPhase = ''
 | 
			
		||||
    make test
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  installPhase = ''
 | 
			
		||||
    make install DESTDIR="$out"
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  meta = with lib; {
 | 
			
		||||
    description = "containerd shim for gVisor";
 | 
			
		||||
    homepage    = https://github.com/google/gvisor-containerd-shim;
 | 
			
		||||
    license     = licenses.asl20;
 | 
			
		||||
    maintainers = with maintainers; [ andrew-d ];
 | 
			
		||||
    platforms   = [ "x86_64-linux" ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										101
									
								
								pkgs/applications/virtualization/gvisor/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								pkgs/applications/virtualization/gvisor/default.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,101 @@
 | 
			
		||||
{ stdenv
 | 
			
		||||
, buildBazelPackage
 | 
			
		||||
, fetchFromGitHub
 | 
			
		||||
, cacert
 | 
			
		||||
, git
 | 
			
		||||
, glibcLocales
 | 
			
		||||
, go
 | 
			
		||||
, iproute
 | 
			
		||||
, iptables
 | 
			
		||||
, makeWrapper
 | 
			
		||||
, procps
 | 
			
		||||
, python3
 | 
			
		||||
}:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  preBuild = ''
 | 
			
		||||
    patchShebangs .
 | 
			
		||||
 | 
			
		||||
    # Tell rules_go to use the Go binary found in the PATH
 | 
			
		||||
    sed -E -i \
 | 
			
		||||
      -e 's|go_version\s*=\s*"[^"]+",|go_version = "host",|g' \
 | 
			
		||||
      WORKSPACE
 | 
			
		||||
 | 
			
		||||
    # The gazelle Go tooling needs CA certs
 | 
			
		||||
    export SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-bundle.crt"
 | 
			
		||||
 | 
			
		||||
    # If we don't reset our GOPATH, the rules_go stdlib builder tries to
 | 
			
		||||
    # install something into it. Ideally that wouldn't happen, but for now we
 | 
			
		||||
    # can also get around it by unsetting GOPATH entirely, since rules_go
 | 
			
		||||
    # doesn't need it.
 | 
			
		||||
    export GOPATH=
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
in buildBazelPackage rec {
 | 
			
		||||
  name = "gvisor-${version}";
 | 
			
		||||
  version = "2019-11-14";
 | 
			
		||||
 | 
			
		||||
  src = fetchFromGitHub {
 | 
			
		||||
    owner = "google";
 | 
			
		||||
    repo  = "gvisor";
 | 
			
		||||
    rev   = "release-20191114.0";
 | 
			
		||||
    sha256 = "0kyixjjlws9iz2r2srgpdd4rrq94vpxkmh2rmmzxd9mcqy2i9bg1";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  nativeBuildInputs = [ git glibcLocales go makeWrapper python3 ];
 | 
			
		||||
 | 
			
		||||
  bazelTarget = "//runsc:runsc";
 | 
			
		||||
 | 
			
		||||
  # gvisor uses the Starlark implementation of rules_cc, not the built-in one,
 | 
			
		||||
  # so we shouldn't delete it from our dependencies.
 | 
			
		||||
  removeRulesCC = false;
 | 
			
		||||
 | 
			
		||||
  fetchAttrs = {
 | 
			
		||||
    inherit preBuild;
 | 
			
		||||
 | 
			
		||||
    preInstall = ''
 | 
			
		||||
      # Remove the go_sdk (it's just a copy of the go derivation) and all
 | 
			
		||||
      # references to it from the marker files. Bazel does not need to download
 | 
			
		||||
      # this sdk because we have patched the WORKSPACE file to point to the one
 | 
			
		||||
      # currently present in PATH. Without removing the go_sdk from the marker
 | 
			
		||||
      # file, the hash of it will change anytime the Go derivation changes and
 | 
			
		||||
      # that would lead to impurities in the marker files which would result in
 | 
			
		||||
      # a different sha256 for the fetch phase.
 | 
			
		||||
      rm -rf $bazelOut/external/{go_sdk,\@go_sdk.marker}
 | 
			
		||||
 | 
			
		||||
      # Remove the gazelle tools, they contain go binaries that are built
 | 
			
		||||
      # non-deterministically. As long as the gazelle version matches the tools
 | 
			
		||||
      # should be equivalent.
 | 
			
		||||
      rm -rf $bazelOut/external/{bazel_gazelle_go_repository_tools,\@bazel_gazelle_go_repository_tools.marker}
 | 
			
		||||
 | 
			
		||||
      # Remove the gazelle repository cache
 | 
			
		||||
      chmod -R +w $bazelOut/external/bazel_gazelle_go_repository_cache
 | 
			
		||||
      rm -rf $bazelOut/external/{bazel_gazelle_go_repository_cache,\@bazel_gazelle_go_repository_cache.marker}
 | 
			
		||||
 | 
			
		||||
      # Remove log file(s)
 | 
			
		||||
      rm -f "$bazelOut"/java.log "$bazelOut"/java.log.*
 | 
			
		||||
    '';
 | 
			
		||||
 | 
			
		||||
    sha256 = "122qk6iv8hd7g2a84y9aqqhij4r0m47vpxzbqhhh6k5livc73qd6";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  buildAttrs = {
 | 
			
		||||
    inherit preBuild;
 | 
			
		||||
 | 
			
		||||
    installPhase = ''
 | 
			
		||||
      install -Dm755 bazel-bin/runsc/*_pure_stripped/runsc $out/bin/runsc
 | 
			
		||||
 | 
			
		||||
      # Needed for the 'runsc do' subcomand
 | 
			
		||||
      wrapProgram $out/bin/runsc \
 | 
			
		||||
        --prefix PATH : ${stdenv.lib.makeBinPath [ iproute iptables procps ]}
 | 
			
		||||
    '';
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Container Runtime Sandbox";
 | 
			
		||||
    homepage = https://github.com/google/gvisor;
 | 
			
		||||
    license = licenses.asl20;
 | 
			
		||||
    maintainers = with maintainers; [ andrew-d ];
 | 
			
		||||
    platforms = [ "x86_64-linux" ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
@ -1,6 +1,4 @@
 | 
			
		||||
# Builder for Agda packages. Mostly inspired by the cabal builder.
 | 
			
		||||
#
 | 
			
		||||
# Contact: stdenv.lib.maintainers.fuuzetsu
 | 
			
		||||
 | 
			
		||||
{ stdenv, Agda, glibcLocales
 | 
			
		||||
, writeShellScriptBin
 | 
			
		||||
 | 
			
		||||
@ -2,11 +2,16 @@
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
 | 
			
		||||
  runCommand' = stdenv: name: env: buildCommand:
 | 
			
		||||
  runCommand' = runLocal: stdenv: name: env: buildCommand:
 | 
			
		||||
    stdenv.mkDerivation ({
 | 
			
		||||
      inherit name buildCommand;
 | 
			
		||||
      passAsFile = [ "buildCommand" ];
 | 
			
		||||
    } // env);
 | 
			
		||||
    }
 | 
			
		||||
    // (lib.optionalAttrs runLocal {
 | 
			
		||||
          preferLocalBuild = true;
 | 
			
		||||
          allowSubstitutes = false;
 | 
			
		||||
       })
 | 
			
		||||
    // env);
 | 
			
		||||
 | 
			
		||||
in
 | 
			
		||||
 | 
			
		||||
@ -21,11 +26,27 @@ rec {
 | 
			
		||||
  * runCommand "name" {envVariable = true;} ''echo hello > $out''
 | 
			
		||||
  * runCommandNoCC "name" {envVariable = true;} ''echo hello > $out'' # equivalent to prior
 | 
			
		||||
  * runCommandCC "name" {} ''gcc -o myfile myfile.c; cp myfile $out'';
 | 
			
		||||
  *
 | 
			
		||||
  * The `*Local` variants force a derivation to be built locally,
 | 
			
		||||
  * it is not substituted.
 | 
			
		||||
  *
 | 
			
		||||
  * This is intended for very cheap commands (<1s execution time).
 | 
			
		||||
  * It saves on the network roundrip and can speed up a build.
 | 
			
		||||
  *
 | 
			
		||||
  * It is the same as adding the special fields
 | 
			
		||||
  * `preferLocalBuild = true;`
 | 
			
		||||
  * `allowSubstitutes = false;`
 | 
			
		||||
  * to a derivation’s attributes.
 | 
			
		||||
  */
 | 
			
		||||
  runCommand = runCommandNoCC;
 | 
			
		||||
  runCommandNoCC = runCommand' stdenvNoCC;
 | 
			
		||||
  runCommandCC = runCommand' stdenv;
 | 
			
		||||
  runCommandLocal = runCommandNoCCLocal;
 | 
			
		||||
 | 
			
		||||
  runCommandNoCC = runCommand' false stdenvNoCC;
 | 
			
		||||
  runCommandNoCCLocal = runCommand' true stdenvNoCC;
 | 
			
		||||
 | 
			
		||||
  runCommandCC = runCommand' false stdenv;
 | 
			
		||||
  # `runCommandCCLocal` left out on purpose.
 | 
			
		||||
  # We shouldn’t force the user to have a cc in scope.
 | 
			
		||||
 | 
			
		||||
  /* Writes a text file to the nix store.
 | 
			
		||||
   * The contents of text is added to the file in the store.
 | 
			
		||||
 | 
			
		||||
@ -20,8 +20,7 @@ let
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
in {
 | 
			
		||||
  runInWindowsVM = drv: let
 | 
			
		||||
  in pkgs.lib.overrideDerivation drv (attrs: let
 | 
			
		||||
  runInWindowsVM = drv: pkgs.lib.overrideDerivation drv (attrs: let
 | 
			
		||||
    bootstrap = bootstrapper attrs.windowsImage;
 | 
			
		||||
  in {
 | 
			
		||||
    requiredSystemFeatures = [ "kvm" ];
 | 
			
		||||
 | 
			
		||||
@ -33,6 +33,6 @@ in stdenv.mkDerivation rec {
 | 
			
		||||
    description = "Default typeface used in the user interface of GNOME since version 3.0";
 | 
			
		||||
    platforms = stdenv.lib.platforms.all;
 | 
			
		||||
    license = stdenv.lib.licenses.ofl;
 | 
			
		||||
    maintainers = with stdenv.lib.maintainers; [ fuuzetsu ];
 | 
			
		||||
    maintainers = with stdenv.lib.maintainers; [ ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    sed -i -e 's:/share/gocode:/share/go:' Makefile
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Generates static DBus bindings for Golang and QML at build-time";
 | 
			
		||||
 | 
			
		||||
@ -113,7 +113,7 @@ buildGoPackage rec {
 | 
			
		||||
    searchHardCodedPaths $out  # debugging
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Go-lang bindings for dde-daemon";
 | 
			
		||||
 | 
			
		||||
@ -37,7 +37,7 @@ mkDerivation rec {
 | 
			
		||||
      -e "s,/usr/bin/deepin-desktop-ts-convert,deepin-desktop-ts-convert,"
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Calendar for Deepin Desktop Environment";
 | 
			
		||||
 | 
			
		||||
@ -99,7 +99,7 @@ mkDerivation rec {
 | 
			
		||||
    searchHardCodedPaths $out
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Control panel of Deepin Desktop Environment";
 | 
			
		||||
 | 
			
		||||
@ -121,7 +121,7 @@ buildGoPackage rec {
 | 
			
		||||
    searchHardCodedPaths $out  # debugging
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Daemon for handling Deepin Desktop Environment session settings";
 | 
			
		||||
 | 
			
		||||
@ -68,7 +68,7 @@ unwrapped = mkDerivation rec {
 | 
			
		||||
    searchHardCodedPaths $out
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Dock for Deepin Desktop Environment";
 | 
			
		||||
 | 
			
		||||
@ -240,7 +240,7 @@ mkDerivation rec {
 | 
			
		||||
    searchHardCodedPaths $out
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "File manager and desktop module for Deepin Desktop Environment";
 | 
			
		||||
 | 
			
		||||
@ -63,7 +63,7 @@ mkDerivation rec {
 | 
			
		||||
    searchHardCodedPaths $out
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Deepin Desktop Environment launcher module";
 | 
			
		||||
 | 
			
		||||
@ -41,7 +41,7 @@ mkDerivation rec {
 | 
			
		||||
    searchHardCodedPaths $out  # for debugging
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Deepin network utils";
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,7 @@ mkDerivation rec {
 | 
			
		||||
    searchHardCodedPaths $out
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "PolicyKit agent for Deepin Desktop Environment";
 | 
			
		||||
 | 
			
		||||
@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
 | 
			
		||||
 | 
			
		||||
  enableParallelBuilding = true;
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Qt DBus interface library for Deepin software";
 | 
			
		||||
 | 
			
		||||
@ -113,7 +113,7 @@ mkDerivation rec {
 | 
			
		||||
    searchHardCodedPaths $out  # debugging
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Deepin desktop-environment - Session UI module";
 | 
			
		||||
 | 
			
		||||
@ -51,7 +51,7 @@ mkDerivation rec {
 | 
			
		||||
    searchHardCodedPaths $modsrc  # for debugging
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Deepin file search tool";
 | 
			
		||||
 | 
			
		||||
@ -36,7 +36,7 @@ mkDerivation rec {
 | 
			
		||||
    searchHardCodedPaths $out  # debugging
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Easy to use calculator for Deepin Desktop Environment";
 | 
			
		||||
 | 
			
		||||
@ -40,7 +40,7 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    ln -s ../lib/deepin/desktop-version $out/etc/deepin-version
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Base assets and definitions for Deepin Desktop Environment";
 | 
			
		||||
 | 
			
		||||
@ -56,7 +56,7 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    searchHardCodedPaths $out
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "GSettings deepin desktop-wide schemas";
 | 
			
		||||
 | 
			
		||||
@ -35,7 +35,7 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    wrapProgram $out/bin/deepin-desktop-ts-convert --set PERL5LIB $PERL5LIB
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Deepin Internationalization utilities";
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 | 
			
		||||
 | 
			
		||||
  makeFlags = [ "PREFIX=${placeholder "out"}" ];
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Deepin GTK Theme";
 | 
			
		||||
 | 
			
		||||
@ -39,7 +39,7 @@ stdenv.mkDerivation rec {
 | 
			
		||||
    cp -a ./Sea ./usr/share/icons/hicolor "$out"/share/icons/
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Icons for the Deepin Desktop Environment";
 | 
			
		||||
 | 
			
		||||
@ -41,7 +41,7 @@ mkDerivation rec {
 | 
			
		||||
      -e "s,\$\$\[QT_INSTALL_PLUGINS\],$out/$qtPluginPrefix,"
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
 | 
			
		||||
  passthru.updateScript = deepin.updateScript { name = "${pname}-${version}"; };
 | 
			
		||||
 | 
			
		||||
  meta = with stdenv.lib; {
 | 
			
		||||
    description = "Image Viewer for Deepin Desktop Environment";
 | 
			
		||||
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user