Merge master into haskell-updates
This commit is contained in:
commit
6b9663e3af
|
@ -738,6 +738,42 @@ rec {
|
|||
sets:
|
||||
zipAttrsWith (name: values: values) sets;
|
||||
|
||||
/*
|
||||
Merge a list of attribute sets together using the `//` operator.
|
||||
In case of duplicate attributes, values from later list elements take precedence over earlier ones.
|
||||
The result is the same as `foldl mergeAttrs { }`, but the performance is better for large inputs.
|
||||
For n list elements, each with an attribute set containing m unique attributes, the complexity of this operation is O(nm log n).
|
||||
|
||||
Type:
|
||||
mergeAttrsList :: [ Attrs ] -> Attrs
|
||||
|
||||
Example:
|
||||
mergeAttrsList [ { a = 0; b = 1; } { c = 2; d = 3; } ]
|
||||
=> { a = 0; b = 1; c = 2; d = 3; }
|
||||
mergeAttrsList [ { a = 0; } { a = 1; } ]
|
||||
=> { a = 1; }
|
||||
*/
|
||||
mergeAttrsList = list:
|
||||
let
|
||||
# `binaryMerge start end` merges the elements at indices `index` of `list` such that `start <= index < end`
|
||||
# Type: Int -> Int -> Attrs
|
||||
binaryMerge = start: end:
|
||||
# assert start < end; # Invariant
|
||||
if end - start >= 2 then
|
||||
# If there's at least 2 elements, split the range in two, recurse on each part and merge the result
|
||||
# The invariant is satisfied because each half will have at least 1 element
|
||||
binaryMerge start (start + (end - start) / 2)
|
||||
// binaryMerge (start + (end - start) / 2) end
|
||||
else
|
||||
# Otherwise there will be exactly 1 element due to the invariant, in which case we just return it directly
|
||||
elemAt list start;
|
||||
in
|
||||
if list == [ ] then
|
||||
# Calling binaryMerge as below would not satisfy its invariant
|
||||
{ }
|
||||
else
|
||||
binaryMerge 0 (length list);
|
||||
|
||||
|
||||
/* Does the same as the update operator '//' except that attributes are
|
||||
merged until the given predicate is verified. The predicate should
|
||||
|
|
|
@ -609,6 +609,31 @@ runTests {
|
|||
};
|
||||
};
|
||||
|
||||
|
||||
testMergeAttrsListExample1 = {
|
||||
expr = attrsets.mergeAttrsList [ { a = 0; b = 1; } { c = 2; d = 3; } ];
|
||||
expected = { a = 0; b = 1; c = 2; d = 3; };
|
||||
};
|
||||
testMergeAttrsListExample2 = {
|
||||
expr = attrsets.mergeAttrsList [ { a = 0; } { a = 1; } ];
|
||||
expected = { a = 1; };
|
||||
};
|
||||
testMergeAttrsListExampleMany =
|
||||
let
|
||||
list = genList (n:
|
||||
listToAttrs (genList (m:
|
||||
let
|
||||
# Integer divide n by two to create duplicate attributes
|
||||
str = "halfn${toString (n / 2)}m${toString m}";
|
||||
in
|
||||
nameValuePair str str
|
||||
) 100)
|
||||
) 100;
|
||||
in {
|
||||
expr = attrsets.mergeAttrsList list;
|
||||
expected = foldl' mergeAttrs { } list;
|
||||
};
|
||||
|
||||
# code from the example
|
||||
testRecursiveUpdateUntil = {
|
||||
expr = recursiveUpdateUntil (path: l: r: path == ["foo"]) {
|
||||
|
|
|
@ -1237,6 +1237,12 @@
|
|||
githubId = 30842467;
|
||||
name = "April John";
|
||||
};
|
||||
aqrln = {
|
||||
email = "nix@aqrln.net";
|
||||
github = "aqrln";
|
||||
githubId = 4923335;
|
||||
name = "Alexey Orlenko";
|
||||
};
|
||||
ar1a = {
|
||||
email = "aria@ar1as.space";
|
||||
github = "ar1a";
|
||||
|
@ -4309,6 +4315,12 @@
|
|||
githubId = 10998835;
|
||||
name = "Doron Behar";
|
||||
};
|
||||
dotemup = {
|
||||
email = "dotemup.designs+nixpkgs@gmail.com";
|
||||
github = "dotemup";
|
||||
githubId = 11077277;
|
||||
name = "Dote";
|
||||
};
|
||||
dotlambda = {
|
||||
email = "rschuetz17@gmail.com";
|
||||
matrix = "@robert:funklause.de";
|
||||
|
@ -6011,6 +6023,12 @@
|
|||
githubId = 127353;
|
||||
name = "Geoffrey Huntley";
|
||||
};
|
||||
gigglesquid = {
|
||||
email = "jack.connors@protonmail.com";
|
||||
github = "gigglesquid";
|
||||
githubId = 3685154;
|
||||
name = "Jack connors";
|
||||
};
|
||||
gila = {
|
||||
email = "jeffry.molanus@gmail.com";
|
||||
github = "gila";
|
||||
|
@ -11300,6 +11318,12 @@
|
|||
name = "Maxim Schuwalow";
|
||||
email = "maxim.schuwalow@gmail.com";
|
||||
};
|
||||
mschwaig = {
|
||||
name = "Martin Schwaighofer";
|
||||
github = "mschwaig";
|
||||
githubId = 3856390;
|
||||
email = "mschwaig+nixpkgs@eml.cc";
|
||||
};
|
||||
msfjarvis = {
|
||||
github = "msfjarvis";
|
||||
githubId = 13348378;
|
||||
|
@ -15823,6 +15847,12 @@
|
|||
githubId = 16734772;
|
||||
name = "Sumner Evans";
|
||||
};
|
||||
sund3RRR = {
|
||||
email = "evenquantity@gmail.com";
|
||||
github = "sund3RRR";
|
||||
githubId = 73298492;
|
||||
name = "Mikhail Kiselev";
|
||||
};
|
||||
suominen = {
|
||||
email = "kimmo@suominen.com";
|
||||
github = "suominen";
|
||||
|
@ -18402,6 +18432,13 @@
|
|||
githubId = 1108325;
|
||||
name = "Théo Zimmermann";
|
||||
};
|
||||
zmitchell = {
|
||||
name = "Zach Mitchell";
|
||||
email = "zmitchell@fastmail.com";
|
||||
matrix = "@zmitchell:matrix.org";
|
||||
github = "zmitchell";
|
||||
githubId = 10246891;
|
||||
};
|
||||
zoedsoupe = {
|
||||
github = "zoedsoupe";
|
||||
githubId = 44469426;
|
||||
|
|
|
@ -86,6 +86,7 @@ luuid,,,,,,
|
|||
luv,,,,1.44.2-1,,
|
||||
lush.nvim,https://github.com/rktjmp/lush.nvim,,,,,teto
|
||||
lyaml,,,,,,lblasc
|
||||
magick,,,,,,donovanglover
|
||||
markdown,,,,,,
|
||||
mediator_lua,,,,,,
|
||||
mpack,,,,,,
|
||||
|
|
|
|
@ -63,6 +63,9 @@ let
|
|||
optionIdPrefix = "test-opt-";
|
||||
};
|
||||
|
||||
testDriverMachineDocstrings = pkgs.callPackage
|
||||
../../../nixos/lib/test-driver/nixos-test-driver-docstrings.nix {};
|
||||
|
||||
prepareManualFromMD = ''
|
||||
cp -r --no-preserve=all $inputs/* .
|
||||
|
||||
|
@ -80,6 +83,8 @@ let
|
|||
--replace \
|
||||
'@NIXOS_TEST_OPTIONS_JSON@' \
|
||||
${testOptionsDoc.optionsJSON}/share/doc/nixos/options.json
|
||||
sed -e '/@PYTHON_MACHINE_METHODS@/ {' -e 'r ${testDriverMachineDocstrings}/machine-methods.md' -e 'd' -e '}' \
|
||||
-i ./development/writing-nixos-tests.section.md
|
||||
'';
|
||||
|
||||
in rec {
|
||||
|
|
|
@ -139,210 +139,7 @@ to Python as `machine_a`.
|
|||
|
||||
The following methods are available on machine objects:
|
||||
|
||||
`start`
|
||||
|
||||
: Start the virtual machine. This method is asynchronous --- it does
|
||||
not wait for the machine to finish booting.
|
||||
|
||||
`shutdown`
|
||||
|
||||
: Shut down the machine, waiting for the VM to exit.
|
||||
|
||||
`crash`
|
||||
|
||||
: Simulate a sudden power failure, by telling the VM to exit
|
||||
immediately.
|
||||
|
||||
`block`
|
||||
|
||||
: Simulate unplugging the Ethernet cable that connects the machine to
|
||||
the other machines.
|
||||
|
||||
`unblock`
|
||||
|
||||
: Undo the effect of `block`.
|
||||
|
||||
`screenshot`
|
||||
|
||||
: Take a picture of the display of the virtual machine, in PNG format.
|
||||
The screenshot is linked from the HTML log.
|
||||
|
||||
`get_screen_text_variants`
|
||||
|
||||
: Return a list of different interpretations of what is currently
|
||||
visible on the machine's screen using optical character
|
||||
recognition. The number and order of the interpretations is not
|
||||
specified and is subject to change, but if no exception is raised at
|
||||
least one will be returned.
|
||||
|
||||
::: {.note}
|
||||
This requires [`enableOCR`](#test-opt-enableOCR) to be set to `true`.
|
||||
:::
|
||||
|
||||
`get_screen_text`
|
||||
|
||||
: Return a textual representation of what is currently visible on the
|
||||
machine's screen using optical character recognition.
|
||||
|
||||
::: {.note}
|
||||
This requires [`enableOCR`](#test-opt-enableOCR) to be set to `true`.
|
||||
:::
|
||||
|
||||
`send_monitor_command`
|
||||
|
||||
: Send a command to the QEMU monitor. This is rarely used, but allows
|
||||
doing stuff such as attaching virtual USB disks to a running
|
||||
machine.
|
||||
|
||||
`send_key`
|
||||
|
||||
: Simulate pressing keys on the virtual keyboard, e.g.,
|
||||
`send_key("ctrl-alt-delete")`.
|
||||
|
||||
`send_chars`
|
||||
|
||||
: Simulate typing a sequence of characters on the virtual keyboard,
|
||||
e.g., `send_chars("foobar\n")` will type the string `foobar`
|
||||
followed by the Enter key.
|
||||
|
||||
`send_console`
|
||||
|
||||
: Send keys to the kernel console. This allows interaction with the systemd
|
||||
emergency mode, for example. Takes a string that is sent, e.g.,
|
||||
`send_console("\n\nsystemctl default\n")`.
|
||||
|
||||
`execute`
|
||||
|
||||
: Execute a shell command, returning a list `(status, stdout)`.
|
||||
|
||||
Commands are run with `set -euo pipefail` set:
|
||||
|
||||
- If several commands are separated by `;` and one fails, the
|
||||
command as a whole will fail.
|
||||
|
||||
- For pipelines, the last non-zero exit status will be returned
|
||||
(if there is one; otherwise zero will be returned).
|
||||
|
||||
- Dereferencing unset variables fails the command.
|
||||
|
||||
- It will wait for stdout to be closed.
|
||||
|
||||
If the command detaches, it must close stdout, as `execute` will wait
|
||||
for this to consume all output reliably. This can be achieved by
|
||||
redirecting stdout to stderr `>&2`, to `/dev/console`, `/dev/null` or
|
||||
a file. Examples of detaching commands are `sleep 365d &`, where the
|
||||
shell forks a new process that can write to stdout and `xclip -i`, where
|
||||
the `xclip` command itself forks without closing stdout.
|
||||
|
||||
Takes an optional parameter `check_return` that defaults to `True`.
|
||||
Setting this parameter to `False` will not check for the return code
|
||||
and return -1 instead. This can be used for commands that shut down
|
||||
the VM and would therefore break the pipe that would be used for
|
||||
retrieving the return code.
|
||||
|
||||
A timeout for the command can be specified (in seconds) using the optional
|
||||
`timeout` parameter, e.g., `execute(cmd, timeout=10)` or
|
||||
`execute(cmd, timeout=None)`. The default is 900 seconds.
|
||||
|
||||
`succeed`
|
||||
|
||||
: Execute a shell command, raising an exception if the exit status is
|
||||
not zero, otherwise returning the standard output. Similar to `execute`,
|
||||
except that the timeout is `None` by default. See `execute` for details on
|
||||
command execution.
|
||||
|
||||
`fail`
|
||||
|
||||
: Like `succeed`, but raising an exception if the command returns a zero
|
||||
status.
|
||||
|
||||
`wait_until_succeeds`
|
||||
|
||||
: Repeat a shell command with 1-second intervals until it succeeds.
|
||||
Has a default timeout of 900 seconds which can be modified, e.g.
|
||||
`wait_until_succeeds(cmd, timeout=10)`. See `execute` for details on
|
||||
command execution.
|
||||
|
||||
`wait_until_fails`
|
||||
|
||||
: Like `wait_until_succeeds`, but repeating the command until it fails.
|
||||
|
||||
`wait_for_unit`
|
||||
|
||||
: Wait until the specified systemd unit has reached the "active"
|
||||
state.
|
||||
|
||||
`wait_for_file`
|
||||
|
||||
: Wait until the specified file exists.
|
||||
|
||||
`wait_for_open_port`
|
||||
|
||||
: Wait until a process is listening on the given TCP port and IP address
|
||||
(default `localhost`).
|
||||
|
||||
`wait_for_closed_port`
|
||||
|
||||
: Wait until nobody is listening on the given TCP port and IP address
|
||||
(default `localhost`).
|
||||
|
||||
`wait_for_x`
|
||||
|
||||
: Wait until the X11 server is accepting connections.
|
||||
|
||||
`wait_for_text`
|
||||
|
||||
: Wait until the supplied regular expressions matches the textual
|
||||
contents of the screen by using optical character recognition (see
|
||||
`get_screen_text` and `get_screen_text_variants`).
|
||||
|
||||
::: {.note}
|
||||
This requires [`enableOCR`](#test-opt-enableOCR) to be set to `true`.
|
||||
:::
|
||||
|
||||
`wait_for_console_text`
|
||||
|
||||
: Wait until the supplied regular expressions match a line of the
|
||||
serial console output. This method is useful when OCR is not
|
||||
possible or accurate enough.
|
||||
|
||||
`wait_for_window`
|
||||
|
||||
: Wait until an X11 window has appeared whose name matches the given
|
||||
regular expression, e.g., `wait_for_window("Terminal")`.
|
||||
|
||||
`copy_from_host`
|
||||
|
||||
: Copies a file from host to machine, e.g.,
|
||||
`copy_from_host("myfile", "/etc/my/important/file")`.
|
||||
|
||||
The first argument is the file on the host. The file needs to be
|
||||
accessible while building the nix derivation. The second argument is
|
||||
the location of the file on the machine.
|
||||
|
||||
`systemctl`
|
||||
|
||||
: Runs `systemctl` commands with optional support for
|
||||
`systemctl --user`
|
||||
|
||||
```py
|
||||
machine.systemctl("list-jobs --no-pager") # runs `systemctl list-jobs --no-pager`
|
||||
machine.systemctl("list-jobs --no-pager", "any-user") # spawns a shell for `any-user` and runs `systemctl --user list-jobs --no-pager`
|
||||
```
|
||||
|
||||
`shell_interact`
|
||||
|
||||
: Allows you to directly interact with the guest shell. This should
|
||||
only be used during test development, not in production tests.
|
||||
Killing the interactive session with `Ctrl-d` or `Ctrl-c` also ends
|
||||
the guest session.
|
||||
|
||||
`console_interact`
|
||||
|
||||
: Allows you to directly interact with QEMU's stdin. This should
|
||||
only be used during test development, not in production tests.
|
||||
Output from QEMU is only read line-wise. `Ctrl-c` kills QEMU and
|
||||
`Ctrl-d` closes console and returns to the test runner.
|
||||
@PYTHON_MACHINE_METHODS@
|
||||
|
||||
To test user units declared by `systemd.user.services` the optional
|
||||
`user` argument can be used:
|
||||
|
|
66
nixos/lib/test-driver/extract-docstrings.py
Normal file
66
nixos/lib/test-driver/extract-docstrings.py
Normal file
|
@ -0,0 +1,66 @@
|
|||
import ast
|
||||
import sys
|
||||
|
||||
"""
|
||||
This program takes all the Machine class methods and prints its methods in
|
||||
markdown-style. These can then be included in the NixOS test driver
|
||||
markdown style, assuming the docstrings themselves are also in markdown.
|
||||
|
||||
These are included in the test driver documentation in the NixOS manual.
|
||||
See https://nixos.org/manual/nixos/stable/#ssec-machine-objects
|
||||
|
||||
The python input looks like this:
|
||||
|
||||
```py
|
||||
...
|
||||
|
||||
class Machine(...):
|
||||
...
|
||||
|
||||
def some_function(self, param1, param2):
|
||||
""
|
||||
documentation string of some_function.
|
||||
foo bar baz.
|
||||
""
|
||||
...
|
||||
```
|
||||
|
||||
Output will be:
|
||||
|
||||
```markdown
|
||||
...
|
||||
|
||||
some_function(param1, param2)
|
||||
|
||||
: documentation string of some_function.
|
||||
foo bar baz.
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
"""
|
||||
|
||||
assert len(sys.argv) == 2
|
||||
|
||||
with open(sys.argv[1], "r") as f:
|
||||
module = ast.parse(f.read())
|
||||
|
||||
class_definitions = (node for node in module.body if isinstance(node, ast.ClassDef))
|
||||
|
||||
machine_class = next(filter(lambda x: x.name == "Machine", class_definitions))
|
||||
assert machine_class is not None
|
||||
|
||||
function_definitions = [
|
||||
node for node in machine_class.body if isinstance(node, ast.FunctionDef)
|
||||
]
|
||||
function_definitions.sort(key=lambda x: x.name)
|
||||
|
||||
for f in function_definitions:
|
||||
docstr = ast.get_docstring(f)
|
||||
if docstr is not None:
|
||||
args = ", ".join((a.arg for a in f.args.args[1:]))
|
||||
args = f"({args})"
|
||||
|
||||
docstr = "\n".join((f" {l}" for l in docstr.strip().splitlines()))
|
||||
|
||||
print(f"{f.name}{args}\n\n:{docstr[1:]}\n")
|
13
nixos/lib/test-driver/nixos-test-driver-docstrings.nix
Normal file
13
nixos/lib/test-driver/nixos-test-driver-docstrings.nix
Normal file
|
@ -0,0 +1,13 @@
|
|||
{ runCommand
|
||||
, python3
|
||||
}:
|
||||
|
||||
let
|
||||
env = { nativeBuildInputs = [ python3 ]; };
|
||||
in
|
||||
|
||||
runCommand "nixos-test-driver-docstrings" env ''
|
||||
mkdir $out
|
||||
python3 ${./extract-docstrings.py} ${./test_driver/machine.py} \
|
||||
> $out/machine-methods.md
|
||||
''
|
|
@ -416,6 +416,10 @@ class Machine:
|
|||
return answer
|
||||
|
||||
def send_monitor_command(self, command: str) -> str:
|
||||
"""
|
||||
Send a command to the QEMU monitor. This allows attaching
|
||||
virtual USB disks to a running machine, among other things.
|
||||
"""
|
||||
self.run_callbacks()
|
||||
message = f"{command}\n".encode()
|
||||
assert self.monitor is not None
|
||||
|
@ -425,9 +429,10 @@ class Machine:
|
|||
def wait_for_unit(
|
||||
self, unit: str, user: Optional[str] = None, timeout: int = 900
|
||||
) -> None:
|
||||
"""Wait for a systemd unit to get into "active" state.
|
||||
Throws exceptions on "failed" and "inactive" states as well as
|
||||
after timing out.
|
||||
"""
|
||||
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:
|
||||
|
@ -476,6 +481,19 @@ class Machine:
|
|||
)
|
||||
|
||||
def systemctl(self, q: str, user: Optional[str] = None) -> Tuple[int, str]:
|
||||
"""
|
||||
Runs `systemctl` commands with optional support for
|
||||
`systemctl --user`
|
||||
|
||||
```py
|
||||
# run `systemctl list-jobs --no-pager`
|
||||
machine.systemctl("list-jobs --no-pager")
|
||||
|
||||
# spawn a shell for `any-user` and run
|
||||
# `systemctl --user list-jobs --no-pager`
|
||||
machine.systemctl("list-jobs --no-pager", "any-user")
|
||||
```
|
||||
"""
|
||||
if user is not None:
|
||||
q = q.replace("'", "\\'")
|
||||
return self.execute(
|
||||
|
@ -520,6 +538,38 @@ class Machine:
|
|||
check_output: bool = True,
|
||||
timeout: Optional[int] = 900,
|
||||
) -> Tuple[int, str]:
|
||||
"""
|
||||
Execute a shell command, returning a list `(status, stdout)`.
|
||||
|
||||
Commands are run with `set -euo pipefail` set:
|
||||
|
||||
- If several commands are separated by `;` and one fails, the
|
||||
command as a whole will fail.
|
||||
|
||||
- For pipelines, the last non-zero exit status will be returned
|
||||
(if there is one; otherwise zero will be returned).
|
||||
|
||||
- Dereferencing unset variables fails the command.
|
||||
|
||||
- It will wait for stdout to be closed.
|
||||
|
||||
If the command detaches, it must close stdout, as `execute` will wait
|
||||
for this to consume all output reliably. This can be achieved by
|
||||
redirecting stdout to stderr `>&2`, to `/dev/console`, `/dev/null` or
|
||||
a file. Examples of detaching commands are `sleep 365d &`, where the
|
||||
shell forks a new process that can write to stdout and `xclip -i`, where
|
||||
the `xclip` command itself forks without closing stdout.
|
||||
|
||||
Takes an optional parameter `check_return` that defaults to `True`.
|
||||
Setting this parameter to `False` will not check for the return code
|
||||
and return -1 instead. This can be used for commands that shut down
|
||||
the VM and would therefore break the pipe that would be used for
|
||||
retrieving the return code.
|
||||
|
||||
A timeout for the command can be specified (in seconds) using the optional
|
||||
`timeout` parameter, e.g., `execute(cmd, timeout=10)` or
|
||||
`execute(cmd, timeout=None)`. The default is 900 seconds.
|
||||
"""
|
||||
self.run_callbacks()
|
||||
self.connect()
|
||||
|
||||
|
@ -555,10 +605,11 @@ class Machine:
|
|||
return (rc, output.decode(errors="replace"))
|
||||
|
||||
def shell_interact(self, address: Optional[str] = None) -> None:
|
||||
"""Allows you to interact with the guest shell for debugging purposes.
|
||||
|
||||
@address string passed to socat that will be connected to the guest shell.
|
||||
Check the `Running Tests interactivly` chapter of NixOS manual for an example.
|
||||
"""
|
||||
Allows you to directly interact with the guest shell. This should
|
||||
only be used during test development, not in production tests.
|
||||
Killing the interactive session with `Ctrl-d` or `Ctrl-c` also ends
|
||||
the guest session.
|
||||
"""
|
||||
self.connect()
|
||||
|
||||
|
@ -577,12 +628,14 @@ class Machine:
|
|||
pass
|
||||
|
||||
def console_interact(self) -> None:
|
||||
"""Allows you to interact with QEMU's stdin
|
||||
|
||||
The shell can be exited with Ctrl+D. Note that Ctrl+C is not allowed to be used.
|
||||
QEMU's stdout is read line-wise.
|
||||
|
||||
Should only be used during test development, not in the production test."""
|
||||
"""
|
||||
Allows you to directly interact with QEMU's stdin, by forwarding
|
||||
terminal input to the QEMU process.
|
||||
This is for use with the interactive test driver, not for production
|
||||
tests, which run unattended.
|
||||
Output from QEMU is only read line-wise. `Ctrl-c` kills QEMU and
|
||||
`Ctrl-d` closes console and returns to the test runner.
|
||||
"""
|
||||
self.log("Terminal is ready (there is no prompt):")
|
||||
|
||||
assert self.process
|
||||
|
@ -599,7 +652,12 @@ class Machine:
|
|||
self.send_console(char.decode())
|
||||
|
||||
def succeed(self, *commands: str, timeout: Optional[int] = None) -> str:
|
||||
"""Execute each command and check that it succeeds."""
|
||||
"""
|
||||
Execute a shell command, raising an exception if the exit status is
|
||||
not zero, otherwise returning the standard output. Similar to `execute`,
|
||||
except that the timeout is `None` by default. See `execute` for details on
|
||||
command execution.
|
||||
"""
|
||||
output = ""
|
||||
for command in commands:
|
||||
with self.nested(f"must succeed: {command}"):
|
||||
|
@ -611,7 +669,10 @@ class Machine:
|
|||
return output
|
||||
|
||||
def fail(self, *commands: str, timeout: Optional[int] = None) -> str:
|
||||
"""Execute each command and check that it fails."""
|
||||
"""
|
||||
Like `succeed`, but raising an exception if the command returns a zero
|
||||
status.
|
||||
"""
|
||||
output = ""
|
||||
for command in commands:
|
||||
with self.nested(f"must fail: {command}"):
|
||||
|
@ -622,7 +683,11 @@ class Machine:
|
|||
return output
|
||||
|
||||
def wait_until_succeeds(self, command: str, timeout: int = 900) -> str:
|
||||
"""Wait until a command returns success and return its output.
|
||||
"""
|
||||
Repeat a shell command with 1-second intervals until it succeeds.
|
||||
Has a default timeout of 900 seconds which can be modified, e.g.
|
||||
`wait_until_succeeds(cmd, timeout=10)`. See `execute` for details on
|
||||
command execution.
|
||||
Throws an exception on timeout.
|
||||
"""
|
||||
output = ""
|
||||
|
@ -637,8 +702,8 @@ class Machine:
|
|||
return output
|
||||
|
||||
def wait_until_fails(self, command: str, timeout: int = 900) -> str:
|
||||
"""Wait until a command returns failure.
|
||||
Throws an exception on timeout.
|
||||
"""
|
||||
Like `wait_until_succeeds`, but repeating the command until it fails.
|
||||
"""
|
||||
output = ""
|
||||
|
||||
|
@ -690,12 +755,19 @@ class Machine:
|
|||
retry(tty_matches)
|
||||
|
||||
def send_chars(self, chars: str, delay: Optional[float] = 0.01) -> None:
|
||||
"""
|
||||
Simulate typing a sequence of characters on the virtual keyboard,
|
||||
e.g., `send_chars("foobar\n")` will type the string `foobar`
|
||||
followed by the Enter key.
|
||||
"""
|
||||
with self.nested(f"sending keys {repr(chars)}"):
|
||||
for char in chars:
|
||||
self.send_key(char, delay, log=False)
|
||||
|
||||
def wait_for_file(self, filename: str) -> None:
|
||||
"""Waits until the file exists in machine's file system."""
|
||||
"""
|
||||
Waits until the file exists in the machine's file system.
|
||||
"""
|
||||
|
||||
def check_file(_: Any) -> bool:
|
||||
status, _ = self.execute(f"test -e {filename}")
|
||||
|
@ -705,6 +777,11 @@ class Machine:
|
|||
retry(check_file)
|
||||
|
||||
def wait_for_open_port(self, port: int, addr: str = "localhost") -> None:
|
||||
"""
|
||||
Wait until a process is listening on the given TCP port and IP address
|
||||
(default `localhost`).
|
||||
"""
|
||||
|
||||
def port_is_open(_: Any) -> bool:
|
||||
status, _ = self.execute(f"nc -z {addr} {port}")
|
||||
return status == 0
|
||||
|
@ -713,6 +790,11 @@ class Machine:
|
|||
retry(port_is_open)
|
||||
|
||||
def wait_for_closed_port(self, port: int, addr: str = "localhost") -> None:
|
||||
"""
|
||||
Wait until nobody is listening on the given TCP port and IP address
|
||||
(default `localhost`).
|
||||
"""
|
||||
|
||||
def port_is_closed(_: Any) -> bool:
|
||||
status, _ = self.execute(f"nc -z {addr} {port}")
|
||||
return status != 0
|
||||
|
@ -766,6 +848,10 @@ class Machine:
|
|||
self.connected = True
|
||||
|
||||
def screenshot(self, filename: str) -> None:
|
||||
"""
|
||||
Take a picture of the display of the virtual machine, in PNG format.
|
||||
The screenshot will be available in the derivation output.
|
||||
"""
|
||||
if "." not in filename:
|
||||
filename += ".png"
|
||||
if "/" not in filename:
|
||||
|
@ -795,8 +881,21 @@ class Machine:
|
|||
)
|
||||
|
||||
def copy_from_host(self, source: str, target: str) -> None:
|
||||
"""Copy a file from the host into the guest via the `shared_dir` shared
|
||||
among all the VMs (using a temporary directory).
|
||||
"""
|
||||
Copies a file from host to machine, e.g.,
|
||||
`copy_from_host("myfile", "/etc/my/important/file")`.
|
||||
|
||||
The first argument is the file on the host. Note that the "host" refers
|
||||
to the environment in which the test driver runs, which is typically the
|
||||
Nix build sandbox.
|
||||
|
||||
The second argument is the location of the file on the machine that will
|
||||
be written to.
|
||||
|
||||
The file is copied via the `shared_dir` directory which is shared among
|
||||
all the VMs (using a temporary directory).
|
||||
The access rights bits will mimic the ones from the host file and
|
||||
user:group will be root:root.
|
||||
"""
|
||||
host_src = Path(source)
|
||||
vm_target = Path(target)
|
||||
|
@ -848,12 +947,41 @@ class Machine:
|
|||
return _perform_ocr_on_screenshot(screenshot_path, model_ids)
|
||||
|
||||
def get_screen_text_variants(self) -> List[str]:
|
||||
"""
|
||||
Return a list of different interpretations of what is currently
|
||||
visible on the machine's screen using optical character
|
||||
recognition. The number and order of the interpretations is not
|
||||
specified and is subject to change, but if no exception is raised at
|
||||
least one will be returned.
|
||||
|
||||
::: {.note}
|
||||
This requires [`enableOCR`](#test-opt-enableOCR) to be set to `true`.
|
||||
:::
|
||||
"""
|
||||
return self._get_screen_text_variants([0, 1, 2])
|
||||
|
||||
def get_screen_text(self) -> str:
|
||||
"""
|
||||
Return a textual representation of what is currently visible on the
|
||||
machine's screen using optical character recognition.
|
||||
|
||||
::: {.note}
|
||||
This requires [`enableOCR`](#test-opt-enableOCR) to be set to `true`.
|
||||
:::
|
||||
"""
|
||||
return self._get_screen_text_variants([2])[0]
|
||||
|
||||
def wait_for_text(self, regex: str) -> None:
|
||||
"""
|
||||
Wait until the supplied regular expressions matches the textual
|
||||
contents of the screen by using optical character recognition (see
|
||||
`get_screen_text` and `get_screen_text_variants`).
|
||||
|
||||
::: {.note}
|
||||
This requires [`enableOCR`](#test-opt-enableOCR) to be set to `true`.
|
||||
:::
|
||||
"""
|
||||
|
||||
def screen_matches(last: bool) -> bool:
|
||||
variants = self.get_screen_text_variants()
|
||||
for text in variants:
|
||||
|
@ -870,12 +998,9 @@ class Machine:
|
|||
|
||||
def wait_for_console_text(self, regex: str, timeout: int | None = None) -> None:
|
||||
"""
|
||||
Wait for the provided regex to appear on console.
|
||||
For each reads,
|
||||
|
||||
If timeout is None, timeout is infinite.
|
||||
|
||||
`timeout` is in seconds.
|
||||
Wait until the supplied regular expressions match a line of the
|
||||
serial console output.
|
||||
This method is useful when OCR is not possible or inaccurate.
|
||||
"""
|
||||
# Buffer the console output, this is needed
|
||||
# to match multiline regexes.
|
||||
|
@ -903,6 +1028,13 @@ class Machine:
|
|||
def send_key(
|
||||
self, key: str, delay: Optional[float] = 0.01, log: Optional[bool] = True
|
||||
) -> None:
|
||||
"""
|
||||
Simulate pressing keys on the virtual keyboard, e.g.,
|
||||
`send_key("ctrl-alt-delete")`.
|
||||
|
||||
Please also refer to the QEMU documentation for more information on the
|
||||
input syntax: https://en.wikibooks.org/wiki/QEMU/Monitor#sendkey_keys
|
||||
"""
|
||||
key = CHAR_TO_KEY.get(key, key)
|
||||
context = self.nested(f"sending key {repr(key)}") if log else nullcontext()
|
||||
with context:
|
||||
|
@ -911,12 +1043,21 @@ class Machine:
|
|||
time.sleep(delay)
|
||||
|
||||
def send_console(self, chars: str) -> None:
|
||||
r"""
|
||||
Send keys to the kernel console. This allows interaction with the systemd
|
||||
emergency mode, for example. Takes a string that is sent, e.g.,
|
||||
`send_console("\n\nsystemctl default\n")`.
|
||||
"""
|
||||
assert self.process
|
||||
assert self.process.stdin
|
||||
self.process.stdin.write(chars.encode())
|
||||
self.process.stdin.flush()
|
||||
|
||||
def start(self, allow_reboot: bool = False) -> None:
|
||||
"""
|
||||
Start the virtual machine. This method is asynchronous --- it does
|
||||
not wait for the machine to finish booting.
|
||||
"""
|
||||
if self.booted:
|
||||
return
|
||||
|
||||
|
@ -974,6 +1115,9 @@ class Machine:
|
|||
rootlog.log("if you want to keep the VM state, pass --keep-vm-state")
|
||||
|
||||
def shutdown(self) -> None:
|
||||
"""
|
||||
Shut down the machine, waiting for the VM to exit.
|
||||
"""
|
||||
if not self.booted:
|
||||
return
|
||||
|
||||
|
@ -982,6 +1126,9 @@ class Machine:
|
|||
self.wait_for_shutdown()
|
||||
|
||||
def crash(self) -> None:
|
||||
"""
|
||||
Simulate a sudden power failure, by telling the VM to exit immediately.
|
||||
"""
|
||||
if not self.booted:
|
||||
return
|
||||
|
||||
|
@ -999,8 +1146,8 @@ class Machine:
|
|||
self.connected = False
|
||||
|
||||
def wait_for_x(self) -> None:
|
||||
"""Wait until it is possible to connect to the X server. Note that
|
||||
testing the existence of /tmp/.X11-unix/X0 is insufficient.
|
||||
"""
|
||||
Wait until it is possible to connect to the X server.
|
||||
"""
|
||||
|
||||
def check_x(_: Any) -> bool:
|
||||
|
@ -1023,6 +1170,10 @@ class Machine:
|
|||
).splitlines()
|
||||
|
||||
def wait_for_window(self, regexp: str) -> None:
|
||||
"""
|
||||
Wait until an X11 window has appeared whose name matches the given
|
||||
regular expression, e.g., `wait_for_window("Terminal")`.
|
||||
"""
|
||||
pattern = re.compile(regexp)
|
||||
|
||||
def window_is_visible(last_try: bool) -> bool:
|
||||
|
@ -1043,20 +1194,26 @@ class Machine:
|
|||
self.succeed(f"sleep {secs}")
|
||||
|
||||
def forward_port(self, host_port: int = 8080, guest_port: int = 80) -> None:
|
||||
"""Forward a TCP port on the host to a TCP port on the guest.
|
||||
"""
|
||||
Forward a TCP port on the host to a TCP port on the guest.
|
||||
Useful during interactive testing.
|
||||
"""
|
||||
self.send_monitor_command(f"hostfwd_add tcp::{host_port}-:{guest_port}")
|
||||
|
||||
def block(self) -> None:
|
||||
"""Make the machine unreachable by shutting down eth1 (the multicast
|
||||
interface used to talk to the other VMs). We keep eth0 up so that
|
||||
the test driver can continue to talk to the machine.
|
||||
"""
|
||||
Simulate unplugging the Ethernet cable that connects the machine to
|
||||
the other machines.
|
||||
This happens by shutting down eth1 (the multicast interface used to talk
|
||||
to the other VMs). eth0 is kept online to still enable the test driver
|
||||
to communicate with the machine.
|
||||
"""
|
||||
self.send_monitor_command("set_link virtio-net-pci.1 off")
|
||||
|
||||
def unblock(self) -> None:
|
||||
"""Make the machine reachable."""
|
||||
"""
|
||||
Undo the effect of `block`.
|
||||
"""
|
||||
self.send_monitor_command("set_link virtio-net-pci.1 on")
|
||||
|
||||
def release(self) -> None:
|
||||
|
|
|
@ -65,7 +65,8 @@ let
|
|||
echo "${builtins.toString vlanNames}" >> testScriptWithTypes
|
||||
echo -n "$testScript" >> testScriptWithTypes
|
||||
|
||||
cat -n testScriptWithTypes
|
||||
echo "Running type check (enable/disable: config.skipTypeCheck)"
|
||||
echo "See https://nixos.org/manual/nixos/stable/#test-opt-skipTypeCheck"
|
||||
|
||||
mypy --no-implicit-optional \
|
||||
--pretty \
|
||||
|
@ -79,6 +80,9 @@ let
|
|||
|
||||
${testDriver}/bin/generate-driver-symbols
|
||||
${lib.optionalString (!config.skipLint) ''
|
||||
echo "Linting test script (enable/disable: config.skipLint)"
|
||||
echo "See https://nixos.org/manual/nixos/stable/#test-opt-skipLint"
|
||||
|
||||
PYFLAKES_BUILTINS="$(
|
||||
echo -n ${lib.escapeShellArg (lib.concatStringsSep "," pythonizedNames)},
|
||||
< ${lib.escapeShellArg "driver-symbols"}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
inherit (lib)
|
||||
mkDefault
|
||||
mkIf
|
||||
mkOption
|
||||
stringAfter
|
||||
|
@ -21,13 +22,42 @@ in
|
|||
{
|
||||
options = {
|
||||
nix = {
|
||||
channel = {
|
||||
enable = mkOption {
|
||||
description = lib.mdDoc ''
|
||||
Whether the `nix-channel` command and state files are made available on the machine.
|
||||
|
||||
The following files are initialized when enabled:
|
||||
- `/nix/var/nix/profiles/per-user/root/channels`
|
||||
- `/root/.nix-channels`
|
||||
- `$HOME/.nix-defexpr/channels` (on login)
|
||||
|
||||
Disabling this option will not remove the state files from the system.
|
||||
'';
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
};
|
||||
|
||||
nixPath = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [
|
||||
"nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos"
|
||||
"nixos-config=/etc/nixos/configuration.nix"
|
||||
"/nix/var/nix/profiles/per-user/root/channels"
|
||||
];
|
||||
default =
|
||||
if cfg.channel.enable
|
||||
then [
|
||||
"nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos"
|
||||
"nixos-config=/etc/nixos/configuration.nix"
|
||||
"/nix/var/nix/profiles/per-user/root/channels"
|
||||
]
|
||||
else [];
|
||||
defaultText = ''
|
||||
if nix.channel.enable
|
||||
then [
|
||||
"nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos"
|
||||
"nixos-config=/etc/nixos/configuration.nix"
|
||||
"/nix/var/nix/profiles/per-user/root/channels"
|
||||
]
|
||||
else [];
|
||||
'';
|
||||
description = lib.mdDoc ''
|
||||
The default Nix expression search path, used by the Nix
|
||||
evaluator to look up paths enclosed in angle brackets
|
||||
|
@ -49,22 +79,30 @@ in
|
|||
config = mkIf cfg.enable {
|
||||
|
||||
environment.extraInit =
|
||||
''
|
||||
mkIf cfg.channel.enable ''
|
||||
if [ -e "$HOME/.nix-defexpr/channels" ]; then
|
||||
export NIX_PATH="$HOME/.nix-defexpr/channels''${NIX_PATH:+:$NIX_PATH}"
|
||||
fi
|
||||
'';
|
||||
|
||||
environment.extraSetup = mkIf (!cfg.channel.enable) ''
|
||||
rm $out/bin/nix-channel
|
||||
'';
|
||||
|
||||
# NIX_PATH has a non-empty default according to Nix docs, so we don't unset
|
||||
# it when empty.
|
||||
environment.sessionVariables = {
|
||||
NIX_PATH = cfg.nixPath;
|
||||
};
|
||||
|
||||
system.activationScripts.nix-channel = stringAfter [ "etc" "users" ]
|
||||
''
|
||||
nix.settings.nix-path = mkIf (! cfg.channel.enable) (mkDefault "");
|
||||
|
||||
system.activationScripts.nix-channel = mkIf cfg.channel.enable
|
||||
(stringAfter [ "etc" "users" ] ''
|
||||
# Subscribe the root user to the NixOS channel by default.
|
||||
if [ ! -e "/root/.nix-channels" ]; then
|
||||
echo "${config.system.defaultChannel} nixos" > "/root/.nix-channels"
|
||||
fi
|
||||
'';
|
||||
'');
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1142,6 +1142,7 @@
|
|||
./services/security/vaultwarden/default.nix
|
||||
./services/security/yubikey-agent.nix
|
||||
./services/system/automatic-timezoned.nix
|
||||
./services/system/bpftune.nix
|
||||
./services/system/cachix-agent/default.nix
|
||||
./services/system/cachix-watch-store.nix
|
||||
./services/system/cloud-init.nix
|
||||
|
@ -1255,6 +1256,7 @@
|
|||
./services/web-apps/rss-bridge.nix
|
||||
./services/web-apps/selfoss.nix
|
||||
./services/web-apps/shiori.nix
|
||||
./services/web-apps/slskd.nix
|
||||
./services/web-apps/snipe-it.nix
|
||||
./services/web-apps/sogo.nix
|
||||
./services/web-apps/trilium.nix
|
||||
|
|
|
@ -123,8 +123,8 @@ in
|
|||
boot.extraModulePackages = [ (lib.mkIf cfg.netatop.enable cfg.netatop.package) ];
|
||||
systemd =
|
||||
let
|
||||
mkSystemd = type: cond: name: restartTriggers: {
|
||||
${name} = lib.mkIf cond {
|
||||
mkSystemd = type: name: restartTriggers: {
|
||||
${name} = {
|
||||
inherit restartTriggers;
|
||||
wantedBy = [ (if type == "services" then "multi-user.target" else if type == "timers" then "timers.target" else null) ];
|
||||
};
|
||||
|
@ -134,42 +134,44 @@ in
|
|||
in
|
||||
{
|
||||
packages = [ atop (lib.mkIf cfg.netatop.enable cfg.netatop.package) ];
|
||||
services =
|
||||
mkService cfg.atopService.enable "atop" [ atop ]
|
||||
// lib.mkIf cfg.atopService.enable {
|
||||
# always convert logs to newer version first
|
||||
# XXX might trigger TimeoutStart but restarting atop.service will
|
||||
# convert remainings logs and start eventually
|
||||
atop.serviceConfig.ExecStartPre = pkgs.writeShellScript "atop-update-log-format" ''
|
||||
set -e -u
|
||||
shopt -s nullglob
|
||||
for logfile in "$LOGPATH"/atop_*
|
||||
do
|
||||
${atop}/bin/atopconvert "$logfile" "$logfile".new
|
||||
# only replace old file if version was upgraded to avoid
|
||||
# false positives for atop-rotate.service
|
||||
if ! ${pkgs.diffutils}/bin/cmp -s "$logfile" "$logfile".new
|
||||
then
|
||||
${pkgs.coreutils}/bin/mv -v -f "$logfile".new "$logfile"
|
||||
else
|
||||
${pkgs.coreutils}/bin/rm -f "$logfile".new
|
||||
fi
|
||||
done
|
||||
'';
|
||||
}
|
||||
// mkService cfg.atopacctService.enable "atopacct" [ atop ]
|
||||
// mkService cfg.netatop.enable "netatop" [ cfg.netatop.package ]
|
||||
// mkService cfg.atopgpu.enable "atopgpu" [ atop ];
|
||||
timers = mkTimer cfg.atopRotateTimer.enable "atop-rotate" [ atop ];
|
||||
services = lib.mkMerge [
|
||||
(lib.mkIf cfg.atopService.enable (lib.recursiveUpdate
|
||||
(mkService "atop" [ atop ])
|
||||
{
|
||||
# always convert logs to newer version first
|
||||
# XXX might trigger TimeoutStart but restarting atop.service will
|
||||
# convert remainings logs and start eventually
|
||||
atop.preStart = ''
|
||||
set -e -u
|
||||
shopt -s nullglob
|
||||
for logfile in "$LOGPATH"/atop_*
|
||||
do
|
||||
${atop}/bin/atopconvert "$logfile" "$logfile".new
|
||||
# only replace old file if version was upgraded to avoid
|
||||
# false positives for atop-rotate.service
|
||||
if ! ${pkgs.diffutils}/bin/cmp -s "$logfile" "$logfile".new
|
||||
then
|
||||
${pkgs.coreutils}/bin/mv -v -f "$logfile".new "$logfile"
|
||||
else
|
||||
${pkgs.coreutils}/bin/rm -f "$logfile".new
|
||||
fi
|
||||
done
|
||||
'';
|
||||
}))
|
||||
(lib.mkIf cfg.atopacctService.enable (mkService "atopacct" [ atop ]))
|
||||
(lib.mkIf cfg.netatop.enable (mkService "netatop" [ cfg.netatop.package ]))
|
||||
(lib.mkIf cfg.atopgpu.enable (mkService "atopgpu" [ atop ]))
|
||||
];
|
||||
timers = lib.mkIf cfg.atopRotateTimer.enable (mkTimer "atop-rotate" [ atop ]);
|
||||
};
|
||||
|
||||
security.wrappers = lib.mkIf cfg.setuidWrapper.enable {
|
||||
atop =
|
||||
{ setuid = true;
|
||||
owner = "root";
|
||||
group = "root";
|
||||
source = "${atop}/bin/atop";
|
||||
};
|
||||
atop = {
|
||||
setuid = true;
|
||||
owner = "root";
|
||||
group = "root";
|
||||
source = "${atop}/bin/atop";
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
|
|
|
@ -233,7 +233,6 @@ in
|
|||
nixpkgs.config.firefox = {
|
||||
enableBrowserpass = nmh.browserpass;
|
||||
enableBukubrow = nmh.bukubrow;
|
||||
enableEUWebID = nmh.euwebid;
|
||||
enableTridactylNative = nmh.tridactyl;
|
||||
enableUgetIntegrator = nmh.ugetIntegrator;
|
||||
enableFXCastBridge = nmh.fxCast;
|
||||
|
|
|
@ -6,9 +6,6 @@ let
|
|||
defaultGroup = "patroni";
|
||||
format = pkgs.formats.yaml { };
|
||||
|
||||
#boto doesn't support python 3.10 yet
|
||||
patroni = pkgs.patroni.override { pythonPackages = pkgs.python39Packages; };
|
||||
|
||||
configFileName = "patroni-${cfg.scope}-${cfg.name}.yaml";
|
||||
configFile = format.generate configFileName cfg.settings;
|
||||
in
|
||||
|
@ -224,7 +221,7 @@ in
|
|||
|
||||
script = ''
|
||||
${concatStringsSep "\n" (attrValues (mapAttrs (name: path: ''export ${name}="$(< ${escapeShellArg path})"'') cfg.environmentFiles))}
|
||||
exec ${patroni}/bin/patroni ${configFile}
|
||||
exec ${pkgs.patroni}/bin/patroni ${configFile}
|
||||
'';
|
||||
|
||||
serviceConfig = mkMerge [
|
||||
|
@ -252,7 +249,7 @@ in
|
|||
'';
|
||||
|
||||
environment.systemPackages = [
|
||||
patroni
|
||||
pkgs.patroni
|
||||
cfg.postgresqlPackage
|
||||
(mkIf cfg.raft pkgs.python310Packages.pysyncobj)
|
||||
];
|
||||
|
|
|
@ -1,64 +1,49 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.buildkite-agents;
|
||||
|
||||
mkHookOption = { name, description, example ? null }: {
|
||||
inherit name;
|
||||
value = mkOption {
|
||||
default = null;
|
||||
description = lib.mdDoc description;
|
||||
type = types.nullOr types.lines;
|
||||
} // (lib.optionalAttrs (example != null) { inherit example; });
|
||||
};
|
||||
mkHookOptions = hooks: listToAttrs (map mkHookOption hooks);
|
||||
|
||||
hooksDir = cfg: let
|
||||
mkHookEntry = name: value: ''
|
||||
cat > $out/${name} <<'EOF'
|
||||
#! ${pkgs.runtimeShell}
|
||||
set -e
|
||||
${value}
|
||||
EOF
|
||||
chmod 755 $out/${name}
|
||||
hooksDir = hooks:
|
||||
let
|
||||
mkHookEntry = name: text: ''
|
||||
ln --symbolic ${pkgs.writeShellApplication { inherit name text; }}/bin/${name} $out/${name}
|
||||
'';
|
||||
in
|
||||
pkgs.runCommandLocal "buildkite-agent-hooks" { } ''
|
||||
mkdir $out
|
||||
${lib.concatStringsSep "\n" (lib.mapAttrsToList mkHookEntry hooks)}
|
||||
'';
|
||||
in pkgs.runCommand "buildkite-agent-hooks" { preferLocalBuild = true; } ''
|
||||
mkdir $out
|
||||
${concatStringsSep "\n" (mapAttrsToList mkHookEntry (filterAttrs (n: v: v != null) cfg.hooks))}
|
||||
'';
|
||||
|
||||
buildkiteOptions = { name ? "", config, ... }: {
|
||||
options = {
|
||||
enable = mkOption {
|
||||
enable = lib.mkOption {
|
||||
default = true;
|
||||
type = types.bool;
|
||||
type = lib.types.bool;
|
||||
description = lib.mdDoc "Whether to enable this buildkite agent";
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
package = lib.mkOption {
|
||||
default = pkgs.buildkite-agent;
|
||||
defaultText = literalExpression "pkgs.buildkite-agent";
|
||||
defaultText = lib.literalExpression "pkgs.buildkite-agent";
|
||||
description = lib.mdDoc "Which buildkite-agent derivation to use";
|
||||
type = types.package;
|
||||
type = lib.types.package;
|
||||
};
|
||||
|
||||
dataDir = mkOption {
|
||||
dataDir = lib.mkOption {
|
||||
default = "/var/lib/buildkite-agent-${name}";
|
||||
description = lib.mdDoc "The workdir for the agent";
|
||||
type = types.str;
|
||||
type = lib.types.str;
|
||||
};
|
||||
|
||||
runtimePackages = mkOption {
|
||||
runtimePackages = lib.mkOption {
|
||||
default = [ pkgs.bash pkgs.gnutar pkgs.gzip pkgs.git pkgs.nix ];
|
||||
defaultText = literalExpression "[ pkgs.bash pkgs.gnutar pkgs.gzip pkgs.git pkgs.nix ]";
|
||||
defaultText = lib.literalExpression "[ pkgs.bash pkgs.gnutar pkgs.gzip pkgs.git pkgs.nix ]";
|
||||
description = lib.mdDoc "Add programs to the buildkite-agent environment";
|
||||
type = types.listOf types.package;
|
||||
type = lib.types.listOf lib.types.package;
|
||||
};
|
||||
|
||||
tokenPath = mkOption {
|
||||
type = types.path;
|
||||
tokenPath = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
description = lib.mdDoc ''
|
||||
The token from your Buildkite "Agents" page.
|
||||
|
||||
|
@ -67,25 +52,25 @@ let
|
|||
'';
|
||||
};
|
||||
|
||||
name = mkOption {
|
||||
type = types.str;
|
||||
name = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "%hostname-${name}-%n";
|
||||
description = lib.mdDoc ''
|
||||
The name of the agent as seen in the buildkite dashboard.
|
||||
'';
|
||||
};
|
||||
|
||||
tags = mkOption {
|
||||
type = types.attrsOf (types.either types.str (types.listOf types.str));
|
||||
default = {};
|
||||
example = { queue = "default"; docker = "true"; ruby2 ="true"; };
|
||||
tags = lib.mkOption {
|
||||
type = lib.types.attrsOf (lib.types.either lib.types.str (lib.types.listOf lib.types.str));
|
||||
default = { };
|
||||
example = { queue = "default"; docker = "true"; ruby2 = "true"; };
|
||||
description = lib.mdDoc ''
|
||||
Tags for the agent.
|
||||
'';
|
||||
};
|
||||
|
||||
extraConfig = mkOption {
|
||||
type = types.lines;
|
||||
extraConfig = lib.mkOption {
|
||||
type = lib.types.lines;
|
||||
default = "";
|
||||
example = "debug=true";
|
||||
description = lib.mdDoc ''
|
||||
|
@ -93,8 +78,8 @@ let
|
|||
'';
|
||||
};
|
||||
|
||||
privateSshKeyPath = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
privateSshKeyPath = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
default = null;
|
||||
## maximum care is taken so that secrets (ssh keys and the CI token)
|
||||
## don't end up in the Nix store.
|
||||
|
@ -108,67 +93,25 @@ let
|
|||
'';
|
||||
};
|
||||
|
||||
hooks = mkHookOptions [
|
||||
{ name = "checkout";
|
||||
description = ''
|
||||
The `checkout` hook script will replace the default checkout routine of the
|
||||
bootstrap.sh script. You can use this hook to do your own SCM checkout
|
||||
behaviour
|
||||
''; }
|
||||
{ name = "command";
|
||||
description = ''
|
||||
The `command` hook script will replace the default implementation of running
|
||||
the build command.
|
||||
''; }
|
||||
{ name = "environment";
|
||||
description = ''
|
||||
The `environment` hook will run before all other commands, and can be used
|
||||
to set up secrets, data, etc. Anything exported in hooks will be available
|
||||
to the build script.
|
||||
hooks = lib.mkOption {
|
||||
type = lib.types.attrsOf lib.types.lines;
|
||||
default = { };
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
environment = '''
|
||||
export SECRET_VAR=`head -1 /run/keys/secret`
|
||||
''';
|
||||
}'';
|
||||
description = lib.mdDoc ''
|
||||
"Agent" hooks to install.
|
||||
See <https://buildkite.com/docs/agent/v3/hooks> for possible options.
|
||||
'';
|
||||
};
|
||||
|
||||
Note: the contents of this file will be copied to the world-readable
|
||||
Nix store.
|
||||
'';
|
||||
example = ''
|
||||
export SECRET_VAR=`head -1 /run/keys/secret`
|
||||
''; }
|
||||
{ name = "post-artifact";
|
||||
description = ''
|
||||
The `post-artifact` hook will run just after artifacts are uploaded
|
||||
''; }
|
||||
{ name = "post-checkout";
|
||||
description = ''
|
||||
The `post-checkout` hook will run after the bootstrap script has checked out
|
||||
your projects source code.
|
||||
''; }
|
||||
{ name = "post-command";
|
||||
description = ''
|
||||
The `post-command` hook will run after the bootstrap script has run your
|
||||
build commands
|
||||
''; }
|
||||
{ name = "pre-artifact";
|
||||
description = ''
|
||||
The `pre-artifact` hook will run just before artifacts are uploaded
|
||||
''; }
|
||||
{ name = "pre-checkout";
|
||||
description = ''
|
||||
The `pre-checkout` hook will run just before your projects source code is
|
||||
checked out from your SCM provider
|
||||
''; }
|
||||
{ name = "pre-command";
|
||||
description = ''
|
||||
The `pre-command` hook will run just before your build command runs
|
||||
''; }
|
||||
{ name = "pre-exit";
|
||||
description = ''
|
||||
The `pre-exit` hook will run just before your build job finishes
|
||||
''; }
|
||||
];
|
||||
|
||||
hooksPath = mkOption {
|
||||
type = types.path;
|
||||
default = hooksDir config;
|
||||
defaultText = literalMD "generated from {option}`services.buildkite-agents.<name>.hooks`";
|
||||
hooksPath = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
default = hooksDir config.hooks;
|
||||
defaultText = lib.literalMD "generated from {option}`services.buildkite-agents.<name>.hooks`";
|
||||
description = lib.mdDoc ''
|
||||
Path to the directory storing the hooks.
|
||||
Consider using {option}`services.buildkite-agents.<name>.hooks.<name>`
|
||||
|
@ -176,10 +119,10 @@ let
|
|||
'';
|
||||
};
|
||||
|
||||
shell = mkOption {
|
||||
type = types.str;
|
||||
shell = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "${pkgs.bash}/bin/bash -e -c";
|
||||
defaultText = literalExpression ''"''${pkgs.bash}/bin/bash -e -c"'';
|
||||
defaultText = lib.literalExpression ''"''${pkgs.bash}/bin/bash -e -c"'';
|
||||
description = lib.mdDoc ''
|
||||
Command that buildkite-agent 3 will execute when it spawns a shell.
|
||||
'';
|
||||
|
@ -190,9 +133,9 @@ let
|
|||
mapAgents = function: lib.mkMerge (lib.mapAttrsToList function enabledAgents);
|
||||
in
|
||||
{
|
||||
options.services.buildkite-agents = mkOption {
|
||||
type = types.attrsOf (types.submodule buildkiteOptions);
|
||||
default = {};
|
||||
options.services.buildkite-agents = lib.mkOption {
|
||||
type = lib.types.attrsOf (lib.types.submodule buildkiteOptions);
|
||||
default = { };
|
||||
description = lib.mdDoc ''
|
||||
Attribute set of buildkite agents.
|
||||
The attribute key is combined with the hostname and a unique integer to
|
||||
|
@ -213,23 +156,24 @@ in
|
|||
};
|
||||
});
|
||||
config.users.groups = mapAgents (name: cfg: {
|
||||
"buildkite-agent-${name}" = {};
|
||||
"buildkite-agent-${name}" = { };
|
||||
});
|
||||
|
||||
config.systemd.services = mapAgents (name: cfg: {
|
||||
"buildkite-agent-${name}" =
|
||||
{ description = "Buildkite Agent";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" ];
|
||||
path = cfg.runtimePackages ++ [ cfg.package pkgs.coreutils ];
|
||||
environment = config.networking.proxy.envVars // {
|
||||
HOME = cfg.dataDir;
|
||||
NIX_REMOTE = "daemon";
|
||||
};
|
||||
"buildkite-agent-${name}" = {
|
||||
description = "Buildkite Agent";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" ];
|
||||
path = cfg.runtimePackages ++ [ cfg.package pkgs.coreutils ];
|
||||
environment = config.networking.proxy.envVars // {
|
||||
HOME = cfg.dataDir;
|
||||
NIX_REMOTE = "daemon";
|
||||
};
|
||||
|
||||
## NB: maximum care is taken so that secrets (ssh keys and the CI token)
|
||||
## don't end up in the Nix store.
|
||||
preStart = let
|
||||
## NB: maximum care is taken so that secrets (ssh keys and the CI token)
|
||||
## don't end up in the Nix store.
|
||||
preStart =
|
||||
let
|
||||
sshDir = "${cfg.dataDir}/.ssh";
|
||||
tagStr = name: value:
|
||||
if lib.isList value
|
||||
|
@ -237,44 +181,39 @@ in
|
|||
else "${name}=${value}";
|
||||
tagsStr = lib.concatStringsSep "," (lib.mapAttrsToList tagStr cfg.tags);
|
||||
in
|
||||
optionalString (cfg.privateSshKeyPath != null) ''
|
||||
mkdir -m 0700 -p "${sshDir}"
|
||||
install -m600 "${toString cfg.privateSshKeyPath}" "${sshDir}/id_rsa"
|
||||
'' + ''
|
||||
cat > "${cfg.dataDir}/buildkite-agent.cfg" <<EOF
|
||||
token="$(cat ${toString cfg.tokenPath})"
|
||||
name="${cfg.name}"
|
||||
shell="${cfg.shell}"
|
||||
tags="${tagsStr}"
|
||||
build-path="${cfg.dataDir}/builds"
|
||||
hooks-path="${cfg.hooksPath}"
|
||||
${cfg.extraConfig}
|
||||
EOF
|
||||
'';
|
||||
lib.optionalString (cfg.privateSshKeyPath != null) ''
|
||||
mkdir -m 0700 -p "${sshDir}"
|
||||
install -m600 "${toString cfg.privateSshKeyPath}" "${sshDir}/id_rsa"
|
||||
'' + ''
|
||||
cat > "${cfg.dataDir}/buildkite-agent.cfg" <<EOF
|
||||
token="$(cat ${toString cfg.tokenPath})"
|
||||
name="${cfg.name}"
|
||||
shell="${cfg.shell}"
|
||||
tags="${tagsStr}"
|
||||
build-path="${cfg.dataDir}/builds"
|
||||
hooks-path="${cfg.hooksPath}"
|
||||
${cfg.extraConfig}
|
||||
EOF
|
||||
'';
|
||||
|
||||
serviceConfig =
|
||||
{ ExecStart = "${cfg.package}/bin/buildkite-agent start --config ${cfg.dataDir}/buildkite-agent.cfg";
|
||||
User = "buildkite-agent-${name}";
|
||||
RestartSec = 5;
|
||||
Restart = "on-failure";
|
||||
TimeoutSec = 10;
|
||||
# set a long timeout to give buildkite-agent a chance to finish current builds
|
||||
TimeoutStopSec = "2 min";
|
||||
KillMode = "mixed";
|
||||
};
|
||||
serviceConfig = {
|
||||
ExecStart = "${cfg.package}/bin/buildkite-agent start --config ${cfg.dataDir}/buildkite-agent.cfg";
|
||||
User = "buildkite-agent-${name}";
|
||||
RestartSec = 5;
|
||||
Restart = "on-failure";
|
||||
TimeoutSec = 10;
|
||||
# set a long timeout to give buildkite-agent a chance to finish current builds
|
||||
TimeoutStopSec = "2 min";
|
||||
KillMode = "mixed";
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
config.assertions = mapAgents (name: cfg: [
|
||||
{ assertion = cfg.hooksPath == (hooksDir cfg) || all (v: v == null) (attrValues cfg.hooks);
|
||||
message = ''
|
||||
Options `services.buildkite-agents.${name}.hooksPath' and
|
||||
`services.buildkite-agents.${name}.hooks.<name>' are mutually exclusive.
|
||||
'';
|
||||
}
|
||||
]);
|
||||
|
||||
imports = [
|
||||
(mkRemovedOptionModule [ "services" "buildkite-agent"] "services.buildkite-agent has been upgraded from version 2 to version 3 and moved to an attribute set at services.buildkite-agents. Please consult the 20.03 release notes for more information.")
|
||||
];
|
||||
config.assertions = mapAgents (name: cfg: [{
|
||||
assertion = cfg.hooksPath != hooksDir cfg.hooks -> cfg.hooks == { };
|
||||
message = ''
|
||||
Options `services.buildkite-agents.${name}.hooksPath' and
|
||||
`services.buildkite-agents.${name}.hooks.<name>' are mutually exclusive.
|
||||
'';
|
||||
}]);
|
||||
}
|
||||
|
|
|
@ -135,7 +135,7 @@ in {
|
|||
ExecStart = "${pkgs.sssd}/libexec/sssd/sssd_kcm --uid 0 --gid 0";
|
||||
};
|
||||
restartTriggers = [
|
||||
config.environment.etc."sssd/sssd.conf".source
|
||||
settingsFileUnsubstituted
|
||||
];
|
||||
};
|
||||
systemd.sockets.sssd-kcm = {
|
||||
|
|
|
@ -11,13 +11,6 @@ in {
|
|||
enable = mkEnableOption (lib.mdDoc ''
|
||||
Web Services Dynamic Discovery host daemon. This enables (Samba) hosts, like your local NAS device,
|
||||
to be found by Web Service Discovery Clients like Windows.
|
||||
|
||||
::: {.note}
|
||||
If you use the firewall consider adding the following:
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ 5357 ];
|
||||
networking.firewall.allowedUDPPorts = [ 3702 ];
|
||||
:::
|
||||
'');
|
||||
interface = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
|
@ -31,6 +24,13 @@ in {
|
|||
example = 2;
|
||||
description = lib.mdDoc "Hop limit for multicast packets (default = 1).";
|
||||
};
|
||||
openFirewall = mkOption {
|
||||
description = lib.mdDoc ''
|
||||
Whether to open the required firewall ports in the firewall.
|
||||
'';
|
||||
default = false;
|
||||
type = lib.types.bool;
|
||||
};
|
||||
workgroup = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
|
@ -120,5 +120,10 @@ in {
|
|||
SystemCallFilter = "~@cpu-emulation @debug @mount @obsolete @privileged @resources";
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall = mkIf cfg.openFirewall {
|
||||
allowedTCPPorts = [ 5357 ];
|
||||
allowedUDPPorts = [ 3702 ];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -121,7 +121,7 @@ in {
|
|||
The available configuration options can be found in
|
||||
[the environment template file](https://github.com/dani-garcia/vaultwarden/blob/${vaultwarden.version}/.env.template).
|
||||
|
||||
See ()[#opt-services.vaultwarden.environmentFile) for how
|
||||
See [](#opt-services.vaultwarden.environmentFile) for how
|
||||
to set up access to the Admin UI to invite initial users.
|
||||
'';
|
||||
};
|
||||
|
|
22
nixos/modules/services/system/bpftune.nix
Normal file
22
nixos/modules/services/system/bpftune.nix
Normal file
|
@ -0,0 +1,22 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
cfg = config.services.bpftune;
|
||||
in
|
||||
{
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ nickcao ];
|
||||
};
|
||||
|
||||
options = {
|
||||
services.bpftune = {
|
||||
enable = lib.mkEnableOption (lib.mdDoc "bpftune BPF driven auto-tuning");
|
||||
|
||||
package = lib.mkPackageOptionMD pkgs "bpftune" { };
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
systemd.packages = [ cfg.package ];
|
||||
systemd.services.bpftune.wantedBy = [ "multi-user.target" ];
|
||||
};
|
||||
}
|
211
nixos/modules/services/web-apps/slskd.nix
Normal file
211
nixos/modules/services/web-apps/slskd.nix
Normal file
|
@ -0,0 +1,211 @@
|
|||
{ lib, pkgs, config, ... }:
|
||||
|
||||
let
|
||||
settingsFormat = pkgs.formats.yaml {};
|
||||
in {
|
||||
options.services.slskd = with lib; with types; {
|
||||
enable = mkEnableOption "enable slskd";
|
||||
|
||||
rotateLogs = mkEnableOption "enable an unit and timer that will rotate logs in /var/slskd/logs";
|
||||
|
||||
package = mkPackageOptionMD pkgs "slskd" { };
|
||||
|
||||
nginx = mkOption {
|
||||
description = lib.mdDoc "options for nginx";
|
||||
example = {
|
||||
enable = true;
|
||||
domain = "example.com";
|
||||
contextPath = "/slskd";
|
||||
};
|
||||
type = submodule ({name, config, ...}: {
|
||||
options = {
|
||||
enable = mkEnableOption "enable nginx as a reverse proxy";
|
||||
|
||||
domainName = mkOption {
|
||||
type = str;
|
||||
description = "Domain you want to use";
|
||||
};
|
||||
contextPath = mkOption {
|
||||
type = types.path;
|
||||
default = "/";
|
||||
description = lib.mdDoc ''
|
||||
The context path, i.e., the last part of the slskd
|
||||
URL. Typically '/' or '/slskd'. Default '/'
|
||||
'';
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
environmentFile = mkOption {
|
||||
type = path;
|
||||
description = ''
|
||||
Path to a file containing secrets.
|
||||
It must at least contain the variable `SLSKD_SLSK_PASSWORD`
|
||||
'';
|
||||
};
|
||||
|
||||
openFirewall = mkOption {
|
||||
type = bool;
|
||||
description = ''
|
||||
Whether to open the firewall for services.slskd.settings.listen_port";
|
||||
'';
|
||||
default = false;
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
description = lib.mdDoc ''
|
||||
Configuration for slskd, see
|
||||
[available options](https://github.com/slskd/slskd/blob/master/docs/config.md)
|
||||
`APP_DIR` is set to /var/lib/slskd, where default download & incomplete directories,
|
||||
log and databases will be created.
|
||||
'';
|
||||
default = {};
|
||||
type = submodule {
|
||||
freeformType = settingsFormat.type;
|
||||
options = {
|
||||
|
||||
soulseek = {
|
||||
username = mkOption {
|
||||
type = str;
|
||||
description = "Username on the Soulseek Network";
|
||||
};
|
||||
listen_port = mkOption {
|
||||
type = port;
|
||||
description = "Port to use for communication on the Soulseek Network";
|
||||
default = 50000;
|
||||
};
|
||||
};
|
||||
|
||||
web = {
|
||||
port = mkOption {
|
||||
type = port;
|
||||
default = 5001;
|
||||
description = "The HTTP listen port";
|
||||
};
|
||||
url_base = mkOption {
|
||||
type = path;
|
||||
default = config.services.slskd.nginx.contextPath;
|
||||
defaultText = "config.services.slskd.nginx.contextPath";
|
||||
description = lib.mdDoc ''
|
||||
The context path, i.e., the last part of the slskd URL
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
shares = {
|
||||
directories = mkOption {
|
||||
type = listOf str;
|
||||
description = lib.mdDoc ''
|
||||
Paths to your shared directories. See
|
||||
[documentation](https://github.com/slskd/slskd/blob/master/docs/config.md#directories)
|
||||
for advanced usage
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
directories = {
|
||||
incomplete = mkOption {
|
||||
type = nullOr path;
|
||||
description = "Directory where downloading files are stored";
|
||||
defaultText = "<APP_DIR>/incomplete";
|
||||
default = null;
|
||||
};
|
||||
downloads = mkOption {
|
||||
type = nullOr path;
|
||||
description = "Directory where downloaded files are stored";
|
||||
defaultText = "<APP_DIR>/downloads";
|
||||
default = null;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = let
|
||||
cfg = config.services.slskd;
|
||||
|
||||
confWithoutNullValues = (lib.filterAttrs (key: value: value != null) cfg.settings);
|
||||
|
||||
configurationYaml = settingsFormat.generate "slskd.yml" confWithoutNullValues;
|
||||
|
||||
in lib.mkIf cfg.enable {
|
||||
|
||||
users = {
|
||||
users.slskd = {
|
||||
isSystemUser = true;
|
||||
group = "slskd";
|
||||
};
|
||||
groups.slskd = {};
|
||||
};
|
||||
|
||||
# Reverse proxy configuration
|
||||
services.nginx.enable = true;
|
||||
services.nginx.virtualHosts."${cfg.nginx.domainName}" = {
|
||||
forceSSL = true;
|
||||
enableACME = true;
|
||||
locations = {
|
||||
"${cfg.nginx.contextPath}" = {
|
||||
proxyPass = "http://localhost:${toString cfg.settings.web.port}";
|
||||
proxyWebsockets = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Hide state & logs
|
||||
systemd.tmpfiles.rules = [
|
||||
"d /var/lib/slskd/data 0750 slskd slskd - -"
|
||||
"d /var/lib/slskd/logs 0750 slskd slskd - -"
|
||||
];
|
||||
|
||||
systemd.services.slskd = {
|
||||
description = "A modern client-server application for the Soulseek file sharing network";
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = "slskd";
|
||||
EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile;
|
||||
StateDirectory = "slskd";
|
||||
ExecStart = "${cfg.package}/bin/slskd --app-dir /var/lib/slskd --config ${configurationYaml}";
|
||||
Restart = "on-failure";
|
||||
ReadOnlyPaths = map (d: builtins.elemAt (builtins.split "[^/]*(/.+)" d) 1) cfg.settings.shares.directories;
|
||||
LockPersonality = true;
|
||||
NoNewPrivileges = true;
|
||||
PrivateDevices = true;
|
||||
PrivateMounts = true;
|
||||
PrivateTmp = true;
|
||||
PrivateUsers = true;
|
||||
ProtectClock = true;
|
||||
ProtectControlGroups = true;
|
||||
ProtectHome = true;
|
||||
ProtectHostname = true;
|
||||
ProtectKernelLogs = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ProtectProc = "invisible";
|
||||
ProtectSystem = "strict";
|
||||
RemoveIPC = true;
|
||||
RestrictNamespaces = true;
|
||||
RestrictSUIDSGID = true;
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = lib.optional cfg.openFirewall cfg.settings.soulseek.listen_port;
|
||||
|
||||
systemd.services.slskd-rotatelogs = lib.mkIf cfg.rotateLogs {
|
||||
description = "Rotate slskd logs";
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
User = "slskd";
|
||||
ExecStart = [
|
||||
"${pkgs.findutils}/bin/find /var/lib/slskd/logs/ -type f -mtime +10 -delete"
|
||||
"${pkgs.findutils}/bin/find /var/lib/slskd/logs/ -type f -mtime +1 -exec ${pkgs.gzip}/bin/gzip -q {} ';'"
|
||||
];
|
||||
};
|
||||
startAt = "daily";
|
||||
};
|
||||
|
||||
};
|
||||
}
|
|
@ -91,7 +91,7 @@ in {
|
|||
Enables the (experimental) LXD UI.
|
||||
'');
|
||||
|
||||
package = mkPackageOption pkgs.lxd "ui" { };
|
||||
package = mkPackageOption pkgs.lxd-unwrapped "ui" { };
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -138,6 +138,7 @@ in {
|
|||
borgbackup = handleTest ./borgbackup.nix {};
|
||||
botamusique = handleTest ./botamusique.nix {};
|
||||
bpf = handleTestOn ["x86_64-linux" "aarch64-linux"] ./bpf.nix {};
|
||||
bpftune = handleTest ./bpftune.nix {};
|
||||
breitbandmessung = handleTest ./breitbandmessung.nix {};
|
||||
brscan5 = handleTest ./brscan5.nix {};
|
||||
btrbk = handleTest ./btrbk.nix {};
|
||||
|
|
20
nixos/tests/bpftune.nix
Normal file
20
nixos/tests/bpftune.nix
Normal file
|
@ -0,0 +1,20 @@
|
|||
import ./make-test-python.nix ({ lib, pkgs, ... }: {
|
||||
|
||||
name = "bpftune";
|
||||
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ nickcao ];
|
||||
};
|
||||
|
||||
nodes = {
|
||||
machine = { pkgs, ... }: {
|
||||
services.bpftune.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_unit("bpftune.service")
|
||||
machine.wait_for_console_text("bpftune works")
|
||||
'';
|
||||
|
||||
})
|
|
@ -11,16 +11,20 @@ let
|
|||
|
||||
# The configuration to install.
|
||||
makeConfig = { bootLoader, grubDevice, grubIdentifier, grubUseEfi
|
||||
, extraConfig, forceGrubReinstallCount ? 0
|
||||
, extraConfig, forceGrubReinstallCount ? 0, flake ? false
|
||||
}:
|
||||
pkgs.writeText "configuration.nix" ''
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{ imports =
|
||||
[ ./hardware-configuration.nix
|
||||
<nixpkgs/nixos/modules/testing/test-instrumentation.nix>
|
||||
${if flake
|
||||
then "" # Still included, but via installer/flake.nix
|
||||
else "<nixpkgs/nixos/modules/testing/test-instrumentation.nix>"}
|
||||
];
|
||||
|
||||
networking.hostName = "thatworked";
|
||||
|
||||
documentation.enable = false;
|
||||
|
||||
# To ensure that we can rebuild the grub configuration on the nixos-rebuild
|
||||
|
@ -67,7 +71,7 @@ let
|
|||
# partitions and filesystems.
|
||||
testScriptFun = { bootLoader, createPartitions, grubDevice, grubUseEfi
|
||||
, grubIdentifier, preBootCommands, postBootCommands, extraConfig
|
||||
, testSpecialisationConfig
|
||||
, testSpecialisationConfig, testFlakeSwitch
|
||||
}:
|
||||
let iface = "virtio";
|
||||
isEfi = bootLoader == "systemd-boot" || (bootLoader == "grub" && grubUseEfi);
|
||||
|
@ -86,9 +90,14 @@ let
|
|||
|
||||
qemu_flags = {"qemuFlags": assemble_qemu_flags()}
|
||||
|
||||
import os
|
||||
|
||||
image_dir = machine.state_dir
|
||||
disk_image = os.path.join(image_dir, "machine.qcow2")
|
||||
|
||||
hd_flags = {
|
||||
"hdaInterface": "${iface}",
|
||||
"hda": "vm-state-machine/machine.qcow2",
|
||||
"hda": disk_image,
|
||||
}
|
||||
${optionalString isEfi ''
|
||||
hd_flags.update(
|
||||
|
@ -232,6 +241,11 @@ let
|
|||
machine = create_machine_named("boot-after-rebuild-switch")
|
||||
${preBootCommands}
|
||||
machine.wait_for_unit("network.target")
|
||||
|
||||
# Sanity check, is it the configuration.nix we generated?
|
||||
hostname = machine.succeed("hostname").strip()
|
||||
assert hostname == "thatworked"
|
||||
|
||||
${postBootCommands}
|
||||
machine.shutdown()
|
||||
|
||||
|
@ -270,6 +284,84 @@ let
|
|||
with subtest("We should find a file named /etc/gitconfig"):
|
||||
machine.succeed("test -e /etc/gitconfig")
|
||||
|
||||
${postBootCommands}
|
||||
machine.shutdown()
|
||||
''
|
||||
+ optionalString testFlakeSwitch ''
|
||||
${preBootCommands}
|
||||
machine.start()
|
||||
|
||||
with subtest("Configure system with flake"):
|
||||
# TODO: evaluate as user?
|
||||
machine.succeed("""
|
||||
mkdir /root/my-config
|
||||
mv /etc/nixos/hardware-configuration.nix /root/my-config/
|
||||
mv /etc/nixos/secret /root/my-config/
|
||||
rm /etc/nixos/configuration.nix
|
||||
""")
|
||||
machine.copy_from_host_via_shell(
|
||||
"${makeConfig {
|
||||
inherit bootLoader grubDevice grubIdentifier grubUseEfi extraConfig;
|
||||
forceGrubReinstallCount = 1;
|
||||
flake = true;
|
||||
}}",
|
||||
"/root/my-config/configuration.nix",
|
||||
)
|
||||
machine.copy_from_host_via_shell(
|
||||
"${./installer/flake.nix}",
|
||||
"/root/my-config/flake.nix",
|
||||
)
|
||||
machine.succeed("""
|
||||
# for some reason the image does not have `pkgs.path`, so
|
||||
# we use readlink to find a Nixpkgs source.
|
||||
pkgs=$(readlink -f /nix/var/nix/profiles/per-user/root/channels)/nixos
|
||||
if ! [[ -e $pkgs/pkgs/top-level/default.nix ]]; then
|
||||
echo 1>&2 "$pkgs does not seem to be a nixpkgs source. Please fix the test so that pkgs points to a nixpkgs source.";
|
||||
exit 1;
|
||||
fi
|
||||
sed -e s^@nixpkgs@^$pkgs^ -i /root/my-config/flake.nix
|
||||
""")
|
||||
|
||||
with subtest("Switch to flake based config"):
|
||||
machine.succeed("nixos-rebuild switch --flake /root/my-config#xyz")
|
||||
|
||||
${postBootCommands}
|
||||
machine.shutdown()
|
||||
|
||||
${preBootCommands}
|
||||
machine.start()
|
||||
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
|
||||
with subtest("nix-channel command is not available anymore"):
|
||||
machine.succeed("! which nix-channel")
|
||||
|
||||
# Note that the channel profile is still present on disk, but configured
|
||||
# not to be used.
|
||||
with subtest("builtins.nixPath is now empty"):
|
||||
machine.succeed("""
|
||||
[[ "[ ]" == "$(nix-instantiate builtins.nixPath --eval --expr)" ]]
|
||||
""")
|
||||
|
||||
with subtest("<nixpkgs> does not resolve"):
|
||||
machine.succeed("""
|
||||
! nix-instantiate '<nixpkgs>' --eval --expr
|
||||
""")
|
||||
|
||||
with subtest("Evaluate flake config in fresh env without nix-channel"):
|
||||
machine.succeed("nixos-rebuild switch --flake /root/my-config#xyz")
|
||||
|
||||
with subtest("Evaluate flake config in fresh env without channel profiles"):
|
||||
machine.succeed("""
|
||||
(
|
||||
exec 1>&2
|
||||
rm -v /root/.nix-channels
|
||||
rm -vrf ~/.nix-defexpr
|
||||
rm -vrf /nix/var/nix/profiles/per-user/root/channels*
|
||||
)
|
||||
""")
|
||||
machine.succeed("nixos-rebuild switch --flake /root/my-config#xyz")
|
||||
|
||||
${postBootCommands}
|
||||
machine.shutdown()
|
||||
'';
|
||||
|
@ -282,6 +374,7 @@ let
|
|||
, grubDevice ? "/dev/vda", grubIdentifier ? "uuid", grubUseEfi ? false
|
||||
, enableOCR ? false, meta ? {}
|
||||
, testSpecialisationConfig ? false
|
||||
, testFlakeSwitch ? false
|
||||
}:
|
||||
makeTest {
|
||||
inherit enableOCR;
|
||||
|
@ -387,7 +480,7 @@ let
|
|||
testScript = testScriptFun {
|
||||
inherit bootLoader createPartitions preBootCommands postBootCommands
|
||||
grubDevice grubIdentifier grubUseEfi extraConfig
|
||||
testSpecialisationConfig;
|
||||
testSpecialisationConfig testFlakeSwitch;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -439,6 +532,10 @@ let
|
|||
'';
|
||||
};
|
||||
|
||||
simple-test-config-flake = simple-test-config // {
|
||||
testFlakeSwitch = true;
|
||||
};
|
||||
|
||||
simple-uefi-grub-config = {
|
||||
createPartitions = ''
|
||||
machine.succeed(
|
||||
|
@ -493,6 +590,8 @@ in {
|
|||
# one big filesystem partition.
|
||||
simple = makeInstallerTest "simple" simple-test-config;
|
||||
|
||||
switchToFlake = makeInstallerTest "switch-to-flake" simple-test-config-flake;
|
||||
|
||||
# Test cloned configurations with the simple grub configuration
|
||||
simpleSpecialised = makeInstallerTest "simpleSpecialised" (simple-test-config // specialisation-test-extraconfig);
|
||||
|
||||
|
|
20
nixos/tests/installer/flake.nix
Normal file
20
nixos/tests/installer/flake.nix
Normal file
|
@ -0,0 +1,20 @@
|
|||
# This file gets copied into the installation
|
||||
|
||||
{
|
||||
# To keep things simple, we'll use an absolute path dependency here.
|
||||
inputs.nixpkgs.url = "@nixpkgs@";
|
||||
|
||||
outputs = { nixpkgs, ... }: {
|
||||
|
||||
nixosConfigurations.xyz = nixpkgs.lib.nixosSystem {
|
||||
modules = [
|
||||
./configuration.nix
|
||||
( nixpkgs + "/nixos/modules/testing/test-instrumentation.nix" )
|
||||
{
|
||||
# We don't need nix-channel anymore
|
||||
nix.channel.enable = false;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
|
@ -9,7 +9,7 @@ let
|
|||
testsForLinuxPackages = linuxPackages: (import ./make-test-python.nix ({ pkgs, ... }: {
|
||||
name = "kernel-${linuxPackages.kernel.version}";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ nequissimus atemu ];
|
||||
maintainers = [ nequissimus atemu ma27 ];
|
||||
};
|
||||
|
||||
nodes.machine = { ... }:
|
||||
|
@ -33,6 +33,11 @@ let
|
|||
linux_6_1_hardened
|
||||
linux_6_3_hardened
|
||||
linux_6_4_hardened
|
||||
linux_rt_5_4
|
||||
linux_rt_5_10
|
||||
linux_rt_5_15
|
||||
linux_rt_6_1
|
||||
linux_libre
|
||||
|
||||
linux_testing;
|
||||
};
|
||||
|
|
|
@ -8,25 +8,23 @@ import ./make-test-python.nix ({ pkgs, ... }:
|
|||
client_wsdd = { pkgs, ... }: {
|
||||
services.samba-wsdd = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
interface = "eth1";
|
||||
workgroup = "WORKGROUP";
|
||||
hostname = "CLIENT-WSDD";
|
||||
discovery = true;
|
||||
extraOptions = [ "--no-host" ];
|
||||
};
|
||||
networking.firewall.allowedTCPPorts = [ 5357 ];
|
||||
networking.firewall.allowedUDPPorts = [ 3702 ];
|
||||
};
|
||||
|
||||
server_wsdd = { ... }: {
|
||||
services.samba-wsdd = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
interface = "eth1";
|
||||
workgroup = "WORKGROUP";
|
||||
hostname = "SERVER-WSDD";
|
||||
};
|
||||
networking.firewall.allowedTCPPorts = [ 5357 ];
|
||||
networking.firewall.allowedUDPPorts = [ 3702 ];
|
||||
};
|
||||
};
|
||||
|
||||
|
|
126
pkgs/applications/audio/bitwig-studio/bitwig-studio5.nix
Normal file
126
pkgs/applications/audio/bitwig-studio/bitwig-studio5.nix
Normal file
|
@ -0,0 +1,126 @@
|
|||
{ stdenv
|
||||
, fetchurl
|
||||
, alsa-lib
|
||||
, atk
|
||||
, cairo
|
||||
, dpkg
|
||||
, ffmpeg
|
||||
, freetype
|
||||
, gdk-pixbuf
|
||||
, glib
|
||||
, gtk3
|
||||
, harfbuzz
|
||||
, lib
|
||||
, libglvnd
|
||||
, libjack2
|
||||
, libjpeg
|
||||
, libxkbcommon
|
||||
, makeWrapper
|
||||
, pango
|
||||
, pipewire
|
||||
, pulseaudio
|
||||
, wrapGAppsHook
|
||||
, xdg-utils
|
||||
, xorg
|
||||
, zlib
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "bitwig-studio";
|
||||
version = "5.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://downloads.bitwig.com/stable/${version}/${pname}-${version}.deb";
|
||||
sha256 = "sha256-0/S/aNoQA1nAdnr8nUWVLwzrDm+MHqmGIIjPW5YIr7s=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ dpkg makeWrapper wrapGAppsHook ];
|
||||
|
||||
unpackCmd = ''
|
||||
mkdir -p root
|
||||
dpkg-deb -x $curSrc root
|
||||
'';
|
||||
|
||||
dontBuild = true;
|
||||
dontWrapGApps = true; # we only want $gappsWrapperArgs here
|
||||
|
||||
buildInputs = with xorg; [
|
||||
alsa-lib
|
||||
atk
|
||||
cairo
|
||||
freetype
|
||||
gdk-pixbuf
|
||||
glib
|
||||
gtk3
|
||||
harfbuzz
|
||||
libglvnd
|
||||
libjack2
|
||||
# libjpeg8 is required for converting jpeg's to colour palettes
|
||||
libjpeg
|
||||
libxcb
|
||||
libXcursor
|
||||
libX11
|
||||
libXtst
|
||||
libxkbcommon
|
||||
pango
|
||||
pipewire
|
||||
pulseaudio
|
||||
stdenv.cc.cc.lib
|
||||
xcbutil
|
||||
xcbutilwm
|
||||
zlib
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/bin
|
||||
cp -r opt/bitwig-studio $out/libexec
|
||||
ln -s $out/libexec/bitwig-studio $out/bin/bitwig-studio
|
||||
cp -r usr/share $out/share
|
||||
substitute usr/share/applications/com.bitwig.BitwigStudio.desktop \
|
||||
$out/share/applications/com.bitwig.BitwigStudio.desktop \
|
||||
--replace /usr/bin/bitwig-studio $out/bin/bitwig-studio
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
postFixup = ''
|
||||
# patchelf fails to set rpath on BitwigStudioEngine, so we use
|
||||
# the LD_LIBRARY_PATH way
|
||||
|
||||
find $out -type f -executable \
|
||||
-not -name '*.so.*' \
|
||||
-not -name '*.so' \
|
||||
-not -name '*.jar' \
|
||||
-not -name 'jspawnhelper' \
|
||||
-not -path '*/resources/*' | \
|
||||
while IFS= read -r f ; do
|
||||
patchelf --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" $f
|
||||
# make xdg-open overrideable at runtime
|
||||
wrapProgram $f \
|
||||
"''${gappsWrapperArgs[@]}" \
|
||||
--prefix PATH : "${lib.makeBinPath [ ffmpeg ]}" \
|
||||
--suffix PATH : "${lib.makeBinPath [ xdg-utils ]}" \
|
||||
--suffix LD_LIBRARY_PATH : "${lib.strings.makeLibraryPath buildInputs}"
|
||||
done
|
||||
|
||||
find $out -type f -executable -name 'jspawnhelper' | \
|
||||
while IFS= read -r f ; do
|
||||
patchelf --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" $f
|
||||
done
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "A digital audio workstation";
|
||||
longDescription = ''
|
||||
Bitwig Studio is a multi-platform music-creation system for
|
||||
production, performance and DJing, with a focus on flexible
|
||||
editing tools and a super-fast workflow.
|
||||
'';
|
||||
homepage = "https://www.bitwig.com/";
|
||||
license = licenses.unfree;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
maintainers = with maintainers; [ bfortz michalrus mrVanDalo ];
|
||||
};
|
||||
}
|
|
@ -9,18 +9,18 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "go-musicfox";
|
||||
version = "4.1.2";
|
||||
version = "4.1.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "go-musicfox";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-ushJZKZPIUo6IO33E9A/CneLHHrE6MtdwpCYR4ivHmo=";
|
||||
hash = "sha256-z4zyLHflmaX5k69KvPTISRIEHVjDmEGZenNXfYd3UUk=";
|
||||
};
|
||||
|
||||
deleteVendor = true;
|
||||
|
||||
vendorHash = "sha256-xzLUWqzDVT+Htw/BHygOJM16uQvWXopyxxHBZQKcOQ8=";
|
||||
vendorHash = "sha256-S1OIrcn55wm/b7B3lz55guuS+mrv5MswNMO2UyfgjRc=";
|
||||
|
||||
subPackages = [ "cmd/musicfox.go" ];
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
, mkDerivation
|
||||
, fetchFromGitHub
|
||||
, pipewire
|
||||
, pulseaudio
|
||||
|
@ -20,18 +19,16 @@
|
|||
|
||||
assert lib.asserts.assertMsg (usePipewire != usePulseaudio) "You need to enable one and only one of pulseaudio or pipewire support";
|
||||
|
||||
let
|
||||
pluginPath = lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" (with gst_all_1; [ gstreamer gst-plugins-base gst-plugins-good ]);
|
||||
in
|
||||
mkDerivation rec {
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "jamesdsp";
|
||||
version = "2.5.1";
|
||||
version = "2.6.0";
|
||||
|
||||
src = fetchFromGitHub rec {
|
||||
owner = "Audio4Linux";
|
||||
repo = "JDSP4Linux";
|
||||
fetchSubmodules = true;
|
||||
rev = version;
|
||||
hash = "sha256-osbRiUa/CKq4l3pV2MZYKcECEfa1ee3SAQ8RsiimbA4=";
|
||||
hash = "sha256-pogBpmGlqQnkXMdp5HbMYISjwMJalSPvEV9MDHj8aec=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -54,7 +51,9 @@ in
|
|||
gst_all_1.gstreamer
|
||||
];
|
||||
|
||||
qtWrapperArgs = lib.optionals usePulseaudio [ "--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : ${pluginPath}" ];
|
||||
preFixup = lib.optionals usePulseaudio ''
|
||||
qtWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0")
|
||||
'';
|
||||
|
||||
qmakeFlags = lib.optionals usePulseaudio [ "CONFIG+=USE_PULSEAUDIO" ];
|
||||
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "10.16";
|
||||
version = "10.17";
|
||||
pname = "monkeys-audio";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://monkeysaudio.com/files/MAC_${
|
||||
builtins.concatStringsSep "" (lib.strings.splitString "." version)}_SDK.zip";
|
||||
sha256 = "sha256-gRI2tzcybJx4ju2LCVc21Gb1ppd40qSA1J0TxNEk/Qs=";
|
||||
sha256 = "sha256-yWoYeOGELXub/3kLC51SNPMC91u1aWAtdRsU6fRuX98=";
|
||||
stripRoot = false;
|
||||
};
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
{ stdenv, lib, fetchurl, undmg }:
|
||||
|
||||
let
|
||||
versionComponents = [ "4" "0" "1" ];
|
||||
appName = "MuseScore ${builtins.head versionComponents}";
|
||||
ref = "230121751";
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "musescore-darwin";
|
||||
version = lib.concatStringsSep "." versionComponents;
|
||||
|
||||
# The disk image contains the .app and a symlink to /Applications.
|
||||
sourceRoot = "${appName}.app";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/musescore/MuseScore/releases/download/v${version}/MuseScore-${version}.${ref}.dmg";
|
||||
hash = "sha256-tkIEV+tCS0SYh2TlC70/zEBUEOSg//EaSKDGA7kH/vo=";
|
||||
};
|
||||
|
||||
buildInputs = [ undmg ];
|
||||
installPhase = ''
|
||||
mkdir -p "$out/Applications/${appName}.app"
|
||||
cp -R . "$out/Applications/${appName}.app"
|
||||
chmod a+x "$out/Applications/${appName}.app/Contents/MacOS/mscore"
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Music notation and composition software";
|
||||
homepage = "https://musescore.org/";
|
||||
license = licenses.gpl3Only;
|
||||
platforms = platforms.darwin;
|
||||
maintainers = [];
|
||||
};
|
||||
}
|
|
@ -1,55 +1,143 @@
|
|||
{ mkDerivation, lib, fetchFromGitHub, fetchpatch, cmake, pkg-config, ninja
|
||||
, alsa-lib, freetype, libjack2, lame, libogg, libpulseaudio, libsndfile, libvorbis
|
||||
, portaudio, portmidi, qtbase, qtdeclarative, qtgraphicaleffects, flac
|
||||
, qtquickcontrols2, qtscript, qtsvg, qttools
|
||||
, qtwebengine, qtxmlpatterns, qtnetworkauth, qtx11extras
|
||||
{ stdenv
|
||||
, lib
|
||||
, fetchFromGitHub
|
||||
, fetchpatch
|
||||
, cmake
|
||||
, wrapQtAppsHook
|
||||
, pkg-config
|
||||
, ninja
|
||||
, alsa-lib
|
||||
, freetype
|
||||
, libjack2
|
||||
, lame
|
||||
, libogg
|
||||
, libpulseaudio
|
||||
, libsndfile
|
||||
, libvorbis
|
||||
, portaudio
|
||||
, portmidi
|
||||
, qtbase
|
||||
, qtdeclarative
|
||||
, qtgraphicaleffects
|
||||
, flac
|
||||
, qtquickcontrols
|
||||
, qtquickcontrols2
|
||||
, qtscript
|
||||
, qtsvg
|
||||
, qtxmlpatterns
|
||||
, qtnetworkauth
|
||||
, qtx11extras
|
||||
, nixosTests
|
||||
, darwin
|
||||
}:
|
||||
|
||||
mkDerivation rec {
|
||||
let
|
||||
stdenv' = if stdenv.isDarwin then darwin.apple_sdk_11_0.stdenv else stdenv;
|
||||
# portaudio propagates Darwin frameworks. Rebuild it using the 11.0 stdenv
|
||||
# from Qt and the 11.0 SDK frameworks.
|
||||
portaudio' = if stdenv.isDarwin then portaudio.override {
|
||||
stdenv = stdenv';
|
||||
inherit (darwin.apple_sdk_11_0.frameworks)
|
||||
AudioUnit
|
||||
AudioToolbox
|
||||
CoreAudio
|
||||
CoreServices
|
||||
Carbon
|
||||
;
|
||||
} else portaudio;
|
||||
in stdenv'.mkDerivation rec {
|
||||
pname = "musescore";
|
||||
version = "4.0.2";
|
||||
version = "4.1.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "musescore";
|
||||
repo = "MuseScore";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-3NSHUdTyAC/WOhkB6yBrqtV3LV4Hl1m3poB3ojtJMfs=";
|
||||
sha256 = "sha256-CqW1f0VsF2lW79L3FY2ev+6FoHLbYOJ9LWHeBlWegeU=";
|
||||
};
|
||||
patches = [
|
||||
# See https://github.com/musescore/MuseScore/issues/15571
|
||||
# Upstream from some reason wants to install qml files from qtbase in
|
||||
# installPhase, this patch removes this behavior. See:
|
||||
# https://github.com/musescore/MuseScore/issues/18665
|
||||
(fetchpatch {
|
||||
url = "https://github.com/musescore/MuseScore/commit/365be5dfb7296ebee4677cb74b67c1721bc2cf7b.patch";
|
||||
hash = "sha256-tJ2M21i3geO9OsjUQKNatSXTkJ5U9qMT4RLNdJnyoKw=";
|
||||
url = "https://github.com/doronbehar/MuseScore/commit/f48448a3ede46f5a7ef470940072fbfb6742487c.patch";
|
||||
hash = "sha256-UEc7auscnW0KMfWkLKQtm+UstuTNsuFeoNJYIidIlwM=";
|
||||
})
|
||||
];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DMUSESCORE_BUILD_CONFIG=release"
|
||||
# Disable the _usage_ of the `/bin/crashpad_handler` utility. See:
|
||||
# https://github.com/musescore/MuseScore/pull/15577
|
||||
"-DBUILD_CRASHPAD_CLIENT=OFF"
|
||||
"-DMUSESCORE_BUILD_MODE=release"
|
||||
# Disable the build and usage of the `/bin/crashpad_handler` utility - it's
|
||||
# not useful on NixOS, see:
|
||||
# https://github.com/musescore/MuseScore/issues/15571
|
||||
"-DMUE_BUILD_CRASHPAD_CLIENT=OFF"
|
||||
# Use our freetype
|
||||
"-DUSE_SYSTEM_FREETYPE=ON"
|
||||
# From some reason, in $src/build/cmake/SetupBuildEnvironment.cmake,
|
||||
# upstream defaults to compiling to x86_64 only, unless this cmake flag is
|
||||
# set
|
||||
"-DMUE_COMPILE_BUILD_MACOS_APPLE_SILICON=ON"
|
||||
# Don't bundle qt qml files, relevant really only for darwin, but we set
|
||||
# this for all platforms anyway.
|
||||
"-DMUE_COMPILE_INSTALL_QTQML_FILES=OFF"
|
||||
];
|
||||
|
||||
qtWrapperArgs = [
|
||||
# MuseScore JACK backend loads libjack at runtime.
|
||||
"--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libjack2 ]}"
|
||||
"--prefix ${lib.optionalString stdenv.isDarwin "DY"}LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libjack2 ]}"
|
||||
] ++ lib.optionals (!stdenv.isDarwin) [
|
||||
# There are some issues with using the wayland backend, see:
|
||||
# https://musescore.org/en/node/321936
|
||||
"--set-default QT_QPA_PLATFORM xcb"
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ cmake pkg-config ninja ];
|
||||
# HACK `propagatedSandboxProfile` does not appear to actually propagate the
|
||||
# sandbox profile from `qtbase`, see:
|
||||
# https://github.com/NixOS/nixpkgs/issues/237458
|
||||
sandboxProfile = toString qtbase.__propagatedSandboxProfile or null;
|
||||
|
||||
nativeBuildInputs = [
|
||||
wrapQtAppsHook
|
||||
cmake
|
||||
pkg-config
|
||||
ninja
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
alsa-lib libjack2 freetype lame libogg libpulseaudio libsndfile libvorbis
|
||||
portaudio portmidi flac # tesseract
|
||||
qtbase qtdeclarative qtgraphicaleffects qtquickcontrols2
|
||||
qtscript qtsvg qttools qtwebengine qtxmlpatterns qtnetworkauth qtx11extras
|
||||
libjack2
|
||||
freetype
|
||||
lame
|
||||
libogg
|
||||
libpulseaudio
|
||||
libsndfile
|
||||
libvorbis
|
||||
portaudio'
|
||||
portmidi
|
||||
flac
|
||||
qtbase
|
||||
qtdeclarative
|
||||
qtgraphicaleffects
|
||||
qtquickcontrols
|
||||
qtquickcontrols2
|
||||
qtscript
|
||||
qtsvg
|
||||
qtxmlpatterns
|
||||
qtnetworkauth
|
||||
qtx11extras
|
||||
] ++ lib.optionals stdenv.isLinux [
|
||||
alsa-lib
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
# Remove unneeded bundled libraries and headers
|
||||
rm -r $out/{include,lib}
|
||||
'' + lib.optionalString stdenv.isDarwin ''
|
||||
mkdir -p "$out/Applications"
|
||||
mv "$out/mscore.app" "$out/Applications/mscore.app"
|
||||
mkdir -p $out/bin
|
||||
ln -s $out/Applications/mscore.app/Contents/MacOS/mscore $out/bin/mscore.
|
||||
'';
|
||||
|
||||
passthru.tests = nixosTests.musescore;
|
||||
|
||||
meta = with lib; {
|
||||
|
@ -57,9 +145,9 @@ mkDerivation rec {
|
|||
homepage = "https://musescore.org/";
|
||||
license = licenses.gpl3Only;
|
||||
maintainers = with maintainers; [ vandenoever turion doronbehar ];
|
||||
# Darwin requires CoreMIDI from SDK 11.3, we use the upstream built .dmg
|
||||
# file in ./darwin.nix in the meantime.
|
||||
platforms = platforms.linux;
|
||||
# on aarch64-linux:
|
||||
# error: cannot convert '<brace-enclosed initializer list>' to 'float32x4_t' in assignment
|
||||
broken = (stdenv.isLinux && stdenv.isAarch64);
|
||||
mainProgram = "mscore";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
let
|
||||
pname = "erigon";
|
||||
version = "2.48.0";
|
||||
version = "2.48.1";
|
||||
in
|
||||
buildGoModule {
|
||||
inherit pname version;
|
||||
|
@ -11,11 +11,11 @@ buildGoModule {
|
|||
owner = "ledgerwatch";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-L2uQJdC0Z5biv//QzgjPpygsk8GlUoQsSNH4Cp5TvhU=";
|
||||
hash = "sha256-ApVsrK1Di6d3WBj/VIUcYJBceFDTeNfsXYPRfbytvZg=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
vendorHash = "sha256-wzA75+BL5Fm6X13dF/ou7qvMEdeaImmSs2lypH4hOTY=";
|
||||
vendorHash = "sha256-bsPeEAhvuT5GIpYMoyPyh0BHMDKyKjBiVnYLjtF4Mkc=";
|
||||
proxyVendor = true;
|
||||
|
||||
# Build errors in mdbx when format hardening is enabled:
|
||||
|
|
73
pkgs/applications/blockchains/gridcoin-research/default.nix
Normal file
73
pkgs/applications/blockchains/gridcoin-research/default.nix
Normal file
|
@ -0,0 +1,73 @@
|
|||
{ fetchFromGitHub
|
||||
, stdenv
|
||||
, makeDesktopItem
|
||||
, lib
|
||||
, openssl
|
||||
, boost
|
||||
, curl
|
||||
, libevent
|
||||
, libzip
|
||||
, qrencode
|
||||
, qtbase
|
||||
, qttools
|
||||
, wrapQtAppsHook
|
||||
, autoreconfHook
|
||||
, pkg-config
|
||||
, libtool
|
||||
, miniupnpc
|
||||
, hexdump
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "gridcoin-research";
|
||||
version = "5.4.5.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "gridcoin-community";
|
||||
repo = "Gridcoin-Research";
|
||||
rev = "${version}";
|
||||
sha256 = "1a174m7821c7d3yh9lyh0r3ds6qn06x16aa1qxcbrqyxxc127yky";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
wrapQtAppsHook
|
||||
autoreconfHook
|
||||
libtool
|
||||
hexdump
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
qttools
|
||||
qtbase
|
||||
qrencode
|
||||
libevent
|
||||
libzip
|
||||
openssl
|
||||
boost
|
||||
miniupnpc
|
||||
curl
|
||||
];
|
||||
|
||||
configureFlags = [
|
||||
"--with-gui=qt5"
|
||||
"--with-qt-bindir=${qtbase.dev}/bin:${qttools.dev}/bin"
|
||||
"--with-qrencode"
|
||||
"--with-boost-libdir=${boost.out}/lib"
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = with lib; {
|
||||
description = "A POS-based cryptocurrency that rewards users for participating on the BOINC network";
|
||||
longDescription = ''
|
||||
A POS-based cryptocurrency that rewards users for participating on the BOINC network,
|
||||
using peer-to-peer technology to operate with no central authority - managing transactions,
|
||||
issuing money and contributing to scientific research are carried out collectively by the network
|
||||
'';
|
||||
homepage = "https://gridcoin.us/";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ gigglesquid ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
|
@ -20,7 +20,7 @@ stdenv.mkDerivation {
|
|||
# link .desktop file
|
||||
mkdir -p $out/share/pixmaps
|
||||
ln -s ${unwrapped}/share/applications $out/share/applications
|
||||
ln -s ${unwrapped}/share/pixmaps/nvim-qt.png $out/share/pixmaps/nvim-qt.png
|
||||
ln -s ${unwrapped}/share/icons $out/share/icons
|
||||
'';
|
||||
|
||||
preferLocalBuild = true;
|
||||
|
|
|
@ -23,13 +23,13 @@
|
|||
|
||||
let
|
||||
pname = "pulsar";
|
||||
version = "1.106.0";
|
||||
version = "1.107.1";
|
||||
|
||||
sourcesPath = {
|
||||
x86_64-linux.tarname = "Linux.${pname}-${version}.tar.gz";
|
||||
x86_64-linux.hash = "sha256-Wd0z6kHd6qZgrgZBxZQjwVC1dDqYtJ94L7aAnbuJoO8=";
|
||||
x86_64-linux.hash = "sha256-stY/sutbFVWQuN6C/tkT/G5MMVypgm3Um78jk8RHF6k=";
|
||||
aarch64-linux.tarname = "ARM.Linux.${pname}-${version}-arm64.tar.gz";
|
||||
aarch64-linux.hash = "sha256-Xadjqw8PRrq0ksif6te0gxn8xeYTCYnJcsrezfl2SYs=";
|
||||
aarch64-linux.hash = "sha256-umL60+FJKT8ThnzxgzzVzsY0nhJwsNF4YvrKoruxz7U=";
|
||||
}.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
|
||||
|
||||
additionalLibs = lib.makeLibraryPath [
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"version": "3.165.9",
|
||||
"version": "3.166.9",
|
||||
"deb": {
|
||||
"x86_64-linux": {
|
||||
"url": "https://github.com/standardnotes/app/releases/download/%40standardnotes/desktop%403.165.9/standard-notes-3.165.9-linux-amd64.deb",
|
||||
"hash": "sha512-DR2wxCi0RgEeAQWbegJv7Zhp6rtO2PWF7RceVNd2KBrLigsRZbRfLVsPLesprKexZoGIryhYvOksecpX51VdUA=="
|
||||
"url": "https://github.com/standardnotes/app/releases/download/%40standardnotes/desktop%403.166.9/standard-notes-3.166.9-linux-amd64.deb",
|
||||
"hash": "sha512-D85W50K3jRBKhrPz3Wa9aClnHFMRPQ0YgP71uypfcCcuKVnKd3Ol1sFzsyMzl2uhB0aGOkpd2OB+OHceVFqmag=="
|
||||
},
|
||||
"aarch64-linux": {
|
||||
"url": "https://github.com/standardnotes/app/releases/download/%40standardnotes/desktop%403.165.9/standard-notes-3.165.9-linux-arm64.deb",
|
||||
"hash": "sha512-ACYzEHQgw4pPZNgOUSDihAFY1dJ91Tmw3y2Lf1iihiOVcGn4qt5XJS2BG0+/bEWZjp0iuBKsfrlfWfSi6c95Sg=="
|
||||
"url": "https://github.com/standardnotes/app/releases/download/%40standardnotes/desktop%403.166.9/standard-notes-3.166.9-linux-arm64.deb",
|
||||
"hash": "sha512-pbBLqIaDjQoVGCOfpOxwjWRSMoQsefsYOHTRNTNlDDNO7DRUa/WeSbOYOgLJM5yGIBVXQoRmO7ycWfAWVAPIDQ=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -27,12 +27,12 @@
|
|||
};
|
||||
arduino = buildGrammar {
|
||||
language = "arduino";
|
||||
version = "0.0.0+rev=787bc6e";
|
||||
version = "0.0.0+rev=4de2f3e";
|
||||
src = fetchFromGitHub {
|
||||
owner = "ObserverOfTime";
|
||||
repo = "tree-sitter-arduino";
|
||||
rev = "787bc6e1ca23092821231f6096438343f728ee6f";
|
||||
hash = "sha256-PKjSNEy27Snu9B2eBZcOQYNXI/cnKhFdrBrePqcp7Rk=";
|
||||
rev = "4de2f3e6235ee8659ecb7467c16ed13bde7fb272";
|
||||
hash = "sha256-DeUp7M96PHQ652tvWSnsu1rSaQJyCCojAYfplccbJTc=";
|
||||
};
|
||||
meta.homepage = "https://github.com/ObserverOfTime/tree-sitter-arduino";
|
||||
};
|
||||
|
@ -126,12 +126,12 @@
|
|||
};
|
||||
c = buildGrammar {
|
||||
language = "c";
|
||||
version = "0.0.0+rev=a60f1dd";
|
||||
version = "0.0.0+rev=6adee19";
|
||||
src = fetchFromGitHub {
|
||||
owner = "tree-sitter";
|
||||
repo = "tree-sitter-c";
|
||||
rev = "a60f1ddef4702fc8a82a9bfc207d0cf453d748bb";
|
||||
hash = "sha256-7MNTbIQT+7ksV2vmrIZzBZM1BlCdGI7P0DYw0sP6hvU=";
|
||||
rev = "6adee194587678b250608cdb808544f06bcd26e7";
|
||||
hash = "sha256-A3bLZxkCru7uAOtz9J3I/nsIoRRWmoUUiPGaLtljrqw=";
|
||||
};
|
||||
meta.homepage = "https://github.com/tree-sitter/tree-sitter-c";
|
||||
};
|
||||
|
@ -159,12 +159,12 @@
|
|||
};
|
||||
capnp = buildGrammar {
|
||||
language = "capnp";
|
||||
version = "0.0.0+rev=7d5fa4e";
|
||||
version = "0.0.0+rev=dc28c9f";
|
||||
src = fetchFromGitHub {
|
||||
owner = "amaanq";
|
||||
repo = "tree-sitter-capnp";
|
||||
rev = "7d5fa4e94d3643ec15750106113be0d40f9fc1bb";
|
||||
hash = "sha256-K83xouIGsv9EDLp4MSH9i6JE/GlAT72i3eJa58vR2gs=";
|
||||
rev = "dc28c9f4212809eab74d10996086297853eb34e5";
|
||||
hash = "sha256-4GcOBC5JJsfbdsIrQd33tSW2sz6ytjYGqWgFVFLH6sc=";
|
||||
};
|
||||
meta.homepage = "https://github.com/amaanq/tree-sitter-capnp";
|
||||
};
|
||||
|
@ -280,12 +280,12 @@
|
|||
};
|
||||
cuda = buildGrammar {
|
||||
language = "cuda";
|
||||
version = "0.0.0+rev=c9ba632";
|
||||
version = "0.0.0+rev=c5befe0";
|
||||
src = fetchFromGitHub {
|
||||
owner = "theHamsta";
|
||||
repo = "tree-sitter-cuda";
|
||||
rev = "c9ba632aa68d24f32d2f97e356795f45f85e6c55";
|
||||
hash = "sha256-2Wtkmlzhq+ShqFUnlofeFEN24toLaLD/O0/zSzbEZEE=";
|
||||
rev = "c5befe09c99f5e88190574676ffa8eb29775d410";
|
||||
hash = "sha256-wdv5TuNQl81n9CSyNkvAwCSPhfOs+DPwOT675WAphZE=";
|
||||
};
|
||||
meta.homepage = "https://github.com/theHamsta/tree-sitter-cuda";
|
||||
};
|
||||
|
@ -403,12 +403,12 @@
|
|||
};
|
||||
elixir = buildGrammar {
|
||||
language = "elixir";
|
||||
version = "0.0.0+rev=7be3905";
|
||||
version = "0.0.0+rev=2616034";
|
||||
src = fetchFromGitHub {
|
||||
owner = "elixir-lang";
|
||||
repo = "tree-sitter-elixir";
|
||||
rev = "7be390548a870ca9cb1bd7f59ac92457bbec7bf5";
|
||||
hash = "sha256-Id+c414ugW3PXOWx75ZMoN13qQdiyWs0cab9mNdT8/A=";
|
||||
rev = "2616034f78ffa83ca6a521ebd7eee1868cb5c14c";
|
||||
hash = "sha256-KY/qeIKWaXUCpA7hbK3ptfCg/cXoISa6mNYB7a0XY18=";
|
||||
};
|
||||
meta.homepage = "https://github.com/elixir-lang/tree-sitter-elixir";
|
||||
};
|
||||
|
@ -438,12 +438,12 @@
|
|||
language = "elvish";
|
||||
version = "0.0.0+rev=f32711e";
|
||||
src = fetchFromGitHub {
|
||||
owner = "ckafi";
|
||||
owner = "elves";
|
||||
repo = "tree-sitter-elvish";
|
||||
rev = "f32711e31e987fd5c2c002f3daba02f25c68672f";
|
||||
hash = "sha256-/3npcIfTH8w5ekLTb//ZCTxuSGhOXkUBaCq3WWcK2J4=";
|
||||
};
|
||||
meta.homepage = "https://github.com/ckafi/tree-sitter-elvish";
|
||||
meta.homepage = "https://github.com/elves/tree-sitter-elvish";
|
||||
};
|
||||
embedded_template = buildGrammar {
|
||||
language = "embedded_template";
|
||||
|
@ -590,12 +590,12 @@
|
|||
};
|
||||
gitattributes = buildGrammar {
|
||||
language = "gitattributes";
|
||||
version = "0.0.0+rev=577a075";
|
||||
version = "0.0.0+rev=19c716d";
|
||||
src = fetchFromGitHub {
|
||||
owner = "ObserverOfTime";
|
||||
repo = "tree-sitter-gitattributes";
|
||||
rev = "577a075d46ea109905c5cb6179809df88da61ce9";
|
||||
hash = "sha256-gBfLmNf7aaqMY3yMF7svFuqif43BAmmY1yYkvVcNUhI=";
|
||||
rev = "19c716d2f45eac9529703413dc12aa8c76d13adc";
|
||||
hash = "sha256-4fevdvH+Mi+MRURUcoDb9v511oaxBgP9U/OOODS/G+o=";
|
||||
};
|
||||
meta.homepage = "https://github.com/ObserverOfTime/tree-sitter-gitattributes";
|
||||
};
|
||||
|
@ -645,23 +645,23 @@
|
|||
};
|
||||
glsl = buildGrammar {
|
||||
language = "glsl";
|
||||
version = "0.0.0+rev=53ca269";
|
||||
version = "0.0.0+rev=7d76863";
|
||||
src = fetchFromGitHub {
|
||||
owner = "theHamsta";
|
||||
repo = "tree-sitter-glsl";
|
||||
rev = "53ca269cae2a47b1b75791e2bfe843baeb02e903";
|
||||
hash = "sha256-qDysihoyGlzAFvhnu6qOjNTIRT9ii/A1B1wNiZNlJs8=";
|
||||
rev = "7d76863f2126ed3b246fead68f9591760d546c94";
|
||||
hash = "sha256-X0Lqq7xrKEFVRAOh1AfvzeJQ5zv6RNwv583p69VkEpY=";
|
||||
};
|
||||
meta.homepage = "https://github.com/theHamsta/tree-sitter-glsl";
|
||||
};
|
||||
go = buildGrammar {
|
||||
language = "go";
|
||||
version = "0.0.0+rev=7a4edcb";
|
||||
version = "0.0.0+rev=8c8007e";
|
||||
src = fetchFromGitHub {
|
||||
owner = "tree-sitter";
|
||||
repo = "tree-sitter-go";
|
||||
rev = "7a4edcbc376302efa8d6ba7e235070ab7ee3c4c8";
|
||||
hash = "sha256-VvMsFU/HSccB7JetiuNj3O+K/vm6bmDwGWhozyec4Vc=";
|
||||
rev = "8c8007eaee47702bb0291a3c7aeb004909baab4d";
|
||||
hash = "sha256-K8mvDoQXSXwyyYQuwEcV6RBTZFbn4OSi7R1nGoQkDQU=";
|
||||
};
|
||||
meta.homepage = "https://github.com/tree-sitter/tree-sitter-go";
|
||||
};
|
||||
|
@ -722,12 +722,12 @@
|
|||
};
|
||||
groovy = buildGrammar {
|
||||
language = "groovy";
|
||||
version = "0.0.0+rev=54c7da8";
|
||||
version = "0.0.0+rev=76e02db";
|
||||
src = fetchFromGitHub {
|
||||
owner = "Decodetalkers";
|
||||
repo = "tree-sitter-groovy";
|
||||
rev = "54c7da8b167261e76c79513c0364a01836093526";
|
||||
hash = "sha256-83JIW+oOKbpqormWiNjU6uI2WAknVnUAXNFSAvdq83o=";
|
||||
rev = "76e02db5866dd2b096512103ed4d8f630cc32980";
|
||||
hash = "sha256-H6Gp7MqGxU1oONq/w8p8pNR3Vhi68dvO+2aHw8anBTs=";
|
||||
};
|
||||
meta.homepage = "https://github.com/Decodetalkers/tree-sitter-groovy";
|
||||
};
|
||||
|
@ -810,12 +810,12 @@
|
|||
};
|
||||
hlsl = buildGrammar {
|
||||
language = "hlsl";
|
||||
version = "0.0.0+rev=ddb6082";
|
||||
version = "0.0.0+rev=b8fab02";
|
||||
src = fetchFromGitHub {
|
||||
owner = "theHamsta";
|
||||
repo = "tree-sitter-hlsl";
|
||||
rev = "ddb608219fa99d56ed98de2d60f396f575cc6590";
|
||||
hash = "sha256-UQTXdrHg4OfHnRgSAoo2gGZenE35NOypNeqUCsc4zdM=";
|
||||
rev = "b8fab02e808bab41c49829fb5e4fb0ce7eab8d1a";
|
||||
hash = "sha256-b/8KKGFqYj0gwDo3EgrRAufvXeuAEz6xvIBHBeVW0KE=";
|
||||
};
|
||||
meta.homepage = "https://github.com/theHamsta/tree-sitter-hlsl";
|
||||
};
|
||||
|
@ -920,23 +920,23 @@
|
|||
};
|
||||
java = buildGrammar {
|
||||
language = "java";
|
||||
version = "0.0.0+rev=c194ee5";
|
||||
version = "0.0.0+rev=6c8329e";
|
||||
src = fetchFromGitHub {
|
||||
owner = "tree-sitter";
|
||||
repo = "tree-sitter-java";
|
||||
rev = "c194ee5e6ede5f26cf4799feead4a8f165dcf14d";
|
||||
hash = "sha256-PNR1XajfELQuwYvCHm8778TzeUlxb9D+HrVF26lQk2E=";
|
||||
rev = "6c8329e2da78fae78e87c3c6f5788a2b005a4afc";
|
||||
hash = "sha256-pAo9hYhlLWjWB/n8nq/MzdMXbzOxcFzfrBCrj8xR/5g=";
|
||||
};
|
||||
meta.homepage = "https://github.com/tree-sitter/tree-sitter-java";
|
||||
};
|
||||
javascript = buildGrammar {
|
||||
language = "javascript";
|
||||
version = "0.0.0+rev=5720b24";
|
||||
version = "0.0.0+rev=f772967";
|
||||
src = fetchFromGitHub {
|
||||
owner = "tree-sitter";
|
||||
repo = "tree-sitter-javascript";
|
||||
rev = "5720b249490b3c17245ba772f6be4a43edb4e3b7";
|
||||
hash = "sha256-rSkLSXdthOS9wzXsC8D1Z1P0vmOT+APzeesvlN7ta6U=";
|
||||
rev = "f772967f7b7bc7c28f845be2420a38472b16a8ee";
|
||||
hash = "sha256-rfOAn5S8E2RunlRyY1aTs7j0r6UGKH+732xdpk/5524=";
|
||||
};
|
||||
meta.homepage = "https://github.com/tree-sitter/tree-sitter-javascript";
|
||||
};
|
||||
|
@ -1008,12 +1008,12 @@
|
|||
};
|
||||
julia = buildGrammar {
|
||||
language = "julia";
|
||||
version = "0.0.0+rev=784364c";
|
||||
version = "0.0.0+rev=d68ded9";
|
||||
src = fetchFromGitHub {
|
||||
owner = "tree-sitter";
|
||||
repo = "tree-sitter-julia";
|
||||
rev = "784364cb9185ef8dc245de4b0b51e3a22503419d";
|
||||
hash = "sha256-MPdDEVbIUsEQu84AB9k2Bhi3Oa47e9/tItGhKMfZLyU=";
|
||||
rev = "d68ded9d5131878a2a06211ef0b47b72e70c6c08";
|
||||
hash = "sha256-vPmZ9oA4t2LtQng88UNWkngwmpf2JLRlPOx/PM5mi80=";
|
||||
};
|
||||
meta.homepage = "https://github.com/tree-sitter/tree-sitter-julia";
|
||||
};
|
||||
|
@ -1253,12 +1253,12 @@
|
|||
};
|
||||
nix = buildGrammar {
|
||||
language = "nix";
|
||||
version = "0.0.0+rev=14b5361";
|
||||
version = "0.0.0+rev=66e3e9c";
|
||||
src = fetchFromGitHub {
|
||||
owner = "cstrahan";
|
||||
repo = "tree-sitter-nix";
|
||||
rev = "14b53610c9038500066c509b2e67de04775b97fe";
|
||||
hash = "sha256-FNq/+Voqg534Nnm7rnv2daPwc9uFxNi1ce0m091jmRk=";
|
||||
rev = "66e3e9ce9180ae08fc57372061006ef83f0abde7";
|
||||
hash = "sha256-+o+f1TlhcrcCB3TNw1RyCjVZ+37e11nL+GWBPo0Mxxg=";
|
||||
};
|
||||
meta.homepage = "https://github.com/cstrahan/tree-sitter-nix";
|
||||
};
|
||||
|
@ -1286,36 +1286,36 @@
|
|||
};
|
||||
ocaml = buildGrammar {
|
||||
language = "ocaml";
|
||||
version = "0.0.0+rev=3ad4d79";
|
||||
version = "0.0.0+rev=ee871b5";
|
||||
src = fetchFromGitHub {
|
||||
owner = "tree-sitter";
|
||||
repo = "tree-sitter-ocaml";
|
||||
rev = "3ad4d7988edf8b8a9780a1db7a5af657911dbfba";
|
||||
hash = "sha256-OOBrAiKdw9dCy5oLPDzta0gQEkeRxNrJWmZFlDoENjg=";
|
||||
rev = "ee871b50b845b6adaa22e85aa3c794a3fd49b1fb";
|
||||
hash = "sha256-2WhK69OGHeQWQZPkBdfrybgxO2oDwHSn1c/AzQe9hAw=";
|
||||
};
|
||||
location = "ocaml";
|
||||
meta.homepage = "https://github.com/tree-sitter/tree-sitter-ocaml";
|
||||
};
|
||||
ocaml_interface = buildGrammar {
|
||||
language = "ocaml_interface";
|
||||
version = "0.0.0+rev=3ad4d79";
|
||||
version = "0.0.0+rev=ee871b5";
|
||||
src = fetchFromGitHub {
|
||||
owner = "tree-sitter";
|
||||
repo = "tree-sitter-ocaml";
|
||||
rev = "3ad4d7988edf8b8a9780a1db7a5af657911dbfba";
|
||||
hash = "sha256-OOBrAiKdw9dCy5oLPDzta0gQEkeRxNrJWmZFlDoENjg=";
|
||||
rev = "ee871b50b845b6adaa22e85aa3c794a3fd49b1fb";
|
||||
hash = "sha256-2WhK69OGHeQWQZPkBdfrybgxO2oDwHSn1c/AzQe9hAw=";
|
||||
};
|
||||
location = "interface";
|
||||
meta.homepage = "https://github.com/tree-sitter/tree-sitter-ocaml";
|
||||
};
|
||||
ocamllex = buildGrammar {
|
||||
language = "ocamllex";
|
||||
version = "0.0.0+rev=fab854a";
|
||||
version = "0.0.0+rev=c8f90e4";
|
||||
src = fetchFromGitHub {
|
||||
owner = "atom-ocaml";
|
||||
repo = "tree-sitter-ocamllex";
|
||||
rev = "fab854a2de25b2284582bf7ed7f9970d19988c73";
|
||||
hash = "sha256-UmBTzWgjgp0EKAfZEY0uJhvYLHzeNtrMGEUPogx3Op8=";
|
||||
rev = "c8f90e42e1b9cf9e30b1669c386b8d9de992d201";
|
||||
hash = "sha256-cFzurSuO64PwOuJz1Fa0GTDZ2hnT0dHl4NwQhXWQWIw=";
|
||||
};
|
||||
generate = true;
|
||||
meta.homepage = "https://github.com/atom-ocaml/tree-sitter-ocamllex";
|
||||
|
@ -1377,12 +1377,12 @@
|
|||
};
|
||||
perl = buildGrammar {
|
||||
language = "perl";
|
||||
version = "0.0.0+rev=60aa138";
|
||||
version = "0.0.0+rev=4a02376";
|
||||
src = fetchFromGitHub {
|
||||
owner = "ganezdragon";
|
||||
repo = "tree-sitter-perl";
|
||||
rev = "60aa138f9e1db15becad53070f4d5898b0e8a98c";
|
||||
hash = "sha256-GpgUSm/kFFXgJOSBVBxPQiMfykZUgxLdmQfDfJE3Jq8=";
|
||||
rev = "4a023763f54dec0a6f986f5bd238af788a3f0584";
|
||||
hash = "sha256-8mLzXxkc8m69KOQtIT02MCKeTCuwERT3/Kegf48IEls=";
|
||||
};
|
||||
meta.homepage = "https://github.com/ganezdragon/tree-sitter-perl";
|
||||
};
|
||||
|
@ -1399,12 +1399,12 @@
|
|||
};
|
||||
phpdoc = buildGrammar {
|
||||
language = "phpdoc";
|
||||
version = "0.0.0+rev=2d20f39";
|
||||
version = "0.0.0+rev=915a527";
|
||||
src = fetchFromGitHub {
|
||||
owner = "claytonrcarter";
|
||||
repo = "tree-sitter-phpdoc";
|
||||
rev = "2d20f39476348c2682761ce7251914031a7c013f";
|
||||
hash = "sha256-uJEUAMIJ/Bq0YhcQ78UxWcK4LM6qoum+Ett03qli+Os=";
|
||||
rev = "915a527d5aafa81b31acf67fab31b0ac6b6319c0";
|
||||
hash = "sha256-DYNJ/i+VBuTOxuphJn4nklTLfV7GuNP1RCCuf5qAYR4=";
|
||||
};
|
||||
meta.homepage = "https://github.com/claytonrcarter/tree-sitter-phpdoc";
|
||||
};
|
||||
|
@ -1498,23 +1498,23 @@
|
|||
};
|
||||
puppet = buildGrammar {
|
||||
language = "puppet";
|
||||
version = "0.0.0+rev=843868b";
|
||||
version = "0.0.0+rev=8e13a37";
|
||||
src = fetchFromGitHub {
|
||||
owner = "amaanq";
|
||||
repo = "tree-sitter-puppet";
|
||||
rev = "843868bfb909b734bfb63778a5685fae4bf2a33f";
|
||||
hash = "sha256-6fJNADrLVsIoho9G8qCsMKNDB5a32gUntug7Nh8pKEg=";
|
||||
rev = "8e13a3768091703ac27ef1e5763e542af7f6dead";
|
||||
hash = "sha256-vBxCqFsSF2kwUK5uNWDPvl7F+mcD8rdTzsckcab4vUU=";
|
||||
};
|
||||
meta.homepage = "https://github.com/amaanq/tree-sitter-puppet";
|
||||
};
|
||||
python = buildGrammar {
|
||||
language = "python";
|
||||
version = "0.0.0+rev=db1d218";
|
||||
version = "0.0.0+rev=7c8930b";
|
||||
src = fetchFromGitHub {
|
||||
owner = "tree-sitter";
|
||||
repo = "tree-sitter-python";
|
||||
rev = "db1d218a4f8fb87145aabeb22ca3c35925c411fc";
|
||||
hash = "sha256-v0pWQzO8M9w0ngTUO5eGoTTcBbVu7tRgA993zGfoNwI=";
|
||||
rev = "7c8930b6388b5590ebef248853f144185a9eda1d";
|
||||
hash = "sha256-6QXMocivEFGrmCFJdxz+z+FsAQ6MBd4kv7719gKO4Gg=";
|
||||
};
|
||||
meta.homepage = "https://github.com/tree-sitter/tree-sitter-python";
|
||||
};
|
||||
|
@ -1597,12 +1597,12 @@
|
|||
};
|
||||
regex = buildGrammar {
|
||||
language = "regex";
|
||||
version = "0.0.0+rev=e1cfca3";
|
||||
version = "0.0.0+rev=17a3293";
|
||||
src = fetchFromGitHub {
|
||||
owner = "tree-sitter";
|
||||
repo = "tree-sitter-regex";
|
||||
rev = "e1cfca3c79896ff79842f057ea13e529b66af636";
|
||||
hash = "sha256-lDsr3sLrLf6wXu/juIA+bTtv1SBo+Jgwqw/6yBAE0kg=";
|
||||
rev = "17a3293714312c691ef14217f60593a3d093381c";
|
||||
hash = "sha256-3D+LOWRUamAdbegVfWD5yFcCjBucthPogOL/zWR78PY=";
|
||||
};
|
||||
meta.homepage = "https://github.com/tree-sitter/tree-sitter-regex";
|
||||
};
|
||||
|
@ -1628,6 +1628,17 @@
|
|||
};
|
||||
meta.homepage = "https://github.com/bamonroe/tree-sitter-rnoweb";
|
||||
};
|
||||
robot = buildGrammar {
|
||||
language = "robot";
|
||||
version = "0.0.0+rev=f1142bf";
|
||||
src = fetchFromGitHub {
|
||||
owner = "Hubro";
|
||||
repo = "tree-sitter-robot";
|
||||
rev = "f1142bfaa6acfce95e25d2c6d18d218f4f533927";
|
||||
hash = "sha256-Nd38FJZsSEr3R7S6e8nyoJTqZbbDCtlcvwqWrjvz2d4=";
|
||||
};
|
||||
meta.homepage = "https://github.com/Hubro/tree-sitter-robot";
|
||||
};
|
||||
ron = buildGrammar {
|
||||
language = "ron";
|
||||
version = "0.0.0+rev=ce6086b";
|
||||
|
@ -1762,12 +1773,12 @@
|
|||
};
|
||||
sql = buildGrammar {
|
||||
language = "sql";
|
||||
version = "0.0.0+rev=e08036e";
|
||||
version = "0.0.0+rev=9fc30c9";
|
||||
src = fetchFromGitHub {
|
||||
owner = "derekstride";
|
||||
repo = "tree-sitter-sql";
|
||||
rev = "e08036ee4928b32fbebe55ac9336f81b7389e107";
|
||||
hash = "sha256-x3vngL+36kO60eEFN0jvTzh9sCvsYvrzrvfMg08JL4w=";
|
||||
rev = "9fc30c949f29747d34c254677d039c9df3c521b4";
|
||||
hash = "sha256-EyZSbcjbPuaQGpi33YK+hpsod73yifk2hL+MCjn8R9M=";
|
||||
};
|
||||
meta.homepage = "https://github.com/derekstride/tree-sitter-sql";
|
||||
};
|
||||
|
@ -1828,12 +1839,12 @@
|
|||
};
|
||||
swift = buildGrammar {
|
||||
language = "swift";
|
||||
version = "0.0.0+rev=56ecc99";
|
||||
version = "0.0.0+rev=29541ac";
|
||||
src = fetchFromGitHub {
|
||||
owner = "alex-pinkus";
|
||||
repo = "tree-sitter-swift";
|
||||
rev = "56ecc996e5765054fc25cdae5fbddfd75a64287b";
|
||||
hash = "sha256-GH0HpxAprOlOLv8zqsP1O0/RbIn93FfdgAHp56Pyw9g=";
|
||||
rev = "29541ac9bbe2090de75d0b1e70360b85bbda1fef";
|
||||
hash = "sha256-jT7SdhxX5AlZP33oH7NISV+HvJwQwsXMXDWzHorgnIc=";
|
||||
};
|
||||
generate = true;
|
||||
meta.homepage = "https://github.com/alex-pinkus/tree-sitter-swift";
|
||||
|
@ -1863,12 +1874,12 @@
|
|||
};
|
||||
tablegen = buildGrammar {
|
||||
language = "tablegen";
|
||||
version = "0.0.0+rev=e5e046e";
|
||||
version = "0.0.0+rev=300f6a4";
|
||||
src = fetchFromGitHub {
|
||||
owner = "amaanq";
|
||||
repo = "tree-sitter-tablegen";
|
||||
rev = "e5e046e1b221e25111175469f02f3cf336010857";
|
||||
hash = "sha256-qh5AWLinsSwfbui7b3Vk7DRW3GaS4Avaa0iLeMmMFtM=";
|
||||
rev = "300f6a490e71f895e644ed2deec6920860a2e107";
|
||||
hash = "sha256-V4fEmiGPBAnZO+NAyA7FdlyjLSA0ByUfrCTbsdDOxc8=";
|
||||
};
|
||||
meta.homepage = "https://github.com/amaanq/tree-sitter-tablegen";
|
||||
};
|
||||
|
@ -1953,12 +1964,12 @@
|
|||
};
|
||||
tsx = buildGrammar {
|
||||
language = "tsx";
|
||||
version = "0.0.0+rev=3429d8c";
|
||||
version = "0.0.0+rev=e5fa28f";
|
||||
src = fetchFromGitHub {
|
||||
owner = "tree-sitter";
|
||||
repo = "tree-sitter-typescript";
|
||||
rev = "3429d8c77d7a83e80032667f0642e6cb19d0c772";
|
||||
hash = "sha256-qMzxxCx7u8fp+LhlSg6rvK0vMa0SXnJqSc4hgLcpZ7U=";
|
||||
rev = "e5fa28f919e0b1ed1961af9adf9a1e7a71271104";
|
||||
hash = "sha256-1kyW5tohk3byP/sWM7Edv8N3tWin65k7h+nkKBMQGAg=";
|
||||
};
|
||||
location = "tsx";
|
||||
meta.homepage = "https://github.com/tree-sitter/tree-sitter-typescript";
|
||||
|
@ -1987,12 +1998,12 @@
|
|||
};
|
||||
typescript = buildGrammar {
|
||||
language = "typescript";
|
||||
version = "0.0.0+rev=3429d8c";
|
||||
version = "0.0.0+rev=e5fa28f";
|
||||
src = fetchFromGitHub {
|
||||
owner = "tree-sitter";
|
||||
repo = "tree-sitter-typescript";
|
||||
rev = "3429d8c77d7a83e80032667f0642e6cb19d0c772";
|
||||
hash = "sha256-qMzxxCx7u8fp+LhlSg6rvK0vMa0SXnJqSc4hgLcpZ7U=";
|
||||
rev = "e5fa28f919e0b1ed1961af9adf9a1e7a71271104";
|
||||
hash = "sha256-1kyW5tohk3byP/sWM7Edv8N3tWin65k7h+nkKBMQGAg=";
|
||||
};
|
||||
location = "typescript";
|
||||
meta.homepage = "https://github.com/tree-sitter/tree-sitter-typescript";
|
||||
|
@ -2021,12 +2032,12 @@
|
|||
};
|
||||
uxntal = buildGrammar {
|
||||
language = "uxntal";
|
||||
version = "0.0.0+rev=14e4760";
|
||||
version = "0.0.0+rev=4c5ecd6";
|
||||
src = fetchFromGitHub {
|
||||
owner = "amaanq";
|
||||
repo = "tree-sitter-uxntal";
|
||||
rev = "14e47600afef0affffcbfbe1543381b1ac8fbc5c";
|
||||
hash = "sha256-SgBWJ8b/9kMkSDafx+6eSl+FS4Hkd1Ei2ALhTLL7yRk=";
|
||||
rev = "4c5ecd6326ebd61f6f9a22a370cbd100e0d601da";
|
||||
hash = "sha256-vgeTsRJ3mlR02jXuucmXpszVOmusZwuV0xj/7sSs+WQ=";
|
||||
};
|
||||
meta.homepage = "https://github.com/amaanq/tree-sitter-uxntal";
|
||||
};
|
||||
|
@ -2132,12 +2143,12 @@
|
|||
};
|
||||
wing = buildGrammar {
|
||||
language = "wing";
|
||||
version = "0.0.0+rev=755aef4";
|
||||
version = "0.0.0+rev=1f8736f";
|
||||
src = fetchFromGitHub {
|
||||
owner = "winglang";
|
||||
repo = "wing";
|
||||
rev = "755aef4e57da4a00da47e85b6aff976b007d500c";
|
||||
hash = "sha256-EbTNiwZwzPWxf8VNUWX82x/Jz4RFCE1LDuzXwYiYQLs=";
|
||||
rev = "1f8736fc86204a045644e0086bee68f7171e1967";
|
||||
hash = "sha256-cguDviBdQPOLOwoM/jhGNasQyjN1IfLw5Eg9DVjnU1s=";
|
||||
};
|
||||
location = "libs/tree-sitter-wing";
|
||||
generate = true;
|
||||
|
|
|
@ -919,7 +919,7 @@ self: super: {
|
|||
pname = "sg-nvim-rust";
|
||||
inherit (old) version src;
|
||||
|
||||
cargoHash = "sha256-IRp4avOvM2tz2oC1Cwr4W/d4i0pzawcZLP+c1+jnm+I=";
|
||||
cargoHash = "sha256-ErXgFNx3bTp955p45xpW0vAfLMPbH8KQ+SQH6/TE3m4=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
|
|
|
@ -15,11 +15,11 @@ let
|
|||
archive_fmt = if stdenv.isDarwin then "zip" else "tar.gz";
|
||||
|
||||
sha256 = {
|
||||
x86_64-linux = "0y9gs7w330l8x21l2qr5ki46aqmz22v17kmaisj5z5lgyfqyyf97";
|
||||
x86_64-darwin = "1i1c0axlipp12b3y3sl6liq4cs7ybjflm8jnrwf9wrrvq7d911bn";
|
||||
aarch64-linux = "03894hcjsvskp3s1gl1cmnvy7s7x8iz4z6pz5wk7aayw0j03f3zh";
|
||||
aarch64-darwin = "0n59dpc18abq42y1sb5wdrbv9n8pwnyhlcsrjx41r9ykmfk8cvih";
|
||||
armv7l-linux = "0iiw5rdw2gsr5y45i00ri858ylm6q4jdk3vh7g0f0vv4csprx5c3";
|
||||
x86_64-linux = "1sfy6rcrayx661m96pyh96caycf6banjs5ksib48qsl6hxp76ks0";
|
||||
x86_64-darwin = "0xkzvi7y45rxwnjxplg6wfs4994n6vdfqk6q7wjr96fgiymbpg5y";
|
||||
aarch64-linux = "09qlmqnvq1bcal56kingn6wkzg83dhxkkj2p3gqlikz6s5klqrql";
|
||||
aarch64-darwin = "17giphsqkxdfrz68vxkic84q4hn94plgr1lh72vy0q5pz5bbcpy2";
|
||||
armv7l-linux = "1cp739i5002j2kmdh3rhh7p88gyvjrfwcr430g5dvhdp7mgkbwn1";
|
||||
}.${system} or throwSystem;
|
||||
|
||||
sourceRoot = if stdenv.isDarwin then "" else ".";
|
||||
|
@ -29,7 +29,7 @@ in
|
|||
|
||||
# Please backport all compatible updates to the stable release.
|
||||
# This is important for the extension ecosystem.
|
||||
version = "1.80.0.23188";
|
||||
version = "1.80.1.23194";
|
||||
pname = "vscodium";
|
||||
|
||||
executableName = "codium";
|
||||
|
|
|
@ -1,23 +1,32 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, SDL2
|
||||
, zlib
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "x16-emulator";
|
||||
version = "41";
|
||||
version = "43";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "commanderx16";
|
||||
owner = "X16Community";
|
||||
repo = "x16-emulator";
|
||||
rev = "r${finalAttrs.version}";
|
||||
hash = "sha256-pnWqtSXQzUfQ8ADIXL9r2YjuBwHDQ2NAffAEFCN5Qzw=";
|
||||
hash = "sha256-cZB7MRYlchD3zcBSWBIzyBiGHJobJvozkVT/7ftFkNg=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace Makefile \
|
||||
--replace '/bin/echo' 'echo'
|
||||
'';
|
||||
|
||||
dontConfigure = true;
|
||||
|
||||
buildInputs = [ SDL2 ];
|
||||
buildInputs = [
|
||||
SDL2
|
||||
zlib
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
@ -28,19 +37,20 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://www.commanderx16.com/forum/index.php?/home/";
|
||||
description = "The official emulator of CommanderX16 8-bit computer";
|
||||
license = licenses.bsd2;
|
||||
maintainers = with maintainers; [ AndersonTorres ];
|
||||
mainProgram = "x16emu";
|
||||
inherit (SDL2.meta) platforms;
|
||||
broken = with stdenv; isDarwin && isAarch64;
|
||||
};
|
||||
|
||||
passthru = {
|
||||
# upstream project recommends emulator and rom to be synchronized;
|
||||
# passing through the version is useful to ensure this
|
||||
# upstream project recommends emulator and rom to be synchronized; passing
|
||||
# through the version is useful to ensure this
|
||||
inherit (finalAttrs) version;
|
||||
};
|
||||
|
||||
meta = {
|
||||
homepage = "https://cx16forum.com/";
|
||||
description = "The official emulator of CommanderX16 8-bit computer";
|
||||
changelog = "https://github.com/X16Community/x16-emulator/blob/r${finalAttrs.version}/RELEASES.md";
|
||||
license = lib.licenses.bsd2;
|
||||
maintainers = with lib.maintainers; [ AndersonTorres ];
|
||||
mainProgram = "x16emu";
|
||||
inherit (SDL2.meta) platforms;
|
||||
broken = stdenv.isAarch64; # ofborg fails to compile it
|
||||
};
|
||||
})
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, cc65
|
||||
, python3
|
||||
|
@ -7,13 +7,13 @@
|
|||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "x16-rom";
|
||||
version = "41";
|
||||
version = "43";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "commanderx16";
|
||||
owner = "X16Community";
|
||||
repo = "x16-rom";
|
||||
rev = "r${finalAttrs.version}";
|
||||
hash = "sha256-kowdyUVi3hliqkL8VQo5dS3Dpxd4LQi5+5brkdnv0lE=";
|
||||
hash = "sha256-LkGHfralxlishG1oyBojDnLMJ3c3KYp5YwJSZ2SIrbM=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -22,11 +22,15 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
];
|
||||
|
||||
postPatch = ''
|
||||
patchShebangs scripts/
|
||||
patchShebangs findsymbols scripts/
|
||||
substituteInPlace Makefile \
|
||||
--replace '/bin/echo' 'echo'
|
||||
'';
|
||||
|
||||
dontConfigure = true;
|
||||
|
||||
makeFlags = [ "PRERELEASE_VERSION=${finalAttrs.version}" ];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
|
@ -36,18 +40,18 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://www.commanderx16.com/forum/index.php?/home/";
|
||||
description = "ROM file for CommanderX16 8-bit computer";
|
||||
license = licenses.bsd2;
|
||||
maintainers = with maintainers; [ AndersonTorres ];
|
||||
inherit (cc65.meta) platforms;
|
||||
broken = with stdenv; isDarwin && isAarch64;
|
||||
};
|
||||
|
||||
passthru = {
|
||||
# upstream project recommends emulator and rom to be synchronized;
|
||||
# passing through the version is useful to ensure this
|
||||
# upstream project recommends emulator and rom to be synchronized; passing
|
||||
# through the version is useful to ensure this
|
||||
inherit (finalAttrs) version;
|
||||
};
|
||||
|
||||
meta = {
|
||||
homepage = "https://github.com/X16Community/x16-rom";
|
||||
description = "ROM file for CommanderX16 8-bit computer";
|
||||
license = lib.licenses.bsd2;
|
||||
maintainers = with lib.maintainers; [ AndersonTorres ];
|
||||
inherit (cc65.meta) platforms;
|
||||
broken = stdenv.isDarwin && stdenv.isAarch64;
|
||||
};
|
||||
})
|
||||
|
|
|
@ -25,14 +25,14 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "foxotron";
|
||||
version = "2023-02-23";
|
||||
version = "2023-07-16";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Gargaj";
|
||||
repo = "Foxotron";
|
||||
rev = version;
|
||||
fetchSubmodules = true;
|
||||
sha256 = "sha256-sPIXLZdtVK3phfMsZrU8o9qisOC5RKvHH19ECXMV0t0=";
|
||||
sha256 = "sha256-s1eWZMVitVSP7nJJ5wXvnV8uI6yto7LmvlvocOwVAxw=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, qtsvg
|
||||
, qtwayland
|
||||
, qttools
|
||||
, exiv2
|
||||
, wrapQtAppsHook
|
||||
|
@ -27,6 +28,7 @@ stdenv.mkDerivation rec {
|
|||
|
||||
buildInputs = [
|
||||
qtsvg
|
||||
qtwayland
|
||||
exiv2
|
||||
];
|
||||
|
||||
|
|
|
@ -13,13 +13,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "xv";
|
||||
version = "4.1.1";
|
||||
version = "4.2.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jasper-software";
|
||||
repo = "xv";
|
||||
rev = "v${version}";
|
||||
sha256 = "vwSUKWr4Hffx04ATUI58m7UOS/lVTnIVDC3ZTWRwJMM=";
|
||||
sha256 = "TXUcdrwtPNiS7z795RbzBXzNYRADeVtF5uz4aovLo/M=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
|
|
27
pkgs/applications/misc/confetty/default.nix
Normal file
27
pkgs/applications/misc/confetty/default.nix
Normal file
|
@ -0,0 +1,27 @@
|
|||
{ lib
|
||||
, buildGoModule
|
||||
, fetchFromGitHub
|
||||
}:
|
||||
|
||||
buildGoModule {
|
||||
pname = "confetty";
|
||||
version = "unstable-2022-11-05";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "maaslalani";
|
||||
repo = "confetty";
|
||||
rev = "6c6f1b5b605f78c3ed3bab2d2a1357c0dd794221";
|
||||
hash = "sha256-1BAszv9I2JDflWyHuAlbJo7+oI7BI/TL10uFIYa8mLk=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-RymdnueY674Zd231O8CIw/TEIDaWDzc+AaI6yk9hFgc=";
|
||||
|
||||
ldflags = [ "-s" "-w" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Confetti in your TTY";
|
||||
homepage = "https://github.com/maaslalani/confetty";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ figsoda ];
|
||||
};
|
||||
}
|
|
@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
|
|||
src = fetchFromGitHub {
|
||||
owner = "goldendict";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
rev = version;
|
||||
hash = "sha256-80o8y+mbzpyMQYUGHYs/zgQT23nLVCs7Jcr8FbbXn8M=";
|
||||
};
|
||||
|
||||
|
|
|
@ -40,13 +40,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "keepassxc";
|
||||
version = "2.7.4";
|
||||
version = "2.7.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "keepassxreboot";
|
||||
repo = "keepassxc";
|
||||
rev = version;
|
||||
sha256 = "sha256-amedKK9nplLVJTldeabN3/c+g/QesrdH+qx+rba2/4s=";
|
||||
sha256 = "sha256-OBEjczUIkY3pQXJfsuNj9Bm2TIbVWEHqMSolQnSfvLE=";
|
||||
};
|
||||
|
||||
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang (toString [
|
||||
|
|
76
pkgs/applications/misc/notesnook/default.nix
Normal file
76
pkgs/applications/misc/notesnook/default.nix
Normal file
|
@ -0,0 +1,76 @@
|
|||
{ lib, stdenv, appimageTools, fetchurl, undmg }:
|
||||
|
||||
let
|
||||
pname = "notesnook";
|
||||
version = "2.5.7";
|
||||
|
||||
inherit (stdenv.hostPlatform) system;
|
||||
throwSystem = throw "Unsupported system: ${system}";
|
||||
|
||||
suffix = {
|
||||
x86_64-linux = "linux_x86_64.AppImage";
|
||||
x86_64-darwin = "mac_x64.dmg";
|
||||
aarch64-darwin = "mac_arm64.dmg";
|
||||
}.${system} or throwSystem;
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/streetwriters/notesnook/releases/download/v${version}/notesnook_${suffix}";
|
||||
hash = {
|
||||
x86_64-linux = "sha256-M/59pjhuKF/MOMpT9/qrlThHO0V8e49cfiaWMkEWHNg=";
|
||||
x86_64-darwin = "sha256-cluIizmweIMU6RIFxoEQ3DYChRVEuVLxrPjwfFfeq1w=";
|
||||
aarch64-darwin = "sha256-cbBnKrb8poyDL1D+32UrOl3RXt8Msncw440qra9+Gs0=";
|
||||
}.${system} or throwSystem;
|
||||
};
|
||||
|
||||
appimageContents = appimageTools.extractType2 {
|
||||
inherit pname version src;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "A fully open source & end-to-end encrypted note taking alternative to Evernote.";
|
||||
longDescription = ''
|
||||
Notesnook is a free (as in speech) & open source note taking app
|
||||
focused on user privacy & ease of use. To ensure zero knowledge
|
||||
principles, Notesnook encrypts everything on your device using
|
||||
XChaCha20-Poly1305 & Argon2.
|
||||
'';
|
||||
homepage = "https://notesnook.com";
|
||||
license = licenses.gpl3Only;
|
||||
maintainers = with maintainers; [ j0lol ];
|
||||
platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
||||
};
|
||||
|
||||
linux = appimageTools.wrapType2 rec {
|
||||
inherit pname version src meta;
|
||||
|
||||
profile = ''
|
||||
export LC_ALL=C.UTF-8
|
||||
'';
|
||||
|
||||
multiPkgs = null; # no 32bit needed
|
||||
extraPkgs = appimageTools.defaultFhsEnvArgs.multiPkgs;
|
||||
extraInstallCommands = ''
|
||||
mv $out/bin/{${pname}-${version},${pname}}
|
||||
install -Dm444 ${appimageContents}/notesnook.desktop -t $out/share/applications
|
||||
install -Dm444 ${appimageContents}/notesnook.png -t $out/share/pixmaps
|
||||
substituteInPlace $out/share/applications/notesnook.desktop \
|
||||
--replace 'Exec=AppRun --no-sandbox %U' 'Exec=${pname}'
|
||||
'';
|
||||
};
|
||||
|
||||
darwin = stdenv.mkDerivation {
|
||||
inherit pname version src meta;
|
||||
|
||||
nativeBuildInputs = [ undmg ];
|
||||
|
||||
sourceRoot = "Notesnook.app";
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/Applications/Notesnook.app
|
||||
cp -R . $out/Applications/Notesnook.app
|
||||
'';
|
||||
};
|
||||
in
|
||||
if stdenv.isDarwin
|
||||
then darwin
|
||||
else linux
|
|
@ -14,13 +14,13 @@
|
|||
# instead of adding this to `services.udev.packages` on NixOS,
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "solaar";
|
||||
version = "1.1.8";
|
||||
version = "1.1.9";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "pwr-Solaar";
|
||||
repo = "Solaar";
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-2LD1vMmQvibcnAgBwjfSBJysTnUGptGzPHfi/7tZ0hg=";
|
||||
hash = "sha256-MdPZ9uLQYwgZ6xXWinzFg5A2gJ3ihTS9CbEmXnaNEkI=";
|
||||
};
|
||||
|
||||
outputs = [ "out" "udev" ];
|
||||
|
@ -44,6 +44,7 @@ python3Packages.buildPythonApplication rec {
|
|||
pyudev
|
||||
pyyaml
|
||||
xlib
|
||||
hid-parser
|
||||
];
|
||||
|
||||
# the -cli symlink is just to maintain compabilility with older versions where
|
||||
|
|
|
@ -6,13 +6,13 @@
|
|||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "system76-keyboard-configurator";
|
||||
version = "1.3.7";
|
||||
version = "1.3.8";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "pop-os";
|
||||
repo = "keyboard-configurator";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-73D24g3jvPPregR/bLSpWzSGQRlhjp2/0kHuDDSqSBY=";
|
||||
sha256 = "sha256-fjuX/fOQMdJvqpZCfyUkYS/NRPFymAvMrD3/+ntwXGc=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -28,7 +28,7 @@ rustPlatform.buildRustPackage rec {
|
|||
udev
|
||||
];
|
||||
|
||||
cargoHash = "sha256-AGWrMMJ5FihIVc7HvzpsL1Vmi/fvuFowX+ijgwGRJCo=";
|
||||
cargoHash = "sha256-Cav2W8iUq1GYUOnXb/ECwwKQ8uzQRW/7r5EzV7IS2Nc=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "Keyboard configuration application for System76 keyboards and laptops";
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "thedesk";
|
||||
version = "24.1.2";
|
||||
version = "24.1.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/cutls/TheDesk/releases/download/v${version}/${pname}_${version}_amd64.deb";
|
||||
sha256 = "sha256-0EvJ60yTRi3R0glgI8l3r7mxR76McDA1x5aF6WQDbdU=";
|
||||
sha256 = "sha256-Fq+kDdNR7G0Fbi++OFGxYbgFFOnpdzxy0JVh5t/i8hs=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "toot";
|
||||
version = "0.36.0";
|
||||
version = "0.37.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ihabunek";
|
||||
repo = "toot";
|
||||
rev = "refs/tags/${version}";
|
||||
sha256 = "sha256-gEQA9PASSKAMqulOaK8ynBXX7BdptY1uwdS1tOf3/Jc=";
|
||||
sha256 = "sha256-NmxBiFLjAW4kwuChbgR5VsAOpgE6sJOO/MmfRhotb40=";
|
||||
};
|
||||
|
||||
nativeCheckInputs = with python3Packages; [ pytest ];
|
||||
|
|
27
pkgs/applications/misc/typer/default.nix
Normal file
27
pkgs/applications/misc/typer/default.nix
Normal file
|
@ -0,0 +1,27 @@
|
|||
{ lib
|
||||
, buildGoModule
|
||||
, fetchFromGitHub
|
||||
}:
|
||||
|
||||
buildGoModule {
|
||||
pname = "typer";
|
||||
version = "unstable-2023-02-08";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "maaslalani";
|
||||
repo = "typer";
|
||||
rev = "02aa80b3be8a6c2c9d08d9a56b3fe784adf00933";
|
||||
hash = "sha256-J3wTqWxHEQz1AAt7DfUmpgc7wmfILBtyHuDrmqN96fI=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-t4zim6WhqGAf1zHmmbJbpVvQcE/aoNL7ZLdjU7f3rp8=";
|
||||
|
||||
ldflags = [ "-s" "-w" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Typing test in your terminal";
|
||||
homepage = "https://github.com/maaslalani/typer";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ figsoda ];
|
||||
};
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
|
||||
, curl, db, libgeotiff
|
||||
, xorg, motif, pcre
|
||||
, perl, proj, rastermagick, shapelib
|
||||
, perl, proj, graphicsmagick, shapelib
|
||||
, libax25
|
||||
}:
|
||||
|
||||
|
@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
|
|||
buildInputs = [
|
||||
curl db libgeotiff
|
||||
xorg.libXpm xorg.libXt motif pcre
|
||||
perl proj rastermagick shapelib
|
||||
perl proj graphicsmagick shapelib
|
||||
libax25
|
||||
];
|
||||
|
||||
|
|
|
@ -19,9 +19,9 @@
|
|||
}
|
||||
},
|
||||
"beta": {
|
||||
"version": "115.0.5790.40",
|
||||
"sha256": "1ab034zrgyz0gwi0caz6y1nyr0p5yhbly50chnhvsr3k6gmidl58",
|
||||
"sha256bin64": "02vzlz5z87n9lwdhxnzdzr5w85l3b828j0y1z6fzq7br90yr0pcw",
|
||||
"version": "115.0.5790.90",
|
||||
"sha256": "156k5cijkxj44r4cn14k7r2xa11xp0nwi7nsgxfmg3dfsay05s42",
|
||||
"sha256bin64": "1b573bd19ywwy0k8570501az1cw3xnp6iy53zk1a1gawsn8f4pv5",
|
||||
"deps": {
|
||||
"gn": {
|
||||
"version": "2023-05-19",
|
||||
|
@ -32,9 +32,9 @@
|
|||
}
|
||||
},
|
||||
"dev": {
|
||||
"version": "116.0.5845.14",
|
||||
"sha256": "1b8ak0yg7ymz0siw81g47fdl12bj7f7gdw2nd5wlgj3h0g0b0675",
|
||||
"sha256bin64": "1hnis5m5l6ygihmwsy6qk12lz6gjcndfdnssb3l9pd7v3qwfpkp2",
|
||||
"version": "116.0.5845.32",
|
||||
"sha256": "0migfx1snbsa9a42cv37x6bkpa9j7y3n6h6hs0w79ss1hxmmj2mi",
|
||||
"sha256bin64": "1zdr2340lbkvwyw303954ba8cay44p9a5d6b9l693kcrgkf4z8bz",
|
||||
"deps": {
|
||||
"gn": {
|
||||
"version": "2023-06-09",
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
## various stuff that can be plugged in
|
||||
, ffmpeg_5, xorg, alsa-lib, libpulseaudio, libcanberra-gtk3, libglvnd, libnotify, opensc
|
||||
, gnome/*.gnome-shell*/
|
||||
, browserpass, gnome-browser-connector, uget-integrator, plasma5Packages, bukubrow, web-eid-app, pipewire
|
||||
, browserpass, gnome-browser-connector, uget-integrator, plasma5Packages, bukubrow, pipewire
|
||||
, tridactyl-native
|
||||
, fx_cast_bridge
|
||||
, udev
|
||||
|
@ -65,7 +65,6 @@ let
|
|||
[ ]
|
||||
++ lib.optional (cfg.enableBrowserpass or false) (lib.getBin browserpass)
|
||||
++ lib.optional (cfg.enableBukubrow or false) bukubrow
|
||||
++ lib.optional (cfg.enableEUWebID or false) web-eid-app
|
||||
++ lib.optional (cfg.enableTridactylNative or false) tridactyl-native
|
||||
++ lib.optional (cfg.enableGnomeExtensions or false) gnome-browser-connector
|
||||
++ lib.optional (cfg.enableUgetIntegrator or false) uget-integrator
|
||||
|
|
|
@ -51,11 +51,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "yandex-browser";
|
||||
version = "23.5.1.754-1";
|
||||
version = "23.5.4.682-1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://repo.yandex.ru/yandex-browser/deb/pool/main/y/${pname}-beta/${pname}-beta_${version}_amd64.deb";
|
||||
sha256 = "sha256-ngtwrq8vDEt39Zd5jpBadouN1V8ly03la69M0AUyhGM=";
|
||||
sha256 = "sha256-ZhPX4K9huCO2uyjfUsWEkaspdvUurB7jNfUMqqIFO4U=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
buildGoModule rec {
|
||||
pname = "bosh-cli";
|
||||
|
||||
version = "7.3.0";
|
||||
version = "7.3.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cloudfoundry";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-o/JhfS2VkN5qzZglFN1YNSZV2A2LowNouQee4Tv2dFc=";
|
||||
sha256 = "sha256-bCZuX4c/ltnq1se/tbqQmWBc7/6IRUWqSNg7T3pFl3k=";
|
||||
};
|
||||
vendorHash = null;
|
||||
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "civo";
|
||||
version = "1.0.59";
|
||||
version = "1.0.60";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "civo";
|
||||
repo = "cli";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-b0KoSPPwxW/r1LHooZWWyZBuP9v4Xl5zK0GxYubTeCI=";
|
||||
sha256 = "sha256-f6r82rZ5PMjBLdeuz1vbyWuCMy73NAYt4+0w7fICTQ0=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-8lIVFlz9Zt9+GDVc0MxrwdyC/0G4q5LU2IwSiFu9Bqg=";
|
||||
vendorHash = "sha256-ER7QcDlts/Dt8FimDu87IE3hihMRNGHpyuvAXRI3QR8=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "glooctl";
|
||||
version = "1.14.11";
|
||||
version = "1.14.12";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "solo-io";
|
||||
repo = "gloo";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-c9JYrStbYhFWVAHHYz036k7DzKfVjy3LD4wg+GYcKkE=";
|
||||
hash = "sha256-0ZrR3y3bTXLCOgN+c96lEfNnT+GKXeEBHifM9jfWTBI=";
|
||||
};
|
||||
|
||||
subPackages = [ "projects/gloo/cli/cmd" ];
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "istioctl";
|
||||
version = "1.18.0";
|
||||
version = "1.18.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "istio";
|
||||
repo = "istio";
|
||||
rev = version;
|
||||
sha256 = "sha256-vC8EE9v3U6FNbjxWb3At+gL4DUgBIb7MY2xBu7WNMKw=";
|
||||
sha256 = "sha256-+225LfSp9VP7J63kkbyi2Vj6UAFfb6jr+LLsFVe0ZcY=";
|
||||
};
|
||||
vendorHash = "sha256-YgRW/sVRQLqrtEFxC+bGHZEQoEro5bzNzqKv7c7iO4Y=";
|
||||
vendorHash = "sha256-tuiQ11pcfoTOu+OVey+YmU4tTOj5C7p5bKP2ylEkUug=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
(callPackage ./generic.nix { }) {
|
||||
channel = "edge";
|
||||
version = "23.7.1";
|
||||
sha256 = "1lvangia0hllnlccxv0f9mlp3ym8l54wmqihicd44p9nyxbwbx3d";
|
||||
vendorSha256 = "sha256-1ir+IjyT9P+D3AbPo/7wWyZRFiKqZLJ/hoFUM1jtM0A=";
|
||||
version = "23.7.2";
|
||||
sha256 = "0wc829dzk0in0srq0vbcagrd5ylz2d758032anzlzkf4m3lr9hdw";
|
||||
vendorSha256 = "sha256-16j5B96UDZITY1LEWZKtfAnww7ZcUjKh/cARLaYy9wk=";
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "rke";
|
||||
version = "1.4.6";
|
||||
version = "1.4.7";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "rancher";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-P/VvRoTcJuuRuoTT0zhebibBQrM6sz9Vv+qPrWY+B9Y=";
|
||||
hash = "sha256-XiFXFd9pZBrZdYggVoHhxdu4cH+IyDtDNr7ztM+Zskk=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-MFXNwEEXtsEwB0Hcx8gn/Pz9dZM1zUUKhNYp5BlRUEk=";
|
||||
|
|
|
@ -2,26 +2,38 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "rke2";
|
||||
version = "1.27.2+rke2r1";
|
||||
version = "1.27.3+rke2r1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "rancher";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-jzm2tYwsomLifAfmb0w1+/FpCgtOk+O8DRmy1OgzfmE=";
|
||||
hash = "sha256-M/3F97iNeXdMMhs0eoPODeBC6Jp+yo/PwlPiG28SfYU=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-VVc1IgeR+LWEexTyIXtCcF6TtdDzsgP4U4kqArIKdU4=";
|
||||
vendorHash = "sha256-7Za8PQr22kvZBvoYRVbI4bXUvGWkfILQC+kAmw9ZCro=";
|
||||
|
||||
subPackages = [ "." ];
|
||||
postPatch = ''
|
||||
# Patch the build scripts so they work in the Nix build environment.
|
||||
patchShebangs ./scripts
|
||||
|
||||
ldflags = [ "-s" "-w" "-X github.com/k3s-io/k3s/pkg/version.Version=v${version}" ];
|
||||
# Disable the static build as it breaks.
|
||||
sed -e 's/STATIC_FLAGS=.*/STATIC_FLAGS=/g' -i scripts/build-binary
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
DRONE_TAG="v${version}" ./scripts/build-binary
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
install -D ./bin/rke2 $out/bin/rke2
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/rancher/rke2";
|
||||
description = "RKE2, also known as RKE Government, is Rancher's next-generation Kubernetes distribution.";
|
||||
changelog = "https://github.com/rancher/rke2/releases/tag/v${version}";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ zygot ];
|
||||
maintainers = with maintainers; [ zimbatm zygot ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "temporal";
|
||||
version = "1.21.1";
|
||||
version = "1.21.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "temporalio";
|
||||
repo = "temporal";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-fa8UQk3E1XhMqd7E9VRYOv6RLQW8smSUw48FeYBqmSU=";
|
||||
hash = "sha256-4iosKxGjH2O2y2wkAs/tuCH+SXTj6FhrPqS9qgL+vTQ=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-rgUdoFR7Qcp1h7v63DAWwx6NWSwWrJ6C6/b2tx2kCCw=";
|
||||
|
|
|
@ -300,11 +300,11 @@
|
|||
"vendorHash": "sha256-BpXhKjfxyCLdGRHn1GexW0MoLj4/C6Bn7scZ76JARxQ="
|
||||
},
|
||||
"digitalocean": {
|
||||
"hash": "sha256-XKNQdsbh8+iq1N+pwlByFwdm6IlfEsgnT3q/l8SiHvU=",
|
||||
"hash": "sha256-CnakqGO/adv44knzp3Q5nC17tD+ZpOEFqfQXPk20klg=",
|
||||
"homepage": "https://registry.terraform.io/providers/digitalocean/digitalocean",
|
||||
"owner": "digitalocean",
|
||||
"repo": "terraform-provider-digitalocean",
|
||||
"rev": "v2.28.1",
|
||||
"rev": "v2.29.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": null
|
||||
},
|
||||
|
@ -436,31 +436,31 @@
|
|||
"vendorHash": null
|
||||
},
|
||||
"gitlab": {
|
||||
"hash": "sha256-SHc1Mz1JsmNqTjfuJ4Ncll7fh5ruoRXNUAQRfFlibog=",
|
||||
"hash": "sha256-3Ph+Z4RI4K+OLc7c7f3JQH4UYRRVV6dM6R0TgkJf+yQ=",
|
||||
"homepage": "https://registry.terraform.io/providers/gitlabhq/gitlab",
|
||||
"owner": "gitlabhq",
|
||||
"repo": "terraform-provider-gitlab",
|
||||
"rev": "v16.1.0",
|
||||
"rev": "v16.1.1",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-XgGNz+yP+spRA2+qFxwiZFcBRv2GQWhiYY9zoC8rZPc="
|
||||
},
|
||||
"google": {
|
||||
"hash": "sha256-FlBTLc3QUsPAO1OIr8aOlb7ppePsAjtKKrBOTS+JYFI=",
|
||||
"hash": "sha256-yRI5dJbJNjaMPKWKNWH+/oq7vkVt8NI8jfO8Z5QrcTE=",
|
||||
"homepage": "https://registry.terraform.io/providers/hashicorp/google",
|
||||
"owner": "hashicorp",
|
||||
"proxyVendor": true,
|
||||
"repo": "terraform-provider-google",
|
||||
"rev": "v4.73.1",
|
||||
"rev": "v4.73.2",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-X+7UZM0iZzG7LvaK6nKXF3taKIiJfhWRmY1q1Uz9M4A="
|
||||
},
|
||||
"google-beta": {
|
||||
"hash": "sha256-GYX0tmNut04NbpqbfXCy/5Rabn3leWf1VH+yGHTsCek=",
|
||||
"hash": "sha256-GE7Y07w9wQ7HHGSxoWV23skAEU444cSTHLD+g1XS/Ow=",
|
||||
"homepage": "https://registry.terraform.io/providers/hashicorp/google-beta",
|
||||
"owner": "hashicorp",
|
||||
"proxyVendor": true,
|
||||
"repo": "terraform-provider-google-beta",
|
||||
"rev": "v4.73.1",
|
||||
"rev": "v4.73.2",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-X+7UZM0iZzG7LvaK6nKXF3taKIiJfhWRmY1q1Uz9M4A="
|
||||
},
|
||||
|
@ -483,11 +483,11 @@
|
|||
"vendorHash": "sha256-gY15FJb1svy2AxXs6ZOmZX5o3oXIokzf5hXlFlx1cXU="
|
||||
},
|
||||
"gridscale": {
|
||||
"hash": "sha256-u0NX1hoawEVbmj2Id6qvb8GYgH/u3cbgWZ/b+2nBYNM=",
|
||||
"hash": "sha256-Xs3eWLwsHFTvuH0rUroB6lkzusjUiH3ajt6ila9v/9M=",
|
||||
"homepage": "https://registry.terraform.io/providers/gridscale/gridscale",
|
||||
"owner": "gridscale",
|
||||
"repo": "terraform-provider-gridscale",
|
||||
"rev": "v1.21.0",
|
||||
"rev": "v1.21.1",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": null
|
||||
},
|
||||
|
@ -1016,13 +1016,13 @@
|
|||
"vendorHash": "sha256-MIO0VHofPtKPtynbvjvEukMNr5NXHgk7BqwIhbc9+u0="
|
||||
},
|
||||
"signalfx": {
|
||||
"hash": "sha256-mG3JUf7OASLvsfD7jk1p4CQRfrDj/TNnUKD1SzHQqEA=",
|
||||
"hash": "sha256-ez9mmgzurLPBya6eJW2iWNtiTt8yg63Yavf6xiplZ9w=",
|
||||
"homepage": "https://registry.terraform.io/providers/splunk-terraform/signalfx",
|
||||
"owner": "splunk-terraform",
|
||||
"repo": "terraform-provider-signalfx",
|
||||
"rev": "v7.0.0",
|
||||
"rev": "v8.0.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-JE6gg32TmpEHxskJjFaqeg0tfR463fUUnwKzc0O08eo="
|
||||
"vendorHash": "sha256-PQU4VC5wHcB70UkZaRT8jtz+qOAONU2SxtRrTmml9vY="
|
||||
},
|
||||
"skytap": {
|
||||
"hash": "sha256-JII4czazo6Di2sad1uFHMKDO2gWgZlQE8l/+IRYHQHU=",
|
||||
|
@ -1052,13 +1052,13 @@
|
|||
"vendorHash": "sha256-NO1r/EWLgH1Gogru+qPeZ4sW7FuDENxzNnpLSKstnE8="
|
||||
},
|
||||
"spotinst": {
|
||||
"hash": "sha256-YX0NTJ8T+HVrSiRC0WkA+SVakQ+ggVx/7JYvf3SkmPM=",
|
||||
"hash": "sha256-fnWSDapAJXnNG1DHribLcRpMgGHke5EhmuQQjaj6sWE=",
|
||||
"homepage": "https://registry.terraform.io/providers/spotinst/spotinst",
|
||||
"owner": "spotinst",
|
||||
"repo": "terraform-provider-spotinst",
|
||||
"rev": "v1.125.1",
|
||||
"rev": "v1.126.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-cT/85DbG5U/JPA+rgJ2BhxJA90KBKjg+X+glREiezAg="
|
||||
"vendorHash": "sha256-2SUCMdZRkAU97HFKEAKe5ryB+NB55aR/5k5K3p/digI="
|
||||
},
|
||||
"stackpath": {
|
||||
"hash": "sha256-7KQUddq+M35WYyAIAL8sxBjAaXFcsczBRO1R5HURUZg=",
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"version" = "1.11.35";
|
||||
"version" = "1.11.36";
|
||||
"hashes" = {
|
||||
"desktopSrcHash" = "8BP7PC0ZqE3d0K1AxmG05Xh3Ze1dAOcBVW9ADW4YAjY=";
|
||||
"desktopYarnHash" = "1k8ih7z9hxm38kbvnfimd0djwqlrs62s8i0hc6d6ii10l3binkzp";
|
||||
"webSrcHash" = "IM1M8iygeya8hw0uVjV4EK/jGG4UyQUTviYAvAjI7k4=";
|
||||
"webYarnHash" = "0lr5cgs8nhdjrv43pcyhq4ysrz8bncx0j969j82l0chq3nzdml5b";
|
||||
"desktopSrcHash" = "MMTuyyUXur5Fy24aXPWtZbQLAaXR2R7coEi8ZOJo1YI=";
|
||||
"desktopYarnHash" = "03wmdqnxzjrvdypwrb5z564liiqamwn6qmw2fww1mja8dkdkx5ng";
|
||||
"webSrcHash" = "u+Y/iLRlTd5RkczF6qIaer9HKFnm8LUGP8ZnB/WfiGI=";
|
||||
"webYarnHash" = "0s9ly1hr9jvb2asgjf6g5n5n5w6qh51wkwyl7ps891c0hv9m28zm";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
(if stdenv.isDarwin then darwin.apple_sdk_11_0.llvmPackages_14.stdenv else stdenv).mkDerivation rec {
|
||||
pname = "signalbackup-tools";
|
||||
version = "20230707";
|
||||
version = "20230716";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bepaald";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
hash = "sha256-kVXkcAhDpwc6/d5iXMJ3Z31p9REqWUvSimE8p+OD8aU=";
|
||||
hash = "sha256-k2QY+7mEXqvDzO0xv3XxQdhDje4iCPVOUybWnONLMTM=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
|
|
@ -17,18 +17,18 @@
|
|||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "teams-for-linux";
|
||||
version = "1.1.11";
|
||||
version = "1.2.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "IsmaelMartinez";
|
||||
repo = "teams-for-linux";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-D0qZvKGfLE6VreCYn4Io2KmHcAHCVegG8xZwmxsQH5c=";
|
||||
hash = "sha256-x5OYSU396FIgFbs4VchEpKI8Xv0mk2XPraejBgzWta0=";
|
||||
};
|
||||
|
||||
offlineCache = fetchYarnDeps {
|
||||
yarnLock = "${finalAttrs.src}/yarn.lock";
|
||||
hash = "sha256-Zk3TAoGAPeki/ogfNl/XqeBBn6N/kbNcktRHEyqPOAA=";
|
||||
hash = "sha256-HiNBXDQuPM8MnSkxYS5f+kop5QeUintNPBWtp6uhiz8=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
|
11
pkgs/applications/networking/irc/tiny/Cargo.lock.patch
Normal file
11
pkgs/applications/networking/irc/tiny/Cargo.lock.patch
Normal file
|
@ -0,0 +1,11 @@
|
|||
--- a/Cargo.lock
|
||||
+++ b/Cargo.lock
|
||||
@@ -1535,7 +1535,7 @@ checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
|
||||
|
||||
[[package]]
|
||||
name = "tiny"
|
||||
-version = "0.10.0"
|
||||
+version = "0.11.0"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"dirs",
|
|
@ -12,16 +12,18 @@
|
|||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "tiny";
|
||||
version = "0.10.0";
|
||||
version = "0.11.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "osa1";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "177d1x4z0mh0p7c5ldq70cn1j3pac50d8cil2ni50hl49c3x6yy1";
|
||||
hash = "sha256-oOaLQh9gJlurHi9awoRh4wQnXwkuOGJLnGQA6di6k1Q=";
|
||||
};
|
||||
|
||||
cargoSha256 = "05q3f1wp48mwkz8n0102rwb6jzrgpx3dlbxzf3zcw8r1mblgzim1";
|
||||
cargoPatches = [ ./Cargo.lock.patch ];
|
||||
|
||||
cargoHash = "sha256-wUBScLNRNAdDZ+HpQjYiExgPJnE9cxviooHePbJI13Q=";
|
||||
|
||||
nativeBuildInputs = lib.optional stdenv.isLinux pkg-config;
|
||||
buildInputs = lib.optionals dbusSupport [ dbus ]
|
||||
|
@ -30,6 +32,11 @@ rustPlatform.buildRustPackage rec {
|
|||
|
||||
buildFeatures = lib.optional notificationSupport "desktop-notifications";
|
||||
|
||||
checkFlags = [
|
||||
# flaky test
|
||||
"--skip=tests::config::parsing_tab_configs"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "A console IRC client";
|
||||
homepage = "https://github.com/osa1/tiny";
|
||||
|
|
|
@ -1,14 +1,17 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, openvpn
|
||||
, fetchpatch
|
||||
, fetchurl
|
||||
, iproute2
|
||||
, autoconf
|
||||
, automake
|
||||
, libnl
|
||||
, autoreconfHook
|
||||
, pkg-config
|
||||
}:
|
||||
|
||||
openvpn.overrideAttrs (oldAttrs:
|
||||
let
|
||||
inherit (lib) optional;
|
||||
fetchMullvadPatch = { commit, sha256 }: fetchpatch {
|
||||
url = "https://github.com/mullvad/openvpn/commit/${commit}.patch";
|
||||
inherit sha256;
|
||||
|
@ -16,68 +19,90 @@ openvpn.overrideAttrs (oldAttrs:
|
|||
in
|
||||
rec {
|
||||
pname = "openvpn-mullvad";
|
||||
version = "2.5.3";
|
||||
version = "2.6.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://swupdate.openvpn.net/community/releases/openvpn-${version}.tar.gz";
|
||||
sha256 = "sha256-dfAETfRJQwVVynuZWit3qyTylG/cNmgwG47cI5hqX34=";
|
||||
sha256 = "sha256-6+yTMmPJhQ72984SXi8iIUvmCxy7jM/xiJJkP+CDro8=";
|
||||
};
|
||||
|
||||
buildInputs = oldAttrs.buildInputs or [ ] ++ [
|
||||
iproute2
|
||||
];
|
||||
|
||||
configureFlags = oldAttrs.configureFlags or [ ] ++ [
|
||||
"--enable-iproute2"
|
||||
"IPROUTE=${iproute2}/sbin/ip"
|
||||
];
|
||||
|
||||
nativeBuildInputs = oldAttrs.nativeBuildInputs or [ ] ++ [
|
||||
autoconf
|
||||
automake
|
||||
autoreconfHook
|
||||
pkg-config
|
||||
];
|
||||
|
||||
buildInputs = oldAttrs.buildInputs or [ ]
|
||||
++ optional stdenv.isLinux [ libnl.dev ];
|
||||
|
||||
configureFlags = [
|
||||
# Assignement instead of appending to make sure to use exactly the flags required by mullvad
|
||||
|
||||
# Flags are based on https://github.com/mullvad/mullvadvpn-app-binaries/blob/main/Makefile#L17
|
||||
"--enable-static"
|
||||
"--disable-shared"
|
||||
"--disable-debug"
|
||||
"--disable-plugin-down-root"
|
||||
"--disable-management"
|
||||
"--disable-port-share"
|
||||
"--disable-systemd"
|
||||
"--disable-dependency-tracking"
|
||||
"--disable-pkcs11"
|
||||
"--disable-plugin-auth-pam"
|
||||
"--enable-plugins"
|
||||
"--disable-lzo"
|
||||
"--disable-lz4"
|
||||
"--enable-comp-stub"
|
||||
]
|
||||
++ optional stdenv.isLinux [
|
||||
# Flags are based on https://github.com/mullvad/mullvadvpn-app-binaries/blob/main/Makefile#L35
|
||||
"--enable-dco" # requires libnl
|
||||
"--disable-iproute2"
|
||||
];
|
||||
|
||||
patches = oldAttrs.patches or [ ] ++ [
|
||||
# look at compare to find the relevant commits
|
||||
# https://github.com/OpenVPN/openvpn/compare/release/2.5...mullvad:mullvad-patches
|
||||
# https://github.com/OpenVPN/openvpn/compare/release/2.6...mullvad:mullvad-patches
|
||||
# used openvpn version is the latest tag ending with -mullvad
|
||||
# https://github.com/mullvad/openvpn/tags
|
||||
(fetchMullvadPatch {
|
||||
# "Reduce PUSH_REQUEST_INTERVAL to one second"
|
||||
commit = "41e44158fc71bb6cc8cc6edb6ada3307765a12e8";
|
||||
sha256 = "sha256-UoH0V6gTPdEuybFkWxdaB4zomt7rZeEUyXs9hVPbLb4=";
|
||||
})
|
||||
(fetchMullvadPatch {
|
||||
# "Allow auth plugins to set a failure reason"
|
||||
commit = "f51781c601e8c72ae107deaf25bf66f7c193e9cd";
|
||||
sha256 = "sha256-+kwG0YElL16T0e+avHlI8gNQdAxneRS6fylv7QXvC1s=";
|
||||
commit = "4084b49de84e64c56584a378e85faf37973b6d6d";
|
||||
sha256 = "sha256-MmYeFSw6c/QJh0LqLgkx+UxrbtTVv6zEFcnYEqznR1c=";
|
||||
})
|
||||
(fetchMullvadPatch {
|
||||
# "Send an event to any plugins when authentication fails"
|
||||
commit = "c2f810f966f2ffd68564d940b5b8946ea6007d5a";
|
||||
sha256 = "sha256-PsKIxYwpLD66YaIpntXJM8OGcObyWBSAJsQ60ojvj30=";
|
||||
commit = "f24de7922d70c6e1ae06acf18bce1f62d9fa6b07";
|
||||
sha256 = "sha256-RvlQbR6/s4NorYeA6FL7tE6geg6MIoZJtHeYxkVbdwA=";
|
||||
})
|
||||
(fetchMullvadPatch {
|
||||
# "Shutdown when STDIN is closed"
|
||||
commit = "879d6a3c0288b5443bbe1b94261655c329fc2e0e";
|
||||
sha256 = "sha256-pRFY4r+b91/xAKXx6u5GLzouQySXuO5gH0kMGm77a3c=";
|
||||
})
|
||||
(fetchMullvadPatch {
|
||||
# "Update TAP hardware ID"
|
||||
commit = "7f71b37a3b25bec0b33a0e29780c222aef869e9d";
|
||||
sha256 = "sha256-RF/GvD/ZvhLdt34wDdUT/yxa+IVWx0eY6WRdNWXxXeQ=";
|
||||
commit = "81ae84271c044359b67991b15ebfb0cf9a32b3ad";
|
||||
sha256 = "sha256-ilKMyU97ha2m0p1FD64aNQncnKo4Tyi/nATuD5yPmVw=";
|
||||
})
|
||||
(fetchMullvadPatch {
|
||||
# "Undo dependency on Python docutils"
|
||||
commit = "abd3c6214529d9f4143cc92dd874d8743abea17c";
|
||||
sha256 = "sha256-SC2RlpWHUDMAEKap1t60dC4hmalk3vok6xY+/xhC2U0=";
|
||||
commit = "a5064b4b6c598b68d8cabc3f4006e5addef1ec1e";
|
||||
sha256 = "sha256-+B6jxL0M+W5LzeukXkir26hn1OaYnycVNBwMYFq6gsE=";
|
||||
})
|
||||
(fetchMullvadPatch {
|
||||
# "Prevent signal when stdin is closed from being cleared (#10)"
|
||||
commit = "b45b090c81e7b4f2dc938642af7a1e12f699f5c5";
|
||||
sha256 = "sha256-KPTFmbuJhMI+AvaRuu30CPPLQAXiE/VApxlUCqbZFls=";
|
||||
commit = "abe529e6d7f71228a036007c6c02624ec98ad6c1";
|
||||
sha256 = "sha256-qJQeEtZO/+8kenXTKv4Bx6NltUYe8AwzXQtJcyhrjfc=";
|
||||
})
|
||||
(fetchMullvadPatch {
|
||||
# "Disable libcap-ng"
|
||||
commit = "598014de7c063fa4e8ba1fffa01434229faafd04";
|
||||
sha256 = "sha256-+cFX5gmMuG6XFkTs6IV7utiKRF9E47F5Pgo93c+zBXo=";
|
||||
})
|
||||
(fetchMullvadPatch {
|
||||
# "Remove libnsl dep"
|
||||
commit = "845727e01ab3ec9bd58fcedb31b3cf2ebe2d5226";
|
||||
sha256 = "sha256-Via62wKVfMWHTmO7xIXXO7b5k0KYHs1D0JVg3qnXkeM=";
|
||||
})
|
||||
];
|
||||
postPatch = oldAttrs.postPatch or "" + ''
|
||||
rm ./configure
|
||||
'';
|
||||
|
||||
meta = oldAttrs.meta or { } // {
|
||||
description = "OpenVPN with Mullvad-specific patches applied";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ lib, stdenv, buildGoModule, fetchFromGitHub, buildPackages, installShellFiles, fetchpatch
|
||||
{ lib, stdenv, buildGoModule, fetchFromGitHub, buildPackages, installShellFiles
|
||||
, makeWrapper
|
||||
, enableCmount ? true, fuse, macfuse-stubs
|
||||
, librclone
|
||||
|
@ -6,25 +6,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "rclone";
|
||||
version = "1.63.0";
|
||||
version = "1.63.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = pname;
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-ojP1Uf9iP6kOlzW8qsUx1SnMRxFZLsgkjFD4LVH0oTI=";
|
||||
hash = "sha256-H//Y7BFBr3VXAoKZZgjSgU4aA+Af7tvFozhpoj14ba0=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# Fix build on aarch64-darwin. Remove with the next release.
|
||||
# https://github.com/rclone/rclone/pull/7099
|
||||
(fetchpatch {
|
||||
url = "https://github.com/rclone/rclone/commit/fb5125ecee4ae1061ff933bb3b9b19243e022241.patch";
|
||||
hash = "sha256-3SzU9iiQM8zeL7VQhmq0G6e0km8WBRz4BSplRLE1vpM=";
|
||||
})
|
||||
];
|
||||
|
||||
vendorSha256 = "sha256-AXgyyI6ZbTepC/TGkHQvHiwpQOjzwG5ung71nKE5d1Y=";
|
||||
vendorHash = "sha256-AXgyyI6ZbTepC/TGkHQvHiwpQOjzwG5ung71nKE5d1Y=";
|
||||
|
||||
subPackages = [ "." ];
|
||||
|
||||
|
|
|
@ -12,13 +12,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "treesheets";
|
||||
version = "unstable-2023-07-08";
|
||||
version = "unstable-2023-07-16";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "aardappel";
|
||||
repo = "treesheets";
|
||||
rev = "7c0967ed28e3d5b100a668015e38993dab7e3e34";
|
||||
sha256 = "969Ogxcoto2pNVr5itijeYXqytJxgUJ8rH97P6K8O1A=";
|
||||
rev = "95709ed796bc1df558aa7ba3728b6eb9b6385fea";
|
||||
sha256 = "wNGVvIQkAburH37GumSZX09V++MVCNvXee5Gw7YQHtc=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
24
pkgs/applications/radio/pat/default.nix
Normal file
24
pkgs/applications/radio/pat/default.nix
Normal file
|
@ -0,0 +1,24 @@
|
|||
{ lib, stdenv, buildGoModule, fetchFromGitHub }:
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "pat";
|
||||
version = "0.15.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "la5nta";
|
||||
repo = "pat";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-ydv7RQ6MJ+ifWr+babdsDRnaS7DSAU+jiFJkQszy/Ro=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-TMi5l9qzhhtdJKMkKdy7kiEJJ5UPPJLkfholl+dm/78=";
|
||||
|
||||
ldflags = [ "-s" "-w" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Pat is a cross platform Winlink client written in Go.";
|
||||
homepage = "https://getpat.io/";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ dotemup ];
|
||||
};
|
||||
}
|
|
@ -5,16 +5,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "seqkit";
|
||||
version = "2.4.0";
|
||||
version = "2.5.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "shenwei356";
|
||||
repo = "seqkit";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-v2Z94UDuXnT7eVFX+uLSxXR34eIBzRm1bHwD7gO9SVA=";
|
||||
sha256 = "sha256-pk4HNtG2x3zZ+GEH5MNn/XPNSmx8zGWbVYPGCYIZucs=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-dDMSwZnTWC60zvPDvUT+9T/mUUrhW0Itn87XO/+Ef2Q=";
|
||||
vendorHash = "sha256-54kb9Na76+CgW61SnXu7EfO0InH/rjliNRcH2M/gxII=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "cross-platform and ultrafast toolkit for FASTA/Q file manipulation";
|
||||
|
|
|
@ -7,13 +7,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "primecount";
|
||||
version = "7.8";
|
||||
version = "7.9";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kimwalisch";
|
||||
repo = "primecount";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-yKk+zXvA/MI7y9gCMwJNYHRYIYgeWyJHjyPi1uNWVnM=";
|
||||
hash = "sha256-0sn6WnrI6Umrsz3lvFIzFi8/fEAqh1qhWxtNPPq5SyA=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "sumo";
|
||||
version = "1.17.0";
|
||||
version = "1.18.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "eclipse";
|
||||
repo = "sumo";
|
||||
rev = "v${lib.replaceStrings ["."] ["_"] version}";
|
||||
sha256 = "sha256-Br5ugEyGu3zLeylCvoVE92zOCpB5cuXLv1dGLpM3FwI=";
|
||||
sha256 = "sha256-/MKhec4nhz6juTCc5dNrrDAlzldodGjili4vWkzafPM=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "qgroundcontrol";
|
||||
version = "4.2.6";
|
||||
version = "4.2.8";
|
||||
|
||||
qtInputs = [
|
||||
qtbase qtcharts qtlocation qtserialport qtsvg qtquickcontrols2
|
||||
|
@ -67,7 +67,7 @@ stdenv.mkDerivation rec {
|
|||
owner = "mavlink";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-mMeKDfylVEqLo1i2ucUBu287Og4472Ecp7Cge9Cw3kE=";
|
||||
sha256 = "sha256-EmGtVy/cHiZ2SqOOKmt9vCUQbyT5Sl8XnkRlhn9BdvA=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
}:
|
||||
|
||||
let
|
||||
version = "1.14.0";
|
||||
version = "1.15.0";
|
||||
|
||||
# build stimuli file for PGO build and the script to generate it
|
||||
# independently of the foot's build, so we can cache the result
|
||||
|
@ -39,7 +39,7 @@ let
|
|||
|
||||
src = fetchurl {
|
||||
url = "https://codeberg.org/dnkl/foot/raw/tag/${version}/scripts/generate-alt-random-writes.py";
|
||||
sha256 = "0w4d0rxi54p8lvbynypcywqqwbbzmyyzc0svjab27ngmdj1034ii";
|
||||
hash = "sha256-NvkKJ75n/OzgEd2WHX1NQIXPn9R0Z+YI1rpFmNxaDhk=";
|
||||
};
|
||||
|
||||
dontUnpack = true;
|
||||
|
@ -98,7 +98,7 @@ stdenv.mkDerivation rec {
|
|||
owner = "dnkl";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "1187805pxygyl547w75i4cl37kaw8y8ng11r5qqldv6fm74k31mk";
|
||||
hash = "sha256-ji0e5E2yy0wYbzw38nuQRoRcd83FsJh6E5TabtUP1g8=";
|
||||
};
|
||||
|
||||
depsBuildBuild = [
|
||||
|
|
|
@ -32,13 +32,13 @@ let
|
|||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "wayst";
|
||||
version = "unstable-2021-04-05";
|
||||
version = "unstable-2023-07-16";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "91861";
|
||||
repo = pname;
|
||||
rev = "e72ca78ef72c7b1e92473a98d435a3c85d7eab98";
|
||||
hash = "sha256-UXAVSfVpk/8KSg4oMw2tVWImD6HqJ7gEioR2MqhUUoQ=";
|
||||
rev = "f8b218eec1af706fd5ae287f5073e6422eb8b6d8";
|
||||
hash = "sha256-tA2R6Snk5nqWkPXSbs7wmovWkT97xafdK0e/pKBUIUg=";
|
||||
};
|
||||
|
||||
makeFlags = [ "INSTALL_DIR=\${out}/bin" ];
|
||||
|
@ -56,11 +56,7 @@ stdenv.mkDerivation rec {
|
|||
utf8proc
|
||||
wayland
|
||||
];
|
||||
|
||||
# This patch forces the Makefile to use utf8proc
|
||||
# The makefile relies on ldconfig to find the utf8proc libraries
|
||||
# which is not possible on nixpkgs
|
||||
patches = [ ./utf8proc.patch ];
|
||||
enableParallelBuilding = true;
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace src/settings.c \
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
commit caa5a6bed31937f2d1b322da204e11eae57a720f
|
||||
Author: Nicolas Berbiche <nicolas@normie.dev>
|
||||
Date: Tue Oct 20 18:14:44 2020 -0400
|
||||
|
||||
PATCH: use nixpkgs utf8proc
|
||||
|
||||
This patch forces the Makefile to use utf8proc from `buildInputs`.
|
||||
The Makefile relies on ldconfig to find the utf8proc libraries,
|
||||
which is not possible with nixpkgs.
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index caccdf7..90b11ea 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -29,7 +29,7 @@ else
|
||||
LDFLAGS = -O2 -flto
|
||||
endif
|
||||
|
||||
-ifeq ($(shell ldconfig -p | grep libutf8proc.so > /dev/null || echo fail),fail)
|
||||
+ifeq (false,fail)
|
||||
$(info libutf8proc not found. Support for language-specific combining characters and unicode normalization will be disabled.)
|
||||
CFLAGS += -DNOUTF8PROC
|
||||
else
|
||||
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "git-codereview";
|
||||
version = "1.3.0";
|
||||
version = "1.4.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "golang";
|
||||
repo = "review";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-GZ1qdFjWhEO1fd+G5qWaV7OTUaalBZFbLTrIO58hKOQ=";
|
||||
hash = "sha256-N6L+TlPU/lStMPTFYKFH2GiwyGkEJJuKtkH7wKLuM00=";
|
||||
};
|
||||
|
||||
vendorHash = null;
|
||||
|
|
|
@ -1,52 +1,92 @@
|
|||
{ lib
|
||||
, rustPlatform
|
||||
{ stdenv
|
||||
, lib
|
||||
, fetchFromGitHub
|
||||
, pkg-config
|
||||
, openssl
|
||||
, stdenv
|
||||
, dbus
|
||||
, sqlite
|
||||
, rustPlatform
|
||||
, Security
|
||||
, SystemConfiguration
|
||||
, pkg-config
|
||||
, libiconv
|
||||
, openssl
|
||||
, gzip
|
||||
, libssh2
|
||||
, libgit2
|
||||
, zstd
|
||||
, fetchpatch
|
||||
, installShellFiles
|
||||
, nix-update-script
|
||||
, testers
|
||||
, jujutsu
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "jujutsu";
|
||||
version = "0.7.0";
|
||||
version = "0.8.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "martinvonz";
|
||||
repo = "jj";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-FczlSBlLhLIamLiY4cGVAoHx0/sxx+tykICzedFbbx8=";
|
||||
sha256 = "sha256-kbJWkCnb77VRKemA8WejaChaQYCxNiVMbqW5PCrDoE8=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-PydDgXp47KUSLvAQgfO+09lrzTnBjzGd+zA5f/jZfRc=";
|
||||
cargoHash = "sha256-qbCOVcKpNGWGonRAwPsr3o3yd+7qUTy3IVmC3Ifn4xE=";
|
||||
|
||||
# Needed to get openssl-sys to use pkg-config.
|
||||
OPENSSL_NO_VENDOR = 1;
|
||||
buildNoDefaultFeatures = true;
|
||||
buildFeatures = [
|
||||
# enable 'packaging' feature, which enables extra features such as support
|
||||
# for watchman
|
||||
"packaging"
|
||||
];
|
||||
|
||||
patches = [
|
||||
# this patch (hopefully!) fixes a very, very rare test failure that can
|
||||
# occasionally be cajoled out of Nix and GitHub CI builds. go ahead and
|
||||
# apply it to be safe.
|
||||
(fetchpatch {
|
||||
url = "https://github.com/martinvonz/jj/commit/8e7e32710d29010423f3992bb920aaf2a0fa04ec.patch";
|
||||
hash = "sha256-ySieobB1P/DpWOurcCb4BXoHk9IqrjzMfzdc3O5cTXk=";
|
||||
})
|
||||
];
|
||||
|
||||
cargoBuildFlags = [ "--bin" "jj" ]; # don't install the fake editors
|
||||
useNextest = true; # nextest is the upstream integration framework
|
||||
ZSTD_SYS_USE_PKG_CONFIG = "1"; # disable vendored zlib
|
||||
LIBSSH2_SYS_USE_PKG_CONFIG = "1"; # disable vendored libssh2
|
||||
|
||||
nativeBuildInputs = [
|
||||
gzip
|
||||
installShellFiles
|
||||
pkg-config
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
openssl
|
||||
dbus
|
||||
sqlite
|
||||
zstd
|
||||
libgit2
|
||||
libssh2
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
Security
|
||||
SystemConfiguration
|
||||
libiconv
|
||||
];
|
||||
|
||||
passthru.tests = {
|
||||
version = testers.testVersion {
|
||||
package = jujutsu;
|
||||
command = "jj --version";
|
||||
postInstall = ''
|
||||
$out/bin/jj util mangen > ./jj.1
|
||||
installManPage ./jj.1
|
||||
|
||||
installShellCompletion --cmd jj \
|
||||
--bash <($out/bin/jj util completion --bash) \
|
||||
--fish <($out/bin/jj util completion --fish) \
|
||||
--zsh <($out/bin/jj util completion --zsh)
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
updateScript = nix-update-script { };
|
||||
tests = {
|
||||
version = testers.testVersion {
|
||||
package = jujutsu;
|
||||
command = "jj --version";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -55,7 +95,7 @@ rustPlatform.buildRustPackage rec {
|
|||
homepage = "https://github.com/martinvonz/jj";
|
||||
changelog = "https://github.com/martinvonz/jj/blob/v${version}/CHANGELOG.md";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ _0x4A6F ];
|
||||
maintainers = with maintainers; [ _0x4A6F thoughtpolice ];
|
||||
mainProgram = "jj";
|
||||
};
|
||||
}
|
||||
|
|
1084
pkgs/applications/virtualization/cloud-hypervisor/Cargo.lock
generated
1084
pkgs/applications/virtualization/cloud-hypervisor/Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -2,27 +2,28 @@
|
|||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "cloud-hypervisor";
|
||||
version = "32.0";
|
||||
version = "33.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cloud-hypervisor";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "aSBzbxL9TOYVQUZBgHI8GHELfx9avRDHh/MWmN+/nY0=";
|
||||
sha256 = "sha256-ODhiK0lAN5G9FLBjIdvDl9ya5JKwg8Sv06iDkt44vWc=";
|
||||
};
|
||||
|
||||
cargoLock = {
|
||||
lockFile = ./Cargo.lock;
|
||||
outputHashes = {
|
||||
"acpi_tables-0.1.0" = "sha256-aT0p85QDGjBEnbABedm0q7JPpiNjhupoIzBWifQ0RaQ=";
|
||||
"acpi_tables-0.1.0" = "sha256-OdtnF2fV6oun3NeCkXdaGU3U7ViBcgFKqHKdyZsRsPA=";
|
||||
"kvm-bindings-0.6.0" = "sha256-wGdAuPwsgRIqx9dh0m+hC9A/Akz9qg9BM+p06Fi5ACM=";
|
||||
"kvm-ioctls-0.13.0" = "sha256-jHnFGwBWnAa2lRu4a5eRNy1Y26NX5MV8alJ86VR++QE=";
|
||||
"micro_http-0.1.0" = "sha256-w2witqKXE60P01oQleujmHSnzMKxynUGKWyq5GEh1Ew=";
|
||||
"mshv-bindings-0.1.1" = "sha256-Pg7UPhW6UOahCQu1jU27lenrsmLT/VdceDqL6lOdmFU=";
|
||||
"versionize_derive-0.1.4" = "sha256-BPl294UqjVl8tThuvylXUFjFNjJx8OSfBGJLg8jIkWw=";
|
||||
"vfio-bindings-0.4.0" = "sha256-lKdoo/bmnZTRV7RRWugwHDFFCB6FKxpzxDEEMVqSbwA=";
|
||||
"vfio_user-0.1.0" = "sha256-JYNiONQNNpLu57Pjdn2BlWOdmSf3c4/XJg/RsVxH3uk=";
|
||||
"vm-fdt-0.2.0" = "sha256-gVKGiE3ZSe+z3oOHR3zqVdc7XMHzkp4kO4p/WfK0VI8=";
|
||||
"mshv-bindings-0.1.1" = "sha256-hmOTu/e1WFk6rc+oXxBja+gFlDqnAIXzyWdiUd+Al1E=";
|
||||
"versionize_derive-0.1.4" = "sha256-oGuREJ5+FDs8ihmv99WmjIPpL2oPdOr4REk6+7cV/7o=";
|
||||
"vfio-bindings-0.4.0" = "sha256-8zdpLD9e1TAwG+m6ifS7/Fh39fAs5VxtnS5gUj/eKmY=";
|
||||
"vfio_user-0.1.0" = "sha256-b/gL6vPMW44O44lBIjqS+hgqVUUskBmttGk5UKIMgZk=";
|
||||
"vm-fdt-0.2.0" = "sha256-lKW4ZUraHomSDyxgNlD5qTaBTZqM0Fwhhh/08yhrjyE=";
|
||||
"vhost-0.7.0" = "sha256-KdVROh44UzZJqtzxfM6gwAokzY6El8iDPfw2nnkmhiQ=";
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -15,13 +15,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "cri-o";
|
||||
version = "1.27.0";
|
||||
version = "1.27.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cri-o";
|
||||
repo = "cri-o";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-ZFt8KcEJ7iN2JgKbOGDgpq0+pjlxEU7V9GSX+c3VnbY=";
|
||||
sha256 = "sha256-29lA497DTJ1AOqcfbgUCYcBqB8WUWWXBMqFOpyx93wY=";
|
||||
};
|
||||
vendorHash = null;
|
||||
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "nixpacks";
|
||||
version = "1.10.0";
|
||||
version = "1.10.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "railwayapp";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-ltssKi78lBkHEgdlVSRPWXEczWIACwHTz0SW57/sTAQ=";
|
||||
sha256 = "sha256-1XaIdnIBLHrT/w41pMm6EUEsvM8oY4r868MzK1vme44=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-nUP4g3RFBCC13beSHRqRKdlf3HtHUthGo/friKvce+Q=";
|
||||
cargoHash = "sha256-8b5fLmhEJozk0j2z5B8wCcza4ZKiKbFYsoVBwz/urK8=";
|
||||
|
||||
# skip test due FHS dependency
|
||||
doCheck = false;
|
||||
|
|
|
@ -21,11 +21,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "e16";
|
||||
version = "1.0.27";
|
||||
version = "1.0.28";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/enlightenment/e16-${version}.tar.xz";
|
||||
hash = "sha256-Lr5OC14N6KTZNU3Ei4O9taYGL+1NZd5JmejYBmmELUE=";
|
||||
hash = "sha256-k3W2IoBc75DNQ2QSjChsC/yVRO/aZT3E31Tl/njgH30=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
56
pkgs/build-support/fetchpijul/default.nix
Normal file
56
pkgs/build-support/fetchpijul/default.nix
Normal file
|
@ -0,0 +1,56 @@
|
|||
{ lib, stdenvNoCC, pijul }:
|
||||
|
||||
lib.makeOverridable (
|
||||
{ url
|
||||
, hash ? ""
|
||||
, change ? null
|
||||
, state ? null
|
||||
, channel ? "main"
|
||||
, name ? "fetchpijul"
|
||||
, # TODO: Changes in pijul are unordered so there's many ways to end up with the same repository state.
|
||||
# This makes leaveDotPijul unfeasible to implement until pijul CLI implements
|
||||
# a way of reordering changes to sort them in a consistent and deterministic manner.
|
||||
# leaveDotPijul ? false
|
||||
}:
|
||||
if change != null && state != null then
|
||||
throw "Only one of 'change' or 'state' can be set"
|
||||
else
|
||||
stdenvNoCC.mkDerivation {
|
||||
inherit name;
|
||||
nativeBuildInputs = [ pijul ];
|
||||
|
||||
dontUnpack = true;
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
pijul clone \
|
||||
''${change:+--change "$change"} \
|
||||
''${state:+--state "$state"} \
|
||||
--channel "$channel" \
|
||||
"$url" \
|
||||
"$out"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
fixupPhase = ''
|
||||
runHook preFixup
|
||||
|
||||
rm -rf "$out/.pijul"
|
||||
|
||||
runHook postFixup
|
||||
'';
|
||||
|
||||
outputHashAlgo = if hash != "" then null else "sha256";
|
||||
outputHashMode = "recursive";
|
||||
outputHash = if hash != "" then
|
||||
hash
|
||||
else
|
||||
lib.fakeSha256;
|
||||
|
||||
inherit url change state channel;
|
||||
}
|
||||
)
|
|
@ -6,6 +6,8 @@ let
|
|||
sha512 = "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==";
|
||||
};
|
||||
|
||||
tests = callPackage ./tests {};
|
||||
|
||||
in {
|
||||
prefetch-yarn-deps = stdenv.mkDerivation {
|
||||
name = "prefetch-yarn-deps";
|
||||
|
@ -38,6 +40,8 @@ in {
|
|||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
passthru = { inherit tests; };
|
||||
};
|
||||
|
||||
fetchYarnDeps = let
|
||||
|
@ -75,6 +79,6 @@ in {
|
|||
} // hash_ // (removeAttrs args ["src" "name" "hash" "sha256"]));
|
||||
|
||||
in lib.setFunctionArgs f (lib.functionArgs f) // {
|
||||
tests = callPackage ./tests {};
|
||||
inherit tests;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -78,12 +78,21 @@ const isGitUrl = pattern => {
|
|||
}
|
||||
|
||||
const downloadPkg = (pkg, verbose) => {
|
||||
const [ name, spec ] = pkg.key.split('@', 2);
|
||||
if (spec.startsWith('file:')) {
|
||||
console.info(`ignoring relative file:path dependency "${spec}"`)
|
||||
return
|
||||
}
|
||||
|
||||
const [ url, hash ] = pkg.resolved.split('#')
|
||||
if (verbose) console.log('downloading ' + url)
|
||||
const fileName = urlToName(url)
|
||||
if (url.startsWith('https://codeload.github.com/') && url.includes('/tar.gz/')) {
|
||||
const s = url.split('/')
|
||||
downloadGit(fileName, `https://github.com/${s[3]}/${s[4]}.git`, s[6])
|
||||
return downloadGit(fileName, `https://github.com/${s[3]}/${s[4]}.git`, s[s.length-1])
|
||||
} else if (url.startsWith('https://github.com/') && url.endsWith('.tar.gz')) {
|
||||
const s = url.split('/')
|
||||
return downloadGit(fileName, `https://github.com/${s[3]}/${s[4]}.git`, s[s.length-1].replace(/.tar.gz$/, ''))
|
||||
} else if (isGitUrl(url)) {
|
||||
return downloadGit(fileName, url.replace(/^git\+/, ''), hash)
|
||||
} else if (url.startsWith('https://')) {
|
||||
|
|
|
@ -3,14 +3,18 @@
|
|||
{
|
||||
simple = testers.invalidateFetcherByDrvHash fetchYarnDeps {
|
||||
yarnLock = ./simple.lock;
|
||||
sha256 = "sha256-Erdkw2E8wWT09jFNLXGkrdwKl0HuSZWnUDJUrV95vSE=";
|
||||
sha256 = "sha256-FRrt8BixleILmFB2ZV8RgPNLqgS+dlH5nWoPgeaaNQ8=";
|
||||
};
|
||||
gitDep = testers.invalidateFetcherByDrvHash fetchYarnDeps {
|
||||
yarnLock = ./git.lock;
|
||||
sha256 = "sha256-lAqN4LpoE+jgsQO1nDtuORwcVEO7ogEV53jCu2jFJUI=";
|
||||
sha256 = "sha256-f90IiEzHDiBdswWewRBHcJfqqpPipaMg8N0DVLq2e8Q=";
|
||||
};
|
||||
githubDep = testers.invalidateFetcherByDrvHash fetchYarnDeps {
|
||||
yarnLock = ./github.lock;
|
||||
sha256 = "sha256-Tsfgyjxz8x6gNmfN0xR7G/NQNoEs4svxRN/N+26vfJU=";
|
||||
sha256 = "sha256-DIKrhDKoqm7tHZmcuh9eK9VTqp6BxeW0zqDUpY4F57A=";
|
||||
};
|
||||
gitUrlDep = testers.invalidateFetcherByDrvHash fetchYarnDeps {
|
||||
yarnLock = ./giturl.lock;
|
||||
sha256 = "sha256-VPnyqN6lePQZGXwR7VhbFnP7/0/LB621RZwT1F+KzVQ=";
|
||||
};
|
||||
}
|
||||
|
|
11
pkgs/build-support/node/fetch-yarn-deps/tests/giturl.lock
Normal file
11
pkgs/build-support/node/fetch-yarn-deps/tests/giturl.lock
Normal file
|
@ -0,0 +1,11 @@
|
|||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"autocomplete-atom-api@https://codeload.github.com/atom/autocomplete-atom-api/legacy.tar.gz/refs/tags/v0.10.7":
|
||||
version "0.10.7"
|
||||
resolved "https://codeload.github.com/atom/autocomplete-atom-api/legacy.tar.gz/refs/tags/v0.10.7#c9d51fa721d543ccfc1b2189101155e81db6b97d"
|
||||
|
||||
"find-and-replace@https://github.com/atom-community/find-and-replace/archive/refs/tags/v0.220.1.tar.gz":
|
||||
version "0.220.1"
|
||||
resolved "https://github.com/atom-community/find-and-replace/archive/refs/tags/v0.220.1.tar.gz#d7a0f56511e38ee72a89895a795bbbcab4a1a405"
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "cozette";
|
||||
version = "1.19.2";
|
||||
version = "1.20.1";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/slavfox/Cozette/releases/download/v.${version}/CozetteFonts.zip";
|
||||
hash = "sha256-+TnKUgrAafR5irS9XeXWfb1a2PfUKOXf8CAmqJbf6y4=";
|
||||
url = "https://github.com/slavfox/Cozette/releases/download/v.${version}/CozetteFonts-v-${builtins.replaceStrings ["."] ["-"] version}.zip";
|
||||
hash = "sha256-5JODQhwKJRRBypAuVFulv9FiaVNchVi/TPb4HYQgvzk=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
|
@ -23,6 +23,7 @@ stdenvNoCC.mkDerivation rec {
|
|||
meta = with lib; {
|
||||
description = "A bitmap programming font optimized for coziness";
|
||||
homepage = "https://github.com/slavfox/cozette";
|
||||
changelog = "https://github.com/slavfox/Cozette/blob/v.${version}/CHANGELOG.md";
|
||||
license = licenses.mit;
|
||||
platforms = platforms.all;
|
||||
maintainers = with maintainers; [ brettlyons marsam ];
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "clash-geoip";
|
||||
version = "20230612";
|
||||
version = "20230712";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/Dreamacro/maxmind-geoip/releases/download/${version}/Country.mmdb";
|
||||
sha256 = "sha256-uD+UzMjpQvuNMcIxm4iHLnJwhxXstE3W+0xCuf9j/i8=";
|
||||
sha256 = "sha256-QXxY/WruYY09LL+OEKhd/EUb+GOI49KFnG75mbwMWoU=";
|
||||
};
|
||||
|
||||
dontUnpack = true;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue