83 lines
1.8 KiB
Nix
83 lines
1.8 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
|
|
let
|
|
cfg = config.services.print-server;
|
|
domain = config.networking.domain;
|
|
subdomain = cfg.reverseProxy.subdomain;
|
|
fqdn = if (cfg.reverseProxy.enable && subdomain != "") then "${subdomain}.${domain}" else domain;
|
|
port = 631;
|
|
|
|
inherit (lib)
|
|
mkEnableOption
|
|
mkIf
|
|
mkOption
|
|
types
|
|
;
|
|
|
|
inherit (lib.utils)
|
|
mkReverseProxyOption
|
|
mkVirtualHost
|
|
;
|
|
in
|
|
{
|
|
options.services.print-server = {
|
|
enable = mkEnableOption "print server";
|
|
openFirewall = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "Open firewall for printing and avahi service.";
|
|
};
|
|
reverseProxy = mkReverseProxyOption "print-server" "print";
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
services.printing = {
|
|
enable = true;
|
|
listenAddresses = [ "*:${builtins.toString port}" ];
|
|
webInterface = true;
|
|
tempDir = "/tmp/cups";
|
|
allowFrom = [ "all" ];
|
|
snmpConf = ''
|
|
Address @LOCAL
|
|
'';
|
|
clientConf = "";
|
|
openFirewall = cfg.openFirewall;
|
|
drivers = with pkgs; [
|
|
brlaser
|
|
brgenml1lpr
|
|
brgenml1cupswrapper # Brother
|
|
postscript-lexmark # Lexmark
|
|
hplip
|
|
hplipWithPlugin # HP
|
|
splix
|
|
samsung-unified-linux-driver # Samsung
|
|
gutenprint
|
|
gutenprintBin # different vendors
|
|
];
|
|
defaultShared = true;
|
|
browsing = true;
|
|
browsedConf = ''
|
|
BrowsePoll ${fqdn}
|
|
'';
|
|
};
|
|
|
|
# autodiscovery of network printers
|
|
services.avahi = {
|
|
enable = true;
|
|
nssmdns4 = true;
|
|
openFirewall = cfg.openFirewall;
|
|
};
|
|
|
|
services.nginx.virtualHosts = mkIf cfg.reverseProxy.enable {
|
|
${fqdn} = mkVirtualHost {
|
|
inherit port;
|
|
ssl = cfg.reverseProxy.forceSSL;
|
|
};
|
|
};
|
|
};
|
|
}
|