diff options
| -rw-r--r-- | modules/communication/neomutt/default.nix | 2 | ||||
| -rw-r--r-- | modules/development/lazygit/default.nix | 2 | ||||
| -rw-r--r-- | modules/file-management/yazi/default.nix | 2 | ||||
| -rw-r--r-- | modules/media/screen-recording/default.nix | 2 | ||||
| -rw-r--r-- | modules/networking/usque/default.nix | 2 | ||||
| -rw-r--r-- | modules/office/calcurse/default.nix | 2 | ||||
| -rw-r--r-- | modules/security/gopass/default.nix | 4 | ||||
| -rw-r--r-- | modules/security/gpg/default.nix | 2 | ||||
| -rw-r--r-- | modules/system/deep-clean/default.nix | 2 | ||||
| -rw-r--r-- | modules/system/nix-update/default.nix | 2 | ||||
| -rw-r--r-- | modules/terminal/bash/default.nix | 13 | ||||
| -rw-r--r-- | modules/terminal/fzf/assertions.nix | 10 | ||||
| -rw-r--r-- | modules/terminal/fzf/default.nix | 1 | ||||
| -rw-r--r-- | modules/terminal/zsh/default.nix | 2 | ||||
| -rw-r--r-- | updates/default.nix | 5 | ||||
| -rw-r--r-- | updates/web/chromium/check-chromium-extension-updates.lua | 56 | ||||
| -rw-r--r-- | updates/web/chromium/extensions.nix | 81 |
17 files changed, 123 insertions, 67 deletions
diff --git a/modules/communication/neomutt/default.nix b/modules/communication/neomutt/default.nix index e8496e1..fbcbe5c 100644 --- a/modules/communication/neomutt/default.nix +++ b/modules/communication/neomutt/default.nix @@ -9,7 +9,7 @@ let neomuttSyncScript = pkgs.writeShellApplication { name = "neomutt-sync"; runtimeInputs = [ - pkgs.bash + config.terminal.bash.package pkgs.dialog pkgs.coreutils pkgs.gawk diff --git a/modules/development/lazygit/default.nix b/modules/development/lazygit/default.nix index 60913c0..eb4c739 100644 --- a/modules/development/lazygit/default.nix +++ b/modules/development/lazygit/default.nix @@ -32,7 +32,7 @@ programs.lazygit = lib.mkIf config.development.lazygit.enable { enable = true; - enableBashIntegration = config.terminal.bash.enable; + enableBashIntegration = false; enableZshIntegration = config.terminal.zsh.enable; settings = { gui = with config.scheme.withHashtag; { diff --git a/modules/file-management/yazi/default.nix b/modules/file-management/yazi/default.nix index 11c2b55..70a7326 100644 --- a/modules/file-management/yazi/default.nix +++ b/modules/file-management/yazi/default.nix @@ -9,7 +9,7 @@ let yaziFileChooserScript = pkgs.writeShellApplication { name = "yazi-file-chooser"; runtimeInputs = [ - pkgs.bash + config.terminal.bash.package config.file-management.yazi.package config.terminal.kitty.package ]; diff --git a/modules/media/screen-recording/default.nix b/modules/media/screen-recording/default.nix index 163ee3f..67e422c 100644 --- a/modules/media/screen-recording/default.nix +++ b/modules/media/screen-recording/default.nix @@ -9,7 +9,7 @@ let screenRecordingScript = pkgs.writeShellApplication { name = "screen-recording"; runtimeInputs = [ - pkgs.bash + config.terminal.bash.package config.media.slurp.package config.media.wf-recorder.package ]; diff --git a/modules/networking/usque/default.nix b/modules/networking/usque/default.nix index ffde47a..76d89cd 100644 --- a/modules/networking/usque/default.nix +++ b/modules/networking/usque/default.nix @@ -10,7 +10,7 @@ let name = "usque-warp"; runtimeInputs = [ config.networking.usque.package - pkgs.bash + config.terminal.bash.package ]; text = builtins.readFile ./usque-warp.sh; }; diff --git a/modules/office/calcurse/default.nix b/modules/office/calcurse/default.nix index 18a863b..0a4acba 100644 --- a/modules/office/calcurse/default.nix +++ b/modules/office/calcurse/default.nix @@ -11,7 +11,7 @@ let calcursePackage = pkgs.symlinkJoin { name = "calcurse-wrapped"; paths = [ - pkgs.bash + config.terminal.bash.package pkgs.calcurse ] ++ lib.optionals config.development.nixvim.enable [ config.development.nixvim.package ] diff --git a/modules/security/gopass/default.nix b/modules/security/gopass/default.nix index e543c03..4cf9182 100644 --- a/modules/security/gopass/default.nix +++ b/modules/security/gopass/default.nix @@ -14,7 +14,7 @@ let config.security.gopass.package config.security.gpg.package config.security.ssh.package - pkgs.bash + config.terminal.bash.package ]; text = builtins.replaceStrings @@ -137,7 +137,7 @@ in gopassSyncInit = pkgs.writeShellApplication { name = "gopass-sync-init"; runtimeInputs = [ - pkgs.bash + config.terminal.bash.package config.development.git.package ]; text = diff --git a/modules/security/gpg/default.nix b/modules/security/gpg/default.nix index ccab0dc..6956711 100644 --- a/modules/security/gpg/default.nix +++ b/modules/security/gpg/default.nix @@ -9,7 +9,7 @@ let gpgBackupScript = pkgs.writeShellApplication { name = "gpg-backup"; runtimeInputs = [ - pkgs.bash + config.terminal.bash.package pkgs.gnupg pkgs.gnutar pkgs.coreutils diff --git a/modules/system/deep-clean/default.nix b/modules/system/deep-clean/default.nix index 02022fe..99b4617 100644 --- a/modules/system/deep-clean/default.nix +++ b/modules/system/deep-clean/default.nix @@ -8,7 +8,7 @@ let deepCleanScript = pkgs.writeShellApplication { name = "deep-clean"; - runtimeInputs = [ pkgs.bash ]; + runtimeInputs = [ config.terminal.bash.package ]; text = builtins.readFile ./deep-clean.sh; }; in diff --git a/modules/system/nix-update/default.nix b/modules/system/nix-update/default.nix index 4d00c77..b597245 100644 --- a/modules/system/nix-update/default.nix +++ b/modules/system/nix-update/default.nix @@ -12,7 +12,7 @@ let pkgs.git pkgs.nix config.programs.home-manager.package - pkgs.bash + config.terminal.bash.package ]; text = builtins.readFile ./nix-update.sh; }; diff --git a/modules/terminal/bash/default.nix b/modules/terminal/bash/default.nix index 20a0067..7773937 100644 --- a/modules/terminal/bash/default.nix +++ b/modules/terminal/bash/default.nix @@ -1,7 +1,16 @@ # GNU Bourne Again SHell -{ lib, ... }: +# +# This module is always enabled — there is no enable option. +# All modules that need bash should use `config.terminal.bash.package` +# instead of `pkgs.bash` directly. +{ lib, pkgs, ... }: { options.terminal.bash = { - enable = lib.mkEnableOption "Enables bash."; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.bash; + defaultText = "pkgs.bash"; + description = "The bash package to use."; + }; }; } diff --git a/modules/terminal/fzf/assertions.nix b/modules/terminal/fzf/assertions.nix index 9fb24b9..75006fe 100644 --- a/modules/terminal/fzf/assertions.nix +++ b/modules/terminal/fzf/assertions.nix @@ -1,13 +1,13 @@ -# Validates zsh or bash is enabled when fzf is enabled +# fzf shell integration is only provided for zsh. bash is scripting-only +# (not a login shell), so it does not receive fzf integration. { config, ... }: { assertions = [ { - assertion = - !config.terminal.fzf.enable || config.terminal.zsh.enable || config.terminal.bash.enable; + assertion = !config.terminal.fzf.enable || config.terminal.zsh.enable; message = '' - terminal.fzf is enabled but neither terminal.zsh.enable nor terminal.bash.enable is set. - fzf shell integration requires zsh or bash. Please enable at least one. + terminal.fzf is enabled but terminal.zsh.enable is not set. + fzf shell integration requires zsh. Please enable zsh. ''; } ]; diff --git a/modules/terminal/fzf/default.nix b/modules/terminal/fzf/default.nix index 7065d2f..613134e 100644 --- a/modules/terminal/fzf/default.nix +++ b/modules/terminal/fzf/default.nix @@ -60,6 +60,5 @@ }; programs.zsh.initContent = lib.mkIf config.terminal.zsh.enable (lib.mkAfter shellIntegration); - programs.bash.initExtra = lib.mkIf config.terminal.bash.enable (lib.mkAfter shellIntegration); }; } diff --git a/modules/terminal/zsh/default.nix b/modules/terminal/zsh/default.nix index 9848fb8..0f0471c 100644 --- a/modules/terminal/zsh/default.nix +++ b/modules/terminal/zsh/default.nix @@ -43,8 +43,6 @@ ''; }; - programs.bash.initExtra = lib.mkIf config.terminal.bash.enable (lib.mkAfter nixCommandWrappers); - home.sessionVariables.SHELL = "${lib.getExe config.terminal.zsh.package}"; }; } diff --git a/updates/default.nix b/updates/default.nix index 2cf2894..62f7d03 100644 --- a/updates/default.nix +++ b/updates/default.nix @@ -5,7 +5,10 @@ let in pkgs.writeShellApplication { name = "updates"; - runtimeInputs = [ chromiumExtensions ]; + runtimeInputs = [ + chromiumExtensions + pkgs.bash + ]; text = '' echo "Running all update checks..." echo "" diff --git a/updates/web/chromium/check-chromium-extension-updates.lua b/updates/web/chromium/check-chromium-extension-updates.lua new file mode 100644 index 0000000..815e8a4 --- /dev/null +++ b/updates/web/chromium/check-chromium-extension-updates.lua @@ -0,0 +1,56 @@ +#!/usr/bin/env luajit +-- Checks for updated Chromium extensions against their GitHub releases/tags. + +local extensions = { + -- NOTE: replaced by the derivation build step, with the + -- detailed list of all extensions that we need to check + --@@EXTENSIONS@@-- +} + +local function printf(fmt, ...) + io.write(string.format(fmt, ...)) +end + +print("Checking for Chromium extension updates...") +print("----------------------------------------------") +print("") + +for _, ext in ipairs(extensions) do + local isTag = ext.updateType == "tag" + local endpoint + local jqFilter + if isTag then + endpoint = string.format("https://api.github.com/repos/%s/%s/tags", ext.owner, ext.repo) + jqFilter = ".[0].name" + else + endpoint = string.format("https://api.github.com/repos/%s/%s/releases/latest", ext.owner, ext.repo) + jqFilter = ".tag_name" + end + + local proc = io.popen(string.format("curl -sL --fail %q | jq -r %q", endpoint, jqFilter)) + local latestRaw = (proc and proc:read("*a") or ""):gsub("%s+$", "") + if proc then + proc:close() + end + + if latestRaw == "" or latestRaw == "null" then + printf("FAIL [%s] Failed to fetch data from GitHub API.\n", ext.pname) + else + local prefix = ext.tagPrefix + local latest = latestRaw + if prefix ~= "" and latestRaw:sub(1, #prefix) == prefix then + latest = latestRaw:sub(#prefix + 1) + end + + if latest ~= ext.version then + printf("UPDATE [%s] %s -> %s\n", ext.pname, ext.version, latest) + printf(" Repo: https://github.com/%s/%s\n", ext.owner, ext.repo) + print("") + else + printf("OK [%s] %s\n", ext.pname, ext.version) + end + end +end + +print("----------------------------------------------") +print("Done!") diff --git a/updates/web/chromium/extensions.nix b/updates/web/chromium/extensions.nix index d9de16d..ab6e818 100644 --- a/updates/web/chromium/extensions.nix +++ b/updates/web/chromium/extensions.nix @@ -1,54 +1,45 @@ -{ pkgs, lib, ... }: +{ + pkgs, + lib, + ... +}: let extensions = import ../../../modules/web/chromium/extensions/metadata.nix; + + luaExtensionList = lib.concatMapStringsSep "\n" (ext: '' + { pname = "${ext.pname}", owner = "${ext.owner}", repo = "${ext.repo}", version = "${ext.version}", updateType = "${ext.updateType or "release"}", tagPrefix = "${ext.tagPrefix}" }, + '') extensions; + + luaScript = pkgs.writeText "check-chromium-extension-updates.lua" ( + builtins.replaceStrings [ "--@@EXTENSIONS@@--" ] [ luaExtensionList ] ( + builtins.readFile ./check-chromium-extension-updates.lua + ) + ); in { - mkUpdateScript = pkgs.writeShellApplication { - name = "check-chromium-extension-updates"; - runtimeInputs = [ - pkgs.curl - pkgs.jq + mkUpdateScript = pkgs.stdenv.mkDerivation { + pname = "check-chromium-extension-updates"; + version = "0.1.0"; + dontUnpack = true; + nativeBuildInputs = [ + pkgs.luajit + pkgs.makeWrapper ]; - text = '' - echo "Checking for Chromium extension updates..." - echo "----------------------------------------------" - echo "" - - ${lib.concatMapStringsSep "\n" ( - ext: - let - isTag = (ext.updateType or "release") == "tag"; - apiEndpoint = - if isTag then - "https://api.github.com/repos/${ext.owner}/${ext.repo}/tags" - else - "https://api.github.com/repos/${ext.owner}/${ext.repo}/releases/latest"; - jqFilter = if isTag then ".[0].name" else ".tag_name"; - in - '' - # Check ${ext.pname} - LATEST_RAW=$(curl -sL --fail "${apiEndpoint}" | jq -r '${jqFilter}') - - if [ -z "$LATEST_RAW" ] || [ "$LATEST_RAW" == "null" ]; then - echo "FAIL [${ext.pname}] Failed to fetch data from GitHub API." - else - PREFIX="${ext.tagPrefix}" - LATEST_STRIPPED="''${LATEST_RAW#"$PREFIX"}" - - if [ "$LATEST_STRIPPED" != "${ext.version}" ]; then - echo "UPDATE [${ext.pname}] ${ext.version} -> $LATEST_STRIPPED" - echo " Repo: https://github.com/${ext.owner}/${ext.repo}" - echo "" - else - echo "OK [${ext.pname}] ${ext.version}" - fi - fi - '' - ) extensions} - - echo "----------------------------------------------" - echo "Done!" + installPhase = '' + mkdir -p $out/bin + install -m755 ${luaScript} $out/bin/check-chromium-extension-updates + patchShebangs $out/bin/check-chromium-extension-updates + wrapProgram $out/bin/check-chromium-extension-updates \ + --prefix PATH : "${ + lib.makeBinPath [ + pkgs.curl + pkgs.jq + ] + }" ''; + meta = { + mainProgram = "check-chromium-extension-updates"; + }; }; } |
