Merge branch 'master' into staging

This commit is contained in:
Vladimír Čunát 2016-12-17 20:29:25 +01:00
commit 86e4c9ed46
No known key found for this signature in database
GPG Key ID: E747DF1F9575A3AA
280 changed files with 10337 additions and 4622 deletions

View File

@ -4,7 +4,7 @@ matrix:
- os: linux
sudo: false
script:
- ./maintainers/scripts/travis-nox-review-pr.sh nixpkgs-verify nixpkgs-manual nixpkgs-tarball
- ./maintainers/scripts/travis-nox-review-pr.sh nixpkgs-verify nixpkgs-manual nixpkgs-tarball nixpkgs-unstable
- ./maintainers/scripts/travis-nox-review-pr.sh nixos-options nixos-manual
- os: linux
sudo: required

View File

@ -382,4 +382,138 @@ it. Place the resulting <filename>package.nix</filename> file into
</section>
<section xml:id="sec-steam">
<title>Steam</title>
<section xml:id="sec-steam-nix">
<title>Steam in Nix</title>
<para>
Steam is distributed as a <filename>.deb</filename> file, for now only
as an i686 package (the amd64 package only has documentation).
When unpacked, it has a script called <filename>steam</filename> that
in ubuntu (their target distro) would go to <filename>/usr/bin
</filename>. When run for the first time, this script copies some
files to the user's home, which include another script that is the
ultimate responsible for launching the steam binary, which is also
in $HOME.
</para>
<para>
Nix problems and constraints:
<itemizedlist>
<listitem><para>We don't have <filename>/bin/bash</filename> and many
scripts point there. Similarly for <filename>/usr/bin/python</filename>
.</para></listitem>
<listitem><para>We don't have the dynamic loader in <filename>/lib
</filename>.</para></listitem>
<listitem><para>The <filename>steam.sh</filename> script in $HOME can
not be patched, as it is checked and rewritten by steam.</para></listitem>
<listitem><para>The steam binary cannot be patched, it's also checked.</para></listitem>
</itemizedlist>
</para>
<para>
The current approach to deploy Steam in NixOS is composing a FHS-compatible
chroot environment, as documented
<link xlink:href="http://sandervanderburg.blogspot.nl/2013/09/composing-fhs-compatible-chroot.html">here</link>.
This allows us to have binaries in the expected paths without disrupting the system,
and to avoid patching them to work in a non FHS environment.
</para>
</section>
<section xml:id="sec-steam-play">
<title>How to play</title>
<para>
For 64-bit systems it's important to have
<programlisting>hardware.opengl.driSupport32Bit = true;</programlisting>
in your <filename>/etc/nixos/configuration.nix</filename>. You'll also need
<programlisting>hardware.pulseaudio.support32Bit = true;</programlisting>
if you are using PulseAudio - this will enable 32bit ALSA apps integration.
To use the Steam controller, you need to add
<programlisting>services.udev.extraRules = ''
SUBSYSTEM=="usb", ATTRS{idVendor}=="28de", MODE="0666"
KERNEL=="uinput", MODE="0660", GROUP="users", OPTIONS+="static_node=uinput"
'';</programlisting>
to your configuration.
</para>
</section>
<section xml:id="sec-steam-troub">
<title>Troubleshooting</title>
<para>
<variablelist>
<varlistentry>
<term>Steam fails to start. What do I do?</term>
<listitem><para>Try to run
<programlisting>strace steam</programlisting>
to see what is causing steam to fail.</para></listitem>
</varlistentry>
<varlistentry>
<term>Using the FOSS Radeon drivers</term>
<listitem><itemizedlist><listitem><para>
The open source radeon drivers need a newer libc++ than is provided
by the default runtime, which leads to a crash on launch. Use
<programlisting>environment.systemPackages = [(pkgs.steam.override { newStdcpp = true; })];</programlisting>
in your config if you get an error like
<programlisting>
libGL error: unable to load driver: radeonsi_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: radeonsi
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast</programlisting></para></listitem>
<listitem><para>
Steam ships statically linked with a version of libcrypto that
conflics with the one dynamically loaded by radeonsi_dri.so.
If you get the error
<programlisting>steam.sh: line 713: 7842 Segmentation fault (core dumped)</programlisting>
have a look at <link xlink:href="https://github.com/NixOS/nixpkgs/pull/20269">this pull request</link>.
</para></listitem>
</itemizedlist></listitem></varlistentry>
<varlistentry>
<term>Java</term>
<listitem><orderedlist>
<listitem><para>
There is no java in steam chrootenv by default. If you get a message like
<programlisting>/home/foo/.local/share/Steam/SteamApps/common/towns/towns.sh: line 1: java: command not found</programlisting>
You need to add
<programlisting> steam.override { withJava = true; };</programlisting>
to your configuration.
</para></listitem>
</orderedlist></listitem></varlistentry>
</variablelist>
</para>
</section>
<section xml:id="sec-steam-run">
<title>steam-run</title>
<para>
The FHS-compatible chroot used for steam can also be used to run
other linux games that expect a FHS environment.
To do it, add
<programlisting>pkgs.(steam.override {
nativeOnly = true;
newStdcpp = true;
}).run</programlisting>
to your configuration, rebuild, and run the game with
<programlisting>steam-run ./foo</programlisting>
</para>
</section>
</section>
</chapter>

View File

@ -132,6 +132,7 @@
drets = "Dmytro Rets <dmitryrets@gmail.com>";
drewkett = "Andrew Burkett <burkett.andrew@gmail.com>";
dtzWill = "Will Dietz <nix@wdtz.org>";
e-user = "Alexander Kahl <nixos@sodosopa.io>";
ebzzry = "Rommel Martinez <ebzzry@gmail.com>";
ederoyd46 = "Matthew Brown <matt@ederoyd.co.uk>";
eduarrrd = "Eduard Bachmakov <e.bachmakov@gmail.com>";
@ -187,6 +188,7 @@
gridaphobe = "Eric Seidel <eric@seidel.io>";
guibert = "David Guibert <david.guibert@gmail.com>";
guillaumekoenig = "Guillaume Koenig <guillaume.edward.koenig@gmail.com>";
guyonvarch = "Joris Guyonvarch <joris@guyonvarch.me>";
hakuch = "Jesse Haber-Kucharsky <hakuch@gmail.com>";
havvy = "Ryan Scheel <ryan.havvy@gmail.com>";
hbunke = "Hendrik Bunke <bunke.hendrik@gmail.com>";
@ -242,6 +244,7 @@
leonardoce = "Leonardo Cecchi <leonardo.cecchi@gmail.com>";
lethalman = "Luca Bruno <lucabru@src.gnome.org>";
lewo = "Antoine Eiche <lewo@abesis.fr>";
lheckemann = "Linus Heckemann <git@sphalerite.org>";
lhvwb = "Nathaniel Baxter <nathaniel.baxter@gmail.com>";
lihop = "Leroy Hopson <nixos@leroy.geek.nz>";
linquize = "Linquize <linquize@yahoo.com.hk>";
@ -273,6 +276,7 @@
matthiasbeyer = "Matthias Beyer <mail@beyermatthias.de>";
maurer = "Matthew Maurer <matthew.r.maurer+nix@gmail.com>";
mbakke = "Marius Bakke <mbakke@fastmail.com>";
mbbx6spp = "Susan Potter <me@susanpotter.net>";
mbe = "Brandon Edens <brandonedens@gmail.com>";
mboes = "Mathieu Boespflug <mboes@tweag.net>";
mcmtroffaes = "Matthias C. M. Troffaes <matthias.troffaes@gmail.com>";
@ -383,6 +387,7 @@
retrry = "Tadas Barzdžius <retrry@gmail.com>";
rick68 = "Wei-Ming Yang <rick68@gmail.com>";
rickynils = "Rickard Nilsson <rickynils@gmail.com>";
rlupton20 = "Richard Lupton <richard.lupton@gmail.com>";
rnhmjoj = "Michele Guerini Rocco <micheleguerinirocco@me.com>";
rob = "Rob Vermaas <rob.vermaas@gmail.com>";
robberer = "Longrin Wischnewski <robberer@freakmail.de>";

View File

@ -38,6 +38,12 @@ while test -n "$1"; do
nix-build $TRAVIS_BUILD_DIR/pkgs/top-level/release.nix --attr tarball --show-trace
;;
nixpkgs-unstable)
echo "=== Checking nixpkgs unstable job"
nix-instantiate $TRAVIS_BUILD_DIR/pkgs/top-level/release.nix --attr unstable --show-trace
;;
nixpkgs-lint)
echo "=== Checking nixpkgs lint"

View File

@ -129,7 +129,7 @@ default; run <literal>nix-env -i nix-repl</literal> to get it. A
typical use:
<screen>
$ nix-repl '&lt;nixos>'
$ nix-repl '&lt;nixpkgs/nixos>'
nix-repl> config.networking.hostName
"mandark"

View File

@ -68,7 +68,7 @@ desired operation. It must be one of the following:
<listitem>
<para>Build and activate the new configuration, and make it the
boot default. That is, the configuration is added to the GRUB
boot menu as the default meny entry, so that subsequent reboots
boot menu as the default menu entry, so that subsequent reboots
will boot the system into the new configuration. Previous
configurations activated with <command>nixos-rebuild
switch</command> or <command>nixos-rebuild boot</command> remain

View File

