Merge branch 'master' into staging
This commit is contained in:
commit
5a38ab8add
@ -20,6 +20,7 @@
|
||||
adolfogc = "Adolfo E. García Castro <adolfo.garcia.cr@gmail.com>";
|
||||
aespinosa = "Allan Espinosa <allan.espinosa@outlook.com>";
|
||||
aflatter = "Alexander Flatter <flatter@fastmail.fm>";
|
||||
afldcr = "James Alexander Feldman-Crough <alex@fldcr.com>";
|
||||
aforemny = "Alexander Foremny <alexanderforemny@googlemail.com>";
|
||||
afranchuk = "Alex Franchuk <alex.franchuk@gmail.com>";
|
||||
aherrmann = "Andreas Herrmann <andreash87@gmx.ch>";
|
||||
@ -276,6 +277,7 @@
|
||||
luispedro = "Luis Pedro Coelho <luis@luispedro.org>";
|
||||
lukego = "Luke Gorrie <luke@snabb.co>";
|
||||
lw = "Sergey Sofeychuk <lw@fmap.me>";
|
||||
ma27 = "Maximilian Bosch <maximilian@mbosch.me>";
|
||||
madjar = "Georges Dubus <georges.dubus@compiletoi.net>";
|
||||
magnetophon = "Bart Brouns <bart@magnetophon.nl>";
|
||||
mahe = "Matthias Herrmann <matthias.mh.herrmann@gmail.com>";
|
||||
@ -303,7 +305,7 @@
|
||||
meisternu = "Matt Miemiec <meister@krutt.org>";
|
||||
metabar = "Celine Mercier <softs@metabarcoding.org>";
|
||||
mguentner = "Maximilian Güntner <code@klandest.in>";
|
||||
mic92 = "Jörg Thalheim <joerg@higgsboson.tk>";
|
||||
mic92 = "Jörg Thalheim <joerg@thalheim.io>";
|
||||
michaelpj = "Michael Peyton Jones <michaelpj@gmail.com>";
|
||||
michalrus = "Michal Rus <m@michalrus.com>";
|
||||
michelk = "Michel Kuhlmann <michel@kuhlmanns.info>";
|
||||
@ -427,6 +429,7 @@
|
||||
rongcuid = "Rongcui Dong <rongcuid@outlook.com>";
|
||||
ronny = "Ronny Pfannschmidt <nixos@ronnypfannschmidt.de>";
|
||||
rszibele = "Richard Szibele <richard_szibele@hotmail.com>";
|
||||
rtreffer = "Rene Treffer <treffer+nixos@measite.de>";
|
||||
rushmorem = "Rushmore Mushambi <rushmore@webenchanter.com>";
|
||||
rvl = "Rodney Lorrimar <dev+nix@rodney.id.au>";
|
||||
rvlander = "Gaëtan André <rvlander@gaetanandre.eu>";
|
||||
|
@ -26,6 +26,12 @@ rec {
|
||||
|
||||
cleanSource = builtins.filterSource cleanSourceFilter;
|
||||
|
||||
# Filter sources by a list of regular expressions.
|
||||
#
|
||||
# E.g. `src = sourceByRegex ./my-subproject [".*\.py$" "^database.sql$"]`
|
||||
sourceByRegex = src: regexes: builtins.filterSource (path: type:
|
||||
let relPath = lib.removePrefix (toString src + "/") (toString path);
|
||||
in lib.any (re: builtins.match re relPath != null) regexes) src;
|
||||
|
||||
# Get all files ending with the specified suffices from the given
|
||||
# directory or its descendants. E.g. `sourceFilesBySuffices ./dir
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
<para>The file <filename>/etc/nixos/configuration.nix</filename>
|
||||
contains the current configuration of your machine. Whenever you’ve
|
||||
changed something to that file, you should do
|
||||
<link linkend="ch-configuration">changed something</link> in that file, you should do
|
||||
|
||||
<screen>
|
||||
# nixos-rebuild switch</screen>
|
||||
|
@ -607,7 +607,8 @@ sub waitForWindow {
|
||||
sub copyFileFromHost {
|
||||
my ($self, $from, $to) = @_;
|
||||
my $s = `cat $from` or die;
|
||||
$self->mustSucceed("echo '$s' > $to"); # !!! escaping
|
||||
$s =~ s/'/'\\''/g;
|
||||
$self->mustSucceed("echo '$s' > $to");
|
||||
}
|
||||
|
||||
|
||||
|
@ -19,7 +19,7 @@ rm -f ec2-amis.nix
|
||||
|
||||
types="hvm pv"
|
||||
stores="ebs s3"
|
||||
regions="eu-west-1 eu-west-2 eu-central-1 us-east-1 us-east-2 us-west-1 us-west-2 ap-southeast-1 ap-southeast-2 ap-northeast-1 ap-northeast-2 sa-east-1 ap-south-1"
|
||||
regions="eu-west-1 eu-west-2 eu-central-1 us-east-1 us-east-2 us-west-1 us-west-2 ca-central-1 ap-southeast-1 ap-southeast-2 ap-northeast-1 ap-northeast-2 sa-east-1 ap-south-1"
|
||||
|
||||
for type in $types; do
|
||||
link=$stateDir/$type
|
||||
|
@ -13,7 +13,7 @@ let
|
||||
useDisplayDevice = cfg.connectDisplay;
|
||||
};
|
||||
|
||||
useBbswitch = cfg.pmMethod == "bbswitch";
|
||||
useBbswitch = cfg.pmMethod == "bbswitch" || cfg.pmMethod == "auto" && useNvidia;
|
||||
|
||||
primus = pkgs.primus.override {
|
||||
inherit useNvidia;
|
||||
@ -65,7 +65,7 @@ in
|
||||
|
||||
pmMethod = mkOption {
|
||||
default = "auto";
|
||||
type = types.enum [ "auto" "bbswitch" "nouveau" "switcheroo" "none" ];
|
||||
type = types.enum [ "auto" "bbswitch" "switcheroo" "none" ];
|
||||
description = ''
|
||||
Set preferred power management method for unused card.
|
||||
'';
|
||||
|
61
nixos/modules/hardware/video/capture/mwprocapture.nix
Normal file
61
nixos/modules/hardware/video/capture/mwprocapture.nix
Normal file
@ -0,0 +1,61 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.hardware.mwProCapture;
|
||||
|
||||
kernelPackages = config.boot.kernelPackages;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
options.hardware.mwProCapture.enable = mkEnableOption "Magewell Pro Capture family kernel module";
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
assertions = singleton {
|
||||
assertion = versionAtLeast kernelPackages.kernel.version "3.2";
|
||||
message = "Magewell Pro Capture family module is not supported for kernels older than 3.2";
|
||||
};
|
||||
|
||||
boot.kernelModules = [ "ProCapture" ];
|
||||
|
||||
environment.systemPackages = [ kernelPackages.mwprocapture ];
|
||||
|
||||
boot.extraModulePackages = [ kernelPackages.mwprocapture ];
|
||||
|
||||
boot.extraModprobeConfig = ''
|
||||
# Set the png picture to be displayed when no input signal is detected.
|
||||
options ProCapture nosignal_file=${kernelPackages.mwprocapture}/res/NoSignal.png
|
||||
|
||||
# Set the png picture to be displayed when an unsupported input signal is detected.
|
||||
options ProCapture unsupported_file=${kernelPackages.mwprocapture}/res/Unsupported.png
|
||||
|
||||
# Set the png picture to be displayed when an loking input signal is detected.
|
||||
options ProCapture locking_file=${kernelPackages.mwprocapture}/res/Locking.png
|
||||
|
||||
# Message signaled interrupts switch
|
||||
#options ProCapture disable_msi=0
|
||||
|
||||
# Set the debug level
|
||||
#options ProCapture debug_level=0
|
||||
|
||||
# Force init switch eeprom
|
||||
#options ProCapture init_switch_eeprom=0
|
||||
|
||||
# Min frame interval for VIDIOC_ENUM_FRAMEINTERVALS (default: 166666(100ns))
|
||||
#options ProCapture enum_frameinterval_min=166666
|
||||
|
||||
# VIDIOC_ENUM_FRAMESIZES type (1: DISCRETE; 2: STEPWISE; otherwise: CONTINUOUS )
|
||||
#options ProCapture enum_framesizes_type=0
|
||||
|
||||
# Parameters for internal usage
|
||||
#options ProCapture internal_params=""
|
||||
'';
|
||||
|
||||
};
|
||||
|
||||
}
|
@ -49,6 +49,10 @@ in
|
||||
Option "RandRRotation" "on"
|
||||
'';
|
||||
|
||||
environment.etc."nvidia/nvidia-application-profiles-rc" = mkIf nvidia_x11.useProfiles {
|
||||
source = "${nvidia_x11.bin}/share/nvidia/nvidia-application-profiles-rc";
|
||||
};
|
||||
|
||||
hardware.opengl.package = nvidiaPackage nvidia_x11 pkgs;
|
||||
hardware.opengl.package32 = nvidiaPackage nvidia_libs32 pkgs_i686;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# List all devices which are detected by nixos-hardware-scan.
|
||||
# List all devices which are detected by nixos-generate-config.
|
||||
# Common devices are enabled by default.
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# List all devices which are _not_ detected by nixos-hardware-scan.
|
||||
# List all devices which are _not_ detected by nixos-generate-config.
|
||||
# Common devices are enabled by default.
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
|
@ -41,6 +41,7 @@
|
||||
./hardware/video/amdgpu.nix
|
||||
./hardware/video/amdgpu-pro.nix
|
||||
./hardware/video/ati.nix
|
||||
./hardware/video/capture/mwprocapture.nix
|
||||
./hardware/video/bumblebee.nix
|
||||
./hardware/video/displaylink.nix
|
||||
./hardware/video/nvidia.nix
|
||||
@ -80,6 +81,7 @@
|
||||
./programs/light.nix
|
||||
./programs/man.nix
|
||||
./programs/mosh.nix
|
||||
./programs/mtr.nix
|
||||
./programs/nano.nix
|
||||
./programs/oblogout.nix
|
||||
./programs/screen.nix
|
||||
@ -91,6 +93,7 @@
|
||||
./programs/tmux.nix
|
||||
./programs/venus.nix
|
||||
./programs/vim.nix
|
||||
./programs/wireshark.nix
|
||||
./programs/wvdial.nix
|
||||
./programs/xfs_quota.nix
|
||||
./programs/xonsh.nix
|
||||
|
27
nixos/modules/programs/mtr.nix
Normal file
27
nixos/modules/programs/mtr.nix
Normal file
@ -0,0 +1,27 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.programs.mtr;
|
||||
in {
|
||||
options = {
|
||||
programs.mtr = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to add mtr to the global environment and configure a
|
||||
setcap wrapper for it.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
security.wrappers.mtr = {
|
||||
source = "${pkgs.mtr}/bin/mtr";
|
||||
capabilities = "cap_net_raw+p";
|
||||
};
|
||||
};
|
||||
}
|
42
nixos/modules/programs/wireshark.nix
Normal file
42
nixos/modules/programs/wireshark.nix
Normal file
@ -0,0 +1,42 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.programs.wireshark;
|
||||
wireshark = cfg.package;
|
||||
in {
|
||||
options = {
|
||||
programs.wireshark = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to add Wireshark to the global environment and configure a
|
||||
setcap wrapper for 'dumpcap' for users in the 'wireshark' group.
|
||||
'';
|
||||
};
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.wireshark-cli;
|
||||
defaultText = "pkgs.wireshark-cli";
|
||||
description = ''
|
||||
Which Wireshark package to install in the global environment.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
environment.systemPackages = [ wireshark ];
|
||||
users.extraGroups.wireshark = {};
|
||||
|
||||
security.wrappers.dumpcap = {
|
||||
source = "${wireshark}/bin/dumpcap";
|
||||
capabilities = "cap_net_raw+p";
|
||||
owner = "root";
|
||||
group = "wireshark";
|
||||
permissions = "u+rx,g+x";
|
||||
};
|
||||
};
|
||||
}
|
@ -129,7 +129,7 @@ in
|
||||
|
||||
certs = mkOption {
|
||||
default = { };
|
||||
type = with types; loaOf (submodule certOpts);
|
||||
type = with types; attrsOf (submodule certOpts);
|
||||
description = ''
|
||||
Attribute set of certificates to get signed and renewed.
|
||||
'';
|
||||
|
@ -28,6 +28,7 @@ let
|
||||
, source
|
||||
, owner ? "nobody"
|
||||
, group ? "nogroup"
|
||||
, permissions ? "u+rx,g+x,o+x"
|
||||
, ...
|
||||
}:
|
||||
assert (lib.versionAtLeast (lib.getVersion config.boot.kernelPackages.kernel) "4.3");
|
||||
@ -45,7 +46,7 @@ let
|
||||
${pkgs.libcap.out}/bin/setcap "cap_setpcap,${capabilities}" $wrapperDir/${program}
|
||||
|
||||
# Set the executable bit
|
||||
chmod u+rx,g+x,o+x $wrapperDir/${program}
|
||||
chmod ${permissions} $wrapperDir/${program}
|
||||
'';
|
||||
|
||||
###### Activation script for the setuid wrappers
|
||||
|
@ -4,6 +4,8 @@ with lib;
|
||||
|
||||
let
|
||||
|
||||
name = "mpd";
|
||||
|
||||
uid = config.ids.uids.mpd;
|
||||
gid = config.ids.gids.mpd;
|
||||
cfg = config.services.mpd;
|
||||
@ -54,13 +56,14 @@ in {
|
||||
description = ''
|
||||
Extra directives added to to the end of MPD's configuration file,
|
||||
mpd.conf. Basic configuration like file location and uid/gid
|
||||
is added automatically to the beginning of the file.
|
||||
is added automatically to the beginning of the file. For available
|
||||
options see <literal>man 5 mpd.conf</literal>'.
|
||||
'';
|
||||
};
|
||||
|
||||
dataDir = mkOption {
|
||||
type = types.path;
|
||||
default = "/var/lib/mpd";
|
||||
default = "/var/lib/${name}";
|
||||
description = ''
|
||||
The directory where MPD stores its state, tag cache,
|
||||
playlists etc.
|
||||
@ -69,13 +72,13 @@ in {
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "mpd";
|
||||
default = name;
|
||||
description = "User account under which MPD runs.";
|
||||
};
|
||||
|
||||
group = mkOption {
|
||||
type = types.str;
|
||||
default = "mpd";
|
||||
default = name;
|
||||
description = "Group account under which MPD runs.";
|
||||
};
|
||||
|
||||
@ -131,17 +134,17 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
users.extraUsers = optionalAttrs (cfg.user == "mpd") (singleton {
|
||||
users.extraUsers = optionalAttrs (cfg.user == name) (singleton {
|
||||
inherit uid;
|
||||
name = "mpd";
|
||||
inherit name;
|
||||
group = cfg.group;
|
||||
extraGroups = [ "audio" ];
|
||||
description = "Music Player Daemon user";
|
||||
home = "${cfg.dataDir}";
|
||||
});
|
||||
|
||||
users.extraGroups = optionalAttrs (cfg.group == "mpd") (singleton {
|
||||
name = "mpd";
|
||||
users.extraGroups = optionalAttrs (cfg.group == name) (singleton {
|
||||
inherit name;
|
||||
gid = gid;
|
||||
});
|
||||
};
|
||||
|
@ -76,14 +76,6 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
stanchionSsl = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Tell stanchion to use SSL.
|
||||
'';
|
||||
};
|
||||
|
||||
distributedCookie = mkOption {
|
||||
type = types.str;
|
||||
default = "riak";
|
||||
@ -148,8 +140,6 @@ in
|
||||
|
||||
distributed_cookie = ${cfg.distributedCookie}
|
||||
|
||||
stanchion_ssl=${if cfg.stanchionSsl then "on" else "off"}
|
||||
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
|
||||
|
@ -1,8 +1,11 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
bluez-bluetooth = pkgs.bluez;
|
||||
cfg = config.hardware.bluetooth;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
@ -11,33 +14,53 @@ in
|
||||
|
||||
options = {
|
||||
|
||||
hardware.bluetooth.enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Whether to enable support for Bluetooth.";
|
||||
hardware.bluetooth.enable = mkEnableOption "support for Bluetooth.";
|
||||
|
||||
hardware.bluetooth.powerOnBoot = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Whether to power up the default Bluetooth controller on boot.";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
###### implementation
|
||||
|
||||
config = mkIf config.hardware.bluetooth.enable {
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
environment.systemPackages = [ bluez-bluetooth pkgs.openobex pkgs.obexftp ];
|
||||
|
||||
services.udev.packages = [ bluez-bluetooth ];
|
||||
|
||||
services.dbus.packages = [ bluez-bluetooth ];
|
||||
systemd.packages = [ bluez-bluetooth ];
|
||||
|
||||
systemd.packages = [ bluez-bluetooth ];
|
||||
services.udev.extraRules = optionalString cfg.powerOnBoot ''
|
||||
ACTION=="add", KERNEL=="hci[0-9]*", ENV{SYSTEMD_WANTS}="bluetooth-power@%k.service"
|
||||
'';
|
||||
|
||||
systemd.services = {
|
||||
bluetooth = {
|
||||
wantedBy = [ "bluetooth.target" ];
|
||||
aliases = [ "dbus-org.bluez.service" ];
|
||||
};
|
||||
|
||||
"bluetooth-power@" = mkIf cfg.powerOnBoot {
|
||||
description = "Power up bluetooth controller";
|
||||
after = [
|
||||
"bluetooth.service"
|
||||
"suspend.target"
|
||||
"sys-subsystem-bluetooth-devices-%i.device"
|
||||
];
|
||||
wantedBy = [ "suspend.target" ];
|
||||
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.ExecStart = "${pkgs.bluez.out}/bin/hciconfig %i up";
|
||||
};
|
||||
|
||||
systemd.services.bluetooth = {
|
||||
wantedBy = [ "bluetooth.target" ];
|
||||
aliases = [ "dbus-org.bluez.service" ];
|
||||
};
|
||||
|
||||
systemd.user.services.obex = {
|
||||
aliases = [ "dbus-org.bluez.obex.service" ];
|
||||
systemd.user.services = {
|
||||
obex.aliases = [ "dbus-org.bluez.obex.service" ];
|
||||
};
|
||||
|
||||
};
|
||||
|
@ -184,7 +184,7 @@ in
|
||||
description = ''
|
||||
This option defines extra ignore rules.
|
||||
'';
|
||||
type = with types; loaOf (submodule ignoreOptions);
|
||||
type = with types; attrsOf (submodule ignoreOptions);
|
||||
};
|
||||
|
||||
ignoreCron = mkOption {
|
||||
@ -192,7 +192,7 @@ in
|
||||
description = ''
|
||||
This option defines extra ignore rules for cronjobs.
|
||||
'';
|
||||
type = with types; loaOf (submodule ignoreCronOptions);
|
||||
type = with types; attrsOf (submodule ignoreCronOptions);
|
||||
};
|
||||
|
||||
extraGroups = mkOption {
|
||||
|
@ -94,44 +94,6 @@ let
|
||||
in flatten (mapAttrsToList mkSublist attrs);
|
||||
in all isNull (findPkiDefinitions [] manualPkiOptions);
|
||||
|
||||
configFile = pkgs.writeText "taskdrc" (''
|
||||
# systemd related
|
||||
daemon = false
|
||||
log = -
|
||||
|
||||
# logging
|
||||
${mkConfLine "debug" cfg.debug}
|
||||
${mkConfLine "ip.log" cfg.ipLog}
|
||||
|
||||
# general
|
||||
${mkConfLine "ciphers" cfg.ciphers}
|
||||
${mkConfLine "confirmation" cfg.confirmation}
|
||||
${mkConfLine "extensions" cfg.extensions}
|
||||
${mkConfLine "queue.size" cfg.queueSize}
|
||||
${mkConfLine "request.limit" cfg.requestLimit}
|
||||
|
||||
# client
|
||||
${mkConfLine "client.allow" cfg.allowedClientIDs}
|
||||
${mkConfLine "client.deny" cfg.disallowedClientIDs}
|
||||
|
||||
# server
|
||||
server = ${cfg.listenHost}:${toString cfg.listenPort}
|
||||
${mkConfLine "trust" cfg.trust}
|
||||
|
||||
# PKI options
|
||||
${if needToCreateCA then ''
|
||||
ca.cert = ${cfg.dataDir}/keys/ca.cert
|
||||
server.cert = ${cfg.dataDir}/keys/server.cert
|
||||
server.key = ${cfg.dataDir}/keys/server.key
|
||||
server.crl = ${cfg.dataDir}/keys/server.crl
|
||||
'' else ''
|
||||
ca.cert = ${cfg.pki.manual.ca.cert}
|
||||
server.cert = ${cfg.pki.manual.server.cert}
|
||||
server.key = ${cfg.pki.manual.server.key}
|
||||
server.crl = ${cfg.pki.manual.server.crl}
|
||||
''}
|
||||
'' + cfg.extraConfig);
|
||||
|
||||
orgOptions = { name, ... }: {
|
||||
options.users = mkOption {
|
||||
type = types.uniq (types.listOf types.str);
|
||||
@ -154,9 +116,8 @@ let
|
||||
|
||||
certtool = "${pkgs.gnutls.bin}/bin/certtool";
|
||||
|
||||
nixos-taskserver = pkgs.pythonPackages.buildPythonPackage {
|
||||
nixos-taskserver = pkgs.pythonPackages.buildPythonApplication {
|
||||
name = "nixos-taskserver";
|
||||
namePrefix = "";
|
||||
|
||||
src = pkgs.runCommand "nixos-taskserver-src" {} ''
|
||||
mkdir -p "$out"
|
||||
@ -167,6 +128,7 @@ let
|
||||
certBits = cfg.pki.auto.bits;
|
||||
clientExpiration = cfg.pki.auto.expiration.client;
|
||||
crlExpiration = cfg.pki.auto.expiration.crl;
|
||||
isAutoConfig = if needToCreateCA then "True" else "False";
|
||||
}}" > "$out/main.py"
|
||||
cat > "$out/setup.py" <<EOF
|
||||
from setuptools import setup
|
||||
@ -365,20 +327,57 @@ in {
|
||||
pki.manual = manualPkiOptions;
|
||||
pki.auto = autoPkiOptions;
|
||||
|
||||
extraConfig = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
example = "client.cert = /tmp/debugging.cert";
|
||||
config = mkOption {
|
||||
type = types.attrs;
|
||||
example.client.cert = "/tmp/debugging.cert";
|
||||
description = ''
|
||||
Extra lines to append to the taskdrc configuration file.
|
||||
Configuration options to pass to Taskserver.
|
||||
|
||||
The options here are the same as described in <citerefentry>
|
||||
<refentrytitle>taskdrc</refentrytitle>
|
||||
<manvolnum>5</manvolnum>
|
||||
</citerefentry>, but with one difference:
|
||||
|
||||
The <literal>server</literal> option is
|
||||
<literal>server.listen</literal> here, because the
|
||||
<literal>server</literal> option would collide with other options
|
||||
like <literal>server.cert</literal> and we would run in a type error
|
||||
(attribute set versus string).
|
||||
|
||||
Nix types like integers or booleans are automatically converted to
|
||||
the right values Taskserver would expect.
|
||||
'';
|
||||
apply = let
|
||||
mkKey = path: if path == ["server" "listen"] then "server"
|
||||
else concatStringsSep "." path;
|
||||
recurse = path: attrs: let
|
||||
mapper = name: val: let
|
||||
newPath = path ++ [ name ];
|
||||
scalar = if val == true then "true"
|
||||
else if val == false then "false"
|
||||
else toString val;
|
||||
in if isAttrs val then recurse newPath val
|
||||
else [ "${mkKey newPath}=${scalar}" ];
|
||||
in concatLists (mapAttrsToList mapper attrs);
|
||||
in recurse [];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
imports = [
|
||||
(mkRemovedOptionModule ["services" "taskserver" "extraConfig"] ''
|
||||
This option was removed in favor of `services.taskserver.config` with
|
||||
different semantics (it's now a list of attributes instead of lines).
|
||||
|
||||
Please look up the documentation of `services.taskserver.config' to get
|
||||
more information about the new way to pass additional configuration
|
||||
options.
|
||||
'')
|
||||
];
|
||||
|
||||
config = mkMerge [
|
||||
(mkIf cfg.enable {
|
||||
environment.systemPackages = [ pkgs.taskserver nixos-taskserver ];
|
||||
environment.systemPackages = [ nixos-taskserver ];
|
||||
|
||||
users.users = optional (cfg.user == "taskd") {
|
||||
name = "taskd";
|
||||
@ -392,6 +391,44 @@ in {
|
||||
gid = config.ids.gids.taskd;
|
||||
};
|
||||
|
||||
services.taskserver.config = {
|
||||
# systemd related
|
||||
daemon = false;
|
||||
log = "-";
|
||||
|
||||
# logging
|
||||
debug = cfg.debug;
|
||||
ip.log = cfg.ipLog;
|
||||
|
||||
# general
|
||||
ciphers = cfg.ciphers;
|
||||
confirmation = cfg.confirmation;
|
||||
extensions = cfg.extensions;
|
||||
queue.size = cfg.queueSize;
|
||||
request.limit = cfg.requestLimit;
|
||||
|
||||
# client
|
||||
client.allow = cfg.allowedClientIDs;
|
||||
client.deny = cfg.disallowedClientIDs;
|
||||
|
||||
# server
|
||||
trust = cfg.trust;
|
||||
server = {
|
||||
listen = "${cfg.listenHost}:${toString cfg.listenPort}";
|
||||
} // (if needToCreateCA then {
|
||||
cert = "${cfg.dataDir}/keys/server.cert";
|
||||
key = "${cfg.dataDir}/keys/server.key";
|
||||
crl = "${cfg.dataDir}/keys/server.crl";
|
||||
} else {
|
||||
cert = "${cfg.pki.manual.server.cert}";
|
||||
key = "${cfg.pki.manual.server.key}";
|
||||
crl = "${cfg.pki.manual.server.crl}";
|
||||
});
|
||||
|
||||
ca.cert = if needToCreateCA then "${cfg.dataDir}/keys/ca.cert"
|
||||
else "${cfg.pki.manual.ca.cert}";
|
||||
};
|
||||
|
||||
systemd.services.taskserver-init = {
|
||||
wantedBy = [ "taskserver.service" ];
|
||||
before = [ "taskserver.service" ];
|
||||
@ -404,7 +441,6 @@ in {
|
||||
|
||||
script = ''
|
||||
${taskd} init
|
||||
echo "include ${configFile}" > "${cfg.dataDir}/config"
|
||||
touch "${cfg.dataDir}/.is_initialized"
|
||||
'';
|
||||
|
||||
@ -436,7 +472,10 @@ in {
|
||||
in "${helperTool} process-json '${jsonFile}'";
|
||||
|
||||
serviceConfig = {
|
||||
ExecStart = "@${taskd} taskd server";
|
||||
ExecStart = let
|
||||
mkCfgFlag = flag: escapeShellArg "--${flag}";
|
||||
cfgFlags = concatMapStringsSep " " mkCfgFlag cfg.config;
|
||||
in "@${taskd} taskd server ${cfgFlags}";
|
||||
ExecReload = "${pkgs.coreutils}/bin/kill -USR1 $MAINPID";
|
||||
Restart = "on-failure";
|
||||
PermissionsStartOnly = true;
|
||||
|
@ -136,9 +136,9 @@ $ ssh server nixos-taskserver user export my-company alice | sh
|
||||
|
||||
<para>
|
||||
If you set any options within
|
||||
<option>service.taskserver.pki.manual.*</option>, the automatic user and
|
||||
CA management by the <command>nixos-taskserver</command> is disabled and
|
||||
you need to create certificates and keys by yourself.
|
||||
<option>service.taskserver.pki.manual.*</option>,
|
||||
<command>nixos-taskserver</command> won't issue certificates, but you can
|
||||
still use it for adding or removing user accounts.
|
||||
</para>
|
||||
</section>
|
||||
</chapter>
|
||||
|
@ -13,6 +13,7 @@ from tempfile import NamedTemporaryFile
|
||||
|
||||
import click
|
||||
|
||||
IS_AUTO_CONFIG = @isAutoConfig@ # NOQA
|
||||
CERTTOOL_COMMAND = "@certtool@"
|
||||
CERT_BITS = "@certBits@"
|
||||
CLIENT_EXPIRATION = "@clientExpiration@"
|
||||
@ -149,6 +150,12 @@ def create_template(contents):
|
||||
|
||||
|
||||
def generate_key(org, user):
|
||||
if not IS_AUTO_CONFIG:
|
||||
msg = "Automatic PKI handling is disabled, you need to " \
|
||||
"manually issue a client certificate for user {}.\n"
|
||||
sys.stderr.write(msg.format(user))
|
||||
return
|
||||
|
||||
basedir = os.path.join(TASKD_DATA_DIR, "keys", org, user)
|
||||
if os.path.exists(basedir):
|
||||
raise OSError("Keyfile directory for {} already exists.".format(user))
|
||||
@ -243,26 +250,32 @@ class User(object):
|
||||
self.key = key
|
||||
|
||||
def export(self):
|
||||
pubcert = getkey(self.__org, self.name, "public.cert")
|
||||
privkey = getkey(self.__org, self.name, "private.key")
|
||||
cacert = getkey("ca.cert")
|
||||
|
||||
keydir = "${TASKDATA:-$HOME/.task}/keys"
|
||||
|
||||
credentials = '/'.join([self.__org, self.name, self.key])
|
||||
allow_unquoted = string.ascii_letters + string.digits + "/-_."
|
||||
if not all((c in allow_unquoted) for c in credentials):
|
||||
credentials = "'" + credentials.replace("'", r"'\''") + "'"
|
||||
|
||||
script = [
|
||||
"umask 0077",
|
||||
'mkdir -p "{}"'.format(keydir),
|
||||
mktaskkey("certificate", os.path.join(keydir, "public.cert"),
|
||||
pubcert),
|
||||
mktaskkey("key", os.path.join(keydir, "private.key"), privkey),
|
||||
mktaskkey("ca", os.path.join(keydir, "ca.cert"), cacert),
|
||||
script = []
|
||||
|
||||
if IS_AUTO_CONFIG:
|
||||
pubcert = getkey(self.__org, self.name, "public.cert")
|
||||
privkey = getkey(self.__org, self.name, "private.key")
|
||||
cacert = getkey("ca.cert")
|
||||
|
||||
keydir = "${TASKDATA:-$HOME/.task}/keys"
|
||||
|
||||
script += [
|
||||
"umask 0077",
|
||||
'mkdir -p "{}"'.format(keydir),
|
||||
mktaskkey("certificate", os.path.join(keydir, "public.cert"),
|
||||
pubcert),
|
||||
mktaskkey("key", os.path.join(keydir, "private.key"), privkey),
|
||||
mktaskkey("ca", os.path.join(keydir, "ca.cert"), cacert)
|
||||
]
|
||||
|
||||
script.append(
|
||||
"task config taskd.credentials -- {}".format(credentials)
|
||||
]
|
||||
)
|
||||
|
||||
return "\n".join(script) + "\n"
|
||||
|
||||
@ -526,7 +539,7 @@ def export_user(organisation, user):
|
||||
userobj = organisation.get_user(user)
|
||||
if userobj is None:
|
||||
msg = "User {} doesn't exist in organisation {}."
|
||||
sys.exit(msg.format(userobj.name, organisation.name))
|
||||
sys.exit(msg.format(user, organisation.name))
|
||||
|
||||
sys.stdout.write(userobj.export())
|
||||
|
||||
|
@ -76,6 +76,7 @@ let
|
||||
# wrapped plugins by makeWrapper being with dots
|
||||
ignore_file ^\.
|
||||
|
||||
allow ^::1$
|
||||
allow ^127\.0\.0\.1$
|
||||
|
||||
${nodeCfg.extraConfig}
|
||||
|
@ -91,6 +91,26 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
enableNmbd = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Whether to enable Samba's nmbd, which replies to NetBIOS over IP name
|
||||
service requests. It also participates in the browsing protocols
|
||||
which make up the Windows "Network Neighborhood" view.
|
||||
'';
|
||||
};
|
||||
|
||||
enableWinbindd = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Whether to enable Samba's winbindd, which provides a number of services
|
||||
to the Name Service Switch capability found in most modern C libraries,
|
||||
to arbitrary applications via PAM and ntlm_auth and to Samba itself.
|
||||
'';
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.samba;
|
||||
@ -185,7 +205,12 @@ in
|
||||
###### implementation
|
||||
|
||||
config = mkMerge
|
||||
[ { # Always provide a smb.conf to shut up programs like smbclient and smbspool.
|
||||
[ { assertions =
|
||||
[ { assertion = cfg.nsswins -> cfg.enableWinbindd;
|
||||
message = "If samba.nsswins is enabled, then samba.enableWinbindd must also be enabled";
|
||||
}
|
||||
];
|
||||
# Always provide a smb.conf to shut up programs like smbclient and smbspool.
|
||||
environment.etc = singleton
|
||||
{ source =
|
||||
if cfg.enable then configFile
|
||||
@ -194,7 +219,7 @@ in
|
||||
};
|
||||
}
|
||||
|
||||
(mkIf config.services.samba.enable {
|
||||
(mkIf cfg.enable {
|
||||
|
||||
system.nssModules = optional cfg.nsswins samba;
|
||||
|
||||
@ -207,9 +232,9 @@ in
|
||||
};
|
||||
|
||||
services = {
|
||||
"samba-nmbd" = daemonService "nmbd" "-F";
|
||||
"samba-smbd" = daemonService "smbd" "-F";
|
||||
"samba-winbindd" = daemonService "winbindd" "-F";
|
||||
"samba-nmbd" = mkIf cfg.enableNmbd (daemonService "nmbd" "-F");
|
||||
"samba-winbindd" = mkIf cfg.enableWinbindd (daemonService "winbindd" "-F");
|
||||
"samba-setup" = {
|
||||
description = "Samba Setup Task";
|
||||
script = setupScript;
|
||||
|
@ -8,7 +8,7 @@ in
|
||||
options.services.tahoe = {
|
||||
introducers = mkOption {
|
||||
default = {};
|
||||
type = with types; loaOf (submodule {
|
||||
type = with types; attrsOf (submodule {
|
||||
options = {
|
||||
nickname = mkOption {
|
||||
type = types.str;
|
||||
@ -49,7 +49,7 @@ in
|
||||
};
|
||||
nodes = mkOption {
|
||||
default = {};
|
||||
type = with types; loaOf (submodule {
|
||||
type = with types; attrsOf (submodule {
|
||||
options = {
|
||||
nickname = mkOption {
|
||||
type = types.str;
|
||||
|
@ -18,7 +18,7 @@ in
|
||||
|
||||
networks = mkOption {
|
||||
default = { };
|
||||
type = with types; loaOf (submodule {
|
||||
type = with types; attrsOf (submodule {
|
||||
options = {
|
||||
|
||||
extraConfig = mkOption {
|
||||
@ -59,7 +59,7 @@ in
|
||||
|
||||
hosts = mkOption {
|
||||
default = { };
|
||||
type = types.loaOf types.lines;
|
||||
type = types.attrsOf types.lines;
|
||||
description = ''
|
||||
The name of the host in the network as well as the configuration for that host.
|
||||
This name should only contain alphanumerics and underscores.
|
||||
|
@ -208,7 +208,7 @@ in
|
||||
|
||||
networks = mkOption {
|
||||
default = { };
|
||||
type = with types; loaOf (submodule networkOpts);
|
||||
type = with types; attrsOf (submodule networkOpts);
|
||||
description = ''
|
||||
IRC networks to connect the user to.
|
||||
'';
|
||||
|
@ -202,6 +202,7 @@ in
|
||||
ExecStart = "${pkgs.mattermost}/bin/mattermost-platform";
|
||||
WorkingDirectory = "${cfg.statePath}";
|
||||
PrivateTmp = true;
|
||||
JoinsNamespaceOf = mkIf cfg.localDatabaseCreate "postgresql.service";
|
||||
Restart = "always";
|
||||
RestartSec = "10";
|
||||
LimitNOFILE = "49152";
|
||||
|
@ -16,20 +16,7 @@ let
|
||||
) cfg.virtualHosts;
|
||||
enableIPv6 = config.networking.enableIPv6;
|
||||
|
||||
configFile = pkgs.runCommand "nginx.conf" {
|
||||
inherit configFileUnformatted;
|
||||
passAsFile = [ "configFileUnformatted" ];
|
||||
# configFileUnformatted is created locally, therefore so should this be.
|
||||
preferLocalBuild = true;
|
||||
allowSubstitutes = false;
|
||||
} ''
|
||||
cp ${configFileUnformatted} nginx.conf
|
||||
chmod u+w nginx.conf
|
||||
${pkgs.nginx-config-formatter}/bin/nginxfmt nginx.conf
|
||||
cp nginx.conf $out
|
||||
'';
|
||||
|
||||
configFileUnformatted = pkgs.writeText "nginx.unformatted.conf" ''
|
||||
configFile = pkgs.writeText "nginx.conf" ''
|
||||
user ${cfg.user} ${cfg.group};
|
||||
error_log stderr;
|
||||
daemon off;
|
||||
|
@ -74,7 +74,7 @@ in
|
||||
|
||||
services.zope2.instances = mkOption {
|
||||
default = {};
|
||||
type = with types; loaOf (submodule zope2Opts);
|
||||
type = with types; attrsOf (submodule zope2Opts);
|
||||
example = literalExample ''
|
||||
{
|
||||
plone01 = {
|
||||
|
@ -41,6 +41,12 @@ in
|
||||
Shell commands executed just before XFCE is started.
|
||||
'';
|
||||
};
|
||||
|
||||
enableXfwm = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Enable the XFWM (default) window manager.";
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
@ -87,7 +93,6 @@ in
|
||||
pkgs.xfce.xfce4volumed
|
||||
pkgs.xfce.xfce4-screenshooter
|
||||
pkgs.xfce.xfconf
|
||||
pkgs.xfce.xfwm4
|
||||
# This supplies some "abstract" icons such as
|
||||
# "utilities-terminal" and "accessories-text-editor".
|
||||
pkgs.gnome3.defaultIconTheme
|
||||
@ -99,6 +104,7 @@ in
|
||||
pkgs.xfce.xfce4_appfinder
|
||||
pkgs.xfce.tumbler # found via dbus
|
||||
]
|
||||
++ optional cfg.enableXfwm pkgs.xfce.xfwm4
|
||||
++ optional config.powerManagement.enable pkgs.xfce.xfce4_power_manager
|
||||
++ optional config.networking.networkmanager.enable pkgs.networkmanagerapplet
|
||||
++ optionals (!cfg.noDesktop)
|
||||
|
@ -19,6 +19,7 @@ let
|
||||
glibc # needed for getent
|
||||
shadow
|
||||
nettools # needed for hostname
|
||||
utillinux # needed for mount and mountpoint
|
||||
];
|
||||
|
||||
in
|
||||
@ -168,12 +169,12 @@ in
|
||||
local options="$3"
|
||||
local fsType="$4"
|
||||
|
||||
if ${pkgs.utillinux}/bin/mountpoint -q "$mountPoint"; then
|
||||
if mountpoint -q "$mountPoint"; then
|
||||
local options="remount,$options"
|
||||
else
|
||||
mkdir -m 0755 -p "$mountPoint"
|
||||
fi
|
||||
${pkgs.utillinux}/bin/mount -t "$fsType" -o "$options" "$device" "$mountPoint"
|
||||
mount -t "$fsType" -o "$options" "$device" "$mountPoint"
|
||||
}
|
||||
source ${config.system.build.earlyMountScript}
|
||||
'';
|
||||
|
@ -176,7 +176,7 @@ in
|
||||
|
||||
boot.initrd.availableKernelModules =
|
||||
[ # Note: most of these (especially the SATA/PATA modules)
|
||||
# shouldn't be included by default since nixos-hardware-scan
|
||||
# shouldn't be included by default since nixos-generate-config
|
||||
# detects them, but I'm keeping them for now for backwards
|
||||
# compatibility.
|
||||
|
||||
|
@ -54,7 +54,7 @@ let
|
||||
inherit (efi) canTouchEfiVariables;
|
||||
inherit (cfg)
|
||||
version extraConfig extraPerEntryConfig extraEntries forceInstall useOSProber
|
||||
extraEntriesBeforeNixOS extraPrepareConfig configurationLimit copyKernels
|
||||
extraEntriesBeforeNixOS extraPrepareConfig extraInitrd configurationLimit copyKernels
|
||||
default fsIdentifier efiSupport efiInstallAsRemovable gfxmodeEfi gfxmodeBios;
|
||||
path = (makeBinPath ([
|
||||
pkgs.coreutils pkgs.gnused pkgs.gnugrep pkgs.findutils pkgs.diffutils pkgs.btrfs-progs
|
||||
@ -267,6 +267,19 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
extraInitrd = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
example = "/boot/extra_initrafms.gz";
|
||||
description = ''
|
||||
The path to a second initramfs to be supplied to the kernel.
|
||||
This ramfs will not be copied to the store, so that it can
|
||||
contain secrets such as LUKS keyfiles or ssh keys.
|
||||
This implies that rolling back to a previous configuration
|
||||
won't rollback the state of this file.
|
||||
'';
|
||||
};
|
||||
|
||||
useOSProber = mkOption {
|
||||
default = false;
|
||||
type = types.bool;
|
||||
|
@ -49,6 +49,7 @@ my $extraPrepareConfig = get("extraPrepareConfig");
|
||||
my $extraPerEntryConfig = get("extraPerEntryConfig");
|
||||
my $extraEntries = get("extraEntries");
|
||||
my $extraEntriesBeforeNixOS = get("extraEntriesBeforeNixOS") eq "true";
|
||||
my $extraInitrd = get("extraInitrd");
|
||||
my $splashImage = get("splashImage");
|
||||
my $configurationLimit = int(get("configurationLimit"));
|
||||
my $copyKernels = get("copyKernels") eq "true";
|
||||
@ -226,6 +227,13 @@ my $grubStore;
|
||||
if ($copyKernels == 0) {
|
||||
$grubStore = GrubFs($storePath);
|
||||
}
|
||||
my $extraInitrdPath;
|
||||
if ($extraInitrd) {
|
||||
if (! -f $extraInitrd) {
|
||||
print STDERR "Warning: the specified extraInitrd " . $extraInitrd . " doesn't exist. Your system won't boot without it.\n";
|
||||
}
|
||||
$extraInitrdPath = GrubFs($extraInitrd);
|
||||
}
|
||||
|
||||
# Generate the header.
|
||||
my $conf .= "# Automatically generated. DO NOT EDIT THIS FILE!\n";
|
||||
@ -336,6 +344,9 @@ sub addEntry {
|
||||
|
||||
my $kernel = copyToKernelsDir(Cwd::abs_path("$path/kernel"));
|
||||
my $initrd = copyToKernelsDir(Cwd::abs_path("$path/initrd"));
|
||||
if ($extraInitrd) {
|
||||
$initrd .= " " .$extraInitrdPath->path;
|
||||
}
|
||||
my $xen = -e "$path/xen.gz" ? copyToKernelsDir(Cwd::abs_path("$path/xen.gz")) : undef;
|
||||
|
||||
# FIXME: $confName
|
||||
@ -358,6 +369,9 @@ sub addEntry {
|
||||
if ($copyKernels == 0) {
|
||||
$conf .= $grubStore->search . "\n";
|
||||
}
|
||||
if ($extraInitrd) {
|
||||
$conf .= $extraInitrdPath->search . "\n";
|
||||
}
|
||||
$conf .= " $extraPerEntryConfig\n" if $extraPerEntryConfig;
|
||||
$conf .= " multiboot $xen $xenParams\n" if $xen;
|
||||
$conf .= " " . ($xen ? "module" : "linux") . " $kernel $kernelParams\n";
|
||||
|
@ -101,11 +101,27 @@ def main():
|
||||
parser.add_argument('default_config', metavar='DEFAULT-CONFIG', help='The default NixOS config to boot')
|
||||
args = parser.parse_args()
|
||||
|
||||
try:
|
||||
with open("/etc/machine-id") as machine_file:
|
||||
machine_id = machine_file.readlines()[0]
|
||||
except IOError as e:
|
||||
if e.errno != errno.ENOENT:
|
||||
raise
|
||||
# Since systemd version 232 a machine ID is required and it might not
|
||||
# be there on newly installed systems, so let's generate one so that
|
||||
# bootctl can find it and we can also pass it to write_entry() later.
|
||||
cmd = ["@systemd@/bin/systemd-machine-id-setup", "--print"]
|
||||
machine_id = subprocess.check_output(cmd).rstrip()
|
||||
|
||||
if os.getenv("NIXOS_INSTALL_GRUB") == "1":
|
||||
warnings.warn("NIXOS_INSTALL_GRUB env var deprecated, use NIXOS_INSTALL_BOOTLOADER", DeprecationWarning)
|
||||
os.environ["NIXOS_INSTALL_BOOTLOADER"] = "1"
|
||||
|
||||
if os.getenv("NIXOS_INSTALL_BOOTLOADER") == "1":
|
||||
# bootctl uses fopen() with modes "wxe" and fails if the file exists.
|
||||
if os.path.exists("@efiSysMountPoint@/loader/loader.conf"):
|
||||
os.unlink("@efiSysMountPoint@/loader/loader.conf")
|
||||
|
||||
if "@canTouchEfiVariables@" == "1":
|
||||
subprocess.check_call(["@systemd@/bin/bootctl", "--path=@efiSysMountPoint@", "install"])
|
||||
else:
|
||||
@ -113,13 +129,6 @@ def main():
|
||||
|
||||
mkdir_p("@efiSysMountPoint@/efi/nixos")
|
||||
mkdir_p("@efiSysMountPoint@/loader/entries")
|
||||
try:
|
||||
with open("/etc/machine-id") as machine_file:
|
||||
machine_id = machine_file.readlines()[0]
|
||||
except IOError as e:
|
||||
if e.errno != errno.ENOENT:
|
||||
raise
|
||||
machine_id = None
|
||||
|
||||
gens = get_generations("system")
|
||||
remove_old_entries(gens)
|
||||
|
@ -79,7 +79,7 @@ let
|
||||
checkBond = checkUnitConfig "Bond" [
|
||||
(assertOnlyFields [
|
||||
"Mode" "TransmitHashPolicy" "LACPTransmitRate" "MIIMonitorSec"
|
||||
"UpDelaySec" "DownDelaySec"
|
||||
"UpDelaySec" "DownDelaySec" "GratuitousARP"
|
||||
])
|
||||
(assertValueOneOf "Mode" [
|
||||
"balance-rr" "active-backup" "balance-xor"
|
||||
|
@ -37,31 +37,41 @@ let
|
||||
ip link del "${i}" 2>/dev/null || true
|
||||
'';
|
||||
|
||||
in
|
||||
# warn that these attributes are deprecated (2017-2-2)
|
||||
# Should be removed in the release after next
|
||||
bondDeprecation = rec {
|
||||
deprecated = [ "lacp_rate" "miimon" "mode" "xmit_hash_policy" ];
|
||||
filterDeprecated = bond: (filterAttrs (attrName: attr:
|
||||
elem attrName deprecated && attr != null) bond);
|
||||
};
|
||||
|
||||
{
|
||||
bondWarnings =
|
||||
let oneBondWarnings = bondName: bond:
|
||||
mapAttrsToList (bondText bondName) (bondDeprecation.filterDeprecated bond);
|
||||
bondText = bondName: optName: _:
|
||||
"${bondName}.${optName} is deprecated, use ${bondName}.driverOptions";
|
||||
in {
|
||||
warnings = flatten (mapAttrsToList oneBondWarnings cfg.bonds);
|
||||
};
|
||||
|
||||
config = mkIf (!cfg.useNetworkd) {
|
||||
normalConfig = {
|
||||
|
||||
systemd.services =
|
||||
let
|
||||
|
||||
deviceDependency = dev:
|
||||
if (config.boot.isContainer == false)
|
||||
then
|
||||
# Trust udev when not in the container
|
||||
optional (dev != null) (subsystemDevice dev)
|
||||
else
|
||||
# When in the container, check whether the interface is built from other definitions
|
||||
if (hasAttr dev cfg.bridges) ||
|
||||
(hasAttr dev cfg.bonds) ||
|
||||
(hasAttr dev cfg.macvlans) ||
|
||||
(hasAttr dev cfg.sits) ||
|
||||
(hasAttr dev cfg.vlans) ||
|
||||
(hasAttr dev cfg.vswitches) ||
|
||||
(hasAttr dev cfg.wlanInterfaces)
|
||||
then [ "${dev}-netdev.service" ]
|
||||
else [];
|
||||
# Use systemd service if we manage device creation, else
|
||||
# trust udev when not in a container
|
||||
if (hasAttr dev (filterAttrs (k: v: v.virtual) cfg.interfaces)) ||
|
||||
(hasAttr dev cfg.bridges) ||
|
||||
(hasAttr dev cfg.bonds) ||
|
||||
(hasAttr dev cfg.macvlans) ||
|
||||
(hasAttr dev cfg.sits) ||
|
||||
(hasAttr dev cfg.vlans) ||
|
||||
(hasAttr dev cfg.vswitches) ||
|
||||
(hasAttr dev cfg.wlanInterfaces)
|
||||
then [ "${dev}-netdev.service" ]
|
||||
else optional (dev != null && !config.boot.isContainer) (subsystemDevice dev);
|
||||
|
||||
networkLocalCommands = {
|
||||
after = [ "network-setup.service" ];
|
||||
@ -198,7 +208,7 @@ in
|
||||
user "${i.virtualOwner}"
|
||||
'';
|
||||
postStop = ''
|
||||
ip link del ${i.name}
|
||||
ip link del ${i.name} || true
|
||||
'';
|
||||
};
|
||||
|
||||
@ -296,10 +306,11 @@ in
|
||||
|
||||
echo "Creating new bond ${n}..."
|
||||
ip link add name "${n}" type bond \
|
||||
${optionalString (v.mode != null) "mode ${toString v.mode}"} \
|
||||
${optionalString (v.miimon != null) "miimon ${toString v.miimon}"} \
|
||||
${optionalString (v.xmit_hash_policy != null) "xmit_hash_policy ${toString v.xmit_hash_policy}"} \
|
||||
${optionalString (v.lacp_rate != null) "lacp_rate ${toString v.lacp_rate}"}
|
||||
${let opts = (mapAttrs (const toString)
|
||||
(bondDeprecation.filterDeprecated v))
|
||||
// v.driverOptions;
|
||||
in concatStringsSep "\n"
|
||||
(mapAttrsToList (set: val: " ${set} ${val} \\") opts)}
|
||||
|
||||
# !!! There must be a better way to wait for the interface
|
||||
while [ ! -d "/sys/class/net/${n}" ]; do sleep 0.1; done;
|
||||
@ -335,7 +346,7 @@ in
|
||||
ip link set "${n}" up
|
||||
'';
|
||||
postStop = ''
|
||||
ip link delete "${n}"
|
||||
ip link delete "${n}" || true
|
||||
'';
|
||||
});
|
||||
|
||||
@ -363,7 +374,7 @@ in
|
||||
ip link set "${n}" up
|
||||
'';
|
||||
postStop = ''
|
||||
ip link delete "${n}"
|
||||
ip link delete "${n}" || true
|
||||
'';
|
||||
});
|
||||
|
||||
@ -387,7 +398,7 @@ in
|
||||
ip link set "${n}" up
|
||||
'';
|
||||
postStop = ''
|
||||
ip link delete "${n}"
|
||||
ip link delete "${n}" || true
|
||||
'';
|
||||
});
|
||||
|
||||
@ -410,6 +421,14 @@ in
|
||||
KERNEL=="tun", TAG+="systemd"
|
||||
'';
|
||||
|
||||
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
config = mkMerge [
|
||||
bondWarnings
|
||||
(mkIf (!cfg.useNetworkd) normalConfig)
|
||||
];
|
||||
}
|
||||
|
@ -115,17 +115,65 @@ in
|
||||
Name = name;
|
||||
Kind = "bond";
|
||||
};
|
||||
bondConfig =
|
||||
(optionalAttrs (bond.lacp_rate != null) {
|
||||
LACPTransmitRate = bond.lacp_rate;
|
||||
}) // (optionalAttrs (bond.miimon != null) {
|
||||
MIIMonitorSec = bond.miimon;
|
||||
}) // (optionalAttrs (bond.mode != null) {
|
||||
Mode = bond.mode;
|
||||
}) // (optionalAttrs (bond.xmit_hash_policy != null) {
|
||||
TransmitHashPolicy = bond.xmit_hash_policy;
|
||||
});
|
||||
bondConfig = let
|
||||
# manual mapping as of 2017-02-03
|
||||
# man 5 systemd.netdev [BOND]
|
||||
# to https://www.kernel.org/doc/Documentation/networking/bonding.txt
|
||||
# driver options.
|
||||
driverOptionMapping = let
|
||||
trans = f: optName: { valTransform = f; optNames = [optName]; };
|
||||
simp = trans id;
|
||||
ms = trans (v: v + "ms");
|
||||
in {
|
||||
Mode = simp "mode";
|
||||
TransmitHashPolicy = simp "xmit_hash_policy";
|
||||
LACPTransmitRate = simp "lacp_rate";
|
||||
MIIMonitorSec = ms "miimon";
|
||||
UpDelaySec = ms "updelay";
|
||||
DownDelaySec = ms "downdelay";
|
||||
LearnPacketIntervalSec = simp "lp_interval";
|
||||
AdSelect = simp "ad_select";
|
||||
FailOverMACPolicy = simp "fail_over_mac";
|
||||
ARPValidate = simp "arp_validate";
|
||||
# apparently in ms for this value?! Upstream bug?
|
||||
ARPIntervalSec = simp "arp_interval";
|
||||
ARPIPTargets = simp "arp_ip_target";
|
||||
ARPAllTargets = simp "arp_all_targets";
|
||||
PrimaryReselectPolicy = simp "primary_reselect";
|
||||
ResendIGMP = simp "resend_igmp";
|
||||
PacketsPerSlave = simp "packets_per_slave";
|
||||
GratuitousARP = { valTransform = id;
|
||||
optNames = [ "num_grat_arp" "num_unsol_na" ]; };
|
||||
AllSlavesActive = simp "all_slaves_active";
|
||||
MinLinks = simp "min_links";
|
||||
};
|
||||
|
||||
do = bond.driverOptions;
|
||||
assertNoUnknownOption = let
|
||||
knownOptions = flatten (mapAttrsToList (_: kOpts: kOpts.optNames)
|
||||
driverOptionMapping);
|
||||
# options that apparently don’t exist in the networkd config
|
||||
unknownOptions = [ "primary" ];
|
||||
assertTrace = bool: msg: if bool then true else builtins.trace msg false;
|
||||
in assert all (driverOpt: assertTrace
|
||||
(elem driverOpt (knownOptions ++ unknownOptions))
|
||||
"The bond.driverOption `${driverOpt}` cannot be mapped to the list of known networkd bond options. Please add it to the mapping above the assert or to `unknownOptions` should it not exist in networkd.")
|
||||
(mapAttrsToList (k: _: k) do); "";
|
||||
# get those driverOptions that have been set
|
||||
filterSystemdOptions = filterAttrs (sysDOpt: kOpts:
|
||||
any (kOpt: do ? "${kOpt}") kOpts.optNames);
|
||||
# build final set of systemd options to bond values
|
||||
buildOptionSet = mapAttrs (_: kOpts: with kOpts;
|
||||
# we simply take the first set kernel bond option
|
||||
# (one option has multiple names, which is silly)
|
||||
head (map (optN: valTransform (do."${optN}"))
|
||||
# only map those that exist
|
||||
(filter (o: do ? "${o}") optNames)));
|
||||
in seq assertNoUnknownOption
|
||||
(buildOptionSet (filterSystemdOptions driverOptionMapping));
|
||||
|
||||
};
|
||||
|
||||
networks = listToAttrs (flip map bond.interfaces (bi:
|
||||
nameValuePair "40-${bi}" (mkMerge [ (genericNetwork (mkOverride 999)) {
|
||||
DHCP = mkOverride 0 (dhcpStr false);
|
||||
|
@ -587,11 +587,28 @@ in
|
||||
description = "The interfaces to bond together";
|
||||
};
|
||||
|
||||
driverOptions = mkOption {
|
||||
type = types.attrsOf types.str;
|
||||
default = {};
|
||||
example = literalExample {
|
||||
interfaces = [ "eth0" "wlan0" ];
|
||||
miimon = 100;
|
||||
mode = "active-backup";
|
||||
};
|
||||
description = ''
|
||||
Options for the bonding driver.
|
||||
Documentation can be found in
|
||||
<link xlink:href="https://www.kernel.org/doc/Documentation/networking/bonding.txt" />
|
||||
'';
|
||||
|
||||
};
|
||||
|
||||
lacp_rate = mkOption {
|
||||
default = null;
|
||||
example = "fast";
|
||||
type = types.nullOr types.str;
|
||||
description = ''
|
||||
DEPRECATED, use `driverOptions`.
|
||||
Option specifying the rate in which we'll ask our link partner
|
||||
to transmit LACPDU packets in 802.3ad mode.
|
||||
'';
|
||||
@ -602,6 +619,7 @@ in
|
||||
example = 100;
|
||||
type = types.nullOr types.int;
|
||||
description = ''
|
||||
DEPRECATED, use `driverOptions`.
|
||||
Miimon is the number of millisecond in between each round of polling
|
||||
by the device driver for failed links. By default polling is not
|
||||
enabled and the driver is trusted to properly detect and handle
|
||||
@ -614,6 +632,7 @@ in
|
||||
example = "active-backup";
|
||||
type = types.nullOr types.str;
|
||||
description = ''
|
||||
DEPRECATED, use `driverOptions`.
|
||||
The mode which the bond will be running. The default mode for
|
||||
the bonding driver is balance-rr, optimizing for throughput.
|
||||
More information about valid modes can be found at
|
||||
@ -626,6 +645,7 @@ in
|
||||
example = "layer2+3";
|
||||
type = types.nullOr types.str;
|
||||
description = ''
|
||||
DEPRECATED, use `driverOptions`.
|
||||
Selects the transmit hash policy to use for slave selection in
|
||||
balance-xor, 802.3ad, and tlb modes.
|
||||
'';
|
||||
|
@ -156,6 +156,10 @@ let self = {
|
||||
"16.09".ap-southeast-2.hvm-s3 = "ami-87f4f0e4";
|
||||
"16.09".ap-southeast-2.pv-ebs = "ami-d8ede9bb";
|
||||
"16.09".ap-southeast-2.pv-s3 = "ami-a6ebefc5";
|
||||
"16.09".ca-central-1.hvm-ebs = "ami-9f863bfb";
|
||||
"16.09".ca-central-1.hvm-s3 = "ami-ea85388e";
|
||||
"16.09".ca-central-1.pv-ebs = "ami-ce8a37aa";
|
||||
"16.09".ca-central-1.pv-s3 = "ami-448a3720";
|
||||
"16.09".eu-central-1.hvm-ebs = "ami-1b884774";
|
||||
"16.09".eu-central-1.hvm-s3 = "ami-b08c43df";
|
||||
"16.09".eu-central-1.pv-ebs = "ami-888946e7";
|
||||
|
@ -236,8 +236,8 @@ let
|
||||
firewall.allowPing = true;
|
||||
useDHCP = false;
|
||||
bonds.bond = {
|
||||
mode = "balance-rr";
|
||||
interfaces = [ "eth1" "eth2" ];
|
||||
driverOptions.mode = "balance-rr";
|
||||
};
|
||||
interfaces.eth1.ip4 = mkOverride 0 [ ];
|
||||
interfaces.eth2.ip4 = mkOverride 0 [ ];
|
||||
|
@ -1,4 +1,62 @@
|
||||
import ./make-test.nix {
|
||||
import ./make-test.nix ({ pkgs, ... }: let
|
||||
snakeOil = pkgs.runCommand "snakeoil-certs" {
|
||||
outputs = [ "out" "cacert" "cert" "key" "crl" ];
|
||||
buildInputs = [ pkgs.gnutls.bin ];
|
||||
caTemplate = pkgs.writeText "snakeoil-ca.template" ''
|
||||
cn = server
|
||||
expiration_days = -1
|
||||
cert_signing_key
|
||||
ca
|
||||
'';
|
||||
certTemplate = pkgs.writeText "snakeoil-cert.template" ''
|
||||
cn = server
|
||||
expiration_days = -1
|
||||
tls_www_server
|
||||
encryption_key
|
||||
signing_key
|
||||
'';
|
||||
crlTemplate = pkgs.writeText "snakeoil-crl.template" ''
|
||||
expiration_days = -1
|
||||
'';
|
||||
userCertTemplace = pkgs.writeText "snakoil-user-cert.template" ''
|
||||
organization = snakeoil
|
||||
cn = server
|
||||
expiration_days = -1
|
||||
tls_www_client
|
||||
encryption_key
|
||||
signing_key
|
||||
'';
|
||||
} ''
|
||||
certtool -p --bits 4096 --outfile ca.key
|
||||
certtool -s --template "$caTemplate" --load-privkey ca.key \
|
||||
--outfile "$cacert"
|
||||
certtool -p --bits 4096 --outfile "$key"
|
||||
certtool -c --template "$certTemplate" \
|
||||
--load-ca-privkey ca.key \
|
||||
--load-ca-certificate "$cacert" \
|
||||
--load-privkey "$key" \
|
||||
--outfile "$cert"
|
||||
certtool --generate-crl --template "$crlTemplate" \
|
||||
--load-ca-privkey ca.key \
|
||||
--load-ca-certificate "$cacert" \
|
||||
--outfile "$crl"
|
||||
|
||||
mkdir "$out"
|
||||
|
||||
# Stripping key information before the actual PEM-encoded values is solely
|
||||
# to make test output a bit less verbose when copying the client key to the
|
||||
# actual client.
|
||||
certtool -p --bits 4096 | sed -n \
|
||||
-e '/^----* *BEGIN/,/^----* *END/p' > "$out/alice.key"
|
||||
|
||||
certtool -c --template "$userCertTemplace" \
|
||||
--load-privkey "$out/alice.key" \
|
||||
--load-ca-privkey ca.key \
|
||||
--load-ca-certificate "$cacert" \
|
||||
--outfile "$out/alice.cert"
|
||||
'';
|
||||
|
||||
in {
|
||||
name = "taskserver";
|
||||
|
||||
nodes = rec {
|
||||
@ -12,6 +70,23 @@ import ./make-test.nix {
|
||||
};
|
||||
};
|
||||
|
||||
# New generation of the server with manual config
|
||||
newServer = { lib, nodes, ... }: {
|
||||
imports = [ server ];
|
||||
services.taskserver.pki.manual = {
|
||||
ca.cert = snakeOil.cacert;
|
||||
server.cert = snakeOil.cert;
|
||||
server.key = snakeOil.key;
|
||||
server.crl = snakeOil.crl;
|
||||
};
|
||||
# This is to avoid assigning a different network address to the new
|
||||
# generation.
|
||||
networking = lib.mapAttrs (lib.const lib.mkForce) {
|
||||
inherit (nodes.server.config.networking)
|
||||
hostName interfaces primaryIPAddress extraHosts;
|
||||
};
|
||||
};
|
||||
|
||||
client1 = { pkgs, ... }: {
|
||||
environment.systemPackages = [ pkgs.taskwarrior pkgs.gnutls ];
|
||||
users.users.alice.isNormalUser = true;
|
||||
@ -26,6 +101,8 @@ import ./make-test.nix {
|
||||
testScript = { nodes, ... }: let
|
||||
cfg = nodes.server.config.services.taskserver;
|
||||
portStr = toString cfg.listenPort;
|
||||
newServerSystem = nodes.newServer.config.system.build.toplevel;
|
||||
switchToNewServer = "${newServerSystem}/bin/switch-to-configuration test";
|
||||
in ''
|
||||
sub su ($$) {
|
||||
my ($user, $cmd) = @_;
|
||||
@ -33,8 +110,8 @@ import ./make-test.nix {
|
||||
return "su - $user -c '$esc'";
|
||||
}
|
||||
|
||||
sub setupClientsFor ($$) {
|
||||
my ($org, $user) = @_;
|
||||
sub setupClientsFor ($$;$) {
|
||||
my ($org, $user, $extraInit) = @_;
|
||||
|
||||
for my $client ($client1, $client2) {
|
||||
$client->nest("initialize client for user $user", sub {
|
||||
@ -58,6 +135,8 @@ import ./make-test.nix {
|
||||
}
|
||||
});
|
||||
|
||||
eval { &$extraInit($client, $org, $user) };
|
||||
|
||||
$client->succeed(su $user,
|
||||
"task config taskd.server server:${portStr} >&2"
|
||||
);
|
||||
@ -104,7 +183,10 @@ import ./make-test.nix {
|
||||
return su $user, $cmd;
|
||||
}
|
||||
|
||||
startAll;
|
||||
# Explicitly start the VMs so that we don't accidentally start newServer
|
||||
$server->start;
|
||||
$client1->start;
|
||||
$client2->start;
|
||||
|
||||
$server->waitForUnit("taskserver.service");
|
||||
|
||||
@ -162,5 +244,42 @@ import ./make-test.nix {
|
||||
restartServer;
|
||||
testSync "bar";
|
||||
};
|
||||
|
||||
subtest "check manual configuration", sub {
|
||||
$server->succeed('${switchToNewServer} >&2');
|
||||
$server->waitForUnit("taskserver.service");
|
||||
$server->waitForOpenPort(${portStr});
|
||||
|
||||
$server->succeed(
|
||||
"nixos-taskserver org add manualOrg",
|
||||
"nixos-taskserver user add manualOrg alice"
|
||||
);
|
||||
|
||||
setupClientsFor "manualOrg", "alice", sub {
|
||||
my ($client, $org, $user) = @_;
|
||||
my $cfgpath = "/home/$user/.task";
|
||||
|
||||
$client->copyFileFromHost("${snakeOil.cacert}", "$cfgpath/ca.cert");
|
||||
for my $file ('alice.key', 'alice.cert') {
|
||||
$client->copyFileFromHost("${snakeOil}/$file", "$cfgpath/$file");
|
||||
}
|
||||
|
||||
for my $file ("$user.key", "$user.cert") {
|
||||
$client->copyFileFromHost(
|
||||
"${snakeOil}/$file", "$cfgpath/$file"
|
||||
);
|
||||
}
|
||||
$client->copyFileFromHost(
|
||||
"${snakeOil.cacert}", "$cfgpath/ca.cert"
|
||||
);
|
||||
$client->succeed(
|
||||
(su "alice", "task config taskd.ca $cfgpath/ca.cert"),
|
||||
(su "alice", "task config taskd.key $cfgpath/$user.key"),
|
||||
(su $user, "task config taskd.certificate $cfgpath/$user.cert")
|
||||
);
|
||||
};
|
||||
|
||||
testSync "alice";
|
||||
};
|
||||
'';
|
||||
}
|
||||
})
|
||||
|
@ -1,4 +1,5 @@
|
||||
{ stdenv, fetchFromGitHub, ncurses, pkgconfig
|
||||
{ stdenv, fetchFromGitHub, runCommand, ncurses, pkgconfig
|
||||
, libiconv, CoreAudio
|
||||
|
||||
, alsaSupport ? stdenv.isLinux, alsaLib ? null
|
||||
# simple fallback for everyone else
|
||||
@ -18,7 +19,7 @@
|
||||
, cddbSupport ? true, libcddb ? null
|
||||
, cdioSupport ? true, libcdio ? null
|
||||
, cueSupport ? true, libcue ? null
|
||||
, discidSupport ? true, libdiscid ? null
|
||||
, discidSupport ? (!stdenv.isDarwin), libdiscid ? null
|
||||
, ffmpegSupport ? true, ffmpeg ? null
|
||||
, flacSupport ? true, flac ? null
|
||||
, madSupport ? true, libmad ? null
|
||||
@ -89,6 +90,13 @@ let
|
||||
#(mkFlag vtxSupport "CONFIG_VTX=y" libayemu)
|
||||
];
|
||||
|
||||
clangGCC = runCommand "clang-gcc" {} ''
|
||||
#! ${stdenv.shell}
|
||||
mkdir -p $out/bin
|
||||
ln -s ${stdenv.cc}/bin/clang $out/bin/gcc
|
||||
ln -s ${stdenv.cc}/bin/clang++ $out/bin/g++
|
||||
'';
|
||||
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
@ -109,13 +117,16 @@ stdenv.mkDerivation rec {
|
||||
"CONFIG_WAV=y"
|
||||
] ++ concatMap (a: a.flags) opts);
|
||||
|
||||
buildInputs = [ ncurses pkgconfig ] ++ concatMap (a: a.deps) opts;
|
||||
buildInputs = [ ncurses pkgconfig ]
|
||||
++ stdenv.lib.optional stdenv.cc.isClang clangGCC
|
||||
++ stdenv.lib.optionals stdenv.isDarwin [ libiconv CoreAudio ]
|
||||
++ concatMap (a: a.deps) opts;
|
||||
|
||||
meta = {
|
||||
meta = with stdenv.lib; {
|
||||
description = "Small, fast and powerful console music player for Linux and *BSD";
|
||||
homepage = https://cmus.github.io/;
|
||||
license = stdenv.lib.licenses.gpl2;
|
||||
maintainers = [ stdenv.lib.maintainers.oxij ];
|
||||
platforms = stdenv.lib.platforms.linux;
|
||||
license = licenses.gpl2;
|
||||
maintainers = [ maintainers.oxij ];
|
||||
platforms = platforms.linux ++ platforms.darwin;
|
||||
};
|
||||
}
|
||||
|
@ -2,11 +2,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "atom-${version}";
|
||||
version = "1.14.1";
|
||||
version = "1.14.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/atom/atom/releases/download/v${version}/atom-amd64.deb";
|
||||
sha256 = "0dmzqz1j2nfcm459zgfzqym26kmbspdn9lipf77aawbbn2y36xqp";
|
||||
sha256 = "16zc1bbvxs9fpd9y3mzgbl789djp3p1664a8b2nn9ann1mbkdgsk";
|
||||
name = "${name}.deb";
|
||||
};
|
||||
|
||||
|
@ -304,12 +304,12 @@ in
|
||||
|
||||
webstorm = buildWebStorm rec {
|
||||
name = "webstorm-${version}";
|
||||
version = "2016.3.2";
|
||||
version = "2016.3.3";
|
||||
description = "Professional IDE for Web and JavaScript development";
|
||||
license = stdenv.lib.licenses.unfree;
|
||||
src = fetchurl {
|
||||
url = "https://download.jetbrains.com/webstorm/WebStorm-${version}.tar.gz";
|
||||
sha256 = "1h3kjvd10j48n9ch2ldqjsizq5n8gkm0vrrvznayc1bz2kjvhavn";
|
||||
sha256 = "08f266afi8ia5jvvgk2lncra2n3i0l5c3h7c8fwxz6y8fhhlas4y";
|
||||
};
|
||||
wmClass = "jetbrains-webstorm";
|
||||
};
|
||||
|
@ -24,12 +24,12 @@ let
|
||||
unwrapped =
|
||||
kdeDerivation rec {
|
||||
name = "kile-${version}";
|
||||
version = "2016-10-24";
|
||||
version = "2017-02-09";
|
||||
|
||||
src = fetchgit {
|
||||
url = git://anongit.kde.org/kile.git;
|
||||
rev = "e005e2ac140881aa7610bd363d181cf306f91f80";
|
||||
sha256 = "1labv8jagsfk0k7nvxh90in9464avzdabgs215y1h658zjh1wpy4";
|
||||
rev = "f77f6e627487c152f111e307ad6dc71699ade746";
|
||||
sha256 = "0wpqaix9ssa28cm7qqjj0zfrscjgk8s3kmi5b4kk8h583gsrikib";
|
||||
|
||||
};
|
||||
|
||||
|
@ -8,11 +8,12 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "krita-${version}";
|
||||
version = "3.1.1";
|
||||
ver_min = "3.1.2";
|
||||
version = "${ver_min}.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://download.kde.org/stable/krita/${version}/${name}.tar.gz";
|
||||
sha256 = "13qff9kdd38x81rq6yfmkm3083l8s0yn9h3d5qg3qmhrkd5jrvv2";
|
||||
url = "http://download.kde.org/stable/krita/${ver_min}/${name}.tar.gz";
|
||||
sha256 = "934ed82c3f4e55e7819b327c838ea2f307d3bf3d040722501378b01d76a3992d";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake extra-cmake-modules makeQtWrapper ];
|
||||
|
@ -1,78 +1,70 @@
|
||||
{ withKDE ? true
|
||||
, stdenv, fetchurl, gettext, poppler_qt4, qt4
|
||||
# Qt only (no KDE):
|
||||
, pkgconfig
|
||||
# With KDE
|
||||
, cmake, automoc4, kdelibs
|
||||
}:
|
||||
{ stdenv, fetchFromGitHub, gettext, poppler_qt5, qt5 , pkgconfig }:
|
||||
|
||||
# Warning: You will also need a working pdflatex installation containing (at
|
||||
# least) auctex and pgf.
|
||||
# Warning: You will also need a working pdflatex installation containing
|
||||
# at least auctex and pgf.
|
||||
|
||||
assert withKDE -> kdelibs != null;
|
||||
# This package only builds ktikz without KDE integration because KDE4 is
|
||||
# deprecated and upstream does not (yet ?) support KDE5.
|
||||
# See historical versions of this file for building ktikz with KDE4.
|
||||
|
||||
let
|
||||
version = "0.10";
|
||||
stdenv.mkDerivation rec {
|
||||
version = "unstable-20161122";
|
||||
name = "qtikz-${version}";
|
||||
|
||||
qtikz = {
|
||||
name = "qtikz-${version}";
|
||||
src = fetchFromGitHub {
|
||||
owner = "fhackenberger";
|
||||
repo = "ktikz";
|
||||
rev = "be66c8b1ff7e6b791b65af65e83c4926f307cf5a";
|
||||
sha256 = "15jx53sjlnky4yg3ry1i1c29g28v1jbbvhbz66h7a49pfxa40fj3";
|
||||
};
|
||||
|
||||
conf = ''
|
||||
# installation prefix:
|
||||
#PREFIX = ""
|
||||
meta = with stdenv.lib; {
|
||||
description = "Editor for the TikZ language";
|
||||
license = licenses.gpl2;
|
||||
platforms = platforms.linux;
|
||||
maintainers = [ maintainers.layus ];
|
||||
};
|
||||
|
||||
# install desktop file here (*nix only):
|
||||
DESKTOPDIR = ''$''${PREFIX}/share/applications
|
||||
conf = ''
|
||||
# installation prefix:
|
||||
PREFIX = @out@
|
||||
|
||||
# install mimetype here:
|
||||
MIMEDIR = ''$''${PREFIX}/share/mime/packages
|
||||
# install desktop file here (*nix only):
|
||||
DESKTOP_INSTALL_DIR = @out@/share/applications
|
||||
|
||||
CONFIG -= debug
|
||||
CONFIG += release
|
||||
# install mimetype here:
|
||||
MIME_INSTALL_DIR = @out@/share/mime/packages
|
||||
|
||||
# qmake command:
|
||||
QMAKECOMMAND = qmake
|
||||
# lrelease command:
|
||||
LRELEASECOMMAND = lrelease
|
||||
# qcollectiongenerator command:
|
||||
#QCOLLECTIONGENERATORCOMMAND = qcollectiongenerator
|
||||
# install doc here:
|
||||
MAN_INSTALL_DIR = @out@/share/man
|
||||
|
||||
# TikZ documentation default file path:
|
||||
TIKZ_DOCUMENTATION_DEFAULT = ''$''${PREFIX}/share/doc/texmf/pgf/pgfmanual.pdf.gz
|
||||
'';
|
||||
CONFIG -= debug
|
||||
CONFIG += release
|
||||
|
||||
patchPhase = ''
|
||||
echo "$conf" > conf.pri
|
||||
'';
|
||||
# qmake command:
|
||||
QMAKECOMMAND = qmake
|
||||
# lrelease command:
|
||||
LRELEASECOMMAND = lrelease
|
||||
# qcollectiongenerator command:
|
||||
#QCOLLECTIONGENERATORCOMMAND = qcollectiongenerator
|
||||
|
||||
configurePhase = ''
|
||||
# TikZ documentation default file path:
|
||||
TIKZ_DOCUMENTATION_DEFAULT = @out@/share/doc/texmf/pgf/pgfmanual.pdf.gz
|
||||
'';
|
||||
|
||||
# 1. Configuration is done by overwriting qtikzconfig.pri
|
||||
# 2. Recent Qt removed QString::fromAscii in favor of QString::fromLatin1
|
||||
patchPhase = ''
|
||||
echo "$conf" | sed "s!@out@!$out!g" > qmake/qtikzconfig.pri
|
||||
find -name "*.cpp" -exec sed -i s/fromAscii/fromLatin1/g "{}" \;
|
||||
'';
|
||||
|
||||
configurePhase = ''
|
||||
qmake PREFIX="$out" ./qtikz.pro
|
||||
'';
|
||||
'';
|
||||
|
||||
buildInputs = [ gettext qt4 poppler_qt4 pkgconfig ];
|
||||
};
|
||||
buildInputs = [ gettext qt5.full poppler_qt5 pkgconfig ];
|
||||
|
||||
ktikz = {
|
||||
name = "ktikz-${version}";
|
||||
buildInputs = [ kdelibs cmake qt4 automoc4 gettext poppler_qt4 ];
|
||||
};
|
||||
|
||||
common = {
|
||||
inherit version;
|
||||
src = fetchurl {
|
||||
url = "http://www.hackenberger.at/ktikz/ktikz_${version}.tar.gz";
|
||||
sha256 = "19jl49r7dw3vb3hg52man8p2lszh71pvnx7d0xawyyi0x6r8ml9i";
|
||||
};
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Editor for the TikZ language";
|
||||
license = licenses.gpl2;
|
||||
platforms = platforms.linux;
|
||||
maintainers = [ maintainers.layus ];
|
||||
};
|
||||
};
|
||||
|
||||
in stdenv.mkDerivation (common // (if withKDE then ktikz else qtikz))
|
||||
enableParallelBuilding = true;
|
||||
}
|
||||
|
||||
|
21
pkgs/applications/misc/antfs-cli/default.nix
Normal file
21
pkgs/applications/misc/antfs-cli/default.nix
Normal file
@ -0,0 +1,21 @@
|
||||
{ stdenv, fetchFromGitHub, pythonPackages }:
|
||||
|
||||
pythonPackages.buildPythonApplication rec {
|
||||
name = "antfs-cli-unstable-2017-02-11";
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
homepage = "https://github.com/Tigge/antfs-cli";
|
||||
description = "Extracts FIT files from ANT-FS based sport watches";
|
||||
license = licenses.mit;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Tigge";
|
||||
repo = "antfs-cli";
|
||||
rev = "85a6cc6fe6fc0ec38399f5aa30fb39177c565b52";
|
||||
sha256 = "0v8y64kldfbs809j1g9d75dd1vxq7mfxnp4b45pz8anpxhjf64fy";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [ pythonPackages.openant ];
|
||||
}
|
@ -2,14 +2,14 @@
|
||||
}:
|
||||
|
||||
with pythonPackages; buildPythonApplication rec {
|
||||
version = "2.7";
|
||||
version = "2.8";
|
||||
name = "buku-${version}";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jarun";
|
||||
repo = "buku";
|
||||
rev = "v${version}";
|
||||
sha256 = "1hb5283xaz1ll3iv5542i6f9qshrdgg33dg7gvghz0fwdh8i0jbk";
|
||||
sha256 = "1gazvij0072lca0jh84i8mhnaxiwg56hcxmrmk2clxd2x213zyjm";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
|
@ -5,12 +5,12 @@
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "2.76.0";
|
||||
version = "2.79.1";
|
||||
name = "calibre-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://download.calibre-ebook.com/${version}/${name}.tar.xz";
|
||||
sha256 = "1xfm586n6gm44mkyn25mbiyhj6w9ji9yl6fvmnr4zk1q6qcga3v8";
|
||||
sha256 = "0slk3cili50a8kwwsk6syqqrcz0yx8yjvhm8gyggn2k2kpqjax15";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
@ -1,13 +1,8 @@
|
||||
Author: Dmitry Shachnev <mitya57@gmail.com>
|
||||
Description: do not build unrar extension as we strip unrar from the tarball
|
||||
Forwarded: not-needed
|
||||
Last-Update: 2013-04-04
|
||||
|
||||
Index: calibre/setup/extensions.json
|
||||
===================================================================
|
||||
--- calibre.orig/setup/extensions.json
|
||||
+++ calibre/setup/extensions.json
|
||||
@@ -211,14 +211,5 @@
|
||||
diff --git a/setup/extensions.json b/setup/extensions.json
|
||||
index 1f6d1fb..1273904 100644
|
||||
--- a/setup/extensions.json
|
||||
+++ b/setup/extensions.json
|
||||
@@ -211,16 +211,5 @@
|
||||
"sources": "calibre/devices/mtp/unix/devices.c calibre/devices/mtp/unix/libmtp.c",
|
||||
"headers": "calibre/devices/mtp/unix/devices.h calibre/devices/mtp/unix/upstream/music-players.h calibre/devices/mtp/unix/upstream/device-flags.h",
|
||||
"libraries": "mtp"
|
||||
@ -18,15 +13,17 @@ Index: calibre/setup/extensions.json
|
||||
- "inc_dirs": "unrar",
|
||||
- "defines": "SILENT RARDLL UNRAR _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE",
|
||||
- "windows_defines": "SILENT RARDLL UNRAR",
|
||||
- "haiku_defines": "LITTLE_ENDIAN SILENT RARDLL UNRAR _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE _BSD_SOURCE",
|
||||
- "haiku_libraries": "bsd",
|
||||
- "optimize_level": 2,
|
||||
- "windows_libraries": "User32 Advapi32 kernel32 Shell32"
|
||||
}
|
||||
]
|
||||
Index: calibre/src/calibre/ebooks/metadata/archive.py
|
||||
===================================================================
|
||||
--- calibre.orig/src/calibre/ebooks/metadata/archive.py 2014-02-02 10:42:14.510954007 +0100
|
||||
+++ calibre/src/calibre/ebooks/metadata/archive.py 2014-02-02 10:42:14.502954007 +0100
|
||||
@@ -42,7 +42,7 @@
|
||||
diff --git a/src/calibre/ebooks/metadata/archive.py b/src/calibre/ebooks/metadata/archive.py
|
||||
index 938ab24..1e095f8 100644
|
||||
--- a/src/calibre/ebooks/metadata/archive.py
|
||||
+++ b/src/calibre/ebooks/metadata/archive.py
|
||||
@@ -44,7 +44,7 @@ class ArchiveExtract(FileTypePlugin):
|
||||
description = _('Extract common e-book formats from archives '
|
||||
'(zip/rar) files. Also try to autodetect if they are actually '
|
||||
'cbz/cbr files.')
|
||||
|
@ -1,7 +1,7 @@
|
||||
{ stdenv, fetchurl, readline, ncurses }:
|
||||
|
||||
let
|
||||
version = "1.19";
|
||||
version = "1.22";
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
|
||||
@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/dvorka/hstr/releases/download/${version}/hh-${version}-src.tgz";
|
||||
sha256 = "0ix6550l9si29j8vz375vzjmp22i19ik5dq2nh7zsj2ra7ibaz5n";
|
||||
sha256 = "09rh510x8qc5jbpnfzazbv9wc3bqmf5asydcl2wijpqm5bi21iqp";
|
||||
};
|
||||
|
||||
buildInputs = [ readline ncurses ];
|
||||
|
@ -16,11 +16,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "kdeconnect-${version}";
|
||||
version = "1.0";
|
||||
version = "1.0.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = http://download.kde.org/stable/kdeconnect/1.0/src/kdeconnect-kde-1.0.tar.xz;
|
||||
sha256 = "0pd8qw0w6akc7yzmsr0sjkfj3nw6rgm5xvq41g61ak8pp05syzr0";
|
||||
url = "http://download.kde.org/stable/kdeconnect/${version}/src/kdeconnect-kde-${version}.tar.xz";
|
||||
sha256 = "0b40402adw7cqz19fh8zw70f6l7b5p400mw668n3wic4favn27r2";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
|
@ -8,11 +8,11 @@
|
||||
# plugin derivations in the Nix store and nowhere else.
|
||||
with builtins; buildDotnetPackage rec {
|
||||
baseName = "keepass";
|
||||
version = "2.34";
|
||||
version = "2.35";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/keepass/KeePass-${version}-Source.zip";
|
||||
sha256 = "e3f184e4deddd1aa5ee2b52e2373c772d3f3975e5eddb2fd729eb27b437011aa";
|
||||
sha256 = "1pv3x1lr2kymjpm6z26fqx997jivzy0diqsysq4diygj38wdkajz";
|
||||
};
|
||||
|
||||
sourceRoot = ".";
|
||||
|
@ -3,13 +3,12 @@
|
||||
with python3Packages;
|
||||
|
||||
buildPythonApplication rec {
|
||||
# Reenable tests for 0.9.0, they are broken at the moment: #15981
|
||||
version = "0.8.4";
|
||||
version = "0.9.2";
|
||||
name = "khal-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://pypi/k/khal/khal-${version}.tar.gz";
|
||||
sha256 = "03vy4dp9n43w51mwqjjy08dr5nj7wxqnb085visz3j43vzm42p1f";
|
||||
sha256 = "1ryh5c7408w8gpql5s9mkxkvz1ngnds3xm43p7r96ynx8prr9swp";
|
||||
};
|
||||
|
||||
LC_ALL = "en_US.UTF-8";
|
||||
|
@ -1,13 +1,13 @@
|
||||
{ stdenv, fetchurl, glibcLocales, python3Packages }:
|
||||
{ stdenv, fetchurl, fetchFromGitHub, glibcLocales, python3Packages }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
version = "0.11.1";
|
||||
version = "0.11.4";
|
||||
name = "khard-${version}";
|
||||
namePrefix = "";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/scheibler/khard/archive/v${version}.tar.gz";
|
||||
sha256 = "0055xx9icmsr6l7v0iqrndmygygdpdv10550w6pyrb96svzhry27";
|
||||
sha256 = "1hngg3z5cdjny7wdf2mf9wv35ffx7ivpq6mx7kgqf40fr5905l0r";
|
||||
};
|
||||
|
||||
# setup.py reads the UTF-8 encoded readme.
|
||||
|
@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
|
||||
sha256 = "0v9xgpcf186ni55rkmx008msyszw0ypd6rd98hgwpih8yv3pymfy";
|
||||
};
|
||||
|
||||
buildInputs = [ ncurses gsl ] ++ (with ocamlPackages; [ ocaml ]);
|
||||
buildInputs = [ ncurses gsl ] ++ (with ocamlPackages; [ ocaml camlp4 ]);
|
||||
|
||||
meta = {
|
||||
homepage = http://pessimization.com/software/orpie/;
|
||||
|
60
pkgs/applications/misc/polybar/default.nix
Normal file
60
pkgs/applications/misc/polybar/default.nix
Normal file
@ -0,0 +1,60 @@
|
||||
{ cairo, cmake, fetchgit, libXdmcp, libpthreadstubs, libxcb, pcre, pkgconfig
|
||||
, python2 , stdenv, xcbproto, xcbutil, xcbutilimage, xcbutilrenderutil
|
||||
, xcbutilwm, xcbutilxrm
|
||||
|
||||
# optional packages-- override the variables ending in 'Support' to enable or
|
||||
# disable modules
|
||||
, alsaSupport ? true, alsaLib ? null
|
||||
, iwSupport ? true, wirelesstools ? null
|
||||
, githubSupport ? false, curl ? null
|
||||
, mpdSupport ? false, mpd_clientlib ? null
|
||||
, i3Support ? false, i3GapsSupport ? false, i3 ? null, i3-gaps ? null, jsoncpp ? null
|
||||
}:
|
||||
|
||||
assert alsaSupport -> alsaLib != null;
|
||||
assert githubSupport -> curl != null;
|
||||
assert iwSupport -> wirelesstools != null;
|
||||
assert mpdSupport -> mpd_clientlib != null;
|
||||
|
||||
assert i3Support -> ! i3GapsSupport && jsoncpp != null && i3 != null;
|
||||
assert i3GapsSupport -> ! i3Support && jsoncpp != null && i3-gaps != null;
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "polybar-${version}";
|
||||
version = "3.0.4";
|
||||
src = fetchgit {
|
||||
url = "https://github.com/jaagr/polybar";
|
||||
rev = "1f31870d43f5cd87a5529a55b1d2d3e64105e0af";
|
||||
sha256 = "1nhj4npqhs6zy161931sbdi52gz6163lik0wri9wr122sjf90jas";
|
||||
};
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "A fast and easy-to-use tool for creatin status bars.";
|
||||
longDescription = ''
|
||||
Polybar aims to help users build beautiful and highly customizable
|
||||
status bars for their desktop environment, without the need of
|
||||
having a black belt in shell scripting.
|
||||
'';
|
||||
license = licenses.mit;
|
||||
maintainers = [ maintainers.afldcr ];
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
cairo libXdmcp libpthreadstubs libxcb pcre python2 xcbproto xcbutil
|
||||
xcbutilimage xcbutilrenderutil xcbutilwm xcbutilxrm
|
||||
|
||||
(if alsaSupport then alsaLib else null)
|
||||
(if githubSupport then curl else null)
|
||||
(if iwSupport then wirelesstools else null)
|
||||
(if mpdSupport then mpd_clientlib else null)
|
||||
|
||||
(if i3Support || i3GapsSupport then jsoncpp else null)
|
||||
(if i3Support then i3 else null)
|
||||
(if i3GapsSupport then i3-gaps else null)
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake pkgconfig
|
||||
];
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
{ lib, stdenv, fetchurl, fetchcvs, makeWrapper, makeDesktopItem, jdk, jre, ant
|
||||
, gtk3, gsettings_desktop_schemas, p7zip }:
|
||||
, gtk3, gsettings_desktop_schemas, p7zip, libXxf86vm }:
|
||||
|
||||
let
|
||||
|
||||
@ -29,6 +29,13 @@ let
|
||||
categories = "Application;Graphics;2DGraphics;3DGraphics;";
|
||||
};
|
||||
|
||||
patchPhase = ''
|
||||
patchelf --set-rpath ${libXxf86vm}/lib lib/java3d-1.6/linux/amd64/libnativewindow_awt.so
|
||||
patchelf --set-rpath ${libXxf86vm}/lib lib/java3d-1.6/linux/amd64/libnativewindow_x11.so
|
||||
patchelf --set-rpath ${libXxf86vm}/lib lib/java3d-1.6/linux/i586/libnativewindow_awt.so
|
||||
patchelf --set-rpath ${libXxf86vm}/lib lib/java3d-1.6/linux/i586/libnativewindow_x11.so
|
||||
'';
|
||||
|
||||
buildInputs = [ ant jdk jre makeWrapper p7zip gtk3 gsettings_desktop_schemas ];
|
||||
|
||||
buildPhase = ''
|
||||
|
@ -1,18 +1,18 @@
|
||||
{pkgs, stdenv, xorg, fetchurl }:
|
||||
{ stdenv, libX11, fetchurl }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "worker";
|
||||
name = "worker-${version}";
|
||||
version = "3.8.5";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://www.boomerangsworld.de/cms/worker/downloads/${name}-${version}.tar.gz";
|
||||
url = "http://www.boomerangsworld.de/cms/worker/downloads/${name}.tar.gz";
|
||||
sha256 = "1xy02jdf60wg2jycinl6682xg4zvphdj80f8xgs26ip45iqgkmvw";
|
||||
};
|
||||
|
||||
buildInputs = with pkgs; [ xorg.libX11 ];
|
||||
buildInputs = [ libX11 ];
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "a two-pane file manager with advanced file manipulation features";
|
||||
description = "A two-pane file manager with advanced file manipulation features";
|
||||
homepage = "http://www.boomerangsworld.de/cms/worker/index.html";
|
||||
license = licenses.gpl2;
|
||||
maintainers = [ maintainers.ndowens ];
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ stdenv, gn, ninja, which
|
||||
{ stdenv, ninja, which
|
||||
|
||||
# default dependencies
|
||||
, bzip2, flac, speex, libopus
|
||||
@ -20,7 +20,6 @@
|
||||
, libexif ? null # only needed for Chromium before version 51
|
||||
|
||||
# package customization
|
||||
, enableSELinux ? false, libselinux ? null
|
||||
, enableNaCl ? false
|
||||
, enableHotwording ? false
|
||||
, enableWideVine ? false
|
||||
@ -86,7 +85,10 @@ let
|
||||
|
||||
src = upstream-info.main;
|
||||
|
||||
nativeBuildInputs = [ gn which python2Packages.python perl pkgconfig ];
|
||||
nativeBuildInputs = [
|
||||
ninja which python2Packages.python perl pkgconfig
|
||||
python2Packages.ply python2Packages.jinja2
|
||||
];
|
||||
|
||||
buildInputs = defaultDependencies ++ [
|
||||
nspr nss systemd
|
||||
@ -95,18 +97,16 @@ let
|
||||
glib gtk2 dbus_glib
|
||||
libXScrnSaver libXcursor libXtst mesa
|
||||
pciutils protobuf speechd libXdamage
|
||||
python2Packages.ply python2Packages.jinja2
|
||||
] ++ optional gnomeKeyringSupport libgnome_keyring3
|
||||
++ optionals gnomeSupport [ gnome.GConf libgcrypt ]
|
||||
++ optional enableSELinux libselinux
|
||||
++ optionals cupsSupport [ libgcrypt cups ]
|
||||
++ optional pulseSupport libpulseaudio
|
||||
++ optional (versionAtLeast version "56.0.0.0") gtk3;
|
||||
|
||||
patches = [
|
||||
./patches/glibc-2.24.patch
|
||||
./patches/nix_plugin_paths_52.patch
|
||||
] ++ optional enableWideVine ./patches/widevine.patch;
|
||||
] ++ optional (versionOlder version "57.0") ./patches/glibc-2.24.patch
|
||||
++ optional enableWideVine ./patches/widevine.patch;
|
||||
|
||||
postPatch = ''
|
||||
# We want to be able to specify where the sandbox is via CHROME_DEVEL_SANDBOX
|
||||
@ -137,8 +137,8 @@ let
|
||||
|
||||
gnFlags = mkGnFlags ({
|
||||
linux_use_bundled_binutils = false;
|
||||
linux_use_bundled_gold = false;
|
||||
linux_use_gold_flags = true;
|
||||
use_gold = true;
|
||||
gold_path = "${stdenv.cc}/bin";
|
||||
is_debug = false;
|
||||
|
||||
proprietary_codecs = false;
|
||||
@ -149,7 +149,6 @@ let
|
||||
enable_nacl = enableNaCl;
|
||||
enable_hotwording = enableHotwording;
|
||||
enable_widevine = enableWideVine;
|
||||
selinux = enableSELinux;
|
||||
use_cups = cupsSupport;
|
||||
} // {
|
||||
treat_warnings_as_errors = false;
|
||||
@ -173,16 +172,24 @@ let
|
||||
} // (extraAttrs.gnFlags or {}));
|
||||
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
|
||||
# Build gn
|
||||
python tools/gn/bootstrap/bootstrap.py -v -s --no-clean
|
||||
PATH="$PWD/out/Release:$PATH"
|
||||
|
||||
# This is to ensure expansion of $out.
|
||||
libExecPath="${libExecPath}"
|
||||
python build/linux/unbundle/replace_gn_files.py \
|
||||
--system-libraries ${toString gnSystemLibraries}
|
||||
gn gen --args=${escapeShellArg gnFlags} out/Release
|
||||
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
buildPhase = let
|
||||
buildCommand = target: ''
|
||||
"${ninja}/bin/ninja" -C "${buildPath}" \
|
||||
ninja -C "${buildPath}" \
|
||||
-j$NIX_BUILD_CORES -l$NIX_BUILD_CORES \
|
||||
"${target}"
|
||||
'' + optionalString (target == "mksnapshot" || target == "chrome") ''
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
# package customization
|
||||
, channel ? "stable"
|
||||
, enableSELinux ? false
|
||||
, enableNaCl ? false
|
||||
, enableHotwording ? false
|
||||
, gnomeSupport ? false, gnome ? null
|
||||
@ -22,7 +21,7 @@ let
|
||||
upstream-info = (callPackage ./update.nix {}).getChannel channel;
|
||||
|
||||
mkChromiumDerivation = callPackage ./common.nix {
|
||||
inherit enableSELinux enableNaCl enableHotwording gnomeSupport gnome
|
||||
inherit enableNaCl enableHotwording gnomeSupport gnome
|
||||
gnomeKeyringSupport proprietaryCodecs cupsSupport pulseSupport
|
||||
enableWideVine;
|
||||
};
|
||||
@ -108,7 +107,7 @@ in stdenv.mkDerivation {
|
||||
cp -v "${desktopItem}/share/applications/"* "$out/share/applications"
|
||||
'';
|
||||
|
||||
inherit (chromium.browser) meta packageName;
|
||||
inherit (chromium.browser) meta packageName version;
|
||||
|
||||
passthru = {
|
||||
inherit (chromium) upstream-info browser;
|
||||
|
@ -1,14 +1,14 @@
|
||||
# This file is autogenerated from update.sh in the same directory.
|
||||
{
|
||||
beta = {
|
||||
sha256 = "0f1w9cba99s9hy6fdqkr39yhkay4kid72vdrgs4as5lwdci8xc6g";
|
||||
sha256bin64 = "13hfkkgqywjapz01q3cy0i3ick1s24qhpl40by21c38nwbqplivw";
|
||||
version = "56.0.2924.76";
|
||||
sha256 = "0mwwscybips1kazl0rva3jdswfzfb7yp90ggqgk27z2ndp0qj8b3";
|
||||
sha256bin64 = "17n0jcysxi99v8hwlg7f69nrs2y5z87644145a8r53l809hkvkrk";
|
||||
version = "57.0.2987.21";
|
||||
};
|
||||
dev = {
|
||||
sha256 = "0vw9l66412b9zd8v5l0i518mvfwf313gvh1ywxkf48lpjpi03qwh";
|
||||
sha256bin64 = "1iagza9qjlr61149g6cmiak82898xrrhvk516xrssap2qkb6kyzp";
|
||||
version = "57.0.2987.19";
|
||||
sha256 = "18gsj415cdlllp95q8pv1s3hhjg8cmjb6kwrvbr5mjdvsvj0ianf";
|
||||
sha256bin64 = "0z58rwz00bq61d24h8jynhzxanbh0m9wi04jbczci3681b4zyiyh";
|
||||
version = "58.0.3000.4";
|
||||
};
|
||||
stable = {
|
||||
sha256 = "1q2kg85pd6lv036w7lsss5mhiiva9rx4f0410sbn9bnazhghib4s";
|
||||
|
@ -43,6 +43,7 @@
|
||||
, coreutils
|
||||
, gnused
|
||||
, gnugrep
|
||||
, gnupg
|
||||
}:
|
||||
|
||||
assert stdenv.isLinux;
|
||||
@ -173,7 +174,7 @@ stdenv.mkDerivation {
|
||||
|
||||
passthru.ffmpegSupport = true;
|
||||
passthru.updateScript = import ./update.nix {
|
||||
inherit name writeScript xidel coreutils gnused gnugrep curl;
|
||||
inherit name writeScript xidel coreutils gnused gnugrep gnupg curl;
|
||||
};
|
||||
meta = with stdenv.lib; {
|
||||
description = "Mozilla Firefox, free web browser (binary package)";
|
||||
|
@ -0,0 +1,63 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1
|
||||
|
||||
mQINBFWpQAQBEAC+9wVlwGLy8ILCybLesuB3KkHHK+Yt1F1PJaI30X448ttGzxCz
|
||||
PQpH6BoA73uzcTReVjfCFGvM4ij6qVV2SNaTxmNBrL1uVeEUsCuGduDUQMQYRGxR
|
||||
tWq5rCH48LnltKPamPiEBzrgFL3i5bYEUHO7M0lATEknG7Iaz697K/ssHREZfuuc
|
||||
B4GNxXMgswZ7GTZO3VBDVEw5GwU3sUvww93TwMC29lIPCux445AxZPKr5sOVEsEn
|
||||
dUB2oDMsSAoS/dZcl8F4otqfR1pXg618cU06omvq5yguWLDRV327BLmezYK0prD3
|
||||
P+7qwEp8MTVmxlbkrClS5j5pR47FrJGdyupNKqLzK+7hok5kBxhsdMsdTZLd4tVR
|
||||
jXf04isVO3iFFf/GKuwscOi1+ZYeB3l3sAqgFUWnjbpbHxfslTmo7BgvmjZvAH5Z
|
||||
asaewF3wA06biCDJdcSkC9GmFPmN5DS5/Dkjwfj8+dZAttuSKfmQQnypUPaJ2sBu
|
||||
blnJ6INpvYgsEZjV6CFG1EiDJDPu2Zxap8ep0iRMbBBZnpfZTn7SKAcurDJptxin
|
||||
CRclTcdOdi1iSZ35LZW0R2FKNnGL33u1IhxU9HRLw3XuljXCOZ84RLn6M+PBc1eZ
|
||||
suv1TA+Mn111yD3uDv/u/edZ/xeJccF6bYcMvUgRRZh0sgZ0ZT4b0Q6YcQARAQAB
|
||||
tC9Nb3ppbGxhIFNvZnR3YXJlIFJlbGVhc2VzIDxyZWxlYXNlQG1vemlsbGEuY29t
|
||||
PokCOAQTAQIAIgUCValABAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ
|
||||
Ybe1JtmPA1NQqg//Rr6/V7uLqrIwx0UFknyNJasRJZhUkYxdGsLD18zO0Na8Ve3Q
|
||||
sYpOC3ojpqaFUzpqm6KNv8eXfd/Ku7j3WGr9kPkbjZNghvy6V5Lva4JkxO6LMxKk
|
||||
JYqiqF2o1Gfda8NfcK08GFy4C0L8zNwlADvmdMo4382tmHNGbTTft7BeVaRrE9xW
|
||||
9eGmGQ2jYOsjxb5MsadAdZUuK8IC95ZHlUDR3gH9KqhfbQWp5Bo924Kiv+f2JUzN
|
||||
rrG98eOm1Qb8F9rePzZ2DOYRJyOe4p8Gpl+kojCXNntkJgcwJ1a1yRE6wy9RzpeB
|
||||
lCeoQuLS92MNne+deQZUskTZFoYXUadf6vbdfqL0nuPCKdl9lhef1QNwE30IRymt
|
||||
6fhJCFffFQjGdeMfSiCHgcI8ichQbrzhBCGGR3bAHan9c2EbQ+puqG3Aa0YjX6Db
|
||||
GJjWOI6A61bqSPepLCMVaXqV2mZEIaZWdZkOHjnRrU6CJdXG/+D4m1YBZwYM60eJ
|
||||
kNu4eMMwMFnRsHiWf7bhqKptwuk8HyIGp2o4j8iqrFRVJEbK/ctdhA3H1AlKug9f
|
||||
NrfwCfqhNCSBju97V03U26j04JMn9nrZ2UEGbpty+8ONTb38WX5/oC61BgwV8Ki4
|
||||
6Lwyb7fImUzz8jE83pjh7s3+NCKvvbH+VfT12f+V/fsphN3EwGwJPTC3fX25Ag0E
|
||||
ValA9AEQAK/z677fpoVUj4zQz0g60wVWf+1y2lGb8iFYICmvrJyaEra5SRkyihYA
|
||||
1WmEzhN4T//tHw3UIfe646+GkY3eIQW2jY9DM2XaElmMN8k/v54nbn5oD7rNEyCT
|
||||
FTvCOq5d74HH1vw96Lzay1vy45E7jPWvqfg9Se8KAnzElohTJjizyhU+0QbmPHnQ
|
||||
lY8gOkT/SvRo9bFEUnqjWh0fRq+K1tdLPhcFB1scc25iFqh9IAKUGDur8jQ+SDHC
|
||||
jgQlkFOg3rbqtaUOnVHPohfrBM90ZNwuneFgQY7ZFSUidCimp/EN4CXnzgjDYXUU
|
||||
A42S8G86+G4KAJC22gRQo4mcVmehwHTH0glfLmUK7TEu29A1KWNL3R/R7Zdyajjp
|
||||
CvUaK2A0Abj3ZE2BSDbJrVlbBVfy5kfPdZjhd3wUWqFaDHiVcImcjZRWPncllhcy
|
||||
6fhqEy3ELZrkezpJjnARsVkij3GXz6oX+HVULne2w0dkTXydR6muZI/GeNtrLHmA
|
||||
8B3/0/TllmLy8ChmYZVIKZ8zt1ghq3f+hFTXgtZil7eBewZgA6L+EXXK6dZj14lb
|
||||
e6CMS2kungTX9stU1s42I+WRbiqiLpAxCX6qcLBOWrJwsOep2nvu5bhrPHptSfRh
|
||||
F4Vs1xteVFckCWhcLgdYi/Je1XBEM+AAVa0k1FiywCg7MqlG6toLABEBAAGJBEQE
|
||||
GAECAA8FAlWpQPQCGwIFCQPCZwACKQkQYbe1JtmPA1PBXSAEGQECAAYFAlWpQPQA
|
||||
CgkQHGnE5V6ZBdsvxQ/6A62ZteN0b/TVfSJ51SdG66amwe2rpRX4UdSw7ifxo3qh
|
||||
gEICQmXR5c09qXwl17MFJWM3FhGrbxnA5KGgeWGtqrPup4QZPKU+l2Ea2QLSJSiB
|
||||
q5QqqEgZvR14Lhr/hCGhBAq9s/xbp8fbKNJj/uWiZ+uTPbt5T5rgKJ4+g3B6DNO1
|
||||
rH7F70OLrd32mxZs4pSxngHRAyiMPB59yQVDsVMha0JTqC+P96itUzvnInc/9mwE
|
||||
0EMiBtpDTkoBwbJVPnuv+7FjkOLn5s5u3RLH9fe8z1xnV0fPC0/ndrlNiuBpAn3z
|
||||
VCsWasvW18Vz8K+CQY8Sw0Jw75edBgFoz2QMFxHfDpMJefvMadB7mdte1lKk/Im9
|
||||
KFFH8Idh9b6zD0a/+Ooujukx6QpFfAVhe2sT2CIm2nmMAuAZI2cCt7SC+REn9n9M
|
||||
SuIWxN8YTE3qgAUB6F3ea0O0hGlLl+z5UOfX0bNAs+ebx/P6PczJtDzeqpmRb0QX
|
||||
qo55JWXLvmXT/fgjF7fNTTLsyCtV+xH6ZFKGpvGJGJMHApEbz2a0hy12RZH58eI1
|
||||
ueN3Tzn8nI57+oYSsqFw/QgcdGXDonLGJsPVzIpQRg92/GXSukWF+MsCjVOilHRS
|
||||
Y1wfPPmJ7+kMQ4rdXpjAhwNYJc1ff5N+omCxCKoFgYsCXlFCHFKs4JwRbTdd3Mku
|
||||
qBAAlBlIjym8NyJIBltfWckuhQTX4BiBltGPNga9CpQsml519EePuLtoe5H0fTUp
|
||||
4UYbL0ZzyJImQE2uw/hMNZ36bA057YtHOoP4FcPUwv6wsl5JC87UR1XFhAXb5xSU
|
||||
0qdi3hWh0hm772X6CBlM8lM6GtT/fDZkSGNXMQaIs1X/O9vf8wGg+HwLJcaCvybI
|
||||
4w7w1K0R7WjWZlJXutCZf8hRc0d88W/qSZYooKD9q2S7foqaJhySIaF11sH5ETvV
|
||||
P3oCfGVIVhKWb0Tp2jXPXlXLeRAQA8S+4B1o5XHiM+J3SNXhPQHRGQ3VGcDn45it
|
||||
g3F4xQX2Qvo4SV42NMYd6TykM/dIfQyJDOVg3CT3+nqfjCknf94SNvyZprHEPmpc
|
||||
DeseoPMw8kjKNwDwPXFLxBRntPgnqVXDcNN41OH2kqx4jF7FLlRmwNpB2mFVH8xe
|
||||
VuRm7h2WZRsaEoqvivhzRtESVA2um5Eg763CVTcNYlK6MD/iy8JzbMuZBrlOHr58
|
||||
HKDdcOy1W0z2quESGoqrwA995IgPav/1DSpyuJPNc/oUTWlhpYshqYKoflezAyKj
|
||||
30+UzC3R/mY03ri6zUvCgXHNgZlKUsM3VEXk6h5oDuaXniHLLzuxjTBVrILnGYgH
|
||||
SFRP80L/knz+o4Uvq4wj7NHnruc5fP1foFxRNsMt40yRJfU=
|
||||
=D+jC
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
@ -5,8 +5,9 @@
|
||||
, gnused
|
||||
, gnugrep
|
||||
, curl
|
||||
, gnupg
|
||||
, baseName ? "firefox"
|
||||
, basePath ? "pkgs/applications/networking/browsers/firefox-bin"
|
||||
, basePath ? "pkgs/applications/networking/browsers/firefox-bin"
|
||||
, baseUrl ? "http://archive.mozilla.org/pub/firefox/releases/"
|
||||
}:
|
||||
|
||||
@ -14,10 +15,13 @@ let
|
||||
version = (builtins.parseDrvName name).version;
|
||||
isBeta = builtins.stringLength version + 1 == builtins.stringLength (builtins.replaceStrings ["b"] ["bb"] version);
|
||||
in writeScript "update-${baseName}-bin" ''
|
||||
PATH=${coreutils}/bin:${gnused}/bin:${gnugrep}/bin:${xidel}/bin:${curl}/bin
|
||||
|
||||
PATH=${coreutils}/bin:${gnused}/bin:${gnugrep}/bin:${xidel}/bin:${curl}/bin:${gnupg}/bin
|
||||
set -eux
|
||||
pushd ${basePath}
|
||||
|
||||
HOME=`mktemp -d`
|
||||
cat ${./firefox.key} | gpg2 --import
|
||||
|
||||
tmpfile=`mktemp`
|
||||
url=${baseUrl}
|
||||
|
||||
@ -39,8 +43,12 @@ in writeScript "update-${baseName}-bin" ''
|
||||
grep -e "${if isBeta then "b" else ""}\([[:digit:]]\|[[:digit:]][[:digit:]]\)$" | ${if isBeta then "" else "grep -v \"b\" |"} \
|
||||
tail -1`
|
||||
|
||||
curl --silent -o $HOME/shasums "$url$version/SHA512SUMS"
|
||||
curl --silent -o $HOME/shasums.asc "$url$version/SHA512SUMS.asc"
|
||||
gpgv2 --keyring=$HOME/.gnupg/pubring.kbx $HOME/shasums.asc $HOME/shasums
|
||||
|
||||
# this is a list of sha512 and tarballs for both arches
|
||||
shasums=`curl --silent $url$version/SHA512SUMS`
|
||||
shasums=`cat $HOME/shasums`
|
||||
|
||||
cat > $tmpfile <<EOF
|
||||
{
|
||||
|
@ -5,7 +5,7 @@
|
||||
, hunspell, libevent, libstartup_notification, libvpx
|
||||
, cairo, gstreamer, gst_plugins_base, icu, libpng, jemalloc, libpulseaudio
|
||||
, autoconf213, which
|
||||
, writeScript, xidel, coreutils, gnused, gnugrep, curl, ed
|
||||
, writeScript, xidel, common-updater-scripts, coreutils, gnused, gnugrep, curl
|
||||
, enableGTK3 ? false
|
||||
, debugBuild ? false
|
||||
, # If you want the resulting program to call itself "Firefox" instead
|
||||
@ -151,8 +151,8 @@ in {
|
||||
version = "51.0.1";
|
||||
sha512 = "556e31b717c0640ef5e181e00b9d2a6ea0ace7c16ae04333d0f2e9e120d0ab9efe82a4ca314ef43594c080523edf37953e65dbf694c7428be0a024f3719d8312";
|
||||
updateScript = import ./update.nix {
|
||||
name = "firefox";
|
||||
inherit writeScript xidel coreutils gnused gnugrep curl ed;
|
||||
attrPath = "firefox-unwrapped";
|
||||
inherit writeScript lib common-updater-scripts xidel coreutils gnused gnugrep curl;
|
||||
};
|
||||
};
|
||||
|
||||
@ -161,9 +161,9 @@ in {
|
||||
version = "45.7.0esr";
|
||||
sha512 = "6424101b6958191ce654d0619950dfbf98d4aa6bdd979306a2df8d6d30d3fecf1ab44638061a2b4fb1af85fe972f5ff49400e8eeda30cdcb9087c4b110b97a7d";
|
||||
updateScript = import ./update.nix {
|
||||
name = "firefox-esr";
|
||||
versionSuffix = "esr";
|
||||
inherit writeScript xidel coreutils gnused gnugrep curl ed;
|
||||
attrPath = "firefox-esr-unwrapped";
|
||||
versionSuffix = "esr";
|
||||
inherit writeScript lib common-updater-scripts xidel coreutils gnused gnugrep curl;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -1,23 +1,18 @@
|
||||
{ name
|
||||
, writeScript
|
||||
{ writeScript
|
||||
, lib
|
||||
, xidel
|
||||
, common-updater-scripts
|
||||
, coreutils
|
||||
, gnused
|
||||
, gnugrep
|
||||
, curl
|
||||
, ed
|
||||
, sourceSectionRegex ? "${name}-unwrapped = common"
|
||||
, basePath ? "pkgs/applications/networking/browsers/firefox"
|
||||
, attrPath
|
||||
, baseUrl ? "http://archive.mozilla.org/pub/firefox/releases/"
|
||||
, versionSuffix ? ""
|
||||
}:
|
||||
|
||||
let
|
||||
version = (builtins.parseDrvName name).version;
|
||||
in writeScript "update-${name}" ''
|
||||
PATH=${coreutils}/bin:${gnused}/bin:${gnugrep}/bin:${xidel}/bin:${curl}/bin:${ed}/bin
|
||||
|
||||
pushd ${basePath}
|
||||
writeScript "update-${attrPath}" ''
|
||||
PATH=${lib.makeBinPath [ common-updater-scripts coreutils curl gnugrep gnused xidel ]}
|
||||
|
||||
url=${baseUrl}
|
||||
|
||||
@ -35,20 +30,5 @@ in writeScript "update-${name}" ''
|
||||
|
||||
shasum=`curl --silent $url$version/SHA512SUMS | grep 'source\.tar\.xz' | cut -d ' ' -f 1`
|
||||
|
||||
ed default.nix <<COMMANDS
|
||||
# search line
|
||||
/${sourceSectionRegex}/
|
||||
# search version number line
|
||||
/version/
|
||||
# update the version
|
||||
s/".*"/"$version"/
|
||||
# search hash line
|
||||
/sha512/
|
||||
# update the hash
|
||||
s/".*"/"$shasum"/
|
||||
# write then quit
|
||||
wq
|
||||
COMMANDS
|
||||
|
||||
popd
|
||||
update-source-version ${attrPath} "$version" "$shasum"
|
||||
''
|
||||
|
@ -2,12 +2,12 @@
|
||||
, ocaml, ocamlfuse, findlib, gapi_ocaml, ocaml_sqlite3, camlidl }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "google-drive-ocamlfuse-${version}";
|
||||
version = "0.5.22";
|
||||
name = "google-drive-ocamlfuse-${version}";
|
||||
version = "0.6.17";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://forge.ocamlcore.org/frs/download.php/1587/${name}.tar.gz";
|
||||
sha256 = "1hjm6hyva9sl6lddb0372wsy7f76105iaxh976yyzfn3b4ran6ab";
|
||||
url = "https://forge.ocamlcore.org/frs/download.php/1674/${name}.tar.gz";
|
||||
sha256 = "1ldja7080pnjaibrbdvfqwakp4mac8yw1lkb95f7lgldmy96lxas";
|
||||
};
|
||||
|
||||
buildInputs = [ zlib ocaml ocamlfuse findlib gapi_ocaml ocaml_sqlite3 camlidl];
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ stdenv, fetchurl, openssl, ncurses, libiconv, tcl }:
|
||||
{ stdenv, fetchurl, openssl, ncurses, libiconv, tcl, coreutils }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "epic5-${version}";
|
||||
@ -17,14 +17,14 @@ stdenv.mkDerivation rec {
|
||||
|
||||
postConfigure = ''
|
||||
substituteInPlace bsdinstall \
|
||||
--replace /bin/cp cp \
|
||||
--replace /bin/rm rm \
|
||||
--replace /bin/chmod chmod
|
||||
--replace /bin/cp ${coreutils}/bin/cp \
|
||||
--replace /bin/rm ${coreutils}/bin/rm \
|
||||
--replace /bin/chmod ${coreutils}/bin/chmod \
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
homepage = "http://epicsol.org/";
|
||||
description = "a IRC client that offers a great ircII interface";
|
||||
homepage = "http://epicsol.org";
|
||||
description = "A IRC client that offers a great ircII interface";
|
||||
license = licenses.bsd3;
|
||||
maintainers = [ maintainers.ndowens ];
|
||||
};
|
||||
|
48
pkgs/applications/networking/mailreaders/lumail/default.nix
Normal file
48
pkgs/applications/networking/mailreaders/lumail/default.nix
Normal file
@ -0,0 +1,48 @@
|
||||
{ stdenv, fetchurl, pkgconfig, lua5_2, file, ncurses, gmime, pcre-cpp
|
||||
, perl, perlPackages }:
|
||||
|
||||
let
|
||||
version = "2.9";
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "lumail-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://lumail.org/download/lumail-${version}.tar.gz";
|
||||
sha256 = "1rni5lbic36v4cd1r0l28542x0hlmfqkl6nac79gln491in2l2sc";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
pkgconfig lua5_2 file ncurses gmime pcre-cpp
|
||||
perl perlPackages.JSON perlPackages.NetIMAPClient
|
||||
];
|
||||
|
||||
preConfigure = ''
|
||||
sed -e 's|"/etc/lumail2|LUMAIL_LUAPATH"/..|' -i src/lumail2.cc src/imap_proxy.cc
|
||||
|
||||
perlFlags=
|
||||
for i in $(IFS=:; echo $PERL5LIB); do
|
||||
perlFlags="$perlFlags -I$i"
|
||||
done
|
||||
|
||||
sed -e "s|^#\!\(.*/perl.*\)$|#\!\1$perlFlags|" -i perl.d/imap-proxy
|
||||
'';
|
||||
|
||||
makeFlags = [
|
||||
"LVER=lua"
|
||||
"PREFIX=$(out)"
|
||||
"SYSCONFDIR=$(out)/etc"
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
cp lumail2.user.lua $out/etc/lumail2/
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Console-based email client";
|
||||
homepage = https://lumail.org/;
|
||||
license = licenses.gpl2;
|
||||
platforms = platforms.linux;
|
||||
maintainers = with maintainers; [orivej];
|
||||
};
|
||||
}
|
@ -1,10 +1,10 @@
|
||||
{ stdenv, fetchurl, pkgconfig, which, m4, gtk2, pango, perl, python2, zip, libIDL
|
||||
{ stdenv, lib, fetchurl, pkgconfig, which, m4, gtk2, pango, perl, python2, zip, libIDL
|
||||
, libjpeg, libpng, zlib, dbus, dbus_glib, bzip2, xorg
|
||||
, freetype, fontconfig, file, alsaLib, nspr, nss, libnotify
|
||||
, yasm, mesa, sqlite, unzip, makeWrapper
|
||||
, hunspell, libevent, libstartup_notification, libvpx
|
||||
, cairo, gstreamer, gst_plugins_base, icu
|
||||
, writeScript, xidel, coreutils, gnused, gnugrep, curl, ed
|
||||
, writeScript, xidel, common-updater-scripts, coreutils, gnused, gnugrep, curl
|
||||
, debugBuild ? false
|
||||
, # If you want the resulting program to call itself "Thunderbird"
|
||||
# instead of "Earlybird", enable this option. However, those
|
||||
@ -140,10 +140,8 @@ stdenv.mkDerivation rec {
|
||||
};
|
||||
|
||||
passthru.updateScript = import ./../../browsers/firefox/update.nix {
|
||||
name = "thunderbird";
|
||||
sourceSectionRegex = ".";
|
||||
basePath = "pkgs/applications/networking/mailreaders/thunderbird";
|
||||
attrPath = "thunderbird";
|
||||
baseUrl = "http://archive.mozilla.org/pub/thunderbird/releases/";
|
||||
inherit writeScript xidel coreutils gnused gnugrep curl ed;
|
||||
inherit writeScript lib common-updater-scripts xidel coreutils gnused gnugrep curl;
|
||||
};
|
||||
}
|
||||
|
@ -10,11 +10,11 @@ assert guiSupport -> (dbus_libs != null);
|
||||
with stdenv.lib;
|
||||
stdenv.mkDerivation rec {
|
||||
name = "qbittorrent-${version}";
|
||||
version = "3.3.7";
|
||||
version = "3.3.10";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/qbittorrent/${name}.tar.xz";
|
||||
sha256 = "0h2ccqmjnm0x0qjvd0vz5hk7dy9qbqhiqvxywqjhip7sj1585p3j";
|
||||
sha256 = "1lm8y5k9363gajbw0k9jb1cb7zg0lz5rw2ja0kd36h68rpm7qr9c";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig which ];
|
||||
@ -43,7 +43,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Free Software alternative to µtorrent";
|
||||
homepage = http://www.qbittorrent.org/;
|
||||
license = licenses.gpl2;
|
||||
maintainers = with maintainers; [ viric ];
|
||||
platforms = platforms.linux;
|
||||
maintainers = with maintainers; [ viric ];
|
||||
};
|
||||
}
|
||||
|
@ -1,13 +1,13 @@
|
||||
{ stdenv, fetchFromGitHub, python3Packages }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "bean-add-2016-12-02";
|
||||
name = "bean-add-2017-01-20";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "simon-v";
|
||||
repo = "bean-add";
|
||||
rev = "8038dabf5838c880c8e750c0e65cf0da4faf40b9";
|
||||
sha256 = "016ybq570xicj90x4kxrbxhzdvkjh0d6v3r6s3k3qfzz2c5vwh09";
|
||||
rev = "752674259fb9512e076ef2048927fb791ad21507";
|
||||
sha256 = "1ja26dgl2j25873s5nav57pjaqb9rr3mdbmkawajz2gdkk9r7n61";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = with python3Packages; [ python ];
|
||||
|
@ -266,6 +266,5 @@ in stdenv.mkDerivation rec {
|
||||
license = licenses.lgpl3;
|
||||
maintainers = with maintainers; [ viric raskin ];
|
||||
platforms = platforms.linux;
|
||||
hydraPlatforms = [];
|
||||
};
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ python3Packages.buildPythonApplication rec {
|
||||
}' src/paperwork/frontend/util/__init__.py
|
||||
|
||||
sed -i -e '/^LOCALE_PATHS = \[/,/^\]$/ {
|
||||
c LOCALE_PATHS = ["'"$out/share/locale"'"]
|
||||
c LOCALE_PATHS = ["'"$out/share"'"]
|
||||
}' src/paperwork/paperwork.py
|
||||
|
||||
sed -i -e 's/"icon"/"icon-name"/g' \
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "geogebra-${version}";
|
||||
version = "5-0-328-0";
|
||||
version = "5-0-331-0";
|
||||
|
||||
preferLocalBuild = true;
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://download.geogebra.org/installers/5.0/GeoGebra-Linux-Portable-${version}.tar.bz2";
|
||||
sha256 = "1bzmnw5410fv9s29ji8f4naa6m6ykvv8h88mmxhiygr3rfsc7050";
|
||||
sha256 = "135g2xqafgs1gv98vqq2jpfwyi1aflyiynx1gmsgs23jxbr218v2";
|
||||
};
|
||||
|
||||
srcIcon = fetchurl {
|
||||
@ -51,6 +51,7 @@ stdenv.mkDerivation rec {
|
||||
calculus in one easy-to-use package.
|
||||
'';
|
||||
homepage = https://www.geogebra.org/;
|
||||
maintainers = with maintainers; [ ma27 ];
|
||||
license = with licenses; [ gpl3 cc-by-nc-sa-30 geogebra ];
|
||||
platforms = platforms.all;
|
||||
hydraPlatforms = [];
|
||||
|
@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
|
||||
version = "1.0.2";
|
||||
name = "monotone-viz-${version}";
|
||||
|
||||
buildInputs = [ocaml lablgtk libgnomecanvas glib pkgconfig graphviz_2_0 makeWrapper];
|
||||
buildInputs = [ocaml lablgtk libgnomecanvas glib pkgconfig graphviz_2_0 makeWrapper camlp4];
|
||||
src = fetchurl {
|
||||
url = "http://oandrieu.nerim.net/monotone-viz/${name}-nolablgtk.tar.gz";
|
||||
sha256 = "1l5x4xqz5g1aaqbc1x80mg0yzkiah9ma9k9mivmn08alkjlakkdk";
|
||||
|
@ -4,29 +4,17 @@
|
||||
, compton, procps, iproute, coreutils, curl, alsaUtils, findutils, xterm
|
||||
, which, dbus, nettools, git, asciidoc, doxygen
|
||||
, xmlto, docbook_xml_dtd_45, docbook_xsl, findXMLCatalogs
|
||||
, libxkbcommon, xcbutilxrm
|
||||
, libxkbcommon, xcbutilxrm, hicolor_icon_theme
|
||||
}:
|
||||
|
||||
let
|
||||
version = "4.0";
|
||||
in with luaPackages;
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
with luaPackages; stdenv.mkDerivation rec {
|
||||
name = "awesome-${version}";
|
||||
|
||||
version = "4.0";
|
||||
src = fetchurl {
|
||||
url = "http://github.com/awesomeWM/awesome-releases/raw/master/${name}.tar.xz";
|
||||
sha256 = "0czkcz67sab63gf5m2p2pgg05yinjx60hfb9rfyzdkkg28q9f02w";
|
||||
};
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Highly configurable, dynamic window manager for X";
|
||||
homepage = https://awesomewm.org/;
|
||||
license = licenses.gpl2Plus;
|
||||
maintainers = with maintainers; [ lovek323 rasendubi ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
asciidoc
|
||||
cmake
|
||||
@ -36,33 +24,14 @@ stdenv.mkDerivation rec {
|
||||
pkgconfig
|
||||
xmlto docbook_xml_dtd_45 docbook_xsl findXMLCatalogs
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
cairo
|
||||
dbus
|
||||
gdk_pixbuf
|
||||
gobjectIntrospection
|
||||
git
|
||||
lgi
|
||||
libpthreadstubs
|
||||
libstartup_notification
|
||||
libxdg_basedir
|
||||
lua
|
||||
nettools
|
||||
pango
|
||||
xcb-util-cursor
|
||||
xorg.libXau
|
||||
xorg.libXdmcp
|
||||
xorg.libxcb
|
||||
xorg.libxshmfence
|
||||
xorg.xcbutil
|
||||
xorg.xcbutilimage
|
||||
xorg.xcbutilkeysyms
|
||||
xorg.xcbutilrenderutil
|
||||
xorg.xcbutilwm
|
||||
libxkbcommon
|
||||
xcbutilxrm
|
||||
];
|
||||
propagatedUserEnvPkgs = [ hicolor_icon_theme ];
|
||||
buildInputs = [ cairo dbus gdk_pixbuf gobjectIntrospection
|
||||
git lgi libpthreadstubs libstartup_notification
|
||||
libxdg_basedir lua nettools pango xcb-util-cursor
|
||||
xorg.libXau xorg.libXdmcp xorg.libxcb xorg.libxshmfence
|
||||
xorg.xcbutil xorg.xcbutilimage xorg.xcbutilkeysyms
|
||||
xorg.xcbutilrenderutil xorg.xcbutilwm libxkbcommon
|
||||
xcbutilxrm ];
|
||||
|
||||
#cmakeFlags = "-DGENERATE_MANPAGES=ON";
|
||||
|
||||
@ -86,4 +55,12 @@ stdenv.mkDerivation rec {
|
||||
passthru = {
|
||||
inherit lua;
|
||||
};
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Highly configurable, dynamic window manager for X";
|
||||
homepage = https://awesomewm.org/;
|
||||
license = licenses.gpl2Plus;
|
||||
maintainers = with maintainers; [ lovek323 rasendubi ndowens ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
|
@ -11,8 +11,11 @@ fetchCargoDeps() {
|
||||
echo "Using rust registry from $rustRegistry"
|
||||
|
||||
cat <<EOF > $out/config
|
||||
[registry]
|
||||
index = "file://$rustRegistry"
|
||||
[source.nix-store-rust-registry]
|
||||
registry = "file://$rustRegistry"
|
||||
|
||||
[source.crates-io]
|
||||
replace-with = "nix-store-rust-registry"
|
||||
EOF
|
||||
|
||||
export CARGO_HOME=$out
|
||||
|
18
pkgs/common-updater/scripts.nix
Normal file
18
pkgs/common-updater/scripts.nix
Normal file
@ -0,0 +1,18 @@
|
||||
{ stdenv, makeWrapper, coreutils, gawk, gnused, nix }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "common-updater-scripts";
|
||||
|
||||
buildInputs = [ makeWrapper ];
|
||||
|
||||
unpackPhase = "true";
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cp ${./scripts}/* $out/bin
|
||||
|
||||
for f in $out/bin/*; do
|
||||
wrapProgram $f --prefix PATH : ${stdenv.lib.makeBinPath [ coreutils gawk gnused nix ]}
|
||||
done
|
||||
'';
|
||||
}
|
91
pkgs/common-updater/scripts/update-source-version
Executable file
91
pkgs/common-updater/scripts/update-source-version
Executable file
@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
die() {
|
||||
echo "$0: error: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Usage: update-source-hash <attr> <version> [<new-source-hash>]
|
||||
attr=$1
|
||||
newVersion=$2
|
||||
newHash=$3
|
||||
|
||||
nixFile=$(nix-instantiate --eval --strict -A "$attr.meta.position" | sed -re 's/^"(.*):[0-9]+"$/\1/')
|
||||
if [ ! -f "$nixFile" ]; then
|
||||
die "Couldn't evaluate '$attr.meta.position' to locate the .nix file!"
|
||||
fi
|
||||
|
||||
oldHashAlgo=$(nix-instantiate --eval --strict -A "$attr.src.drvAttrs.outputHashAlgo" | tr -d '"')
|
||||
oldHash=$(nix-instantiate --eval --strict -A "$attr.src.drvAttrs.outputHash" | tr -d '"')
|
||||
|
||||
if [ -z "$oldHashAlgo" -o -z "$oldHash" ]; then
|
||||
die "Couldn't evaluate old source hash from '$attr.src'!"
|
||||
fi
|
||||
|
||||
if [ $(grep -c "$oldHash" "$nixFile") != 1 ]; then
|
||||
die "Couldn't locate old source hash '$oldHash' (or it appeared more than once) in '$nixFile'!"
|
||||
fi
|
||||
|
||||
drvName=$(nix-instantiate --eval -E "with import ./. {}; (builtins.parseDrvName $attr.name).name" | tr -d '"')
|
||||
oldVersion=$(nix-instantiate --eval -E "with import ./. {}; $attr.version or (builtins.parseDrvName $attr.name).version" | tr -d '"')
|
||||
|
||||
if [ -z "$drvName" -o -z "$oldVersion" ]; then
|
||||
die "Couldn't evaluate name and version from '$attr.name'!"
|
||||
fi
|
||||
|
||||
if [ "$oldVersion" = "$newVersion" ]; then
|
||||
echo "$0: New version same as old version, nothing to do." >&2
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Escape dots, there should not be any other regex characters allowed in store path names
|
||||
oldVersion=$(echo "$oldVersion" | sed -re 's|\.|\\.|g')
|
||||
|
||||
if [ $(grep -c -E "^\s*(let\b)?\s*version\s+=\s+\"$oldVersion\"" "$nixFile") = 1 ]; then
|
||||
pattern="/\bversion\b\s*=/ s|\"$oldVersion\"|\"$newVersion\"|"
|
||||
elif [ $(grep -c -E "^\s*(let\b)?\s*name\s+=\s+\"$drvName-$oldVersion\"" "$nixFile") = 1 ]; then
|
||||
pattern="/\bname\b\s*=/ s|\"$drvName-$oldVersion\"|\"$drvName-$newVersion\"|"
|
||||
else
|
||||
die "Couldn't figure out where out where to patch in new version in '$attr'!"
|
||||
fi
|
||||
|
||||
# Replace new version
|
||||
sed -i.bak "$nixFile" -re "$pattern"
|
||||
if cmp -s "$nixFile" "$nixFile.bak"; then
|
||||
die "Failed to replace version '$oldVersion' to '$newVersion' in '$attr'!"
|
||||
fi
|
||||
|
||||
case "$oldHashAlgo" in
|
||||
sha256) hashLength=64 ;;
|
||||
sha512) hashLength=128 ;;
|
||||
*) die "Unhandled hash algorithm '$oldHashAlgo' in '$attr'!" ;;
|
||||
esac
|
||||
|
||||
# Make a temporary all-zeroes hash of $hashLength characters
|
||||
tempHash=$(printf '%0*d' "$hashLength" 0)
|
||||
|
||||
sed -i "$nixFile" -re "s|\"$oldHash\"|\"$tempHash\"|"
|
||||
if cmp -s "$nixFile" "$nixFile.bak"; then
|
||||
die "Failed to replace source hash of '$attr' to a temporary hash!"
|
||||
fi
|
||||
|
||||
# If new hash not given on the command line, recalculate it ourselves.
|
||||
if [ -z "$newHash" ]; then
|
||||
nix-build --no-out-link -A "$attr.src" 2>"$attr.fetchlog" >/dev/null || true
|
||||
# FIXME: use nix-build --hash here once https://github.com/NixOS/nix/issues/1172 is fixed
|
||||
newHash=$(tail -n2 "$attr.fetchlog" | grep "output path .* has .* hash .* when .* was expected" | head -n1 | tr -dc '\040-\177' | awk '{ print $(NF-4) }')
|
||||
fi
|
||||
|
||||
if [ -z "$newHash" ]; then
|
||||
cat "$attr.fetchlog" >&2
|
||||
die "Couldn't figure out new hash of '$attr.src'!"
|
||||
fi
|
||||
|
||||
sed -i "$nixFile" -re "s|\"$tempHash\"|\"$newHash\"|"
|
||||
if cmp -s "$nixFile" "$nixFile.bak"; then
|
||||
die "Failed to replace temporary source hash of '$attr' to the final source hash!"
|
||||
fi
|
||||
|
||||
rm -f "$nixFile.bak"
|
||||
rm -f "$attr.fetchlog"
|
@ -1,11 +1,27 @@
|
||||
/*
|
||||
|
||||
# New packages
|
||||
|
||||
READ THIS FIRST
|
||||
|
||||
This module is for official packages in the KDE Applications Bundle. All
|
||||
available packages are listed in `./srcs.nix`, although some are not yet
|
||||
packaged in Nixpkgs (see below).
|
||||
|
||||
IF YOUR PACKAGE IS NOT LISTED IN `./srcs.nix`, IT DOES NOT GO HERE.
|
||||
|
||||
Many of the packages released upstream are not yet built in Nixpkgs due to lack
|
||||
of demand. To add a Nixpkgs build for an upstream package, copy one of the
|
||||
existing packages here and modify it as necessary. A simple example package that
|
||||
still shows most of the available features is in `./gwenview.nix`.
|
||||
|
||||
# Updates
|
||||
|
||||
1. Update the URL in `maintainers/scripts/generate-kde-applications.sh` and
|
||||
run that script from the top of the Nixpkgs tree.
|
||||
2. Check that the new packages build correctly.
|
||||
3. Commit the changes and open a pull request.
|
||||
1. Update the URL in `./fetch.sh`.
|
||||
2. Run `./maintainers/scripts/fetch-kde-qt.sh pkgs/desktops/kde-5/applications`
|
||||
from the top of the Nixpkgs tree.
|
||||
3. Invoke `nix-build -A kde5` and ensure that everything builds.
|
||||
4. Commit the changes and open a pull request.
|
||||
|
||||
*/
|
||||
|
||||
@ -71,11 +87,6 @@ let
|
||||
spectacle = callPackage ./spectacle.nix {};
|
||||
|
||||
l10n = pkgs.recurseIntoAttrs (import ./l10n.nix { inherit callPackage lib pkgs; });
|
||||
|
||||
# External packages
|
||||
kipi-plugins = callPackage ../../../applications/graphics/kipi-plugins/5.x.nix {};
|
||||
ktorrent = callPackage ../../../applications/networking/p2p/ktorrent/5.nix { };
|
||||
libktorrent = callPackage ../../../development/libraries/libktorrent/5.nix { };
|
||||
};
|
||||
|
||||
in packages
|
||||
|
@ -1,11 +1,26 @@
|
||||
/*
|
||||
|
||||
# New packages
|
||||
|
||||
READ THIS FIRST
|
||||
|
||||
This module is for official packages in KDE Plasma 5. All available packages are
|
||||
listed in `./srcs.nix`, although a few are not yet packaged in Nixpkgs (see
|
||||
below).
|
||||
|
||||
IF YOUR PACKAGE IS NOT LISTED IN `./srcs.nix`, IT DOES NOT GO HERE.
|
||||
|
||||
Many of the packages released upstream are not yet built in Nixpkgs due to lack
|
||||
of demand. To add a Nixpkgs build for an upstream package, copy one of the
|
||||
existing packages here and modify it as necessary.
|
||||
|
||||
# Updates
|
||||
|
||||
1. Update the URL in `maintainers/scripts/generate-kde-plasma.sh` and run
|
||||
that script from the top of the Nixpkgs tree.
|
||||
2. Check that the new packages build correctly.
|
||||
3. Commit the changes and open a pull request.
|
||||
1. Update the URL in `./fetch.sh`.
|
||||
2. Run `./maintainers/scripts/fetch-kde-qt.sh pkgs/desktops/kde-5/plasma`
|
||||
from the top of the Nixpkgs tree.
|
||||
3. Invoke `nix-build -A kde5` and ensure that everything builds.
|
||||
4. Commit the changes and open a pull request.
|
||||
|
||||
*/
|
||||
|
||||
|
@ -3,17 +3,18 @@
|
||||
stdenv.mkDerivation rec {
|
||||
name = "${pname}-${version}";
|
||||
pname = "liblxqt";
|
||||
version = "0.11.0";
|
||||
version = "0.11.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "12gla3pdg0n28w15qrmha83xm3021xdby8ydwp1qzcips5pa5zac";
|
||||
sha256 = "0dcsgj0qr4589wsibs6fdza4ncqavrhykd05d25rs78pa94lvvh5";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
lxqt.lxqt-build-tools
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
@ -38,7 +39,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Core utility library for all LXQt components";
|
||||
homepage = https://github.com/lxde/liblxqt;
|
||||
license = licenses.lgpl21Plus;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
||||
|
@ -1,17 +1,17 @@
|
||||
{ stdenv, fetchFromGitHub, cmake, qt5 }:
|
||||
{ stdenv, fetchFromGitHub, cmake, qt5, lxqt }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "libsysstat-${version}";
|
||||
version = "0.3.2";
|
||||
version = "0.3.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = "libsysstat";
|
||||
rev = version;
|
||||
sha256 = "1swpnz37daj3njkbqddmhaiipfl335c3g675y9afhabg7l4anf1n";
|
||||
sha256 = "1rkbh6jj69wsf8a7w7cq8psqw08vqf9rq5pdnv4xxqb036r4bi31";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
nativeBuildInputs = [ cmake lxqt.lxqt-build-tools ];
|
||||
|
||||
buildInputs = [ qt5.qtbase ];
|
||||
|
||||
@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Library used to query system info and statistics";
|
||||
homepage = https://github.com/lxde/libsysstat;
|
||||
license = licenses.lgpl21Plus;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
||||
|
23
pkgs/desktops/lxqt/base/lxqt-build-tools/default.nix
Normal file
23
pkgs/desktops/lxqt/base/lxqt-build-tools/default.nix
Normal file
@ -0,0 +1,23 @@
|
||||
{ stdenv, fetchFromGitHub, cmake, qt5 }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "lxqt-build-tools-${version}";
|
||||
version = "0.3.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = "lxqt-build-tools";
|
||||
rev = version;
|
||||
sha256 = "1awd70ifbbi67pklhldjw968c1fw1lcif9nh4qbrjqmlg1gn3kmv";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake qt5.qtbase ];
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Various packaging tools and scripts for LXQt applications";
|
||||
homepage = https://github.com/lxde/lxqt-build-tools;
|
||||
license = licenses.lgpl21;
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
@ -4,29 +4,24 @@ libfm, menu-cache }:
|
||||
stdenv.mkDerivation rec {
|
||||
name = "${pname}-${version}";
|
||||
pname = "libfm-qt";
|
||||
version = "0.11.1";
|
||||
version = "0.11.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "1kgvzjsa4ihlj2clz6y6s95nq0lhg66d1dhkgw3mdqaak7d0pdiz";
|
||||
sha256 = "0k2g6bkz7bvawqkjzykbxi18wqsnhbxklqy6aqqkclpzcw45vk5v";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkgconfig
|
||||
lxqt.liblxqt
|
||||
lxqt.libqtxdg
|
||||
lxqt.lxqt-build-tools
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
qt5.qtx11extras
|
||||
qt5.qttools
|
||||
qt5.qtsvg
|
||||
kde5.kwindowsystem
|
||||
xorg.libpthreadstubs
|
||||
xorg.libXdmcp
|
||||
libfm
|
||||
menu-cache
|
||||
];
|
||||
@ -37,7 +32,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Core library of PCManFM-Qt (Qt binding for libfm)";
|
||||
homepage = https://github.com/lxde/libfm-qt;
|
||||
license = licenses.lgpl21;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
||||
|
@ -1,18 +1,21 @@
|
||||
{ stdenv, fetchFromGitHub, cmake, qt5, kde5, lxqt, xorg }:
|
||||
{ stdenv, fetchFromGitHub, cmake, qt5, kde5, lxqt }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "${pname}-${version}";
|
||||
pname = "lxqt-about";
|
||||
version = "0.11.0";
|
||||
version = "0.11.1";
|
||||
|
||||
srcs = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "0739gp3af68cvf8fxqvd203xqzncglmxpklq8mryrs5f1xnqp6gc";
|
||||
sha256 = "1pa68pr0iwvh34lippagc8kxdfd0l2071m0vh7dnvfqbnwly29dk";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
lxqt.lxqt-build-tools
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
qt5.qtx11extras
|
||||
@ -31,7 +34,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Dialogue window providing information about LXQt and the system it's running on";
|
||||
homepage = https://github.com/lxde/lxqt-about;
|
||||
license = licenses.lgpl21;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
||||
|
@ -1,19 +1,20 @@
|
||||
{ stdenv, fetchFromGitHub, cmake, qt5, kde5, lxqt, xorg, polkit }:
|
||||
{ stdenv, fetchFromGitHub, cmake, qt5, kde5, lxqt, polkit }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "${pname}-${version}";
|
||||
pname = "lxqt-admin";
|
||||
version = "0.11.0";
|
||||
version = "0.11.1";
|
||||
|
||||
srcs = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "17g9v6dyqy5pgpqragpf0sgnfxz2ip2g7xix7kmkna3qyym44b23";
|
||||
sha256 = "12c1wdciqgiifsk5aslw3990pk9ylk9jhgwnrxvh798rr48hhflr";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
lxqt.lxqt-build-tools
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
@ -34,7 +35,7 @@ stdenv.mkDerivation rec {
|
||||
description = "LXQt system administration tool";
|
||||
homepage = https://github.com/lxde/lxqt-admin;
|
||||
license = licenses.lgpl21;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
||||
|
@ -1,26 +1,24 @@
|
||||
{ stdenv, fetchFromGitHub, cmake, qt5, kde5, lxqt, xorg, hicolor_icon_theme, xmessage }:
|
||||
{ stdenv, fetchFromGitHub, cmake, qt5, lxqt, hicolor_icon_theme, xmessage }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "${pname}-${version}";
|
||||
pname = "lxqt-common";
|
||||
version = "0.11.0";
|
||||
version = "0.11.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "14nx3zcknwsn713wdnmb2xl15vf21vh13kxscdwmfnd48m5j4m3b";
|
||||
sha256 = "07ih2w9ksbxqwy36xvgb9b31740nhkm7ap70wvv8q6x0wyhn71gn";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
lxqt.lxqt-build-tools
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
qt5.qtx11extras
|
||||
qt5.qttools
|
||||
qt5.qtsvg
|
||||
kde5.kwindowsystem
|
||||
lxqt.liblxqt
|
||||
lxqt.libqtxdg
|
||||
hicolor_icon_theme
|
||||
xmessage
|
||||
];
|
||||
@ -36,7 +34,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Common files for LXQt";
|
||||
homepage = https://github.com/lxde/lxqt-common;
|
||||
license = licenses.lgpl21;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
||||
|
@ -3,19 +3,20 @@
|
||||
stdenv.mkDerivation rec {
|
||||
name = "${pname}-${version}";
|
||||
pname = "lxqt-config";
|
||||
version = "0.11.0";
|
||||
version = "0.11.1";
|
||||
|
||||
srcs = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "187x19s0jw20an37v7svkry6p021ply4i3ngh5w2nx5rlqkf63qw";
|
||||
sha256 = "0mqvv93djsw49n0gxpws3hrwimnyf9kzvc2vhjkzrjfxpabk2axx";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkgconfig
|
||||
];
|
||||
lxqt.lxqt-build-tools
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
qt5.qtbase
|
||||
@ -41,7 +42,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Tools to configure LXQt and the underlying operating system";
|
||||
homepage = https://github.com/lxde/lxqt-config;
|
||||
license = licenses.lgpl21;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
||||
|
@ -3,16 +3,19 @@
|
||||
stdenv.mkDerivation rec {
|
||||
name = "${pname}-${version}";
|
||||
pname = "lxqt-globalkeys";
|
||||
version = "0.11.0";
|
||||
version = "0.11.1";
|
||||
|
||||
srcs = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "05kcq21fyz7vnhh9k4nzhskgbghp1slsz14gh9anhya4a567xx0y";
|
||||
sha256 = "1kwibll2azi4pafk7crfgibk5a54rnsia3c4cz680iny7xz1wy6h";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
lxqt.lxqt-build-tools
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
qt5.qtbase
|
||||
@ -32,7 +35,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Daemon used to register global keyboard shortcuts";
|
||||
homepage = https://github.com/lxde/lxqt-globalkeys;
|
||||
license = licenses.lgpl21;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
||||
|
@ -1,25 +1,20 @@
|
||||
{ stdenv, fetchFromGitHub, cmake, qt5, kde5, lxqt }:
|
||||
{ stdenv, fetchFromGitHub, cmake, qt5, lxqt }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "lxqt-l10n-${version}";
|
||||
version = "0.11.0";
|
||||
version = "0.11.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = "lxqt-l10n";
|
||||
rev = version;
|
||||
sha256 = "1gwismyjfdd7lwlgfl5jvbxmkbq9v9ia0shm4f7hkkvlpc2y24gk";
|
||||
sha256 = "1vk4q98kraq0lba50n9z6jwiapc7nz2b143b4ldlmrz4wscd867h";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
qt5.qtbase
|
||||
qt5.qtx11extras
|
||||
qt5.qttools
|
||||
qt5.qtsvg
|
||||
kde5.kwindowsystem
|
||||
lxqt.liblxqt
|
||||
lxqt.libqtxdg
|
||||
lxqt.lxqt-build-tools
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
@ -31,7 +26,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Translations of LXQt";
|
||||
homepage = https://github.com/lxde/lxqt-l10n;
|
||||
license = licenses.lgpl21Plus;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
||||
|
@ -3,16 +3,19 @@
|
||||
stdenv.mkDerivation rec {
|
||||
name = "${pname}-${version}";
|
||||
pname = "lxqt-notificationd";
|
||||
version = "0.11.0";
|
||||
version = "0.11.1";
|
||||
|
||||
srcs = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "001xcvmg7ap5pbssc9pqp4jshgq2h4zxk9rra76xnrby6k8n6p3x";
|
||||
sha256 = "1n39zjczzhqn73vfyjngybmk9w8j1z3vjkaq80rf2hk89vwsm0wc";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
lxqt.lxqt-build-tools
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
qt5.qtbase
|
||||
@ -21,6 +24,7 @@ stdenv.mkDerivation rec {
|
||||
kde5.kwindowsystem
|
||||
lxqt.liblxqt
|
||||
lxqt.libqtxdg
|
||||
lxqt.lxqt-common
|
||||
];
|
||||
|
||||
cmakeFlags = [ "-DPULL_TRANSLATIONS=NO" ];
|
||||
@ -29,7 +33,7 @@ stdenv.mkDerivation rec {
|
||||
description = "The LXQt notification daemon";
|
||||
homepage = https://github.com/lxde/lxqt-notificationd;
|
||||
license = licenses.lgpl21;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
||||
|
@ -3,16 +3,19 @@
|
||||
stdenv.mkDerivation rec {
|
||||
name = "${pname}-${version}";
|
||||
pname = "lxqt-openssh-askpass";
|
||||
version = "0.11.0";
|
||||
version = "0.11.1";
|
||||
|
||||
srcs = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "0nz8sv3yrqbzgmd6jahaqaa71axy5x06k091splp9cmab0vzng7c";
|
||||
sha256 = "030pzys86s7rpgl35kl4b3y7gmv9982j3blmg8927nq4pw61gfj9";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
lxqt.lxqt-build-tools
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
qt5.qtbase
|
||||
@ -30,7 +33,7 @@ stdenv.mkDerivation rec {
|
||||
description = "GUI to query passwords on behalf of SSH agents";
|
||||
homepage = https://github.com/lxde/lxqt-openssh-askpass;
|
||||
license = licenses.lgpl21;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
||||
|
@ -5,16 +5,20 @@ lxmenu-data }:
|
||||
stdenv.mkDerivation rec {
|
||||
name = "${pname}-${version}";
|
||||
pname = "lxqt-panel";
|
||||
version = "0.11.0";
|
||||
version = "0.11.1";
|
||||
|
||||
srcs = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "0lwgz6nir4cd50xbmc3arngnw38rb5kqgcsgp3dlq6gpncg45hdq";
|
||||
sha256 = "097rivly61i99v0w9a3dgbwbc4c5x9nh3jl0n94dix1qgd4w983y";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake pkgconfig ];
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkgconfig
|
||||
lxqt.lxqt-build-tools
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
qt5.qtbase
|
||||
@ -27,6 +31,7 @@ stdenv.mkDerivation rec {
|
||||
kde5.kguiaddons
|
||||
lxqt.liblxqt
|
||||
lxqt.libqtxdg
|
||||
lxqt.lxqt-common
|
||||
lxqt.lxqt-globalkeys
|
||||
lxqt.libsysstat
|
||||
xorg.libpthreadstubs
|
||||
@ -47,7 +52,7 @@ stdenv.mkDerivation rec {
|
||||
description = "The LXQt desktop panel";
|
||||
homepage = https://github.com/lxde/lxqt-panel;
|
||||
license = licenses.lgpl21;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
||||
|
@ -3,16 +3,20 @@
|
||||
stdenv.mkDerivation rec {
|
||||
name = "${pname}-${version}";
|
||||
pname = "lxqt-policykit";
|
||||
version = "0.11.0";
|
||||
version = "0.11.1";
|
||||
|
||||
srcs = fetchFromGitHub {
|
||||
owner = "lxde";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "0rbqzh8r259cc44f1cb236p9c3lp195zjdsw3w1nz7j7gzv9yjnd";
|
||||
sha256 = "0sf8wj152z1xid1i2x5g1zpgh7lwq8f0rbrk3r9shyksxqcj2d8p";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake pkgconfig ];
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkgconfig
|
||||
lxqt.lxqt-build-tools
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
qt5.qtbase
|
||||
@ -31,7 +35,7 @@ stdenv.mkDerivation rec {
|
||||
description = "The LXQt PolicyKit agent";
|
||||
homepage = https://github.com/lxde/lxqt-policykit;
|
||||
license = licenses.lgpl21;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
platforms = with platforms; unix;
|
||||
maintainers = with maintainers; [ romildo ];
|
||||
};
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user