From 02786dac5cc1e6c96f6fe9e2f6c9b02e5f231c11 Mon Sep 17 00:00:00 2001 From: Ohad Livne Date: Tue, 24 Jun 2025 00:10:14 +0300 Subject: [PATCH 01/10] Use pytest for testing by default --- .config/emacs/init.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.config/emacs/init.el b/.config/emacs/init.el index 11641d9..5ef9ea5 100644 --- a/.config/emacs/init.el +++ b/.config/emacs/init.el @@ -255,6 +255,8 @@ :hook (python-mode . load-python-env) :config (load "python-tests.el") + :custom + (elpy-test-runner 'elpy-test-pytest-runner) ) ;; Jupyter notebook integration From b2f67e84ee906baff110ce25813eb6014c5d899e Mon Sep 17 00:00:00 2001 From: Ohad Livne Date: Tue, 24 Jun 2025 14:27:06 +0300 Subject: [PATCH 02/10] Pick up local variables before starting the Python IDE --- .config/emacs/init.el | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.config/emacs/init.el b/.config/emacs/init.el index 5ef9ea5..1ea3726 100644 --- a/.config/emacs/init.el +++ b/.config/emacs/init.el @@ -243,16 +243,17 @@ (defun load-python-env () "Set up the Python IDE in the current project." (interactive) - (progn - (ignore-errors (poetry-venv-workon)) - (eglot-ensure))) + (when (derived-mode-p 'python-mode) + (progn + (poetry-venv-workon) + (eglot-ensure)))) (use-package python :bind (:map python-mode-map ("C-c C-p" . nil) ("C-c C-l" . nil) ("C-c t" . elpy-test)) - :hook (python-mode . load-python-env) + :hook (hack-local-variables . load-python-env) :config (load "python-tests.el") :custom From 83eb4f8606b1b6894802daf1b0dc06797e6997b7 Mon Sep 17 00:00:00 2001 From: Ohad Livne Date: Tue, 24 Jun 2025 22:11:41 +0300 Subject: [PATCH 03/10] Setup the auto-mode-alist more cleanly --- .config/emacs/init.el | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.config/emacs/init.el b/.config/emacs/init.el index 1ea3726..2110235 100644 --- a/.config/emacs/init.el +++ b/.config/emacs/init.el @@ -183,7 +183,11 @@ ;; EPUB reader (use-package nov :init - (add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))) + (setq auto-mode-alist + (map-merge 'list + '(("\\.epub\\'" . nov-mode)) + auto-mode-alist)) + ) (use-package company :init (global-company-mode) From d83ce3ab347b6eee64f8f3c661727b464f509755 Mon Sep 17 00:00:00 2001 From: Ohad Livne Date: Tue, 24 Jun 2025 19:09:25 +0300 Subject: [PATCH 04/10] Setup Emacs as an IDE for Go --- .config/emacs/init.el | 13 +++++++++++++ .config/setup/01-install-packages.sh | 2 ++ 2 files changed, 15 insertions(+) diff --git a/.config/emacs/init.el b/.config/emacs/init.el index 2110235..94dbd23 100644 --- a/.config/emacs/init.el +++ b/.config/emacs/init.el @@ -287,6 +287,19 @@ (rustic-lsp-client 'eglot) ) +(use-package go-config + :ensure nil + :hook + (go-ts-mode . eglot-ensure) + :init + (setq auto-mode-alist + (map-merge 'list + '(("\\.go\\'" . go-ts-mode) + ("/go\\.mod\\'" . go-mod-ts-mode) + ("/go\\.work\\'" . go-work-ts-mode)) + auto-mode-alist)) + ) + (use-package gptel :custom ; keep-sorted start diff --git a/.config/setup/01-install-packages.sh b/.config/setup/01-install-packages.sh index 2c49b8f..7159b5a 100755 --- a/.config/setup/01-install-packages.sh +++ b/.config/setup/01-install-packages.sh @@ -27,6 +27,7 @@ DEB_PKGS=( fuzzel gdb gnumeric + gopls graphviz grim guile-3.0 @@ -92,6 +93,7 @@ DEB_PKGS=( META_PKGS=( # keep-sorted start fonts-noto + golang podman-compose # keep-sorted end ) From 0dbd277c2ffbe331848e55745185ebe0d47bd3dc Mon Sep 17 00:00:00 2001 From: Ohad Livne Date: Wed, 25 Jun 2025 19:34:14 +0300 Subject: [PATCH 05/10] Tweak git-sync behaviour in .gitconfig instead of the CLI --- .gitconfig | 4 ++++ .local/bin/sync-git-repos | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitconfig b/.gitconfig index 1aaaa5d..e0d1e54 100644 --- a/.gitconfig +++ b/.gitconfig @@ -10,6 +10,10 @@ [remote] pushDefault = . [git-sync] + # keep-sorted start + syncEnabled = true + syncNewFiles = true syncSkipHooks = true + # keep-sorted end [include] path = .hostgitconfig diff --git a/.local/bin/sync-git-repos b/.local/bin/sync-git-repos index 92d7258..d1fce9e 100755 --- a/.local/bin/sync-git-repos +++ b/.local/bin/sync-git-repos @@ -12,7 +12,7 @@ sync_repo () { repo=$1 echo git-sync "${repo}" - ( cd "${repo}" && "$(systemd-path user-state-private)"/git-sync/git-sync -n -s sync ) + ( cd "${repo}" && "$(systemd-path user-state-private)"/git-sync/git-sync sync ) echo } From 8beb5d8a984672bed353952d4d9c73de2946e801 Mon Sep 17 00:00:00 2001 From: Ohad Livne Date: Wed, 25 Jun 2025 16:15:36 +0300 Subject: [PATCH 06/10] Install the AWS CLI tool --- .config/setup/01-install-packages.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.config/setup/01-install-packages.sh b/.config/setup/01-install-packages.sh index 7159b5a..029fd59 100755 --- a/.config/setup/01-install-packages.sh +++ b/.config/setup/01-install-packages.sh @@ -87,6 +87,7 @@ DEB_PKGS=( xdg-desktop-portal-wlr xournalpp yt-dlp + awscli zip # keep-sorted end ) From f4a86e2373f7dddf5a7f2b31f9b41ff0f9aa8657 Mon Sep 17 00:00:00 2001 From: Ohad Livne Date: Wed, 25 Jun 2025 22:30:24 +0300 Subject: [PATCH 07/10] Create a script to download the NASA Astronomy Picture of the Day --- .local/bin/get-nasa-apod | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100755 .local/bin/get-nasa-apod diff --git a/.local/bin/get-nasa-apod b/.local/bin/get-nasa-apod new file mode 100755 index 0000000..08454e8 --- /dev/null +++ b/.local/bin/get-nasa-apod @@ -0,0 +1,34 @@ +#! /usr/bin/bash + +set -euo pipefail +IFS=$'\n\t' + +API_KEY="${NASA_API_KEY:-DEMO_KEY}" +if [ "${API_KEY}" = "DEMO_KEY" ]; then + echo "No API key set! using demo key." +fi + +WALLPAPERS="$(systemd-path user)"/Wallpapers + +mkdir --parents "${WALLPAPERS}" + +APOD_URL="https://api.nasa.gov/planetary/apod?api_key=${API_KEY}" +response="$(curl --silent "${APOD_URL}")" +picture_date="$(printf '%s' "${response}" | jq --raw-output .date)" +picture_url="$(printf '%s' "${response}" | jq --raw-output .hdurl)" + +extension="${picture_url##*.}" +filename="${picture_date}.${extension}" +outfile="${WALLPAPERS}/${filename}" + +curl \ + --location \ + --output "${outfile}" \ + --silent \ + "${picture_url}" +ln \ + --force \ + --symbolic \ + "${outfile}" \ + "${WALLPAPERS}/today.${extension}" +swaymsg reload From 83ddcb48fcfe7a906a0c3577ce31e61d76343d48 Mon Sep 17 00:00:00 2001 From: Ohad Livne Date: Wed, 25 Jun 2025 22:25:01 +0300 Subject: [PATCH 08/10] Ensure atomic write to the output file --- .local/bin/get-nasa-apod | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.local/bin/get-nasa-apod b/.local/bin/get-nasa-apod index 08454e8..2f68b97 100755 --- a/.local/bin/get-nasa-apod +++ b/.local/bin/get-nasa-apod @@ -21,11 +21,13 @@ extension="${picture_url##*.}" filename="${picture_date}.${extension}" outfile="${WALLPAPERS}/${filename}" +tempfile="$(mktemp)" curl \ --location \ - --output "${outfile}" \ + --output "${tempfile}" \ --silent \ "${picture_url}" +mv "${tempfile}" "${outfile}" ln \ --force \ --symbolic \ From 7cb6d3f92e07fa1d58ab0ba011e4fd7a59f40ea0 Mon Sep 17 00:00:00 2001 From: Ohad Livne Date: Wed, 25 Jun 2025 22:28:04 +0300 Subject: [PATCH 09/10] Skip downloading existing pictures --- .local/bin/get-nasa-apod | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.local/bin/get-nasa-apod b/.local/bin/get-nasa-apod index 2f68b97..e6560b9 100755 --- a/.local/bin/get-nasa-apod +++ b/.local/bin/get-nasa-apod @@ -21,6 +21,11 @@ extension="${picture_url##*.}" filename="${picture_date}.${extension}" outfile="${WALLPAPERS}/${filename}" +if [ -f "${outfile}" ]; then + echo "Target file already exists" + exit 0 +fi + tempfile="$(mktemp)" curl \ --location \ From d90c70b0508db7e5b98b102d5035bdab42e1690e Mon Sep 17 00:00:00 2001 From: Ohad Livne Date: Wed, 25 Jun 2025 22:30:37 +0300 Subject: [PATCH 10/10] Create a daily job to download the NASA Astronomy Picture of the Day --- .config/systemd/user/get-nasa-apod.service | 10 ++++++++++ .config/systemd/user/get-nasa-apod.timer | 10 ++++++++++ 2 files changed, 20 insertions(+) create mode 100644 .config/systemd/user/get-nasa-apod.service create mode 100644 .config/systemd/user/get-nasa-apod.timer diff --git a/.config/systemd/user/get-nasa-apod.service b/.config/systemd/user/get-nasa-apod.service new file mode 100644 index 0000000..1da3c26 --- /dev/null +++ b/.config/systemd/user/get-nasa-apod.service @@ -0,0 +1,10 @@ +[Unit] +Description=Refresh the wallpaper using the NASA Astronomy Picture of the Day +Wants=get-nasa-apod.timer + +[Service] +WorkingDirectory=%h +ExecStart=%h/.local/bin/get-nasa-apod + +[Install] +WantedBy=default.target diff --git a/.config/systemd/user/get-nasa-apod.timer b/.config/systemd/user/get-nasa-apod.timer new file mode 100644 index 0000000..4cac963 --- /dev/null +++ b/.config/systemd/user/get-nasa-apod.timer @@ -0,0 +1,10 @@ +[Unit] +Description=Daily NASA wallpaper fetch +Requires=get-nasa-apod.service + +[Timer] +Unit=nasa-apod.service +OnCalendar=daily + +[Install] +WantedBy=timers.target