Merge master into staging-next

This commit is contained in:
Frederik Rietdijk 2020-05-08 06:42:29 +02:00
commit 2ca68c7757
421 changed files with 8739 additions and 6869 deletions

View file

@ -40,6 +40,23 @@
</para>
</section>
<section xml:id="ssec-icon-theme-packaging">
<title>Packaging icon themes</title>
<para>
Icon themes may inherit from other icon themes. The inheritance is specified using the <literal>Inherits</literal> key in the <filename>index.theme</filename> file distributed with the icon theme. According to the <link xlink:href="https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html">icon theme specification</link>, icons not provided by the theme are looked for in its parent icon themes. Therefore the parent themes should be installed as dependencies for a more complete experience regarding the icon sets used.
</para>
<para>
The package <package>hicolor-icon-theme</package> provides a setup hook which makes symbolic links for the parent themes into the directory <filename>share/icons</filename> of the current theme directory in the nix store, making sure they can be found at runtime. For that to work the packages providing parent icon themes should be listed as propagated build dependencies, together with <package>hicolor-icon-theme</package>.
</para>
<para>
Also make sure that <filename>icon-theme.cache</filename> is installed for each theme provided by the package, and set <code>dontDropIconThemeCache</code> to <code>true</code> so that the cache file is not removed by the <package>gtk3</package> setup hook.
</para>
</section>
<section xml:id="ssec-gnome-themes">
<title>GTK Themes</title>

View file

@ -145,7 +145,7 @@ genericBuild
</listitem>
<listitem>
<para>
GNU Make. It has been patched to provide <quote>nested</quote> output that can be fed into the <command>nix-log2xml</command> command and <command>log2html</command> stylesheet to create a structured, readable output of the build steps performed by Make.
GNU Make.
</para>
</listitem>
<listitem>

View file

@ -5064,6 +5064,12 @@
githubId = 3269878;
name = "Miguel Madrid Mencía";
};
mindavi = {
email = "rol3517@gmail.com";
github = "Mindavi";
githubId = 9799623;
name = "Rick van Schijndel";
};
minijackson = {
email = "minijackson@riseup.net";
github = "minijackson";
@ -5862,6 +5868,16 @@
githubId = 131844;
name = "Igor Pashev";
};
patryk27 = {
email = "wychowaniec.patryk@gmail.com";
github = "Patryk27";
githubId = 3395477;
name = "Patryk Wychowaniec";
keys = [{
longkeyid = "rsa4096/0xF62547D075E09767";
fingerprint = "196A BFEC 6A1D D1EC 7594 F8D1 F625 47D0 75E0 9767";
}];
};
patternspandemic = {
email = "patternspandemic@live.com";
github = "patternspandemic";

View file

@ -16,11 +16,11 @@
effects, some example settings:
<programlisting>
<link linkend="opt-services.picom.enable">services.picom</link> = {
<link linkend="opt-services.picom.enable">enable</link> = true;
<link linkend="opt-services.picom.fade">fade</link> = true;
<link linkend="opt-services.picom.inactiveOpacity">inactiveOpacity</link> = "0.9";
<link linkend="opt-services.picom.shadow">shadow</link> = true;
<link linkend="opt-services.picom.fadeDelta">fadeDelta</link> = 4;
<link linkend="opt-services.picom.enable">enable</link> = true;
<link linkend="opt-services.picom.fade">fade</link> = true;
<link linkend="opt-services.picom.inactiveOpacity">inactiveOpacity</link> = 0.9;
<link linkend="opt-services.picom.shadow">shadow</link> = true;
<link linkend="opt-services.picom.fadeDelta">fadeDelta</link> = 4;
};
</programlisting>
</para>

View file

@ -24,16 +24,6 @@
</arg>
</group>
</arg>
<arg>
<group choice='req'>
<arg choice='plain'>
<option>--print-build-logs</option>
</arg>
<arg choice='plain'>
<option>-L</option>
</arg>
</group>
</arg>
<arg>
<arg choice='plain'>
<option>-I</option>
@ -178,12 +168,6 @@
<para>Please note that this option may be specified repeatedly.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--print-build-logs</option> / <option>-L</option></term>
<listitem>
<para>Print the full build logs of <command>nix build</command> to stderr.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>--root</option>

View file

@ -317,6 +317,15 @@ php.override {
<manvolnum>5</manvolnum></citerefentry> for details.
</para>
</listitem>
<listitem>
<para>
In the <literal>picom</literal> module, several options that accepted
floating point numbers encoded as strings (for example
<xref linkend="opt-services.picom.activeOpacity"/>) have been changed
to the (relatively) new native <literal>float</literal> type. To migrate
your configuration simply remove the quotes around the numbers.
</para>
</listitem>
</itemizedlist>
</section>

View file

@ -143,7 +143,7 @@ class Logger:
self.logfile = os.environ.get("LOGFILE", "/dev/null")
self.logfile_handle = codecs.open(self.logfile, "wb")
self.xml = XMLGenerator(self.logfile_handle, encoding="utf-8")
self.queue: "Queue[Dict[str, str]]" = Queue(1000)
self.queue: "Queue[Dict[str, str]]" = Queue()
self.xml.startDocument()
self.xml.startElement("logfile", attrs={})
@ -391,11 +391,11 @@ class Machine:
def execute(self, command: str) -> Tuple[int, str]:
self.connect()
out_command = "( {} ); echo '|!EOF' $?\n".format(command)
out_command = "( {} ); echo '|!=EOF' $?\n".format(command)
self.shell.send(out_command.encode())
output = ""
status_code_pattern = re.compile(r"(.*)\|\!EOF\s+(\d+)")
status_code_pattern = re.compile(r"(.*)\|\!=EOF\s+(\d+)")
while True:
chunk = self.shell.recv(4096).decode(errors="ignore")

View file

@ -8,30 +8,22 @@ let
# only with nscd up and running we can load NSS modules that are not integrated in NSS
canLoadExternalModules = config.services.nscd.enable;
myhostname = canLoadExternalModules;
mymachines = canLoadExternalModules;
# XXX Move these to their respective modules
nssmdns = canLoadExternalModules && config.services.avahi.nssmdns;
nsswins = canLoadExternalModules && config.services.samba.nsswins;
ldap = canLoadExternalModules && (config.users.ldap.enable && config.users.ldap.nsswitch);
resolved = canLoadExternalModules && config.services.resolved.enable;
hostArray = mkMerge [
(mkBefore [ "files" ])
(mkIf mymachines [ "mymachines" ])
(mkIf nssmdns [ "mdns_minimal [NOTFOUND=return]" ])
(mkIf nsswins [ "wins" ])
(mkIf resolved [ "resolve [!UNAVAIL=return]" ])
(mkAfter [ "dns" ])
(mkIf nssmdns (mkOrder 1501 [ "mdns" ])) # 1501 to ensure it's after dns
(mkIf myhostname (mkOrder 1600 [ "myhostname" ])) # 1600 to ensure it's always the last
];
passwdArray = mkMerge [
(mkBefore [ "files" ])
(mkIf ldap [ "ldap" ])
(mkIf mymachines [ "mymachines" ])
(mkIf canLoadExternalModules (mkAfter [ "systemd" ]))
];
shadowArray = mkMerge [
@ -134,11 +126,6 @@ in {
assertion = config.system.nssModules.path != "" -> canLoadExternalModules;
message = "Loading NSS modules from path ${config.system.nssModules.path} requires nscd being enabled.";
}
{
# resolved does not need to add to nssModules, therefore needs an extra assertion
assertion = resolved -> canLoadExternalModules;
message = "Loading systemd-resolved's nss-resolve NSS module requires nscd being enabled.";
}
];
# Name Service Switch configuration file. Required by the C
@ -164,12 +151,5 @@ in {
hosts = hostArray;
services = mkBefore [ "files" ];
};
# Systemd provides nss-myhostname to ensure that our hostname
# always resolves to a valid IP address. It returns all locally
# configured IP addresses, or ::1 and 127.0.0.2 as
# fallbacks. Systemd also provides nss-mymachines to return IP
# addresses of local containers.
system.nssModules = (optionals canLoadExternalModules [ config.systemd.package.out ]);
};
}

View file

@ -15,7 +15,6 @@ mountPoint=/mnt
channelPath=
system=
verbosity=()
buildLogs=
while [ "$#" -gt 0 ]; do
i="$1"; shift 1
@ -60,9 +59,6 @@ while [ "$#" -gt 0 ]; do
-v*|--verbose)
verbosity+=("$i")
;;
-L|--print-build-logs)
buildLogs="$i"
;;
*)
echo "$0: unknown option \`$i'"
exit 1
@ -100,9 +96,9 @@ sub="auto?trusted=1"
if [[ -z $system ]]; then
echo "building the configuration in $NIXOS_CONFIG..."
outLink="$tmpdir/system"
nix build --out-link "$outLink" --store "$mountPoint" "${extraBuildFlags[@]}" \
nix-build --out-link "$outLink" --store "$mountPoint" "${extraBuildFlags[@]}" \
--extra-substituters "$sub" \
-f '<nixpkgs/nixos>' system -I "nixos-config=$NIXOS_CONFIG" ${verbosity[@]} ${buildLogs}
'<nixpkgs/nixos>' -A system -I "nixos-config=$NIXOS_CONFIG" ${verbosity[@]}
system=$(readlink -f $outLink)
fi

View file

@ -231,6 +231,10 @@ in
};
meta = {
maintainers = lib.maintainers.mic92;
};
###### implementation

View file

