From a56ce9a6d74d90a4e273d614050fdb9ad8fea9a3 Mon Sep 17 00:00:00 2001
From: makefu <github@syntax-fehler.de>
Date: Sun, 22 Jan 2017 23:41:01 +0100
Subject: [PATCH] m omo: add shared printer

---
 1systems/omo.nix                |  1 +
 2configs/git/brain-retiolum.nix | 67 ---------------------------------
 2configs/printer-shared.nix     | 38 +++++++++++++++++++
 3 files changed, 39 insertions(+), 67 deletions(-)
 delete mode 100644 2configs/git/brain-retiolum.nix
 create mode 100644 2configs/printer-shared.nix

diff --git a/1systems/omo.nix b/1systems/omo.nix
index 609d521..5241b0b 100644
--- a/1systems/omo.nix
+++ b/1systems/omo.nix
@@ -58,6 +58,7 @@ in {
       # ../2configs/elchos/search.nix
       # ../2configs/elchos/log.nix
       # ../2configs/elchos/irc-token.nix
+      ../2configs/printer-shared.nix
 
       ## as long as pyload is not in nixpkgs:
       # docker run -d -v /var/lib/pyload:/opt/pyload/pyload-config -v /media/crypt0/pyload:/opt/pyload/Downloads --name pyload --restart=always -p 8112:8000 -P writl/pyload
diff --git a/2configs/git/brain-retiolum.nix b/2configs/git/brain-retiolum.nix
deleted file mode 100644
index b637ca0..0000000
--- a/2configs/git/brain-retiolum.nix
+++ /dev/null
@@ -1,67 +0,0 @@
-{ config, lib, pkgs, ... }:
-# TODO: remove tv lib :)
-with import <stockholm/lib>;
-let
-
-  repos = priv-repos // krebs-repos ;
-  rules = concatMap krebs-rules (attrValues krebs-repos) ++ concatMap priv-rules (attrValues priv-repos);
-
-  krebs-repos = mapAttrs make-krebs-repo {
-    brain = { };
-  };
-
-  priv-repos = mapAttrs make-priv-repo {
-    autosync = { };
-    pass     = { };
-  };
-
-  # TODO move users to separate module
-  make-priv-repo = name: { ... }: {
-    inherit name;
-    public = false;
-  };
-
-  make-krebs-repo = with git; name: { ... }: {
-    inherit name;
-    public = false;
-    hooks = {
-      post-receive = pkgs.git-hooks.irc-announce {
-        nick = config.networking.hostName;
-        channel = "#retiolum";
-        # TODO remove the hardcoded hostname
-        server = "ni.r";
-      };
-    };
-  };
-
-  set-owners = with git;repo: user:
-      singleton {
-        inherit user;
-        repo = [ repo ];
-        perm = push "refs/*" [ non-fast-forward create delete merge ];
-      };
-
-  set-ro-access = with git; repo: user:
-      singleton {
-        inherit user;
-        repo = [ repo ];
-        perm = fetch;
-      };
-
-  # TODO: get the list of all krebsministers
-  krebsminister = with config.krebs.users; [ lass tv ];
-  all-makefu = with config.krebs.users; [ makefu makefu-omo makefu-tsp ];
-
-  priv-rules = repo: set-owners repo all-makefu;
-
-  krebs-rules = repo:
-    set-owners repo all-makefu ++ set-ro-access repo krebsminister;
-
-in {
-  imports = [ ];
-  krebs.git = {
-    enable = true;
-    cgit.enable = false;
-    inherit repos rules;
-  };
-}
diff --git a/2configs/printer-shared.nix b/2configs/printer-shared.nix
new file mode 100644
index 0000000..2a9e672
--- /dev/null
+++ b/2configs/printer-shared.nix
@@ -0,0 +1,38 @@
+{ pkgs, config, ... }:
+
+{
+  nixpkgs.config.allowUnfree = true;
+  services.avahi.enable = true;
+  services.avahi.publish.enable = true;
+  services.avahi.publish.userServices = true;
+  services.avahi.interfaces = [ config.makefu.server.primary-itf ];
+  services.avahi.ipv6 = false;
+  services.avahi.nssmdns = true;
+  # via  https://github.com/tjfontaine/airprint-generate/
+  # environment.etc."avahi/services/samsung_scx2300.service".text 
+  nixpkgs.config.packageOverrides = pkgs: rec {
+    avahi = pkgs.stdenv.lib.overrideDerivation pkgs.avahi (oldAttrs: {
+      postFixup = let
+	    cfg = pkgs.writeText "airprint-scx3200.service" ''<?xml version="1.0" ?><!DOCTYPE service-group  SYSTEM 'avahi-service.dtd'><service-group><name replace-wildcards="yes">AirPrint Samsung_SCX-3200_Series @ %h</name><service><type>_ipp._tcp</type><subtype>_universal._sub._ipp._tcp</subtype><port>631</port><txt-record>txtvers=1</txt-record><txt-record>qtotal=1</txt-record><txt-record>Transparent=T</txt-record><txt-record>URF=none</txt-record><txt-record>rp=printers/Samsung_SCX-3200_Series</txt-record><txt-record>note=Samsung SCX-3200 Series</txt-record><txt-record>product=(GPL Ghostscript)</txt-record><txt-record>printer-state=3</txt-record><txt-record>printer-type=0x801044</txt-record><txt-record>pdl=application/octet-stream,application/pdf,application/postscript,application/vnd.cups-raster,image/gif,image/jpeg,image/png,image/tiff,image/urf,text/html,text/plain,application/vnd.adobe-reader-postscript,application/vnd.cups-command</txt-record></service></service-group>'';
+      in ''
+        cp ${cfg} $out/etc/avahi/services/airprint-scx3200.service
+      '';
+    });
+  };
+
+  # only allowed in local network
+  services.printing = {
+    enable = true;
+    browsing = true;
+    #avahiEnabled = true;
+    defaultShared = true;
+    listenAddresses = [ "*:631" ];
+    drivers = [
+      pkgs.samsungUnifiedLinuxDriver
+    ];
+  };
+
+  # scanners are printers just in reverse anyway
+  hardware.sane.enable = true;
+  hardware.sane.extraBackends = [ pkgs.samsungUnifiedLinuxDriver ];
+}