From 07e90a16deb1a3f4caa9be028eddc866bf3eff8d Mon Sep 17 00:00:00 2001 From: Timo Wilken Date: Tue, 7 Mar 2023 20:21:41 +0100 Subject: Install compiler and ELF-related packages --- tw/home/emacs.scm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'tw/home') diff --git a/tw/home/emacs.scm b/tw/home/emacs.scm index bebad6ef..f75a8527 100644 --- a/tw/home/emacs.scm +++ b/tw/home/emacs.scm @@ -4,8 +4,8 @@ #:use-module (gnu home services shepherd) #:use-module (tw theme)) -(use-package-modules base cmake emacs emacs-xyz databases finance haskell-apps llvm - python-xyz sqlite) +(use-package-modules base cmake emacs emacs-xyz databases elf finance gcc + haskell-apps llvm python-xyz sqlite) (define-public emacs-services (list @@ -38,6 +38,8 @@ python-yamllint shellcheck clang ; for clangd + glibc ; for ldd + gcc binutils patchelf elfutils python-lsp-server ;; Supported OotB by eglot, but not packaged by guix: ;; https://github.com/mads-hartmann/bash-language-server -- cgit v1.2.3 From be56a5a35b7e08d3670a6520c9a0bfeab8921408 Mon Sep 17 00:00:00 2001 From: Timo Wilken Date: Tue, 7 Mar 2023 20:22:09 +0100 Subject: Display live network usage in polybar --- tw/home/files/polybar.ini | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'tw/home') diff --git a/tw/home/files/polybar.ini b/tw/home/files/polybar.ini index 4a2dc7fe..506f8c12 100644 --- a/tw/home/files/polybar.ini +++ b/tw/home/files/polybar.ini @@ -40,7 +40,7 @@ separator = ยท separator-foreground = ${colors.disabled} modules-left = i3 xwindow -modules-right = memory cpu temp xkeyboard pulseaudio dunst wlan eth battery date +modules-right = wlan eth memory cpu temp xkeyboard pulseaudio dunst battery date tray-position = right enable-ipc = true @@ -182,7 +182,7 @@ animation-packetloss-framerate = 500 inherit = network-base interface-type = wireless format-connected = -label-connected = %essid% +label-connected = %essid% โ†“ %downspeed% โ†‘ %upspeed% ; label-connected-foreground = ${colors.green} ramp-signal-0 = ๐Ÿ“ถ @@ -195,7 +195,7 @@ ramp-signal-2-foreground = ${colors.green} [module/eth] inherit = network-base interface-type = wired -label-connected = %linkspeed% +label-connected = โ†“ %downspeed% โ†‘ %upspeed% format-connected-prefix = "๐ŸŒ " format-connected-prefix-foreground = ${colors.green} -- cgit v1.2.3 From 49da695f2229bf2327350c06bc5f83a23f52d307 Mon Sep 17 00:00:00 2001 From: Timo Wilken Date: Tue, 7 Mar 2023 20:23:09 +0100 Subject: Install levant --- tw/home/lap.scm | 3 ++- tw/packages/ci.scm | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) (limited to 'tw/home') diff --git a/tw/home/lap.scm b/tw/home/lap.scm index 7b49be9b..d46c9c6e 100644 --- a/tw/home/lap.scm +++ b/tw/home/lap.scm @@ -117,7 +117,8 @@ ;; Work s3cmd python-alibuild python-alidistlint - hashicorp-nomad-bin hashicorp-consul-bin hashicorp-vault-bin hashicorp-packer-bin + hashicorp-levant-bin hashicorp-nomad-bin + hashicorp-consul-bin hashicorp-vault-bin hashicorp-packer-bin ;; i3 and Xorg. i3 itself must be installed system-wide for gdm to pick it up. ;; acpilight is a drop-in xbacklight replacement, as xbacklight doesn't work on my system. diff --git a/tw/packages/ci.scm b/tw/packages/ci.scm index 3a2619ac..6f2c5f9d 100644 --- a/tw/packages/ci.scm +++ b/tw/packages/ci.scm @@ -109,3 +109,22 @@ orchestrator that can deploy a mix of microservice, batch, containerized, and non-containerized applications. Nomad is easy to operate and scale and has native Consul and Vault integrations.") (license license:mpl2.0))) + +(define-public hashicorp-levant-bin + (package + (name "hashicorp-levant") + (version "0.3.2") + (source + (origin + (method url-fetch/zipbomb) + (uri (hashicorp-download-url "levant" version)) + (sha256 (base32 "0w0mmlf9zqcfxnw7753h495074gks4vrck5dw8hyf9w3il7ih1hy")))) + (build-system copy-build-system) + (arguments + `(#:install-plan '(("levant" "bin/")))) + (home-page "https://github.com/hashicorp/levant") + (synopsis "An open source templating and deployment tool for HashiCorp Nomad jobs") + (description "Levant is an open source templating and deployment tool for +HashiCorp Nomad jobs that provides realtime feedback and detailed failure +messages upon deployment issues.") + (license license:mpl2.0))) -- cgit v1.2.3 From 4b8f75543f177b4e469c829d5bea00b5d681fb06 Mon Sep 17 00:00:00 2001 From: Timo Wilken Date: Tue, 7 Mar 2023 21:42:07 +0100 Subject: Unify common laptop and CERN desktop home config --- tw/home.scm | 482 ++++++++++++++++++++++++++++++++++++++++++++--------- tw/home/cern.scm | 88 ++++++++++ tw/home/emacs.scm | 103 ------------ tw/home/lap.scm | 253 ++-------------------------- tw/home/server.scm | 10 +- 5 files changed, 514 insertions(+), 422 deletions(-) create mode 100644 tw/home/cern.scm delete mode 100644 tw/home/emacs.scm (limited to 'tw/home') diff --git a/tw/home.scm b/tw/home.scm index 2d5a7410..6cb67344 100644 --- a/tw/home.scm +++ b/tw/home.scm @@ -2,25 +2,38 @@ #:use-module (ice-9 string-fun) #:use-module (gnu) #:use-module (gnu home services) + #:use-module (gnu home services desktop) #:use-module (gnu home services shells) #:use-module (gnu home services shepherd) #:use-module (gnu home services ssh) #:use-module (guix gexp) + #:use-module ((nongnu packages messaging) + #:select (zoom)) + #:use-module (tw gexp) + #:use-module (tw packages alice) + #:use-module (tw packages catppuccin) + #:use-module (tw packages ci) + #:use-module (tw packages games) #:use-module (tw packages shell) - #:use-module (tw system)) + #:use-module (tw packages xorg) + #:use-module (tw system) + #:use-module (tw theme)) -(use-package-modules admin compression curl databases disk dns file finance - gnupg graphviz imagemagick less linux lisp maths - password-utils pretty-print pv python python-xyz rsync - shells shellutils ssh textutils tmux version-control - video vim web) +(use-package-modules + admin base calendar compression cmake compton curl databases dav disk dns + dunst elf emacs emacs-xyz file finance fonts freedesktop games gcc gimp gnome + gnome-xyz gnupg gnuzilla graphviz haskell-apps image-viewers imagemagick + inkscape less libreoffice linux lisp llvm mail maths password-utils pdf + pretty-print pulseaudio pv python python-xyz rsync shells shellutils sqlite + ssh syndication terminals tcl tex textutils tmux version-control video vim web + web-browsers wm xdisorg xorg) -(define-public common-packages +(define-public %common-packages (list - curl dos2unix fdupes file git gnupg gnuplot graphviz hledger imagemagick jq - less lesspipe net-tools openssh password-store pass-otp pv python - python-ipython recutils rsync sbcl smartmontools source-highlight tmux tree - xxd zip unzip + curl diffstat dos2unix fdupes file git gnupg gnuplot graphviz hledger + imagemagick jq less lesspipe net-tools openssh password-store pass-otp pv + python python-ipython recutils rsync sbcl smartmontools source-highlight + tmux tree xxd zip unzip get-iplayer ffmpeg atomicparsley yt-dlp ;; Install only bind-utils like dig, not the full suite. @@ -67,7 +80,81 @@ auto-expand-secmem (define (make-own-ssh-host host port) (openssh-host (name host) (port port) (user "timo"))) -(define-public common-services +(define-public (openssh-service proxy-to-cern?) + (service home-openssh-service-type + (home-openssh-configuration + (hosts + ;; Earlier rules take precedence over later ones. + `(,(openssh-host (name "*.srcf.net") (user "tw466")) + ;; My own machines + ,@(map make-own-ssh-host (map car %ssh-ports) (map cdr %ssh-ports)) + ,@(map make-own-ssh-host (map (compose wireguardify car) %ssh-ports) (map cdr %ssh-ports)) + ,(openssh-host (name "*.fritz.box") (proxy-command "ssh -W '[%h]:%p' lud.twilken.net")) + ;; Git hosts + ,@(map (lambda (host) (openssh-host (name host) (user "git"))) + '("github.com" "ssh.github.com" "bitbucket.org")) + ,(openssh-host (name "gitlab.cern.ch") (port 7999) (user "git") (proxy-command "none")) + ;; BitBucket apparently only supports ssh-rsa. + ,(openssh-host + (name "bitbucket.org") + (host-key-algorithms '("+ssh-rsa")) + (accepted-key-types '("+ssh-rsa"))) + ;; CERN stuff + ,(openssh-host + (name "lxplus.cern.ch") + (proxy-command "none") ; avoid ProxyJump loops + (extra-content "GSSAPIDelegateCredentials yes")) ; needed for EOS home mount + ,(openssh-host + (name "aiadm.cern.ch") + (extra-content "GSSAPIDelegateCredentials yes")) ; needed for EOS home mount + ,(openssh-host + (name "cvmfs-alice.cern.ch") + (extra-content "GSSAPIDelegateCredentials yes")) ; needed for EOS home mount + ,(openssh-host + (name "tw-mailproc.cern.ch") + (user "root") + (identity-file "~/.local/share/ssh-keys/openstack_personal_id_rsa")) + ,(openssh-host + (name "twilkendesktop.cern.ch") + (port 22022) + (forward-x11? #t) + (extra-content "GSSAPIDelegateCredentials yes")) + ,@(map (lambda (spec) + (openssh-host (name (car spec)) (user (cdr spec)) + (identity-file "~/.local/share/ssh-keys/alicern_id_rsa"))) + '(("alimonitor.cern.ch" . "alibuild") + ("alinsure.cern.ch" . "alibuild") + ("alibuildmac*.cern.ch" . "alibuild") + ("aido*osx*.cern.ch" . "alibuild") + ("alibuild*.cern.ch" . "root") + ("alissandra*.cern.ch" . "root") + ("alimesos*.cern.ch" . "root") + ("alientest*.cern.ch" . "root") + ("aliflow*.cern.ch" . "root") + ("alijenkins*.cern.ch" . "root") + ("arm-builder-*" . "centos"))) + ,(openssh-host + (name "*.cern.ch") + (user "twilken") + (identity-file "~/.local/share/ssh-keys/cern_id_rsa") + (proxy-command (if proxy-to-cern? + "ssh -W '[%h]:%p' -l twilken lxplus.cern.ch" + "none")) + (extra-content "\ + # Kerberos authentication + GSSAPIAuthentication yes + GSSAPIDelegateCredentials no + PreferredAuthentications gssapi-keyex,gssapi-with-mic,publickey,password,keyboard-interactive +")) + ;; Default SSH key. This isn't in ~/.ssh as `home-openssh-service-type' + ;; manages that and might delete keys there. + ,(openssh-host + (name "*") + (identity-file "~/.local/share/ssh-keys/id_rsa") + ;; Remote servers probably don't know about xterm-kitty. + (extra-content "SetEnv TERM=xterm-256color"))))))) + +(define-public %common-services (list (service home-zsh-service-type (home-zsh-configuration @@ -180,70 +267,307 @@ auto-expand-secmem ("XCOMPOSEFILE" . "$XDG_CONFIG_HOME/X11/XCompose") ("ZDOTDIR" . "$XDG_CONFIG_HOME/zsh") ("_JAVA_OPTIONS" . - "$_JAVA_OPTIONS${_JAVA_OPTIONS:+ }-Djava.util.prefs.userRoot=$XDG_CONFIG_HOME/java"))) - - (service home-openssh-service-type - (home-openssh-configuration - (hosts - ;; Earlier rules take precedence over later ones. - `(,(openssh-host (name "*.srcf.net") (user "tw466")) - ;; My own machines - ,@(map make-own-ssh-host (map car %ssh-ports) (map cdr %ssh-ports)) - ,@(map make-own-ssh-host (map (compose wireguardify car) %ssh-ports) (map cdr %ssh-ports)) - ,(openssh-host (name "*.fritz.box") (proxy-command "ssh -W '[%h]:%p' lud.twilken.net")) - ;; Git hosts - ,@(map (lambda (host) (openssh-host (name host) (user "git"))) - '("github.com" "ssh.github.com" "bitbucket.org")) - ,(openssh-host (name "gitlab.cern.ch") (port 7999) (user "git") (proxy-command "none")) - ;; BitBucket apparently only supports ssh-rsa. - ,(openssh-host - (name "bitbucket.org") - (host-key-algorithms '("+ssh-rsa")) - (accepted-key-types '("+ssh-rsa"))) - ;; CERN stuff - ,(openssh-host - (name "lxplus.cern.ch") - (proxy-command "none") ; avoid ProxyJump loops - (extra-content "GSSAPIDelegateCredentials yes")) ; needed for EOS home mount - ,(openssh-host - (name "aiadm.cern.ch") - (extra-content "GSSAPIDelegateCredentials yes")) ; needed for EOS home mount - ,(openssh-host - (name "cvmfs-alice.cern.ch") - (extra-content "GSSAPIDelegateCredentials yes")) ; needed for EOS home mount - ,(openssh-host - (name "twilkendesktop.cern.ch") - (port 22022) - (forward-x11? #t) - (extra-content "GSSAPIDelegateCredentials yes")) - ,@(map (lambda (spec) - (openssh-host (name (car spec)) (user (cdr spec)) - (identity-file "~/.local/share/ssh-keys/alicern_id_rsa"))) - '(("alimonitor.cern.ch" . "alibuild") - ("alinsure.cern.ch" . "alibuild") - ("alibuildmac*.cern.ch" . "alibuild") - ("aido*osx*.cern.ch" . "alibuild") - ("alibuild*.cern.ch" . "root") - ("alissandra*.cern.ch" . "root") - ("alimesos*.cern.ch" . "root") - ("alientest*.cern.ch" . "root") - ("aliflow*.cern.ch" . "root") - ("alijenkins*.cern.ch" . "root"))) - ,(openssh-host - (name "*.cern.ch") - (user "twilken") - (identity-file "~/.local/share/ssh-keys/cern_id_rsa") - (proxy-command "ssh -W '[%h]:%p' -l twilken lxplus.cern.ch") - (extra-content "\ - # Kerberos authentication - GSSAPIAuthentication yes - GSSAPIDelegateCredentials no - PreferredAuthentications gssapi-keyex,gssapi-with-mic,publickey,password,keyboard-interactive -")) - ;; Default SSH key. This isn't in ~/.ssh as `home-openssh-service-type' - ;; manages that and might delete keys there. - ,(openssh-host - (name "*") - (identity-file "~/.local/share/ssh-keys/id_rsa") - ;; Remote servers probably don't know about xterm-kitty. - (extra-content "SetEnv TERM=xterm-256color")))))))) + "$_JAVA_OPTIONS${_JAVA_OPTIONS:+ }-Djava.util.prefs.userRoot=$XDG_CONFIG_HOME/java"))))) + +(define-public %pim-packages + (list newsboat vdirsyncer khal khard aerc lynx)) ; lynx for HTML mail + +(define-public %pim-services + (list + (simple-service 'pim-config home-xdg-configuration-files-service-type + `(("khal/config" ,(local-file "home/files/khal.conf")) + ("khard/khard.conf" ,(local-file "home/files/khard.conf")) + ("aerc" ,(local-file "home/files/aerc" #:recursive? #t)) + ("newsboat/config" ,(local-file "home/files/newsboat.conf")) + ("newsboat/config.catppuccin" ,catppuccin-newsboat) + ("vdirsyncer/config" ,(local-file "home/files/vdirsyncer.conf")))) + + ;; These cron jobs are annoying because they pop up a password prompt every time they run. + ;; (simple-service 'pim-cronjobs home-mcron-service-type + ;; (list #~(job "15 */4 * * *" ; every four hours at HH:15 + ;; (string-append #$(file-append vdirsyncer "/bin/vdirsyncer") " metasync")) + ;; #~(job "0,30 * * * *" ; every half hour + ;; (string-append #$(file-append vdirsyncer "/bin/vdirsyncer") " sync")))) + + (simple-service 'mail-files home-files-service-type + `(;; The file from git main is newer than the one bundled with the + ;; packaged neomutt version and contains a few fixes. + (".local/bin/mutt_oauth2.py" + ,(local-file "home/files/neomutt/contrib/oauth2/mutt_oauth2.py" #:recursive? #t)))))) + +(define polybar-wrapper + (program-file + "polybar-wrapper" + #~(begin + ;; This wrapper program checks that the monitor we want to start + ;; polybar on is actually connected. + (use-modules (ice-9 popen) + (ice-9 rdelim)) + (let* ((connected-str (string-append (getenv "POLYBAR_MONITOR") " connected")) + (xrandr (open-pipe* OPEN_READ #$(file-append xrandr "/bin/xrandr") "-q")) + (monitor-connected? + (let loop ((line (read-line xrandr))) + (cond + ((eof-object? line) #f) ; we didn't find our monitor connected + ((string-prefix? connected-str line) #t) ; the monitor we want is connected + (else (loop (read-line xrandr))))))) ; keep looking + (close-pipe xrandr) + (when monitor-connected? + (execl #$(file-append polybar "/bin/polybar"))))))) + +(define-public (polybar-service monitor) + (shepherd-service + (documentation (string-append "Polybar desktop bar for monitor " monitor ".")) + (provision (list (symbol-append 'polybar- (string->symbol monitor)))) + (requirement '(xorg-setup)) + (start #~(make-forkexec-constructor + (list #$polybar-wrapper) + #:environment-variables + (cons #$(string-append "POLYBAR_MONITOR=" monitor) + (default-environment-variables)))) + (stop #~(make-kill-destructor)))) + +(define-public %interactive-packages + (list + ;; CLI tools + bsd-games texlive powertop (list git "send-email") + + ;; Work + s3cmd python-alibuild python-alidistlint + hashicorp-levant-bin hashicorp-nomad-bin + hashicorp-consul-bin hashicorp-vault-bin hashicorp-packer-bin + + ;; i3 and Xorg. i3 itself must be installed system-wide for gdm to pick it up. + ;; acpilight is a drop-in xbacklight replacement, as xbacklight doesn't work on my system. + acpilight arandr dunst gimp hsetroot inkscape icecat imv kitty libreoffice + mpv polybar pulsemixer rofi rofi-calc tk xdg-utils xdot xclip xcwd xdotool + xdpyinfo xev xfd xfontsel xinput xkill xprop xrandr xrdb xsel xset xwininfo + zoom zathura zathura-ps zathura-pdf-poppler + dconf dconf-editor ; required for config by blueman, cozy, ... + ;; gnome-keyring ; installed system-wide; see system-configuration.scm + ;; geoclue ; for redshift -- installed system-wide + ;; Fonts + font-hermit font-inconsolata font-fira-code font-fira-sans font-libertinus + font-google-noto font-google-noto-emoji font-openmoji ; for polybar + ;; Theming + papirus-icon-theme catppuccin-gtk-theme catppuccin-mocha-dark-cursors + + ;; Development & language servers + gnu-make python-lsp-server python-yamllint shellcheck gcc binutils patchelf elfutils + clang ; for clangd + glibc ; for ldd + ;; Supported OotB by eglot, but not packaged by guix: + ;; https://github.com/mads-hartmann/bash-language-server + ;; https://github.com/regen100/cmake-language-server + ;; https://github.com/hrsh7th/vscode-langservers-extracted ; {html,css,json}-languageserver + ;; https://github.com/golang/tools/tree/master/gopls ; maybe? + ;; https://github.com/artempyanykh/marksman ; Markdown + ;; https://github.com/astoff/digestif ; (La)TeX + ;; https://github.com/redhat-developer/yaml-language-server + ;; Needs eglot config + not packaged (from lsp-mode): + ;; https://github.com/graphql/graphiql/tree/main/packages/graphql-language-service-cli#readme + ;; https://github.com/haskell/haskell-language-server / https://github.com/haskell/ghcide + ;; https://github.com/eclipse/lemminx + + ;; Emacs general + emacs + emacs-use-package + emacs-eglot + emacs-counsel + emacs-counsel-dash sqlite ; emacs-counsel-dash requires the sqlite3 binary + emacs-ivy + ;; emacs-company emacs-company-quickhelp emacs-company-posframe + emacs-corfu emacs-corfu-doc + emacs-autothemer ; for catppuccin/emacs + emacs-undo-tree + emacs-aggressive-indent + emacs-which-key + emacs-smart-mode-line + emacs-diminish + emacs-rainbow-mode + emacs-form-feed + emacs-guix + ;; TODO: emacs-editorconfig emacs-sly emacs-sly-macrostep + emacs-org ; emacs-org-modern theme? + + ;; Emacs Evil + emacs-evil + emacs-evil-collection + emacs-evil-expat ; for :reverse, :remove, :rename, :colo, :g*, ... ex commands + emacs-evil-surround + ;; emacs-evil-owl ; tests failing + emacs-evil-args + emacs-evil-numbers + emacs-evil-multiedit + emacs-evil-goggles + emacs-evil-traces + emacs-evil-commentary + emacs-evil-replace-with-register + emacs-evil-org + emacs-evil-markdown + emacs-evil-tex + emacs-evil-text-object-python + + ;; Emacs language modes + emacs-flymake-collection + emacs-geiser emacs-geiser-guile + emacs-cmake-mode emacs-gnuplot emacs-graphviz-dot-mode emacs-hcl-mode + emacs-ledger-mode emacs-mmm-mode emacs-puppet-mode emacs-rec-mode + emacs-web-mode emacs-yaml-mode)) + +(define-public %interactive-services + (cons* + ;; Configuration files for terminal-only programs in $XDG_CONFIG_HOME. + (simple-service 'interactive-terminal-config home-xdg-configuration-files-service-type + `(;; All alibuild needs is an empty file. + ("alibuild/disable-analytics" + ,(plain-file "alibuild-disable-analytics" "")) + ("X11/XCompose" ,(local-file "home/files/XCompose")) ; see also: $XCOMPOSEFILE variable + ("X11/Xresources" ,(local-file "home/files/Xresources")))) + + (simple-service 'emacs-config home-xdg-configuration-files-service-type + `(("emacs/include" ,(local-file "home/files/emacs-packages" #:recursive? #t)) + ("emacs/init.el" ,(local-file "home/files/emacs-init.el")) + (,(string-append "emacs/" (local-file-name catppuccin-emacs-theme)) + ,catppuccin-emacs-theme))) + + (simple-service 'emacsclient-is-editor home-environment-variables-service-type + `(("EDITOR" . "emacsclient -qc") + ;; Tell emacsclient to return immediately after opening the file. I + ;; can't put this in $EDITOR as many programs expect $EDITOR to exit + ;; only when the user is done editing. + ("ASYNC_EDITOR" . "emacsclient -qcn"))) + + (simple-service 'emacs-server home-shepherd-service-type + (list + (shepherd-service + (documentation "Emacs server; connect using emacsclient.") + (provision '(emacs)) + (start #~(make-forkexec-constructor + (list #$(file-append emacs "/bin/emacs") "--fg-daemon"))) + (stop #~(make-kill-destructor))))) + + ;; The dbus service doesn't seem to be added automatically. + (service home-dbus-service-type + (home-dbus-configuration)) + + (simple-service 'common-gui-services home-shepherd-service-type + (list + (shepherd-service + (documentation "NetworkManager applet; provides a GUI for network connections.") + (provision '(nm-applet)) + (start #~(make-forkexec-constructor + (list #$(file-append network-manager-applet "/bin/nm-applet")))) + (stop #~(make-kill-destructor))) + + (shepherd-service + (documentation "Dunst notification daemon; displays desktop notifications.") + (provision '(dunst)) + (start #~(make-forkexec-constructor + (list #$(file-append dunst "/bin/dunst")))) + (stop #~(make-kill-destructor))) + + (shepherd-service + (documentation "Picom compositor; enables transparent windows in X.") + (provision '(picom)) + (start #~(make-forkexec-constructor + (list #$(file-append picom "/bin/picom") + "--config" #$(local-file "home/files/picom.conf")))) + (stop #~(make-kill-destructor))) + + (shepherd-service + (documentation "Source Xresources on login.") + (provision '(xrdb)) + (one-shot? #t) + (start #~(lambda _ + (invoke #$(file-append xrdb "/bin/xrdb") "-merge" + (string-append (getenv "XDG_CONFIG_HOME") "/X11/Xresources"))))) + + ;; By default, xdotool gets most of "#@\|~()<>[]{} wrong. Make + ;; it use the correct keymap by re-setting the same one again. + (shepherd-service + (documentation "Fix X keyboard map on login; passmenu needs this.") + (provision '(fix-xdotool)) + (one-shot? #t) + (start #~(lambda _ + (use-modules (ice-9 rdelim) + (ice-9 regex) + (ice-9 popen)) + (let ((port (open-pipe* OPEN_READ #$(file-append setxkbmap "/bin/setxkbmap") + "-query"))) + (let loop ((line (read-line port))) + (unless (eof-object? line) + (let ((mtch (string-match "^layout:[[:space:]]*" line))) + (if mtch + (system* #$(file-append setxkbmap "/bin/setxkbmap") + (match:suffix mtch)) + (loop (read-line port)))))))))))) + + ;; Configuration files for GUI programs in $XDG_CONFIG_HOME. + (simple-service 'gui-config home-xdg-configuration-files-service-type + `(("dunst/dunstrc" ,(local-file "home/files/dunstrc")) + ("dunst/dunstrc.d/50-catppuccin.conf" ,catppuccin-dunstrc) + ("gtk-2.0/gtkrc" ,(local-file "home/files/gtk2.ini")) + ("gtk-3.0/settings.ini" ,(local-file "home/files/gtk3.ini")) + ("i3/config" ,(local-file "home/files/i3.conf")) + ;; TODO: "kdeglobals" works for some programs (e.g. kdeconnect-app), + ;; but not for others (e.g. nheko, kdeconnect-settings)... + ("kdeglobals" ,catppuccin-kdeglobals) + ("kitty/diff.conf" + ,(combined-text-file "kitty-diff.conf" + (plain-file "kitty-diff-custom.conf" + "pygments_style bw\n") + catppuccin-kitty-diff)) + ("kitty/kitty.conf" + ,(combined-text-file "kitty.conf" + (local-file "home/files/kitty.conf") + catppuccin-kitty)) + ("mimeapps.list" ,(local-file "home/files/mimeapps.list")) + ("polybar/config.ini" ,(local-file "home/files/polybar.ini")) + ("polybar/catppuccin.ini" ,catppuccin-polybar) + ("rofi/config.rasi" ,(local-file "home/files/rofi.rasi")) + ("rofi/themes/catppuccin.rasi" ,catppuccin-rofi) + ("zathura/zathurarc" ,(local-file "home/files/zathurarc")) + ("zathura/catppuccin" ,catppuccin-zathura))) + + (simple-service 'cursor-theme home-files-service-type + `((".icons/default/index.theme" ,(local-file "home/files/cursors.ini")))) + + (simple-service 'gui-environment home-environment-variables-service-type + `(("TERMINAL" . "kitty") + ("_JAVA_OPTIONS" . + ,(string-append + "$_JAVA_OPTIONS${_JAVA_OPTIONS:+ }-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true " + "-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel " + "-Dswing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel")) + ;; Smooth trackpad scrolling in Firefox/Icecat. + ;; https://wiki.archlinux.org/index.php/Firefox/Tweaks#Pixel-perfect_trackpad_scrolling + ("MOZ_USE_XINPUT2" . "1"))) + + (simple-service 'gui-scripts home-files-service-type + `(;; https://sw.kovidgoyal.net/kitty/kittens/diff/ + (".local/bin/kdiff" ; show a diff + ,(program-file "kdiff" #~(apply execl #$(file-append kitty "/bin/kitty") "kitty" + "+kitten" "diff" (cdr (command-line))))) + (".local/bin/icat" ; kitty's "catimg" equivalent + ,(program-file "icat" #~(apply execl #$(file-append kitty "/bin/kitty") "kitty" + "+kitten" "icat" (cdr (command-line))))) + (".local/bin/screenlock" + ,(program-file + "screenlock" + #~(begin ; Wrapper around i3lock to turn off the screen and pause notifications. + (system* #$(file-append dunst "/bin/dunstctl") "set-paused" "true") + (system* #$(file-append xset "/bin/xset") "dpms" "0" "0" "5") + ;; We mustn't use `file-append' here, as we have to pick up the + ;; setuid binary for i3lock installed by the system config. + (system* "i3lock" "-nc" #$catppuccin-background-color) + (system* #$(file-append xset "/bin/xset") "dpms" "600" "600" "600") + (system* #$(file-append dunst "/bin/dunstctl") "set-paused" "false")))) + ;; With #:recursive? #t, Guix keeps the files' permission bits, i.e. makes them executable. + (".local/bin/sessionmenu" ,(local-file "home/files/sessionmenu" #:recursive? #t)) + (".local/bin/passmenu" ,(local-file "home/files/passmenu" #:recursive? #t)) + (".local/bin/volume" ,(local-file "home/files/volume" #:recursive? #t)) + (".local/share/applications/emacsclient.desktop" + ,(local-file "home/files/emacsclient.desktop")))) + + (gnupg-services #:gui-pinentry? #t))) diff --git a/tw/home/cern.scm b/tw/home/cern.scm new file mode 100644 index 00000000..837098d5 --- /dev/null +++ b/tw/home/cern.scm @@ -0,0 +1,88 @@ +;; This "home-environment" file can be passed to 'guix home reconfigure' +;; to reproduce the content of your profile. This is "symbolic": it only +;; specifies package names. To reproduce the exact same profile, you also +;; need to capture the channels being used, as returned by "guix describe". +;; See the "Replicating Guix" section in the manual. + +;; See also, for some tips: +;; https://github.com/alezost/shepherd-config/blob/master/init.scm + +(define-module (tw home cern) + #:use-module (gnu home) + #:use-module (gnu home services desktop) + #:use-module (gnu home services guix) + #:use-module (gnu home services shepherd) + #:use-module (gnu packages xdisorg) + #:use-module (gnu packages xorg) + #:use-module (gnu services) + #:use-module (gnu services shepherd) + #:use-module (guix channels) + #:use-module (guix gexp) + #:use-module (tw home)) + +(define-public %cern-home + (home-environment + (packages + ;; These packages will show up in the home profile, under ~/.guix-home/profile. + (append %interactive-packages %pim-packages %common-packages)) + + ;; To search for available home services, run 'guix home search KEYWORD'. + (services + (cons* + ;; This can't be a `service' as that would remove the 'guix channel. + (simple-service 'nonfree-channels home-channels-service-type + (list + (channel + (name 'nonguix) + (url "https://gitlab.com/nonguix/nonguix") + ;; Enable signature verification: + (introduction + (make-channel-introduction + "897c1a470da759236cc11798f4e0a5f7d4d59fbc" + (openpgp-fingerprint + "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5")))))) + + ;; Redshift: make the screen turn redder at night. + (service home-redshift-service-type + (home-redshift-configuration + ;; See info '(guix)Desktop Home Services'. + (location-provider 'manual) + ;; Approximate location + (latitude 46.0) + (longitude 6.0) + ;; (location-provider 'geoclue2) ; TODO: currently waits forever for a location -- not sure why geoclue doesn't work + ;; (daytime-temperature 6500) ; default 6500 + ;; (nighttime-temperature 4500) ; default 4500 + (daytime-brightness 1.0) + (nighttime-brightness 0.7) + (extra-content "fade=0"))) ; with fade=1, restarting redshift causes flickering for a few secs + + (simple-service 'cern-desktop-gui-services home-shepherd-service-type + (list + (polybar-service "DP-2") + (polybar-service "DP-1-8") + (shepherd-service + (documentation "Set up X displays on login.") + (provision '(xorg-setup)) + (one-shot? #t) + (start #~(lambda _ + (system* #$(file-append numlockx "/bin/numlockx") "on") + ;; Turn off the monitors if there is no input for 10 minutes. + (system* #$(file-append xset "/bin/xset") "dpms" "600" "600" "600") + (system* #$(file-append xrandr "/bin/xrandr") + "--output" "DP-2" "--primary" "--auto") + (system* #$(file-append xrandr "/bin/xrandr") + ;; This can do 4K but HiDPI is a pain. + "--output" "DP-1-8" "--mode" "1920x1080" "--rate" "60.00" + "--left-of" "DP-2") + ;; Set the desktop background picture. Hopefully doing this just after + ;; xrandr works and sets it for both screens. + (system* #$(file-append hsetroot "/bin/hsetroot") "-cover" + (string-append (getenv "XDG_CONFIG_HOME") + "/X11/ridge-view.jpg"))))))) + + (openssh-service #f) + + (append %interactive-services %pim-services %common-services))))) + +%cern-home diff --git a/tw/home/emacs.scm b/tw/home/emacs.scm deleted file mode 100644 index f75a8527..00000000 --- a/tw/home/emacs.scm +++ /dev/null @@ -1,103 +0,0 @@ -(define-module (tw home emacs) - #:use-module (gnu) - #:use-module (gnu home services) - #:use-module (gnu home services shepherd) - #:use-module (tw theme)) - -(use-package-modules base cmake emacs emacs-xyz databases elf finance gcc - haskell-apps llvm python-xyz sqlite) - -(define-public emacs-services - (list - (simple-service 'emacs-config home-xdg-configuration-files-service-type - `(("emacs/include" ,(local-file "files/emacs-packages" #:recursive? #t)) - ("emacs/init.el" ,(local-file "files/emacs-init.el")) - (,(string-append "emacs/" (local-file-name catppuccin-emacs-theme)) - ,catppuccin-emacs-theme))) - - (simple-service 'emacsclient-is-editor home-environment-variables-service-type - `(("EDITOR" . "emacsclient -qc") - ;; Tell emacsclient to return immediately after opening the file. I - ;; can't put this in $EDITOR as many programs expect $EDITOR to exit - ;; only when the user is done editing. - ("ASYNC_EDITOR" . "emacsclient -qcn"))) - - (simple-service 'emacs-server home-shepherd-service-type - (list - (shepherd-service - (documentation "Emacs server; connect using emacsclient.") - (provision '(emacs)) - (start #~(make-forkexec-constructor - (list #$(file-append emacs "/bin/emacs") "--fg-daemon"))) - (stop #~(make-kill-destructor))))))) - -(define-public emacs-packages - (list - ;; Development & language servers - gnu-make - python-yamllint - shellcheck - clang ; for clangd - glibc ; for ldd - gcc binutils patchelf elfutils - python-lsp-server - ;; Supported OotB by eglot, but not packaged by guix: - ;; https://github.com/mads-hartmann/bash-language-server - ;; https://github.com/regen100/cmake-language-server - ;; https://github.com/hrsh7th/vscode-langservers-extracted ; {html,css,json}-languageserver - ;; https://github.com/golang/tools/tree/master/gopls ; maybe? - ;; https://github.com/artempyanykh/marksman ; Markdown - ;; https://github.com/astoff/digestif ; (La)TeX - ;; https://github.com/redhat-developer/yaml-language-server - ;; Needs eglot config + not packaged (from lsp-mode): - ;; https://github.com/graphql/graphiql/tree/main/packages/graphql-language-service-cli#readme - ;; https://github.com/haskell/haskell-language-server / https://github.com/haskell/ghcide - ;; https://github.com/eclipse/lemminx - - ;; Emacs general - emacs - emacs-use-package - emacs-eglot - emacs-counsel - emacs-counsel-dash sqlite ; emacs-counsel-dash requires the sqlite3 binary - emacs-ivy - ;; emacs-company emacs-company-quickhelp emacs-company-posframe - emacs-corfu emacs-corfu-doc - emacs-autothemer ; for catppuccin/emacs - emacs-undo-tree - emacs-aggressive-indent - emacs-which-key - emacs-smart-mode-line - emacs-diminish - emacs-rainbow-mode - emacs-form-feed - emacs-guix - ;; TODO: emacs-editorconfig emacs-sly emacs-sly-macrostep - emacs-org ; emacs-org-modern theme? - - ;; Emacs Evil - emacs-evil - emacs-evil-collection - emacs-evil-expat ; for :reverse, :remove, :rename, :colo, :g*, ... ex commands - emacs-evil-surround - ;; emacs-evil-owl ; tests failing - emacs-evil-args - emacs-evil-numbers - emacs-evil-multiedit - emacs-evil-goggles - emacs-evil-traces - emacs-evil-commentary - emacs-evil-replace-with-register - emacs-evil-org - emacs-evil-markdown - emacs-evil-tex - emacs-evil-text-object-python - - ;; Emacs language modes - emacs-geiser emacs-geiser-guile - ;; emacs-macrostep-geiser - emacs-flymake-collection ; emacs-flymake-flycheck ; if needed - emacs-cmake-mode emacs-gnuplot emacs-graphviz-dot-mode - emacs-hcl-mode emacs-ledger-mode emacs-mmm-mode - emacs-puppet-mode emacs-rec-mode emacs-web-mode - emacs-yaml-mode)) diff --git a/tw/home/lap.scm b/tw/home/lap.scm index d46c9c6e..48dc1499 100644 --- a/tw/home/lap.scm +++ b/tw/home/lap.scm @@ -8,101 +8,30 @@ ;; https://github.com/alezost/shepherd-config/blob/master/init.scm (define-module (tw home lap) - #:use-module ((gnu) - #:select (use-package-modules)) #:use-module (gnu home) #:use-module (gnu home services) #:use-module (gnu home services desktop) #:use-module (gnu home services guix) - #:use-module (gnu home services mcron) #:use-module (gnu home services pm) #:use-module (gnu home services shepherd) #:use-module (gnu packages) + #:use-module (gnu packages android) + #:use-module (gnu packages bittorrent) + #:use-module (gnu packages gnome) + #:use-module (gnu packages messaging) + #:use-module (gnu packages music) + #:use-module (gnu packages networking) + #:use-module (gnu packages xorg) + #:use-module (gnu packages xdisorg) #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (guix channels) #:use-module (guix gexp) #:use-module ((nongnu packages messaging) - #:select (signal-desktop zoom)) + #:select (signal-desktop)) #:use-module ((nongnu packages steam-client) #:select (steam)) - #:use-module (tw home) - #:use-module (tw home emacs) - #:use-module (tw packages alice) - #:use-module (tw packages catppuccin) - #:use-module (tw packages ci) - #:use-module (tw packages games) - #:use-module (tw packages xorg) - #:use-module (tw gexp) - #:use-module (tw theme)) - -(use-package-modules android bittorrent calendar compton dav dunst fonts - freedesktop games gimp gnome gnome-xyz gnuzilla graphviz - image-viewers inkscape kde libreoffice linux mail - messaging music networking pdf pulseaudio python-xyz - syndication tcl terminals tex version-control video - web-browsers wm xdisorg xorg) - -(define pim-packages - (list newsboat vdirsyncer khal khard aerc neomutt mailcap lynx)) ; lynx for HTML mail - -(define pim-services - (list - (simple-service 'pim-config home-xdg-configuration-files-service-type - `(("khal/config" ,(local-file "files/khal.conf")) - ("khard/khard.conf" ,(local-file "files/khard.conf")) - ("aerc" ,(local-file "files/aerc" #:recursive? #t)) - ("mutt/muttrc" ,(local-file "files/muttrc")) - ("mutt/catppuccin.muttrc" ,catppuccin-muttrc) - ("newsboat/config" ,(local-file "files/newsboat.conf")) - ("newsboat/config.catppuccin" ,catppuccin-newsboat) - ("vdirsyncer/config" ,(local-file "files/vdirsyncer.conf")))) - - ;; These cron jobs are annoying because they pop up a password prompt every time they run. - ;; (simple-service 'pim-cronjobs home-mcron-service-type - ;; (list #~(job "15 */4 * * *" ; every four hours at HH:15 - ;; (string-append #$(file-append vdirsyncer "/bin/vdirsyncer") " metasync")) - ;; #~(job "0,30 * * * *" ; every half hour - ;; (string-append #$(file-append vdirsyncer "/bin/vdirsyncer") " sync")))) - - (simple-service 'mail-files home-files-service-type - `((".mailcap" ,(local-file "files/mailcap")) - ;; The file from git main is newer than the one bundled with the - ;; packaged neomutt version and contains a few fixes. - (".local/bin/mutt_oauth2.py" - ,(local-file "files/neomutt/contrib/oauth2/mutt_oauth2.py" #:recursive? #t)))))) - -(define polybar-wrapper - (program-file - "polybar-wrapper" - #~(begin - ;; This wrapper program checks that the monitor we want to start - ;; polybar on is actually connected. - (use-modules (ice-9 popen) - (ice-9 rdelim)) - (let* ((connected-str (string-append (getenv "POLYBAR_MONITOR") " connected")) - (xrandr (open-pipe* OPEN_READ #$(file-append xrandr "/bin/xrandr") "-q")) - (monitor-connected? - (let loop ((line (read-line xrandr))) - (cond - ((eof-object? line) #f) ; we didn't find our monitor connected - ((string-prefix? connected-str line) #t) ; the monitor we want is connected - (else (loop (read-line xrandr))))))) ; keep looking - (close-pipe xrandr) - (when monitor-connected? - (execl #$(file-append polybar "/bin/polybar"))))))) - -(define (polybar-service monitor) - (shepherd-service - (documentation (string-append "Polybar desktop bar for monitor " monitor ".")) - (provision (list (symbol-append 'polybar- (string->symbol monitor)))) - (requirement '(xorg-setup)) - (start #~(make-forkexec-constructor - (list #$polybar-wrapper) - #:environment-variables - (cons #$(string-append "POLYBAR_MONITOR=" monitor) - (default-environment-variables)))) - (stop #~(make-kill-destructor)))) + #:use-module (tw home)) (define-public %lap-home (home-environment @@ -110,48 +39,22 @@ ;; These packages will show up in the home profile, under ~/.guix-home/profile. (cons* ;; CLI tools - adb fastboot beets bsd-games texlive powertop (list git "send-email") + adb fastboot beets + + ;; Graphical applications + blueman nheko signal-desktop simple-scan transmission-remote-gtk ;; Games steam ; see also: steam-nvidia - - ;; Work - s3cmd python-alibuild python-alidistlint - hashicorp-levant-bin hashicorp-nomad-bin - hashicorp-consul-bin hashicorp-vault-bin hashicorp-packer-bin - - ;; i3 and Xorg. i3 itself must be installed system-wide for gdm to pick it up. - ;; acpilight is a drop-in xbacklight replacement, as xbacklight doesn't work on my system. - acpilight arandr blueman dunst gimp hsetroot inkscape icecat imv - kitty libreoffice mpv nheko polybar pulsemixer rofi rofi-calc - signal-desktop simple-scan tk transmission-remote-gtk xdg-utils xdot xclip - xcwd xdotool xdpyinfo xev xfd xfontsel xinput xkill xprop xrandr xrdb xsel - xset xwininfo zoom zathura zathura-ps zathura-pdf-poppler - dconf dconf-editor ; required for config by blueman, cozy, ... - ;; gnome-keyring ; installed system-wide; see system-configuration.scm - ;; geoclue ; for redshift -- installed system-wide ;; Games are installed in ~/.guix-profile instead, to make updates of the ;; home environment faster. ;; 0ad flightgear freeciv simutrans/pak128 warzone2100 widelands pioneer - ;; Fonts - font-hermit font-inconsolata font-fira-code font-fira-sans font-libertinus - font-google-noto font-google-noto-emoji font-openmoji ; for polybar - ;; Theming - papirus-icon-theme catppuccin-gtk-theme catppuccin-mocha-dark-cursors - (append common-packages emacs-packages pim-packages))) + (append %interactive-packages %pim-packages %common-packages))) ;; To search for available home services, run 'guix home search KEYWORD'. (services (cons* - ;; Configuration files for terminal-only programs in $XDG_CONFIG_HOME. - (simple-service 'laptop-config home-xdg-configuration-files-service-type - `(;; All alibuild needs is an empty file. - ("alibuild/disable-analytics" - ,(plain-file "alibuild-disable-analytics" "")) - ("X11/XCompose" ,(local-file "files/XCompose")) ; see also: $XCOMPOSEFILE variable - ("X11/Xresources" ,(local-file "files/Xresources")))) - ;; This can't be a `service' as that would remove the 'guix channel. (simple-service 'nonfree-channels home-channels-service-type (list @@ -195,19 +98,8 @@ (nighttime-brightness 0.7) (extra-content "fade=0"))) ; with fade=1, restarting redshift causes flickering for a few secs - ;; The dbus service doesn't seem to be added automatically. - (service home-dbus-service-type - (home-dbus-configuration)) - - (simple-service 'gui-services home-shepherd-service-type + (simple-service 'laptop-gui-services home-shepherd-service-type (list - (shepherd-service - (documentation "NetworkManager applet; provides a GUI for network connections.") - (provision '(nm-applet)) - (start #~(make-forkexec-constructor - (list #$(file-append network-manager-applet "/bin/nm-applet")))) - (stop #~(make-kill-destructor))) - (shepherd-service (documentation "Blueman applet; provides a GUI for connection to bluetooth devices.") (provision '(blueman-applet)) @@ -218,49 +110,6 @@ (polybar-service "eDP-1") (polybar-service "HDMI-1-1") - (shepherd-service - (documentation "Dunst notification daemon; displays desktop notifications.") - (provision '(dunst)) - (start #~(make-forkexec-constructor - (list #$(file-append dunst "/bin/dunst")))) - (stop #~(make-kill-destructor))) - - (shepherd-service - (documentation "Picom compositor; enables transparent windows in X.") - (provision '(picom)) - (start #~(make-forkexec-constructor - (list #$(file-append picom "/bin/picom") - "--config" #$(local-file "files/picom.conf")))) - (stop #~(make-kill-destructor))) - - (shepherd-service - (documentation "Source Xresources on login.") - (provision '(xrdb)) - (one-shot? #t) - (start #~(lambda _ - (invoke #$(file-append xrdb "/bin/xrdb") "-merge" - (string-append (getenv "XDG_CONFIG_HOME") "/X11/Xresources"))))) - - ;; By default, xdotool gets most of "#@\|~()<>[]{} wrong. Make - ;; it use the correct keymap by re-setting the same one again. - (shepherd-service - (documentation "Fix X keyboard map on login; passmenu needs this.") - (provision '(fix-xdotool)) - (one-shot? #t) - (start #~(lambda _ - (use-modules (ice-9 rdelim) - (ice-9 regex) - (ice-9 popen)) - (let ((port (open-pipe* OPEN_READ #$(file-append setxkbmap "/bin/setxkbmap") - "-query"))) - (let loop ((line (read-line port))) - (unless (eof-object? line) - (let ((mtch (string-match "^layout:[[:space:]]*" line))) - (if mtch - (system* #$(file-append setxkbmap "/bin/setxkbmap") - (match:suffix mtch)) - (loop (read-line port)))))))))) - (shepherd-service (documentation "Set up X displays on login.") (provision '(xorg-setup)) @@ -282,74 +131,8 @@ (string-append (getenv "HOME") "/pictures/Backgrounds/greece/IMG_20181201_104748_DRO.jpg"))))))) - ;; Configuration files for GUI programs in $XDG_CONFIG_HOME. - (simple-service 'gui-config home-xdg-configuration-files-service-type - `(("dunst/dunstrc" ,(local-file "files/dunstrc")) - ("dunst/dunstrc.d/50-catppuccin.conf" ,catppuccin-dunstrc) - ("gtk-2.0/gtkrc" ,(local-file "files/gtk2.ini")) - ("gtk-3.0/settings.ini" ,(local-file "files/gtk3.ini")) - ("i3/config" ,(local-file "files/i3.conf")) - ;; TODO: "kdeglobals" works for some programs (e.g. kdeconnect-app), - ;; but not for others (e.g. nheko, kdeconnect-settings)... - ("kdeglobals" ,catppuccin-kdeglobals) - ("kitty/diff.conf" - ,(combined-text-file "kitty-diff.conf" - (plain-file "kitty-diff-custom.conf" - "pygments_style bw\n") - catppuccin-kitty-diff)) - ("kitty/kitty.conf" - ,(combined-text-file "kitty.conf" - (local-file "files/kitty.conf") - catppuccin-kitty)) - ("mimeapps.list" ,(local-file "files/mimeapps.list")) - ("polybar/config.ini" ,(local-file "files/polybar.ini")) - ("polybar/catppuccin.ini" ,catppuccin-polybar) - ("rofi/config.rasi" ,(local-file "files/rofi.rasi")) - ("rofi/themes/catppuccin.rasi" ,catppuccin-rofi) - ("zathura/zathurarc" ,(local-file "files/zathurarc")) - ("zathura/catppuccin" ,catppuccin-zathura))) - - (simple-service 'cursor-theme home-files-service-type - `((".icons/default/index.theme" ,(local-file "files/cursors.ini")))) - - (simple-service 'gui-environment home-environment-variables-service-type - `(("TERMINAL" . "kitty") - ("_JAVA_OPTIONS" . - ,(string-append - "$_JAVA_OPTIONS${_JAVA_OPTIONS:+ }-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true " - "-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel " - "-Dswing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel")) - ;; Smooth trackpad scrolling in Firefox/Icecat. - ;; https://wiki.archlinux.org/index.php/Firefox/Tweaks#Pixel-perfect_trackpad_scrolling - ("MOZ_USE_XINPUT2" . "1"))) - - (simple-service 'gui-scripts home-files-service-type - `(;; https://sw.kovidgoyal.net/kitty/kittens/diff/ - (".local/bin/kdiff" ; show a diff - ,(program-file "kdiff" #~(apply execl #$(file-append kitty "/bin/kitty") "kitty" - "+kitten" "diff" (cdr (command-line))))) - (".local/bin/icat" ; kitty's "catimg" equivalent - ,(program-file "icat" #~(apply execl #$(file-append kitty "/bin/kitty") "kitty" - "+kitten" "icat" (cdr (command-line))))) - (".local/bin/screenlock" - ,(program-file - "screenlock" - #~(begin ; Wrapper around i3lock to turn off the screen and pause notifications. - (system* #$(file-append dunst "/bin/dunstctl") "set-paused" "true") - (system* #$(file-append xset "/bin/xset") "dpms" "0" "0" "5") - ;; We mustn't use `file-append' here, as we have to pick up the - ;; setuid binary for i3lock installed by the system config. - (system* "i3lock" "-nc" #$catppuccin-background-color) - (system* #$(file-append xset "/bin/xset") "dpms" "600" "600" "600") - (system* #$(file-append dunst "/bin/dunstctl") "set-paused" "false")))) - ;; With #:recursive? #t, Guix keeps the files' permission bits, i.e. makes them executable. - (".local/bin/sessionmenu" ,(local-file "files/sessionmenu" #:recursive? #t)) - (".local/bin/passmenu" ,(local-file "files/passmenu" #:recursive? #t)) - (".local/bin/volume" ,(local-file "files/volume" #:recursive? #t)) - (".local/share/applications/emacsclient.desktop" - ,(local-file "files/emacsclient.desktop")))) + (openssh-service #t) - (append (gnupg-services #:gui-pinentry? #t) - common-services emacs-services pim-services))))) + (append %pim-services %interactive-services %common-services))))) %lap-home diff --git a/tw/home/server.scm b/tw/home/server.scm index c4c62cc9..694c84c8 100644 --- a/tw/home/server.scm +++ b/tw/home/server.scm @@ -1,17 +1,17 @@ (define-module (tw home server) - #:use-module (gnu) #:use-module (gnu home) #:use-module (gnu home services) + #:use-module (gnu packages vim) + #:use-module (gnu services) + #:use-module (guix gexp) #:use-module (tw home) #:use-module (tw theme)) -(use-package-modules vim) - (define-public %server-home (home-environment ;; These packages will show up in the home profile, under ~/.guix-home/profile. (packages - (cons* vim vim-surround common-packages)) + (cons* vim vim-surround %common-packages)) ;; To search for available home services, run 'guix home search KEYWORD'. (services (cons* @@ -22,6 +22,6 @@ (simple-service 'vim-is-editor home-environment-variables-service-type `(("EDITOR" . "vim"))) ; we define no ASYNC_EDITOR - common-services)))) + %common-services)))) %server-home -- cgit v1.2.3 From 84ebc8dcfc05cd6eaa1f31fe31ecc9d497f1b4d2 Mon Sep 17 00:00:00 2001 From: Timo Wilken Date: Tue, 7 Mar 2023 21:42:45 +0100 Subject: Track work gitconfig --- tw/home.scm | 3 +++ tw/home/files/gitconfig-cern | 4 ++++ 2 files changed, 7 insertions(+) create mode 100644 tw/home/files/gitconfig-cern (limited to 'tw/home') diff --git a/tw/home.scm b/tw/home.scm index 6cb67344..aabc6579 100644 --- a/tw/home.scm +++ b/tw/home.scm @@ -425,6 +425,9 @@ auto-expand-secmem ("X11/XCompose" ,(local-file "home/files/XCompose")) ; see also: $XCOMPOSEFILE variable ("X11/Xresources" ,(local-file "home/files/Xresources")))) + (simple-service 'work-git-config home-files-service-type + `(("src/alice/.gitconfig" ,(local-file "home/files/gitconfig-cern")))) + (simple-service 'emacs-config home-xdg-configuration-files-service-type `(("emacs/include" ,(local-file "home/files/emacs-packages" #:recursive? #t)) ("emacs/init.el" ,(local-file "home/files/emacs-init.el")) diff --git a/tw/home/files/gitconfig-cern b/tw/home/files/gitconfig-cern new file mode 100644 index 00000000..5c7f0bb1 --- /dev/null +++ b/tw/home/files/gitconfig-cern @@ -0,0 +1,4 @@ +[user] + email = timo.wilken@cern.ch + signingkey = C2249BBE5E8761C943A0CFA1B7B3914BF63ACD7C + name = Timo Wilken -- cgit v1.2.3 From f3eab8b014c11eacced5034180e93ee2578a87ba Mon Sep 17 00:00:00 2001 From: Timo Wilken Date: Fri, 7 Apr 2023 17:50:09 +0200 Subject: Update CERN mail config for ExOl --- tw/home/files/aerc/accounts.conf | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'tw/home') diff --git a/tw/home/files/aerc/accounts.conf b/tw/home/files/aerc/accounts.conf index 1d8f3559..53220cc9 100644 --- a/tw/home/files/aerc/accounts.conf +++ b/tw/home/files/aerc/accounts.conf @@ -10,12 +10,20 @@ postpone = Drafts cache-headers = true [CERN] -source = imaps+insecure://twilken@imap.cern.ch -outgoing = smtp+login://twilken@smtp.cern.ch -source-cred-cmd = pass cern/sso | head -1 -outgoing-cred-cmd = pass cern/sso | head -1 +# https://man.sr.ht/~rjarry/aerc/providers/microsoft.md#office365-with-xoauth2 +source = imaps+xoauth2://timo.wilken%40cern.ch@outlook.office365.com?client_id=9e5f94bc-e8a4-4e73-b8be-63364c29d753&token_endpoint=https://login.microsoftonline.com/common/oauth2/v2.0/token&scope=https://outlook.office.com/SMTP.Send https://outlook.office.com/IMAP.AccessAsUser.All offline_access +outgoing = smtp+xoauth2://timo.wilken%40cern.ch@smtp.office365.com:587?client_id=9e5f94bc-e8a4-4e73-b8be-63364c29d753&token_endpoint=https://login.microsoftonline.com/common/oauth2/v2.0/token&scope=https://outlook.office.com/SMTP.Send https://outlook.office.com/IMAP.AccessAsUser.All offline_access +smtp-starttls = true +# To authorize for the first time (to get refresh token): +# mutt_oauth2.py ~/.local/share/aerc/cern.tokens --authorize --authflow authcode --provider microsoft \ +# --email timo.wilken@cern.ch --client-id 9e5f94bc-e8a4-4e73-b8be-63364c29d753 --client-secret '' \ +# --encryption-pipe 'gpg --encrypt --recipient timo@twilken.net' +# Confirm empty client secret. When done, copy-paste ?code= value from final URL to the command-line. +# Then, to store the refresh token: +# gpg --decrypt ~/.local/share/aerc/cern.tokens | jq -r .refresh_token | pass insert -e -f cern/exol/refresh-token +source-cred-cmd = pass cern/exol/refresh-token +outgoing-cred-cmd = pass cern/exol/refresh-token default = INBOX -smtp-starttls = yes from = Timo Wilken aliases = twilken@cern.ch copy-to = Sent Items -- cgit v1.2.3 From 222d52e2a7bf687e8507ac3bc6ce249c7cc813f2 Mon Sep 17 00:00:00 2001 From: Timo Wilken Date: Fri, 14 Apr 2023 19:27:23 +0200 Subject: Use sbcl by default in Emacs --- tw/home/files/emacs-init.el | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'tw/home') diff --git a/tw/home/files/emacs-init.el b/tw/home/files/emacs-init.el index 8cf6c20c..b4481ca3 100644 --- a/tw/home/files/emacs-init.el +++ b/tw/home/files/emacs-init.el @@ -558,6 +558,10 @@ (use-package aggressive-indent :hook (scheme-mode emacs-lisp-mode common-lisp-mode sh-mode)) +(use-package inf-lisp + :custom + (inferior-lisp-program "sbcl")) + (defun tw/lisp-evil-setup () "Set up evil in general `lisp-mode' buffers." ;; https://github.com/wcsmith/evil-args#customization -- cgit v1.2.3 From 4f39ce4f2791e70c43b4fbd96491cbd2f7ea3d55 Mon Sep 17 00:00:00 2001 From: Timo Wilken Date: Fri, 14 Apr 2023 19:26:26 +0200 Subject: Improve aerc address display --- tw/home/files/aerc/aerc.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tw/home') diff --git a/tw/home/files/aerc/aerc.conf b/tw/home/files/aerc/aerc.conf index 4c65697a..aae2806a 100644 --- a/tw/home/files/aerc/aerc.conf +++ b/tw/home/files/aerc/aerc.conf @@ -9,7 +9,7 @@ unsafe-accounts-conf=true [ui] # Describes the format for each row in a mailbox view. This field is compatible # with mutt's printf-like syntax. -index-format=%4C %Z %D %-17.17n %s +index-format=%4C %Z %D %-17.17F %s # See time.Time#Format at https://godoc.org/time#Time.Format timestamp-format=Mon _2 Jan 2006 15:04 -- cgit v1.2.3 From ba49ccfc3d86e087cf15edf863086abaf00e66de Mon Sep 17 00:00:00 2001 From: Timo Wilken Date: Sat, 15 Apr 2023 16:19:19 +0200 Subject: Make net speed display more compact --- tw/home/files/polybar.ini | 2 ++ 1 file changed, 2 insertions(+) (limited to 'tw/home') diff --git a/tw/home/files/polybar.ini b/tw/home/files/polybar.ini index 506f8c12..13a2e0b8 100644 --- a/tw/home/files/polybar.ini +++ b/tw/home/files/polybar.ini @@ -177,6 +177,8 @@ animation-packetloss-1-foreground = ${colors.alert} animation-packetloss-1-background = ${colors.background-alt} ; Framerate in milliseconds animation-packetloss-framerate = 500 +; Don't display "B/s" suffix, only e.g. "5 K" for compactness. +speed-unit = [module/wlan] inherit = network-base -- cgit v1.2.3 From 422b2443920d8c24bb815a074c1bfcf36a9e62b5 Mon Sep 17 00:00:00 2001 From: Timo Wilken Date: Sat, 15 Apr 2023 16:19:43 +0200 Subject: Install cmus music player --- tw/home/lap.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tw/home') diff --git a/tw/home/lap.scm b/tw/home/lap.scm index 48dc1499..13083c83 100644 --- a/tw/home/lap.scm +++ b/tw/home/lap.scm @@ -39,7 +39,7 @@ ;; These packages will show up in the home profile, under ~/.guix-home/profile. (cons* ;; CLI tools - adb fastboot beets + adb fastboot beets cmus ;; Graphical applications blueman nheko signal-desktop simple-scan transmission-remote-gtk -- cgit v1.2.3 From 4bb0f926ce5ecfb4c2c6941954482c21c2a633cc Mon Sep 17 00:00:00 2001 From: Timo Wilken Date: Sun, 16 Apr 2023 19:06:11 +0200 Subject: Port Emacs changes from CERN desktop --- tw/home/files/emacs-init.el | 108 ++++++++++++++++++---- tw/home/files/emacs-packages/org-latex-classes.el | 54 ----------- 2 files changed, 92 insertions(+), 70 deletions(-) delete mode 100644 tw/home/files/emacs-packages/org-latex-classes.el (limited to 'tw/home') diff --git a/tw/home/files/emacs-init.el b/tw/home/files/emacs-init.el index b4481ca3..eac4b666 100644 --- a/tw/home/files/emacs-init.el +++ b/tw/home/files/emacs-init.el @@ -80,6 +80,7 @@ "Enable word wrapping." (toggle-word-wrap +1)) (add-hook 'markdown-mode-hook #'tw/enable-word-wrap) +(add-hook 'org-mode-hook #'tw/enable-word-wrap) ;; `use-package' requirements. (require 'package) @@ -135,11 +136,15 @@ :config (counsel-mode +1) :diminish counsel-mode) +(use-package dash-docs) + (defun tw/counsel-dash-is-help () "Install `counsel-dash-at-point' as `evil-lookup-func'." (setq-local evil-lookup-func #'counsel-dash-at-point)) (use-package counsel-dash + :after (dash-docs) + :commands (counsel-dash-at-point) :demand t :bind (("K" . counsel-dash-at-point) ; TODO: just install as `evil-lookup-func'? ("dK" . counsel-dash) ("di" . counsel-dash-install-docset) @@ -164,7 +169,7 @@ ;; Included in Emacs >= 26. Better than `linum-mode'. ;; There is also `global-display-line-numbers-mode', but that also ;; enables line numbers in help windows, which I don't want. - :hook (prog-mode conf-mode alidist-mode)) + :hook (prog-mode conf-mode yaml-mode alidist-mode)) (use-package which-key :commands (which-key-mode) :demand t @@ -208,7 +213,7 @@ (use-package flymake :after (evil which-key) :demand t ; needed for `flymake-collection' - :hook prog-mode + :hook (prog-mode yaml-mode alidist-mode) :init (which-key-add-key-based-replacements "e" '("errors" . "Flymake")) :bind (("eb" . flymake-start) @@ -302,9 +307,13 @@ :mode (rx "." (or "htm" "html" "js" "css" "scss") eos)) (use-package yaml-mode - :mode (rx ".y" (? "a") "ml" eos)) + :mode (rx (or (seq ".y" (? "a") "ml") + (seq "aliPublish" (* (not ?/)) ".conf")) + eos)) (use-package ledger-mode + :after (evil) + :commands (ledger-mode) :mode (rx ".journal" eos) :custom (ledger-default-date-format ledger-iso-date-format "Use hledger-style dates.") @@ -313,7 +322,10 @@ (ledger-post-account-alignment-column 2 "Use 2-space indents.") (ledger-post-amount-alignment-at :decimal "Align amounts at decimal points/commas.") (ledger-post-amount-alignment-column 52 "Align amounts' decimal points to the 52nd column.") - (ledger-highlight-xact-under-point nil "Don't highlight the transaction at point.")) + (ledger-highlight-xact-under-point nil "Don't highlight the transaction at point.") + :config + (evil-define-key 'normal ledger-mode-map + (kbd "TAB") #'ledger-indent-line)) (use-package geiser :after (evil) @@ -336,9 +348,63 @@ :after (geiser)) ;; Org-mode -(use-package org) +(use-package org + :commands (org-mode) + :mode (rx ".org" eos) + :custom + (org-latex-src-block-backend 'minted "Colourise source code.") + (org-latex-packages-alist + '(("" "svg") + ("" "minted")) + "Use svg and syntax highlighting packages.") + (org-latex-pdf-process + '("latexmk -shell-escape -f -pdf -%latex -interaction=nonstopmode -output-directory=%o %f") + "Allow -shell-escape needed by svg and minted packages.")) + (use-package ob ; org-babel - :after (org)) + :after (org) + :custom + (org-confirm-babel-evaluate nil "Allow running code blocks without confirmation.") + ;; List of supported languages: + ;; https://orgmode.org/worg/org-contrib/babel/languages/index.html + (org-babel-load-languages + '((emacs-lisp . t) + (lisp . t) + (dot . t) + (python . t) + (rec . t)) ; see `ob-rec' below + "Load bindings for more languages for use in #+begin_src blocks.")) + +(defun tw/latex-section-commands (name) + "Create a pair of section commands like (\"\\NAME{%s}\" . \"\\NAME*{%s}\"). +For use in `org-latex-classes'." + (cons (format "\\%s{%%s}" name) (format "\\%s*{%%s}" name))) +(defconst tw/latex-part (tw/latex-section-commands "part") + "Part LaTeX commands for `org-latex-classes'.") +(defconst tw/latex-chapter (tw/latex-section-commands "chapter") + "Chapter LaTeX commands for `org-latex-classes'.") +(defconst tw/latex-section-and-below + (mapcar #'tw/latex-section-commands + '("section" "subsection" "subsubsection" "paragraph" "subparagraph")) + "Section to subparagraph LaTeX commands for `org-latex-classes'.") + +(use-package ox-latex ; org-export-latex + :after (org) + :custom + (org-latex-classes + `(("paperlike" "\\documentclass{paperlike}" . ,tw/latex-section-and-below) + ("examtext" "\\documentclass{examtext}" . ,tw/latex-section-and-below) + ("minutes" "\\documentclass{minutes}" . ,tw/latex-section-and-below) + ("mapreport" "\\documentclass{mapreport}" ,tw/latex-chapter . ,tw/latex-section-and-below) + ("pt3report" "\\documentclass{pt3report}" ,tw/latex-chapter . ,tw/latex-section-and-below) + ("article" "\\documentclass{article}" . ,tw/latex-section-and-below) + ("scrartcl" "\\documentclass{scrartcl}" . ,tw/latex-section-and-below) + ("report" "\\documentclass{report}" ,tw/latex-part ,tw/latex-chapter . ,tw/latex-section-and-below) + ("report-noparts" "\\documentclass{report}" ,tw/latex-chapter . ,tw/latex-section-and-below) + ("book" "\\documentclass{book}" ,tw/latex-part ,tw/latex-chapter . ,tw/latex-section-and-below) + ("book-noparts" "\\documentclass{book}" ,tw/latex-chapter . ,tw/latex-section-and-below) + ("checklist" "\\documentclass{checklist}" . ,tw/latex-section-and-below)) + "Define more documentclasses for org-latex.")) (use-package outline :commands (outline-mode outline-minor-mode) @@ -375,10 +441,6 @@ (: ".environment.d/" (1+ (not ?\/)) ".conf")) eos)) -(use-package org-latex-classes - :after (ox-latex) - :load-path "include/") - (use-package ob-rec ;; `org-babel' hooks for `rec-mode' :after (org ob rec-mode) @@ -422,6 +484,11 @@ (evil-mode +1) (evil-set-leader '(normal visual) (kbd "SPC")) ; (evil-set-leader '(normal visual) (kbd "\\") t) ; + ;; For some reason, in `diff-mode', space isn't assigned to the leader key + ;; automatically, unlike in other modes. + (evil-define-key '(normal visual) diff-mode-shared-map ; not `diff-mode-map', else toggling `read-only-mode' destroys the binding + (kbd "SPC") #'evil-send-leader + (kbd "\\") #'evil-send-localleader) (evil-define-key '(normal insert visual replace) 'global (kbd "C-s") #'save-buffer) ;; Global major-mode-independent keys should be defined here. Major @@ -469,7 +536,9 @@ :after (evil) :commands (evil-collection-init) :demand t :config (evil-collection-init) - :diminish evil-collection-unimpaired-mode) + :diminish evil-collection-unimpaired-mode + :custom + (evil-collection-setup-minibuffer t "Use evil-collection in minibuffer to match `evil-want-minibuffer'.")) (use-package evil-org :after (evil org) @@ -477,6 +546,18 @@ :config (evil-define-key '(normal visual) org-mode-map (kbd "\\") #'org-ctrl-c-ctrl-c + (kbd "ib") #'org-insert-structure-template + (kbd "id") #'org-insert-drawer + (kbd "iD") #'org-insert-time-stamp + (kbd "ih") #'org-insert-heading + (kbd "iH") #'org-insert-subheading + (kbd "it") #'org-insert-todo-heading + (kbd "iT") #'org-insert-todo-subheading + (kbd "ii") #'org-insert-item + (kbd "il") #'org-insert-link + (kbd "p") #'org-set-property + (kbd "t") #'org-set-tags + ;; Source code block editing (kbd "'") #'org-edit-src-code (kbd "e") #'org-export-dispatch) (evil-define-key '(normal visual) org-src-mode-map @@ -594,11 +675,6 @@ (kbd "el") #'eval-last-sexp (kbd "ep") #'eval-print-last-sexp) -;; For some reason, in `diff-mode', space isn't assigned to the leader key -;; automatically, unlike in other modes. -(evil-define-key '(normal visual) diff-mode-shared-map ; not `diff-mode-map', else toggling `read-only-mode' destroys the binding - (kbd "SPC") #'evil-send-leader) - ;; Guix-related .dir-locals.el entries. These are fine; don't prompt every time. (mapc (apply-partially #'add-to-list 'safe-local-eval-forms) '((modify-syntax-entry 126 "'") diff --git a/tw/home/files/emacs-packages/org-latex-classes.el b/tw/home/files/emacs-packages/org-latex-classes.el deleted file mode 100644 index 90d13341..00000000 --- a/tw/home/files/emacs-packages/org-latex-classes.el +++ /dev/null @@ -1,54 +0,0 @@ -;;; org-latex-classes.el --- LaTeX documentclass definitions for org-mode. -;;; Commentary: -;;; Code: -(require 'ox-latex) - -(defun tw/latex-section-commands (name) - "Create a pair of section commands like (\"\\NAME{%s}\" . \"\\NAME*{%s}\")." - (cons (format "\\%s{%%s}" name) (format "\\%s*{%%s}" name))) - -(defconst tw/latex-part (tw/latex-section-commands "part")) -(defconst tw/latex-chapter (tw/latex-section-commands "chapter")) -(defconst tw/latex-section-and-below - (mapcar #'tw/latex-section-commands - '("section" "subsection" "subsubsection" "paragraph" "subparagraph"))) - -(setq org-latex-classes - `(("paperlike" "\\documentclass{paperlike}" - . ,tw/latex-section-and-below) - - ("examtext" "\\documentclass{examtext}" - . ,tw/latex-section-and-below) - - ("minutes" "\\documentclass{minutes}" - . ,tw/latex-section-and-below) - - ("mapreport" "\\documentclass{mapreport}" - ,tw/latex-chapter . ,tw/latex-section-and-below) - - ("pt3report" "\\documentclass{pt3report}" - ,tw/latex-chapter . ,tw/latex-section-and-below) - - ("article" "\\documentclass{article}" - . ,tw/latex-section-and-below) - - ("scrartcl" "\\documentclass{scrartcl}" - . ,tw/latex-section-and-below) - - ("report" "\\documentclass{report}" - ,tw/latex-part ,tw/latex-chapter . ,tw/latex-section-and-below) - - ("report-noparts" "\\documentclass{report}" - ,tw/latex-chapter . ,tw/latex-section-and-below) - - ("book" "\\documentclass{book}" - ,tw/latex-part ,tw/latex-chapter . ,tw/latex-section-and-below) - - ("book-noparts" "\\documentclass{book}" - ,tw/latex-chapter . ,tw/latex-section-and-below) - - ("checklist" "\\documentclass{checklist}" - . ,tw/latex-section-and-below))) - -(provide 'org-latex-classes) -;;; org-latex-classes.el ends here -- cgit v1.2.3 From 234c026bc56207a5e2376cfd7b7fe41d9edd67a3 Mon Sep 17 00:00:00 2001 From: Timo Wilken Date: Sun, 16 Apr 2023 19:08:41 +0200 Subject: Fix org-mode :mode --- tw/home/files/emacs-init.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tw/home') diff --git a/tw/home/files/emacs-init.el b/tw/home/files/emacs-init.el index eac4b666..1469dab2 100644 --- a/tw/home/files/emacs-init.el +++ b/tw/home/files/emacs-init.el @@ -350,7 +350,7 @@ ;; Org-mode (use-package org :commands (org-mode) - :mode (rx ".org" eos) + :mode ((rx ".org" eos) . org-mode) :custom (org-latex-src-block-backend 'minted "Colourise source code.") (org-latex-packages-alist -- cgit v1.2.3