@ -34,13 +34,7 @@ in
services.postgresql = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to run PostgreSQL.
'';
};
enable = mkEnableOption "PostgreSQL Server";
package = mkOption {
type = types.package;

View file

@ -510,8 +510,7 @@ in
system.activationScripts.nix = stringAfter [ "etc" "users" ]
''
# Create directories in /nix.
${nix}/bin/nix ping-store --no-net
install -m 0755 -d /nix/var/nix/{gcroots,profiles}/per-user
# Subscribe the root user to the NixOS channel by default.
if [ ! -e "/root/.nix-channels" ]; then

View file

@ -20,12 +20,14 @@ let
ssid=${cfg.ssid}
hw_mode=${cfg.hwMode}
channel=${toString cfg.channel}
${optionalString (cfg.countryCode != null) ''country_code=${cfg.countryCode}''}
${optionalString (cfg.countryCode != null) ''ieee80211d=1''}
# logging (debug level)
logger_syslog=-1
logger_syslog_level=2
logger_syslog_level=${toString cfg.logLevel}
logger_stdout=-1
logger_stdout_level=2
logger_stdout_level=${toString cfg.logLevel}
ctrl_interface=/run/hostapd
ctrl_interface_group=${cfg.group}
@ -147,6 +149,35 @@ in
'';
};
logLevel = mkOption {
default = 2;
type = types.int;
description = ''
Levels (minimum value for logged events):
0 = verbose debugging
1 = debugging
2 = informational messages
3 = notification
4 = warning
'';
};
countryCode = mkOption {
default = null;
example = "US";
type = with types; nullOr str;
description = ''
Country code (ISO/IEC 3166-1). Used to set regulatory domain.
Set as needed to indicate country in which device is operating.
This can limit available channels and transmit power.
These two octets are used as the first two octets of the Country String
(dot11CountryString).
If set this enables IEEE 802.11d. This advertises the countryCode and
the set of allowed channels and transmit power levels based on the
regulatory limits.
'';
};
extraConfig = mkOption {
default = "";
example = ''
@ -167,6 +198,8 @@ in
environment.systemPackages = [ pkgs.hostapd ];
services.udev.packages = optional (cfg.countryCode != null) [ pkgs.crda ];
systemd.services.hostapd =
{ description = "hostapd wireless AP";

View file

@ -91,41 +91,47 @@ in {
description = "Unit App Server";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
path = with pkgs; [ curl ];
preStart = ''
test -f '${cfg.stateDir}/conf.json' || rm -f '${cfg.stateDir}/conf.json'
[ ! -e '${cfg.stateDir}/conf.json' ] || rm -f '${cfg.stateDir}/conf.json'
'';
postStart = ''
curl -X PUT --data-binary '@${configFile}' --unix-socket '/run/unit/control.unit.sock' 'http://localhost/config'
${pkgs.curl}/bin/curl -X PUT --data-binary '@${configFile}' --unix-socket '/run/unit/control.unit.sock' 'http://localhost/config'
'';
serviceConfig = {
Type = "forking";
PIDFile = "/run/unit/unit.pid";
ExecStart = ''
${cfg.package}/bin/unitd --control 'unix:/run/unit/control.unit.sock' --pid '/run/unit/unit.pid' \
--log '${cfg.logDir}/unit.log' --state '${cfg.stateDir}' --no-daemon \
--log '${cfg.logDir}/unit.log' --state '${cfg.stateDir}' \
--user ${cfg.user} --group ${cfg.group}
'';
# User and group
User = cfg.user;
Group = cfg.group;
# Capabilities
AmbientCapabilities = [ "CAP_NET_BIND_SERVICE" "CAP_SETGID" "CAP_SETUID" ];
ExecStop = ''
${pkgs.curl}/bin/curl -X DELETE --unix-socket '/run/unit/control.unit.sock' 'http://localhost/config'
'';
# Runtime directory and mode
RuntimeDirectory = "unit";
RuntimeDirectoryMode = "0750";
# Access write directories
ReadWritePaths = [ cfg.stateDir cfg.logDir ];
# Security
NoNewPrivileges = true;
# Sandboxing
ProtectSystem = "full";
ProtectSystem = "strict";
ProtectHome = true;
RuntimeDirectory = "unit";
RuntimeDirectoryMode = "0750";
PrivateTmp = true;
PrivateDevices = true;
ProtectHostname = true;
ProtectKernelTunables = true;
ProtectKernelModules = true;
ProtectControlGroups = true;
RestrictAddressFamilies = [ "AF_UNIX" "AF_INET" "AF_INET6" ];
LockPersonality = true;
MemoryDenyWriteExecute = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
PrivateMounts = true;
# System Call Filtering
SystemCallArchitectures = "native";
};
};

View file

@ -109,7 +109,7 @@ in
# Without this, elementary LightDM greeter will pre-select non-existent `default` session
# https://github.com/elementary/greeter/issues/368
services.xserver.displayManager.defaultSession = "pantheon";
services.xserver.displayManager.defaultSession = mkDefault "pantheon";
services.xserver.displayManager.sessionCommands = ''
if test "$XDG_CURRENT_DESKTOP" = "Pantheon"; then

View file

@ -1,39 +1,48 @@
{ config, lib, pkgs, ... }:
with lib;
with builtins;
let
cfg = config.services.picom;
pairOf = x: with types; addCheck (listOf x) (y: length y == 2);
pairOf = x: with types;
addCheck (listOf x) (y: length y == 2)
// { description = "pair of ${x.description}"; };
floatBetween = a: b: with lib; with types;
addCheck str (x: versionAtLeast x a && versionOlder x b);
floatBetween = a: b: with types;
let
# toString prints floats with hardcoded high precision
floatToString = f: builtins.toJSON f;
in
addCheck float (x: x <= b && x >= a)
// { description = "a floating point number in " +
"range [${floatToString a}, ${floatToString b}]"; };
toConf = attrs: concatStringsSep "\n"
(mapAttrsToList
(k: v: let
sep = if isAttrs v then ":" else "=";
# Basically a tinkered lib.generators.mkKeyValueDefault
mkValueString = v:
if isBool v then boolToString v
else if isInt v then toString v
else if isFloat v then toString v
else if isString v then ''"${escape [ ''"'' ] v}"''
else if isList v then "[ "
+ concatMapStringsSep " , " mkValueString v
+ " ]"
else if isAttrs v then "{ "
+ concatStringsSep " "
(mapAttrsToList
(key: value: "${toString key}=${mkValueString value};")
v)
+ " }"
else abort "picom.mkValueString: unexpected type (v = ${v})";
in "${escape [ sep ] k}${sep}${mkValueString v};")
attrs);
mkDefaultAttrs = mapAttrs (n: v: mkDefault v);
# Basically a tinkered lib.generators.mkKeyValueDefault
# It either serializes a top-level definition "key: { values };"
# or an expression "key = { values };"
mkAttrsString = top:
mapAttrsToList (k: v:
let sep = if (top && isAttrs v) then ":" else "=";
in "${escape [ sep ] k}${sep}${mkValueString v};");
# This serializes a Nix expression to the libconfig format.
mkValueString = v:
if types.bool.check v then boolToString v
else if types.int.check v then toString v
else if types.float.check v then toString v
else if types.str.check v then "\"${escape [ "\"" ] v}\""
else if builtins.isList v then "[ ${concatMapStringsSep " , " mkValueString v} ]"
else if types.attrs.check v then "{ ${concatStringsSep " " (mkAttrsString false v) } }"
else throw ''
invalid expression used in option services.picom.settings:
${v}
'';
toConf = attrs: concatStringsSep "\n" (mkAttrsString true cfg.settings);
configFile = pkgs.writeText "picom.conf" (toConf cfg.settings);
@ -61,7 +70,7 @@ in {
};
fadeDelta = mkOption {
type = types.addCheck types.int (x: x > 0);
type = types.ints.positive;
default = 10;
example = 5;
description = ''
@ -70,12 +79,11 @@ in {
};
fadeSteps = mkOption {
type = pairOf (floatBetween "0.01" "1.01");
default = [ "0.028" "0.03" ];
example = [ "0.04" "0.04" ];
type = pairOf (floatBetween 0.01 1);
default = [ 0.028 0.03 ];
example = [ 0.04 0.04 ];
description = ''
Opacity change between fade steps (in and out).
(numbers in range 0.01 - 1.0)
'';
};
@ -111,11 +119,11 @@ in {
};
shadowOpacity = mkOption {
type = floatBetween "0.0" "1.01";
default = "0.75";
example = "0.8";
type = floatBetween 0 1;
default = 0.75;
example = 0.8;
description = ''
Window shadows opacity (number in range 0.0 - 1.0).
Window shadows opacity.
'';
};
@ -134,29 +142,29 @@ in {
};
activeOpacity = mkOption {
type = floatBetween "0.0" "1.01";
default = "1.0";
example = "0.8";
type = floatBetween 0 1;
default = 1.0;
example = 0.8;
description = ''
Opacity of active windows (number in range 0.0 - 1.0).
Opacity of active windows.
'';
};
inactiveOpacity = mkOption {
type = floatBetween "0.1" "1.01";
default = "1.0";
example = "0.8";
type = floatBetween 0.1 1;
default = 1.0;
example = 0.8;
description = ''
Opacity of inactive windows (number in range 0.1 - 1.0).
Opacity of inactive windows.
'';
};
menuOpacity = mkOption {
type = floatBetween "0.0" "1.01";
default = "1.0";
example = "0.8";
type = floatBetween 0 1;
default = 1.0;
example = 0.8;
description = ''
Opacity of dropdown and popup menu (number in range 0.0 - 1.0).
Opacity of dropdown and popup menu.
'';
};
@ -210,7 +218,7 @@ in {
};
refreshRate = mkOption {
type = types.addCheck types.int (x: x >= 0);
type = types.ints.unsigned;
default = 0;
example = 60;
description = ''
@ -218,54 +226,69 @@ in {
'';
};
settings = let
configTypes = with types; oneOf [ bool int float str ];
# types.loaOf converts lists to sets
loaOf = t: with types; either (listOf t) (attrsOf t);
settings = with types;
let
scalar = oneOf [ bool int float str ]
// { description = "scalar types"; };
libConfig = oneOf [ scalar (listOf libConfig) (attrsOf libConfig) ]
// { description = "libconfig type"; };
topLevel = attrsOf libConfig
// { description = ''
libconfig configuration. The format consists of an attributes
set (called a group) of settings. Each setting can be a scalar type
(boolean, integer, floating point number or string), a list of
scalars or a group itself
'';
};
in mkOption {
type = loaOf (types.either configTypes (loaOf (types.either configTypes (loaOf configTypes))));
default = {};
type = topLevel;
default = { };
example = literalExample ''
blur =
{ method = "gaussian";
size = 10;
deviation = 5.0;
};
'';
description = ''
Additional Picom configuration.
Picom settings. Use this option to configure Picom settings not exposed
in a NixOS option or to bypass one. For the available options see the
CONFIGURATION FILES section at <literal>picom(1)</literal>.
'';
};
};
config = mkIf cfg.enable {
services.picom.settings = let
# Hard conversion to float, literally lib.toInt but toFloat
toFloat = str: let
may_be_float = builtins.fromJSON str;
in if builtins.isFloat may_be_float
then may_be_float
else throw "Could not convert ${str} to float.";
in {
services.picom.settings = mkDefaultAttrs {
# fading
fading = mkDefault cfg.fade;
fade-delta = mkDefault cfg.fadeDelta;
fade-in-step = mkDefault (toFloat (elemAt cfg.fadeSteps 0));
fade-out-step = mkDefault (toFloat (elemAt cfg.fadeSteps 1));
fade-exclude = mkDefault cfg.fadeExclude;
fading = cfg.fade;
fade-delta = cfg.fadeDelta;
fade-in-step = elemAt cfg.fadeSteps 0;
fade-out-step = elemAt cfg.fadeSteps 1;
fade-exclude = cfg.fadeExclude;
# shadows
shadow = mkDefault cfg.shadow;
shadow-offset-x = mkDefault (elemAt cfg.shadowOffsets 0);
shadow-offset-y = mkDefault (elemAt cfg.shadowOffsets 1);
shadow-opacity = mkDefault (toFloat cfg.shadowOpacity);
shadow-exclude = mkDefault cfg.shadowExclude;
shadow = cfg.shadow;
shadow-offset-x = elemAt cfg.shadowOffsets 0;
shadow-offset-y = elemAt cfg.shadowOffsets 1;
shadow-opacity = cfg.shadowOpacity;
shadow-exclude = cfg.shadowExclude;
# opacity
active-opacity = mkDefault (toFloat cfg.activeOpacity);
inactive-opacity = mkDefault (toFloat cfg.inactiveOpacity);
active-opacity = cfg.activeOpacity;
inactive-opacity = cfg.inactiveOpacity;
wintypes = mkDefault cfg.wintypes;
wintypes = cfg.wintypes;
opacity-rule = mkDefault cfg.opacityRules;
opacity-rule = cfg.opacityRules;
# other options
backend = mkDefault cfg.backend;
vsync = mkDefault cfg.vSync;
refresh-rate = mkDefault cfg.refreshRate;
backend = cfg.backend;
vsync = cfg.vSync;
refresh-rate = cfg.refreshRate;
};
systemd.user.services.picom = {

View file

@ -138,6 +138,10 @@ in
users.users.resolved.group = "systemd-resolve";
# add resolve to nss hosts database if enabled and nscd enabled
# system.nssModules is configured in nixos/modules/system/boot/systemd.nix
system.nssDatabases.hosts = optional config.services.nscd.enable "resolve [!UNAVAIL=return]";
systemd.additionalUpstreamSystemUnits = [
"systemd-resolved.service"
];

View file

@ -405,6 +405,8 @@ let
"hibernate" "hybrid-sleep" "suspend-then-hibernate" "lock"
];
proxy_env = config.networking.proxy.envVars;
in
{
@ -827,6 +829,27 @@ in
system.build.units = cfg.units;
# Systemd provides various NSS modules to look up dynamic users, locally
# configured IP adresses and local container hostnames.
# On NixOS, these can only be passed to the NSS system via nscd (and its
# LD_LIBRARY_PATH), which is why it's usually a very good idea to have nscd
# enabled (also see the config.nscd.enable description).
# While there is already an assertion in place complaining loudly about
# having nssModules configured and nscd disabled, for some reason we still
# check for nscd being enabled before adding to nssModules.
system.nssModules = optional config.services.nscd.enable systemd.out;
system.nssDatabases = mkIf config.services.nscd.enable {
hosts = (mkMerge [
[ "mymachines" ]
(mkOrder 1600 [ "myhostname" ] # 1600 to ensure it's always the last
)
]);
passwd = (mkMerge [
[ "mymachines" ]
(mkAfter [ "systemd" ])
]);
};
environment.systemPackages = [ systemd ];
environment.etc = let
@ -1035,6 +1058,7 @@ in
systemd.targets.remote-fs.unitConfig.X-StopOnReconfiguration = true;
systemd.targets.network-online.wantedBy = [ "multi-user.target" ];
systemd.services.systemd-binfmt.wants = [ "proc-sys-fs-binfmt_misc.mount" ];
systemd.services.systemd-importd.environment = proxy_env;
# Don't bother with certain units in containers.
systemd.services.systemd-remount-fs.unitConfig.ConditionVirtualization = "!container";

View file

@ -189,9 +189,18 @@ let
mkdir /boot/grub
echo '(hd0) /dev/vda' > /boot/grub/device.map
# Install GRUB and generate the GRUB boot menu.
touch /etc/NIXOS
# This is needed for systemd-boot to find ESP, and udev is not available here to create this
mkdir -p /dev/block
ln -s /dev/vda2 /dev/block/254:2
# Set up system profile (normally done by nixos-rebuild / nix-env --set)
mkdir -p /nix/var/nix/profiles
ln -s ${config.system.build.toplevel} /nix/var/nix/profiles/system-1-link
ln -s /nix/var/nix/profiles/system-1-link /nix/var/nix/profiles/system
# Install bootloader
touch /etc/NIXOS
export NIXOS_INSTALL_BOOTLOADER=1
${config.system.build.toplevel}/bin/switch-to-configuration boot
umount /boot

View file

@ -24,7 +24,6 @@ in
_3proxy = handleTest ./3proxy.nix {};
acme = handleTest ./acme.nix {};
atd = handleTest ./atd.nix {};
automysqlbackup = handleTest ./automysqlbackup.nix {};
avahi = handleTest ./avahi.nix {};
babeld = handleTest ./babeld.nix {};
bcachefs = handleTestOn ["x86_64-linux"] ./bcachefs.nix {}; # linux-4.18.2018.10.12 is unsupported on aarch64
@ -85,6 +84,7 @@ in
ecryptfs = handleTest ./ecryptfs.nix {};
ejabberd = handleTest ./xmpp/ejabberd.nix {};
elk = handleTestOn ["x86_64-linux"] ./elk.nix {};
enlightenment = handleTest ./enlightenment.nix {};
env = handleTest ./env.nix {};
etcd = handleTestOn ["x86_64-linux"] ./etcd.nix {};
etcd-cluster = handleTestOn ["x86_64-linux"] ./etcd-cluster.nix {};
@ -164,7 +164,6 @@ in
kubernetes.rbac = handleTestOn ["x86_64-linux"] ./kubernetes/rbac.nix {};
latestKernel.hardened = handleTest ./hardened.nix { latestKernel = true; };
latestKernel.login = handleTest ./login.nix { latestKernel = true; };
ldap = handleTest ./ldap.nix {};
leaps = handleTest ./leaps.nix {};
lidarr = handleTest ./lidarr.nix {};
lightdm = handleTest ./lightdm.nix {};
@ -176,6 +175,8 @@ in
magnetico = handleTest ./magnetico.nix {};
magic-wormhole-mailbox-server = handleTest ./magic-wormhole-mailbox-server.nix {};
mailcatcher = handleTest ./mailcatcher.nix {};
mariadb-galera-mariabackup = handleTest ./mysql/mariadb-galera-mariabackup.nix {};
mariadb-galera-rsync = handleTest ./mysql/mariadb-galera-rsync.nix {};
mathics = handleTest ./mathics.nix {};
matomo = handleTest ./matomo.nix {};
matrix-synapse = handleTest ./matrix-synapse.nix {};
@ -197,9 +198,10 @@ in
munin = handleTest ./munin.nix {};
mutableUsers = handleTest ./mutable-users.nix {};
mxisd = handleTest ./mxisd.nix {};
mysql = handleTest ./mysql.nix {};
mysqlBackup = handleTest ./mysql-backup.nix {};
mysqlReplication = handleTest ./mysql-replication.nix {};
mysql = handleTest ./mysql/mysql.nix {};
mysql-autobackup = handleTest ./mysql/mysql-autobackup.nix {};
mysql-backup = handleTest ./mysql/mysql-backup.nix {};
mysql-replication = handleTest ./mysql/mysql-replication.nix {};
nagios = handleTest ./nagios.nix {};
nat.firewall = handleTest ./nat.nix { withFirewall = true; };
nat.firewall-conntrack = handleTest ./nat.nix { withFirewall = true; withConntrackHelpers = true; };
@ -297,6 +299,7 @@ in
syncthing-relay = handleTest ./syncthing-relay.nix {};
systemd = handleTest ./systemd.nix {};
systemd-analyze = handleTest ./systemd-analyze.nix {};
systemd-boot = handleTestOn ["x86_64-linux"] ./systemd-boot.nix {};
systemd-confinement = handleTest ./systemd-confinement.nix {};
systemd-timesyncd = handleTest ./systemd-timesyncd.nix {};
systemd-networkd-vrf = handleTest ./systemd-networkd-vrf.nix {};
@ -320,6 +323,7 @@ in
trickster = handleTest ./trickster.nix {};
tuptime = handleTest ./tuptime.nix {};
udisks2 = handleTest ./udisks2.nix {};
unit-php = handleTest ./web-servers/unit-php.nix {};
upnp = handleTest ./upnp.nix {};
uwsgi = handleTest ./uwsgi.nix {};
vault = handleTest ./vault.nix {};

View file

@ -0,0 +1,101 @@
import ./make-test-python.nix ({ pkgs, ...} :
{
name = "enlightenment";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ romildo ];
};
machine = { ... }:
{
imports = [ ./common/user-account.nix ];
services.xserver.enable = true;
services.xserver.desktopManager.enlightenment.enable = true;
services.xserver.displayManager.lightdm = {
enable = true;
autoLogin = {
enable = true;
user = "alice";
};
};
hardware.pulseaudio.enable = true; # needed for the factl test, /dev/snd/* exists without them but udev doesn't care then
virtualisation.memorySize = 1024;
environment.systemPackages = [ pkgs.xdotool ];
services.acpid.enable = true;
services.connman.enable = true;
services.connman.package = pkgs.connmanMinimal;
};
enableOCR = true;
testScript = { nodes, ... }: let
user = nodes.machine.config.users.users.alice;
in ''
with subtest("Ensure x starts"):
machine.wait_for_x()
machine.wait_for_file("${user.home}/.Xauthority")
machine.succeed("xauth merge ${user.home}/.Xauthority")
with subtest("Check that logging in has given the user ownership of devices"):
machine.succeed("getfacl -p /dev/snd/timer | grep -q ${user.name}")
with subtest("First time wizard"):
machine.wait_for_text("Default") # Language
machine.succeed("xdotool mousemove 512 185 click 1") # Default Language
machine.screenshot("wizard1")
machine.succeed("xdotool mousemove 512 740 click 1") # Next
machine.wait_for_text("English") # Keyboard (default)
machine.screenshot("wizard2")
machine.succeed("xdotool mousemove 512 740 click 1") # Next
machine.wait_for_text("Standard") # Profile (default)
machine.screenshot("wizard3")
machine.succeed("xdotool mousemove 512 740 click 1") # Next
machine.wait_for_text("Title") # Sizing (default)
machine.screenshot("wizard4")
machine.succeed("xdotool mousemove 512 740 click 1") # Next
machine.wait_for_text("clicked") # Windows Phocus
machine.succeed("xdotool mousemove 512 370 click 1") # Click
machine.screenshot("wizard5")
machine.succeed("xdotool mousemove 512 740 click 1") # Next
machine.wait_for_text("bindings") # Mouse Modifiers (default)
machine.screenshot("wizard6")
machine.succeed("xdotool mousemove 512 740 click 1") # Next
machine.wait_for_text("Connman") # Network Management (default)
machine.screenshot("wizard7")
machine.succeed("xdotool mousemove 512 740 click 1") # Next
machine.wait_for_text("BlusZ") # Bluetooh Management (default)
machine.screenshot("wizard8")
machine.succeed("xdotool mousemove 512 740 click 1") # Next
machine.wait_for_text("Compositing") # Compositing (default)
machine.screenshot("wizard9")
machine.succeed("xdotool mousemove 512 740 click 1") # Next
machine.wait_for_text("update") # Updates
machine.succeed("xdotool mousemove 512 495 click 1") # Disable
machine.screenshot("wizard10")
machine.succeed("xdotool mousemove 512 740 click 1") # Next
machine.wait_for_text("taskbar") # Taskbar
machine.succeed("xdotool mousemove 480 410 click 1") # Enable
machine.screenshot("wizard11")
machine.succeed("xdotool mousemove 512 740 click 1") # Next
machine.wait_for_text("Home") # The desktop
machine.screenshot("wizard12")
with subtest("Run Terminology"):
machine.succeed("terminology &")
machine.sleep(5)
machine.send_chars("ls --color -alF\n")
machine.sleep(2)
machine.screenshot("terminology")
'';
})

View file

@ -1,405 +0,0 @@
import ./make-test-python.nix ({ pkgs, lib, ...} :
let
unlines = lib.concatStringsSep "\n";
unlinesAttrs = f: as: unlines (lib.mapAttrsToList f as);
dbDomain = "example.com";
dbSuffix = "dc=example,dc=com";
dbAdminDn = "cn=admin,${dbSuffix}";
dbAdminPwd = "admin-password";
# NOTE: slappasswd -h "{SSHA}" -s '${dbAdminPwd}'
dbAdminPwdHash = "{SSHA}i7FopSzkFQMrHzDMB1vrtkI0rBnwouP8";
ldapUser = "test-ldap-user";
ldapUserId = 10000;
ldapUserPwd = "user-password";
# NOTE: slappasswd -h "{SSHA}" -s '${ldapUserPwd}'
ldapUserPwdHash = "{SSHA}v12XICMZNGT6r2KJ26rIkN8Vvvp4QX6i";
ldapGroup = "test-ldap-group";
ldapGroupId = 10000;
mkClient = useDaemon:
{ lib, ... }:
{
virtualisation.memorySize = 256;
virtualisation.vlans = [ 1 ];
security.pam.services.su.rootOK = lib.mkForce false;
users.ldap.enable = true;
users.ldap.daemon = {
enable = useDaemon;
rootpwmoddn = "cn=admin,${dbSuffix}";
rootpwmodpwFile = "/etc/nslcd.rootpwmodpw";
};
users.ldap.loginPam = true;
users.ldap.nsswitch = true;
users.ldap.server = "ldap://server";
users.ldap.base = "ou=posix,${dbSuffix}";
users.ldap.bind = {
distinguishedName = "cn=admin,${dbSuffix}";
passwordFile = "/etc/ldap/bind.password";
};
# NOTE: passwords stored in clear in Nix's store, but this is a test.
environment.etc."ldap/bind.password".source = pkgs.writeText "password" dbAdminPwd;
environment.etc."nslcd.rootpwmodpw".source = pkgs.writeText "rootpwmodpw" dbAdminPwd;
};
in
{
name = "ldap";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ montag451 ];
};
nodes = {
server =
{ pkgs, config, ... }:
let
inherit (config.services) openldap;
slapdConfig = pkgs.writeText "cn=config.ldif" (''
dn: cn=config
objectClass: olcGlobal
#olcPidFile: /run/slapd/slapd.pid
# List of arguments that were passed to the server
#olcArgsFile: /run/slapd/slapd.args
# Read slapd-config(5) for possible values
olcLogLevel: none
# The tool-threads parameter sets the actual amount of CPU's
# that is used for indexing.
olcToolThreads: 1
dn: olcDatabase={-1}frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
# The maximum number of entries that is returned for a search operation
olcSizeLimit: 500
# Allow unlimited access to local connection from the local root user
olcAccess: to *
by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage
by * break
# Allow unauthenticated read access for schema and base DN autodiscovery
olcAccess: to dn.exact=""
by * read
olcAccess: to dn.base="cn=Subschema"
by * read
dn: olcDatabase=config,cn=config
objectClass: olcDatabaseConfig
olcRootDN: cn=admin,cn=config
#olcRootPW:
# NOTE: access to cn=config, system root can be manager
# with SASL mechanism (-Y EXTERNAL) over unix socket (-H ldapi://)
olcAccess: to *
by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
by * break
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
include: file://${pkgs.openldap}/etc/schema/core.ldif
include: file://${pkgs.openldap}/etc/schema/cosine.ldif
include: file://${pkgs.openldap}/etc/schema/nis.ldif
include: file://${pkgs.openldap}/etc/schema/inetorgperson.ldif
dn: cn=module{0},cn=config
objectClass: olcModuleList
# Where the dynamically loaded modules are stored
#olcModulePath: /usr/lib/ldap
olcModuleLoad: back_mdb
''
+ unlinesAttrs (olcSuffix: {conf, ...}:
"include: file://" + pkgs.writeText "config.ldif" conf
) slapdDatabases
);
slapdDatabases = {
${dbSuffix} = {
conf = ''
dn: olcBackend={1}mdb,cn=config
objectClass: olcBackendConfig
dn: olcDatabase={1}mdb,cn=config
olcSuffix: ${dbSuffix}
olcDbDirectory: ${openldap.dataDir}/${dbSuffix}
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
# NOTE: checkpoint the database periodically in case of system failure
# and to speed up slapd shutdown.
olcDbCheckpoint: 512 30
# Database max size is 1G
olcDbMaxSize: 1073741824
olcLastMod: TRUE
# NOTE: database superuser. Needed for syncrepl,
# and used to auth as admin through a TCP connection.
olcRootDN: cn=admin,${dbSuffix}
olcRootPW: ${dbAdminPwdHash}
#
olcDbIndex: objectClass eq
olcDbIndex: cn,uid eq
olcDbIndex: uidNumber,gidNumber eq
olcDbIndex: member,memberUid eq
#
olcAccess: to attrs=userPassword
by self write
by anonymous auth
by dn="cn=admin,${dbSuffix}" write
by dn="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write
by * none
olcAccess: to attrs=shadowLastChange
by self write
by dn="cn=admin,${dbSuffix}" write
by dn="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write
by * none
olcAccess: to dn.sub="ou=posix,${dbSuffix}"
by self read
by dn="cn=admin,${dbSuffix}" read
by dn="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
olcAccess: to *
by self read
by * none
'';
data = ''
dn: ${dbSuffix}
objectClass: top
objectClass: dcObject
objectClass: organization
o: ${dbDomain}
dn: cn=admin,${dbSuffix}
objectClass: simpleSecurityObject
objectClass: organizationalRole
description: ${dbDomain} LDAP administrator
roleOccupant: ${dbSuffix}
userPassword: ${ldapUserPwdHash}
dn: ou=posix,${dbSuffix}
objectClass: top
objectClass: organizationalUnit
dn: ou=accounts,ou=posix,${dbSuffix}
objectClass: top
objectClass: organizationalUnit
dn: ou=groups,ou=posix,${dbSuffix}
objectClass: top
objectClass: organizationalUnit
''
+ lib.concatMapStrings posixAccount [
{ uid=ldapUser; uidNumber=ldapUserId; gidNumber=ldapGroupId; userPassword=ldapUserPwdHash; }
]
+ lib.concatMapStrings posixGroup [
{ gid=ldapGroup; gidNumber=ldapGroupId; members=[]; }
];
};
};
# NOTE: create a user account using the posixAccount objectClass.
posixAccount =
{ uid
, uidNumber ? null
, gidNumber ? null
, cn ? ""
, sn ? ""
, userPassword ? ""
, loginShell ? "/bin/sh"
}: ''
dn: uid=${uid},ou=accounts,ou=posix,${dbSuffix}
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
cn: ${cn}
gecos:
${if gidNumber == null then "#" else "gidNumber: ${toString gidNumber}"}
homeDirectory: /home/${uid}
loginShell: ${loginShell}
sn: ${sn}
${if uidNumber == null then "#" else "uidNumber: ${toString uidNumber}"}
${if userPassword == "" then "#" else "userPassword: ${userPassword}"}
'';
# NOTE: create a group using the posixGroup objectClass.
posixGroup =
{ gid
, gidNumber
, members
}: ''
dn: cn=${gid},ou=groups,ou=posix,${dbSuffix}
objectClass: top
objectClass: posixGroup
gidNumber: ${toString gidNumber}
${lib.concatMapStrings (member: "memberUid: ${member}\n") members}
'';
in
{
virtualisation.memorySize = 256;
virtualisation.vlans = [ 1 ];
networking.firewall.allowedTCPPorts = [ 389 ];
services.openldap.enable = true;
services.openldap.dataDir = "/var/db/openldap";
services.openldap.configDir = "/var/db/slapd";
services.openldap.urlList = [
"ldap:///"
"ldapi:///"
];
systemd.services.openldap = {
preStart = ''
set -e
# NOTE: slapd's config is always re-initialized.
rm -rf "${openldap.configDir}"/cn=config \
"${openldap.configDir}"/cn=config.ldif
install -D -d -m 0700 -o "${openldap.user}" -g "${openldap.group}" "${openldap.configDir}"
# NOTE: olcDbDirectory must be created before adding the config.
'' +
unlinesAttrs (olcSuffix: {data, ...}: ''
# NOTE: database is always re-initialized.
rm -rf "${openldap.dataDir}/${olcSuffix}"
install -D -d -m 0700 -o "${openldap.user}" -g "${openldap.group}" \
"${openldap.dataDir}/${olcSuffix}"
'') slapdDatabases
+ ''
# NOTE: slapd is supposed to be stopped while in preStart,
# hence slap* commands can safely be used.
umask 0077
${pkgs.openldap}/bin/slapadd -n 0 \
-F "${openldap.configDir}" \
-l ${slapdConfig}
chown -R "${openldap.user}:${openldap.group}" "${openldap.configDir}"
# NOTE: slapadd(8): To populate the config database slapd-config(5),
# use -n 0 as it is always the first database.
# It must physically exist on the filesystem prior to this, however.
'' +
unlinesAttrs (olcSuffix: {data, ...}: ''
# NOTE: load database ${olcSuffix}
# (as root to avoid depending on sudo or chpst)
${pkgs.openldap}/bin/slapadd \
-F "${openldap.configDir}" \
-l ${pkgs.writeText "data.ldif" data}
'' + ''
# NOTE: redundant with default openldap's preStart, but do not harm.
chown -R "${openldap.user}:${openldap.group}" \
"${openldap.dataDir}/${olcSuffix}"
'') slapdDatabases;
};
};
client1 = mkClient true; # use nss_pam_ldapd
client2 = mkClient false; # use nss_ldap and pam_ldap
};
testScript = ''
def expect_script(*commands):
script = ";".join(commands)
return f"${pkgs.expect}/bin/expect -c '{script}'"
server.start()
server.wait_for_unit("default.target")
with subtest("slapd: auth as database admin with SASL and check a POSIX account"):
server.succeed(
'test "$(ldapsearch -LLL -H ldapi:// -Y EXTERNAL '
+ "-b 'uid=${ldapUser},ou=accounts,ou=posix,${dbSuffix}' "
+ "-s base uidNumber | "
+ "sed -ne 's/^uidNumber: \\(.*\\)/\\1/p')\" -eq ${toString ldapUserId}"
)
with subtest("slapd: auth as database admin with password and check a POSIX account"):
server.succeed(
"test \"$(ldapsearch -LLL -H ldap://server -D 'cn=admin,${dbSuffix}' "
+ "-w '${dbAdminPwd}' -b 'uid=${ldapUser},ou=accounts,ou=posix,${dbSuffix}' "
+ "-s base uidNumber | "
+ "sed -ne 's/^uidNumber: \\(.*\\)/\\1/p')\" -eq ${toString ldapUserId}"
)
client1.start()
client1.wait_for_unit("default.target")
with subtest("password: su with password to a POSIX account"):
client1.succeed(
expect_script(
'spawn su "${ldapUser}"',
'expect "Password:"',
'send "${ldapUserPwd}\n"',
'expect "*"',
'send "whoami\n"',
'expect -ex "${ldapUser}" {exit}',
"exit 1",
)
)
with subtest("password: change password of a POSIX account as root"):
client1.succeed(
"chpasswd <<<'${ldapUser}:new-password'",
expect_script(
'spawn su "${ldapUser}"',
'expect "Password:"',
'send "new-password\n"',
'expect "*"',
'send "whoami\n"',
'expect -ex "${ldapUser}" {exit}',
"exit 1",
),
"chpasswd <<<'${ldapUser}:${ldapUserPwd}'",
)
with subtest("password: change password of a POSIX account from itself"):
client1.succeed(
"chpasswd <<<'${ldapUser}:${ldapUserPwd}' ",
expect_script(
"spawn su --login ${ldapUser} -c passwd",
'expect "Password: "',
'send "${ldapUserPwd}\n"',
'expect "(current) UNIX password: "',
'send "${ldapUserPwd}\n"',
'expect "New password: "',
'send "new-password\n"',
'expect "Retype new password: "',
'send "new-password\n"',
'expect "passwd: password updated successfully" {exit}',
"exit 1",
),
expect_script(
'spawn su "${ldapUser}"',
'expect "Password:"',
'send "${ldapUserPwd}\n"',
'expect "su: Authentication failure" {exit}',
"exit 1",
),
expect_script(
'spawn su "${ldapUser}"',
'expect "Password:"',
'send "new-password\n"',
'expect "*"',
'send "whoami\n"',
'expect -ex "${ldapUser}" {exit}',
"exit 1",
),
"chpasswd <<<'${ldapUser}:${ldapUserPwd}'",
)
client2.start()
client2.wait_for_unit("default.target")
with subtest("NSS"):
client1.succeed(
"test \"$(id -u '${ldapUser}')\" -eq ${toString ldapUserId}",
"test \"$(id -u -n '${ldapUser}')\" = '${ldapUser}'",
"test \"$(id -g '${ldapUser}')\" -eq ${toString ldapGroupId}",
"test \"$(id -g -n '${ldapUser}')\" = '${ldapGroup}'",
"test \"$(id -u '${ldapUser}')\" -eq ${toString ldapUserId}",
"test \"$(id -u -n '${ldapUser}')\" = '${ldapUser}'",
"test \"$(id -g '${ldapUser}')\" -eq ${toString ldapGroupId}",
"test \"$(id -g -n '${ldapUser}')\" = '${ldapGroup}'",
)
with subtest("PAM"):
client1.succeed(
"echo ${ldapUserPwd} | su -l '${ldapUser}' -c true",
"echo ${ldapUserPwd} | su -l '${ldapUser}' -c true",
)
'';
})

