diff options
| author | Arpit Chakladar <arpitchakladar@proton.me> | 2026-07-09 00:08:45 +0530 |
|---|---|---|
| committer | Arpit Chakladar <arpitchakladar@proton.me> | 2026-07-09 00:08:45 +0530 |
| commit | 0279e3b3f34d7f29a6e6c7d499873d1f6a889a34 (patch) | |
| tree | 61a873ae1635b1c54fc63d79acc95bd108207163 /modules/programs | |
| parent | 53d893cde30b11388ba77b904ee9a406c3e879ae (diff) | |
| download | home-manager-config-0279e3b3f34d7f29a6e6c7d499873d1f6a889a34.tar.gz home-manager-config-0279e3b3f34d7f29a6e6c7d499873d1f6a889a34.zip | |
feat: added aerc (email client), pass (password manager), gpg (encryption manager)
Using aerc email client with imap and smtp with mbsync to download the mail locally and notmuch to query it
Added custom scripts to automatically add email configurations for popular email providers for mbsync
Using pass password manager with gpg for encryption
Using git with pass instead of storing the github token in a plain-text file
Diffstat (limited to 'modules/programs')
| -rw-r--r-- | modules/programs/aerc/default.nix | 54 | ||||
| -rw-r--r-- | modules/programs/default.nix | 4 | ||||
| -rw-r--r-- | modules/programs/git/default.nix | 41 | ||||
| -rw-r--r-- | modules/programs/gpg/default.nix | 18 | ||||
| -rw-r--r-- | modules/programs/less/default.nix | 15 | ||||
| -rw-r--r-- | modules/programs/pass/default.nix | 69 | ||||
| -rw-r--r-- | modules/programs/zsh/default.nix | 3 |
7 files changed, 190 insertions, 14 deletions
diff --git a/modules/programs/aerc/default.nix b/modules/programs/aerc/default.nix new file mode 100644 index 0000000..92b1cd6 --- /dev/null +++ b/modules/programs/aerc/default.nix @@ -0,0 +1,54 @@ +{ + config, + lib, + ... +}: +{ + config = lib.mkIf config.programs.aerc.enable { + programs.aerc = { + extraConfig = { + general = { + unsafe-accounts-conf = false; + default-save-path = "${config.home.homeDirectory}/Downloads"; + use-terminal-pinentry = false; + }; + + ui = { + index-columns = "flags:4,name<32%,subject,date>="; + column-name = "{{with index .From 0}}{{.Address}}{{if .Name}} ({{.Name}}){{end}}{{end}}"; + timestamp-format = "2006-01-02 15:04"; + this-day-time-format = "15:04"; + this-week-time-format = "Mon 15:04"; + sidebar-width = 24; + }; + + viewer = { + pager = lib.getExe config.programs.less.package; + }; + + filters = '' + text/plain = wrap -w 100 | colorize + text/html = ! html + text/* = ${lib.getExe config.programs.bat.package} -fP --file-name="''${AERC_FILENAME:-message.txt}" --style=plain + message/delivery-status = colorize + .headers = colorize + ''; + + hooks = { + mail-added = "aerc-sync-mail \"$AERC_ACCOUNT\""; + mail-deleted = "aerc-sync-mail \"$AERC_ACCOUNT\""; + flag-changed = "aerc-sync-mail \"$AERC_ACCOUNT\""; + }; + }; + }; + + home.file.".config/aerc/notmuch-query-map".text = '' + Inbox=tag:inbox and not tag:deleted + Unread=tag:unread and not tag:deleted + Flagged=tag:flagged and not tag:deleted + Sent=folder:sent or folder:Sent or folder:"[Gmail]/Sent Mail" + Archive=not tag:inbox and not tag:deleted + All=* + ''; + }; +} diff --git a/modules/programs/default.nix b/modules/programs/default.nix index 5f6b49a..ed54f24 100644 --- a/modules/programs/default.nix +++ b/modules/programs/default.nix @@ -3,6 +3,7 @@ # Tools - Collection of tool configurations (browsers, editors, utilities, etc.) { imports = [ + ./aerc ./aria2 ./bat ./bluetui @@ -15,10 +16,12 @@ ./ffmpeg ./fzf ./git + ./gpg ./heroic ./htop ./impala ./kitty + ./less ./lf ./lsd ./maim @@ -29,6 +32,7 @@ ./openvpn ./ouch ./pamixer + ./pass ./playerctl ./qemu ./slop diff --git a/modules/programs/git/default.nix b/modules/programs/git/default.nix index 24d63c7..cfba093 100644 --- a/modules/programs/git/default.nix +++ b/modules/programs/git/default.nix @@ -1,6 +1,15 @@ -{ lib, config, ... }: +{ + config, + lib, + pkgs, + ... +}: # Git - Distributed version control system +let + passCfg = config.programs.pass; + passGitHelper = lib.getExe pkgs.pass-git-helper; +in { options.programs.git = { username = lib.mkOption { @@ -15,19 +24,23 @@ config = lib.mkIf config.programs.git.enable { programs.git = { - settings = { - user = { - name = config.programs.git.username; - email = config.programs.git.email; - }; - credential.helper = "store --file ${config.xdg.cacheHome}/git/credential"; - core.askPass = ""; - }; + settings = + lib.recursiveUpdate + { + user = { + name = config.programs.git.username; + email = config.programs.git.email; + }; + core.askPass = ""; + } + ( + lib.optionalAttrs passCfg.enable { + credential."https://github.com" = { + username = passCfg.github.username; + helper = passGitHelper; + }; + } + ); }; - - # The base directory of the credential file must exist - home.activation.createGitCacheDirectory = lib.hm.dag.entryAfter [ - "writeBoundary" - ] "mkdir -p ${config.xdg.cacheHome}/git"; }; } diff --git a/modules/programs/gpg/default.nix b/modules/programs/gpg/default.nix new file mode 100644 index 0000000..f6bce6e --- /dev/null +++ b/modules/programs/gpg/default.nix @@ -0,0 +1,18 @@ +{ + config, + lib, + pkgs, + ... +}: + +{ + config = lib.mkIf config.programs.gpg.enable { + services.gpg-agent = { + enable = true; + enableZshIntegration = true; + defaultCacheTtl = 3600; + maxCacheTtl = 86400; + pinentry.package = pkgs.pinentry-gtk2; + }; + }; +} diff --git a/modules/programs/less/default.nix b/modules/programs/less/default.nix new file mode 100644 index 0000000..516377d --- /dev/null +++ b/modules/programs/less/default.nix @@ -0,0 +1,15 @@ +{ config, lib, ... }: + +# less - terminal pager +{ + config = lib.mkIf config.programs.less.enable { + programs.less = { + options = [ + "--RAW-CONTROL-CHARS" + "--quit-if-one-screen" + "--no-init" + "--ignore-case" + ]; + }; + }; +} diff --git a/modules/programs/pass/default.nix b/modules/programs/pass/default.nix new file mode 100644 index 0000000..0d11ab7 --- /dev/null +++ b/modules/programs/pass/default.nix @@ -0,0 +1,69 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.programs.pass; + githubMapping = '' + [github.com] + target = github/token + username = ${cfg.github.username} + username_extractor = static + + [github.com/*] + target = github/token + username = ${cfg.github.username} + username_extractor = static + + [*.github.com] + target = github/token + username = ${cfg.github.username} + username_extractor = static + + [*.github.com/*] + target = github/token + username = ${cfg.github.username} + username_extractor = static + ''; +in +{ + options.programs.pass = { + enable = lib.mkEnableOption "pass password manager"; + + package = lib.mkPackageOption pkgs "pass" { }; + + storeDir = lib.mkOption { + type = lib.types.str; + default = "${config.home.homeDirectory}/.password-store"; + description = "Path to the pass password store."; + }; + + github = { + username = lib.mkOption { + type = lib.types.str; + default = "x-access-token"; + description = "Username returned to Git for GitHub HTTPS credentials."; + }; + + tokenEntry = lib.mkOption { + type = lib.types.str; + default = "github/token"; + description = "Pass entry containing the GitHub token on its first line."; + }; + }; + }; + + config = lib.mkIf cfg.enable { + programs.password-store = { + enable = true; + package = cfg.package; + settings = { + PASSWORD_STORE_DIR = cfg.storeDir; + }; + }; + + home.file.".config/pass-git-helper/git-pass-mapping.ini".text = githubMapping; + }; +} diff --git a/modules/programs/zsh/default.nix b/modules/programs/zsh/default.nix index 482c201..f3bdbb1 100644 --- a/modules/programs/zsh/default.nix +++ b/modules/programs/zsh/default.nix @@ -22,6 +22,9 @@ autoload -U colors && colors + export GPG_TTY="$(tty)" + gpg-connect-agent updatestartuptty /bye >/dev/null 2>&1 + bindkey "^[[3~" delete-char bindkey "^?" backward-delete-char ${nixCommandWrappers} |
