{ config, lib, pkgs, ... }: with lib; let cfg = config.services.barrier; in { meta.maintainers = with maintainers; [ kritnich ]; options.services.barrier = { client = { enable = mkEnableOption "Barrier Client daemon"; name = mkOption { type = types.nullOr types.str; default = null; description = '' Screen name of client. Defaults to hostname. ''; }; server = mkOption { type = types.str; description = '' Server to connect to formatted as <host>[:<port>]. Port defaults to 24800. ''; }; tray = mkEnableOption "the system tray icon" // { default = true; }; enableCrypto = mkEnableOption "crypto (SSL) plugin" // { default = true; }; enableDragDrop = mkEnableOption "file drag & drop"; extraFlags = mkOption { type = types.listOf types.str; default = [ "-f" ]; defaultText = literalExample ''[ "-f" ]''; description = '' Additional flags to pass to barrierc. See barrierc --help. ''; }; }; }; config = mkIf cfg.client.enable { systemd.user.services.barrierc = { Unit = { Description = "Barrier Client daemon"; After = [ "graphical-session-pre.target" ]; PartOf = [ "graphical-session.target" ]; }; Install.WantedBy = [ "graphical-session.target" ]; Service.ExecStart = with cfg.client; toString ([ "${pkgs.barrier}/bin/barrierc" ] ++ optional (name != null) "--name ${name}" ++ optional (!tray) "--no-tray" ++ optional enableCrypto "--enable-crypto" ++ optional enableDragDrop "--enable-drag-drop" ++ extraFlags ++ [ server ]); }; }; }