View file

@ -0,0 +1,223 @@
import ./../make-test-python.nix ({ pkgs, ...} :
let
mysqlenv-common = pkgs.buildEnv { name = "mysql-path-env-common"; pathsToLink = [ "/bin" ]; paths = with pkgs; [ bash gawk gnutar inetutils which ]; };
mysqlenv-mariabackup = pkgs.buildEnv { name = "mysql-path-env-mariabackup"; pathsToLink = [ "/bin" ]; paths = with pkgs; [ gzip iproute netcat procps pv socat ]; };
in {
name = "mariadb-galera-mariabackup";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ izorkin ];
};
# The test creates a Galera cluster with 3 nodes and is checking if mariabackup-based SST works. The cluster is tested by creating a DB and an empty table on one node,
# and checking the table's presence on the other node.
nodes = {
galera_01 =
{ pkgs, ... }:
{
networking = {
interfaces.eth1 = {
ipv4.addresses = [
{ address = "192.168.1.1"; prefixLength = 24; }
];
};
extraHosts = ''
192.168.1.1 galera_01
192.168.1.2 galera_02
192.168.1.3 galera_03
'';
firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ];
firewall.allowedUDPPorts = [ 4567 ];
};
users.users.testuser = { };
systemd.services.mysql = with pkgs; {
path = [ mysqlenv-common mysqlenv-mariabackup ];
};
services.mysql = {
enable = true;
package = pkgs.mariadb;
ensureDatabases = [ "testdb" ];
ensureUsers = [{
name = "testuser";
ensurePermissions = {
"testdb.*" = "ALL PRIVILEGES";
};
}];
initialScript = pkgs.writeText "mariadb-init.sql" ''
GRANT ALL PRIVILEGES ON *.* TO 'check_repl'@'localhost' IDENTIFIED BY 'check_pass' WITH GRANT OPTION;
FLUSH PRIVILEGES;
'';
settings = {
mysqld = {
bind_address = "0.0.0.0";
};
galera = {
wsrep_on = "ON";
wsrep_debug = "OFF";
wsrep_retry_autocommit = "3";
wsrep_provider = "${pkgs.mariadb-galera_25}/lib/galera/libgalera_smm.so";
wsrep_cluster_address = "gcomm://";
wsrep_cluster_name = "galera";
wsrep_node_address = "192.168.1.1";
wsrep_node_name = "galera_01";
wsrep_sst_method = "mariabackup";
wsrep_sst_auth = "check_repl:check_pass";
binlog_format = "ROW";
enforce_storage_engine = "InnoDB";
innodb_autoinc_lock_mode = "2";
};
};
};
};
galera_02 =
{ pkgs, ... }:
{
networking = {
interfaces.eth1 = {
ipv4.addresses = [
{ address = "192.168.1.2"; prefixLength = 24; }
];
};
extraHosts = ''
192.168.1.1 galera_01
192.168.1.2 galera_02
192.168.1.3 galera_03
'';
firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ];
firewall.allowedUDPPorts = [ 4567 ];
};
users.users.testuser = { };
systemd.services.mysql = with pkgs; {
path = [ mysqlenv-common mysqlenv-mariabackup ];
};
services.mysql = {
enable = true;
package = pkgs.mariadb;
settings = {
mysqld = {
bind_address = "0.0.0.0";
};
galera = {
wsrep_on = "ON";
wsrep_debug = "OFF";
wsrep_retry_autocommit = "3";
wsrep_provider = "${pkgs.mariadb-galera_25}/lib/galera/libgalera_smm.so";
wsrep_cluster_address = "gcomm://galera_01,galera_02,galera_03";
wsrep_cluster_name = "galera";
wsrep_node_address = "192.168.1.2";
wsrep_node_name = "galera_02";
wsrep_sst_method = "mariabackup";
wsrep_sst_auth = "check_repl:check_pass";
binlog_format = "ROW";
enforce_storage_engine = "InnoDB";
innodb_autoinc_lock_mode = "2";
};
};
};
};
galera_03 =
{ pkgs, ... }:
{
networking = {
interfaces.eth1 = {
ipv4.addresses = [
{ address = "192.168.1.3"; prefixLength = 24; }
];
};
extraHosts = ''
192.168.1.1 galera_01
192.168.1.2 galera_02
192.168.1.3 galera_03
'';
firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ];
firewall.allowedUDPPorts = [ 4567 ];
};
users.users.testuser = { };
systemd.services.mysql = with pkgs; {
path = [ mysqlenv-common mysqlenv-mariabackup ];
};
services.mysql = {
enable = true;
package = pkgs.mariadb;
settings = {
mysqld = {
bind_address = "0.0.0.0";
};
galera = {
wsrep_on = "ON";
wsrep_debug = "OFF";
wsrep_retry_autocommit = "3";
wsrep_provider = "${pkgs.mariadb-galera_25}/lib/galera/libgalera_smm.so";
wsrep_cluster_address = "gcomm://galera_01,galera_02,galera_03";
wsrep_cluster_name = "galera";
wsrep_node_address = "192.168.1.3";
wsrep_node_name = "galera_03";
wsrep_sst_method = "mariabackup";
wsrep_sst_auth = "check_repl:check_pass";
binlog_format = "ROW";
enforce_storage_engine = "InnoDB";
innodb_autoinc_lock_mode = "2";
};
};
};
};
};
testScript = ''
galera_01.start()
galera_01.wait_for_unit("mysql")
galera_01.wait_for_open_port(3306)
galera_01.succeed(
"sudo -u testuser mysql -u testuser -e 'use testdb; create table db1 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'"
)
galera_01.succeed(
"sudo -u testuser mysql -u testuser -e 'use testdb; insert into db1 values (37);'"
)
galera_02.start()
galera_02.wait_for_unit("mysql")
galera_02.wait_for_open_port(3306)
galera_03.start()
galera_03.wait_for_unit("mysql")
galera_03.wait_for_open_port(3306)
galera_02.succeed(
"sudo -u testuser mysql -u root -e 'use testdb; select test_id from db1;' -N | grep 37"
)
galera_02.succeed(
"sudo -u testuser mysql -u root -e 'use testdb; create table db2 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'"
)
galera_02.succeed("systemctl stop mysql")
galera_01.succeed(
"sudo -u testuser mysql -u testuser -e 'use testdb; insert into db2 values (38);'"
)
galera_03.succeed(
"sudo -u testuser mysql -u root -e 'use testdb; create table db3 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'"
)
galera_01.succeed(
"sudo -u testuser mysql -u testuser -e 'use testdb; insert into db3 values (39);'"
)
galera_02.succeed("systemctl start mysql")
galera_02.wait_for_open_port(3306)
galera_02.succeed(
"sudo -u testuser mysql -u root -e 'show status' -N | grep 'wsrep_cluster_size.*3'"
)
galera_03.succeed(
"sudo -u testuser mysql -u root -e 'show status' -N | grep 'wsrep_local_state_comment.*Synced'"
)
galera_01.succeed(
"sudo -u testuser mysql -u root -e 'use testdb; select test_id from db3;' -N | grep 39"
)
galera_02.succeed(
"sudo -u testuser mysql -u root -e 'use testdb; select test_id from db2;' -N | grep 38"
)
galera_03.succeed(
"sudo -u testuser mysql -u root -e 'use testdb; select test_id from db1;' -N | grep 37"
)
galera_01.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db3;'")
galera_02.succeed("sudo -u testuser mysql -u root -e 'use testdb; drop table db2;'")
galera_03.succeed("sudo -u testuser mysql -u root -e 'use testdb; drop table db1;'")
'';
})