@ -7,8 +7,8 @@ with lib;
gnu = mkOption {
type = types.bool;
default = false;
description =
'' When enabled, GNU software is chosen by default whenever a there is
description = ''
When enabled, GNU software is chosen by default whenever a there is
a choice between GNU and non-GNU software (e.g., GNU lsh
vs. OpenSSH).
'';

View File

@ -84,6 +84,18 @@ in
'';
};
networking.timeServers = mkOption {
default = [
"0.nixos.pool.ntp.org"
"1.nixos.pool.ntp.org"
"2.nixos.pool.ntp.org"
"3.nixos.pool.ntp.org"
];
description = ''
The set of NTP servers from which to synchronise.
'';
};
networking.proxy = {
default = lib.mkOption {

View File

@ -10,9 +10,21 @@ let
inherit (config.services.samba) nsswins;
ldap = (config.users.ldap.enable && config.users.ldap.nsswitch);
in
hostArray = [ "files" "mymachines" ]
++ optionals nssmdns [ "mdns_minimal [!UNAVAIL=return]" ]
++ optionals nsswins [ "wins" ]
++ [ "dns" ]
++ optionals nssmdns [ "mdns" ]
++ ["myhostname" ];
{
passwdArray = [ "files" ]
++ optionals ldap [ "ldap" ]
++ [ "mymachines" ];
shadowArray = [ "files" ]
++ optionals ldap [ "ldap" ];
in {
options = {
# NSS modules. Hacky!
@ -39,16 +51,18 @@ in
# Name Service Switch configuration file. Required by the C
# library. !!! Factor out the mdns stuff. The avahi module
# should define an option used by this module.
environment.etc."nsswitch.conf".text =
''
passwd: files ${optionalString ldap "ldap"}
group: files ${optionalString ldap "ldap"}
shadow: files ${optionalString ldap "ldap"}
hosts: files ${optionalString nssmdns "mdns_minimal [NOTFOUND=return]"} dns ${optionalString nssmdns "mdns"} ${optionalString nsswins "wins"} myhostname mymachines
networks: files dns
environment.etc."nsswitch.conf".text = ''
passwd: ${concatStringsSep " " passwdArray}
group: ${concatStringsSep " " passwdArray}
shadow: ${concatStringsSep " " shadowArray}
hosts: ${concatStringsSep " " hostArray}
networks: files
ethers: files
services: files
protocols: files
rpc: files
'';
# Systemd provides nss-myhostname to ensure that our hostname
@ -56,7 +70,7 @@ in
# 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 = [ config.systemd.package ];
system.nssModules = [ config.systemd.package.out ];
};
}

View File

@ -211,7 +211,6 @@
lambdabot = 191;
asterisk = 192;
plex = 193;
bird = 195;
grafana = 196;
skydns = 197;
ripple-rest = 198;
@ -281,6 +280,7 @@
stanchion = 262;
riak-cs = 263;
infinoted = 264;
keystone = 265;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
@ -470,7 +470,6 @@
#asterisk = 192; # unused
plex = 193;
sabnzbd = 194;
bird = 195;
#grafana = 196; #unused
#skydns = 197; #unused
#ripple-rest = 198; #unused
@ -532,6 +531,7 @@
stanchion = 262;
riak-cs = 263;
infinoted = 264;
keystone = 265;
# When adding a gid, make sure it doesn't match an existing
# uid. Users and groups with the same name should have equal

View File

@ -133,9 +133,11 @@
./services/cluster/fleet.nix
./services/cluster/kubernetes.nix
./services/cluster/panamax.nix
./services/computing/boinc/client.nix
./services/computing/torque/server.nix
./services/computing/torque/mom.nix
./services/computing/slurm/slurm.nix
./services/continuous-integration/buildbot/master.nix
./services/continuous-integration/buildkite-agent.nix
./services/continuous-integration/hydra/default.nix
./services/continuous-integration/gitlab-runner.nix
@ -629,4 +631,5 @@
./virtualisation/vmware-guest.nix
./virtualisation/xen-dom0.nix
./virtualisation/xe-guest-utilities.nix
./virtualisation/openstack/keystone.nix
]

View File

@ -484,7 +484,7 @@ in {
clusterDns = mkOption {
description = "Use alternative dns.";
default = "10.10.1.1";
default = "10.10.0.1";
type = types.str;
};

View File

@ -48,7 +48,7 @@ in
only the hosts listed in <varname>dataDir</varname>/remote_hosts.cfg will be allowed to
connect.
See also: <ulink url="http://boinc.berkeley.edu/wiki/Controlling_BOINC_remotely#Remote_access"/>
See also: <link xlink:href="http://boinc.berkeley.edu/wiki/Controlling_BOINC_remotely#Remote_access"/>
'';
};
};

View File

@ -0,0 +1,250 @@
# NixOS module for Buildbot continous integration server.
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.buildbot-master;
escapeStr = s: escape ["'"] s;
masterCfg = pkgs.writeText "master.cfg" ''
from buildbot.plugins import *
factory = util.BuildFactory()
c = BuildmasterConfig = dict(
workers = [${concatStringsSep "," cfg.workers}],
protocols = { 'pb': {'port': ${cfg.bpPort} } },
title = '${escapeStr cfg.title}',
titleURL = '${escapeStr cfg.titleUrl}',
buildbotURL = '${escapeStr cfg.buildbotUrl}',
db = dict(db_url='${escapeStr cfg.dbUrl}'),
www = dict(port=${toString cfg.port}),
change_source = [ ${concatStringsSep "," cfg.changeSource} ],
schedulers = [ ${concatStringsSep "," cfg.schedulers} ],
builders = [ ${concatStringsSep "," cfg.builders} ],
status = [ ${concatStringsSep "," cfg.status} ],
)
for step in [ ${concatStringsSep "," cfg.factorySteps} ]:
factory.addStep(step)
${cfg.extraConfig}
'';
configFile = if cfg.masterCfg == null then masterCfg else cfg.masterCfg;
in {
options = {
services.buildbot-master = {
factorySteps = mkOption {
type = types.listOf types.str;
description = "Factory Steps";
default = [];
example = [
"steps.Git(repourl='git://github.com/buildbot/pyflakes.git', mode='incremental')"
"steps.ShellCommand(command=['trial', 'pyflakes'])"
];
};
changeSource = mkOption {
type = types.listOf types.str;
description = "List of Change Sources.";
default = [];
example = [
"changes.GitPoller('git://github.com/buildbot/pyflakes.git', workdir='gitpoller-workdir', branch='master', pollinterval=300)"
];
};
enable = mkOption {
type = types.bool;
default = false;
description = "Whether to enable the Buildbot continuous integration server.";
};
extraConfig = mkOption {
type = types.str;
description = "Extra configuration to append to master.cfg";
default = "";
};
masterCfg = mkOption {
type = with types; nullOr path;
description = ''
Optionally pass path to raw master.cfg file.
Other options in this configuration will be ignored.
'';
default = null;
example = literalExample ''
pkgs.writeText "master.cfg" "BuildmasterConfig = c = {}"
'';
};
schedulers = mkOption {
type = types.listOf types.str;
description = "List of Schedulers.";
default = [
"schedulers.SingleBranchScheduler(name='all', change_filter=util.ChangeFilter(branch='master'), treeStableTimer=None, builderNames=['runtests'])"
"schedulers.ForceScheduler(name='force',builderNames=['runtests'])"
];
};
builders = mkOption {
type = types.listOf types.str;
description = "List of Builders.";
default = [
"util.BuilderConfig(name='runtests',workernames=['default-worker'],factory=factory)"
];
};
workers = mkOption {
type = types.listOf types.str;
description = "List of Workers.";
default = [
"worker.Worker('default-worker', 'password')"
];
example = [ "worker.LocalWorker('default-worker')" ];
};
status = mkOption {
default = [];
type = types.listOf types.str;
description = "List of status notification endpoints.";
};
user = mkOption {
default = "buildbot";
type = types.str;
description = "User the buildbot server should execute under.";
};
group = mkOption {
default = "buildbot";
type = types.str;
description = "Primary group of buildbot user.";
};
extraGroups = mkOption {
type = types.listOf types.str;
default = [ "nixbld" ];
description = "List of extra groups that the buildbot user should be a part of.";
};
home = mkOption {
default = "/home/buildbot";
type = types.path;
description = "Buildbot home directory.";
};
buildbotDir = mkOption {
default = "${cfg.home}/master";
type = types.path;
description = "Specifies the Buildbot directory.";
};
bpPort = mkOption {
default = "9989";
type = types.string;
example = "tcp:10000:interface=127.0.0.1";
description = "Port where the master will listen to Buildbot Worker.";
};
listenAddress = mkOption {
default = "0.0.0.0";
type = types.str;
description = "Specifies the bind address on which the buildbot HTTP interface listens.";
};
buildbotUrl = mkOption {
default = "http://localhost:8010/";
type = types.str;
description = "Specifies the Buildbot URL.";
};
title = mkOption {
default = "Buildbot";
type = types.str;
description = "Specifies the Buildbot Title.";
};
titleUrl = mkOption {
default = "Buildbot";
type = types.str;
description = "Specifies the Buildbot TitleURL.";
};
dbUrl = mkOption {
default = "sqlite:///state.sqlite";
type = types.str;
description = "Specifies the database connection string.";
};
port = mkOption {
default = 8010;
type = types.int;
description = "Specifies port number on which the buildbot HTTP interface listens.";
};
package = mkOption {
type = types.package;
default = pkgs.buildbot-ui;
description = ''
Package to use for buildbot.
<literal>buildbot-full</literal> is required in order to use local workers.
'';
example = pkgs.buildbot-full;
};
packages = mkOption {
default = [ ];
example = [ pkgs.git ];
type = types.listOf types.package;
description = "Packages to add to PATH for the buildbot process.";
};
};
};
config = mkIf cfg.enable {
users.extraGroups = optional (cfg.group == "buildbot") {
name = "buildbot";
};
users.extraUsers = optional (cfg.user == "buildbot") {
name = "buildbot";
description = "buildbot user";
isNormalUser = true;
createHome = true;
home = cfg.home;
group = cfg.group;
extraGroups = cfg.extraGroups;
useDefaultShell = true;
};
systemd.services.buildbot-master = {
description = "Buildbot Continuous Integration Server";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
path = cfg.packages;
serviceConfig = {
Type = "forking";
User = cfg.user;
Group = cfg.group;
WorkingDirectory = cfg.home;
ExecStart = "${cfg.package}/bin/buildbot start ${cfg.buildbotDir}";
};
preStart = ''
mkdir -vp ${cfg.buildbotDir}
chown -c ${cfg.user}:${cfg.group} ${cfg.buildbotDir}
ln -sf ${configFile} ${cfg.buildbotDir}/master.cfg
${cfg.package}/bin/buildbot create-master ${cfg.buildbotDir}
'';
postStart = ''
until [[ $(${pkgs.curl}/bin/curl -s --head -w '\n%{http_code}' http://localhost:${toString cfg.port} | tail -n1) =~ ^(200|403)$ ]]; do
sleep 1
done
'';
};
};
}

View File

@ -162,7 +162,7 @@ in {
if [ "$(id -u)" = 0 ]; then
chown ${cfg.user}:${cfg.group} `dirname ${cfg.uriFile}`;
(-f ${cfg.uriFile} && chown ${cfg.user}:${cfg.group} ${cfg.uriFile}) || true
(test -f ${cfg.uriFile} && chown ${cfg.user}:${cfg.group} ${cfg.uriFile}) || true
chown ${cfg.user}:${cfg.group} ${cfg.databaseDir}
chown ${cfg.user}:${cfg.group} ${cfg.viewIndexDir}
chown ${cfg.user}:${cfg.group} ${cfg.configFile}

View File

@ -86,6 +86,12 @@ in {
};
config = mkIf cfg.enable {
assertions = [
{ assertion = cfg.users != [];
message = "services.psd.users must contain at least one user";
}
];
systemd = {
services = {
psd = {

View File

@ -64,7 +64,7 @@ in
};
worldPath = mkOption {
type = types.path;
type = types.nullOr types.path;
default = null;
description = ''
The path to the world file (<literal>.wld</literal>) which should be loaded.
@ -126,8 +126,8 @@ in
User = "terraria";
Type = "oneshot";
RemainAfterExit = true;
ExecStart = "${pkgs.tmux.bin}/bin/tmux -S /var/lib/terraria/terraria.sock new -d ${pkgs.terraria-server}/bin/TerrariaServer ${concatStringsSep " " flags}";
ExecStop = "${pkgs.tmux.bin}/bin/tmux -S /var/lib/terraria/terraria.sock send-keys Enter \"exit\" Enter";
ExecStart = "${getBin pkgs.tmux}/bin/tmux -S /var/lib/terraria/terraria.sock new -d ${pkgs.terraria-server}/bin/TerrariaServer ${concatStringsSep " " flags}";
ExecStop = "${getBin pkgs.tmux}/bin/tmux -S /var/lib/terraria/terraria.sock send-keys Enter \"exit\" Enter";
};
postStart = ''

View File

@ -100,6 +100,12 @@ in
config = mkIf cfg.enable {
assertions =
[ { assertion = !config.services.rsyslogd.enable;
message = "rsyslogd conflicts with syslogd";
}
];
environment.systemPackages = [ pkgs.sysklogd ];
services.syslogd.extraParams = optional cfg.enableNetworkInput "-r";

View File

@ -20,17 +20,29 @@ in {
description = "Whether to enable the postsrsd SRS server for Postfix.";
};
domain = mkOption {
type = types.str;
description = "Domain name for rewrite";
};
secretsFile = mkOption {
type = types.path;
default = "/var/lib/postsrsd/postsrsd.secret";
description = "Secret keys used for signing and verification";
};
domain = mkOption {
type = types.str;
description = "Domain name for rewrite";
};
separator = mkOption {
type = types.enum ["-" "=" "+"];
default = "=";
description = "First separator character in generated addresses";
};
# bindAddress = mkOption { # uncomment once 1.5 is released
# type = types.str;
# default = "127.0.0.1";
# description = "Socket listen address";
# };
forwardPort = mkOption {
type = types.int;
default = 10001;
@ -43,6 +55,18 @@ in {
description = "Port for the reverse SRS lookup";
};
timeout = mkOption {
type = types.int;
default = 1800;
description = "Timeout for idle client connections in seconds";
};
excludeDomains = mkOption {
type = types.listOf types.str;
default = [];
description = "Origin domains to exclude from rewriting in addition to primary domain";
};
user = mkOption {
type = types.str;
default = "postsrsd";
@ -86,7 +110,7 @@ in {
path = [ pkgs.coreutils ];
serviceConfig = {
ExecStart = ''${pkgs.postsrsd}/sbin/postsrsd "-s${cfg.secretsFile}" "-d${cfg.domain}" -f${toString cfg.forwardPort} -r${toString cfg.reversePort}'';
ExecStart = ''${pkgs.postsrsd}/sbin/postsrsd "-s${cfg.secretsFile}" "-d${cfg.domain}" -a${cfg.separator} -f${toString cfg.forwardPort} -r${toString cfg.reversePort} -t${toString cfg.timeout} "-X${concatStringsSep "," cfg.excludeDomains}"'';
User = cfg.user;
Group = cfg.group;
PermissionsStartOnly = true;

View File

@ -108,7 +108,8 @@ in {
};
preStart = ''
mkdir -m 0700 -p ${cfg.dataDir}
mkdir -p ${cfg.dataDir}
chmod 755 ${cfg.dataDir}
install -D /dev/null ${cfg.pidFile}
if [ "$(id -u)" = 0 ]; then
chown -R ${cfg.user} ${cfg.dataDir};

View File

@ -1,76 +1,68 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkEnableOption mkIf mkOption singleton types;
inherit (pkgs) bird;
cfg = config.services.bird;
inherit (lib) mkEnableOption mkIf mkOption types;
configFile = pkgs.writeText "bird.conf" ''
${cfg.config}
generic = variant:
let
cfg = config.services.${variant};
pkg = pkgs.${variant};
birdc = if variant == "bird6" then "birdc6" else "birdc";
configFile = pkgs.stdenv.mkDerivation {
name = "${variant}.conf";
text = cfg.config;
preferLocalBuild = true;
buildCommand = ''
echo -n "$text" > $out
${pkg}/bin/${variant} -d -p -c $out
'';
in
{
};
in {
###### interface
options = {
services.bird = {
services.${variant} = {
enable = mkEnableOption "BIRD Internet Routing Daemon";
config = mkOption {
type = types.string;
type = types.lines;
description = ''
BIRD Internet Routing Daemon configuration file.
<link xlink:href='http://bird.network.cz/'/>
'';
};
user = mkOption {
type = types.string;
default = "bird";
description = ''
BIRD Internet Routing Daemon user.
'';
};
group = mkOption {
type = types.string;
default = "bird";
description = ''
BIRD Internet Routing Daemon group.
'';
};
};
};
###### implementation
config = mkIf cfg.enable {
users.extraUsers = singleton {
name = cfg.user;
description = "BIRD Internet Routing Daemon user";
uid = config.ids.uids.bird;
group = cfg.group;
};
users.extraGroups = singleton {
name = cfg.group;
gid = config.ids.gids.bird;
};
systemd.services.bird = {
systemd.services.${variant} = {
description = "BIRD Internet Routing Daemon";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${bird}/bin/bird -d -c ${configFile} -s /var/run/bird.ctl -u ${cfg.user} -g ${cfg.group}";
Type = "forking";
Restart = "on-failure";
ExecStart = "${pkg}/bin/${variant} -c ${configFile} -u ${variant} -g ${variant}";
ExecReload = "${pkg}/bin/${birdc} configure";
ExecStop = "${pkg}/bin/${birdc} down";
CapabilityBoundingSet = [ "CAP_CHOWN" "CAP_FOWNER" "CAP_DAC_OVERRIDE" "CAP_SETUID" "CAP_SETGID"
# see bird/sysdep/linux/syspriv.h
"CAP_NET_BIND_SERVICE" "CAP_NET_BROADCAST" "CAP_NET_ADMIN" "CAP_NET_RAW" ];
ProtectSystem = "full";
ProtectHome = "yes";
SystemCallFilter="~@cpu-emulation @debug @keyring @module @mount @obsolete @raw-io";
MemoryDenyWriteExecute = "yes";
};
};
users = {
extraUsers.${variant} = {
description = "BIRD Internet Routing Daemon user";
group = "${variant}";
};
extraGroups.${variant} = {};
};
};
};
inherit (config.services) bird bird6;
in {
imports = [(generic "bird") (generic "bird6")];
}

View File

@ -31,7 +31,7 @@ in
};
servers = mkOption {
default = config.services.ntp.servers;
default = config.networking.timeServers;
description = ''
The set of NTP servers from which to synchronise.
'';
@ -102,7 +102,7 @@ in
home = stateDir;
};
systemd.services.ntpd.enable = mkForce false;
systemd.services.timesyncd.enable = mkForce false;
systemd.services.chronyd =
{ description = "chrony NTP daemon";

View File

@ -22,7 +22,7 @@ in
config = mkOption {
default = null;
type = types.str;
type = types.nullOr types.str;
description = ''
Contents of Dante's configuration file
NOTE: user.privileged/user.unprivileged are set by the service

View File

@ -51,6 +51,7 @@ in {
before = [ "network-pre.target" ];
wants = [ "network-pre.target" ];
wantedBy = [ "multi-user.target" ];
reloadIfChanged = true;
serviceConfig = {
Type="oneshot";
RemainAfterExit = "yes";

View File

@ -34,7 +34,7 @@ in
services.ntp = {
enable = mkOption {
default = !config.boot.isContainer;
default = false;
description = ''
Whether to synchronise your machine's time using the NTP
protocol.
@ -42,12 +42,7 @@ in
};
servers = mkOption {
default = [
"0.nixos.pool.ntp.org"
"1.nixos.pool.ntp.org"
"2.nixos.pool.ntp.org"
"3.nixos.pool.ntp.org"
];
default = config.networking.timeServers;
description = ''
The set of NTP servers from which to synchronise.
'';
@ -70,6 +65,7 @@ in
# Make tools such as ntpq available in the system path.
environment.systemPackages = [ pkgs.ntp ];
services.timesyncd.enable = mkForce false;
users.extraUsers = singleton
{ name = ntpUser;

View File

@ -34,7 +34,7 @@ with lib;
assertions = singleton
{ assertion = !(config.services.openfire.usePostgreSQL -> config.services.postgresql.enable);
message = "OpenFire assertion failed.";
message = "OpenFire configured to use PostgreSQL but services.postgresql.enable is not enabled.";
};
systemd.services.openfire = {

View File

@ -49,7 +49,7 @@ in
###### implementation
config = mkIf cfg.enable {
services.ntp.enable = mkForce false;
services.timesyncd.enable = mkForce false;
# Add ntpctl to the environment for status checking
environment.systemPackages = [ package ];

View File

@ -31,18 +31,22 @@ let
default = null;
example = "rVXs/Ni9tu3oDBLS4hOyAUAa1qTWVA3loR8eL20os3I=";
type = with types; nullOr str;
description = ''base64 preshared key generated by wg genpsk. Optional,
description = ''
base64 preshared key generated by wg genpsk. Optional,
and may be omitted. This option adds an additional layer of
symmetric-key cryptography to be mixed into the already existing
public-key cryptography, for post-quantum resistance.'';
public-key cryptography, for post-quantum resistance.
'';
};
listenPort = mkOption {
default = null;
type = with types; nullOr int;
example = 51820;
description = ''16-bit port for listening. Optional; if not specified,
automatically generated based on interface name.'';
description = ''
16-bit port for listening. Optional; if not specified,
automatically generated based on interface name.
'';
};
preSetup = mkOption {
@ -51,8 +55,9 @@ let
''];
default = [];
type = with types; listOf str;
description = ''A list of commands called at the start of the interface
setup.'';
description = ''
A list of commands called at the start of the interface setup.
'';
};
postSetup = mkOption {

View File

@ -75,7 +75,7 @@ let
'') cfg.listenAddresses}
Listen /var/run/cups/cups.sock
SetEnv PATH ${bindir}/lib/cups/filter:${bindir}/bin
SetEnv PATH /var/lib/cups/path/lib/cups/filter:/var/lib/cups/path/bin
DefaultShared ${if cfg.defaultShared then "Yes" else "No"}
@ -310,6 +310,13 @@ in
for i in *; do
[ ! -e "/var/lib/cups/$i" ] && ln -s "${rootdir}/etc/cups/$i" "/var/lib/cups/$i"
done
#update path reference
[ -L /var/lib/cups/path ] && \
rm /var/lib/cups/path
[ ! -e /var/lib/cups/path ] && \
ln -s ${bindir} /var/lib/cups/path
${optionalString cfg.gutenprint ''
if [ -d /var/lib/cups/ppd ]; then
${gutenprint}/bin/cups-genppdupdate -p /var/lib/cups/ppd

View File

@ -143,7 +143,7 @@ in
services.fail2ban.jails.ssh-iptables =
''
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
action = iptables-multiport[name=SSH, port="${concatMapStringsSep "," (p: toString p) config.services.openssh.ports}", protocol=tcp]
maxretry = 5
'';

View File

@ -4,6 +4,14 @@ with lib;
let
# Remove packages of ys from xs, based on their names
removePackagesByName = xs: ys:
let
pkgName = drv: (builtins.parseDrvName drv.name).name;
ysNames = map pkgName ys;
in
filter (x: !(builtins.elem (pkgName x) ysNames)) xs;
xcfg = config.services.xserver;
cfg = xcfg.desktopManager.lxqt;
@ -18,8 +26,14 @@ in
description = "Enable the LXQt desktop manager";
};
environment.lxqt.excludePackages = mkOption {
default = [];
example = literalExample "[ pkgs.lxqt.qterminal ]";
type = types.listOf types.package;
description = "Which LXQt packages to exclude from the default environment";
};
};
config = mkIf (xcfg.enable && cfg.enable) {
@ -31,47 +45,12 @@ in
'';
};
environment.systemPackages = [
pkgs.kde5.kwindowsystem # provides some QT5 plugins needed by lxqt-panel
pkgs.kde5.libkscreen # provides plugins for screen management software
pkgs.kde5.oxygen-icons5 # default icon theme
pkgs.libfm
pkgs.libfm-extra
pkgs.lxmenu-data
pkgs.lxqt.compton-conf
pkgs.lxqt.libfm-qt
pkgs.lxqt.liblxqt
pkgs.lxqt.libqtxdg
pkgs.lxqt.libsysstat
pkgs.lxqt.lximage-qt
pkgs.lxqt.lxqt-about
pkgs.lxqt.lxqt-admin
pkgs.lxqt.lxqt-common
pkgs.lxqt.lxqt-config
pkgs.lxqt.lxqt-globalkeys
pkgs.lxqt.lxqt-l10n
pkgs.lxqt.lxqt-notificationd
pkgs.lxqt.lxqt-openssh-askpass
pkgs.lxqt.lxqt-panel
pkgs.lxqt.lxqt-policykit
pkgs.lxqt.lxqt-powermanagement
pkgs.lxqt.lxqt-qtplugin
pkgs.lxqt.lxqt-runner
pkgs.lxqt.lxqt-session
pkgs.lxqt.lxqt-sudo
pkgs.lxqt.obconf-qt
pkgs.lxqt.pavucontrol-qt
pkgs.lxqt.pcmanfm-qt
pkgs.lxqt.qlipper
pkgs.lxqt.qps
pkgs.lxqt.qterminal
pkgs.lxqt.qtermwidget
pkgs.lxqt.screengrab
pkgs.menu-cache
pkgs.openbox # default window manager
pkgs.qt5.qtsvg # provides QT5 plugins for svg icons
pkgs.xscreensaver
];
environment.systemPackages =
pkgs.lxqt.preRequisitePackages ++
pkgs.lxqt.corePackages ++
(removePackagesByName
pkgs.lxqt.optionalPackages
config.environment.lxqt.excludePackages);
# Link some extra directories in /run/current-system/software/share
environment.pathsToLink = [
@ -80,5 +59,8 @@ in
"/share/lxqt"
];
environment.variables.GIO_EXTRA_MODULES = [ "${pkgs.gvfs}/lib/gio/modules" ];
};
}

View File

@ -32,6 +32,7 @@ in {
services.urxvtd = {
description = "urxvt terminal daemon";
path = [ pkgs.xsel ];
serviceConfig = {
ExecStart = "${pkgs.rxvt_unicode-with-plugins}/bin/urxvtd -o";
Environment = "RXVT_SOCKET=%t/urxvtd-socket";

View File

@ -44,10 +44,10 @@ in
copyKernels = mkOption {
default = false;
type = types.bool;
description = "
description = ''
Whether copy the necessary boot files into /boot, so
/nix/store is not needed by the boot loader.
";
'';
};
};

View File

@ -165,6 +165,11 @@ let
'';
};
extraConfig = mkOption {
default = "";
type = types.lines;
description = "Extra configuration append to unit";
};
};
linkOptions = commonNetworkOptions // {
@ -515,6 +520,8 @@ let
''
[Link]
${attrsToSection def.linkConfig}
${def.extraConfig}
'';
};
@ -565,6 +572,7 @@ let
${attrsToSection def.bondConfig}
''}
${def.extraConfig}
'';
};
@ -603,9 +611,14 @@ let
${attrsToSection x.routeConfig}
'')}
${def.extraConfig}
'';
};
unitFiles = map (name: {
target = "systemd/network/${name}";
source = "${cfg.units.${name}.unit}/${name}";
}) (attrNames cfg.units);
in
{
@ -657,17 +670,15 @@ in
systemd.additionalUpstreamSystemUnits =
[ "systemd-networkd.service" "systemd-networkd-wait-online.service" ];
systemd.network.units =
mapAttrs' (n: v: nameValuePair "${n}.link" (linkToUnit n v)) cfg.links
systemd.network.units = mapAttrs' (n: v: nameValuePair "${n}.link" (linkToUnit n v)) cfg.links
// mapAttrs' (n: v: nameValuePair "${n}.netdev" (netdevToUnit n v)) cfg.netdevs
// mapAttrs' (n: v: nameValuePair "${n}.network" (networkToUnit n v)) cfg.networks;
environment.etc."systemd/network".source =
generateUnits "network" cfg.units [] [];
environment.etc = unitFiles;
systemd.services.systemd-networkd = {
wantedBy = [ "multi-user.target" ];
restartTriggers = [ config.environment.etc."systemd/network".source ];
restartTriggers = map (f: f.source) (unitFiles);
};
systemd.services.systemd-networkd-wait-online = {
@ -687,8 +698,5 @@ in
};
services.resolved.enable = mkDefault true;
services.timesyncd.enable = mkDefault config.services.ntp.enable;
};
}

View File

@ -6,14 +6,21 @@ with lib;
options = {
services.timesyncd.enable = mkOption {
default = false;
services.timesyncd = {
enable = mkOption {
default = !config.boot.isContainer;
type = types.bool;
description = ''
Enables the systemd NTP client daemon.
'';
};
servers = mkOption {
default = config.networking.timeServers;
description = ''
The set of NTP servers from which to synchronise.
'';
};
};
};
config = mkIf config.services.timesyncd.enable {
@ -30,8 +37,6 @@ with lib;
NTP=${concatStringsSep " " config.services.ntp.servers}
'';
systemd.services.ntpd.enable = false;
users.extraUsers.systemd-timesync.uid = config.ids.uids.systemd-timesync;
users.extraGroups.systemd-timesync.gid = config.ids.gids.systemd-timesync;

View File

@ -9,6 +9,15 @@ let kernel = config.boot.kernelPackages.kernel; in
{
# This option is a dummy that if used in conjunction with
# modules/virtualisation/qemu-vm.nix gets merged with the same option defined
# there and only is declared here because some modules use
# test-instrumentation.nix but not qemu-vm.nix.
#
# One particular example are the boot tests where we want instrumentation
# within the images but not other stuff like setting up 9p filesystems.
options.virtualisation.qemu.program = mkOption { type = types.path; };
config = {
systemd.services.backdoor =
@ -110,6 +119,9 @@ let kernel = config.boot.kernelPackages.kernel; in
networking.usePredictableInterfaceNames = false;
# Make sure we use a patched QEMU that ignores file ownership.
virtualisation.qemu.program = "${pkgs.qemu_test}/bin/qemu-kvm";
# Make it easy to log in as root when running the test interactively.
users.extraUsers.root.initialHashedPassword = mkOverride 150 "";

View File

@ -476,6 +476,17 @@ in
'';
};
macvlans = mkOption {
type = types.listOf types.str;
default = [];
example = [ "eth1" "eth2" ];
description = ''
The list of host interfaces from which macvlans will be
created. For each interface specified, a macvlan interface
will be created and moved to the container.
'';
};
extraVeths = mkOption {
type = with types; attrsOf (submodule { options = networkOptions; });
default = {};
@ -654,6 +665,7 @@ in
''}
''}
INTERFACES="${toString cfg.interfaces}"
MACVLANS="${toString cfg.macvlans}"
${optionalString cfg.autoStart ''
AUTO_START=1
''}
@ -664,7 +676,7 @@ in
# Generate /etc/hosts entries for the containers.
networking.extraHosts = concatStrings (mapAttrsToList (name: cfg: optionalString (cfg.localAddress != null)
''
${cfg.localAddress} ${name}.containers
${head (splitString "/" cfg.localAddress)} ${name}.containers
'') config.containers);
networking.dhcpcd.denyInterfaces = [ "ve-*" "vb-*" ];

View File

@ -125,7 +125,7 @@ in
169.254.169.254 metadata.google.internal metadata
'';
services.ntp.servers = [ "metadata.google.internal" ];
networking.timeServers = [ "metadata.google.internal" ];
networking.usePredictableInterfaceNames = false;

View File

@ -0,0 +1,54 @@
{ lib }:
with lib;
rec {
# A shell script string helper to get the value of a secret at
# runtime.
getSecret = secretOption:
if secretOption.storage == "fromFile"
then ''$(cat ${secretOption.value})''
else ''${secretOption.value}'';
# A shell script string help to replace at runtime in a file the
# pattern of a secret by its value.
replaceSecret = secretOption: filename: ''
sed -i "s/${secretOption.pattern}/${getSecret secretOption}/g" ${filename}
'';
# This generates an option that can be used to declare secrets which
# can be stored in the nix store, or not. A pattern is written in
# the nix store to represent the secret. The pattern can
# then be overwritten with the value of the secret at runtime.
mkSecretOption = {name, description ? ""}:
mkOption {
description = description;
type = types.submodule ({
options = {
pattern = mkOption {
type = types.str;
default = "##${name}##";
description = "The pattern that represent the secret.";
};
storage = mkOption {
type = types.enum [ "fromNixStore" "fromFile" ];
description = ''
Choose the way the password is provisionned. If
fromNixStore is used, the value is the password and it is
written in the nix store. If fromFile is used, the value
is a path from where the password will be read at
runtime. This is generally used with <link
xlink:href="https://nixos.org/nixops/manual/#opt-deployment.keys">
deployment keys</link> of Nixops.
'';};
value = mkOption {
type = types.str;
description = ''
If the storage is fromNixStore, the value is the password itself,
otherwise it is a path to the file that contains the password.
'';
};
};});
};
}

View File

@ -0,0 +1,220 @@
{ config, lib, pkgs, ... }:
with lib; with import ./common.nix {inherit lib;};
let
cfg = config.virtualisation.openstack.keystone;
keystoneConfTpl = pkgs.writeText "keystone.conf" ''
[DEFAULT]
admin_token = ${cfg.adminToken.pattern}
policy_file=${cfg.package}/etc/policy.json
[database]
connection = "mysql://${cfg.database.user}:${cfg.database.password.pattern}@${cfg.database.host}/${cfg.database.name}"
[paste_deploy]
config_file = ${cfg.package}/etc/keystone-paste.ini
${cfg.extraConfig}
'';
keystoneConf = "/var/lib/keystone/keystone.conf";
in {
options.virtualisation.openstack.keystone = {
package = mkOption {
type = types.package;
example = literalExample "pkgs.keystone";
description = ''
Keystone package to use.
'';
};
enable = mkOption {
default = false;
type = types.bool;
description = ''
Enable Keystone, the OpenStack Identity Service
'';
};
extraConfig = mkOption {
default = "";
type = types.lines;
description = ''
Additional text appended to <filename>keystone.conf</filename>,
the main Keystone configuration file.
'';
};
adminToken = mkSecretOption {
name = "adminToken";
description = ''
This is the admin token used to boostrap keystone,
ie. to provision first resources.
'';
};
bootstrap = {
enable = mkOption {
default = false;
type = types.bool;
description = ''
Bootstrap the Keystone service by creating the service
tenant, an admin account and a public endpoint. This options
provides a ready-to-use admin account. This is only done at
the first Keystone execution by the systemd post start.
Note this option is a helper for setting up development or
testing environments.
'';
};
endpointPublic = mkOption {
type = types.str;
default = "http://localhost:5000/v2.0";
description = ''
The public identity endpoint. The link <link
xlink:href="http://docs.openstack.org/liberty/install-guide-rdo/keystone-services.html">
create keystone endpoint</link> provides more informations
about that.
'';
};
adminUsername = mkOption {
type = types.str;
default = "admin";
description = ''
A keystone admin username.
'';
};
adminPassword = mkSecretOption {
name = "keystoneAdminPassword";
description = ''
The keystone admin user's password.
'';
};
adminTenant = mkOption {
type = types.str;
default = "admin";
description = ''
A keystone admin tenant name.
'';
};
};
database = {
host = mkOption {
type = types.str;
default = "localhost";
description = ''
Host of the database.
'';
};
name = mkOption {
type = types.str;
default = "keystone";
description = ''
Name of the existing database.
'';
};
user = mkOption {
type = types.str;
default = "keystone";
description = ''
The database user. The user must exist and has access to
the specified database.
'';
};
password = mkSecretOption {
name = "mysqlPassword";
description = "The database user's password";};
};
};
config = mkIf cfg.enable {
# Note: when changing the default, make it conditional on
# system.stateVersion to maintain compatibility with existing
# systems!
virtualisation.openstack.keystone.package = mkDefault pkgs.keystone;
users.extraUsers = [{
name = "keystone";
group = "keystone";
uid = config.ids.uids.keystone;
}];
users.extraGroups = [{
name = "keystone";
gid = config.ids.gids.keystone;
}];
systemd.services.keystone-all = {
description = "OpenStack Keystone Daemon";
after = [ "network.target"];
path = [ cfg.package pkgs.mysql pkgs.curl pkgs.pythonPackages.keystoneclient pkgs.gawk ];
wantedBy = [ "multi-user.target" ];
preStart = ''
mkdir -m 755 -p /var/lib/keystone
cp ${keystoneConfTpl} ${keystoneConf};
chown keystone:keystone ${keystoneConf};
chmod 640 ${keystoneConf}
${replaceSecret cfg.database.password keystoneConf}
${replaceSecret cfg.adminToken keystoneConf}
# Initialise the database
${cfg.package}/bin/keystone-manage --config-file=${keystoneConf} db_sync
# Set up the keystone's PKI infrastructure
${cfg.package}/bin/keystone-manage --config-file=${keystoneConf} pki_setup --keystone-user keystone --keystone-group keystone
'';
postStart = optionalString cfg.bootstrap.enable ''
set -eu
# Wait until the keystone is available for use
count=0
while ! curl --fail -s http://localhost:35357/v2.0 > /dev/null
do
if [ $count -eq 30 ]
then
echo "Tried 30 times, giving up..."
exit 1
fi
echo "Keystone not yet started. Waiting for 1 second..."
count=$((count++))
sleep 1
done
# We use the service token to create a first admin user
export OS_SERVICE_ENDPOINT=http://localhost:35357/v2.0
export OS_SERVICE_TOKEN=${getSecret cfg.adminToken}
# If the tenant service doesn't exist, we consider
# keystone is not initialized
if ! keystone tenant-get service
then
keystone tenant-create --name service
keystone tenant-create --name ${cfg.bootstrap.adminTenant}
keystone user-create --name ${cfg.bootstrap.adminUsername} --tenant ${cfg.bootstrap.adminTenant} --pass ${getSecret cfg.bootstrap.adminPassword}
keystone role-create --name admin
keystone role-create --name Member
keystone user-role-add --tenant ${cfg.bootstrap.adminTenant} --user ${cfg.bootstrap.adminUsername} --role admin
keystone service-create --type identity --name keystone
ID=$(keystone service-get keystone | awk '/ id / { print $4 }')
keystone endpoint-create --region RegionOne --service $ID --publicurl ${cfg.bootstrap.endpointPublic} --adminurl http://localhost:35357/v2.0 --internalurl http://localhost:5000/v2.0
fi
'';
serviceConfig = {
PermissionsStartOnly = true; # preStart must be run as root
TimeoutStartSec = "600"; # 10min for initial db migrations
User = "keystone";
Group = "keystone";
ExecStart = "${cfg.package}/bin/keystone-all --config-file=${keystoneConf}";
};
};
};
}

View File

@ -57,7 +57,7 @@ in
boot.kernelModules = [ "prl_tg" "prl_eth" "prl_fs" "prl_fs_freeze" "acpi_memhotplug" ];
services.ntp.enable = false;
services.timesyncd.enable = false;
systemd.services.prltoolsd = {
description = "Parallels Tools' service";

View File

@ -70,7 +70,7 @@ let
'')}
# Start QEMU.
exec ${pkgs.qemu_kvm}/bin/qemu-kvm \
exec ${cfg.qemu.program} \
-name ${vmName} \
-m ${toString config.virtualisation.memorySize} \
${optionalString (pkgs.stdenv.system == "x86_64-linux") "-cpu kvm64"} \
@ -299,6 +299,14 @@ in
};
virtualisation.qemu = {
program = mkOption {
type = types.path;
default = "${pkgs.qemu_kvm}/bin/qemu-kvm";
defaultText = "\${pkgs.qemu_kvm}/bin/qemu-kvm";
example = literalExample "\${pkgs.qemu_test}/bin/qemu-kvm";
description = "The QEMU variant used to start the VM.";
};
options =
mkOption {
type = types.listOf types.unspecified;
@ -470,7 +478,7 @@ in
boot.initrd.luks.devices = mkVMOverride {};
# Don't run ntpd in the guest. It should get the correct time from KVM.
services.ntp.enable = false;
services.timesyncd.enable = false;
system.build.vm = pkgs.runCommand "nixos-vm" { preferLocalBuild = true; }
''

View File

@ -18,5 +18,5 @@
services.syslogd.tty = "hvc0";
# Don't run ntpd, since we should get the correct time from Dom0.
services.ntp.enable = false;
services.timesyncd.enable = false;
}

View File

@ -229,6 +229,8 @@ in rec {
tests.containers-extra_veth = callTest tests/containers-extra_veth.nix {};
tests.containers-physical_interfaces = callTest tests/containers-physical_interfaces.nix {};
tests.containers-tmpfs = callTest tests/containers-tmpfs.nix {};
tests.containers-hosts = callTest tests/containers-hosts.nix {};
tests.containers-macvlans = callTest tests/containers-macvlans.nix {};
tests.docker = hydraJob (import tests/docker.nix { system = "x86_64-linux"; });
tests.dnscrypt-proxy = callTest tests/dnscrypt-proxy.nix { system = "x86_64-linux"; };
tests.ecryptfs = callTest tests/ecryptfs.nix {};
@ -256,6 +258,7 @@ in rec {
tests.kde5 = callTest tests/kde5.nix {};
tests.keymap = callSubTests tests/keymap.nix {};
tests.initrdNetwork = callTest tests/initrd-network.nix {};
tests.keystone = callTest tests/keystone.nix {};
tests.kubernetes = hydraJob (import tests/kubernetes.nix { system = "x86_64-linux"; });
tests.latestKernel.login = callTest tests/login.nix { latestKernel = true; };
#tests.lightdm = callTest tests/lightdm.nix {};

View File

@ -0,0 +1,52 @@
# Test for NixOS' container support.
import ./make-test.nix ({ pkgs, ...} : {
name = "containers-hosts";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ montag451 ];
};
machine =
{ config, pkgs, lib, ... }:
{
virtualisation.memorySize = 256;
virtualisation.vlans = [];
networking.bridges.br0.interfaces = [];
networking.interfaces.br0 = {
ip4 = [ { address = "10.11.0.254"; prefixLength = 24; } ];
};
# Force /etc/hosts to be the only source for host name resolution
environment.etc."nsswitch.conf".text = lib.mkForce ''
hosts: files
'';
containers.simple = {
autoStart = true;
privateNetwork = true;
localAddress = "10.10.0.1";
hostAddress = "10.10.0.254";
config = {};
};
containers.netmask = {
autoStart = true;
privateNetwork = true;
hostBridge = "br0";
localAddress = "10.11.0.1/24";
config = {};
};
};
testScript = ''
startAll;
$machine->waitForUnit("default.target");
# Ping the containers using the entries added in /etc/hosts
$machine->succeed("ping -n -c 1 simple.containers");
$machine->succeed("ping -n -c 1 netmask.containers");
'';
})

View File

@ -0,0 +1,82 @@
# Test for NixOS' container support.
let
# containers IP on VLAN 1
containerIp1 = "192.168.1.253";
containerIp2 = "192.168.1.254";
in
import ./make-test.nix ({ pkgs, ...} : {
name = "containers-macvlans";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ montag451 ];
};
nodes = {
machine1 =
{ config, pkgs, lib, ... }:
{
virtualisation.memorySize = 256;
virtualisation.vlans = [ 1 ];
# To be able to ping containers from the host, it is necessary
# to create a macvlan on the host on the VLAN 1 network.
networking.macvlans.mv-eth1-host = {
interface = "eth1";
mode = "bridge";
};
networking.interfaces.eth1.ip4 = lib.mkForce [];
networking.interfaces.mv-eth1-host = {
ip4 = [ { address = "192.168.1.1"; prefixLength = 24; } ];
};
containers.test1 = {
autoStart = true;
macvlans = [ "eth1" ];
config = {
networking.interfaces.mv-eth1 = {
ip4 = [ { address = containerIp1; prefixLength = 24; } ];
};
};
};
containers.test2 = {
autoStart = true;
macvlans = [ "eth1" ];
config = {
networking.interfaces.mv-eth1 = {
ip4 = [ { address = containerIp2; prefixLength = 24; } ];
};
};
};
};
machine2 =
{ config, pkgs, ... }:
{
virtualisation.memorySize = 256;
virtualisation.vlans = [ 1 ];
};
};
testScript = ''
startAll;
$machine1->waitForUnit("default.target");
$machine2->waitForUnit("default.target");
# Ping between containers to check that macvlans are created in bridge mode
$machine1->succeed("nixos-container run test1 -- ping -n -c 1 ${containerIp2}");
# Ping containers from the host (machine1)
$machine1->succeed("ping -n -c 1 ${containerIp1}");
$machine1->succeed("ping -n -c 1 ${containerIp2}");
# Ping containers from the second machine to check that containers are reachable from the outside
$machine2->succeed("ping -n -c 1 ${containerIp1}");
$machine2->succeed("ping -n -c 1 ${containerIp2}");
'';
})

View File

@ -8,7 +8,9 @@ import ./make-test.nix ({ pkgs, ...} : {
machine = { config, pkgs, ... }:
{ security.grsecurity.enable = true;
boot.kernel.sysctl."kernel.grsecurity.audit_mount" = 0;
boot.kernel.sysctl."kernel.grsecurity.deter_bruteforce" = 0;
networking.useDHCP = false;
};
testScript = ''
@ -20,16 +22,14 @@ import ./make-test.nix ({ pkgs, ...} : {
subtest "paxtest", sub {
# TODO: running paxtest blackhat hangs the vm
$machine->succeed("${pkgs.paxtest}/lib/paxtest/anonmap") =~ /Killed/ or die;
$machine->succeed("${pkgs.paxtest}/lib/paxtest/execbss") =~ /Killed/ or die;
$machine->succeed("${pkgs.paxtest}/lib/paxtest/execdata") =~ /Killed/ or die;
$machine->succeed("${pkgs.paxtest}/lib/paxtest/execheap") =~ /Killed/ or die;
$machine->succeed("${pkgs.paxtest}/lib/paxtest/execstack") =~ /Killed/ or die;
$machine->succeed("${pkgs.paxtest}/lib/paxtest/mprotanon") =~ /Killed/ or die;
$machine->succeed("${pkgs.paxtest}/lib/paxtest/mprotbss") =~ /Killed/ or die;
$machine->succeed("${pkgs.paxtest}/lib/paxtest/mprotdata") =~ /Killed/ or die;
$machine->succeed("${pkgs.paxtest}/lib/paxtest/mprotheap") =~ /Killed/ or die;
$machine->succeed("${pkgs.paxtest}/lib/paxtest/mprotstack") =~ /Killed/ or die;
my @pax_mustkill = (
"anonmap", "execbss", "execdata", "execheap", "execstack",
"mprotanon", "mprotbss", "mprotdata", "mprotheap", "mprotstack",
);
foreach my $name (@pax_mustkill) {
my $paxtest = "${pkgs.paxtest}/lib/paxtest/" . $name;
$machine->succeed($paxtest) =~ /Killed/ or die
}
};
# tcc -run executes run-time generated code and so allows us to test whether

82
nixos/tests/keystone.nix Normal file
View File

@ -0,0 +1,82 @@
{ system ? builtins.currentSystem }:
with import ../lib/testing.nix { inherit system; };
with pkgs.lib;
let
keystoneMysqlPassword = "keystoneMysqlPassword";
keystoneMysqlPasswordFile = "/var/run/keystoneMysqlPassword";
keystoneAdminPassword = "keystoneAdminPassword";
createKeystoneDb = pkgs.writeText "create-keystone-db.sql" ''
create database keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '${keystoneMysqlPassword}';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '${keystoneMysqlPassword}';
'';
# The admin keystone account
adminOpenstackCmd = "OS_TENANT_NAME=admin OS_USERNAME=admin OS_PASSWORD=${keystoneAdminPassword} OS_AUTH_URL=http://localhost:5000/v3 OS_IDENTITY_API_VERSION=3 openstack";
# The created demo keystone account
demoOpenstackCmd = "OS_TENANT_NAME=demo OS_USERNAME=demo OS_PASSWORD=demo OS_AUTH_URL=http://localhost:5000/v3 OS_IDENTITY_API_VERSION=3 openstack";
in makeTest {
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ lewo ];
};
machine =
{ config, pkgs, ... }:
{
# This is to simulate nixops deployment process.
# https://nixos.org/nixops/manual/#opt-deployment.keys
boot.postBootCommands = "echo ${keystoneMysqlPassword} > ${keystoneMysqlPasswordFile}";
services.mysql.enable = true;
services.mysql.initialScript = createKeystoneDb;
virtualisation = {
openstack.keystone = {
enable = true;
# Check if we can get the secret from a file
database.password = {
value = keystoneMysqlPasswordFile;
storage = "fromFile";
};
adminToken = {
value = "adminToken";
storage = "fromNixStore";
};
bootstrap.enable = true;
# Check if we can get the secret from the store
bootstrap.adminPassword = {
value = keystoneAdminPassword;
storage = "fromNixStore";
};
};
memorySize = 2096;
diskSize = 4 * 1024;
};
environment.systemPackages = with pkgs.pythonPackages; with pkgs; [
openstackclient
];
};
testScript =
''
$machine->waitForUnit("keystone-all.service");
# Verify that admin ccount is working
$machine->succeed("${adminOpenstackCmd} token issue");
# Try to create a new user
$machine->succeed("${adminOpenstackCmd} project create --domain default --description 'Demo Project' demo");
$machine->succeed("${adminOpenstackCmd} user create --domain default --password demo demo");
$machine->succeed("${adminOpenstackCmd} role create user");
$machine->succeed("${adminOpenstackCmd} role add --project demo --user demo user");
# Verify this new account is working
$machine->succeed("${demoOpenstackCmd} token issue");
'';
}

View File

@ -5,11 +5,11 @@
stdenv.mkDerivation rec {
name = "moc-${version}";
version = "2.5.1";
version = "2.5.2";
src = fetchurl {
url = "http://ftp.daper.net/pub/soft/moc/stable/moc-${version}.tar.bz2";
sha256 = "1wn4za08z64bhsgfhr9c0crfyvy8c3b6a337wx7gz19am5srqh8v";
sha256 = "026v977kwb0wbmlmf6mnik328plxg8wykfx9ryvqhirac0aq39pk";
};
nativeBuildInputs = [ pkgconfig ];

View File

@ -0,0 +1,43 @@
{ stdenv, fetchFromGitHub, lv2, pkgconfig, mesa, cairo, pango, libjack2 }:
let
name = "sisco.lv2-${version}";
version = "0.7.0";
robtkVersion = "80a2585253a861c81f0bfb7e4579c75f5c73af89";
robtkName = "robtk-${robtkVersion}";
src = fetchFromGitHub {
owner = "x42";
repo = "sisco.lv2";
rev = "v${version}";
sha256 = "1r6g29yqbdqgkh01x6d3nvmvc58rk2dp94fd0qyyizq37a1qplj1";
};
robtkSrc = fetchFromGitHub {
owner = "x42";
repo = "robtk";
rev = robtkVersion;
sha256 = "0gk16nrvnrffqqw0yd015kja9wkgbzvb648bl1pagriabhznhfxl";
};
in
stdenv.mkDerivation rec {
inherit name;
srcs = [ src robtkSrc ];
sourceRoot = "sisco.lv2-${src.rev}-src";
buildInputs = [ pkgconfig lv2 pango cairo libjack2 mesa ];
postUnpack = "chmod u+w -R ${robtkName}-src; mv ${robtkName}-src/* ${sourceRoot}/robtk";
sisco_VERSION = version;
preConfigure = "makeFlagsArray=(PREFIX=$out)";
meta = with stdenv.lib; {
description = "Simple audio oscilloscope with variable time scale, triggering, cursors and numeric readout in LV2 plugin format";
homepage = http://x42.github.io/sisco.lv2/;
license = licenses.gpl2;
maintainers = [ maintainers.e-user ];
platforms = platforms.linux;
};
}

View File

@ -10,9 +10,15 @@
, gnutar
, gzip
, jdk
, fontconfig
, freetype
, libpulseaudio
, libX11
, libXext
, libXi
, libXrandr
, libXrender
, libXtst
, makeWrapper
, pciutils
, pkgsi686Linux
@ -27,8 +33,8 @@
let
version = "2.1.3.0";
build = "143.3101438";
version = "2.2.3.0";
build = "145.3537739";
androidStudio = stdenv.mkDerivation {
name = "android-studio";
@ -75,11 +81,23 @@ let
# For Android emulator
libpulseaudio
libX11
libXext
libXrender
libXtst
libXi
freetype
fontconfig
]}" --set QT_XKB_CONFIG_ROOT "${xkeyboard_config}/share/X11/xkb"
'';
src = fetchurl {
url = "https://dl.google.com/dl/android/studio/ide-zips/${version}/android-studio-ide-${build}-linux.zip";
sha256 = "1xlz3ibqrm4ckw4lgbkzbxvpgg0y8hips9b54p4d15f34i0r8bvj";
sha256 = "10fmffkvvbnmgjxb4rq7rjwnn16jp5phw6div4n7hh2ad6spf8wq";
};
meta = {
description = "The Official IDE for Android";
homepage = https://developer.android.com/studio/index.html;
license = stdenv.lib.licenses.asl20;
platforms = [ "x86_64-linux" ];
};
};

View File

@ -619,10 +619,10 @@
el-search = callPackage ({ elpaBuild, emacs, fetchurl, lib, stream }:
elpaBuild {
pname = "el-search";
version = "1.1.2";
version = "1.2";
src = fetchurl {
url = "https://elpa.gnu.org/packages/el-search-1.1.2.tar";
sha256 = "1cav55nx1045c3xasi5d76yyqi68ygp9dpqv9bazrqgcpsmw6y8b";
url = "https://elpa.gnu.org/packages/el-search-1.2.tar";
sha256 = "0sz78kn9nx390aq5wqz174p8ppw987rzsh892ly166qz4ikwys5a";
};
packageRequires = [ emacs stream ];
meta = {
@ -967,6 +967,19 @@
license = lib.licenses.free;
};
}) {};
json-mode = callPackage ({ elpaBuild, emacs, fetchurl, lib }: elpaBuild {
pname = "json-mode";
version = "0.1";
src = fetchurl {
url = "https://elpa.gnu.org/packages/json-mode-0.1.el";
sha256 = "025bwpx7nc1qhdyf2yaqjdr6x1qr6q45776yvy427xdh4nbk054l";
};
packageRequires = [ emacs ];
meta = {
homepage = "https://elpa.gnu.org/packages/json-mode.html";
license = lib.licenses.free;
};
}) {};
jumpc = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "jumpc";
version = "3.0";
@ -1351,10 +1364,10 @@
}) {};
org = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "org";
version = "20161118";
version = "20161214";
src = fetchurl {
url = "https://elpa.gnu.org/packages/org-20161118.tar";
sha256 = "1w9g8r08kaiw9f4fjsj0hbffzq85rj734j5lxvbaafbnz7dbklk1";
url = "https://elpa.gnu.org/packages/org-20161214.tar";
sha256 = "0pa9d0l6axif5wlzi7lvxl0fpjwwvc79cy9d37z7md4hxyjdvwzm";
};
packageRequires = [];
meta = {

File diff suppressed because it is too large Load Diff

View File

@ -1456,6 +1456,27 @@
license = lib.licenses.free;
};
}) {};
apib-mode = callPackage ({ emacs, fetchFromGitHub, fetchurl, lib, markdown-mode, melpaBuild }:
melpaBuild {
pname = "apib-mode";
version = "0.6";
src = fetchFromGitHub {
owner = "w-vi";
repo = "apib-mode";
rev = "18aebab7cd61b9d296b7d5d2de0c828e2058c906";
sha256 = "0sj948j4s26sxxandjzjjzmjqma7vf86msyyi23gsljy1q28vwlf";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/dc2ebb04f975d8226a76260895399c937d6a1940/recipes/apib-mode";
sha256 = "0y3n0xmyc4gkypq07v4sp0i6291qaj2m13zkg6mxp61zm669v2fb";
name = "apib-mode";
};
packageRequires = [ emacs markdown-mode ];
meta = {
homepage = "https://melpa.org/#/apib-mode";
license = lib.licenses.free;
};
}) {};
apples-mode = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "apples-mode";
@ -2452,12 +2473,12 @@
bind-map = callPackage ({ emacs, fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "bind-map";
version = "1.1.0";
version = "1.1.1";
src = fetchFromGitHub {
owner = "justbur";
repo = "emacs-bind-map";
rev = "ffe5e636178ab9878fa8213fd1a1d4862ccb3d5f";
sha256 = "1h07s8g4vpq6c8sl5m6vxvd598iks160bksv0wn51680gh05f0pa";
rev = "bf4181e3a41463684adfffc6c5c305b30480e30f";
sha256 = "0vrk17yg3jbww92p433p64ijmjf7cjg2wmzi9w418235w1xdfzz8";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/f58800af5965a6e7c9314aa00e971196ea0d036e/recipes/bind-map";
@ -2788,12 +2809,12 @@
bui = callPackage ({ dash, emacs, fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "bui";
version = "1.0";
version = "1.0.1";
src = fetchFromGitHub {
owner = "alezost";
repo = "bui.el";
rev = "c08d91b2d314b52c9ca5c2d5be7a7b2367b68162";
sha256 = "104q089cyy0m0hkdnvblss884npc4bv5xf03qr35x3s3573lxh4a";
rev = "70ea295ec04cb34e383dc7d62927452410876999";
sha256 = "1whpln3zibqxnszvrm9chsaaxxxfb0kg3vvfy6j4drrjy5ah2vky";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/38b7c9345de75a707b4a73e8bb8e2f213e4fd739/recipes/bui";
@ -3909,6 +3930,27 @@
license = lib.licenses.free;
};
}) {};
clues-theme = callPackage ({ emacs, fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "clues-theme";
version = "1.0.1";
src = fetchFromGitHub {
owner = "jasonm23";
repo = "emacs-clues-theme";
rev = "abd61f2b7f3e98de58ca26e6d1230e70c6406cc7";
sha256 = "118k5bnlk9sc2n04saaxjncmc1a4m1wlf2y7xyklpffkazbd0m72";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/bf43125306df445ac829c2edb98dd608bc1407de/recipes/clues-theme";
sha256 = "12g7373js5a2fa0m396k9kjhxvx3qws7n1r435nr9zgwaw7xvciy";
name = "clues-theme";
};
packageRequires = [ emacs ];
meta = {
homepage = "https://melpa.org/#/clues-theme";
license = lib.licenses.free;
};
}) {};
cm-mode = callPackage ({ cl-lib ? null, fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "cm-mode";
@ -4650,6 +4692,27 @@
license = lib.licenses.free;
};
}) {};
company-statistics = callPackage ({ company, emacs, fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "company-statistics";
version = "0.2.2";
src = fetchFromGitHub {
owner = "company-mode";
repo = "company-statistics";
rev = "906d8137224c1a5bd1dc913940e0d32ffecf5523";
sha256 = "0c98kfg7gimjx9cf8dmbk9mdsrybhphshrdl8dhif3zqvn6gxyd7";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/89d05b43f31ec157ce8e7bfba4b7c9119bda6dd2/recipes/company-statistics";
sha256 = "1fl4ldj17m3xhi6xbw3bp9c2jir34xv3jh9daiw8g912fv2l5dcj";
name = "company-statistics";
};
packageRequires = [ company emacs ];
meta = {
homepage = "https://melpa.org/#/company-statistics";
license = lib.licenses.free;
};
}) {};
company-tern = callPackage ({ cl-lib ? null, company, dash, dash-functional, fetchFromGitHub, fetchurl, lib, melpaBuild, s, tern }:
melpaBuild {
pname = "company-tern";
@ -4860,6 +4923,27 @@
license = lib.licenses.free;
};
}) {};
copy-as-format = callPackage ({ cl-lib ? null, fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "copy-as-format";
version = "0.0.1";
src = fetchFromGitHub {
owner = "sshaw";
repo = "copy-as-format";
rev = "e3e130a34d70deaa1ff81fe1e3b3898c1121c107";
sha256 = "1llkzvbw7ci4x20pqaacri82qplsfzxb20xw7v373i5jc83wjv9z";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/42fe8a2113d1c15701abe7a7e0a68e939c3d789b/recipes/copy-as-format";
sha256 = "1yij5mqm0dg6326yms0a2w8gs42kdxq0ih8dhkpdar54r0bk3m8k";
name = "copy-as-format";
};
packageRequires = [ cl-lib ];
meta = {
homepage = "https://melpa.org/#/copy-as-format";
license = lib.licenses.free;
};
}) {};
copyit = callPackage ({ cl-lib ? null, emacs, fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "copyit";
@ -5386,12 +5470,12 @@
cython-mode = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "cython-mode";
version = "0.25.2pre0";
version = "0.25.2";
src = fetchFromGitHub {
owner = "cython";
repo = "cython";
rev = "1b61bc346a8233f6ef7576bbbba0cb8a19c46efb";
sha256 = "1czd04vvl7gzaj1fmzkmd36cpsg22d3gg7sqyfh742ycw1ggkpzz";
rev = "c9bcf1bed3acf367d6deb0c273cf22db0f18dab2";
sha256 = "16yd296n0nh96pnkjpdbdz4i7ga4j961pkzm3cbnika26xwndx03";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/be9bfabe3f79153cb859efc7c3051db244a63879/recipes/cython-mode";
@ -5614,6 +5698,27 @@
license = lib.licenses.free;
};
}) {};
debpaste = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild, xml-rpc }:
melpaBuild {
pname = "debpaste";
version = "0.1.5";
src = fetchFromGitHub {
owner = "alezost";
repo = "debpaste.el";
rev = "6f2a400665062468ebd03a2ce1de2a73d9084958";
sha256 = "1wi70r56pd5z0x4dp4m58p9asq03j74kdm4fi9vai83vsl2z9amq";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/13098bae76a3386689a9bf9c12f25b9a9b15145c/recipes/debpaste";
sha256 = "1vgirfy4vdqkhllnnmcplhwmzqqwca3la5jfvvansykqriwbq9lw";
name = "debpaste";
};
packageRequires = [ xml-rpc ];
meta = {
homepage = "https://melpa.org/#/debpaste";
license = lib.licenses.free;
};
}) {};
decide = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "decide";
@ -6690,35 +6795,14 @@
license = lib.licenses.free;
};
}) {};
dummy-h-mode = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "dummy-h-mode";
version = "1.0.1";
src = fetchFromGitHub {
owner = "yascentur";
repo = "dummy-h-mode-el";
rev = "27ad0991abb53e65d0402ef6c378075e4be0ed2d";
sha256 = "033yqc19xxirbva65lz8hnwxj7pn7fx7dlnf70kq71iqclqa4v25";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/0fda2b54a0ff0b6fc3bd6d20cfcbbf63cae5380f/recipes/dummy-h-mode";
sha256 = "10lzfzq7md6s28w2zzlhswn3d6765g4vqzyjn2q5ms8pd2i4b4in";
name = "dummy-h-mode";
};
packageRequires = [];
meta = {
homepage = "https://melpa.org/#/dummy-h-mode";
license = lib.licenses.free;
};
}) {};
dyalog-mode = callPackage ({ cl-lib ? null, fetchhg, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "dyalog-mode";
version = "0.7";
src = fetchhg {
url = "https://bitbucket.com/harsman/dyalog-mode";
rev = "befb5c650dfd";
sha256 = "154bm7l1ra3l9lj9l1x21qi7f57k46kg24hyalrbawjw3q8c5np2";
rev = "20a2166c8210";
sha256 = "0gz0aiks3f53lqvnrnb33a1clq52ipd3i3miymvkkgspnz3vl12p";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/5b7972602399f9df9139cff177e38653bb0f43ed/recipes/dyalog-mode";
@ -7719,12 +7803,12 @@
elm-mode = callPackage ({ emacs, f, fetchFromGitHub, fetchurl, let-alist, lib, melpaBuild, s }:
melpaBuild {
pname = "elm-mode";
version = "0.20.2";
version = "0.20.3";
src = fetchFromGitHub {
owner = "jcollard";
repo = "elm-mode";
rev = "529c20acb9efda756b69e267d73d33c66fa08293";
sha256 = "08zl1v0k3dnn8g06l3xf1lp31fp60jpk6f3lkczi1l6ns36g11jx";
rev = "29f50a940113d793a21998f3bb414fdd9b0c5daa";
sha256 = "02c7xl9w81140l7p9kywr5qwsdyv92nxdhzqcxjk0r09x7s0cvsk";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/5d1a4d786b137f61ed3a1dd4ec236d0db120e571/recipes/elm-mode";
@ -7853,8 +7937,8 @@
sha256 = "1h0k3nvxy84wjsiiwpxd8xnwnvbiqld26ndv6wmxqpwsjav186ik";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/a36daf2b034653cd73ee2db2bc30df2a5be6f3d1/recipes/elpy";
sha256 = "0n802bh7jj9zgz84xjrxvy33jl6s3hj5dqxafyfr87fank97hb6d";
url = "https://raw.githubusercontent.com/milkypostman/melpa/1d8fcd8745bb15402c9f3b6f4573ea151415237a/recipes/elpy";
sha256 = "1ri3dwnkw005plj1g5grmmq9np41sqk4s2v18pwsvr18ysnq6nnr";
name = "elpy";
};
packageRequires = [
@ -8790,12 +8874,12 @@
erlang = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "erlang";
version = "19.1.6";
version = "19.2";
src = fetchFromGitHub {
owner = "erlang";
repo = "otp";
rev = "2b41d8f318b7e5ec139d42fd2f01a132699be839";
sha256 = "120dqi8h2fwqfmh9g2nmkf153zlglzw9kkddz57xqvqq5arcs72y";
rev = "3473ecd83a7bbe7e0bebb865f25dddb93e3bf10f";
sha256 = "06pr4ydrqpp1skx85zjb1an4kvzv6vacb771vy71k54j7w6lh9hk";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/d9cd526f43981e0826af59cdc4bb702f644781d9/recipes/erlang";
@ -9628,12 +9712,12 @@
evil-opener = callPackage ({ evil, fetchFromGitHub, fetchurl, lib, melpaBuild, opener }:
melpaBuild {
pname = "evil-opener";
version = "0.2.1";
version = "0.2.2";
src = fetchFromGitHub {
owner = "0robustus1";
repo = "opener.el";
rev = "ad3c65a5a748230bf07c18f56b1998ac03e3807a";
sha256 = "178h7sbpgsn0xl93j7375f2ahmqcszmbl3f7mfb6vgjmm791q03p";
rev = "c384f67278046fdcd220275fdd212ab85672cbeb";
sha256 = "0gci909a2rbx5i8dyzyrcddwdic7nvpk6y6djvn521yaag4sq87h";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/da8d4e5bf23985632f993336b9183fe9f480addc/recipes/evil-opener";
@ -10871,6 +10955,27 @@
license = lib.licenses.free;
};
}) {};
flycheck-objc-clang = callPackage ({ emacs, fetchFromGitHub, fetchurl, flycheck, lib, melpaBuild }:
melpaBuild {
pname = "flycheck-objc-clang";
version = "1.0.2";
src = fetchFromGitHub {
owner = "GyazSquare";
repo = "flycheck-objc-clang";
rev = "3140e4c74dbaa10e6f8edd794144d07399a8fda8";
sha256 = "0zzb03qxfs5wky40hzmldkzq5gn4c7qknkd5ra2lghzj0az6n9ld";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/4ff4412f507371b93cfb85fc744e54110cd87338/recipes/flycheck-objc-clang";
sha256 = "07mzwd04a69d7xpkjmhfmf95j69h6accnf9bb9br7jb1hi9vdalp";
name = "flycheck-objc-clang";
};
packageRequires = [ emacs flycheck ];
meta = {
homepage = "https://melpa.org/#/flycheck-objc-clang";
license = lib.licenses.free;
};
}) {};
flycheck-ocaml = callPackage ({ emacs, fetchFromGitHub, fetchurl, flycheck, let-alist, lib, melpaBuild, merlin }:
melpaBuild {
pname = "flycheck-ocaml";
@ -11018,6 +11123,27 @@
license = lib.licenses.free;
};
}) {};
flycheck-swift3 = callPackage ({ emacs, fetchFromGitHub, fetchurl, flycheck, lib, melpaBuild }:
melpaBuild {
pname = "flycheck-swift3";
version = "1.0.5";
src = fetchFromGitHub {
owner = "GyazSquare";
repo = "flycheck-swift3";
rev = "846b3045d018a13cadb8a8bfde83587802d7e1a2";
sha256 = "06wzsi3lw938mc8sz06jxyclxpvrlyjgvs9998kpiyhz752sgfsw";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/f1fb8c731c118327dc0bbb726e046fec46bcfb82/recipes/flycheck-swift3";
sha256 = "05yfrn42svcvdkr8mx16ii8llhzn33lxdawksjqiqg671s6fgdpa";
name = "flycheck-swift3";
};
packageRequires = [ emacs flycheck ];
meta = {
homepage = "https://melpa.org/#/flycheck-swift3";
license = lib.licenses.free;
};
}) {};
flycheck-tip = callPackage ({ emacs, fetchFromGitHub, fetchurl, flycheck, lib, melpaBuild, popup }:
melpaBuild {
pname = "flycheck-tip";
@ -17980,27 +18106,6 @@
license = lib.licenses.free;
};
}) {};
judge-indent = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "judge-indent";
version = "1.1.2";
src = fetchFromGitHub {
owner = "yascentur";
repo = "judge-indent-el";
rev = "4cf8c8d3375f4d655b909a415cc4fa8d235a657a";
sha256 = "11wybxrl2lny6vbf7qrxyf9wxw88ppvbrlfcd65paalrna2hn46h";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/73fb2c31f6af63145aae7c449bfde1bbb00e1100/recipes/judge-indent";
sha256 = "1gakdhnlxfq8knnykqdw4bizb5y67m8xhi07zannd7bsfwi4k6rh";
name = "judge-indent";
};
packageRequires = [];
meta = {
homepage = "https://melpa.org/#/judge-indent";
license = lib.licenses.free;
};
}) {};
jump = callPackage ({ fetchFromGitHub, fetchurl, findr, inflections, lib, melpaBuild }:
melpaBuild {
pname = "jump";
@ -19292,12 +19397,12 @@
magic-filetype = callPackage ({ emacs, fetchFromGitHub, fetchurl, lib, melpaBuild, s }:
melpaBuild {
pname = "magic-filetype";
version = "0.1.3";
version = "0.2.1";
src = fetchFromGitHub {
owner = "zonuexe";
repo = "magic-filetype.el";
rev = "bccd17a8d152e4a2692c2bd71999f1d53c00262a";
sha256 = "1rw5lvcj2v4b21akmsinkz24fbmp19s3jdqsd8jgmk3qqv0z81fc";
rev = "0dfe3d9e0e22c7b06e34c8338f110e337306e3fd";
sha256 = "1yjn2w0ykczhlj4q3dnfw2z4q66201dn3jz31yw7hh8bxjlsvwfh";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/0d6027c5a66386f7140305a4cde12d66da4dfa09/recipes/magic-filetype";
@ -19832,8 +19937,8 @@
sha256 = "0grljxihip0xyfm47ljwz6hy4kn30vw69bv4w5dw8kr33d51y5ym";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/011d26360a109b074cdecbcb133269ec6452ab86/recipes/markdown-preview-mode";
sha256 = "0i0mld45d8y96nkqn2r77nvbyw6wgsf8r54d3c2jrv04mnaxs7pg";
url = "https://raw.githubusercontent.com/milkypostman/melpa/d3c5d222cf0d7eca6a4e3eb914907f8ca58e40f0/recipes/markdown-preview-mode";
sha256 = "1cam5wfxca91q3i1kl0qbdvnfy62hr5ksargi4430kgaz34bcbyn";
name = "markdown-preview-mode";
};
packageRequires = [ cl-lib markdown-mode websocket ];
@ -20115,22 +20220,22 @@
license = lib.licenses.free;
};
}) {};
mentor = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild }:
mentor = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild, xml-rpc }:
melpaBuild {
pname = "mentor";
version = "0.1";
version = "0.1.1";
src = fetchFromGitHub {
owner = "skangas";
repo = "mentor";
rev = "bd8e4b89341686bbaf4c44680bbae778b96fb8f0";
sha256 = "1y4ra5z3ayw3w7dszzlkk3qz3nv2jg1vvx8cf0y5j1pqpx8vy3jf";
rev = "f53dac51a29f67e31f1fb82702b19d158cc6fa22";
sha256 = "0qqapsp4gpkrj3faii7qbfssddl3vqfmwqcy259s7f896kzwaaky";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/083de4bd25b6b013a31b9d5ecdffad139a4ba91e/recipes/mentor";
sha256 = "0nkf7f90m2qf11l97zwvb114yrpbqk1xxr2bh2nvbx8m1c8nad9s";
name = "mentor";
};
packageRequires = [];
packageRequires = [ xml-rpc ];
meta = {
homepage = "https://melpa.org/#/mentor";
license = lib.licenses.free;
@ -20642,12 +20747,12 @@
monokai-theme = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "monokai-theme";
version = "3.2.0";
version = "3.2.1";
src = fetchFromGitHub {
owner = "oneKelvinSmith";
repo = "monokai-emacs";
rev = "47afc7419ddd26462ad6e66e122b244c334da0b9";
sha256 = "1bkfqlfag62mixd933d1ryvnbaq3ny2bgbqbagqbrgprl7558577";
rev = "fc5822fcb11c3c6af67b5fb152f92c3e6e3c49d3";
sha256 = "0r81jdwfmgzivfpkxqr425qajgw3dzzs8y2v5lsiwl1d5z8rz52a";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/2bc9ce95a02fc4bcf7bc7547849c1c15d6db5089/recipes/monokai-theme";
@ -22159,12 +22264,12 @@
opener = callPackage ({ cl-lib ? null, emacs, fetchFromGitHub, fetchurl, lib, melpaBuild, request }:
melpaBuild {
pname = "opener";
version = "0.2.1";
version = "0.2.2";
src = fetchFromGitHub {
owner = "0robustus1";
repo = "opener.el";
rev = "ad3c65a5a748230bf07c18f56b1998ac03e3807a";
sha256 = "178h7sbpgsn0xl93j7375f2ahmqcszmbl3f7mfb6vgjmm791q03p";
rev = "c384f67278046fdcd220275fdd212ab85672cbeb";
sha256 = "0gci909a2rbx5i8dyzyrcddwdic7nvpk6y6djvn521yaag4sq87h";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/c5a448f1936f46176bc2462eb03955a0c19efb9e/recipes/opener";
@ -22516,12 +22621,12 @@
org-jira = callPackage ({ cl-lib ? null, fetchFromGitHub, fetchurl, lib, melpaBuild, request }:
melpaBuild {
pname = "org-jira";
version = "1.0.1";
version = "2.2.0";
src = fetchFromGitHub {
owner = "ahungry";
repo = "org-jira";
rev = "3fc4dd52a5235fa97b0fca06b08ae443ccc43242";
sha256 = "017k8hw2wy4fzdrkjniaqyz4mfsm60qqxrxhd1s49dfs54kch0hq";
rev = "d2db2827ff030a8c11b52402adcd3a4b3050f3c1";
sha256 = "16wzrq2syk03710iklrayf4s9ap4brvlzyd4b0rya0rxy2q2rck7";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/730a585e5c9216a2428a134c09abcc20bc7c631d/recipes/org-jira";
@ -23267,12 +23372,12 @@
osx-dictionary = callPackage ({ cl-lib ? null, fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "osx-dictionary";
version = "0.3";
version = "0.4";
src = fetchFromGitHub {
owner = "xuchunyang";
repo = "osx-dictionary.el";
rev = "8bbe1c700830e004f34974900b840ec2be7c589c";
sha256 = "0pv9j3nza71kd2i9a78w1y10r965b2wrnywjk1zgvab8q9rzwxdn";
rev = "0e5e5f1b0077a62673855889d529dd4f0cc8f665";
sha256 = "1zpr50q7i4wg1x7vsj69rh1b8xvk9r0591y4fvvs3a2l1llca2mq";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/ae4467ad646d663f0266f39a76f9764004903424/recipes/osx-dictionary";
@ -28505,22 +28610,22 @@
license = lib.licenses.free;
};
}) {};
smeargle = callPackage ({ cl-lib ? null, emacs, fetchFromGitHub, fetchurl, lib, melpaBuild }:
smeargle = callPackage ({ emacs, fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "smeargle";
version = "0.2";
version = "0.3";
src = fetchFromGitHub {
owner = "syohex";
repo = "emacs-smeargle";
rev = "fe0494bb859ea51800d6e7ae7d9eda2fe98e0097";
sha256 = "1pcpg3lalbrc24z3vwcaysps8dbdzmncdgqdd5ig6yk2a9wyj9ng";
rev = "0665b1ff5109731898bc4a0ca6d939933b804777";
sha256 = "0p0kxmjdr02l9injlyyrnnzqdbb7mirz1xx79c3lw1rgpalf0jnf";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/c5b985b24a23499454dc61bf071073df325de571/recipes/smeargle";
sha256 = "1dy87ah1w21csvrkq5icnx7g7g7nxqkcyggxyazqwwxvh2silibd";
name = "smeargle";
};
packageRequires = [ cl-lib emacs ];
packageRequires = [ emacs ];
meta = {
homepage = "https://melpa.org/#/smeargle";
license = lib.licenses.free;
@ -29054,12 +29159,12 @@
sqlup-mode = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "sqlup-mode";
version = "0.7.0";
version = "0.7.1";
src = fetchFromGitHub {
owner = "Trevoke";
repo = "sqlup-mode.el";
rev = "4bf563b0b95f5a1e627e55d52d1c2fd0dd3af95f";
sha256 = "0hxkkpylnf5phavcd2y3bxzikcnr7cdk3rbqgp3nw74sxz0223w2";
rev = "65e75ebc7d85a63e4e27900ba746623a8e4bfa95";
sha256 = "1yiz1k2dg010dypql5l9ahcl33nvqxl731wghv4jvp6bdxcf90g3";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/7fabdb05de9b8ec18a3a566f99688b50443b6b44/recipes/sqlup-mode";
@ -29238,6 +29343,27 @@
license = lib.licenses.free;
};
}) {};
string-inflection = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "string-inflection";
version = "1.0.4";
src = fetchFromGitHub {
owner = "akicho8";
repo = "string-inflection";
rev = "af1fb965784eff308d6b4031dc2ef5f6961cd38a";
sha256 = "017rq1vll53i4xs1l24insjkfvr7nlq6l9g7gjmgnd8g9ck6jqg0";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/5c2e2b6dba8686236c2595475cfddac5fd700e60/recipes/string-inflection";
sha256 = "1vrjcg1fa5adw16s4v9dq0fid0gfazxk15z9cawz0kmnpyzz3fg2";
name = "string-inflection";
};
packageRequires = [];
meta = {
homepage = "https://melpa.org/#/string-inflection";
license = lib.licenses.free;
};
}) {};
string-utils = callPackage ({ fetchFromGitHub, fetchurl, lib, list-utils, melpaBuild }:
melpaBuild {
pname = "string-utils";
@ -32250,8 +32376,8 @@
version = "0.9.1";
src = fetchhg {
url = "https://bitbucket.com/ArneBab/wisp";
rev = "c8c2934f6674";
sha256 = "0wsnmwfkiyic40v8dl65ccxv3n3hazmlxlbqr8v6ggr8kcx4ydyy";
rev = "a67adbf5fc75";
sha256 = "1av071s0s6x0idbklfnps8j7vgjqxapk9y23prk6jrdbbwhfzb8n";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/5b7972602399f9df9139cff177e38653bb0f43ed/recipes/wisp-mode";
@ -32789,6 +32915,27 @@
license = lib.licenses.free;
};
}) {};
yang-mode = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "yang-mode";
version = "0.9.3";
src = fetchFromGitHub {
owner = "mbj4668";
repo = "yang-mode";
rev = "351a17bfd4b78616cf740fc1c7148bc1d85b63a4";
sha256 = "14hrr4ix77g795b4xhdwwqkgpbbb3axpim1r4yl1bv9jbbkqllx5";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/bb42ab9b5f118baaf6766c478046552b686981a1/recipes/yang-mode";
sha256 = "0rl90xbcf3383ls95g1dixh2dr02kc4g60d324cqbb4h59wffp40";
name = "yang-mode";
};
packageRequires = [];
meta = {
homepage = "https://melpa.org/#/yang-mode";
license = lib.licenses.free;
};
}) {};
yascroll = callPackage ({ fetchFromGitHub, fetchurl, lib, melpaBuild }:
melpaBuild {
pname = "yascroll";
@ -32857,8 +33004,8 @@
version = "1.78";
src = fetchhg {
url = "https://www.yatex.org/hgrepos/yatex/";
rev = "0c098405a3c9";
sha256 = "0vk5wk7b05lyr1724wnwxlwfcw7myghpcis0ya1v11pwlad1vwha";
rev = "5428250c886a";
sha256 = "0q1b0wpdfdghp6hchc59jgkyra5qqqdam47q7g2ni4ym8nlhwd3c";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/04867a574773e8794335a2664d4f5e8b243f3ec9/recipes/yatex";
@ -33010,12 +33157,12 @@
zerodark-theme = callPackage ({ all-the-icons, fetchFromGitHub, fetchurl, flycheck, lib, magit, melpaBuild }:
melpaBuild {
pname = "zerodark-theme";
version = "4.1";
version = "4.2";
src = fetchFromGitHub {
owner = "NicolasPetton";
repo = "zerodark-theme";
rev = "63df2ae09a9e1d670f0694f7c15f19f9170e2407";
sha256 = "18a0g33z70yqr066cxm9d17jwvrx8hpgp0v2c6swk05h9b4h3pb2";
rev = "af231794425255d436690c9c31bceb2052251210";
sha256 = "1xnhcxf5d0gn8lhapjg7b289bqpf8w0d2mp76ksb8rsvx4r0bdbw";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/milkypostman/melpa/72ef967a9bea2e100ae17aad1a88db95820f4f6a/recipes/zerodark-theme";

View File

@ -1,10 +1,10 @@
{ callPackage }: {
org = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "org";
version = "20161118";
version = "20161214";
src = fetchurl {
url = "http://orgmode.org/elpa/org-20161118.tar";
sha256 = "1lk2j93zcaamj2m2720nxsza7j35054kg72w35w9z1bbiqmv2haj";
url = "http://orgmode.org/elpa/org-20161214.tar";
sha256 = "1x3wvagx7437xr4lawxr24kivb661997bncq2w9iz3fkg9rrr73m";
};
packageRequires = [];
meta = {
@ -14,10 +14,10 @@
}) {};
org-plus-contrib = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "org-plus-contrib";
version = "20161118";
version = "20161214";
src = fetchurl {
url = "http://orgmode.org/elpa/org-plus-contrib-20161118.tar";
sha256 = "1la8qw18akqc4p7p0qi675xm3r149vwazzjc2gkik97p12ip83z7";
url = "http://orgmode.org/elpa/org-plus-contrib-20161214.tar";
sha256 = "1rc3p1cys15i9vnll946w5hlckmmbgkw22yw98mna9cwqdpc387c";
};
packageRequires = [];
meta = {

View File

@ -1,5 +1,6 @@
{ stdenv, fetchurl, ncurses, pkgconfig, texinfo, libxml2, gnutls, gettext
, AppKit, Carbon, Cocoa, IOKit, OSAKit, Quartz, QuartzCore, WebKit
, autoconf, automake
, ImageCaptureCore, GSS, ImageIO # These may be optional
}:
@ -21,7 +22,7 @@ stdenv.mkDerivation rec {
enableParallelBuilding = true;
buildInputs = [ ncurses libxml2 gnutls pkgconfig texinfo gettext ];
buildInputs = [ ncurses libxml2 gnutls pkgconfig texinfo gettext autoconf automake ];
propagatedBuildInputs = [
AppKit Carbon Cocoa IOKit OSAKit Quartz QuartzCore WebKit
@ -47,7 +48,7 @@ stdenv.mkDerivation rec {
"--enable-mac-app=$$out/Applications"
];
CFLAGS = "-O3 -DMAC_OS_X_VERSION_MAX_ALLOWED=1090";
CFLAGS = "-O3 -DMAC_OS_X_VERSION_MAX_ALLOWED=1090 -DMAC_OS_X_VERSION_MIN_REQUIRED=1090";
LDFLAGS = "-O3 -L${ncurses.out}/lib";
postInstall = ''

View File

@ -5,7 +5,7 @@
stdenv.mkDerivation rec {
emacsName = "emacs-25.1";
name = "${emacsName}-mac-6.0";
name = "${emacsName}-mac-6.1";
builder = ./builder.sh;
@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
macportSrc = fetchurl {
url = "ftp://ftp.math.s.chiba-u.ac.jp/emacs/${name}.tar.gz";
sha256 = "2f7a3fd826e6dea541ada04f4a1ff2903a87a1f736b89c5b90bf7bb820568e34";
sha256 = "1zwxh7zsvwcg221mpjh0dhpdas3j9mc5q92pprf8yljl7clqvg62";
};
enableParallelBuilding = true;
@ -48,7 +48,7 @@ stdenv.mkDerivation rec {
"--enable-mac-app=$$out/Applications"
];
CFLAGS = "-O3 -DMAC_OS_X_VERSION_MAX_ALLOWED=1090";
CFLAGS = "-O3 -DMAC_OS_X_VERSION_MAX_ALLOWED=1090 -DMAC_OS_X_VERSION_MIN_REQUIRED=1090";
LDFLAGS = "-O3 -L${ncurses.out}/lib";
postInstall = ''

View File

@ -208,12 +208,12 @@ in
idea-ultimate = buildIdea rec {
name = "idea-ultimate-${version}";
version = "2016.3";
version = "2016.3.1";
description = "Integrated Development Environment (IDE) by Jetbrains, requires paid license";
license = stdenv.lib.licenses.unfree;
src = fetchurl {
url = "https://download.jetbrains.com/idea/ideaIU-${version}.tar.gz";
sha256 = "1sax3sjhsyvb9qfnn0gc74p3ym6j5f30mmapd4irq9fk4bsl8c31";
sha256 = "1696gfmqi76ybgi5r84kisjx9mv0hd70hsn16banw61zy4rfllhw";
};
wmClass = "jetbrains-idea";
};

View File

@ -4,12 +4,12 @@ with stdenv.lib;
stdenv.mkDerivation rec {
name = "kakoune-nightly-${version}";
version = "2016-07-26";
version = "2016-12-10";
src = fetchFromGitHub {
repo = "kakoune";
owner = "mawww";
rev = "0d2c5072b083a893843e4fa87f9f702979069e14";
sha256 = "01qqs5yr9xvvklg3gg45lgnyh6gji28m854mi1snzvjd7fksf50n";
rev = "e44129577a010ebb4dc609b806104d3175659074";
sha256 = "1jkpbk6wa9x5nlv002y1whv6ddhqawxzbp3jcbzcb51cg8bz0b1l";
};
buildInputs = [ ncurses boost asciidoc docbook_xsl libxslt ];

View File

@ -12,10 +12,10 @@ with stdenv.lib;
stdenv.mkDerivation rec {
name = "nano-${version}";
version = "2.7.1";
version = "2.7.2";
src = fetchurl {
url = "mirror://gnu/nano/${name}.tar.xz";
sha256 = "1kapx0fyp0a0pvsdd1n59pm3acrimdrp7ciglg098wqxhdlvwp6z";
sha256 = "1hlhwgvzdgkc7k74fbbn49hn6vmvzqr7h8gclgl7r1c6qrrny0bp";
};
nativeBuildInputs = [ texinfo ] ++ optional enableNls gettext;
buildInputs = [ ncurses ];

View File

@ -2,20 +2,20 @@
makeWrapper, libXScrnSaver }:
let
version = "1.6.1";
rev = "9e4e44c19e393803e2b05fe2323cf4ed7e36880e";
version = "1.8.0";
rev = "38746938a4ab94f2f57d9e1309c51fd6fb37553d";
sha256 = if stdenv.system == "i686-linux" then "1aks84siflpjbd2s9y1f0vvvf3nas4f50cimjf25lijxzjxrlivy"
else if stdenv.system == "x86_64-linux" then "05kbi081ih64fadj4k74grkk9ca3wga6ybwgs5ld0bal4ilw1q6i"
else if stdenv.system == "x86_64-darwin" then "00p2m8b0l3pkf5k74szw6kcql3j1fjnv3rwnhy24wfkg4b4ah2x9"
sha256 = if stdenv.system == "i686-linux" then "0p7r1i71v2ab4dzlwh43hqih958a31cqskf64ds4vgc35x2mfjcq"
else if stdenv.system == "x86_64-linux" then "1k15701jskk7w5kwzlzfri96vvw7fcinyfqqafls8nms8h5csv76"
else if stdenv.system == "x86_64-darwin" then "12fqz62gs2wcg2wwx1k6gv2gqil9c54yq254vk3rqdf82q9zyapk"
else throw "Unsupported system: ${stdenv.system}";
urlBase = "https://az764295.vo.msecnd.net/stable/${rev}/";
urlStr = if stdenv.system == "i686-linux" then
urlBase + "code-stable-code_${version}-1476372351_i386.tar.gz"
urlBase + "code-stable-code_${version}-1481650382_i386.tar.gz"
else if stdenv.system == "x86_64-linux" then
urlBase + "code-stable-code_${version}-1476373175_amd64.tar.gz"
urlBase + "code-stable-code_${version}-1481651903_amd64.tar.gz"
else if stdenv.system == "x86_64-darwin" then
urlBase + "VSCode-darwin-stable.zip"
else throw "Unsupported system: ${stdenv.system}";

View File

@ -38,6 +38,7 @@ stdenv.mkDerivation rec {
"mirror://imagemagick/releases/ImageMagick-${version}.tar.xz"
# the original source above removes tarballs quickly
"http://distfiles.macports.org/ImageMagick/ImageMagick-${version}.tar.xz"
"https://bintray.com/homebrew/mirror/download_file?file_path=imagemagick-${version}.tar.xz"
];
inherit (cfg) sha256;
};

View File

@ -7,13 +7,13 @@
python3Packages.buildPythonApplication rec {
name = "vimiv";
version = "0.7.2";
version = "0.7.3";
src = fetchFromGitHub {
owner = "karlch";
repo = "vimiv";
rev = "v${version}";
sha256 = "1g97ms84xk4ci4crq9wdc3744jnrqkq2qz9sg69lhm9sr5f68bw4";
sha256 = "18dn81n8hcrqhrqfida34qz7a0ar9rz2rrmzsvyp54zc6nyvv1cn";
};
testimages = fetchFromGitHub {
@ -23,8 +23,6 @@ python3Packages.buildPythonApplication rec {
sha256 = "0a3aybzpms0381dz9japhm4c7j5klhmw91prcac6zaww6x34nmxb";
};
patches = [ ./fixes.patch ];
postPatch = ''
patchShebangs scripts/install_icons.sh
sed -i -e 's,/usr,,g' -e '/setup\.py/d' Makefile scripts/install_icons.sh

View File

@ -1,128 +0,0 @@
Patch submitted upstream at https://github.com/karlch/vimiv/pull/32
diff --git a/tests/main_test.py b/tests/main_test.py
index a1870e7..2edc86d 100644
--- a/tests/main_test.py
+++ b/tests/main_test.py
@@ -15,7 +15,7 @@ class MainTest(TestCase):
def test_main_until_quit(self):
"""Run through vimiv main once."""
- v_main.main(True)
+ v_main.main([], True)
if __name__ == '__main__':
diff --git a/vimiv/helpers.py b/vimiv/helpers.py
index 22f0115..bfaf016 100644
--- a/vimiv/helpers.py
+++ b/vimiv/helpers.py
@@ -3,7 +3,6 @@
"""Wrappers around standard library functions used in vimiv."""
import os
-from subprocess import Popen, PIPE
from gi import require_version
require_version('Gtk', '3.0')
from gi.repository import Gtk
@@ -20,17 +19,17 @@ scrolltypes["K"] = (Gtk.ScrollType.START, False)
scrolltypes["L"] = (Gtk.ScrollType.END, True)
# A list of all external commands
-external_commands = []
-try:
- p = Popen('echo $PATH | tr \':\' \'\n\' | xargs -n 1 ls -1',
- stdout=PIPE, stderr=PIPE, shell=True)
- out, err = p.communicate()
- out = out.decode('utf-8').split()
- for cmd in sorted(list(set(out))):
- external_commands.append("!" + cmd)
-except:
- external_commands = []
-external_commands = tuple(external_commands)
+pathenv = os.environ.get('PATH')
+if pathenv is not None:
+ executables = set()
+ for path in pathenv.split(':'):
+ try:
+ executables |= set(["!" + e for e in os.listdir(path)])
+ except OSError:
+ continue
+ external_commands = tuple(sorted(list(executables)))
+else:
+ external_commands = ()
def listdir_wrapper(path, show_hidden=False):
diff --git a/vimiv/imageactions.py b/vimiv/imageactions.py
index d92eb73..b9bc986 100644
--- a/vimiv/imageactions.py
+++ b/vimiv/imageactions.py
@@ -157,8 +157,8 @@ class Thumbnails:
# Correct name
thumb_ext = ".thumbnail_%dx%d" % (self.thumbsize[0],
self.thumbsize[1])
- outfile_ext = infile.split(".")[0] + thumb_ext + ".png"
- outfile_base = os.path.basename(outfile_ext)
+ infile_base = os.path.basename(infile)
+ outfile_base = infile_base.split(".")[0] + thumb_ext + ".png"
outfile = os.path.join(self.directory, outfile_base)
# Only if they aren't cached already
if outfile_base not in self.thumbnails:
diff --git a/vimiv/main.py b/vimiv/main.py
index a0e38cf..39f7407 100644
--- a/vimiv/main.py
+++ b/vimiv/main.py
@@ -27,7 +27,7 @@ from vimiv.mark import Mark
from vimiv.information import Information
-def main(running_tests=False):
+def main(arguments, running_tests=False):
"""Starting point for vimiv.
Args:
@@ -36,7 +36,7 @@ def main(running_tests=False):
parser = get_args()
parse_dirs()
settings = parse_config()
- settings = parse_args(parser, settings)
+ settings = parse_args(parser, settings, arguments)
args = settings["GENERAL"]["paths"]
diff --git a/vimiv/parser.py b/vimiv/parser.py
index 874a538..9d5afce 100644
--- a/vimiv/parser.py
+++ b/vimiv/parser.py
@@ -56,7 +56,7 @@ def get_args():
return parser
-def parse_args(parser, settings, arguments=None):
+def parse_args(parser, settings, arguments):
"""Parse the arguments and return the modified settings.
Args:
@@ -66,10 +66,7 @@ def parse_args(parser, settings, arguments=None):
Return: Modified settings after parsing the arguments.
"""
- if arguments:
- args = parser.parse_args(arguments)
- else:
- args = parser.parse_args()
+ args = parser.parse_args(arguments)
if args.show_version:
information = Information()
print(information.get_version())
diff --git a/vimiv/vimiv b/vimiv/vimiv
index 5497e08..57f34f1 100755
--- a/vimiv/vimiv
+++ b/vimiv/vimiv
@@ -5,4 +5,4 @@ import sys
import vimiv
if __name__ == '__main__':
- sys.exit(vimiv.main.main())
+ sys.exit(vimiv.main.main(sys.argv))

View File

@ -75,7 +75,7 @@ stdenv.mkDerivation rec {
dontStrip = true;
meta = with stdenv.lib; {
decription = "Ethereum C++ client";
description = "Ethereum C++ client";
homepage = https://github.com/ethereum/cpp-ethereum;
license = licenses.gpl3;
maintainers = with maintainers; [ artuuge ];

View File

@ -94,12 +94,12 @@ let
flash = stdenv.mkDerivation rec {
name = "flashplayer-ppapi-${version}";
version = "23.0.0.207";
version = "24.0.0.186";
src = fetchzip {
url = "https://fpdownload.adobe.com/pub/flashplayer/pdc/"
+ "${version}/flash_player_ppapi_linux.x86_64.tar.gz";
sha256 = "1spwv06rynaw45pdll6hzsq6zbz1q10bf7dx4zz25gh8x3sl9l6a";
sha256 = "1pwayhnfjvb6gal5msw0k8rv4h6jvl0mpfsi0jqlka00cnyfjqpd";
stripRoot = false;
};

View File

@ -223,7 +223,7 @@ stdenv.mkDerivation {
tr " " ":"`; do
# create an entry for every locale
cat >> $tmpfile <<EOF
{ url = "$url$version/$arch/`echo $line | cut -d":" -f3`";"
{ url = "$url$version/`echo $line | cut -d":" -f3`";
locale = "`echo $line | cut -d":" -f3 | sed "s/$arch\///" | sed "s/\/.*//"`";
arch = "$arch";
sha512 = "`echo $line | cut -d":" -f1`";
@ -236,7 +236,7 @@ stdenv.mkDerivation {
}
EOF
cat $tmpfile > ${if isBeta then "beta_" else ""}sources.nix
mv $tmpfile ${if isBeta then "beta_" else ""}sources.nix
popd
'';

File diff suppressed because it is too large Load Diff

View File

@ -147,14 +147,14 @@ in {
firefox-unwrapped = common {
pname = "firefox";
version = "50.0.2";
sha512 = "cfcc3e5a703e4d3284e3b3dcb34e5f77825e5a98b49a75bf22f8ac431c0429e6cd21c4e1f5e046fe82899cb4d2bc5b7a432b306c4af35034d83a9f351393f7fd";
version = "50.1.0";
sha512 = "2jwpk3aymkcq9f4xhzc31sb1c90vy3dvyqq2hvw97vk9dw7rgvv2cki10ns5cshbc4k57yd3j8nm7ppy2kw6na6771mj6sbijdjw39p";
};
firefox-esr-unwrapped = common {
pname = "firefox-esr";
version = "45.5.1esr";
sha512 = "36c56e1486a6a35f71526bd81d01fb4fc2b9df852eb2feb39b77c902fcf90d713d8fcdcd6113978630345e1ed36fa5cf0df6da7b6bf7e85a84fe014cb11f9a03";
version = "45.6.0esr";
sha512 = "086ci461hmz6kdn0ly9dlc723gc117si4a11a1c51gh79hczhahdaxg5s4r3k59rb43gpwxrlvm4wx1aka36bsihnh8a4caxnp72v5r";
};
}

View File

@ -2,7 +2,7 @@
# Linked dynamic libraries.
, glib, fontconfig, freetype, pango, cairo, libX11, libXi, atk, gconf, nss, nspr
, libXcursor, libXext, libXfixes, libXrender, libXScrnSaver, libXcomposite
, libXcursor, libXext, libXfixes, libXrender, libXScrnSaver, libXcomposite, libxcb
, alsaLib, libXdamage, libXtst, libXrandr, expat, cups
, dbus_libs, gtk2, gdk_pixbuf, gcc
@ -42,7 +42,7 @@ let
deps = [
stdenv.cc.cc
glib fontconfig freetype pango cairo libX11 libXi atk gconf nss nspr
libXcursor libXext libXfixes libXrender libXScrnSaver libXcomposite
libXcursor libXext libXfixes libXrender libXScrnSaver libXcomposite libxcb
alsaLib libXdamage libXtst libXrandr expat cups
dbus_libs gtk2 gdk_pixbuf gcc
systemd

View File

@ -14,6 +14,11 @@ buildGoPackage rec {
sha256 = "0l4a5bqfw8i8wrl5yzkqy848r7vdx6hw8p5m3z3vzabvsmsjjwy7";
};
postInstall = ''
mkdir -p $bin/share/bash-completion/completions/
cp go/src/github.com/docker/machine/contrib/completion/bash/* $bin/share/bash-completion/completions/
'';
postFixup = ''
mv $bin/bin/cmd $bin/bin/docker-machine
'';

View File

@ -0,0 +1,45 @@
{ stdenv, fetchurl, kubernetes }:
let
arch = if stdenv.isLinux
then "linux-amd64"
else "darwin-amd64";
checksum = if stdenv.isLinux
then "dad3791fb07e6cf34f4cf611728cb8ae109a75234498a888529a68ac6923f200"
else "d27bd7e40e12c0a5f08782a8a883166008565b28e0b82126d2089300ff3f8465";
in
stdenv.mkDerivation rec {
pname = "helm";
version = "2.0.2";
name = "${pname}-${version}";
src = fetchurl {
url = "https://kubernetes-helm.storage.googleapis.com/helm-v${version}-${arch}.tar.gz";
sha256 = "${checksum}";
};
preferLocalBuild = true;
buildInputs = [ ];
propagatedBuildInputs = [ kubernetes ];
phases = [ "buildPhase" "installPhase" ];
buildPhase = ''
mkdir -p $out/bin
'';
installPhase = ''
tar -xvzf $src
cp ${arch}/helm $out/bin/${pname}
chmod +x $out/bin/${pname}
'';
meta = with stdenv.lib; {
homepage = https://github.com/kubernetes/helm;
description = "A package manager for kubernetes";
license = licenses.asl20;
maintainers = [ maintainers.rlupton20 ];
platforms = platforms.linux ++ platforms.darwin;
};
}

View File

@ -32,19 +32,28 @@ stdenv.mkDerivation rec {
postPatch = ''
substituteInPlace "hack/lib/golang.sh" --replace "_cgo" ""
substituteInPlace "hack/generate-docs.sh" --replace "make" "make SHELL=${stdenv.shell}"
substituteInPlace "hack/update-munge-docs.sh" --replace "make" "make SHELL=${stdenv.shell}"
substituteInPlace "hack/update-munge-docs.sh" --replace "kube::util::git_upstream_remote_name" "echo origin"
patchShebangs ./hack
'';
WHAT="--use_go_build ${concatStringsSep " " components}";
postBuild = "(cd build/pause && gcc pause.c -o pause)";
postBuild = ''
./hack/generate-docs.sh
(cd build/pause && gcc pause.c -o pause)
'';
installPhase = ''
mkdir -p "$out/bin" "$man/share/man" "$pause/bin"
mkdir -p "$out/bin" "$out/share/bash-completion/completions" "$man/share/man" "$pause/bin"
cp _output/local/go/bin/* "$out/bin/"
cp build/pause/pause "$pause/bin/pause"
cp -R docs/man/man1 "$man/share/man"
$out/bin/kubectl completion bash > $out/share/bash-completion/completions/kubectl
'';
preFixup = ''

View File

@ -30,6 +30,9 @@ stdenv.mkDerivation rec {
installPhase = ''
cp $src $out/bin/${pname}
chmod +x $out/bin/${pname}
mkdir -p $out/share/bash-completion/completions/
HOME=$(pwd) $out/bin/minikube completion bash > $out/share/bash-completion/completions/minikube
'';
meta = with stdenv.lib; {

View File

@ -1,9 +1,11 @@
{ stdenv, fetchFromGitHub, go, which }:
let
version = "1.3.1";
versionMajor = "1";
versionMinor = "3";
version = "1.3.2";
ver = stdenv.lib.elemAt (stdenv.lib.splitString "." version);
versionMajor = ver 0;
versionMinor = ver 1;
versionPatch = ver 2;
in
stdenv.mkDerivation rec {
name = "openshift-origin-${version}";
@ -13,7 +15,7 @@ stdenv.mkDerivation rec {
owner = "openshift";
repo = "origin";
rev = "v${version}";
sha256 = "1kxa1k38hvi1vg52p82mmkmp9k4bbbm2pryzapsxwga7d8x4bnbh";
sha256 = "0zw8zb9c6icigcq6y47ppnjnqyghk2kril07bapbddvgnvbbfp6m";
};
buildInputs = [ go which ];
@ -43,7 +45,7 @@ stdenv.mkDerivation rec {
description = "Build, deploy, and manage your applications with Docker and Kubernetes";
license = licenses.asl20;
homepage = http://www.openshift.org;
maintainers = with maintainers; [offline];
maintainers = with maintainers; [offline bachp];
platforms = platforms.linux;
};
}

View File

@ -0,0 +1,24 @@
{ lib, fetchFromGitHub, buildGoPackage }:
buildGoPackage rec {
name = "pachyderm-${version}";
version = "1.3.0";
rev = "v${version}";
goPackagePath = "github.com/pachyderm/pachyderm";
subPackages = [ "src/server/cmd/pachctl" ];
src = fetchFromGitHub {
inherit rev;
owner = "pachyderm";
repo = "pachyderm";
sha256 = "0y25xh6h7p8hg0bzrjlschmz62r6dwh5mrvbnni1hb1pm0w9jb6g";
};
meta = with lib; {
description = "Containerized Data Analytics";
homepage = https://github.com/pachyderm/pachyderm;
license = licenses.asl20;
maintainers = with maintainers; [offline];
};
}

View File

@ -2,7 +2,7 @@
buildGoPackage rec {
name = "terraform-${version}";
version = "0.7.11";
version = "0.8.1";
rev = "v${version}";
goPackagePath = "github.com/hashicorp/terraform";
@ -11,7 +11,7 @@ buildGoPackage rec {
inherit rev;
owner = "hashicorp";
repo = "terraform";
sha256 = "0rmzhf2rwxci57ll5nv2vvmic9cn64dbbg1fb5g78njljzpsc5qw";
sha256 = "1fgnivhn6hrxpwwajl80vj2w81lv6vypprlbgif8m0z0na7p8956";
};
postInstall = ''

View File

@ -1,13 +1,13 @@
{ stdenv, fetchurl, dbus, gnutls, wxGTK30, libidn, tinyxml, gettext
, pkgconfig, xdg_utils, gtk2, sqlite, pugixml, libfilezilla, nettle }:
let version = "3.22.2.2"; in
let version = "3.23.0.2"; in
stdenv.mkDerivation {
name = "filezilla-${version}";
src = fetchurl {
url = "mirror://sourceforge/project/filezilla/FileZilla_Client/${version}/FileZilla_${version}_src.tar.bz2";
sha256 = "1h02k13x88f04gkf433cxx1xvbr7kkl2aygb4i6581gzhzjifwdv";
sha256 = "0bq22nq2g1b0x5msm9if74ync2qk13n2782mwj2r1r7hsmx4liiz";
};
configureFlags = [

View File

@ -0,0 +1,23 @@
{stdenv, fetchurl, ncurses}:
stdenv.mkDerivation rec {
name = "gopher-${version}";
version = "3.0.11";
src = fetchurl {
url = "http://gopher.quux.org:70/devel/gopher/Downloads/gopher_${version}.tar.gz";
sha256 = "15r7x518wlpfqpd6z0hbdwm8rw8ll8hbpskdqgxxhrmy00aa7w9c";
};
buildInputs = [ ncurses ];
preConfigure = "export LIBS=-lncurses";
meta = {
homepage = http://gopher.quux.org:70/devel/gopher;
description = "A ncurses gopher client";
platforms = stdenv.lib.platforms.unix;
license = stdenv.lib.licenses.gpl2;
maintainers = with stdenv.lib.maintainers; [ sternenseemann ];
};
}

View File

@ -1,17 +1,17 @@
{ stdenv, fetchurl
{ stdenv, fetchurl, makeDesktopItem
, alsaLib, atk, cairo, cups, dbus, expat, fontconfig, freetype, gdk_pixbuf
, glib, gnome2, gtk2, libnotify, libX11, libXcomposite, libXcursor, libXdamage
, libXext, libXfixes, libXi, libXrandr, libXrender, libXtst, nspr, nss, pango
, systemd, libXScrnSaver }:
let version = "0.0.11"; in
stdenv.mkDerivation rec {
stdenv.mkDerivation {
name = "discord-${version}";
pname = "discord";
version = "0.0.11";
name = "${pname}-${version}";
src = fetchurl {
url = "https://cdn-canary.discordapp.com/apps/linux/${version}/discord-canary-${version}.tar.gz";
url = "https://cdn-canary.discordapp.com/apps/linux/${version}/${pname}-canary-${version}.tar.gz";
sha256 = "1lk53vm14vr5pb8xxcx6hinpc2mkdns2xxv0bfzxvlmhfr6d6y18";
};
@ -23,7 +23,7 @@ stdenv.mkDerivation {
];
installPhase = ''
mkdir -p $out/bin
mkdir -p $out/{bin,share/pixmaps}
mv * $out
# Copying how adobe-reader does it,
@ -33,11 +33,22 @@ stdenv.mkDerivation {
$out/DiscordCanary
ln -s $out/DiscordCanary $out/bin/
ln -s $out/discord.png $out/share/pixmaps
# Putting udev in the path won't work :(
ln -s ${systemd.lib}/lib/libudev.so.1 $out
ln -s "${desktopItem}/share/applications" $out/share/
'';
desktopItem = makeDesktopItem {
name = pname;
exec = "DiscordCanary";
icon = pname;
desktopName = "Discord Canary";
genericName = meta.description;
categories = "Network;InstantMessaging;";
};
meta = with stdenv.lib; {
description = "All-in-one voice and text chat for gamers thats free, secure, and works on both your desktop and phone";
homepage = "https://discordapp.com/";

View File

@ -1,5 +1,5 @@
{ stdenv, fetchurl, automake, autoconf, pkgconfig, glib, openssl, expat
, ncurses, libotr, curl, libstrophe, readline, libuuid
{ stdenv, fetchurl, pkgconfig, glib, openssl, expat, libmesode
, ncurses, libotr, curl, readline, libuuid
, autoAwaySupport ? false, libXScrnSaver ? null, libX11 ? null
, notifySupport ? false, libnotify ? null, gdk_pixbuf ? null
@ -12,21 +12,19 @@ with stdenv.lib;
stdenv.mkDerivation rec {
name = "profanity-${version}";
version = "0.4.7";
version = "0.5.0";
src = fetchurl {
url = "http://www.profanity.im/profanity-${version}.tar.gz";
sha256 = "1p8ixvxacvf63r6lnf6iwlyz4pgiyp6widna1h2l2jg8kw14wb5h";
sha256 = "0s4njc4rcaii51qw1najxa0fa8bb2fnas00z47y94wdbdsmfhfvq";
};
buildInputs = [
automake autoconf pkgconfig readline libuuid
glib openssl expat ncurses libotr curl libstrophe
pkgconfig readline libuuid libmesode
glib openssl expat ncurses libotr curl
] ++ optionals autoAwaySupport [ libXScrnSaver libX11 ]
++ optionals notifySupport [ libnotify gdk_pixbuf ];
preConfigure = "sh bootstrap.sh";
meta = {
description = "A console based XMPP client";
longDescription = ''

View File

@ -17,9 +17,9 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ pkgconfig libconfig ];
buildInputs = [
libtoxcore-dev libsodium ncurses libqrencode curl
libtoxcore-dev libsodium ncurses curl
] ++ stdenv.lib.optionals (!stdenv.isArm) [
openal libvpx freealut
openal libvpx freealut libqrencode
];
meta = with stdenv.lib; {

View File

@ -1,64 +0,0 @@
{ stdenv, fetchurl, ncurses, which, perl, autoreconfHook, autoconf, automake, notmuch
, sslSupport ? true
, imapSupport ? true
, headerCache ? true
, saslSupport ? true
, gpgmeSupport ? true
, gdbm ? null
, openssl ? null
, cyrus_sasl ? null
, gpgme ? null
}:
assert headerCache -> gdbm != null;
assert sslSupport -> openssl != null;
assert saslSupport -> cyrus_sasl != null;
assert gpgmeSupport -> gpgme != null;
let
version = "1.5.23.1";
in
stdenv.mkDerivation rec {
name = "mutt-kz-${version}";
src = fetchurl {
url = "https://github.com/karelzak/mutt-kz/archive/v${version}.tar.gz";
sha256 = "01k4hrf8x2100pcqnrm61mm1x0pqi2kr3rx22k5hwvbs1wh8zyhz";
};
buildInputs = with stdenv.lib;
[ ncurses which perl autoreconfHook autoconf automake notmuch]
++ optional headerCache gdbm
++ optional sslSupport openssl
++ optional saslSupport cyrus_sasl
++ optional gpgmeSupport gpgme;
configureFlags = [
"--with-mailpath=" "--enable-smtp"
# This allows calls with "-d N", that output debug info into ~/.muttdebug*
"--enable-debug"
"--enable-pop" "--enable-imap"
"--enable-notmuch"
# The next allows building mutt without having anything setgid
# set by the installer, and removing the need for the group 'mail'
# I set the value 'mailbox' because it is a default in the configure script
"--with-homespool=mailbox"
(if headerCache then "--enable-hcache" else "--disable-hcache")
(if sslSupport then "--with-ssl" else "--without-ssl")
(if imapSupport then "--enable-imap" else "--disable-imap")
(if saslSupport then "--with-sasl" else "--without-sasl")
(if gpgmeSupport then "--enable-gpgme" else "--disable-gpgme")
];
meta = with stdenv.lib; {
description = "A small but very powerful text-based mail client, forked to support notmuch";
homepage = https://github.com/karelzak/mutt-kz/;
license = stdenv.lib.licenses.gpl2Plus;
platforms = platforms.unix;
maintainers = with maintainers; [ magnetophon ];
};
}

View File

@ -12,7 +12,7 @@ assert withQt -> !withGtk && qt4 != null;
with stdenv.lib;
let
version = "2.2.2";
version = "2.2.3";
variant = if withGtk then "gtk" else if withQt then "qt" else "cli";
in
@ -21,7 +21,7 @@ stdenv.mkDerivation {
src = fetchurl {
url = "http://www.wireshark.org/download/src/all-versions/wireshark-${version}.tar.bz2";
sha256 = "1csm035ayfzn1xzzsmzcjk2ixx39d70aykr4nh0a88chk9gfzb7r";
sha256 = "0fsrvl6sp772g2q2j24h10h9lfda6q67x7wahjjm8849i2gciflp";
};
buildInputs = [

View File

@ -1,29 +1,22 @@
{ fetchurl, stdenv, gtk, pkgconfig, libofx, intltool, wrapGAppsHook
, hicolor_icon_theme, libsoup}:
let
download_root = "http://homebank.free.fr/public/";
name = "homebank-5.1.1";
lastrelease = download_root + name + ".tar.gz";
oldrelease = download_root + "old/" + name + ".tar.gz";
in
stdenv.mkDerivation {
inherit name;
, hicolor_icon_theme, libsoup, gnome3 }:
stdenv.mkDerivation rec {
name = "homebank-5.1.2";
src = fetchurl {
urls = [ lastrelease oldrelease ];
sha256 = "1gd4b8fsq89w486mfrclw4r1nrgh7lxp4sncbgprbz9id7f6vlww";
url = "http://homebank.free.fr/public/${name}.tar.gz";
sha256 = "09zsq5l3s8cg4slhsyybsq8v1arnhh07i0rzka3j6ahysky15pfh";
};
buildInputs = [ pkgconfig gtk libofx intltool hicolor_icon_theme
wrapGAppsHook libsoup ];
nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
buildInputs = [ gtk libofx intltool hicolor_icon_theme libsoup
gnome3.defaultIconTheme ];
meta = {
meta = with stdenv.lib; {
description = "Free, easy, personal accounting for everyone";
homepage = http://homebank.free.fr/;
license = stdenv.lib.licenses.gpl2Plus;
maintainers = with stdenv.lib.maintainers; [viric];
platforms = with stdenv.lib.platforms; linux;
license = licenses.gpl2Plus;
maintainers = with maintainers; [ viric pSub ];
platforms = platforms.linux;
};
}

View File

@ -0,0 +1,88 @@
# - coqide compilation can be disabled by setting lablgtk to null;
# - The csdp program used for the Micromega tactic is statically referenced.
# However, coq can build without csdp by setting it to null.
# In this case some Micromega tactics will search the user's path for the csdp program and will fail if it is not found.
# - The patch-level version can be specified through the `pl` argument to
# the derivation; it defaults to the greatest.
{ stdenv, fetchurl, writeText, pkgconfig
, ocaml, findlib, camlp5, ncurses
, lablgtk ? null, csdp ? null
, pl ? "1"
}:
let
# version = "8.6pl${pl}";
version = "8.6";
sha256 = "1pw1xvy1657l1k69wrb911iqqflzhhp8wwsjvihbgc72r3skqg3f";
coq-version = "8.6";
buildIde = lablgtk != null;
ideFlags = if buildIde then "-lablgtkdir ${lablgtk}/lib/ocaml/*/site-lib/lablgtk2 -coqide opt" else "";
csdpPatch = if csdp != null then ''
substituteInPlace plugins/micromega/sos.ml --replace "; csdp" "; ${csdp}/bin/csdp"
substituteInPlace plugins/micromega/coq_micromega.ml --replace "System.is_in_system_path \"csdp\"" "true"
'' else "";
in
stdenv.mkDerivation {
name = "coq-${version}";
inherit coq-version;
inherit ocaml camlp5;
src = fetchurl {
url = "http://coq.inria.fr/distrib/V${version}/files/coq-${version}.tar.gz";
inherit sha256;
};
buildInputs = [ pkgconfig ocaml findlib camlp5 ncurses lablgtk ];
postPatch = ''
UNAME=$(type -tp uname)
RM=$(type -tp rm)
substituteInPlace configure --replace "/bin/uname" "$UNAME"
substituteInPlace tools/beautify-archive --replace "/bin/rm" "$RM"
substituteInPlace configure.ml --replace '"md5 -q"' '"md5sum"'
${csdpPatch}
'';
setupHook = writeText "setupHook.sh" ''
addCoqPath () {
if test -d "''$1/lib/coq/${coq-version}/user-contrib"; then
export COQPATH="''${COQPATH}''${COQPATH:+:}''$1/lib/coq/${coq-version}/user-contrib/"
fi
}
envHooks=(''${envHooks[@]} addCoqPath)
'';
preConfigure = ''
configureFlagsArray=(
-opt
${ideFlags}
)
'';
prefixKey = "-prefix ";
buildFlags = "revision coq coqide bin/votour";
postInstall = ''
cp bin/votour $out/bin/
'';
meta = with stdenv.lib; {
description = "Coq proof assistant";
longDescription = ''
Coq is a formal proof management system. It provides a formal language
to write mathematical definitions, executable algorithms and theorems
together with an environment for semi-interactive development of
machine-checked proofs.
'';
homepage = "http://coq.inria.fr";
license = licenses.lgpl21;
branch = coq-version;
maintainers = with maintainers; [ roconnor thoughtpolice vbgl ];
platforms = platforms.unix;
};
}

View File

@ -6,8 +6,8 @@
{stdenv, fetchgit, writeText, pkgconfig, ocaml, findlib, camlp5, ncurses, lablgtk ? null, csdp ? null}:
let
version = "8.5pre-0c999f02";
coq-version = "8.5";
version = "8.6pre-0c999f02";
coq-version = "8.6";
buildIde = lablgtk != null;
ideFlags = if buildIde then "-lablgtkdir ${lablgtk}/lib/ocaml/*/site-lib/lablgtk2 -coqide opt" else "";
csdpPatch = if csdp != null then ''
@ -24,20 +24,18 @@ stdenv.mkDerivation {
src = fetchgit {
url = git://scm.gforge.inria.fr/coq/coq.git;
rev = "0c999f02ffcd61fcace0cc2d045056a82992a100";
sha256 = "08z9z4bv4a8ha1jrn18vxad6d7y7h92ggr00rx8jfvvi290n9344";
rev = "ad768e435a736ca51ac79a575967b388b34918c7";
sha256 = "05s7sk1l3mvdjag3idnhkpj707y4bv56da7kpffw862f2qgfr77j";
};
buildInputs = [ pkgconfig ocaml findlib camlp5 ncurses lablgtk ];
patches = [ ./no-codesign.patch ];
postPatch = ''
UNAME=$(type -tp uname)
RM=$(type -tp rm)
substituteInPlace configure --replace "/bin/uname" "$UNAME"
substituteInPlace tools/beautify-archive --replace "/bin/rm" "$RM"
substituteInPlace Makefile.build --replace "ifeq (\$(ARCH),Darwin)" "ifeq (\$(ARCH),Darwinx)"
substituteInPlace configure.ml --replace "\"Darwin\"; \"FreeBSD\"; \"OpenBSD\"" "\"Darwinx\"; \"FreeBSD\"; \"OpenBSD\""
${csdpPatch}
'';

View File

@ -1,4 +1,6 @@
{ stdenv, fetchurl, python2Packages }:
{ stdenv, fetchurl, python2Packages
, withSFTP ? true
}:
python2Packages.buildPythonApplication rec {
version = "2.7";
@ -12,6 +14,9 @@ python2Packages.buildPythonApplication rec {
doCheck = false;
propagatedBuildInputs = []
++ stdenv.lib.optionals withSFTP [ python2Packages.paramiko ];
# Bazaar can't find the certificates alone
patches = [ ./add_certificates.patch ];
postPatch = ''

View File

@ -103,15 +103,13 @@ let
});
in {
subversion18 = common {
version = "1.8.16";
sha256 = "0imkxn25n6sbcgfldrx4z29npjprb1lxjm5fb89q4297161nx3zi";
version = "1.8.17";
sha256 = "1450fkj1jmxyphqn6cd95z1ykwsabajm9jw4i412qpwss8w9a4fy";
};
subversion19 = common {
version = "1.9.4";
sha256 = "16cjkvvq628hbznkhqkppzs8nifcr7k43s5y4c32cgwqmgigjrqj";
version = "1.9.5";
sha256 = "1ramwly6p74jhb2rdm5ygxjri7jds940cilyvnsdq60xzy5cckwa";
};
}

View File

@ -39,7 +39,7 @@ stdenv.mkDerivation {
done)
'';
preferLocalBuilds = true;
preferLocalBuild = true;
meta = with kodi.meta; {
inherit license homepage;

View File

@ -11,13 +11,13 @@ with lib;
stdenv.mkDerivation rec {
name = "docker-${version}";
version = "1.12.3";
version = "1.12.5";
src = fetchFromGitHub {
owner = "docker";
repo = "docker";
rev = "v${version}";
sha256 = "0jifd35h22lgh36w1j2k97pgndjh5sppr3cwndlv0saf9618wx5k";
sha256 = "1hnxmh2j1vm8714f7jwjrslkqkd1ry25g5wq76aqlpsz5fh2kqb0";
};
buildInputs = [

View File

@ -11,6 +11,7 @@
, vncSupport ? true, libjpeg, libpng
, spiceSupport ? !stdenv.isDarwin, spice, spice_protocol, usbredir
, x86Only ? false
, nixosTestRunner ? false
}:
with stdenv.lib;
@ -133,7 +134,7 @@ stdenv.mkDerivation rec {
# from http://git.qemu.org/?p=qemu.git;a=patch;h=ff55e94d23ae94c8628b0115320157c763eb3e06
./CVE-2016-9102.patch
];
] ++ optional nixosTestRunner ./force-uid0-on-9p.patch;
hardeningDisable = [ "stackprotector" ];
configureFlags =

View File

@ -0,0 +1,77 @@
diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c
index 3f271fc..dc273f4 100644
--- a/hw/9pfs/9p-local.c
+++ b/hw/9pfs/9p-local.c
@@ -45,6 +45,23 @@
#define VIRTFS_META_DIR ".virtfs_metadata"
+static int is_in_store_path(const char *path)
+{
+ static char *store_path = NULL;
+ int store_path_len = -1;
+
+ if (store_path_len == -1) {
+ if ((store_path = getenv("NIX_STORE")) != NULL)
+ store_path_len = strlen(store_path);
+ else
+ store_path_len = 0;
+ }
+
+ if (store_path_len > 0)
+ return strncmp(path, store_path, strlen(store_path)) == 0;
+ return 0;
+}
+
static char *local_mapped_attr_path(FsContext *ctx, const char *path)
{
int dirlen;
@@ -128,6 +145,8 @@ static int local_lstat(FsContext *fs_ctx, V9fsPath *fs_path, struct stat *stbuf)
if (err) {
goto err_out;
}
+ stbuf->st_uid = 0;
+ stbuf->st_gid = 0;
if (fs_ctx->export_flags & V9FS_SM_MAPPED) {
/* Actual credentials are part of extended attrs */
uid_t tmp_uid;
@@ -462,6 +481,11 @@ static ssize_t local_pwritev(FsContext *ctx, V9fsFidOpenState *fs,
return ret;
}
+static inline int maybe_chmod(const char *path, mode_t mode)
+{
+ return is_in_store_path(path) ? 0 : chmod(path, mode);
+}
+
static int local_chmod(FsContext *fs_ctx, V9fsPath *fs_path, FsCred *credp)
{
char *buffer;
@@ -477,7 +501,7 @@ static int local_chmod(FsContext *fs_ctx, V9fsPath *fs_path, FsCred *credp)
} else if ((fs_ctx->export_flags & V9FS_SM_PASSTHROUGH) ||
(fs_ctx->export_flags & V9FS_SM_NONE)) {
buffer = rpath(fs_ctx, path);
- ret = chmod(buffer, credp->fc_mode);
+ ret = maybe_chmod(buffer, credp->fc_mode);
g_free(buffer);
}
return ret;
@@ -621,6 +645,8 @@ static int local_fstat(FsContext *fs_ctx, int fid_type,
if (err) {
return err;
}
+ stbuf->st_uid = 0;
+ stbuf->st_gid = 0;
if (fs_ctx->export_flags & V9FS_SM_MAPPED) {
/* Actual credentials are part of extended attrs */
uid_t tmp_uid;
@@ -916,7 +942,8 @@ static int local_chown(FsContext *fs_ctx, V9fsPath *fs_path, FsCred *credp)
(fs_ctx->export_flags & V9FS_SM_PASSTHROUGH) ||
(fs_ctx->export_flags & V9FS_SM_NONE)) {
buffer = rpath(fs_ctx, path);
- ret = lchown(buffer, credp->fc_uid, credp->fc_gid);
+ ret = is_in_store_path(buffer)
+ ? 0 : lchown(buffer, credp->fc_uid, credp->fc_gid);
g_free(buffer);
} else if (fs_ctx->export_flags & V9FS_SM_MAPPED) {
buffer = rpath(fs_ctx, path);

View File

@ -12,7 +12,7 @@ let
stage1Dir = "lib/rkt/stage1-images";
in stdenv.mkDerivation rec {
version = "1.20.0";
version = "1.21.0";
name = "rkt-${version}";
BUILDDIR="build-${name}";
@ -20,7 +20,7 @@ in stdenv.mkDerivation rec {
owner = "coreos";
repo = "rkt";
rev = "v${version}";
sha256 = "0cypksr13k0qp6qvbd6y8my1dg82s44k6qkiqkpn1vs2ynjg3i52";
sha256 = "0zd7f3yrnzik96a634m2qyrz25f5mi28caadghqdl9q2apxfb896";
};
stage1BaseImage = fetchurl {

View File

@ -1,4 +1,6 @@
#!/usr/bin/env python3
#!/usr/bin/env nix-shell
#!nix-shell -i python3 -p python3
import os
import re
import json

View File

@ -1,8 +1,8 @@
{
"__NOTE": "Generated using update.py from the same directory.",
"extpack": "d28bcd01c14eb07eedd2b964d1abe4876f0a7e0e89530e7ba285a5d6267bf322",
"extpackRev": "111374",
"guest": "347fd39df6ddee8079ad41fbc038e2fb64952a40255d75292e8e49a0a0cbf657",
"main": "e447031de468aee746529b2cf60768922f9beff22a13c54284aa430f5e925933",
"version": "5.1.8"
"extpack": "3982657fd4853bcbc79b9162e618545a479b65aca08e9ced43a904aeeba3ffa5",
"extpackRev": "112026",
"guest": "29fa0af66a3dd273b0c383c4adee31a52061d52f57d176b67f444698300b8c41",
"main": "98073b1b2adee4e6553df73cb5bb6ea8ed7c3a41a475757716fd9400393bea40",
"version": "5.1.10"
}

View File

@ -291,8 +291,8 @@ _clone_user_rev() {
pushd "$dir" >/dev/null
fullRev=$( (git rev-parse "$rev" 2>/dev/null || git rev-parse "refs/heads/$branchName") | tail -n1)
humanReadableRev=$(git describe "$fullRev" 2> /dev/null || git describe --tags "$fullRev" 2> /dev/null || echo -- none --)
commitDate=$(git show --no-patch --pretty=%ci "$fullRev")
commitDateStrict8601=$(git show --no-patch --pretty=%cI "$fullRev")
commitDate=$(git show -1 --no-patch --pretty=%ci "$fullRev")
commitDateStrict8601=$(git show -1 --no-patch --pretty=%cI "$fullRev")
popd >/dev/null
# Allow doing additional processing before .git removal
@ -322,6 +322,18 @@ clone_user_rev() {
fi
}
json_escape() {
local s="$1"
s="${s//\\/\\\\}" # \
s="${s//\"/\\\"}" # "
s="${s//^H/\\\b}" # \b (backspace)
s="${s//^L/\\\f}" # \f (form feed)
s="${s//
/\\\n}" # \n (newline)
s="${s//^M/\\\r}" # \r (carriage return)
s="${s// /\\t}" # \t (tab)
echo "$s"
}
print_results() {
hash="$1"
@ -338,17 +350,15 @@ print_results() {
fi
fi
if test -n "$hash"; then
echo "{"
echo " \"url\": \"$url\","
echo " \"rev\": \"$fullRev\","
echo " \"date\": \"$commitDateStrict8601\","
echo -n " \"$hashType\": \"$hash\""
if test -n "$fetchSubmodules"; then
echo ","
echo -n " \"fetchSubmodules\": true"
fi
echo ""
echo "}"
cat <<EOF
{
"url": "$(json_escape "$url")",
"rev": "$(json_escape "$fullRev")",
"date": "$(json_escape "$commitDateStrict8601")",
"$(json_escape "$hashType")": "$(json_escape "$hash")",
"fetchSubmodules": $([[ -n "fetchSubmodules" ]] && echo true || echo false)
}
EOF
fi
}

View File

@ -10,6 +10,11 @@ stdenv.mkDerivation rec {
};
makeFlags = [ "MANDIR=$(out)/share/man" ];
postInstall = ''
# conflict with shadow-utils
rm $out/share/man/man5/passwd.5 \
$out/share/man/man3/getspnam.3
'';
outputDocdev = "out";
meta = with stdenv.lib; {

View File

@ -0,0 +1,36 @@
{stdenv, fetchurl, perl, bdftopcf, perlPackages, fontforge, SDL, SDL_image}:
stdenv.mkDerivation rec {
name = "${pname}-${version}";
pname = "unscii";
version = "1.1";
# or fetchFromGitHub(owner,repo,rev) or fetchgit(rev)
src = fetchurl {
url = "http://pelulamu.net/${pname}/${name}-src.tar.gz";
sha256 = "0qcxcnqz2nlwfzlrn115kkp3n8dd7593h762vxs6vfqm13i39lq1";
};
buildInputs = [];
nativeBuildInputs = [perl bdftopcf perlPackages.TextCharWidth fontforge
SDL SDL_image];
preConfigure = ''
patchShebangs .
'';
installPhase = ''
mkdir -p "$out/share/fonts"/{truetype,opentype,web,svg}
cp *.hex "$out/share/fonts/"
cp *.pcf "$out/share/fonts/"
cp *.ttf "$out/share/fonts/truetype"
cp *.otf "$out/share/fonts/opentype"
cp *.svg "$out/share/fonts/svg"
cp *.woff "$out/share/fonts/web"
'';
meta = {
inherit version;
description = ''Bitmapped character-art-friendly Unicode fonts'';
# Basically GPL2+ with font exception — because of the Unifont-augmented
# version. The reduced version is public domain.
license = http://unifoundry.com/LICENSE.txt;
maintainers = [stdenv.lib.maintainers.raskin];
platforms = stdenv.lib.platforms.linux;
homepage = "http://pelulamu.net/unscii/";
};
}

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec {
name = "efl-${version}";
version = "1.18.3";
version = "1.18.4";
src = fetchurl {
url = "http://download.enlightenment.org/rel/libs/efl/${name}.tar.xz";
sha256 = "1h347sfxajyb5s931m9qga14wwiqci7aicww2imxjhzm8w4fqj07";
sha256 = "09c0ajszjarcs6d62zlgnf1aha2f921mfr0gxg6nwza36xzc1srr";
};
nativeBuildInputs = [ pkgconfig ];

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