Merge master into staging-next
This commit is contained in:
commit
a6928c74cc
|
@ -11,6 +11,10 @@ under the terms of [COPYING](COPYING), which is an MIT-like license.
|
|||
|
||||
## Submitting changes
|
||||
|
||||
Read the ["Submitting changes"](https://nixos.org/nixpkgs/manual/#chap-submitting-changes) section of the nixpkgs manual. It explains how to write, test, and iterate on your change, and which branch to base your pull request against.
|
||||
|
||||
Below is a short excerpt of some points in there:
|
||||
|
||||
* Format the commit messages in the following way:
|
||||
|
||||
```
|
||||
|
@ -40,7 +44,7 @@ under the terms of [COPYING](COPYING), which is an MIT-like license.
|
|||
* If there is no upstream license, `meta.license` should default to `lib.licenses.unfree`.
|
||||
* `meta.maintainers` must be set.
|
||||
|
||||
See the nixpkgs manual for more details on [standard meta-attributes](https://nixos.org/nixpkgs/manual/#sec-standard-meta-attributes) and on how to [submit changes to nixpkgs](https://nixos.org/nixpkgs/manual/#chap-submitting-changes).
|
||||
See the nixpkgs manual for more details on [standard meta-attributes](https://nixos.org/nixpkgs/manual/#sec-standard-meta-attributes).
|
||||
|
||||
## Writing good commit messages
|
||||
|
||||
|
|
|
@ -104,4 +104,6 @@ chroot_add_resolv_conf "$mountPoint" || print "ERROR: failed to set up resolv.co
|
|||
chroot "$mountPoint" systemd-tmpfiles --create --remove --exclude-prefix=/dev 1>&2 || true
|
||||
)
|
||||
|
||||
unset TMPDIR
|
||||
|
||||
exec chroot "$mountPoint" "${command[@]}"
|
||||
|
|
|
@ -544,6 +544,7 @@
|
|||
./services/misc/gollum.nix
|
||||
./services/misc/gpsd.nix
|
||||
./services/misc/headphones.nix
|
||||
./services/misc/heisenbridge.nix
|
||||
./services/misc/greenclip.nix
|
||||
./services/misc/home-assistant.nix
|
||||
./services/misc/ihaskell.nix
|
||||
|
|
|
@ -209,62 +209,42 @@ in {
|
|||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
# install mpd units
|
||||
systemd.packages = [ pkgs.mpd ];
|
||||
|
||||
systemd.sockets.mpd = mkIf cfg.startWhenNeeded {
|
||||
description = "Music Player Daemon Socket";
|
||||
wantedBy = [ "sockets.target" ];
|
||||
listenStreams = [
|
||||
(if pkgs.lib.hasPrefix "/" cfg.network.listenAddress
|
||||
then cfg.network.listenAddress
|
||||
else "${optionalString (cfg.network.listenAddress != "any") "${cfg.network.listenAddress}:"}${toString cfg.network.port}")
|
||||
];
|
||||
socketConfig = {
|
||||
Backlog = 5;
|
||||
KeepAlive = true;
|
||||
PassCredentials = true;
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.mpd = {
|
||||
after = [ "network.target" "sound.target" ];
|
||||
description = "Music Player Daemon";
|
||||
wantedBy = optional (!cfg.startWhenNeeded) "multi-user.target";
|
||||
|
||||
serviceConfig = mkMerge [
|
||||
preStart =
|
||||
''
|
||||
set -euo pipefail
|
||||
install -m 600 ${mpdConf} /run/mpd/mpd.conf
|
||||
'' + optionalString (cfg.credentials != [])
|
||||
(concatStringsSep "\n"
|
||||
(imap0
|
||||
(i: c: ''${pkgs.replace-secret}/bin/replace-secret '{{password-${toString i}}}' '${c.passwordFile}' /run/mpd/mpd.conf'')
|
||||
cfg.credentials));
|
||||
|
||||
serviceConfig =
|
||||
{
|
||||
User = "${cfg.user}";
|
||||
ExecStart = "${pkgs.mpd}/bin/mpd --no-daemon /run/mpd/mpd.conf";
|
||||
ExecStartPre = pkgs.writeShellScript "mpd-start-pre" (''
|
||||
set -euo pipefail
|
||||
install -m 600 ${mpdConf} /run/mpd/mpd.conf
|
||||
'' + optionalString (cfg.credentials != [])
|
||||
(concatStringsSep "\n"
|
||||
(imap0
|
||||
(i: c: ''${pkgs.replace-secret}/bin/replace-secret '{{password-${toString i}}}' '${c.passwordFile}' /run/mpd/mpd.conf'')
|
||||
cfg.credentials))
|
||||
);
|
||||
# Note: the first "" overrides the ExecStart from the upstream unit
|
||||
ExecStart = [ "" "${pkgs.mpd}/bin/mpd --systemd /run/mpd/mpd.conf" ];
|
||||
RuntimeDirectory = "mpd";
|
||||
Type = "notify";
|
||||
LimitRTPRIO = 50;
|
||||
LimitRTTIME = "infinity";
|
||||
ProtectSystem = true;
|
||||
NoNewPrivileges = true;
|
||||
ProtectKernelTunables = true;
|
||||
ProtectControlGroups = true;
|
||||
ProtectKernelModules = true;
|
||||
RestrictAddressFamilies = "AF_INET AF_INET6 AF_UNIX AF_NETLINK";
|
||||
RestrictNamespaces = true;
|
||||
Restart = "always";
|
||||
}
|
||||
(mkIf (cfg.dataDir == "/var/lib/${name}") {
|
||||
StateDirectory = [ name ];
|
||||
})
|
||||
(mkIf (cfg.playlistDirectory == "/var/lib/${name}/playlists") {
|
||||
StateDirectory = [ name "${name}/playlists" ];
|
||||
})
|
||||
(mkIf (cfg.musicDirectory == "/var/lib/${name}/music") {
|
||||
StateDirectory = [ name "${name}/music" ];
|
||||
})
|
||||
];
|
||||
StateDirectory = []
|
||||
++ optionals (cfg.dataDir == "/var/lib/${name}") [ name ]
|
||||
++ optionals (cfg.playlistDirectory == "/var/lib/${name}/playlists") [ name "${name}/playlists" ]
|
||||
++ optionals (cfg.musicDirectory == "/var/lib/${name}/music") [ name "${name}/music" ];
|
||||
};
|
||||
};
|
||||
|
||||
users.users = optionalAttrs (cfg.user == name) {
|
||||
|
|
|
@ -23,7 +23,7 @@ let
|
|||
in
|
||||
{
|
||||
options.services.heisenbridge = {
|
||||
enable = mkEnableOption "the Matrix<->IRC bridge";
|
||||
enable = mkEnableOption "A bouncer-style Matrix IRC bridge";
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
|
|
|
@ -45,16 +45,6 @@ initrd {initrd}
|
|||
options {kernel_params}
|
||||
"""
|
||||
|
||||
# The boot loader entry for memtest86.
|
||||
#
|
||||
# TODO: This is hard-coded to use the 64-bit EFI app, but it could probably
|
||||
# be updated to use the 32-bit EFI app on 32-bit systems. The 32-bit EFI
|
||||
# app filename is BOOTIA32.efi.
|
||||
MEMTEST_BOOT_ENTRY = """title MemTest86
|
||||
efi /efi/memtest86/BOOTX64.efi
|
||||
"""
|
||||
|
||||
|
||||
def generation_conf_filename(profile: Optional[str], generation: int, specialisation: Optional[str]) -> str:
|
||||
pieces = [
|
||||
"nixos",
|
||||
|
@ -283,23 +273,24 @@ def main() -> None:
|
|||
except OSError as e:
|
||||
print("ignoring profile '{}' in the list of boot entries because of the following error:\n{}".format(profile, e), file=sys.stderr)
|
||||
|
||||
memtest_entry_file = "@efiSysMountPoint@/loader/entries/memtest86.conf"
|
||||
if os.path.exists(memtest_entry_file):
|
||||
os.unlink(memtest_entry_file)
|
||||
shutil.rmtree("@efiSysMountPoint@/efi/memtest86", ignore_errors=True)
|
||||
if "@memtest86@" != "":
|
||||
mkdir_p("@efiSysMountPoint@/efi/memtest86")
|
||||
for path in glob.iglob("@memtest86@/*"):
|
||||
if os.path.isdir(path):
|
||||
shutil.copytree(path, os.path.join("@efiSysMountPoint@/efi/memtest86", os.path.basename(path)))
|
||||
else:
|
||||
shutil.copy(path, "@efiSysMountPoint@/efi/memtest86/")
|
||||
for root, _, files in os.walk('@efiSysMountPoint@/efi/nixos/.extra-files', topdown=False):
|
||||
relative_root = root.removeprefix("@efiSysMountPoint@/efi/nixos/.extra-files").removeprefix("/")
|
||||
actual_root = os.path.join("@efiSysMountPoint@", relative_root)
|
||||
|
||||
memtest_entry_file = "@efiSysMountPoint@/loader/entries/memtest86.conf"
|
||||
memtest_entry_file_tmp_path = "%s.tmp" % memtest_entry_file
|
||||
with open(memtest_entry_file_tmp_path, 'w') as f:
|
||||
f.write(MEMTEST_BOOT_ENTRY)
|
||||
os.rename(memtest_entry_file_tmp_path, memtest_entry_file)
|
||||
for file in files:
|
||||
actual_file = os.path.join(actual_root, file)
|
||||
|
||||
if os.path.exists(actual_file):
|
||||
os.unlink(actual_file)
|
||||
os.unlink(os.path.join(root, file))
|
||||
|
||||
if not len(os.listdir(actual_root)):
|
||||
os.rmdir(actual_root)
|
||||
os.rmdir(root)
|
||||
|
||||
mkdir_p("@efiSysMountPoint@/efi/nixos/.extra-files")
|
||||
|
||||
subprocess.check_call("@copyExtraFiles@")
|
||||
|
||||
# Since fat32 provides little recovery facilities after a crash,
|
||||
# it can leave the system in an unbootable state, when a crash/outage
|
||||
|
|
|
@ -29,6 +29,22 @@ let
|
|||
inherit (efi) efiSysMountPoint canTouchEfiVariables;
|
||||
|
||||
memtest86 = if cfg.memtest86.enable then pkgs.memtest86-efi else "";
|
||||
|
||||
netbootxyz = if cfg.netbootxyz.enable then pkgs.netbootxyz-efi else "";
|
||||
|
||||
copyExtraFiles = pkgs.writeShellScript "copy-extra-files" ''
|
||||
empty_file=$(mktemp)
|
||||
|
||||
${concatStrings (mapAttrsToList (n: v: ''
|
||||
${pkgs.coreutils}/bin/install -Dp "${v}" "${efi.efiSysMountPoint}/"${escapeShellArg n}
|
||||
${pkgs.coreutils}/bin/install -D $empty_file "${efi.efiSysMountPoint}/efi/nixos/.extra-files/"${escapeShellArg n}
|
||||
'') cfg.extraFiles)}
|
||||
|
||||
${concatStrings (mapAttrsToList (n: v: ''
|
||||
${pkgs.coreutils}/bin/install -Dp "${pkgs.writeText n v}" "${efi.efiSysMountPoint}/loader/entries/"${escapeShellArg n}
|
||||
${pkgs.coreutils}/bin/install -D $empty_file "${efi.efiSysMountPoint}/efi/nixos/.extra-files/loader/entries/"${escapeShellArg n}
|
||||
'') cfg.extraEntries)}
|
||||
'';
|
||||
};
|
||||
|
||||
checkedSystemdBootBuilder = pkgs.runCommand "systemd-boot" {
|
||||
|
@ -125,6 +141,74 @@ in {
|
|||
<literal>true</literal>.
|
||||
'';
|
||||
};
|
||||
|
||||
entryFilename = mkOption {
|
||||
default = "memtest86.conf";
|
||||
type = types.str;
|
||||
description = ''
|
||||
<literal>systemd-boot</literal> orders the menu entries by the config file names,
|
||||
so if you want something to appear after all the NixOS entries,
|
||||
it should start with <filename>o</filename> or onwards.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
netbootxyz = {
|
||||
enable = mkOption {
|
||||
default = false;
|
||||
type = types.bool;
|
||||
description = ''
|
||||
Make <literal>netboot.xyz</literal> available from the
|
||||
<literal>systemd-boot</literal> menu. <literal>netboot.xyz</literal>
|
||||
is a menu system that allows you to boot OS installers and
|
||||
utilities over the network.
|
||||
'';
|
||||
};
|
||||
|
||||
entryFilename = mkOption {
|
||||
default = "o_netbootxyz.conf";
|
||||
type = types.str;
|
||||
description = ''
|
||||
<literal>systemd-boot</literal> orders the menu entries by the config file names,
|
||||
so if you want something to appear after all the NixOS entries,
|
||||
it should start with <filename>o</filename> or onwards.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
extraEntries = mkOption {
|
||||
type = types.attrsOf types.lines;
|
||||
default = {};
|
||||
example = literalExpression ''
|
||||
{ "memtest86.conf" = '''
|
||||
title MemTest86
|
||||
efi /efi/memtest86/memtest86.efi
|
||||
'''; }
|
||||
'';
|
||||
description = ''
|
||||
Any additional entries you want added to the <literal>systemd-boot</literal> menu.
|
||||
These entries will be copied to <filename>/boot/loader/entries</filename>.
|
||||
Each attribute name denotes the destination file name,
|
||||
and the corresponding attribute value is the contents of the entry.
|
||||
|
||||
<literal>systemd-boot</literal> orders the menu entries by the config file names,
|
||||
so if you want something to appear after all the NixOS entries,
|
||||
it should start with <filename>o</filename> or onwards.
|
||||
'';
|
||||
};
|
||||
|
||||
extraFiles = mkOption {
|
||||
type = types.attrsOf types.path;
|
||||
default = {};
|
||||
example = literalExpression ''
|
||||
{ "efi/memtest86/memtest86.efi" = "''${pkgs.memtest86-efi}/BOOTX64.efi"; }
|
||||
'';
|
||||
description = ''
|
||||
A set of files to be copied to <filename>/boot</filename>.
|
||||
Each attribute name denotes the destination file name in
|
||||
<filename>/boot</filename>, while the corresponding
|
||||
attribute value specifies the source file.
|
||||
'';
|
||||
};
|
||||
|
||||
graceful = mkOption {
|
||||
|
@ -148,15 +232,64 @@ in {
|
|||
assertions = [
|
||||
{
|
||||
assertion = (config.boot.kernelPackages.kernel.features or { efiBootStub = true; }) ? efiBootStub;
|
||||
|
||||
message = "This kernel does not support the EFI boot stub";
|
||||
}
|
||||
];
|
||||
] ++ concatMap (filename: [
|
||||
{
|
||||
assertion = !(hasInfix "/" filename);
|
||||
message = "boot.loader.systemd-boot.extraEntries.${lib.strings.escapeNixIdentifier filename} is invalid: entries within folders are not supported";
|
||||
}
|
||||
{
|
||||
assertion = hasSuffix ".conf" filename;
|
||||
message = "boot.loader.systemd-boot.extraEntries.${lib.strings.escapeNixIdentifier filename} is invalid: entries must have a .conf file extension";
|
||||
}
|
||||
]) (builtins.attrNames cfg.extraEntries)
|
||||
++ concatMap (filename: [
|
||||
{
|
||||
assertion = !(hasPrefix "/" filename);
|
||||
message = "boot.loader.systemd-boot.extraFiles.${lib.strings.escapeNixIdentifier filename} is invalid: paths must not begin with a slash";
|
||||
}
|
||||
{
|
||||
assertion = !(hasInfix ".." filename);
|
||||
message = "boot.loader.systemd-boot.extraFiles.${lib.strings.escapeNixIdentifier filename} is invalid: paths must not reference the parent directory";
|
||||
}
|
||||
{
|
||||
assertion = !(hasInfix "nixos/.extra-files" (toLower filename));
|
||||
message = "boot.loader.systemd-boot.extraFiles.${lib.strings.escapeNixIdentifier filename} is invalid: files cannot be placed in the nixos/.extra-files directory";
|
||||
}
|
||||
]) (builtins.attrNames cfg.extraFiles);
|
||||
|
||||
boot.loader.grub.enable = mkDefault false;
|
||||
|
||||
boot.loader.supportsInitrdSecrets = true;
|
||||
|
||||
boot.loader.systemd-boot.extraFiles = mkMerge [
|
||||
# TODO: This is hard-coded to use the 64-bit EFI app, but it could probably
|
||||
# be updated to use the 32-bit EFI app on 32-bit systems. The 32-bit EFI
|
||||
# app filename is BOOTIA32.efi.
|
||||
(mkIf cfg.memtest86.enable {
|
||||
"efi/memtest86/BOOTX64.efi" = "${pkgs.memtest86-efi}/BOOTX64.efi";
|
||||
})
|
||||
(mkIf cfg.netbootxyz.enable {
|
||||
"efi/netbootxyz/netboot.xyz.efi" = "${pkgs.netbootxyz-efi}";
|
||||
})
|
||||
];
|
||||
|
||||
boot.loader.systemd-boot.extraEntries = mkMerge [
|
||||
(mkIf cfg.memtest86.enable {
|
||||
"${cfg.memtest86.entryFilename}" = ''
|
||||
title MemTest86
|
||||
efi /efi/memtest86/BOOTX64.efi
|
||||
'';
|
||||
})
|
||||
(mkIf cfg.netbootxyz.enable {
|
||||
"${cfg.netbootxyz.entryFilename}" = ''
|
||||
title netboot.xyz
|
||||
efi /efi/netbootxyz/netboot.xyz.efi
|
||||
'';
|
||||
})
|
||||
];
|
||||
|
||||
system = {
|
||||
build.installBootLoader = checkedSystemdBootBuilder;
|
||||
|
||||
|
|
|
@ -13,19 +13,30 @@ import ./make-test-python.nix ({ pkgs, ... }: {
|
|||
};
|
||||
};
|
||||
|
||||
services.getty.autologinUser = "root";
|
||||
environment.systemPackages = map
|
||||
(shell: pkgs.writeScriptBin "expect-${shell}" ''
|
||||
#!${pkgs.expect}/bin/expect -f
|
||||
|
||||
spawn env TERM=xterm ${shell} -i
|
||||
|
||||
expect "<starship>" {
|
||||
send "exit\n"
|
||||
} timeout {
|
||||
send_user "\n${shell} failed to display Starship\n"
|
||||
exit 1
|
||||
}
|
||||
|
||||
expect eof
|
||||
'')
|
||||
[ "bash" "fish" "zsh" ];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
machine.wait_for_unit("default.target")
|
||||
|
||||
for shell in ["bash", "fish", "zsh"]:
|
||||
machine.send_chars(f"script -c {shell} /tmp/{shell}.txt\n")
|
||||
machine.wait_until_tty_matches(1, f"Script started.*{shell}.txt")
|
||||
machine.send_chars("exit\n")
|
||||
machine.wait_until_tty_matches(1, "Script done")
|
||||
machine.sleep(1)
|
||||
machine.succeed(f"grep -q '<starship>' /tmp/{shell}.txt")
|
||||
machine.succeed("expect-bash")
|
||||
machine.succeed("expect-fish")
|
||||
machine.succeed("expect-zsh")
|
||||
'';
|
||||
})
|
||||
|
|
|
@ -110,4 +110,145 @@ in
|
|||
assert "updating systemd-boot from (000.0-1-notnixos) to " in output
|
||||
'';
|
||||
};
|
||||
|
||||
memtest86 = makeTest {
|
||||
name = "systemd-boot-memtest86";
|
||||
meta.maintainers = with pkgs.lib.maintainers; [ Enzime ];
|
||||
|
||||
machine = { pkgs, lib, ... }: {
|
||||
imports = [ common ];
|
||||
boot.loader.systemd-boot.memtest86.enable = true;
|
||||
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
|
||||
"memtest86-efi"
|
||||
];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.succeed("test -e /boot/loader/entries/memtest86.conf")
|
||||
machine.succeed("test -e /boot/efi/memtest86/BOOTX64.efi")
|
||||
'';
|
||||
};
|
||||
|
||||
netbootxyz = makeTest {
|
||||
name = "systemd-boot-netbootxyz";
|
||||
meta.maintainers = with pkgs.lib.maintainers; [ Enzime ];
|
||||
|
||||
machine = { pkgs, lib, ... }: {
|
||||
imports = [ common ];
|
||||
boot.loader.systemd-boot.netbootxyz.enable = true;
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.succeed("test -e /boot/loader/entries/o_netbootxyz.conf")
|
||||
machine.succeed("test -e /boot/efi/netbootxyz/netboot.xyz.efi")
|
||||
'';
|
||||
};
|
||||
|
||||
entryFilename = makeTest {
|
||||
name = "systemd-boot-entry-filename";
|
||||
meta.maintainers = with pkgs.lib.maintainers; [ Enzime ];
|
||||
|
||||
machine = { pkgs, lib, ... }: {
|
||||
imports = [ common ];
|
||||
boot.loader.systemd-boot.memtest86.enable = true;
|
||||
boot.loader.systemd-boot.memtest86.entryFilename = "apple.conf";
|
||||
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
|
||||
"memtest86-efi"
|
||||
];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.fail("test -e /boot/loader/entries/memtest86.conf")
|
||||
machine.succeed("test -e /boot/loader/entries/apple.conf")
|
||||
machine.succeed("test -e /boot/efi/memtest86/BOOTX64.efi")
|
||||
'';
|
||||
};
|
||||
|
||||
extraEntries = makeTest {
|
||||
name = "systemd-boot-extra-entries";
|
||||
meta.maintainers = with pkgs.lib.maintainers; [ Enzime ];
|
||||
|
||||
machine = { pkgs, lib, ... }: {
|
||||
imports = [ common ];
|
||||
boot.loader.systemd-boot.extraEntries = {
|
||||
"banana.conf" = ''
|
||||
title banana
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.succeed("test -e /boot/loader/entries/banana.conf")
|
||||
machine.succeed("test -e /boot/efi/nixos/.extra-files/loader/entries/banana.conf")
|
||||
'';
|
||||
};
|
||||
|
||||
extraFiles = makeTest {
|
||||
name = "systemd-boot-extra-files";
|
||||
meta.maintainers = with pkgs.lib.maintainers; [ Enzime ];
|
||||
|
||||
machine = { pkgs, lib, ... }: {
|
||||
imports = [ common ];
|
||||
boot.loader.systemd-boot.extraFiles = {
|
||||
"efi/fruits/tomato.efi" = pkgs.netbootxyz-efi;
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.succeed("test -e /boot/efi/fruits/tomato.efi")
|
||||
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
|
||||
'';
|
||||
};
|
||||
|
||||
switch-test = makeTest {
|
||||
name = "systemd-boot-switch-test";
|
||||
meta.maintainers = with pkgs.lib.maintainers; [ Enzime ];
|
||||
|
||||
nodes = {
|
||||
inherit common;
|
||||
|
||||
machine = { pkgs, ... }: {
|
||||
imports = [ common ];
|
||||
boot.loader.systemd-boot.extraFiles = {
|
||||
"efi/fruits/tomato.efi" = pkgs.netbootxyz-efi;
|
||||
};
|
||||
};
|
||||
|
||||
with_netbootxyz = { pkgs, ... }: {
|
||||
imports = [ common ];
|
||||
boot.loader.systemd-boot.netbootxyz.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
testScript = { nodes, ... }: let
|
||||
originalSystem = nodes.machine.config.system.build.toplevel;
|
||||
baseSystem = nodes.common.config.system.build.toplevel;
|
||||
finalSystem = nodes.with_netbootxyz.config.system.build.toplevel;
|
||||
in ''
|
||||
machine.succeed("test -e /boot/efi/fruits/tomato.efi")
|
||||
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
|
||||
|
||||
with subtest("remove files when no longer needed"):
|
||||
machine.succeed("${baseSystem}/bin/switch-to-configuration boot")
|
||||
machine.fail("test -e /boot/efi/fruits/tomato.efi")
|
||||
machine.fail("test -d /boot/efi/fruits")
|
||||
machine.succeed("test -d /boot/efi/nixos/.extra-files")
|
||||
machine.fail("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
|
||||
machine.fail("test -d /boot/efi/nixos/.extra-files/efi/fruits")
|
||||
|
||||
with subtest("files are added back when needed again"):
|
||||
machine.succeed("${originalSystem}/bin/switch-to-configuration boot")
|
||||
machine.succeed("test -e /boot/efi/fruits/tomato.efi")
|
||||
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
|
||||
|
||||
with subtest("simultaneously removing and adding files works"):
|
||||
machine.succeed("${finalSystem}/bin/switch-to-configuration boot")
|
||||
machine.fail("test -e /boot/efi/fruits/tomato.efi")
|
||||
machine.fail("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
|
||||
machine.succeed("test -e /boot/loader/entries/o_netbootxyz.conf")
|
||||
machine.succeed("test -e /boot/efi/netbootxyz/netboot.xyz.efi")
|
||||
machine.succeed("test -e /boot/efi/nixos/.extra-files/loader/entries/o_netbootxyz.conf")
|
||||
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/netbootxyz/netboot.xyz.efi")
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
@ -52,6 +52,11 @@ self: let
|
|||
super = removeAttrs imported [ "dash" ];
|
||||
|
||||
overrides = {
|
||||
# upstream issue: Wrong type argument: arrayp, nil
|
||||
org-transclusion =
|
||||
if super.org-transclusion.version == "1.2.0"
|
||||
then markBroken super.org-transclusion
|
||||
else super.org-transclusion;
|
||||
rcirc-menu = markBroken super.rcirc-menu; # Missing file header
|
||||
cl-lib = null; # builtin
|
||||
tle = null; # builtin
|
||||
|
|
|
@ -9,13 +9,13 @@
|
|||
|
||||
trivialBuild {
|
||||
pname = "ement";
|
||||
version = "unstable-2021-09-16";
|
||||
version = "unstable-2021-10-08";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "alphapapa";
|
||||
repo = "ement.el";
|
||||
rev = "c07e914f077199c95b0e7941a421675c95d4687e";
|
||||
sha256 = "sha256-kYVb2NrHYC87mY/hFUMAjb4TLJ9A2L2RrHoiAXvRaGg=";
|
||||
rev = "c951737dc855604aba389166bb0e7366afadc533";
|
||||
sha256 = "00iwwz4hzg4g59wrb5df6snqz3ppvrsadhfp61w1pa8gvg2z9bvy";
|
||||
};
|
||||
|
||||
packageRequires = [
|
||||
|
|
|
@ -72,6 +72,15 @@ let
|
|||
|
||||
overrides = lib.optionalAttrs (variant == "stable") {
|
||||
|
||||
# upstream issue: missing file header
|
||||
abridge-diff =
|
||||
if super.abridge-diff.version == "0.1"
|
||||
then markBroken super.abridge-diff
|
||||
else super.abridge-diff;
|
||||
|
||||
# upstream issue: missing file header
|
||||
bufshow = markBroken super.bufshow;
|
||||
|
||||
# upstream issue: missing file header
|
||||
speech-tagger = markBroken super.speech-tagger;
|
||||
|
||||
|
@ -99,11 +108,38 @@ let
|
|||
# upstream issue: missing file header
|
||||
dictionary = markBroken super.dictionary;
|
||||
|
||||
# upstream issue: missing file header
|
||||
fold-dwim =
|
||||
if super.fold-dwim.version == "1.2"
|
||||
then markBroken super.fold-dwim
|
||||
else super.fold-dwim;
|
||||
|
||||
# upstream issue: missing file header
|
||||
gl-conf-mode =
|
||||
if super.gl-conf-mode.version == "0.3"
|
||||
then markBroken super.gl-conf-mode
|
||||
else super.gl-conf-mode;
|
||||
|
||||
# upstream issue: missing file header
|
||||
ligo-mode =
|
||||
if super.ligo-mode.version == "0.3"
|
||||
then markBroken super.ligo-mode
|
||||
else super.ligo-mode;
|
||||
|
||||
# upstream issue: missing file header
|
||||
link = markBroken super.link;
|
||||
|
||||
# upstream issue: missing file header
|
||||
bufshow = markBroken super.bufshow;
|
||||
org-dp =
|
||||
if super.org-dp.version == "1"
|
||||
then markBroken super.org-dp
|
||||
else super.org-dp;
|
||||
|
||||
# upstream issue: missing file header
|
||||
revbufs =
|
||||
if super.revbufs.version == "1.2"
|
||||
then markBroken super.revbufs
|
||||
else super.revbufs;
|
||||
|
||||
# upstream issue: missing file header
|
||||
elmine = markBroken super.elmine;
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{ lib, stdenv, fetchurl, appimageTools, makeWrapper, electron_8 }:
|
||||
{ lib, stdenv, fetchurl, appimageTools, makeWrapper, electron_16 }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "blockbench-electron";
|
||||
version = "3.7.5";
|
||||
version = "4.1.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/JannisX11/blockbench/releases/download/v${version}/Blockbench_${version}.AppImage";
|
||||
sha256 = "0qqklhncd4khqmgp7jg7wap2rzkrg8b6dflmz0wmm5zxxp5vcy1c";
|
||||
sha256 = "0mqdkjhmylrjjfrm05jv1967qqka5263fgcn9qzax08gcq93s18f";
|
||||
name = "${pname}-${version}.AppImage";
|
||||
};
|
||||
|
||||
|
@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
|
|||
'';
|
||||
|
||||
postFixup = ''
|
||||
makeWrapper ${electron_8}/bin/electron $out/bin/${pname} \
|
||||
makeWrapper ${electron_16}/bin/electron $out/bin/${pname} \
|
||||
--add-flags $out/share/${pname}/resources/app.asar \
|
||||
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc ]}"
|
||||
'';
|
||||
|
|
|
@ -10,14 +10,14 @@
|
|||
|
||||
python3Packages.buildPythonPackage rec {
|
||||
pname = "hydrus";
|
||||
version = "467";
|
||||
version = "469";
|
||||
format = "other";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "hydrusnetwork";
|
||||
repo = "hydrus";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-ijIOCabpnaK9ww1cR+HNpCOn8uSwSEuyLWwnT2ypdD4=";
|
||||
sha256 = "sha256-1E85SIsLXeG+AUqQYCJxOlSwiT26OG+n/d9GbyryGCE=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -21,13 +21,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "imgbrd-grabber";
|
||||
version = "7.7.0";
|
||||
version = "7.7.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Bionus";
|
||||
repo = "imgbrd-grabber";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-Mym/fuV9YVyj5w8U9KlZ/wuwnnC3K5TGNo9RrAFHI5g=";
|
||||
sha256 = "sha256-3qE3mdtlIlReIkUf0oH2/qmunE8nvdB0EaD7EOqaEj0=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
, requests
|
||||
, mypy-extensions
|
||||
, django_3
|
||||
, django_extensions
|
||||
, django-extensions
|
||||
, dateparser
|
||||
, youtube-dl
|
||||
, python-crontab
|
||||
|
@ -37,7 +37,7 @@ buildPythonApplication rec {
|
|||
requests
|
||||
mypy-extensions
|
||||
django_3'
|
||||
django_extensions
|
||||
django-extensions
|
||||
dateparser
|
||||
youtube-dl
|
||||
python-crontab
|
||||
|
|
|
@ -5,21 +5,28 @@
|
|||
, gobject-introspection, gdk-pixbuf, wrapGAppsHook
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "avizo";
|
||||
version = "unstable-2021-07-21";
|
||||
# Note: remove the 'use-sysconfig' patch on the next update
|
||||
version = "1.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "misterdanb";
|
||||
repo = "avizo";
|
||||
rev = "7b3874e5ee25c80800b3c61c8ea30612aaa6e8d1";
|
||||
sha256 = "sha256-ixAdiAH22Nh19uK5GoAXtAZJeAfCGSWTcGbrvCczWYc=";
|
||||
rev = version;
|
||||
sha256 = "sha256-0BJodJ6WaHhuSph2D1AC+DMafctgiSCyaZ8MFn89AA8=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ meson ninja pkg-config vala gobject-introspection wrapGAppsHook ];
|
||||
|
||||
buildInputs = [ dbus dbus-glib gdk-pixbuf glib gtk-layer-shell gtk3 librsvg ];
|
||||
|
||||
patches = [
|
||||
# Remove on next update
|
||||
# See https://github.com/misterdanb/avizo/pull/30
|
||||
./use-sysconfdir-instead-of-etc.patch
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
substituteInPlace "$out"/bin/volumectl \
|
||||
--replace 'avizo-client' "$out/bin/avizo-client"
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
diff --git a/meson.build b/meson.build
|
||||
index 1c789be..cd4b07a 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -12,7 +12,9 @@ app_resources_service = gnome.compile_resources(
|
||||
source_dir : '.',
|
||||
c_name : 'avizo_resources')
|
||||
|
||||
-install_data('config.ini', install_dir: '/etc/xdg/avizo')
|
||||
+sysconfdir = get_option('sysconfdir')
|
||||
+
|
||||
+install_data('config.ini', install_dir: join_paths(sysconfdir, 'xdg/avizo'))
|
||||
install_data('volumectl', install_dir: 'bin')
|
||||
install_data('lightctl', install_dir: 'bin')
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
let
|
||||
year = "2021";
|
||||
major = "1";
|
||||
minor = "1";
|
||||
minor = "2";
|
||||
in stdenv.mkDerivation rec {
|
||||
pname = "pdfstudio";
|
||||
version = "${year}.${major}.${minor}";
|
||||
|
@ -26,7 +26,7 @@ in stdenv.mkDerivation rec {
|
|||
|
||||
src = fetchurl {
|
||||
url = "https://download.qoppa.com/${pname}/v${year}/PDFStudio_v${year}_${major}_${minor}_linux64.deb";
|
||||
sha256 = "089jfpbsxwjhx245g8svlmg213kny3z5nl6ra1flishnrsfjjcxb";
|
||||
sha256 = "1188ll2qz58rr2slavqxisbz4q3fdzidpasb1p33926z0ym3rk45";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -39,7 +39,7 @@ stdenv.mkDerivation rec {
|
|||
done
|
||||
|
||||
# Fix hard coded paths.
|
||||
for f in $(grep -Rl /usr/share/ src) ; do
|
||||
for f in $(grep -Rl /usr/share/ src install/desktop) ; do
|
||||
substituteInPlace $f --replace /usr/share/ $out/share/
|
||||
done
|
||||
|
||||
|
|
|
@ -1,30 +1,40 @@
|
|||
{lib, mkDerivation, fetchurl, qmake, qtbase, qtsvg, pkg-config, poppler, djvulibre, libspectre, cups
|
||||
, file, ghostscript
|
||||
{ lib
|
||||
, mkDerivation
|
||||
, fetchurl
|
||||
, qmake
|
||||
, qtbase
|
||||
, qtsvg
|
||||
, pkg-config
|
||||
, poppler
|
||||
, djvulibre
|
||||
, libspectre
|
||||
, cups
|
||||
, file
|
||||
, ghostscript
|
||||
}:
|
||||
let
|
||||
s = # Generated upstream information
|
||||
rec {
|
||||
baseName="qpdfview";
|
||||
version = "0.4.18";
|
||||
name="${baseName}-${version}";
|
||||
url="https://launchpad.net/qpdfview/trunk/${version}/+download/qpdfview-${version}.tar.gz";
|
||||
mkDerivation rec {
|
||||
pname = "qpdfview";
|
||||
version = "0.4.18";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://launchpad.net/qpdfview/trunk/${version}/+download/qpdfview-${version}.tar.gz";
|
||||
sha256 = "0v1rl126hvblajnph2hkansgi0s8vjdc5yxrm4y3faa0lxzjwr6c";
|
||||
};
|
||||
nativeBuildInputs = [ qmake pkg-config ];
|
||||
buildInputs = [
|
||||
qtbase qtsvg poppler djvulibre libspectre cups file ghostscript
|
||||
];
|
||||
|
||||
# apply upstream fix for qt5.15 https://bazaar.launchpad.net/~adamreichold/qpdfview/trunk/revision/2104
|
||||
patches = [ ./qpdfview-qt515-compat.patch ];
|
||||
in
|
||||
mkDerivation {
|
||||
pname = s.baseName;
|
||||
inherit (s) version;
|
||||
inherit nativeBuildInputs buildInputs patches;
|
||||
src = fetchurl {
|
||||
inherit (s) url sha256;
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ qmake pkg-config ];
|
||||
buildInputs = [
|
||||
qtbase
|
||||
qtsvg
|
||||
poppler
|
||||
djvulibre
|
||||
libspectre
|
||||
cups
|
||||
file
|
||||
ghostscript
|
||||
];
|
||||
preConfigure = ''
|
||||
qmakeFlags+=(*.pro)
|
||||
'';
|
||||
|
@ -39,13 +49,11 @@ mkDerivation {
|
|||
"APPDATA_INSTALL_PATH=${placeholder "out"}/share/appdata"
|
||||
];
|
||||
|
||||
meta = {
|
||||
inherit (s) version;
|
||||
meta = with lib; {
|
||||
description = "A tabbed document viewer";
|
||||
license = lib.licenses.gpl2Plus;
|
||||
maintainers = [lib.maintainers.raskin];
|
||||
platforms = lib.platforms.linux;
|
||||
license = licenses.gpl2Plus;
|
||||
maintainers = with maintainers; [ raskin ];
|
||||
platforms = platforms.linux;
|
||||
homepage = "https://launchpad.net/qpdfview";
|
||||
updateWalker = true;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -8,11 +8,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "snapmaker-luban";
|
||||
version = "4.1.2";
|
||||
version = "4.1.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/Snapmaker/Luban/releases/download/v${version}/snapmaker-luban-${version}-linux-x64.tar.gz";
|
||||
sha256 = "sha256-gS3MyXD5B9YQ+EXmIPZ+rDUE5H1AjRL64yXQX+5TM2Q=";
|
||||
sha256 = "sha256-GXpM5dJ3JPf2HgrgTONyeCG6JjK4JhbcGP5ck7v4cqk=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "whalebird";
|
||||
version = "4.4.6";
|
||||
version = "4.5.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/h3poteto/whalebird-desktop/releases/download/${version}/Whalebird-${version}-linux-x64.deb";
|
||||
sha256 = "sha256-Q67y6VO7U8EatMNWyJo4f9IHKylQSX7bNR0DH4bnH+A=";
|
||||
sha256 = "sha256-yl4R/1flm2Lfvyh9PXlJcZ1VtnP8nBQC0i7zs4U+g7g=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
|
|||
# Necessary steps to find the tray icon
|
||||
asar extract opt/Whalebird/resources/app.asar "$TMP/work"
|
||||
substituteInPlace $TMP/work/dist/electron/main.js \
|
||||
--replace "Mo,\"tray_icon.png\"" "\"$out/opt/Whalebird/resources/build/icons/tray_icon.png\""
|
||||
--replace "jo,\"tray_icon.png\"" "\"$out/opt/Whalebird/resources/build/icons/tray_icon.png\""
|
||||
asar pack --unpack='{*.node,*.ftz,rect-overlay}' "$TMP/work" opt/Whalebird/resources/app.asar
|
||||
|
||||
runHook postBuild
|
||||
|
|
|
@ -87,11 +87,11 @@ let
|
|||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "appgate-sdp";
|
||||
version = "5.5.1";
|
||||
version = "5.5.2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://bin.appgate-sdp.com/${versions.majorMinor version}/client/appgate-sdp_${version}_amd64.deb";
|
||||
sha256 = "sha256-gN9UAdn61qUZBJLi/9QiHjNRohbQQDV1uVHgcpuXq+Y=";
|
||||
sha256 = "sha256-8K7RqkxpyRsQ3QHGIfTchLaZ7/+k0hbiJdl7uc++vYs=";
|
||||
};
|
||||
|
||||
# just patch interpreter
|
||||
|
|
|
@ -83,7 +83,7 @@ py.pkgs.pythonPackages.buildPythonApplication rec {
|
|||
daphne
|
||||
dateparser
|
||||
django-cors-headers
|
||||
django_extensions
|
||||
django-extensions
|
||||
django-filter
|
||||
django-picklefield
|
||||
django-q
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "super-productivity";
|
||||
version = "7.9.1";
|
||||
version = "7.9.2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/johannesjo/super-productivity/releases/download/v${version}/superProductivity-${version}.AppImage";
|
||||
sha256 = "sha256:0lxnl5ai23dwfsyrkpi9l1a0gl0qn6vp7hzmca77nyx974d6j8m4";
|
||||
sha256 = "sha256-qeHFFG1Y8qZwFvo3CFIs1+BKQo287HJfOnKKguUOlu8=";
|
||||
name = "${pname}-${version}.AppImage";
|
||||
};
|
||||
|
||||
|
|
|
@ -4,13 +4,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "tig";
|
||||
version = "2.5.4";
|
||||
version = "2.5.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jonas";
|
||||
repo = pname;
|
||||
rev = "${pname}-${version}";
|
||||
sha256 = "sha256-dZqqUydZ4q/mDEjtojpMGfzAmW3yCNDvT9oCEmhq1hg=";
|
||||
sha256 = "1yx63jfbaa5h0d3lfqlczs9l7j2rnhp5jpa8qcjn4z1n415ay2x5";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper autoreconfHook asciidoc xmlto docbook_xsl docbook_xml_dtd_45 findXMLCatalogs pkg-config ];
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{ lib, fetchzip }:
|
||||
|
||||
let
|
||||
version = "1.5.1";
|
||||
version = "1.5.2";
|
||||
in
|
||||
fetchzip {
|
||||
name = "victor-mono-${version}";
|
||||
|
@ -21,7 +21,7 @@ fetchzip {
|
|||
unzip -j $downloadedFile \*.ttf -d $out/share/fonts/truetype
|
||||
'';
|
||||
|
||||
sha256 = "sha256-FHahUp/Ghjv6fwsjj1giVPlAIXRMSZCSLcVMiMHvV3A=";
|
||||
sha256 = "sha256-cNDZh0P/enmoKL/6eHzkgl5ghtai2K9cTgWMVmm8GIA=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "Free programming font with cursive italics and ligatures";
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
# How to obtain `sha256`:
|
||||
# nix-prefetch-url --unpack https://github.com/erlang/otp/archive/OTP-${version}.tar.gz
|
||||
mkDerivation {
|
||||
version = "22.3.4.20";
|
||||
sha256 = "sha256-EUErOCW16eUb/p5dLpFV7sQ3mXlCF/OgOvGAAyYEvLo=";
|
||||
version = "22.3.4.24";
|
||||
sha256 = "0c9713xa8sjw7nr55hysgcnbvj7gzbrpzdl94y1nqn7vw4ni8is3";
|
||||
}
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
# How to obtain `sha256`:
|
||||
# nix-prefetch-url --unpack https://github.com/erlang/otp/archive/OTP-${version}.tar.gz
|
||||
mkDerivation {
|
||||
version = "23.3.4.5";
|
||||
sha256 = "2u/w8IPKHEZ+rZ3T7Wn9+Ggxe6JY8cHz8q/N0RjbrNU=";
|
||||
version = "23.3.4.10";
|
||||
sha256 = "0sfz7n748hvhmcygnvb6h31ag35p59aaa9h8gdpqsh6p4hnjh1mf";
|
||||
}
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
# How to obtain `sha256`:
|
||||
# nix-prefetch-url --unpack https://github.com/erlang/otp/archive/OTP-${version}.tar.gz
|
||||
mkDerivation {
|
||||
version = "24.1.7";
|
||||
sha256 = "sha256-R4rZVMn9AGvOy31eA1dsz2CFMKOG/cXkbLaJtT7zBrU=";
|
||||
version = "24.2";
|
||||
sha256 = "10s57v2i2qqyg3gddm85n3crzrkikl4zfwgzqmxjzdynsyb4xg68";
|
||||
}
|
||||
|
|
|
@ -1,59 +1,54 @@
|
|||
{ lib, buildPythonPackage, fetchFromGitHub, pythonOlder, django
|
||||
{ lib
|
||||
, buildPythonPackage
|
||||
, fetchFromGitHub
|
||||
, django
|
||||
, factory_boy
|
||||
, glibcLocales
|
||||
, mock
|
||||
, pygments
|
||||
, pytest
|
||||
, pytest-cov
|
||||
, pytest-django
|
||||
, python-dateutil
|
||||
, pytestCheckHook
|
||||
, shortuuid
|
||||
, six
|
||||
, tox
|
||||
, typing ? null
|
||||
, vobject
|
||||
, werkzeug
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "django-extensions";
|
||||
version = "3.1.3";
|
||||
version = "3.1.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = pname;
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "03mhikhh49z8bxajbjf1j790b9c9vl4zf4f86iwz7g0zrd7jqlvm";
|
||||
sha256 = "sha256-NAMa78KhAuoJfp0Cb0Codz84sRfRQ1JhSLNYRI4GBPM=";
|
||||
};
|
||||
|
||||
LC_ALL = "en_US.UTF-8";
|
||||
postPatch = ''
|
||||
substituteInPlace setup.cfg \
|
||||
--replace "--cov=django_extensions --cov-report html --cov-report term" ""
|
||||
'';
|
||||
|
||||
propagatedBuildInputs = [
|
||||
django
|
||||
];
|
||||
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
||||
propagatedBuildInputs = [ six ]
|
||||
++ lib.optional (pythonOlder "3.5") typing;
|
||||
|
||||
checkInputs = [
|
||||
django
|
||||
factory_boy
|
||||
glibcLocales
|
||||
mock
|
||||
pygments # not explicitly declared in setup.py, but some tests require it
|
||||
pytest
|
||||
pytest-cov
|
||||
pytest-django
|
||||
python-dateutil
|
||||
pytestCheckHook
|
||||
shortuuid
|
||||
tox
|
||||
vobject
|
||||
werkzeug
|
||||
];
|
||||
|
||||
# remove tests that need network access
|
||||
checkPhase = ''
|
||||
rm tests/management/commands/test_pipchecker.py
|
||||
DJANGO_SETTINGS_MODULE=tests.testapp.settings \
|
||||
pytest django_extensions tests
|
||||
'';
|
||||
disabledTestPaths = [
|
||||
# requires network access
|
||||
"tests/management/commands/test_pipchecker.py"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "A collection of custom extensions for the Django Framework";
|
||||
|
|
|
@ -48,11 +48,12 @@ buildPythonPackage rec {
|
|||
"TestMoveSCPCLI"
|
||||
"TestQRGetServiceClass"
|
||||
"TestQRMoveServiceClass"
|
||||
"TestState"
|
||||
"TestStorageServiceClass"
|
||||
"TestStoreSCP"
|
||||
"TestStoreSCPCLI"
|
||||
"TestStoreSCU"
|
||||
"TestStoreSCUCLI"
|
||||
"TestState"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
, flask
|
||||
, pytestCheckHook
|
||||
, python-http-client
|
||||
, pythonOlder
|
||||
, pyyaml
|
||||
, starkbank-ecdsa
|
||||
, werkzeug
|
||||
|
@ -11,14 +12,16 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "sendgrid";
|
||||
version = "6.9.3";
|
||||
version = "6.9.4";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = pname;
|
||||
repo = "sendgrid-python";
|
||||
rev = version;
|
||||
sha256 = "sha256-/4Wk+1zAFwK+FxRhABQBha43/zapgPDfTFGrPJjXA7s=";
|
||||
sha256 = "sha256-xNd0IPhaVw4X6URsg6hrDJhxmBRWam4bqgLN0uvMUxI=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
|
|
@ -1,16 +1,20 @@
|
|||
{ lib
|
||||
, buildPythonPackage
|
||||
, fetchPypi
|
||||
, pytest
|
||||
, pytestCheckHook
|
||||
, boto3
|
||||
, six
|
||||
, pyyaml
|
||||
, mock
|
||||
, pythonOlder
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "serverlessrepo";
|
||||
version = "0.1.10";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
|
@ -23,12 +27,25 @@ buildPythonPackage rec {
|
|||
pyyaml
|
||||
];
|
||||
|
||||
checkInputs = [ pytest mock ];
|
||||
checkInputs = [
|
||||
pytestCheckHook
|
||||
mock
|
||||
];
|
||||
|
||||
checkPhase = ''
|
||||
pytest tests/unit
|
||||
postPatch = ''
|
||||
substituteInPlace setup.py \
|
||||
--replace "pyyaml~=5.1" "pyyaml" \
|
||||
--replace "boto3~=1.9, >=1.9.56" "boto3"
|
||||
'';
|
||||
|
||||
pytestFlagsArray = [
|
||||
"tests/unit"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [
|
||||
"serverlessrepo"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/awslabs/aws-serverlessrepo-python";
|
||||
description = "Helpers for working with the AWS Serverless Application Repository";
|
||||
|
@ -36,7 +53,7 @@ buildPythonPackage rec {
|
|||
A Python library with convenience helpers for working with the
|
||||
AWS Serverless Application Repository.
|
||||
'';
|
||||
license = lib.licenses.asl20;
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ dhkl ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -5,16 +5,13 @@
|
|||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "aws-sam-cli";
|
||||
version = "1.36.0";
|
||||
version = "1.37.0";
|
||||
|
||||
src = python3.pkgs.fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-GJbBhe1l25ZHGWVu1o2oJvd/BNv8dv7aIYor/ebFl9U=";
|
||||
hash = "sha256-XE3g2mKwAiaJvi0ShVScnCKrmz7ujaQgOeFXuYwtP4g=";
|
||||
};
|
||||
|
||||
# Tests are not included in the PyPI package
|
||||
doCheck = false;
|
||||
|
||||
propagatedBuildInputs = with python3.pkgs; [
|
||||
aws-lambda-builders
|
||||
aws-sam-translator
|
||||
|
@ -42,18 +39,22 @@ python3.pkgs.buildPythonApplication rec {
|
|||
# fix over-restrictive version bounds
|
||||
postPatch = ''
|
||||
substituteInPlace requirements/base.txt \
|
||||
--replace "aws_lambda_builders==" "aws-lambda-builders #" \
|
||||
--replace "click~=7.1" "click~=8.0" \
|
||||
--replace "Flask~=1.1.2" "Flask~=2.0" \
|
||||
--replace "dateparser~=1.0" "dateparser>=0.7" \
|
||||
--replace "docker~=4.2.0" "docker>=4.2.0" \
|
||||
--replace "requests==" "requests #" \
|
||||
--replace "watchdog==" "watchdog #" \
|
||||
--replace "aws_lambda_builders==" "aws-lambda-builders #" \
|
||||
--replace "typing_extensions==" "typing-extensions #" \
|
||||
--replace "Flask~=1.1.2" "Flask~=2.0" \
|
||||
--replace "PyYAML~=5.3" "PyYAML" \
|
||||
--replace "regex==" "regex #" \
|
||||
--replace "tzlocal==3.0" "tzlocal"
|
||||
--replace "requests==" "requests #" \
|
||||
--replace "typing_extensions==" "typing-extensions #" \
|
||||
--replace "tzlocal==3.0" "tzlocal" \
|
||||
--replace "watchdog==" "watchdog #"
|
||||
'';
|
||||
|
||||
# Tests are not included in the PyPI package
|
||||
doCheck = false;
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/awslabs/aws-sam-cli";
|
||||
description = "CLI tool for local development and testing of Serverless applications";
|
||||
|
|
|
@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
|
|||
owner = "scottdraves";
|
||||
repo = pname;
|
||||
rev = "37ba0fd692d6581f8fe009ed11c9650cd8174123";
|
||||
sha256 = "1z49l53j1lhk7ahdy96lm9r0pklwpf2i5s6y2l2rn6l4z8dxkjmk";
|
||||
sha256 = "sha256-v/+2dxOY/p6wNAywcFHUAfsZEJw31Syu2MacN/KeyWg=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ autoreconfHook pkg-config ];
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "bazarr";
|
||||
version = "1.0.0";
|
||||
version = "1.0.2";
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/morpheus65535/bazarr/releases/download/v${version}/bazarr.zip";
|
||||
sha256 = "sha256-DDisK8friN3u+kNmjc9TjU0cZ/H0wf/Fu6JqZZkLdPU=";
|
||||
sha256 = "sha256-aI5uxfMR+UpwxbUsJNNYYjqVX2epk60JbqWHRhB4v7I=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ unzip makeWrapper ];
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "headscale";
|
||||
version = "0.11.0";
|
||||
version = "0.12.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "juanfont";
|
||||
repo = "headscale";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-grLYyVYlvqBNO5CVRVDTJKEi45Nsc6Bgs8I3pY7pZfg=";
|
||||
sha256 = "sha256-PgSjxDmPahGd2o3QBfvytMva+LHWeLPm500DsNdB77Q=";
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-t7S1jE76AFFIePrFtvrIQcId7hLeNIAm/eA9AVoFy5E=";
|
||||
vendorSha256 = "sha256-gD4jGaR4KQiYL6+yA8g2u6cTEbfySTMErNqerw76Ook=";
|
||||
|
||||
ldflags = [ "-s" "-w" "-X github.com/juanfont/headscale/cmd/headscale/cli.Version=v${version}" ];
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
, django-paintstore
|
||||
, django-q
|
||||
, django_compressor
|
||||
, django_extensions
|
||||
, django-extensions
|
||||
, djangorestframework
|
||||
, flufl_lock
|
||||
, mistune_2_0
|
||||
|
@ -52,7 +52,7 @@ buildPythonPackage rec {
|
|||
django-mailman3
|
||||
django-q
|
||||
django_compressor
|
||||
django_extensions
|
||||
django-extensions
|
||||
djangorestframework
|
||||
flufl_lock
|
||||
mistune_2_0
|
||||
|
|
|
@ -1,35 +1,26 @@
|
|||
{lib, stdenv, fetchurl, perl, xorgproto, libX11}:
|
||||
let
|
||||
s = # Generated upstream information
|
||||
rec {
|
||||
baseName="ratmen";
|
||||
version="2.2.3";
|
||||
name="${baseName}-${version}";
|
||||
hash="0gnfqhnch9x8jhr87gvdjcp1wsqhchfjilpnqcwx5j0nlqyz6wi6";
|
||||
url="http://www.update.uu.se/~zrajm/programs/ratmen/ratmen-2.2.3.tar.gz";
|
||||
sha256="0gnfqhnch9x8jhr87gvdjcp1wsqhchfjilpnqcwx5j0nlqyz6wi6";
|
||||
{ lib, stdenv, fetchurl, perl, xorgproto, libX11 }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "ratmen";
|
||||
version = "2.2.3";
|
||||
src = fetchurl {
|
||||
url = "http://www.update.uu.se/~zrajm/programs/ratmen/ratmen-${version}.tar.gz";
|
||||
sha256 = "0gnfqhnch9x8jhr87gvdjcp1wsqhchfjilpnqcwx5j0nlqyz6wi6";
|
||||
};
|
||||
buildInputs = [
|
||||
perl xorgproto libX11
|
||||
perl
|
||||
xorgproto
|
||||
libX11
|
||||
];
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
inherit (s) name version;
|
||||
inherit buildInputs;
|
||||
src = fetchurl {
|
||||
inherit (s) url sha256;
|
||||
};
|
||||
makeFlags = [
|
||||
"PREFIX=$(out)"
|
||||
];
|
||||
meta = {
|
||||
inherit (s) version;
|
||||
meta = with lib; {
|
||||
description = "A minimalistic X11 menu creator";
|
||||
license = lib.licenses.free ; # 9menu derivative with 9menu license
|
||||
maintainers = [lib.maintainers.raskin];
|
||||
platforms = lib.platforms.linux;
|
||||
license = licenses.free; # 9menu derivative with 9menu license
|
||||
maintainers = with maintainers; [ raskin ];
|
||||
platforms = platforms.linux;
|
||||
homepage = "http://www.update.uu.se/~zrajm/programs/";
|
||||
downloadPage = "http://www.update.uu.se/~zrajm/programs/ratmen/";
|
||||
updateWalker = true;
|
||||
};
|
||||
}
|
||||
|
|
21
pkgs/tools/misc/netbootxyz-efi/default.nix
Normal file
21
pkgs/tools/misc/netbootxyz-efi/default.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{ lib
|
||||
, fetchurl
|
||||
}:
|
||||
|
||||
let
|
||||
pname = "netboot.xyz-efi";
|
||||
version = "2.0.53";
|
||||
in fetchurl {
|
||||
name = "${pname}-${version}";
|
||||
|
||||
url = "https://github.com/netbootxyz/netboot.xyz/releases/download/${version}/netboot.xyz.efi";
|
||||
sha256 = "sha256-v7XqrhG94BLTpDHDazTiowQUXu/ITEcgVMmhlqgmSQE=";
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://netboot.xyz/";
|
||||
description = "A tool to boot OS installers and utilities over the network, to be run from a bootloader";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ Enzime ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
|
@ -61,6 +61,6 @@ python3Packages.buildPythonPackage rec {
|
|||
|
||||
license = licenses.bsd2;
|
||||
platforms = platforms.unix;
|
||||
maintainers = with maintainers; [ benley mic92 ];
|
||||
maintainers = with maintainers; [ benley lassulus pinpox ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "dnsproxy";
|
||||
version = "0.40.1";
|
||||
version = "0.40.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "AdguardTeam";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-tvYurE+/ZPJeV/ZKMIC0yrwzomxd/3y0KtChei/HO6c=";
|
||||
sha256 = "sha256-OkicEDu2sMEpvBbb7JFRGusMKJeQoVe3ShsbuNCoIis=";
|
||||
};
|
||||
|
||||
vendorSha256 = null;
|
||||
|
|
|
@ -1,28 +1,27 @@
|
|||
{ stdenv, lib, fetchFromGitHub, fetchpatch, autoreconfHook, pkg-config
|
||||
, libcap, ncurses, jansson
|
||||
, withGtk ? false, gtk3 }:
|
||||
{ stdenv
|
||||
, lib
|
||||
, fetchFromGitHub
|
||||
, fetchpatch
|
||||
, autoreconfHook
|
||||
, pkg-config
|
||||
, libcap
|
||||
, ncurses
|
||||
, jansson
|
||||
, withGtk ? false
|
||||
, gtk3
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "mtr${lib.optionalString withGtk "-gui"}";
|
||||
version = "0.94";
|
||||
version = "0.95";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "traviscross";
|
||||
repo = "mtr";
|
||||
rev = "v${version}";
|
||||
sha256 = "0wnz87cr2lcl74bj8qxq9xgai40az3pk9k0z893scyc8svd61xz6";
|
||||
sha256 = "sha256-f5bL3IdXibIc1xXCuZHwcEV5vhypRE2mLsS3A8HW2QM=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# pull patch to fix build failure against ncurses-6.3:
|
||||
# https://github.com/traviscross/mtr/pull/411
|
||||
(fetchpatch {
|
||||
name = "ncurses-6.3.patch";
|
||||
url = "https://github.com/traviscross/mtr/commit/aeb493e08eabcb4e6178bda0bb84e9cd01c9f213.patch";
|
||||
sha256 = "1qk8lf4sha18g36mr84vbdvll2s8khgbzyyq0as3ifx44lv0qlf2";
|
||||
})
|
||||
];
|
||||
|
||||
# we need this before autoreconfHook does its thing
|
||||
postPatch = ''
|
||||
echo ${version} > .tarball-version
|
||||
|
|
|
@ -38,11 +38,11 @@ in
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "sile";
|
||||
version = "0.12.0";
|
||||
version = "0.12.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/sile-typesetter/sile/releases/download/v${version}/${pname}-${version}.tar.xz";
|
||||
sha256 = "1rkdzf4khyvsn5qg455mdhnlacxlqgi9vchy369a66qp5nrs50y9";
|
||||
sha256 = "1dw8qs5y2m90vhjsxpnvnr8blq0ld2fvny5ir8zjharja7wny24i";
|
||||
};
|
||||
|
||||
configureFlags = [
|
||||
|
|
|
@ -6355,7 +6355,9 @@ with pkgs;
|
|||
|
||||
heimdall-gui = heimdall.override { enableGUI = true; };
|
||||
|
||||
headscale = callPackage ../servers/headscale { };
|
||||
headscale = callPackage ../servers/headscale {
|
||||
buildGoModule = buildGo117Module;
|
||||
};
|
||||
|
||||
heisenbridge = callPackage ../servers/heisenbridge { };
|
||||
|
||||
|
@ -7971,6 +7973,8 @@ with pkgs;
|
|||
|
||||
netboot = callPackage ../tools/networking/netboot {};
|
||||
|
||||
netbootxyz-efi = callPackage ../tools/misc/netbootxyz-efi { };
|
||||
|
||||
netcat = libressl.nc;
|
||||
|
||||
netcat-gnu = callPackage ../tools/networking/netcat { };
|
||||
|
|
|
@ -45,6 +45,7 @@ mapAliases ({
|
|||
discogs_client = discogs-client; # added 2021-07-02
|
||||
djangorestframework-jwt = drf-jwt; # added 2021-07-20
|
||||
django_environ = django-environ; # added 2021-12-25
|
||||
django_extensions = django-extensions; # added 2022-01-09
|
||||
django_redis = django-redis; # added 2021-10-11
|
||||
django_taggit = django-taggit; # added 2021-10-11
|
||||
dns = dnspython; # added 2017-12-10
|
||||
|
|
|
@ -2212,7 +2212,7 @@ in {
|
|||
|
||||
django-environ = callPackage ../development/python-modules/django_environ { };
|
||||
|
||||
django_extensions = callPackage ../development/python-modules/django-extensions { };
|
||||
django-extensions = callPackage ../development/python-modules/django-extensions { };
|
||||
|
||||
django-filter = callPackage ../development/python-modules/django-filter { };
|
||||
|
||||
|
|
Loading…
Reference in a new issue