View file

@ -0,0 +1,216 @@
import ./../make-test-python.nix ({ pkgs, ...} :
let
mysqlenv-common = pkgs.buildEnv { name = "mysql-path-env-common"; pathsToLink = [ "/bin" ]; paths = with pkgs; [ bash gawk gnutar inetutils which ]; };
mysqlenv-rsync = pkgs.buildEnv { name = "mysql-path-env-rsync"; pathsToLink = [ "/bin" ]; paths = with pkgs; [ lsof procps rsync stunnel ]; };
in {
name = "mariadb-galera-rsync";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ izorkin ];
};
# The test creates a Galera cluster with 3 nodes and is checking if rsync-based SST works. The cluster is tested by creating a DB and an empty table on one node,
# and checking the table's presence on the other node.
nodes = {
galera_04 =
{ pkgs, ... }:
{
networking = {
interfaces.eth1 = {
ipv4.addresses = [
{ address = "192.168.2.1"; prefixLength = 24; }
];
};
extraHosts = ''
192.168.2.1 galera_04
192.168.2.2 galera_05
192.168.2.3 galera_06
'';
firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ];
firewall.allowedUDPPorts = [ 4567 ];
};
users.users.testuser = { };
systemd.services.mysql = with pkgs; {
path = [ mysqlenv-common mysqlenv-rsync ];
};
services.mysql = {
enable = true;
package = pkgs.mariadb;
ensureDatabases = [ "testdb" ];
ensureUsers = [{
name = "testuser";
ensurePermissions = {
"testdb.*" = "ALL PRIVILEGES";
};
}];
settings = {
mysqld = {
bind_address = "0.0.0.0";
};
galera = {
wsrep_on = "ON";
wsrep_debug = "OFF";
wsrep_retry_autocommit = "3";
wsrep_provider = "${pkgs.mariadb-galera_25}/lib/galera/libgalera_smm.so";
wsrep_cluster_address = "gcomm://";
wsrep_cluster_name = "galera-rsync";
wsrep_node_address = "192.168.2.1";
wsrep_node_name = "galera_04";
wsrep_sst_method = "rsync";
binlog_format = "ROW";
enforce_storage_engine = "InnoDB";
innodb_autoinc_lock_mode = "2";
};
};
};
};
galera_05 =
{ pkgs, ... }:
{
networking = {
interfaces.eth1 = {
ipv4.addresses = [
{ address = "192.168.2.2"; prefixLength = 24; }
];
};
extraHosts = ''
192.168.2.1 galera_04
192.168.2.2 galera_05
192.168.2.3 galera_06
'';
firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ];
firewall.allowedUDPPorts = [ 4567 ];
};
users.users.testuser = { };
systemd.services.mysql = with pkgs; {
path = [ mysqlenv-common mysqlenv-rsync ];
};
services.mysql = {
enable = true;
package = pkgs.mariadb;
settings = {
mysqld = {
bind_address = "0.0.0.0";
};
galera = {
wsrep_on = "ON";
wsrep_debug = "OFF";
wsrep_retry_autocommit = "3";
wsrep_provider = "${pkgs.mariadb-galera_25}/lib/galera/libgalera_smm.so";
wsrep_cluster_address = "gcomm://galera_04,galera_05,galera_06";
wsrep_cluster_name = "galera-rsync";
wsrep_node_address = "192.168.2.2";
wsrep_node_name = "galera_05";
wsrep_sst_method = "rsync";
binlog_format = "ROW";
enforce_storage_engine = "InnoDB";
innodb_autoinc_lock_mode = "2";
};
};
};
};
galera_06 =
{ pkgs, ... }:
{
networking = {
interfaces.eth1 = {
ipv4.addresses = [
{ address = "192.168.2.3"; prefixLength = 24; }
];
};
extraHosts = ''
192.168.2.1 galera_04
192.168.2.2 galera_05
192.168.2.3 galera_06
'';
firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ];
firewall.allowedUDPPorts = [ 4567 ];
};
users.users.testuser = { };
systemd.services.mysql = with pkgs; {
path = [ mysqlenv-common mysqlenv-rsync ];
};
services.mysql = {
enable = true;
package = pkgs.mariadb;
settings = {
mysqld = {
bind_address = "0.0.0.0";
};
galera = {
wsrep_on = "ON";
wsrep_debug = "OFF";
wsrep_retry_autocommit = "3";
wsrep_provider = "${pkgs.mariadb-galera_25}/lib/galera/libgalera_smm.so";
wsrep_cluster_address = "gcomm://galera_04,galera_05,galera_06";
wsrep_cluster_name = "galera-rsync";
wsrep_node_address = "192.168.2.3";
wsrep_node_name = "galera_06";
wsrep_sst_method = "rsync";
binlog_format = "ROW";
enforce_storage_engine = "InnoDB";
innodb_autoinc_lock_mode = "2";
};
};
};
};
};
testScript = ''
galera_04.start()
galera_04.wait_for_unit("mysql")
galera_04.wait_for_open_port(3306)
galera_04.succeed(
"sudo -u testuser mysql -u testuser -e 'use testdb; create table db1 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'"
)
galera_04.succeed(
"sudo -u testuser mysql -u testuser -e 'use testdb; insert into db1 values (41);'"
)
galera_05.start()
galera_05.wait_for_unit("mysql")
galera_05.wait_for_open_port(3306)
galera_06.start()
galera_06.wait_for_unit("mysql")
galera_06.wait_for_open_port(3306)
galera_05.succeed(
"sudo -u testuser mysql -u root -e 'use testdb; select test_id from db1;' -N | grep 41"
)
galera_05.succeed(
"sudo -u testuser mysql -u root -e 'use testdb; create table db2 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'"
)
galera_05.succeed("systemctl stop mysql")
galera_04.succeed(
"sudo -u testuser mysql -u testuser -e 'use testdb; insert into db2 values (42);'"
)
galera_06.succeed(
"sudo -u testuser mysql -u root -e 'use testdb; create table db3 (test_id INT, PRIMARY KEY (test_id)) ENGINE = InnoDB;'"
)
galera_04.succeed(
"sudo -u testuser mysql -u testuser -e 'use testdb; insert into db3 values (43);'"
)
galera_05.succeed("systemctl start mysql")
galera_05.wait_for_open_port(3306)
galera_05.succeed(
"sudo -u testuser mysql -u root -e 'show status' -N | grep 'wsrep_cluster_size.*3'"
)
galera_06.succeed(
"sudo -u testuser mysql -u root -e 'show status' -N | grep 'wsrep_local_state_comment.*Synced'"
)
galera_04.succeed(
"sudo -u testuser mysql -u root -e 'use testdb; select test_id from db3;' -N | grep 43"
)
galera_05.succeed(
"sudo -u testuser mysql -u root -e 'use testdb; select test_id from db2;' -N | grep 42"
)
galera_06.succeed(
"sudo -u testuser mysql -u root -e 'use testdb; select test_id from db1;' -N | grep 41"
)
galera_04.succeed("sudo -u testuser mysql -u testuser -e 'use testdb; drop table db3;'")
galera_05.succeed("sudo -u testuser mysql -u root -e 'use testdb; drop table db2;'")
galera_06.succeed("sudo -u testuser mysql -u root -e 'use testdb; drop table db1;'")
'';
})

View file

