aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArpit Chakladar <arpitchakladar@gmail.com>2026-09-09 17:59:41 +0530
committerArpit Chakladar <arpitchakladar@gmail.com>2026-09-09 17:59:41 +0530
commit4a9bd882f7fdf00b26427ea70572dc38e7cab8bf (patch)
tree503734d082f6ec389b5ebdf359e0554617e7109d
parent1f82802bf50bb5c935efea47aef0418fc602492e (diff)
parent022e4a37219c2ad8f0aa6cbb8281b060b7e98bf0 (diff)
downloadhome-manager-config-4a9bd882f7fdf00b26427ea70572dc38e7cab8bf.tar.gz
home-manager-config-4a9bd882f7fdf00b26427ea70572dc38e7cab8bf.zip
Merge branch 'setting-up-bash'
-rw-r--r--modules/communication/neomutt/default.nix2
-rw-r--r--modules/development/lazygit/default.nix2
-rw-r--r--modules/file-management/yazi/default.nix2
-rw-r--r--modules/media/screen-recording/default.nix2
-rw-r--r--modules/networking/usque/default.nix2
-rw-r--r--modules/office/calcurse/default.nix2
-rw-r--r--modules/security/gopass/default.nix4
-rw-r--r--modules/security/gpg/default.nix2
-rw-r--r--modules/system/deep-clean/default.nix2
-rw-r--r--modules/system/nix-update/default.nix2
-rw-r--r--modules/terminal/bash/default.nix13
-rw-r--r--modules/terminal/fzf/assertions.nix10
-rw-r--r--modules/terminal/fzf/default.nix1
-rw-r--r--modules/terminal/zsh/default.nix2
-rw-r--r--updates/default.nix5
-rw-r--r--updates/web/chromium/check-chromium-extension-updates.lua56
-rw-r--r--updates/web/chromium/extensions.nix81
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";
+ };
};
}