summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornin <nineinchnade@gmail.com>2017-09-29 19:11:43 +0200
committernin <nineinchnade@gmail.com>2017-09-29 19:11:43 +0200
commit93d67cfb618d8f8aff014ecbd6abbf9325cb5f84 (patch)
tree16e8bca30144e7f74eaad7da314ec46b30e3d5f1
parent5525fb770f0705e0284aee020ee1f3bbacfeb8d6 (diff)
parent19686c0786aab7556599c8160e81cde3e3ea952a (diff)
Merge branch 'master' of prism:stockholm
-rw-r--r--.gitignore1
-rw-r--r--lib/shell.nix11
-rw-r--r--shell.nix142
-rw-r--r--tv/1systems/cd/config.nix35
-rw-r--r--tv/1systems/cd/source.nix3
-rw-r--r--tv/1systems/wu/config.nix1
-rw-r--r--tv/1systems/xu/config.nix6
-rw-r--r--tv/2configs/backup.nix12
-rw-r--r--tv/2configs/br.nix49
-rw-r--r--tv/2configs/default.nix6
-rw-r--r--tv/3modules/charybdis/default.nix2
-rw-r--r--tv/3modules/default.nix1
-rw-r--r--tv/3modules/nixpkgs-overlays.nix23
-rw-r--r--tv/5pkgs/default.nix4
-rw-r--r--tv/5pkgs/simple/diff-so-fancy.nix48
-rw-r--r--tv/5pkgs/simple/mfcl2700dncupswrapper/default.nix45
-rw-r--r--tv/5pkgs/simple/mfcl2700dnlpr/default.nix44
-rw-r--r--tv/5pkgs/simple/q/default.nix18
18 files changed, 295 insertions, 156 deletions
diff --git a/.gitignore b/.gitignore
index 1ce0821..e1c6ef9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/.graveyard
+/TODO
diff --git a/lib/shell.nix b/lib/shell.nix
index f977902..5be8d67 100644
--- a/lib/shell.nix
+++ b/lib/shell.nix
@@ -7,10 +7,13 @@ rec {
let
isSafeChar = testString "[-+./0-9:=A-Z_a-z]";
in
- stringAsChars (c:
- if isSafeChar c then c
- else if c == "\n" then "'\n'"
- else "\\${c}");
+ x:
+ if x == "" then "''"
+ else stringAsChars (c:
+ if isSafeChar c then c
+ else if c == "\n" then "'\n'"
+ else "\\${c}"
+ ) x;
#
# shell script generators
diff --git a/shell.nix b/shell.nix
index a4ccc31..4b8abed 100644
--- a/shell.nix
+++ b/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
@@ -118,19 +111,13 @@ let
# usage: parse-target [--default=TARGET] TARGET
# TARGET = [USER@]HOST[:PORT][/PATH]
- cmds.parse-target = pkgs.writeDash "cmds.parse-target" ''
+ cmds.parse-target = pkgs.withGetopt {
+ default_target = {
+ long = "default";
+ short = "d";
+ };
+ } (opts: pkgs.writeDash "cmds.parse-target" ''
set -efu
- args=$(${pkgs.utillinux}/bin/getopt -n "$0" -s sh \
- -o d: \
- -l default: \
- -- "$@")
- if \test $? != 0; then exit 1; fi
- eval set -- "$args"
- default_target=
- while :; do case $1 in
- -d|--default) default_target=$2; shift 2;;
- --) shift; break;;
- esac; done
target=$1; shift
for arg; do echo "$0: bad argument: $arg" >&2; done
if \test $# != 0; then exit 2; fi
@@ -149,7 +136,7 @@ let
($default_target | parse) + ($target | parse | sanitize) |
. + { local: (.user == env.LOGNAME and .host == env.HOSTNAME) }
''}
- '';
+ '');
# usage: quote [ARGS...]
cmds.quote = pkgs.writeDash "cmds.quote" ''
@@ -163,28 +150,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 +166,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 +184,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
diff --git a/tv/1systems/cd/config.nix b/tv/1systems/cd/config.nix
deleted file mode 100644
index 341a62e..0000000
--- a/tv/1systems/cd/config.nix
+++ /dev/null
@@ -1,35 +0,0 @@
-with import <stockholm/lib>;
-{ config, pkgs, ... }: let
-
- bestGuessGateway = addr: elemAt (match "(.*)(\.[^.])" addr) 0 + ".1";
-
-in {
- krebs.build.host = config.krebs.hosts.cd;
-
- imports = [
- <stockholm/tv>
- <stockholm/tv/2configs/hw/CAC-Developer-2.nix>
- <stockholm/tv/2configs/fs/CAC-CentOS-7-64bit.nix>
- <stockholm/tv/2configs/exim-smarthost.nix>
- <stockholm/tv/2configs/retiolum.nix>
- ];
-
- networking = let
- address = config.krebs.build.host.nets.internet.ip4.addr;
- in {
- defaultGateway = bestGuessGateway address;
- interfaces.enp2s1.ip4 = singleton {
- inherit address;
- prefixLength = 24;
- };
- nameservers = ["8.8.8.8"];
- };
-
- environment.systemPackages = with pkgs; [
- iftop
- iotop
- iptables
- nethogs
- tcpdump
- ];
-}
diff --git a/tv/1systems/cd/source.nix b/tv/1systems/cd/source.nix
deleted file mode 100644
index 019e8bc..0000000
--- a/tv/1systems/cd/source.nix
+++ /dev/null
@@ -1,3 +0,0 @@
-import <stockholm/tv/source.nix> {
- name = "cd";
-}
diff --git a/tv/1systems/wu/config.nix b/tv/1systems/wu/config.nix
index 79b5aa2..5c59389 100644
--- a/tv/1systems/wu/config.nix
+++ b/tv/1systems/wu/config.nix
@@ -8,7 +8,6 @@ with import <stockholm/lib>;
<stockholm/tv/2configs/hw/w110er.nix>
<stockholm/tv/2configs/exim-retiolum.nix>
<stockholm/tv/2configs/gitrepos.nix>
- <stockholm/tv/2configs/im.nix>
<stockholm/tv/2configs/mail-client.nix>
<stockholm/tv/2configs/man.nix>
<stockholm/tv/2configs/nginx/public_html.nix>
diff --git a/tv/1systems/xu/config.nix b/tv/1systems/xu/config.nix
index 0abd544..0363c98 100644
--- a/tv/1systems/xu/config.nix
+++ b/tv/1systems/xu/config.nix
@@ -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;
}
diff --git a/tv/2configs/backup.nix b/tv/2configs/backup.nix
index 46e3f70..f76fb2e 100644
--- a/tv/2configs/backup.nix
+++ b/tv/2configs/backup.nix
@@ -52,12 +52,6 @@ with import <stockholm/lib>;
dst = { host = config.krebs.hosts.zu; path = "/bku/xu-home"; };
startAt = "06:20";
};
- xu-pull-cd-home = {
- method = "pull";
- src = { host = config.krebs.hosts.cd; path = "/home"; };
- dst = { host = config.krebs.hosts.xu; path = "/bku/cd-home"; };
- startAt = "07:00";
- };
xu-pull-ni-ejabberd = {
method = "pull";
src = { host = config.krebs.hosts.ni; path = "/var/ejabberd"; };
@@ -76,12 +70,6 @@ with import <stockholm/lib>;
dst = { host = config.krebs.hosts.xu; path = "/bku/zu-home"; };
startAt = "05:00";
};
- zu-pull-cd-home = {
- method = "pull";
- src = { host = config.krebs.hosts.cd; path = "/home"; };
- dst = { host = config.krebs.hosts.zu; path = "/bku/cd-home"; };
- startAt = "06:30";
- };
zu-pull-ni-ejabberd = {
method = "pull";
src = { host = config.krebs.hosts.ni; path = "/var/ejabberd"; };
diff --git a/tv/2configs/br.nix b/tv/2configs/br.nix
new file mode 100644
index 0000000..c7eb20e
--- /dev/null
+++ b/tv/2configs/br.nix
@@ -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;
+}
diff --git a/tv/2configs/default.nix b/tv/2configs/default.nix
index 241a16b..9ad0253 100644
--- a/tv/2configs/default.nix
+++ b/tv/2configs/default.nix
@@ -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"
]);
};
diff --git a/tv/3modules/charybdis/default.nix b/tv/3modules/charybdis/default.nix
index 859dc12..e252f2e 100644
--- a/tv/3modules/charybdis/default.nix
+++ b/tv/3modules/charybdis/default.nix
@@ -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";
};
diff --git a/tv/3modules/default.nix b/tv/3modules/default.nix
index 83dc212..57ffbfa 100644
--- a/tv/3modules/default.nix
+++ b/tv/3modules/default.nix
@@ -6,6 +6,7 @@ _:
./ejabberd
./hosts.nix
./iptables.nix
+ ./nixpkgs-overlays.nix
./x0vncserver.nix
];
}
diff --git a/tv/3modules/nixpkgs-overlays.nix b/tv/3modules/nixpkgs-overlays.nix
new file mode 100644
index 0000000..4eb7a86
--- /dev/null
+++ b/tv/3modules/nixpkgs-overlays.nix
@@ -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";
+ };
+ };
+}
diff --git a/tv/5pkgs/default.nix b/tv/5pkgs/default.nix
index 8a7a613..1796609 100644
--- a/tv/5pkgs/default.nix
+++ b/tv/5pkgs/default.nix
@@ -24,6 +24,10 @@ foldl' mergeAttrs {}
"$@"
'';
+ gitAndTools = super.gitAndTools // {
+ inherit (self) diff-so-fancy;
+ };
+
ff = self.writeDashBin "ff" ''
exec ${self.firefoxWrapper}/bin/firefox "$@"
'';
diff --git a/tv/5pkgs/simple/diff-so-fancy.nix b/tv/5pkgs/simple/diff-so-fancy.nix
new file mode 100644
index 0000000..9ce6d92
--- /dev/null
+++ b/tv/5pkgs/simple/diff-so-fancy.nix
@@ -0,0 +1,48 @@
+{stdenv, git, perl, ncurses, coreutils, fetchFromGitHub, makeWrapper, ...}:
+
+stdenv.mkDerivation rec {
+ name = "diff-so-fancy-${version}";
+ version = "ed8cf17";
+
+ src = fetchFromGitHub {
+ owner = "so-fancy";
+ repo = "diff-so-fancy";
+ rev = "ed8cf1763d38bdd79ceb55a73b9ce7e30f1e184d";
+ sha256 = "176qn0w2rn6mr5ymvkblyiznqq7yyibfsnnjfivcyhz69w6yr9r9";
+ };
+
+ # Perl is needed here for patchShebangs
+ nativeBuildInputs = [ perl makeWrapper ];
+
+ buildPhase = null;
+
+ installPhase = ''
+ mkdir -p $out/bin $out/lib/diff-so-fancy
+
+ # diff-so-fancy executable searches for it's library relative to
+ # itself, so we are copying executable to lib, and only symlink it
+ # from bin/
+ cp diff-so-fancy $out/lib/diff-so-fancy
+ cp -r lib $out/lib/diff-so-fancy
+ ln -s $out/lib/diff-so-fancy/diff-so-fancy $out/bin
+
+ # ncurses is needed for `tput`
+ wrapProgram $out/lib/diff-so-fancy/diff-so-fancy \
+ --prefix PATH : "${git}/share/git/contrib/diff-highlight" \
+ --prefix PATH : "${git}/bin" \
+ --prefix PATH : "${coreutils}/bin" \
+ --prefix PATH : "${ncurses.out}/bin"
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://github.com/so-fancy/diff-so-fancy;
+ description = "Good-looking diffs filter for git";
+ license = licenses.mit;
+ platforms = platforms.all;
+ longDescription = ''
+ diff-so-fancy builds on the good-lookin' output of git contrib's
+ diff-highlight to upgrade your diffs' appearances.
+ '';
+ maintainers = with maintainers; [ fpletz ];
+ };
+}
diff --git a/tv/5pkgs/simple/mfcl2700dncupswrapper/default.nix b/tv/5pkgs/simple/mfcl2700dncupswrapper/default.nix
new file mode 100644
index 0000000..1ef018b
--- /dev/null
+++ b/tv/5pkgs/simple/mfcl2700dncupswrapper/default.nix
@@ -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";
+ };
+}
diff --git a/tv/5pkgs/simple/mfcl2700dnlpr/default.nix b/tv/5pkgs/simple/mfcl2700dnlpr/default.nix
new file mode 100644
index 0000000..fc11b53
--- /dev/null
+++ b/tv/5pkgs/simple/mfcl2700dnlpr/default.nix
@@ -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";
+ };
+}
diff --git a/tv/5pkgs/simple/q/default.nix b/tv/5pkgs/simple/q/default.nix
index 2e7aa5c..655c75e 100644
--- a/tv/5pkgs/simple/q/default.nix
+++ b/tv/5pkgs/simple/q/default.nix
@@ -262,7 +262,7 @@ let
'';
q-todo = ''
- TODO_file=$HOME/TODO
+ TODO_file=$PWD/TODO
if test -e "$TODO_file"; then
${pkgs.coreutils}/bin/cat "$TODO_file" \
| ${pkgs.gawk}/bin/gawk -v now=$(${pkgs.coreutils}/bin/date +%s) '
@@ -294,13 +294,7 @@ in
pkgs.writeBashBin "q" ''
set -eu
export PATH=/var/empty
- (${q-todo}) || :
- if [ "$PWD" != "$HOME" ]; then
- (HOME=$PWD; ${q-todo}) || :
- fi
- echo
${q-cal}
- echo
${q-isodate}
${q-sgtdate}
(${q-gitdir}) &
@@ -311,4 +305,14 @@ pkgs.writeBashBin "q" ''
(${q-online}) &
(${q-thermal_zone}) &
wait
+ if test "$PWD" != "$HOME" && test -e "$HOME/TODO"; then
+ TODO_home_entries=$(cd; (${q-todo}) | ${pkgs.coreutils}/bin/wc -l)
+ if test "$TODO_home_entries" = 1; then
+ TODO_format='There is %d entry in ~/TODO'
+ else
+ TODO_format='There are %d entries in ~/TODO'
+ fi
+ printf "\x1b[38;5;238m$TODO_format\x1b[m\n" "$TODO_home_entries"
+ fi
+ (${q-todo}) || :
''