@ -1,4 +1,4 @@
import ./make-test-python.nix ({ pkgs, lib, ... }:
import ./../make-test-python.nix ({ pkgs, lib, ... }:
{
name = "automysqlbackup";

View file

@ -1,5 +1,5 @@
# Test whether mysqlBackup option works
import ./make-test-python.nix ({ pkgs, ... } : {
import ./../make-test-python.nix ({ pkgs, ... } : {
name = "mysql-backup";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ rvl ];

View file

@ -1,4 +1,4 @@
import ./make-test-python.nix ({ pkgs, ...} :
import ./../make-test-python.nix ({ pkgs, ...} :
let
replicateUser = "replicate";

View file

@ -1,4 +1,4 @@
import ./make-test-python.nix ({ pkgs, ...} : {
import ./../make-test-python.nix ({ pkgs, ...} : {
name = "mysql";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ eelco shlevy ];

View file

@ -1,247 +0,0 @@
import ./make-test.nix ({ pkgs, ... }:
with pkgs.lib;
let
ksExt = pkgs.writeText "ks-ext4" ''
clearpart --all --initlabel --drives=vdb
part /boot --recommended --label=boot --fstype=ext2 --ondisk=vdb
part swap --recommended --label=swap --fstype=swap --ondisk=vdb
part /nix --size=500 --label=nix --fstype=ext3 --ondisk=vdb
part / --recommended --label=root --fstype=ext4 --ondisk=vdb
'';
ksBtrfs = pkgs.writeText "ks-btrfs" ''
clearpart --all --initlabel --drives=vdb,vdc
part swap1 --recommended --label=swap1 --fstype=swap --ondisk=vdb
part swap2 --recommended --label=swap2 --fstype=swap --ondisk=vdc
part btrfs.1 --grow --ondisk=vdb
part btrfs.2 --grow --ondisk=vdc
btrfs / --data=0 --metadata=1 --label=root btrfs.1 btrfs.2
'';
ksF2fs = pkgs.writeText "ks-f2fs" ''
clearpart --all --initlabel --drives=vdb
part swap --recommended --label=swap --fstype=swap --ondisk=vdb
part /boot --recommended --label=boot --fstype=f2fs --ondisk=vdb
part / --recommended --label=root --fstype=f2fs --ondisk=vdb
'';
ksRaid = pkgs.writeText "ks-raid" ''
clearpart --all --initlabel --drives=vdb,vdc
part raid.01 --size=200 --ondisk=vdb
part raid.02 --size=200 --ondisk=vdc
part swap1 --size=500 --label=swap1 --fstype=swap --ondisk=vdb
part swap2 --size=500 --label=swap2 --fstype=swap --ondisk=vdc
part raid.11 --grow --ondisk=vdb
part raid.12 --grow --ondisk=vdc
raid /boot --level=1 --fstype=ext3 --device=md0 raid.01 raid.02
raid / --level=1 --fstype=xfs --device=md1 raid.11 raid.12
'';
ksRaidLvmCrypt = pkgs.writeText "ks-lvm-crypt" ''
clearpart --all --initlabel --drives=vdb,vdc
part raid.1 --grow --ondisk=vdb
part raid.2 --grow --ondisk=vdc
raid pv.0 --level=1 --encrypted --passphrase=x --device=md0 raid.1 raid.2
volgroup nixos pv.0
logvol /boot --size=200 --fstype=ext3 --name=boot --vgname=nixos
logvol swap --size=500 --fstype=swap --name=swap --vgname=nixos
logvol / --size=1000 --grow --fstype=ext4 --name=root --vgname=nixos
'';
in {
name = "partitiion";
machine = { pkgs, ... }: {
environment.systemPackages = [
pkgs.pythonPackages.nixpart0
pkgs.file pkgs.btrfs-progs pkgs.xfsprogs pkgs.lvm2
];
virtualisation.emptyDiskImages = [ 4096 4096 ];
};
testScript = ''
my $diskStart;
my @mtab;
sub getMtab {
my $mounts = $machine->succeed("cat /proc/mounts");
chomp $mounts;
return map [split], split /\n/, $mounts;
}
sub parttest {
my ($desc, $code) = @_;
$machine->start;
$machine->waitForUnit("default.target");
# Gather mounts and superblock
@mtab = getMtab;
$diskStart = $machine->succeed("dd if=/dev/vda bs=512 count=1");
subtest($desc, $code);
$machine->shutdown;
}
sub ensureSanity {
# Check whether the filesystem in /dev/vda is still intact
my $newDiskStart = $machine->succeed("dd if=/dev/vda bs=512 count=1");
if ($diskStart ne $newDiskStart) {
$machine->log("Something went wrong, the partitioner wrote " .
"something into the first 512 bytes of /dev/vda!");
die;
}
# Check whether nixpart has unmounted anything
my @currentMtab = getMtab;
for my $mount (@mtab) {
my $path = $mount->[1];
unless (grep { $_->[1] eq $path } @currentMtab) {
$machine->log("The partitioner seems to have unmounted $path.");
die;
}
}
}
sub checkMount {
my $mounts = $machine->succeed("cat /proc/mounts");
}
sub kickstart {
$machine->copyFileFromHost($_[0], "/kickstart");
$machine->succeed("nixpart -v /kickstart");
ensureSanity;
}
sub ensurePartition {
my ($name, $match) = @_;
my $path = $name =~ /^\// ? $name : "/dev/disk/by-label/$name";
my $out = $machine->succeed("file -Ls $path");
my @matches = grep(/^$path: .*$match/i, $out);
if (!@matches) {
$machine->log("Partition on $path was expected to have a " .
"file system that matches $match, but instead has: $out");
die;
}
}
sub ensureNoPartition {
$machine->succeed("test ! -e /dev/$_[0]");
}
sub ensureMountPoint {
$machine->succeed("mountpoint $_[0]");
}
sub remountAndCheck {
$machine->nest("Remounting partitions:", sub {
# XXX: "findmnt -ARunl -oTARGET /mnt" seems to NOT print all mounts!
my $getmounts_cmd = "cat /proc/mounts | cut -d' ' -f2 | grep '^/mnt'";
# Insert canaries first
my $canaries = $machine->succeed($getmounts_cmd . " | while read p;" .
" do touch \"\$p/canary\";" .
" echo \"\$p/canary\"; done");
# Now unmount manually
$machine->succeed($getmounts_cmd . " | tac | xargs -r umount");
# /mnt should be empty or non-existing
my $found = $machine->succeed("find /mnt -mindepth 1");
chomp $found;
if ($found) {
$machine->log("Cruft found in /mnt:\n$found");
die;
}
# Try to remount with nixpart
$machine->succeed("nixpart -vm /kickstart");
ensureMountPoint("/mnt");
# Check if our beloved canaries are dead
chomp $canaries;
$machine->nest("Checking canaries:", sub {
for my $canary (split /\n/, $canaries) {
$machine->succeed("test -e '$canary'");
}
});
});
}
parttest "ext2, ext3 and ext4 filesystems", sub {
kickstart("${ksExt}");
ensurePartition("boot", "ext2");
ensurePartition("swap", "swap");
ensurePartition("nix", "ext3");
ensurePartition("root", "ext4");
ensurePartition("/dev/vdb4", "boot sector");
ensureNoPartition("vdb6");
ensureNoPartition("vdc1");
remountAndCheck;
ensureMountPoint("/mnt/boot");
ensureMountPoint("/mnt/nix");
};
parttest "btrfs filesystem", sub {
$machine->succeed("modprobe btrfs");
kickstart("${ksBtrfs}");
ensurePartition("swap1", "swap");
ensurePartition("swap2", "swap");
ensurePartition("/dev/vdb2", "btrfs");
ensurePartition("/dev/vdc2", "btrfs");
ensureNoPartition("vdb3");
ensureNoPartition("vdc3");
remountAndCheck;
};
parttest "f2fs filesystem", sub {
$machine->succeed("modprobe f2fs");
kickstart("${ksF2fs}");
ensurePartition("swap", "swap");
ensurePartition("boot", "f2fs");
ensurePartition("root", "f2fs");
remountAndCheck;
ensureMountPoint("/mnt/boot", "f2fs");
};
parttest "RAID1 with XFS", sub {
kickstart("${ksRaid}");
ensurePartition("swap1", "swap");
ensurePartition("swap2", "swap");
ensurePartition("/dev/md0", "ext3");
ensurePartition("/dev/md1", "xfs");
ensureNoPartition("vdb4");
ensureNoPartition("vdc4");
ensureNoPartition("md2");
remountAndCheck;
ensureMountPoint("/mnt/boot");
};
parttest "RAID1 with LUKS and LVM", sub {
kickstart("${ksRaidLvmCrypt}");
ensurePartition("/dev/vdb1", "data");
ensureNoPartition("vdb2");
ensurePartition("/dev/vdc1", "data");
ensureNoPartition("vdc2");
ensurePartition("/dev/md0", "luks");
ensureNoPartition("md1");
ensurePartition("/dev/nixos/boot", "ext3");
ensurePartition("/dev/nixos/swap", "swap");
ensurePartition("/dev/nixos/root", "ext4");
remountAndCheck;
ensureMountPoint("/mnt/boot");
};
'';
})

View file

@ -0,0 +1,31 @@
{ system ? builtins.currentSystem,
config ? {},
pkgs ? import ../.. { inherit system config; }
}:
with import ../lib/testing-python.nix { inherit system pkgs; };
with pkgs.lib;
makeTest {
name = "systemd-boot";
meta.maintainers = with pkgs.stdenv.lib.maintainers; [ danielfullmer ];
machine = { pkgs, lib, ... }: {
virtualisation.useBootLoader = true;
virtualisation.useEFIBoot = true;
boot.loader.systemd-boot.enable = true;
};
testScript = ''
machine.start()
machine.wait_for_unit("multi-user.target")
machine.succeed("test -e /boot/loader/entries/nixos-generation-1.conf")
# Ensure we actually booted using systemd-boot.
# Magic number is the vendor UUID used by systemd-boot.
machine.succeed(
"test -e /sys/firmware/efi/efivars/LoaderEntrySelected-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f"
)
'';
}

View file

@ -0,0 +1,47 @@
import ../make-test-python.nix ({pkgs, ...}:
let
testdir = pkgs.writeTextDir "www/info.php" "<?php phpinfo();";
in {
name = "unit-php-test";
meta.maintainers = with pkgs.stdenv.lib.maintainers; [ izorkin ];
machine = { config, lib, pkgs, ... }: {
services.unit = {
enable = true;
config = ''
{
"listeners": {
"*:9074": {
"application": "php_74"
}
},
"applications": {
"php_74": {
"type": "php 7.4",
"processes": 1,
"user": "testuser",
"group": "testgroup",
"root": "${testdir}/www",
"index": "info.php"
}
}
}
'';
};
users = {
users.testuser = {
isNormalUser = false;
uid = 1074;
group = "testgroup";
};
groups.testgroup = {
gid= 1074;
};
};
};
testScript = ''
machine.wait_for_unit("unit.service")
assert "PHP Version ${pkgs.php74.version}" in machine.succeed("curl -vvv -s http://127.0.0.1:9074/")
'';
})

View file

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "BSEQuencer";
version = "1.2.0";
version = "1.4.0";
src = fetchFromGitHub {
owner = "sjaehn";
repo = pname;
rev = "${version}";
sha256 = "08xwz5v8wrar0rx7qdr9pkpjz2k9sw6bn5glhpn6sp6453fabf8q";
sha256 = "1zz1cirmx4wm4im4gjdp691f2042c8d1i8np1ns71f6kqdj9ps3k";
};
nativeBuildInputs = [ pkgconfig ];

View file

@ -2,11 +2,11 @@
mkDerivation rec {
pname = "drumkv1";
version = "0.9.13";
version = "0.9.14";
src = fetchurl {
url = "mirror://sourceforge/drumkv1/${pname}-${version}.tar.gz";
sha256 = "1h88sakxs0b20k8v2sh14y05fin1zqmhnid6h9mk9c37ixxg58ia";
sha256 = "0fr7pkp55zvjxf7p22drs93fsjgvqhbd55vxi0srhp2s2wzz5qak";
};
buildInputs = [ libjack2 alsaLib libsndfile liblo lv2 qt5.qtbase qt5.qttools ];

View file

@ -2,7 +2,7 @@
, gtk2
, jack2Full
, alsaLib
, opencv
, opencv2
, libsndfile
}:
@ -20,7 +20,7 @@ faust.wrapWithBuildEnv {
gtk2
jack2Full
alsaLib
opencv
opencv2
libsndfile
];

View file

@ -1,6 +1,6 @@
{ faust
, jack2Full
, opencv
, opencv2
, qt4
, libsndfile
, which
@ -17,7 +17,7 @@ faust.wrapWithBuildEnv {
propagatedBuildInputs = [
jack2Full
opencv
opencv2
qt4
libsndfile
which

View file

@ -2,11 +2,11 @@
python3Packages.buildPythonApplication rec {
pname = "Mopidy-Iris";
version = "3.46.0";
version = "3.47.0";
src = python3Packages.fetchPypi {
inherit pname version;
sha256 = "0c7b6zbcj4bq5qsxvhjwqclrl1k2hs3wb50pfjbw7gs7m3gm2b7d";
sha256 = "1lvq5qsnn2djwkgbadzr7rr6ik2xh8yyj0p3y3hck9pl96ms7lfv";
};
propagatedBuildInputs = [

View file

@ -10,13 +10,13 @@ assert pcreSupport -> pcre != null;
stdenv.mkDerivation rec {
pname = "ncmpc";
version = "0.37";
version = "0.38";
src = fetchFromGitHub {
owner = "MusicPlayerDaemon";
repo = "ncmpc";
rev = "v${version}";
sha256 = "1b0vd0h49kjg4nxjfjrcg8gzplz93ryr6xyfha2pvhlrzdd2d1lj";
sha256 = "1kidpd1xrfax3v31q93r9g9b7jd841476q47wgd94h1a86b70gs9";
};
buildInputs = [ glib ncurses mpd_clientlib boost ]

View file

@ -0,0 +1,39 @@
{ stdenv, fetchFromGitHub, libjack2, libGL, pkgconfig, xorg, mesa, libsndfile, libsamplerate }:
stdenv.mkDerivation rec {
pname = "ninjas2";
version = "0.2.0";
src = fetchFromGitHub {
owner = "clearly-broken-software";
repo = pname;
rev = "v${version}";
sha256 = "1kwp6pmnfar2ip9693gprfbcfscklgri1k1ycimxzlqr61nkd2k9";
fetchSubmodules = true;
};
patchPhase = ''
patchShebangs dpf/utils/generate-ttl.sh
'';
nativeBuildInputs = [ pkgconfig ];
buildInputs = [
libjack2 xorg.libX11 libGL mesa libsndfile libsamplerate
];
installPhase = ''
install -dD bin/ninjas2.lv2 $out/lib/lv2/ninjas2.lv2
install -D bin/ninjas2-vst.so $out/lib/vst/ninjas2-vst.so
install -D bin/ninjas2 $out/bin/ninjas2
'';
makeFlags = [ "PREFIX=$(out)" ];
meta = with stdenv.lib; {
homepage = "https://github.com/clearly-broken-software/ninjas2";
description = "sample slicer plugin for LV2, VST, and jack standalone";
license = with licenses; [ gpl3 ];
maintainers = [ maintainers.magnetophon ];
platforms = platforms.linux;
};
}

View file

@ -17,11 +17,11 @@ with stdenv.lib;
stdenv.mkDerivation rec {
pname = "particl-core";
version = "0.17.1.2";
version = "0.19.1.1";
src = fetchurl {
url = "https://github.com/particl/particl-core/archive/v${version}.tar.gz";
sha256 = "16hcyxwp6yrypwvxz6i2987z3jmpk47xcgnsgh9klih8baqg64p5";
sha256 = "11y5q2srkh6r2samppjb5mg6hl79y16j2lj1r23p0968vb9c45kl";
};
nativeBuildInputs = [ pkgconfig autoreconfHook ];

View file

@ -18,9 +18,9 @@ let
sha256Hash = "11fmpf58z44i78ldkapzivz6md65744vqczzbwv8mkjkv9nz95rs";
};
latestVersion = { # canary & dev
version = "4.1.0.7"; # "Android Studio 4.1 Canary 7"
build = "193.6401718";
sha256Hash = "1xa61rhi7dgxm0y6yl5dxd09x530mzyxvx9bp1jprzfwvc7s0byh";
version = "4.1.0.8"; # "Android Studio 4.1 Canary 8"
build = "193.6423924";
sha256Hash = "0ksgmhz9vhkw2mxzjapli0w6203ssd8ddgb0dq06rck8v7ysy8bp";
};
in {
# Attributes are named by their corresponding release channels

View file

@ -4,8 +4,8 @@ let
src = pkgs.fetchgit {
url = "https://github.com/ttuegel/emacs2nix.git";
fetchSubmodules = true;
rev = "752fe1bd891425cb7a4a53cd7b98c194c1fe4518";
sha256 = "0asfdswh8sbnapbqhbz539zzxmv72f1iviha95iys34sgnd5k1nk";
rev = "d4c52a7b22b0622aecf0b0d59941a4a2b250617c";
sha256 = "133m0bmm8ahy0jbappgcdjqppkpxf5s9wg4gg254afx3f7yfqzbh";
};
in pkgs.mkShell {

View file

@ -4,10 +4,10 @@
elpaBuild {
pname = "org";
ename = "org";
version = "20191203";
version = "20200504";
src = fetchurl {
url = "https://orgmode.org/elpa/org-20191203.tar";
sha256 = "1fcgiswjnqmfzx3xkmlqyyhc4a8ms07vdsv7nkizgxqdh9hwfm2q";
url = "https://orgmode.org/elpa/org-20200504.tar";
sha256 = "1nalr2jafhzfkaf4bn8kscxd7nm1wz7dbw2629j2msxknw76dwk1";
};
packageRequires = [];
meta = {
@ -19,10 +19,10 @@
elpaBuild {
pname = "org-plus-contrib";
ename = "org-plus-contrib";
version = "20191203";
version = "20200504";
src = fetchurl {
url = "https://orgmode.org/elpa/org-plus-contrib-20191203.tar";
sha256 = "1kvw95492acb7gqn8gxbp1vg4fyw80w43yvflxnfxdf6jnnw2wah";
url = "https://orgmode.org/elpa/org-plus-contrib-20200504.tar";
sha256 = "1ykw3qspz18jgf3ngsvk2ys282489fcjrbk7pbv3ppxzjha4rmhb";
};
packageRequires = [];
meta = {
@ -30,4 +30,4 @@
license = lib.licenses.free;
};
}) {};
}
}

View file

@ -2,11 +2,11 @@
stdenv.mkDerivation rec {
pname = "kdev-php";
version = "5.5.0";
version = "5.5.1";
src = fetchurl {
url = "https://github.com/KDE/${pname}/archive/v${version}.tar.gz";
sha256 = "1hd3ckayrwszda517zfvhihrfmzq4m3kcsrz4sqkbvib0giwsfkp";
sha256 = "1z3mmlg5srzff0y1pjd4wfdf9k4rzk7gfdvbvzizkiy395qw1phv";
};
nativeBuildInputs = [ cmake extra-cmake-modules ];

View file

@ -2,11 +2,11 @@
stdenv.mkDerivation rec {
pname = "kdev-python";
version = "5.5.0";
version = "5.5.1";
src = fetchurl {
url = "https://github.com/KDE/${pname}/archive/v${version}.tar.gz";
sha256 = "0kna6vkxc6lrfzb3gzn11qvw8jpa86gi1k996hdk83gn0lhmkvx5";
sha256 = "0k4j2kp77sz2p8s77wmcawia81bx7vfb2nnh9lqxzdk2mmlg387c";
};
cmakeFlags = [

View file

@ -10,11 +10,11 @@
mkDerivation rec {
pname = "kdevelop";
version = "5.5.0";
version = "5.5.1";
src = fetchurl {
url = "mirror://kde/stable/${pname}/${version}/src/${pname}-${version}.tar.xz";
sha256 = "0438721v24pim5q0q54ivsws9a679fm7ymrm1nn9g1fv06qsm4d8";
sha256 = "18hxwkdbfw0qs3p19jv6d8wwwdzb9m087891i8w2bzkn21fd5pmy";
};
nativeBuildInputs = [

View file

@ -2,13 +2,13 @@
mkDerivation rec {
pname = "leo-editor";
version = "6.2";
version = "6.2.1";
src = fetchFromGitHub {
owner = "leo-editor";
repo = "leo-editor";
rev = version;
sha256 = "07f10qwvi3p7bskzxnx5rlhlfrh7rx8v0xdlc4vs2271438j1j2z";
sha256 = "1s9jvxwzsl32clp78g92nq9p2byf08libr5widl1jnkv1cpkbvh9";
};
dontBuild = true;

View file

@ -3,13 +3,13 @@
mkDerivation rec {
pname = "tiled";
version = "1.3.3";
version = "1.3.4";
src = fetchFromGitHub {
owner = "bjorn";
repo = pname;
rev = "v${version}";
sha256 = "0v8imw6zdygs9ymsgk41jclsfr1jwbracjc5balydh15r57rvwjd";
sha256 = "0q3x1v88szxm8177qcnynfiyc7w8sn07ig6c7fjd164q7w30y24m";
};
nativeBuildInputs = [ pkgconfig qmake ];

View file

@ -1,5 +1,5 @@
{ stdenv, fetchurl, gdal, wxGTK30, proj, libiodbc, lzma,
libharu, opencv, vigra, postgresql, Cocoa,
libharu, opencv2, vigra, postgresql, Cocoa,
unixODBC , poppler, hdf4, hdf5, netcdf, sqlite, qhull, giflib }:
stdenv.mkDerivation {
@ -8,7 +8,7 @@ stdenv.mkDerivation {
# See https://groups.google.com/forum/#!topic/nix-devel/h_vSzEJAPXs
# for why the have additional buildInputs on darwin
buildInputs = [ gdal wxGTK30 proj libharu opencv vigra postgresql libiodbc lzma
buildInputs = [ gdal wxGTK30 proj libharu opencv2 vigra postgresql libiodbc lzma
qhull giflib ]
++ stdenv.lib.optionals stdenv.isDarwin
[ Cocoa unixODBC poppler hdf4.out hdf5 netcdf sqlite ];

View file

@ -33,11 +33,11 @@
stdenv.mkDerivation rec {
pname = "gthumb";
version = "3.8.3";
version = "3.10.0";
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "1a0gss9cjcwayrcpkam5kc1giwbfy38jgqxvh33in9gfq9dgrygg";
sha256 = "0j7cxp4hhkvkckyvll6pmqkv5rwrknlzq9j1my0grb01b8wzhw9y";
};
nativeBuildInputs = [

View file

@ -103,7 +103,7 @@ rustPlatform.buildRustPackage rec {
cp -r $releaseDir/osx/Alacritty.app $out/Applications/Alacritty.app
'' else ''
install -D extra/linux/Alacritty.desktop -t $out/share/applications/
install -D extra/logo/alacritty-term.svg $out/share/icons/hicolor/scalable/apps/Alacritty.svg
install -D extra/logo/compat/alacritty-term.svg $out/share/icons/hicolor/scalable/apps/Alacritty.svg
# patchelf generates an ELF that binutils' "strip" doesn't like:
# strip: not enough room for program headers, try linking with -N

View file

@ -30,11 +30,11 @@ let
in
mkDerivation rec {
pname = "calibre";
version = "4.12.0";
version = "4.15.0";
src = fetchurl {
url = "https://download.calibre-ebook.com/${version}/${pname}-${version}.tar.xz";
sha256 = "144vl5p0adcywcqaarrriq5zd8q5i934yfjg9himiq1vdp9vy4fi";
sha256 = "0m8mvyw5c1khd54jx896w6nfwaydmpi3cb6wi5p2a0hxdksqgrkm";
};
patches = [

View file

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "curaengine";
version = "4.5.0";
version = "4.6.1";
src = fetchFromGitHub {
owner = "Ultimaker";
repo = "CuraEngine";
rev = version;
sha256 = "1gml8f6yqmghgncl1zggs7h2hdh05wf68jw9npg0gh7n9l7yzkk4";
sha256 = "1fr151hmdg2lhk9pbpan1hb1pafj784nijr4pz646ljmjh12vfk2";
};
nativeBuildInputs = [ cmake ];

View file

@ -7,7 +7,7 @@
stdenv.mkDerivation rec {
pname = "dbeaver-ce";
version = "7.0.3";
version = "7.0.4";
desktopItem = makeDesktopItem {
name = "dbeaver";
@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "https://dbeaver.io/files/${version}/dbeaver-ce-${version}-linux.gtk.x86_64.tar.gz";
sha256 = "189rsavmaa7480r61qhpzagia3c8jr3dfcl01ks3nfyq53j08hml";
sha256 = "1d36d2rzsr8c048w0jyacvmgh46jamr9nzs22rmpm7xbzlnvdg4k";
};
installPhase = ''

View file

@ -5,13 +5,13 @@ with python3.pkgs;
buildPythonApplication rec {
pname = "gcalcli";
version = "4.2.0";
version = "4.2.1";
src = fetchFromGitHub {
owner = "insanum";
repo = pname;
rev = "v${version}";
sha256 = "0746vmhfclkpkqnyaidxid2z20mlv86hv0pjxy1qglrja91vkd72";
sha256 = "1xwrgmy2azvr99b7df92m2imj0wy4fh53bn7lvcrnghjbnh7n0l0";
};
postPatch = lib.optionalString stdenv.isLinux ''

View file

@ -1,12 +1,12 @@
{ stdenv, fetchurl, dee, gtk2, intltool, libdbusmenu-gtk2, libunity, pkg-config, rsync }:
stdenv.mkDerivation rec {
version = "1.2.6";
version = "1.2.8";
pname = "grsync";
src = fetchurl {
url = "mirror://sourceforge/grsync/grsync-${version}.tar.gz";
sha256 = "06ani65d58p8r3jvxjwpwyqrr07ya3icdqc243nxcrv7bvmarmb6";
sha256 = "1c86jch73cy7ig9k4shvcd3jnaxk7jppfcr8nmkz8gbylsn5zsll";
};
nativeBuildInputs = [

View file

@ -2,7 +2,7 @@
buildGoModule rec {
pname = "hugo";
version = "0.69.2";
version = "0.70.0";
goPackagePath = "github.com/gohugoio/hugo";
@ -10,10 +10,10 @@ buildGoModule rec {
owner = "gohugoio";
repo = pname;
rev = "v${version}";
sha256 = "0bw31264q8w2r3fm3g2qjh9531nmbn942vl5rjf2cjff25c0d4ji";
sha256 = "14g1x95jh91z9xm3xkv2psw2jn7z6bv2009miyv727df4d58nh6m";
};
modSha256 = "1i1mw8jcklmnsqawc1jkgw4h1dxjxb9zaf2p8pgfzxzpy5cp6qkl";
modSha256 = "015ha8pjz1fv8qg558xa6hl52fp2qd486ir9m01dvxw63xqx76ss";
buildFlags = [ "-tags" "extended" ];

View file

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "jgmenu";
version = "4.1.0";
version = "4.2.0";
src = fetchFromGitHub {
owner = "johanmalm";
repo = pname;
rev = "v${version}";
sha256 = "1wsh37rapb1bszlq36hvwxqvfds39hbvbl152m8as4zlh93wfvvk";
sha256 = "1wcmx2yhm6n54w6nymgb8pgfjv411i3zj1vk79q9vr052y1622z0";
};
nativeBuildInputs = [

View file

@ -5,13 +5,13 @@
mkDerivation rec {
pname = "klayout";
version = "0.26.2";
version = "0.26.4";
src = fetchFromGitHub {
owner = "KLayout";
repo = "klayout";
rev = "v${version}";
sha256 = "0svyqayvr45snqw0dhx6jpnjhg4qb097pz28s8k1crx5i31nnd94";
sha256 = "0hqc11vz24b6nfpfzsjwwmaq0sznwwqpzmd48q5wpdl0kz1309gj";
};
postPatch = ''

View file

@ -1,43 +0,0 @@
From 81cf57e4653360af7f1718391e424fa05d8ea000 Mon Sep 17 00:00:00 2001
From: Keshav Kini <keshav.kini@gmail.com>
Date: Thu, 9 Aug 2018 18:36:15 -0700
Subject: [PATCH] Use `rm` from PATH
On NixOS (a Linux distribution), there is no `/bin/rm`, but an `rm`
command will generally be available in one's path when running shell
scripts. Here, I change a couple of invocations of `/bin/rm` into
invocations of `rm` to deal with this issue.
Since `rm` is already called elsewhere in the script without an
absolute path, I assume this change will not cause any
regressions. Still, I've tested this on a CentOS machine and a NixOS
machine, though not other platforms.
---
makeself-header.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/makeself-header.sh b/makeself-header.sh
index 4d2c005..2babf34 100755
--- a/makeself-header.sh
+++ b/makeself-header.sh
@@ -515,7 +515,7 @@ if test x"\$quiet" = xn; then
fi
res=3
if test x"\$keep" = xn; then
- trap 'echo Signal caught, cleaning up >&2; cd \$TMPROOT; /bin/rm -rf "\$tmpdir"; eval \$finish; exit 15' 1 2 3 15
+ trap 'echo Signal caught, cleaning up >&2; cd \$TMPROOT; rm -rf "\$tmpdir"; eval \$finish; exit 15' 1 2 3 15
fi
if test x"\$nodiskspace" = xn; then
@@ -581,7 +581,7 @@ if test x"\$script" != x; then
fi
if test x"\$keep" = xn; then
cd "\$TMPROOT"
- /bin/rm -rf "\$tmpdir"
+ rm -rf "\$tmpdir"
fi
eval \$finish; exit \$res
EOF
--
2.14.1

View file

@ -1,22 +1,21 @@
{ stdenv, fetchFromGitHub }:
stdenv.mkDerivation rec {
version = "2.4.0";
version = "2.4.2";
pname = "makeself";
src = fetchFromGitHub {
owner = "megastep";
repo = "makeself";
rev = "release-${version}";
sha256 = "1lw3gx1zpzp2wmzrw5v7k31vfsrdzadqha9ni309fp07g8inrr9n";
fetchSubmodules = true;
sha256 = "07cq7q71bv3fwddkp2863ylry2ivds00f8sjy8npjpdbkailxm21";
};
# backported from https://github.com/megastep/makeself/commit/77156e28ff21231c400423facc7049d9c60fd1bd
patches = [ ./Use-rm-from-PATH.patch ];
patchPhase = "patchShebangs test";
postPatch = ''
sed -e "s|^HEADER=.*|HEADER=$out/share/${pname}-${version}/makeself-header.sh|" -i makeself.sh
'';
doCheck = true;
checkTarget = "test";
installPhase = ''
mkdir -p $out/{bin,share/{${pname}-${version},man/man1}}
@ -26,6 +25,10 @@ stdenv.mkDerivation rec {
cp makeself-header.sh $out/share/${pname}-${version}
'';
fixupPhase = ''
sed -e "s|^HEADER=.*|HEADER=$out/share/${pname}-${version}/makeself-header.sh|" -i $out/bin/makeself
'';
meta = with stdenv.lib; {
homepage = "http://megastep.org/makeself";
description = "Utility to create self-extracting packages";

View file

@ -2,11 +2,11 @@
, desktop-file-utils, libSM, imagemagick }:
stdenv.mkDerivation rec {
version = "19.09";
version = "20.03";
pname = "mediainfo-gui";
src = fetchurl {
url = "https://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.xz";
sha256 = "1a2ssklg12sjsw09y8my9kf35mizi3zj7w002nspcmw28apb1x82";
sha256 = "1f1shnycf0f1fwka9k9s250l228xjkg0k4k73h8bpld8msighgnw";
};
nativeBuildInputs = [ autoreconfHook pkgconfig ];

View file

@ -8,13 +8,13 @@
stdenv.mkDerivation rec {
pname = "minder";
version = "1.7.2";
version = "1.7.3";
src = fetchFromGitHub {
owner = "phase1geo";
repo = pname;
rev = version;
sha256 = "0pfp0dglj2ig2p1h000137dxw777mjvzzqj3gcnbxjxqz3m6fzc0";
sha256 = "00lkb1w536jyhka2znxmgbyss13j4h75yvl42z4hlgz31wljcin4";
};
nativeBuildInputs = [ pkgconfig meson ninja python3 wrapGAppsHook vala shared-mime-info ];

View file

@ -7,11 +7,11 @@
stdenv.mkDerivation rec {
pname = "mlterm";
version = "3.8.9";
version = "3.9.0";
src = fetchurl {
url = "mirror://sourceforge/project/mlterm/01release/${pname}-${version}/${pname}-${version}.tar.gz";
sha256 = "1iy7wq953gcnygr1d04h5ddvhpmy8l575n5is2w0rj3ck31ihpqd";
sha256 = "17h6j4nmbyvsx2shm8mqm7smzq9i7mbqxjw19c2m0rhf5yzqhr3k";
};
nativeBuildInputs = [ pkgconfig autoconf ];

View file

@ -9,13 +9,13 @@
mkDerivation rec {
pname = "moolticute";
version = "0.43.3";
version = "0.43.16";
src = fetchFromGitHub {
owner = "mooltipass";
repo = pname;
rev = "v${version}";
sha256 = "0kl7wksiqmy0hqbg6xwmzqfn3l17if2hiw7xc9x067x9rviyxrl3";
sha256 = "1gx1hbxiilggwfw0jspyk2cw92r6qs9a8yqa8x1d2ndf493mjx9y";
};
outputs = [ "out" "udev" ];

View file

@ -35,13 +35,13 @@
buildPythonApplication rec {
pname = "orca";
version = "3.36.1";
version = "3.36.2";
format = "other";
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "07w3k0f791zd1pj9j6d27k7gk7c6hx112ngrdz18h573df5n9b61";
sha256 = "0hxz8wlyjn6w3zqg1p56pwdj0p23d6vynzczklyc6n91dyvma06g";
};
patches = [

View file

@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
comment = "Query GUI for mongodb";
desktopName = "Robo3T";
genericName = "MongoDB management tool";
categories = "Development;IDE;mongodb;";
categories = "Development;IDE;";
};
nativeBuildInputs = [makeWrapper];

View file

@ -16,10 +16,10 @@ let
pname = "simplenote";
version = "1.15.1";
version = "1.16.0";
sha256 = {
x86_64-linux = "1q1y5favj2ny0l2iq53vq39ns68zfr2z1plskxdg2d93jarvcr8x";
x86_64-linux = "01nk3dbyhs0p7f6b4bkrng95i29g0x7vxj0rx1qb7sm3n11yi091";
}.${system} or throwSystem;
meta = with stdenv.lib; {

View file

@ -20,14 +20,14 @@
}:
mkDerivation rec {
version = "0.10.8";
version = "0.10.9";
pname = "syncthingtray";
src = fetchFromGitHub {
owner = "Martchus";
repo = "syncthingtray";
rev = "v${version}";
sha256 = "1g27v109m0ar090b340x6lsrzfp85hskcr3kapc2rgdhaa0mygpd";
sha256 = "19kni5v9g0p4751bw2xb8dawg5yjkyk39vdy0m93448lsl8cqq04";
};
buildInputs = [ qtbase cpp-utilities qtutilities ]

View file

@ -14,13 +14,13 @@
stdenv.mkDerivation rec {
pname = "xiphos";
version = "4.0.7";
version = "4.1.0";
src = fetchFromGitHub {
owner = "crosswire";
repo = "xiphos";
rev = version;
sha256 = "1vwf1ps6nrajxl1qbs6v1cgykmq5wn4j09j10gbcd3b2nvrprf3g";
sha256 = "14il9k4i58qbc78hcadw3gqy21sb9q661d75vlj6fwpczbzj7x1a";
};
nativeBuildInputs = [ pkgconfig wrapGAppsHook wafHook ];

View file

@ -1,18 +1,18 @@
# This file is autogenerated from update.sh in the same directory.
{
beta = {
sha256 = "1s3flhzp69g62285r9nwc5m9fa65ldx19inwdm4nq1m5bn63v6lj";
sha256bin64 = "0xbbj89xx98vvw1a4l4wj7hhwjasdmkxbbkgaad2cj4zqmbb8h52";
version = "83.0.4103.23";
sha256 = "0z9p4v5mkinf7hbdagh4bz6ymqjxg3df3wjpvm201ilzzngmjqz1";
sha256bin64 = "1srvlirhnynh0q2a17p8z13p7r54z0cchh1d1h07hqljnwmsf8qj";
version = "83.0.4103.34";
};
dev = {
sha256 = "1jgx55sb3azwb2rni89yxlz94j264iilwh0br29sngcailxamrbd";
sha256bin64 = "107yndkcdb78zxpswn9aja63n0q4q5q49183058z5jm4zlplkgad";
version = "84.0.4122.7";
sha256 = "178fc112bsbrgj2hss78y8rhnz8hl85fr33gawk9fz88zk5qz7xd";
sha256bin64 = "06qra245l2bbgxc3k04aabkgq1qnzybnrjhrjb25vriv31ji36b1";
version = "84.0.4128.3";
};
stable = {
sha256 = "1ls663s1f74p912x42qp3zcvm17kmjiv1ij6yy1c14gdhcpmjx7z";
sha256bin64 = "0nzds27x1j3298cq5xkgikjdddymbw88gcpnlm03492b6090257y";
version = "81.0.4044.129";
sha256 = "19kpzmqmld0m0nflx13w9flxfal19msnxhzl3lip1jqih65z4y7l";
sha256bin64 = "0sl4wv7npc3rhi7jgn679hi7j5ykzwpx5dahy78h87yfg4fx84wx";
version = "81.0.4044.138";
};
}

View file

@ -0,0 +1,23 @@
diff -ur firefox-65.0-orig/docshell/base/nsAboutRedirector.cpp firefox-65.0/docshell/base/nsAboutRedirector.cpp
--- firefox-76.0.orig/docshell/base/nsAboutRedirector.cpp 2020-05-03 19:01:29.926544735 +0200
+++ firefox-76.0/docshell/base/nsAboutRedirector.cpp 2020-05-03 19:12:00.845035570 +0200
@@ -62,8 +62,6 @@
{"about", "chrome://global/content/aboutAbout.html", 0},
{"addons", "chrome://mozapps/content/extensions/extensions.xhtml",
nsIAboutModule::ALLOW_SCRIPT},
- {"buildconfig", "chrome://global/content/buildconfig.html",
- nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT},
{"checkerboard", "chrome://global/content/aboutCheckerboard.html",
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
nsIAboutModule::ALLOW_SCRIPT},
diff -ur firefox-65.0-orig/toolkit/content/jar.mn firefox-65.0/toolkit/content/jar.mn
--- firefox-65.0-orig/toolkit/content/jar.mn 2019-01-23 00:48:35.033372506 +0100
+++ firefox-65.0/toolkit/content/jar.mn 2019-01-23 00:50:45.126565924 +0100
@@ -36,7 +36,6 @@
content/global/plugins.css
content/global/browser-child.js
content/global/browser-content.js
-* content/global/buildconfig.html
content/global/buildconfig.css
content/global/contentAreaUtils.js
content/global/datepicker.xhtml

View file

@ -7,14 +7,14 @@ in
rec {
firefox = common rec {
pname = "firefox";
ffversion = "75.0";
ffversion = "76.0";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${ffversion}/source/firefox-${ffversion}.source.tar.xz";
sha512 = "0m3ibm6dy9cpvsxkzkzwj7na5rm5qz7sm3bpx604ibay9pccvgv59jxapisvmswzmlz2nv02l6p2gxlz3b0lbcg7rd5zasia92y7j99";
sha512 = "3dq9h84w1qqidabbrl34jgyjr8bbmbf5wddjazpr7znfm49fn2xyg8fmm5lx9dakghk3wp8yhfi36gmk08fzlrm47v6h17dm9hkh0hz";
};
patches = [
./no-buildconfig-ffx65.patch
./no-buildconfig-ffx76.patch
];
meta = {
@ -35,10 +35,10 @@ rec {
firefox-esr-68 = common rec {
pname = "firefox-esr";
ffversion = "68.7.0esr";
ffversion = "68.8.0esr";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${ffversion}/source/firefox-${ffversion}.source.tar.xz";
sha512 = "29qbcc78hz1rsnz735a5miwfj0c3r1c5qm2043vyd9qz879vsh4ab82k7wncm3xa04kqdff26zh1rpbbjmdr7gwn4q8nmjzzs7wzpd3";
sha512 = "2rl5irkamxi8caa8krj0wng93lb82kk9mf09mgci87mj9hy6fxzcrlmiiffp14s03rv0raagrn4w54pbx1336mylq6saxmfhpf676hk";
};
patches = [

View file

@ -2,13 +2,14 @@
## various stuff that can be plugged in
, flashplayer, hal-flash
, ffmpeg, xorg, libpulseaudio, libcanberra-gtk2, libglvnd
, ffmpeg_4, xorg, libpulseaudio, libcanberra-gtk2, libglvnd
, gnome3/*.gnome-shell*/
, browserpass, chrome-gnome-shell, uget-integrator, plasma-browser-integration, bukubrow
, tridactyl-native
, fx_cast_bridge
, udev
, kerberos
, libva
}:
## configurability of the wrapper itself
@ -64,8 +65,8 @@ let
++ lib.optional (cfg.enableFXCastBridge or false) fx_cast_bridge
++ extraNativeMessagingHosts
);
libs = lib.optional stdenv.isLinux udev
++ lib.optional ffmpegSupport ffmpeg
libs = lib.optionals stdenv.isLinux [ udev libva ]
++ lib.optional ffmpegSupport ffmpeg_4
++ lib.optional gssSupport kerberos
++ lib.optional gdkWayland libglvnd
++ lib.optionals (cfg.enableQuakeLive or false)

View file

@ -5,6 +5,7 @@
, libuuid
, gstreamer, gst-plugins-base, libxml2
, glib, gtk3, pango, gdk-pixbuf, cairo, atk, at-spi2-atk, at-spi2-core, gnome2
, libdrm, mesa
, nss, nspr
, patchelf, makeWrapper
, isSnapshot ? false
@ -37,6 +38,7 @@ in stdenv.mkDerivation rec {
atk at-spi2-atk at-spi2-core alsaLib dbus cups gtk3 gdk-pixbuf libexif ffmpeg systemd
freetype fontconfig libXrender libuuid expat glib nss nspr
gstreamer libxml2 gst-plugins-base pango cairo gnome2.GConf
libdrm mesa
] ++ stdenv.lib.optional proprietaryCodecs vivaldi-ffmpeg-codecs;
libPath = stdenv.lib.makeLibraryPath buildInputs

View file

@ -52,12 +52,12 @@ in rec {
mkKops = generic;
kops_1_15 = mkKops {
version = "1.15.2";
sha256 = "1sjfd7pfi81ccq1dkgkh9xx6y94bqzlp727pvyf7l01x3d14z2b3";
version = "1.15.3";
sha256 = "0pzgrsl61nw8pm3s032lj020fw13x3fpzlj7lknsnd581f0gg4df";
};
kops_1_16 = mkKops {
version = "1.16.1";
sha256 = "04ji1703z6b3rd4wmccah68api0jj2bndzkgdzqi855gccqbmi5g";
version = "1.16.2";
sha256 = "1vhkjhx1n3f6ggw5cy1avs3sbqb2da6khck9zqd4s7almjbpc2h2";
};
}

View file

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "kubeval";
version = "0.14.0";
version = "0.15.0";
src = fetchFromGitHub {
owner = "instrumenta";
repo = "kubeval";
rev = "${version}";
sha256 = "0kpwk7bv36m3i8vavm1pqc8l611c6l9qbagcc64v6r85qig4w5xv";
sha256 = "05li0qv4q7fy2lr50r6c1r8dhx00jb1g01qmgc72a9zqp378yiq0";
};
modSha256 = "0y9x44y3bchi8xg0a6jmp2rmi8dybkl6qlywb6nj1viab1s8dd4y";
@ -17,7 +17,7 @@ buildGoModule rec {
description = "Validate your Kubernetes configuration files";
homepage = "https://github.com/instrumenta/kubeval";
license = licenses.asl20;
maintainers = with maintainers; [ nicknovitski ];
maintainers = with maintainers; [ johanot nicknovitski ];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,29 @@
{ stdenv, lib, fetchurl, autoPatchelfHook, dpkg, awscli }:
stdenv.mkDerivation rec {
pname = "ssm-session-manager-plugin";
version = "1.1.61.0";
src = fetchurl {
url =
"https://s3.amazonaws.com/session-manager-downloads/plugin/${version}/ubuntu_64bit/session-manager-plugin.deb";
sha256 = "0z59irrpwhjjhn379454xyraqs590hij2n6n6k25w5hh8ak7imfl";
};
nativeBuildInputs = [ autoPatchelfHook dpkg ];
buildInputs = [ awscli ];
unpackPhase = "dpkg-deb -x $src .";
installPhase =
"install -m755 -D usr/local/sessionmanagerplugin/bin/session-manager-plugin $out/bin/session-manager-plugin";
meta = with lib; {
homepage =
"https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html";
description = "Amazon SSM Session Manager Plugin";
platforms = [ "x86_64-linux" ];
license = licenses.unfree;
maintainers = with maintainers; [ mbaillie ];
};
}

View file

@ -1,24 +1,21 @@
{ stdenv, lib, buildGoPackage, fetchFromGitHub, terraform, makeWrapper }:
{ stdenv, lib, buildGoModule, fetchFromGitHub, terraform, makeWrapper }:
buildGoPackage rec {
buildGoModule rec {
pname = "terragrunt";
version = "0.23.2";
version = "0.23.14";
goPackagePath = "github.com/gruntwork-io/terragrunt";
src = fetchFromGitHub {
owner = "gruntwork-io";
repo = "terragrunt";
rev = "v${version}";
sha256 = "1r3q7faxys0h147cr9154pcix1qgj36v41ja9hhbggm4c7vig4s1";
src = fetchFromGitHub {
owner = "gruntwork-io";
repo = pname;
rev = "v${version}";
sha256 = "1znb9d4n9zv3dq10dw17kb1h04gj8iz6gwx1a741fcf4ygp8zpy1";
};
goDeps = ./deps.nix;
modSha256 = "0pjqsb6lxk73prc6jxj07iwd1wyy5gqz24kigb308r3n0c2vcnky";
buildInputs = [ makeWrapper ];
preBuild = ''
find go/src -name vendor | xargs -I % sh -c 'echo Removing %; rm -rf %'
buildFlagsArray+=("-ldflags" "-X main.VERSION=v${version}")
'';

View file

@ -1,525 +0,0 @@
# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
[
{
goPackagePath = "cloud.google.com/go";
fetch = {
type = "git";
url = "https://code.googlesource.com/gocloud";
rev = "d96ccb2ba7586bb79a416471882d347754a78ce5";
sha256 = "18f1l28665x1a8j8a5bh2i7wb2vrwj050d1g5qda50isgqaybixd";
};
}
{
goPackagePath = "github.com/BurntSushi/toml";
fetch = {
type = "git";
url = "https://github.com/BurntSushi/toml";
rev = "3012a1dbe2e4bd1391d42b32f0577cb7bbc7f005";
sha256 = "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6";
};
}
{
goPackagePath = "github.com/agext/levenshtein";
fetch = {
type = "git";
url = "https://github.com/agext/levenshtein";
rev = "0ded9c86537917af2ff89bc9c78de6bd58477894";
sha256 = "19d7q69yhcg7gl81j038rkbjz8yjb4qwnsqrmxa4zvhgzlc7d130";
};
}
{
goPackagePath = "github.com/apparentlymart/go-cidr";
fetch = {
type = "git";
url = "https://github.com/apparentlymart/go-cidr";
rev = "b1115bf8e14a60131a196f908223e4506b0ddc35";
sha256 = "0r938rb18c9cr2k417cwwd4pfq74aabpjp9pzvk4qkxc5279igl3";
};
}
{
goPackagePath = "github.com/apparentlymart/go-textseg";
fetch = {
type = "git";
url = "https://github.com/apparentlymart/go-textseg";
rev = "fb01f485ebef760e5ee06d55e1b07534dda2d295";
sha256 = "0n9xcyj7p5y8mbqilk9zprfyqvgm2y9f1g440wqw9dnn3s4fi1k4";
};
}
{
goPackagePath = "github.com/aws/aws-sdk-go";
fetch = {
type = "git";
url = "https://github.com/aws/aws-sdk-go";
rev = "572908275ed4e38fef7ccb7d507f2faacaa7ab36";
sha256 = "07bn3v0c4pd38qdp0a0kgmsvh7q30f14qp7pbbls3jzmvpxh49zs";
};
}
{
goPackagePath = "github.com/bgentry/go-netrc";
fetch = {
type = "git";
url = "https://github.com/bgentry/go-netrc";
rev = "9fd32a8b3d3d3f9d43c341bfe098430e07609480";
sha256 = "0dn2h8avgavqdzdqnph8bkhj35bx0wssczry1zdczr22xv650g1l";
};
}
{
goPackagePath = "github.com/bmatcuk/doublestar";
fetch = {
type = "git";
url = "https://github.com/bmatcuk/doublestar";
rev = "2437321e1473408f122a95f65df3d8841fec4fba";
sha256 = "0z1jg4l746825qs95sffbc69av1yj0l37n8rjmmnwf7hxh5glxzp";
};
}
{
goPackagePath = "github.com/creack/pty";
fetch = {
type = "git";
url = "https://github.com/creack/pty";
rev = "3a6a957789163cacdfe0e291617a1c8e80612c11";
sha256 = "1v52599qq76dwq742mffakzj6mxqqccv2szn3hjicjld56nmd2d3";
};
}
{
goPackagePath = "github.com/davecgh/go-spew";
fetch = {
type = "git";
url = "https://github.com/davecgh/go-spew";
rev = "8991bc29aa16c548c550c7ff78260e27b9ab7c73";
sha256 = "0hka6hmyvp701adzag2g26cxdj47g21x6jz4sc6jjz1mn59d474y";
};
}
{
goPackagePath = "github.com/fatih/color";
fetch = {
type = "git";
url = "https://github.com/fatih/color";
rev = "5b77d2a35fb0ede96d138fc9a99f5c9b6aef11b4";
sha256 = "0v8msvg38r8d1iiq2i5r4xyfx0invhc941kjrsg5gzwvagv55inv";
};
}
{
goPackagePath = "github.com/go-errors/errors";
fetch = {
type = "git";
url = "https://github.com/go-errors/errors";
rev = "a6af135bd4e28680facf08a3d206b454abc877a4";
sha256 = "0rznpknk19rxkr7li6dqs52c26pjazp69lh493l4ny4sxn5922lp";
};
}
{
goPackagePath = "github.com/golang/protobuf";
fetch = {
type = "git";
url = "https://github.com/golang/protobuf";
rev = "b5d812f8a3706043e23a9cd5babf2e5423744d30";
sha256 = "15am4s4646qy6iv0g3kkqq52rzykqjhm4bf08dk0fy2r58knpsyl";
};
}
{
goPackagePath = "github.com/google/go-cmp";
fetch = {
type = "git";
url = "https://github.com/google/go-cmp";
rev = "6f77996f0c42f7b84e5a2b252227263f93432e9b";
sha256 = "1hyxx3434zshl2m9ja78gwlkg1rx9yl6diqa7dnjb31xz5x4gbjj";
};
}
{
goPackagePath = "github.com/google/uuid";
fetch = {
type = "git";
url = "https://github.com/google/uuid";
rev = "0cd6bf5da1e1c83f8b45653022c74f71af0538a4";
sha256 = "0hfxcf9frkb57k6q0rdkrmnfs78ms21r1qfk9fhlqga2yh5xg8zb";
};
}
{
goPackagePath = "github.com/googleapis/gax-go";
fetch = {
type = "git";
url = "https://github.com/googleapis/gax-go";
rev = "beaecbbdd8af86aa3acf14180d53828ce69400b2";
sha256 = "1iwnm6ky1x53lgs44mw3hpdkjzrm5qd0kfs50m0qcq2ml5m1cwdm";
};
}
{
goPackagePath = "github.com/gruntwork-io/terratest";
fetch = {
type = "git";
url = "https://github.com/gruntwork-io/terratest";
rev = "a02960d4ef0711ae95ae2651271b4e073f88da4e";
sha256 = "0mywsimj8if8j2jbp8sf4igl5lcdlj81hd3lif86fsmyrma090vw";
};
}
{
goPackagePath = "github.com/hashicorp/errwrap";
fetch = {
type = "git";
url = "https://github.com/hashicorp/errwrap";
rev = "8a6fb523712970c966eefc6b39ed2c5e74880354";
sha256 = "0slfb6w3b61xz04r32bi0a1bygc82rjzhqkxj2si2074wynqnr1c";
};
}
{
goPackagePath = "github.com/hashicorp/go-cleanhttp";
fetch = {
type = "git";
url = "https://github.com/hashicorp/go-cleanhttp";
rev = "eda1e5db218aad1db63ca4642c8906b26bcf2744";
sha256 = "07kx3fhryqmaw3czacmm11qwx63js2q8cfq967vphk7xg9q377kk";
};
}
{
goPackagePath = "github.com/hashicorp/go-getter";
fetch = {
type = "git";
url = "https://github.com/hashicorp/go-getter";
rev = "f9ec369200fd2163b8f452e5e45696d83ae3f4b6";
sha256 = "1h69946nsmpp06iqg85whwvjrfqlk1gf9q7y01f0r3sf0cb28f30";
};
}
{
goPackagePath = "github.com/hashicorp/go-multierror";
fetch = {
type = "git";
url = "https://github.com/hashicorp/go-multierror";
rev = "886a7fbe3eb1c874d46f623bfa70af45f425b3d1";
sha256 = "00nyn8llqzbfm8aflr9kwsvpzi4kv8v45c141v88xskxp5xf6z49";
};
}
{
goPackagePath = "github.com/hashicorp/go-safetemp";
fetch = {
type = "git";
url = "https://github.com/hashicorp/go-safetemp";
rev = "c9a55de4fe06c920a71964b53cfe3dd293a3c743";
sha256 = "0gydks8bkq88adlzmv8qj3rvljx15j94c8lyrp88ji2jn6dvv643";
};
}
{
goPackagePath = "github.com/hashicorp/go-uuid";
fetch = {
type = "git";
url = "https://github.com/hashicorp/go-uuid";
rev = "4f571afc59f3043a65f8fe6bf46d887b10a01d43";
sha256 = "0jvb88m0rq41bwgirsadgw7mnayl27av3gd2vqa3xvxp3fy0hp5k";
};
}
{
goPackagePath = "github.com/hashicorp/go-version";
fetch = {
type = "git";
url = "https://github.com/hashicorp/go-version";
rev = "ac23dc3fea5d1a983c43f6a0f6e2c13f0195d8bd";
sha256 = "1bwi6y6111xq8ww8kjq0w1cmz15l1h9hb2id6596l8l0ag1vjj1z";
};
}
{
goPackagePath = "github.com/hashicorp/golang-lru";
fetch = {
type = "git";
url = "https://github.com/hashicorp/golang-lru";
rev = "7087cb70de9f7a8bc0a10c375cb0d2280a8edf9c";
sha256 = "13f870cvk161bzjj6x41l45r5x9i1z9r2ymwmvm7768kg08zznpy";
};
}
{
goPackagePath = "github.com/hashicorp/hcl2";
fetch = {
type = "git";
url = "https://github.com/hashicorp/hcl2";
rev = "318e80eefe28c3aa01b434c61bcf4c83a0cc6b25";
sha256 = "1wlm47qk84ggn6lanafirc49kaq998r1nw2xdcv4ghdxy2ijc0rj";
};
}
{
goPackagePath = "github.com/hashicorp/terraform";
fetch = {
type = "git";
url = "https://github.com/hashicorp/terraform";
rev = "abec0acf40d8e31ac612a244cf3886fb3bcce0bb";
sha256 = "14js4n08rg30y0jrm0na79syglpb64cb7cxys0x3w47pcbgymrka";
};
}
{
goPackagePath = "github.com/jmespath/go-jmespath";
fetch = {
type = "git";
url = "https://github.com/jmespath/go-jmespath";
rev = "c2b33e84";
sha256 = "1r6w7ydx8ydryxk3sfhzsk8m6f1nsik9jg3i1zhi69v4kfl4d5cz";
};
}
{
goPackagePath = "github.com/jstemmer/go-junit-report";
fetch = {
type = "git";
url = "https://github.com/jstemmer/go-junit-report";
rev = "cc1f095d5cc5eca2844f5c5ea7bb37f6b9bf6cac";
sha256 = "1knip80yir1cdsjlb3rzy0a4w3kl4ljpiciaz6hjzwqlfhnv7bkw";
};
}
{
goPackagePath = "github.com/mattn/go-colorable";
fetch = {
type = "git";
url = "https://github.com/mattn/go-colorable";
rev = "167de6bfdfba052fa6b2d3664c8f5272e23c9072";
sha256 = "1nwjmsppsjicr7anq8na6md7b1z84l9ppnlr045hhxjvbkqwalvx";
};
}
{
goPackagePath = "github.com/mattn/go-isatty";
fetch = {
type = "git";
url = "https://github.com/mattn/go-isatty";
rev = "e1f7b56ace729e4a73a29a6b4fac6cd5fcda7ab3";
sha256 = "0i3km37lajahh1y2392g4hpgvq05arcgiiv93yhzxxyv0fpqj72m";
};
}
{
goPackagePath = "github.com/mattn/go-zglob";
fetch = {
type = "git";
url = "https://github.com/mattn/go-zglob";
rev = "2ea3427bfa539cca900ca2768d8663ecc8a708c1";
sha256 = "1sncdyq5fbd42al4amyy91h7vlzm3wm6c9vl8za2pjgfgsd581fz";
};
}
{
goPackagePath = "github.com/mitchellh/go-homedir";
fetch = {
type = "git";
url = "https://github.com/mitchellh/go-homedir";
rev = "af06845cf3004701891bf4fdb884bfe4920b3727";
sha256 = "0ydzkipf28hwj2bfxqmwlww47khyk6d152xax4bnyh60f4lq3nx1";
};
}
{
goPackagePath = "github.com/mitchellh/go-testing-interface";
fetch = {
type = "git";
url = "https://github.com/mitchellh/go-testing-interface";
rev = "6d0b8010fcc857872e42fc6c931227569016843c";
sha256 = "1dl2js8di858bawg7dadlf1qjpkl2g3apziihjyf5imri3znyfpw";
};
}
{
goPackagePath = "github.com/mitchellh/go-wordwrap";
fetch = {
type = "git";
url = "https://github.com/mitchellh/go-wordwrap";
rev = "9e67c67572bc5dd02aef930e2b0ae3c02a4b5a5c";
sha256 = "1jffbwcr3nnq6c12c5856bwzv2nxjzqk3jwgvxkwi1xhpd2by0bf";
};
}
{
goPackagePath = "github.com/mitchellh/mapstructure";
fetch = {
type = "git";
url = "https://github.com/mitchellh/mapstructure";
rev = "3536a929edddb9a5b34bd6861dc4a9647cb459fe";
sha256 = "03bpv28jz9zhn4947saqwi328ydj7f6g6pf1m2d4m5zdh5jlfkrr";
};
}
{
goPackagePath = "github.com/pmezard/go-difflib";
fetch = {
type = "git";
url = "https://github.com/pmezard/go-difflib";
rev = "792786c7400a136282c1664665ae0a8db921c6c2";
sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
};
}
{
goPackagePath = "github.com/stretchr/testify";
fetch = {
type = "git";
url = "https://github.com/stretchr/testify";
rev = "ffdc059bfe9ce6a4e144ba849dbedead332c6053";
sha256 = "0wjchp2c8xbgcbbq32w3kvblk6q6yn533g78nxl6iskq6y95lxsy";
};
}
{
goPackagePath = "github.com/ulikunitz/xz";
fetch = {
type = "git";
url = "https://github.com/ulikunitz/xz";
rev = "6f934d456d51e742b4eeab20d925a827ef22320a";
sha256 = "1qpk02c0nfgfyg110nmbaiy5x12fpn0pm8gy7h1s8pwns133n831";
};
}
{
goPackagePath = "github.com/urfave/cli";
fetch = {
type = "git";
url = "https://github.com/urfave/cli";
rev = "cfb38830724cc34fedffe9a2a29fb54fa9169cd1";
sha256 = "0y6f4sbzkiiwrxbl15biivj8c7qwxnvm3zl2dd3mw4wzg4x10ygj";
};
}
{
goPackagePath = "github.com/zclconf/go-cty";
fetch = {
type = "git";
url = "https://github.com/zclconf/go-cty";
rev = "6fd39ad70c3a6bbdb1b4e47444e4cce72f901200";
sha256 = "0mb0ws70jg93vlamzhdvyvyfq6x0s0ll5gf44yanb1dhlz6i1f90";
};
}
{
goPackagePath = "github.com/zclconf/go-cty-yaml";
fetch = {
type = "git";
url = "https://github.com/zclconf/go-cty-yaml";
rev = "bc34c981dadb5ed30af852693e3aba8fb6546f42";
sha256 = "0dams5g61n88rk7zq7sy0yap873ksjafhf81hn2fg2dpfjhcd3y2";
};
}
{
goPackagePath = "go.opencensus.io";
fetch = {
type = "git";
url = "https://github.com/census-instrumentation/opencensus-go";
rev = "9c377598961b706d1542bd2d84d538b5094d596e";
sha256 = "05jr8gkr2w34i5wwki4zhl5ch0qrgi7cdgag5iy5gpxplhbrvbg9";
};
}
{
goPackagePath = "golang.org/x/crypto";
fetch = {
type = "git";
url = "https://go.googlesource.com/crypto";
rev = "5c40567a22f818bd14a1ea7245dad9f8ef0691aa";
sha256 = "17g8fb9vy2sqq8vgz8jdvf6c6d2290gm2qs0i4yzsd86mgn4dlrg";
};
}
{
goPackagePath = "golang.org/x/exp";
fetch = {
type = "git";
url = "https://go.googlesource.com/exp";
rev = "f17229e696bd4e065144fd6ae1313e41515abbdc";
sha256 = "0q1fij8izg7xcnx7wqh0zdnya11k3d9a5fqm0yb2r93jhlf3x128";
};
}
{
goPackagePath = "golang.org/x/lint";
fetch = {
type = "git";
url = "https://go.googlesource.com/lint";
rev = "910be7a94367618fd0fd25eaabbee4fdc0ac7092";
sha256 = "08gskshgfwxhmm9i4vgd4q7kqd5i7yihqh33v6r07br6kqd0g995";
};
}
{
goPackagePath = "golang.org/x/mod";
fetch = {
type = "git";
url = "https://go.googlesource.com/mod";
rev = "ed3ec21bb8e252814c380df79a80f366440ddb2d";
sha256 = "1fp6885dclq77mh73v7i54v2b9llpv4di193zc8vmsbbkkc483cl";
};
}
{
goPackagePath = "golang.org/x/net";
fetch = {
type = "git";
url = "https://go.googlesource.com/net";
rev = "461777fb6f67e8cb9d70cda16573678d085a74cf";
sha256 = "0sc0llch05q6h7nqgayi3sgismsznpnlsz4gh89y4klpymdcpbh2";
};
}
{
goPackagePath = "golang.org/x/oauth2";
fetch = {
type = "git";
url = "https://go.googlesource.com/oauth2";
rev = "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33";
sha256 = "06jwpvx0x2gjn2y959drbcir5kd7vg87k0r1216abk6rrdzzrzi2";
};
}
{
goPackagePath = "golang.org/x/sys";
fetch = {
type = "git";
url = "https://go.googlesource.com/sys";
rev = "93c9922d18aeb82498a065f07aec7ad7fa60dfb7";
sha256 = "0hv96nwbv0li3nrv43ldfzmf12yrrbji2cf8n44iibv8ps5kfssx";
};
}
{
goPackagePath = "golang.org/x/text";
fetch = {
type = "git";
url = "https://go.googlesource.com/text";
rev = "342b2e1fbaa52c93f31447ad2c6abc048c63e475";
sha256 = "0flv9idw0jm5nm8lx25xqanbkqgfiym6619w575p7nrdh0riqwqh";
};
}
{
goPackagePath = "golang.org/x/tools";
fetch = {
type = "git";
url = "https://go.googlesource.com/tools";
rev = "49b8ac185c84c5092be0953fb92b7660db9b8162";
sha256 = "0ccsm8p9i83f0s0z5c7jwyzj7jgcg60zf20hzrmp705669wn5y67";
};
}
{
goPackagePath = "golang.org/x/xerrors";
fetch = {
type = "git";
url = "https://go.googlesource.com/xerrors";
rev = "9bdfabe68543c54f90421aeb9a60ef8061b5b544";
sha256 = "1yjfi1bk9xb81lqn85nnm13zz725wazvrx3b50hx19qmwg7a4b0c";
};
}
{
goPackagePath = "google.golang.org/api";
fetch = {
type = "git";
url = "https://code.googlesource.com/google-api-go-client";
rev = "e9c39defab7fc4be8ec95d4ce422dbeae4070400";
sha256 = "01wjr07xnb9s32y2jc6d0rba3jxwccd2wydm6cql41yhyr3x84rd";
};
}
{
goPackagePath = "google.golang.org/appengine";
fetch = {
type = "git";
url = "https://github.com/golang/appengine";
rev = "b2f4a3cf3c67576a2ee09e1fe62656a5086ce880";
sha256 = "0zxlvwzxwkwz4bs4h9zc9979dx76y4xf9ks4d22bclg47dv59yry";
};
}
{
goPackagePath = "google.golang.org/genproto";
fetch = {
type = "git";
url = "https://github.com/google/go-genproto";
rev = "eb0b1bdb6ae60fcfc41b8d907b50dfb346112301";
sha256 = "0g00wfxd4z886bglyszcvfpgzak0476axqyfaqv3va62ndbqpk90";
};
}
{
goPackagePath = "google.golang.org/grpc";
fetch = {
type = "git";
url = "https://github.com/grpc/grpc-go";
rev = "f495f5b15ae7ccda3b38c53a1bfcde4c1a58a2bc";
sha256 = "09phrrsafgq6hnbw8cawvx44bdpk1p584fys17x1bwn0j0451zzs";
};
}
{
goPackagePath = "honnef.co/go/tools";
fetch = {
type = "git";
url = "https://github.com/dominikh/go-tools";
rev = "afd67930eec2a9ed3e9b19f684d17a062285f16a";
sha256 = "1rwwahmbs4dwxncwjj56likir1kps9937vm2id3rygxzzla40zal";
};
}
]

View file

@ -6,13 +6,13 @@
stdenv.mkDerivation rec {
pname = "psi-plus";
version = "1.4.1086";
version = "1.4.1159";
src = fetchFromGitHub {
owner = "psi-plus";
repo = "psi-plus-snapshots";
rev = version;
sha256 = "0war4hbjs1m7ll6rvpl3lj44lb0p5fi0g2siinnxpjffz2ydi97p";
sha256 = "1k4ip2glkjsbb28gzffahi81kz90qkf213j89gsmcvbdjf4kp687";
};
cmakeFlags = [

View file

@ -19,12 +19,12 @@ with lib;
mkDerivation rec {
pname = "telegram-desktop";
version = "2.1.1";
version = "2.1.2";
# Telegram-Desktop with submodules
src = fetchurl {
url = "https://github.com/telegramdesktop/tdesktop/releases/download/v${version}/tdesktop-${version}-full.tar.gz";
sha256 = "0032csgzwfby5a8q8w9iks7ggv1dcqli3qyhksbzly2xzxmfzqaj";
sha256 = "0n387scs5kmc5jrypyxkc9cj4c7nb5761bdb8qxw8j342sm5ai24";
};
postPatch = ''

View file

@ -2,18 +2,22 @@
python3Packages.buildPythonApplication rec {
pname = "afew";
version = "2.0.0";
version = "3.0.0";
src = python3Packages.fetchPypi {
inherit pname version;
sha256 = "0j60501nm242idf2ig0h7p6wrg58n5v2p6zfym56v9pbvnbmns0s";
sha256 = "18j3xyzchlslcrkycr2i59jg73cb6yh5s7l3qnl6sa7vgxcbhq7c";
};
nativeBuildInputs = with python3Packages; [ sphinx setuptools_scm ];
propagatedBuildInputs = with python3Packages; [
python3Packages.setuptools python3Packages.notmuch chardet dkimpy
] ++ stdenv.lib.optional (!python3Packages.isPy3k) subprocess32;
];
checkInputs = with python3Packages; [
freezegun notmuch
];
makeWrapperArgs = [
''--prefix PATH ':' "${notmuch}/bin"''

View file

@ -4,11 +4,11 @@ with stdenv.lib;
stdenv.mkDerivation rec {
pname = "mpop";
version = "1.4.7";
version = "1.4.9";
src = fetchurl {
url = "https://marlam.de/${pname}/releases/${pname}-${version}.tar.xz";
sha256 = "0c6n5afn9pr4p7gxkv462lysrw52w9fhvavzm99c78dcp9dj5xnk";
sha256 = "0hinmyd4lipy9wi3grwm72vv6xrpf4m08i9g9nlxzxnwfanw885q";
};
nativeBuildInputs = [ pkgconfig ];

View file

@ -3,17 +3,17 @@
let
common = { stname, target, postInstall ? "" }:
buildGoModule rec {
version = "1.4.2";
version = "1.5.0";
name = "${stname}-${version}";
src = fetchFromGitHub {
owner = "syncthing";
repo = "syncthing";
rev = "v${version}";
sha256 = "0pfzpbdir2agwsyfjh1rxlyyd225xmyrr4k2g4vlg5r12kpcjwya";
sha256 = "0yy31rfvr9d6kidfvvy36ljxlc14x5ir3ln19zg4k02hdqn0xkpj";
};
modSha256 = "0qjhb55nd8mlnswbk8bgl2sb9angmv8fnympmmyqj1dqa7lcs87z";
modSha256 = "1vs7lxlqd7jr4r9xkk7w7k6gxzjmm7ic0a1scfpx8rcr5swa9cq1";
patches = [
./add-stcli-target.patch

View file

@ -16,7 +16,7 @@ stdenv.mkDerivation {
substituteInPlace Makefile --replace "gcc" "cc"
'';
patches = [ ./10_fix_buffer_overflow_wordole_c.patch ];
patches = [ ./10_fix_buffer_overflow_wordole_c_CVE-2014-8123.patch ];
installTargets = [ "global_install" ];

View file

@ -1,5 +1,14 @@
{ fetchurl, stdenv, gtk, pkgconfig, libgsf, libofx, intltool, wrapGAppsHook
, libsoup, gnome3 }:
{ fetchurl
, stdenv
, gtk
, pkgconfig
, libgsf
, libofx
, intltool
, wrapGAppsHook
, libsoup
, gnome3
}:
stdenv.mkDerivation rec {
pname = "grisbi";
@ -7,12 +16,18 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "mirror://sourceforge/grisbi/${pname}-${version}.tar.bz2";
sha1 = "crv3bga72v6fw07wad0nkrgdg4war66j";
sha256 = "1piiyyxjsjbw9gcqydvknzxmmfgh8kdqal12ywrxyxih2afwnvbw";
};
nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
buildInputs = [ gtk libgsf libofx intltool libsoup
gnome3.adwaita-icon-theme ];
buildInputs = [
gtk
libgsf
libofx
intltool
libsoup
gnome3.adwaita-icon-theme
];
meta = with stdenv.lib; {
description = "A personnal accounting application.";
@ -24,7 +39,7 @@ stdenv.mkDerivation rec {
management and other information that make Grisbi adapted for
associations.
'';
homepage = "http://grisbi.org";
homepage = "https://grisbi.org";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ layus ];
platforms = platforms.linux;

View file

@ -2,10 +2,10 @@
, libsoup, gnome3 }:
stdenv.mkDerivation rec {
name = "homebank-5.3.2";
name = "homebank-5.4.1";
src = fetchurl {
url = "http://homebank.free.fr/public/${name}.tar.gz";
sha256 = "1fr4060yqlciay98dypvifmfvr8y2kbpj89d86mcvq9gb00vij2b";
sha256 = "1m1hpaby6zi8y0vmj2ljklp34a55l2qsr7pxw3852k2m4v5n9zsx";
};
nativeBuildInputs = [ pkgconfig wrapGAppsHook ];

View file

@ -19,7 +19,17 @@ let
maintainers = with maintainers; [ emmanuelrosa dtzWill kampka ];
};
version = "0.40.7";
version = "0.42.1";
desktopSource = {
url = "https://github.com/zadam/trilium/releases/download/v${version}/trilium-linux-x64-${version}.tar.xz";
sha256 = "0xcbkm6z1a0jh3qywlwcjk6l302cxgdfcq8sw30vbnz99cyarpvz";
};
serverSource = {
url = "https://github.com/zadam/trilium/releases/download/v${version}/trilium-linux-x64-server-${version}.tar.xz";
sha256 = "012l36z0n3fcdajj3v4w2bcb1619sdhg6cvy3y89b6rxl0h2wdiw";
};
in {
@ -28,10 +38,7 @@ in {
inherit version;
inherit meta;
src = fetchurl {
url = "https://github.com/zadam/trilium/releases/download/v${version}/trilium-linux-x64-${version}.tar.xz";
sha256 = "0xi3bb0kbphbgpk2wlsad509g0hwwb259q2vkv0kgyr4i4wcyc1f";
};
src = fetchurl desktopSource;
# Fetch from source repo, no longer included in release.
# (they did special-case icon.png but we want the scalable svg)
@ -76,10 +83,7 @@ in {
inherit version;
inherit meta;
src = fetchurl {
url = "https://github.com/zadam/trilium/releases/download/v${version}/trilium-linux-x64-server-${version}.tar.xz";
sha256 = "15bspngnnbq6mhp1f82j9hccg0ymhm6i4rddpgz3n7dw5wxdj0sm";
};
src = fetchurl serverSource;
nativeBuildInputs = [
autoPatchelfHook

View file

@ -4,13 +4,13 @@
stdenv.mkDerivation rec {
pname = "dablin";
version = "1.12.0";
version = "1.13.0";
src = fetchFromGitHub {
owner = "Opendigitalradio";
repo = "dablin";
rev = version;
sha256 = "0d514ixz062xyyh4k3laxwhn3k3a1l4jq4w7rxf8x46d3743zrf7";
sha256 = "0143jnhwwh4din6mlrkbm8m2wm8vnrlk0yk9r5qcvj70r2314bgq";
};
nativeBuildInputs = [ cmake pkgconfig ];

View file

@ -2,12 +2,12 @@
libsamplerate, libpulseaudio, libXinerama, gettext, pkgconfig, alsaLib }:
stdenv.mkDerivation rec {
version = "4.1.11";
version = "4.1.12";
pname = "fldigi";
src = fetchurl {
url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
sha256 = "1y62xn1pim38ibaf2mbl8b7aq20jdaac6lgggb9r402w9bj5b196";
sha256 = "1yjjv2ss84xfiaidypp476mhrbpnw4zf7mb5cdqwhdh604x0svr1";
};
buildInputs = [ libXinerama gettext hamlib fltk14 libjpeg libpng portaudio

View file

@ -5,13 +5,13 @@
python3Packages.buildPythonApplication rec {
pname = "urh";
version = "2.8.5";
version = "2.8.7";
src = fetchFromGitHub {
owner = "jopohl";
repo = pname;
rev = "v${version}";
sha256 = "060npn0q7yrby2zj9hi8x7raivs91v9hvryvf45k1ipyqh8dgri6";
sha256 = "1grak0vzlzqvg8bqaalyamwvkyzlmj9nbczqp6jcdf6w2vnbzhph";
};
nativeBuildInputs = [ qt5.wrapQtAppsHook ];

View file

@ -0,0 +1,48 @@
{
mkDerivation, lib, fetchgit,
extra-cmake-modules,
kconfig, kdoctools, kguiaddons, ki18n, kinit, kiconthemes, kio,
knewstuff, kplotting, kwidgetsaddons, kxmlgui,
qtx11extras, qtwebsockets,
eigen, zlib,
cfitsio, indilib, xplanet
}:
mkDerivation {
name = "kstars";
src = fetchgit {
url = "https://anongit.kde.org/kstars.git";
rev = "7acc527939280edd22823371dc4e22494c6c626a";
sha256 = "1n1lgi7p3dj893fdnzjbnrha40p4apl0dy8zppcabxwrb1khb84v";
};
nativeBuildInputs = [ extra-cmake-modules kdoctools ];
buildInputs = [
kconfig kdoctools kguiaddons ki18n kinit kiconthemes kio
knewstuff kplotting kwidgetsaddons kxmlgui
qtx11extras qtwebsockets
eigen zlib
cfitsio indilib xplanet
];
meta = with lib; {
description = "Virtual planetarium astronomy software";
homepage = "https://kde.org/applications/education/org.kde.kstars";
longDescription = ''
It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.
The display includes up to 100 million stars, 13.000 deep-sky objects, all 8 planets, the Sun and Moon, and thousands of comets, asteroids, supernovae, and satellites.
For students and teachers, it supports adjustable simulation speeds in order to view phenomena that happen over long timescales, the KStars Astrocalculator to predict conjunctions, and many common astronomical calculations.
'';
license = licenses.gpl2;
platforms = platforms.linux;
maintainers = with maintainers; [ timput ];
};
}

View file

@ -1,17 +1,17 @@
{ stdenv, lib, fetchFromGitHub, python, makeWrapper
, eigen, fftw, libtiff, zlib, ants, bc
, eigen, fftw, libtiff, libpng, zlib, ants, bc
, qt5, libGL, libGLU, libX11, libXext
, withGui ? true }:
stdenv.mkDerivation rec {
pname = "mrtrix";
version = "3.0_RC3_latest";
version = "3.0.0";
src = fetchFromGitHub {
owner = "MRtrix3";
repo = "mrtrix3";
rev = version;
sha256 = "184nv524p8j94qicjy9l288bqcgl2yxqqs55a7042i0gfsnwp51c";
sha256 = "1vvmmbw3m0bdfwp4szr62ygzsvkj0ss91cx5zlkspsr1rff05f9b";
fetchSubmodules = true;
};
@ -22,7 +22,9 @@ stdenv.mkDerivation rec {
python
fftw
libtiff
zlib ] ++ lib.optionals withGui [
libpng
zlib
] ++ lib.optionals withGui [
libGL
libGLU
libX11
@ -34,9 +36,14 @@ stdenv.mkDerivation rec {
installCheckInputs = [ bc ];
postPatch = ''
patchShebangs ./build ./configure ./run_tests ./bin/population_template
patchShebangs ./build ./configure ./run_tests ./bin/*
# patching interpreters before fixup is needed for tests:
patchShebangs ./bin/*
patchShebangs testing/binaries/data/vectorstats/*py
substituteInPlace ./run_tests \
--replace 'git submodule update --init >> $LOGFILE 2>&1' ""
--replace 'git submodule update --init $datadir >> $LOGFILE 2>&1' ""
'';
configurePhase = ''
@ -50,7 +57,13 @@ stdenv.mkDerivation rec {
(cd testing && ../build)
'';
installCheckPhase = "./run_tests";
installCheckPhase = ''
./run_tests units
./run_tests binaries
# can also `./run_tests scripts`, but this fails due to lack of FSL package
# (and there's no convenient way to disable individual tests)
'';
doInstallCheck = true;
installPhase = ''
@ -63,7 +76,9 @@ stdenv.mkDerivation rec {
postInstall = ''
for prog in $out/bin/*; do
wrapProgram $prog --prefix PATH : ${lib.makeBinPath [ ants ]}
if [[ -x "$prog" ]]; then
wrapProgram $prog --prefix PATH : ${lib.makeBinPath [ ants ]}
fi
done
'';

View file

@ -4,12 +4,12 @@ with stdenv.lib;
stdenv.mkDerivation rec {
pname = "marvin";
version = "20.9.0";
version = "20.10.0";
src = fetchurl {
name = "marvin-${version}.deb";
url = "http://dl.chemaxon.com/marvin/${version}/marvin_linux_${versions.majorMinor version}.deb";
sha256 = "1c6q1vb96jsb37g5qbhzcnasd5pdqjyc190yg3caw3gwrd97889q";
sha256 = "042ndlns48pa6mn6wyrp4q9c1v0a2vzcnhw5l766zdnxdjyv0acx";
};
nativeBuildInputs = [ dpkg makeWrapper ];

View file

@ -2,16 +2,16 @@
rustPlatform.buildRustPackage rec {
pname = "elan";
version = "0.8.0";
version = "0.9.0";
src = fetchFromGitHub {
owner = "kha";
repo = "elan";
rev = "v${version}";
sha256 = "0n2ncssjcmp3x5kbnci7xbq5fgcihlr3vaglyhhwzrxkjy2vpmpd";
sha256 = "17i8sn53hk03fsawpwfinm1w0nb6lcmdbk8ar2mxyhkxczd45vag";
};
cargoSha256 = "1pkg0n7kxckr0zhr8dr12b9fxg5q185kj3r9k2rmnkj2dpa2mxh3";
cargoSha256 = "1b2b200wci1lirnkbhfmravz85v8ly918qkr0nwg7dlmhvg9gjb0";
nativeBuildInputs = [ pkgconfig ];
@ -22,7 +22,7 @@ rustPlatform.buildRustPackage rec {
postInstall = ''
pushd $out/bin
mv elan-init elan
for link in lean leanpkg leanchecker leanc; do
for link in lean leanpkg leanchecker leanc leanmake; do
ln -s elan $link
done
popd

Some files were not shown because too many files have changed in this diff Show more