Quero definir uma função de logon no meu script init, mas não quero codificar minhas credenciais de logon. Eu acho que uma boa solução é fazer com que meu script init leia minhas credenciais de logon de um arquivo local e salve esses valores como variáveis. Dessa forma, posso excluir o arquivo do meu índice git, o que mantém minhas credenciais de login seguras.
Existem sugestões sobre essa abordagem ou maneiras de definir um argumento para um valor definido em um arquivo?
Por exemplo, eu gostaria de usar o seguinte no meu init.el
:
;; Set up our login variables here:
(setq file-location "~/.emacs.d/.login")
(setq erc-username "default-name")
(setq erc-password "default-password")
(setq erc-url "default-url")
(setq erc-port "default-port")
(defun read-lines (filePath)
"Return a list of lines of a file at filePath."
(with-temp-buffer
(insert-file-contents filePath)
(split-string (buffer-string) "\n" t)))
(if (file-exists-p file-location)
(progn (setq login-credentials (read-lines file-location))
(setq erc-username (nth 0 login-credentials))
(setq erc-password (nth 1 login-credentials))
(setq erc-url (nth 2 login-credentials))
(setq erc-port (nth 3 login-credentials)))
(message "No ERC login credentials provided. Please add login credentials as '<username>\n<password>\n<url>\n<port>' in ~/.emacs.d/.login to activate ERC mode."))
;; These message the values from my file correctly.
;; Everything up to this point works as expected
(message erc-username)
(message erc-password)
(message erc-url)
(message erc-port)
;; Use our login variables here
;; This doesn't work because the 'quote' function prevents evaluation of my variables, and a 'backquote' did not resolve it either
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(markdown-command "/usr/bin/pandoc")
'(tls-program (quote ("openssl s_client -connect %h:%p -no_ssl2 -ign_eof -CAfile ~/.ssl/spi_ca.pem -cert ~/.ssl/znc.pem")))
'(znc-servers (quote ((,erc-url ,erc-port t ((irc\.freenode\.net ,erc-username ,erc-password)))))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
Observe que meu exemplo usa o znc.el
módulo aqui . Estou modificando o código gerado automaticamente, resultante das configurações do Emacs em M-x customize-group RET znc RET
e M-x customize-variable RET tls-program RET
.
Meu problema com o código acima é que as variáveis não estão carregando dentro da minha custom-set-variables
função acima. Carregar os valores adequados de um arquivo parece funcionar bem, mas não consigo usá-los como argumento. Acredito que isso esteja relacionado à quote
função, o que impede a avaliação de seu conteúdo. Tentei uma 'citação' ( ,
) para forçar a avaliação, mas também não está funcionando. Qualquer sugestão para corrigir esse bug ou oferecer outra abordagem seria muito útil.