Merge remote-tracking branch 'ni/master'
This commit is contained in:
commit
d30480f145
106
krebs/5pkgs/simple/withGetopt.nix
Normal file
106
krebs/5pkgs/simple/withGetopt.nix
Normal file
|
@ -0,0 +1,106 @@
|
|||
with import <stockholm/lib>;
|
||||
{ utillinux, writeDash }:
|
||||
|
||||
opt-spec: cmd-spec: let
|
||||
|
||||
cmd = cmd-spec opts;
|
||||
|
||||
cmd-script =
|
||||
if typeOf cmd == "set"
|
||||
then "exec ${cmd}"
|
||||
else cmd;
|
||||
|
||||
opts = mapAttrs (name: value: value // rec {
|
||||
long = value.long or (replaceStrings ["_"] ["-"] name);
|
||||
ref = value.ref or "\"\$${varname}\"";
|
||||
switch = value.switch or false;
|
||||
varname = value.varname or (replaceStrings ["-"] ["_"] name);
|
||||
}) opt-spec;
|
||||
|
||||
# true if b requires a to define its default value
|
||||
opts-before = a: b:
|
||||
test ".*[$]${stringAsChars (c: "[${c}]") a.varname}\\>.*" (b.default or "");
|
||||
|
||||
opts-list = let
|
||||
sort-out = toposort opts-before (attrValues opts);
|
||||
in
|
||||
if sort-out ? result
|
||||
then sort-out.result
|
||||
else throw "toposort output: ${toJSON sort-out}";
|
||||
|
||||
wrapper-name =
|
||||
if typeOf cmd == "set" && cmd ? name
|
||||
then "${cmd.name}-getopt"
|
||||
else "getopt-wrapper";
|
||||
|
||||
in writeDash wrapper-name ''
|
||||
set -efu
|
||||
|
||||
wrapper_name=${shell.escape wrapper-name}
|
||||
|
||||
${concatStringsSep "\n" (mapAttrsToList (name: opt: /* sh */ ''
|
||||
unset ${opt.varname}
|
||||
'') opts)}
|
||||
|
||||
args=$(${utillinux}/bin/getopt \
|
||||
-n "$wrapper_name" \
|
||||
-o "" \
|
||||
-l ${concatMapStringsSep ","
|
||||
(opt: opt.long + optionalString (!opt.switch) ":")
|
||||
(attrValues opts)} \
|
||||
-s sh \
|
||||
-- "$@")
|
||||
if \test $? != 0; then exit 1; fi
|
||||
eval set -- "$args"
|
||||
|
||||
while :; do
|
||||
case $1 in
|
||||
${concatStringsSep "\n" (mapAttrsToList (name: opt: /* sh */ ''
|
||||
--${opt.long})
|
||||
${if opt.switch then /* sh */ ''
|
||||
${opt.varname}=true
|
||||
shift
|
||||
'' else /* sh */ ''
|
||||
${opt.varname}=$2
|
||||
shift 2
|
||||
''}
|
||||
;;
|
||||
'') opts)}
|
||||
--)
|
||||
shift
|
||||
break
|
||||
esac
|
||||
done
|
||||
|
||||
${concatMapStringsSep "\n"
|
||||
(opt: /* sh */ ''
|
||||
if \test "''${${opt.varname}+1}" != 1; then
|
||||
printf '%s: missing mandatory option '--%s'\n' \
|
||||
"$wrapper_name" \
|
||||
${shell.escape opt.long}
|
||||
error=1
|
||||
fi
|
||||
'')
|
||||
(filter
|
||||
(x: ! hasAttr "default" x)
|
||||
(attrValues opts))}
|
||||
if test "''${error+1}" = 1; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
${concatMapStringsSep "\n"
|
||||
(opt: /* sh */ ''
|
||||
if \test "''${${opt.varname}+1}" != 1; then
|
||||
${opt.varname}=${opt.default}
|
||||
fi
|
||||
'')
|
||||
(filter
|
||||
(hasAttr "default")
|
||||
opts-list)}
|
||||
|
||||
${concatStringsSep "\n" (mapAttrsToList (name: opt: /* sh */ ''
|
||||
export ${opt.varname}
|
||||
'') opts)}
|
||||
|
||||
${cmd-script}
|
||||
''
|
118
shell.nix
118
shell.nix
|
@ -6,43 +6,38 @@ let
|
|||
# high level commands
|
||||
#
|
||||
|
||||
# usage: deploy
|
||||
# [--force-populate]
|
||||
# [--quiet]
|
||||
# [--source=PATH]
|
||||
# --system=SYSTEM
|
||||
# [--target=TARGET]
|
||||
# [--user=USER]
|
||||
cmds.deploy = pkgs.writeDash "cmds.deploy" ''
|
||||
cmds.deploy = pkgs.withGetopt {
|
||||
force-populate = { default = /* sh */ "false"; switch = true; };
|
||||
quiet = { default = /* sh */ "false"; switch = true; };
|
||||
source_file = {
|
||||
default = /* sh */ "$user/1systems/$system/source.nix";
|
||||
long = "source";
|
||||
};
|
||||
system = {};
|
||||
target.default = /* sh */ "$system";
|
||||
user.default = /* sh */ "$LOGNAME";
|
||||
} (opts: pkgs.writeDash "cmds.deploy" ''
|
||||
set -efu
|
||||
|
||||
command=deploy
|
||||
. ${init.args}
|
||||
\test -n "''${quiet-}" || quiet=false
|
||||
\test -n "''${target-}" || target=$system
|
||||
\test -n "''${user-}" || user=$LOGNAME
|
||||
\test -n "''${source_file}" || source_file=$user/1systems/$system/source.nix
|
||||
. ${init.env}
|
||||
. ${init.proxy}
|
||||
. ${init.proxy opts}
|
||||
|
||||
exec ${utils.deploy}
|
||||
'';
|
||||
'');
|
||||
|
||||
# usage: install
|
||||
# [--force-populate]
|
||||
# [--quiet]
|
||||
# [--source=PATH]
|
||||
# --system=SYSTEM
|
||||
# --target=TARGET
|
||||
# [--user=USER]
|
||||
cmds.install = pkgs.writeBash "cmds.install" ''
|
||||
cmds.install = pkgs.withGetopt {
|
||||
force-populate = { default = /* sh */ "false"; switch = true; };
|
||||
quiet = { default = /* sh */ "false"; switch = true; };
|
||||
source_file = {
|
||||
default = /* sh */ "$user/1systems/$system/source.nix";
|
||||
long = "source";
|
||||
};
|
||||
system = {};
|
||||
target = {};
|
||||
user.default = /* sh */ "$LOGNAME";
|
||||
} (opts: pkgs.writeBash "cmds.install" ''
|
||||
set -efu
|
||||
|
||||
command=install
|
||||
. ${init.args}
|
||||
\test -n "''${quiet-}" || quiet=false
|
||||
\test -n "''${user-}" || user=$LOGNAME
|
||||
\test -n "''${source_file}" || source_file=$user/1systems/$system/source.nix
|
||||
. ${init.env}
|
||||
|
||||
if \test "''${using_proxy-}" != true; then
|
||||
|
@ -55,7 +50,7 @@ let
|
|||
# TODO inline prepare.sh?
|
||||
fi
|
||||
|
||||
. ${init.proxy}
|
||||
. ${init.proxy opts}
|
||||
|
||||
# Reset PATH because we need access to nixos-install.
|
||||
# TODO provide nixos-install instead of relying on prepare.sh
|
||||
|
@ -75,30 +70,28 @@ let
|
|||
|
||||
cd
|
||||
exec nixos-install
|
||||
'';
|
||||
'');
|
||||
|
||||
# usage: test
|
||||
# [--force-populate]
|
||||
# [--quiet]
|
||||
# [--source=PATH]
|
||||
# --system=SYSTEM
|
||||
# --target=TARGET
|
||||
# [--user=USER]
|
||||
cmds.test = pkgs.writeDash "cmds.test" /* sh */ ''
|
||||
cmds.test = pkgs.withGetopt {
|
||||
force-populate = { default = /* sh */ "false"; switch = true; };
|
||||
quiet = { default = /* sh */ "false"; switch = true; };
|
||||
source_file = {
|
||||
default = /* sh */ "$user/1systems/$system/source.nix";
|
||||
long = "source";
|
||||
};
|
||||
system = {};
|
||||
target = {};
|
||||
user.default = /* sh */ "$LOGNAME";
|
||||
} (opts: pkgs.writeDash "cmds.test" /* sh */ ''
|
||||
set -efu
|
||||
|
||||
export dummy_secrets=true
|
||||
|
||||
command=test
|
||||
. ${init.args}
|
||||
\test -n "''${quiet-}" || quiet=false
|
||||
\test -n "''${user-}" || user=$LOGNAME
|
||||
\test -n "''${source_file}" || source_file=$user/1systems/$system/source.nix
|
||||
. ${init.env}
|
||||
. ${init.proxy}
|
||||
. ${init.proxy opts}
|
||||
|
||||
exec ${utils.build} config.system.build.toplevel
|
||||
'';
|
||||
'');
|
||||
|
||||
#
|
||||
# low level commands
|
||||
|
@ -163,28 +156,6 @@ let
|
|||
echo
|
||||
'';
|
||||
|
||||
init.args = pkgs.writeText "init.args" /* sh */ ''
|
||||
args=$(${pkgs.utillinux}/bin/getopt -n "$command" -s sh \
|
||||
-o Qs:t:u: \
|
||||
-l force-populate,quiet,source:,system:,target:,user: \
|
||||
-- "$@")
|
||||
if \test $? != 0; then exit 1; fi
|
||||
eval set -- "$args"
|
||||
force_populate=false
|
||||
source_file=
|
||||
while :; do case $1 in
|
||||
--force-populate) force_populate=true; shift;;
|
||||
-Q|--quiet) quiet=true; shift;;
|
||||
--source) source_file=$2; shift 2;;
|
||||
-s|--system) system=$2; shift 2;;
|
||||
-t|--target) target=$2; shift 2;;
|
||||
-u|--user) user=$2; shift 2;;
|
||||
--) shift; break;;
|
||||
esac; done
|
||||
for arg; do echo "$command: bad argument: $arg" >&2; done
|
||||
if \test $# != 0; then exit 2; fi
|
||||
'';
|
||||
|
||||
init.env = pkgs.writeText "init.env" /* sh */ ''
|
||||
export quiet
|
||||
export system
|
||||
|
@ -201,7 +172,7 @@ let
|
|||
export target_local="$(echo $target_object | ${pkgs.jq}/bin/jq -r .local)"
|
||||
'';
|
||||
|
||||
init.proxy = pkgs.writeText "init.proxy" /* sh */ ''
|
||||
init.proxy = opts: pkgs.writeText "init.proxy" /* sh */ ''
|
||||
if \test "''${using_proxy-}" != true; then
|
||||
|
||||
source=$(get-source "$source_file")
|
||||
|
@ -219,11 +190,12 @@ let
|
|||
NIX_PATH=$(quote "$target_path") \
|
||||
STOCKHOLM_VERSION=$(quote "$STOCKHOLM_VERSION") \
|
||||
nix-shell --run "$(quote "
|
||||
quiet=$(quote "$quiet") \
|
||||
system=$(quote "$system") \
|
||||
target=$(quote "$target") \
|
||||
${lib.concatStringsSep " " (lib.mapAttrsToList
|
||||
(name: opt: /* sh */ "${opt.varname}=\$(quote ${opt.ref})")
|
||||
opts
|
||||
)} \
|
||||
using_proxy=true \
|
||||
$(quote "$command" "$@")
|
||||
$(quote "$0" "$@")
|
||||
")"
|
||||
fi
|
||||
fi
|
||||
|
|
|
@ -16,6 +16,7 @@ with import <stockholm/lib>;
|
|||
<stockholm/tv/2configs/pulse.nix>
|
||||
<stockholm/tv/2configs/retiolum.nix>
|
||||
<stockholm/tv/2configs/binary-cache>
|
||||
<stockholm/tv/2configs/br.nix>
|
||||
<stockholm/tv/2configs/xserver>
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
|
@ -155,5 +156,10 @@ with import <stockholm/lib>;
|
|||
# The NixOS release to be compatible with for stateful data such as databases.
|
||||
system.stateVersion = "15.09";
|
||||
|
||||
tv.nixpkgs-overlays = {
|
||||
krebs = "/home/tv/stockholm/krebs/5pkgs";
|
||||
tv = "/home/tv/stockholm/tv/5pkgs";
|
||||
};
|
||||
|
||||
virtualisation.virtualbox.host.enable = true;
|
||||
}
|
||||
|
|
49
tv/2configs/br.nix
Normal file
49
tv/2configs/br.nix
Normal file
|
@ -0,0 +1,49 @@
|
|||
with import <stockholm/lib>;
|
||||
{ config, pkgs, ... }: {
|
||||
|
||||
imports = [
|
||||
<nixpkgs/nixos/modules/services/hardware/sane_extra_backends/brscan4.nix>
|
||||
];
|
||||
|
||||
krebs.nixpkgs.allowUnfreePredicate = pkg: any (flip hasPrefix pkg.name) [
|
||||
"brother-udev-rule-type1-"
|
||||
"brscan4-"
|
||||
"mfcl2700dnlpr-"
|
||||
];
|
||||
|
||||
hardware.sane = {
|
||||
enable = true;
|
||||
brscan4 = {
|
||||
enable = true;
|
||||
netDevices = {
|
||||
bra = {
|
||||
model = "MFCL2700DN";
|
||||
ip = "10.23.1.214";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.saned.enable = true;
|
||||
|
||||
# usage: scanimage -d "$(find-scanner bra)" --batch --format=tiff --resolution 150 -x 211 -y 298
|
||||
environment.systemPackages = [
|
||||
(pkgs.writeDashBin "find-scanner" ''
|
||||
set -efu
|
||||
name=$1
|
||||
${pkgs.sane-backends}/bin/scanimage -f '%m %d
|
||||
' \
|
||||
| ${pkgs.gawk}/bin/awk -v dev="*$name" '$1 == dev { print $2; exit }' \
|
||||
| ${pkgs.gnugrep}/bin/grep .
|
||||
'')
|
||||
];
|
||||
|
||||
services.printing = {
|
||||
enable = true;
|
||||
drivers = [
|
||||
pkgs.mfcl2700dncupswrapper
|
||||
];
|
||||
};
|
||||
|
||||
systemd.services.cups.serviceConfig.PrivateTmp = true;
|
||||
}
|
|
@ -90,11 +90,7 @@ with import <stockholm/lib>;
|
|||
environment.variables = {
|
||||
NIX_PATH = mkForce (concatStringsSep ":" [
|
||||
"secrets=/var/src/stockholm/null"
|
||||
"nixpkgs-overlays=${pkgs.runCommand "nixpkgs-overlays" {} ''
|
||||
mkdir $out
|
||||
ln -s /home/tv/stockholm/krebs/5pkgs $out/krebs
|
||||
ln -s /home/tv/stockholm/tv/5pkgs $out/tv
|
||||
''}"
|
||||
"nixpkgs-overlays=${config.tv.nixpkgs-overlays}"
|
||||
"/var/src"
|
||||
]);
|
||||
};
|
||||
|
|
|
@ -52,7 +52,7 @@ in {
|
|||
systemd.services.charybdis = {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
requires = [ "secret.service" ];
|
||||
after = [ "network.target" "secret.service" ];
|
||||
after = [ "network-online.target" "secret.service" ];
|
||||
environment = {
|
||||
BANDB_DBPATH = "${cfg.user.home}/ban.db";
|
||||
};
|
||||
|
|
|
@ -6,6 +6,7 @@ _:
|
|||
./ejabberd
|
||||
./hosts.nix
|
||||
./iptables.nix
|
||||
./nixpkgs-overlays.nix
|
||||
./x0vncserver.nix
|
||||
];
|
||||
}
|
||||
|
|
23
tv/3modules/nixpkgs-overlays.nix
Normal file
23
tv/3modules/nixpkgs-overlays.nix
Normal file
|
@ -0,0 +1,23 @@
|
|||
with import <stockholm/lib>;
|
||||
{ config, pkgs, ... }: {
|
||||
|
||||
options.tv.nixpkgs-overlays = mkOption {
|
||||
apply = src:
|
||||
pkgs.runCommand "nixpkgs-overlays" {} ''
|
||||
mkdir $out
|
||||
${concatStringsSep "\n" (mapAttrsToList (name: path:
|
||||
"ln -s ${shell.escape path} $out/${shell.escape name}"
|
||||
) src)}
|
||||
'' // {
|
||||
inherit src;
|
||||
};
|
||||
type = types.attrsOf types.absolute-pathname;
|
||||
};
|
||||
|
||||
config = {
|
||||
tv.nixpkgs-overlays = {
|
||||
krebs = mkDefault "/var/src/stockholm/krebs/5pkgs";
|
||||
tv = mkDefault "/var/src/stockholm/tv/5pkgs";
|
||||
};
|
||||
};
|
||||
}
|
45
tv/5pkgs/simple/mfcl2700dncupswrapper/default.nix
Normal file
45
tv/5pkgs/simple/mfcl2700dncupswrapper/default.nix
Normal file
|
@ -0,0 +1,45 @@
|
|||
{ coreutils, dpkg, fetchurl, gnugrep, gnused, makeWrapper, mfcl2700dnlpr,
|
||||
perl, stdenv }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "mfcl2700dncupswrapper-${meta.version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://download.brother.com/welcome/dlf102086/${name}.i386.deb";
|
||||
sha256 = "07w48mah0xbv4h8vsh1qd5cd4b463bx8y6gc5x9pfgsxsy6h6da1";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ dpkg makeWrapper ];
|
||||
|
||||
phases = [ "installPhase" ];
|
||||
|
||||
installPhase = ''
|
||||
dpkg-deb -x $src $out
|
||||
|
||||
basedir=${mfcl2700dnlpr}/opt/brother/Printers/MFCL2700DN
|
||||
dir=$out/opt/brother/Printers/MFCL2700DN
|
||||
|
||||
substituteInPlace $dir/cupswrapper/brother_lpdwrapper_MFCL2700DN \
|
||||
--replace /usr/bin/perl ${perl}/bin/perl \
|
||||
--replace "basedir =~" "basedir = \"$basedir\"; #" \
|
||||
--replace "PRINTER =~" "PRINTER = \"MFCL2700DN\"; #"
|
||||
|
||||
wrapProgram $dir/cupswrapper/brother_lpdwrapper_MFCL2700DN \
|
||||
--prefix PATH : ${stdenv.lib.makeBinPath [ coreutils gnugrep gnused ]}
|
||||
|
||||
mkdir -p $out/lib/cups/filter
|
||||
mkdir -p $out/share/cups/model
|
||||
|
||||
ln $dir/cupswrapper/brother_lpdwrapper_MFCL2700DN $out/lib/cups/filter
|
||||
ln $dir/cupswrapper/brother-MFCL2700DN-cups-en.ppd $out/share/cups/model
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Brother MFC-L2700DN CUPS wrapper driver";
|
||||
homepage = "http://www.brother.com/";
|
||||
license = stdenv.lib.licenses.gpl2Plus;
|
||||
maintainers = [ stdenv.lib.maintainers.tv ];
|
||||
platforms = stdenv.lib.platforms.linux;
|
||||
version = "3.2.0-1";
|
||||
};
|
||||
}
|
44
tv/5pkgs/simple/mfcl2700dnlpr/default.nix
Normal file
44
tv/5pkgs/simple/mfcl2700dnlpr/default.nix
Normal file
|
@ -0,0 +1,44 @@
|
|||
{ coreutils, dpkg, fetchurl, ghostscript, gnugrep, gnused, pkgsi686Linux, makeWrapper, perl, stdenv, which }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "mfcl2700dnlpr-${meta.version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://download.brother.com/welcome/dlf102085/${name}.i386.deb";
|
||||
sha256 = "170qdzxlqikzvv2wphvfb37m19mn13az4aj88md87ka3rl5knk4m";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ dpkg makeWrapper ];
|
||||
|
||||
phases = [ "installPhase" ];
|
||||
|
||||
installPhase = ''
|
||||
dpkg-deb -x $src $out
|
||||
|
||||
dir=$out/opt/brother/Printers/MFCL2700DN
|
||||
|
||||
substituteInPlace $dir/lpd/filter_MFCL2700DN \
|
||||
--replace /usr/bin/perl ${perl}/bin/perl \
|
||||
--replace "BR_PRT_PATH =~" "BR_PRT_PATH = \"$dir\"; #" \
|
||||
--replace "PRINTER =~" "PRINTER = \"MFCL2700DN\"; #"
|
||||
|
||||
wrapProgram $dir/lpd/filter_MFCL2700DN \
|
||||
--prefix PATH : ${stdenv.lib.makeBinPath [
|
||||
coreutils ghostscript gnugrep gnused which
|
||||
]}
|
||||
|
||||
interpreter=${pkgsi686Linux.stdenv.cc.libc.out}/lib/ld-linux.so.2
|
||||
patchelf --set-interpreter "$interpreter" $dir/inf/braddprinter
|
||||
patchelf --set-interpreter "$interpreter" $dir/lpd/brprintconflsr3
|
||||
patchelf --set-interpreter "$interpreter" $dir/lpd/rawtobr3
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Brother MFC-L2700DN LPR driver";
|
||||
homepage = "http://www.brother.com/";
|
||||
license = stdenv.lib.licenses.unfree;
|
||||
maintainers = [ stdenv.lib.maintainers.tv ];
|
||||
platforms = stdenv.lib.platforms.linux;
|
||||
version = "3.2.0-1";
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue