From bf7a0f704a7ffc64d77f53d940f49f0bd9d4d35e Mon Sep 17 00:00:00 2001 From: Arpit Chakladar Date: Fri, 10 Jul 2026 02:05:18 +0530 Subject: feat: using neomutt instead of meli for the tui email client using a private module that stores the private config options for the user which are not to be pushed to the public repo --- flake.nix | 6 +---- modules/private/default.example.nix | 11 -------- modules/private/email.example.nix | 18 ++----------- modules/private/git.example.nix | 12 ++++++--- modules/programs/default.nix | 2 +- modules/programs/email/default.nix | 39 ++++------------------------ modules/programs/git/default.nix | 27 +++---------------- modules/programs/meli/assertions.nix | 27 ------------------- modules/programs/meli/default.nix | 46 --------------------------------- modules/programs/neomutt/assertions.nix | 27 +++++++++++++++++++ modules/programs/neomutt/default.nix | 17 ++++++++++++ modules/scripts/default.nix | 13 ---------- users/arpit.nix | 9 ++++--- 13 files changed, 71 insertions(+), 183 deletions(-) delete mode 100644 modules/private/default.example.nix delete mode 100644 modules/programs/meli/assertions.nix delete mode 100644 modules/programs/meli/default.nix create mode 100644 modules/programs/neomutt/assertions.nix create mode 100644 modules/programs/neomutt/default.nix diff --git a/flake.nix b/flake.nix index 5a36fee..3a28b51 100644 --- a/flake.nix +++ b/flake.nix @@ -32,7 +32,6 @@ let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; - lib = nixpkgs.lib; in { formatter.${system} = pkgs.nixfmt-tree; @@ -65,10 +64,7 @@ scheme = ./assets/onedark-dark.yml; } nixvim.homeModules.nixvim - ] - ++ lib.optional (builtins.pathExists ./modules/private/default.nix) ( - import ./modules/private/default.nix - ); + ]; }; }; }; diff --git a/modules/private/default.example.nix b/modules/private/default.example.nix deleted file mode 100644 index e5b1a84..0000000 --- a/modules/private/default.example.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, ... }: - -{ - # This file is a template for modules/private/default.nix - # Copy to modules/private/default.nix and fill in your secrets. - - imports = [ - ./git.nix - ./email.nix - ]; -} diff --git a/modules/private/email.example.nix b/modules/private/email.example.nix index ae3b475..0e35e26 100644 --- a/modules/private/email.example.nix +++ b/modules/private/email.example.nix @@ -1,16 +1,14 @@ { config, ... }: -let - mailDir = "${config.home.homeDirectory}/.local/mail"; -in { - accounts.email.accounts = { + config.accounts.email.accounts = { "example" = { realName = "Example User"; address = "user@example.com"; userName = "user@example.com"; passwordCommand = "${config.programs.gopass.package}/bin/gopass show -o mail/example"; flavor = "gmail.com"; + primary = true; mbsync = { enable = true; @@ -28,16 +26,4 @@ in imapnotify.enable = false; }; }; - - # Mbsync config - programs.mbsync = { - enable = true; - directory = mailDir; - }; - - # Notmuch config - programs.notmuch = { - enable = true; - database.path = "${mailDir}/.notmuch"; - }; } diff --git a/modules/private/git.example.nix b/modules/private/git.example.nix index 888c769..70e59b4 100644 --- a/modules/private/git.example.nix +++ b/modules/private/git.example.nix @@ -1,8 +1,12 @@ -{ config, ... }: +{ ... }: { - programs.git.signing = { - key = "EXAMPLE_GPG_KEY_ID"; - signByDefault = true; + config.programs.git = { + username = "Arpit Chakladar"; + email = "arpitchakladar+git@gmail.com"; + signing = { + key = "EXAMPLE_GPG_KEY_ID"; + signByDefault = true; + }; }; } diff --git a/modules/programs/default.nix b/modules/programs/default.nix index 1527087..cba7617 100644 --- a/modules/programs/default.nix +++ b/modules/programs/default.nix @@ -24,7 +24,7 @@ ./lf ./lsd ./maim - ./meli + ./neomutt ./nixvim ./nvtop ./opencode diff --git a/modules/programs/email/default.nix b/modules/programs/email/default.nix index 36dfc95..3a57cf0 100644 --- a/modules/programs/email/default.nix +++ b/modules/programs/email/default.nix @@ -2,12 +2,11 @@ { config, lib, - pkgs, ... }: let - mailDir = "${config.home.homeDirectory}/.local/mail"; + mailDir = "${config.home.homeDirectory}/.local/share/mail"; in { options.programs.email = { @@ -15,39 +14,11 @@ in }; config = lib.mkIf config.programs.email.enable { - home.packages = [ - pkgs.mbsync - pkgs.notmuch - ]; + programs.mbsync.enable = true; + programs.notmuch.enable = true; - home.sessionVariables = { - MAILDIR = mailDir; - NOTMUCH_CONFIG = "${config.xdg.configHome}/notmuch/notmuchrc"; - }; + accounts.email.maildirBasePath = mailDir; - xdg.configFile."notmuch/notmuch.config" = { - text = '' - [database] - path=${mailDir}/.notmuch - - [user] - name= - address= - primary_key= - - [new] - tags=unclassified;new; - ignore= - - [search] - exclude_tags=deleted;spam; - - [maildir] - synchronize_flags=true - - [crypto] - gpg_path=${pkgs.gnupg}/bin/gpg - ''; - }; + home.sessionVariables.MAILDIR = mailDir; }; } diff --git a/modules/programs/git/default.nix b/modules/programs/git/default.nix index 91498b0..cb4519d 100644 --- a/modules/programs/git/default.nix +++ b/modules/programs/git/default.nix @@ -6,7 +6,10 @@ # Git - Distributed version control system { - imports = [ ./assertions.nix ]; + imports = [ + ./assertions.nix + ] + ++ lib.optional (builtins.pathExists ../../private/git.nix) ../../private/git.nix; options.programs.git = { username = lib.mkOption { @@ -20,25 +23,10 @@ }; useSSH = lib.mkEnableOption "Use SSH instead of HTTPS for common git platforms."; - - signing = { - key = lib.mkOption { - type = lib.types.nullOr lib.types.str; - default = null; - description = "GPG signing key ID."; - }; - signByDefault = lib.mkEnableOption "Sign commits by default"; - }; }; config = lib.mkIf config.programs.git.enable { programs.git = { - includes = [ - { - path = "${config.xdg.configHome}/git/personal"; - condition = "hasconfig:remote.*.url:git@*"; - } - ]; settings = lib.recursiveUpdate { @@ -57,13 +45,6 @@ url."git@git.sr.ht:".insteadOf = "https://git.sr.ht/"; } ); - extraConfig = { - user.signingKey = lib.mkIf ( - config.programs.git.signing.key != null - ) config.programs.git.signing.key; - commit.gpgSign = config.programs.git.signing.signByDefault; - tag.forceSignAnnotated = config.programs.git.signing.signByDefault; - }; }; }; } diff --git a/modules/programs/meli/assertions.nix b/modules/programs/meli/assertions.nix deleted file mode 100644 index d651047..0000000 --- a/modules/programs/meli/assertions.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ config, ... }: - -{ - assertions = [ - { - assertion = !config.programs.meli.enable || config.programs.less.enable; - message = '' - programs.meli is enabled but programs.less.enable is not. - meli requires less as its pager. Please enable programs.less. - ''; - } - { - assertion = !config.programs.meli.enable || config.programs.bat.enable; - message = '' - programs.meli is enabled but programs.bat.enable is not. - meli requires bat for text/html filtering. Please enable programs.bat. - ''; - } - { - assertion = !config.programs.meli.enable || config.programs.email.enable; - message = '' - programs.meli is enabled but programs.email.enable is not. - meli requires the email module (mbsync + notmuch) to be enabled. - ''; - } - ]; -} diff --git a/modules/programs/meli/default.nix b/modules/programs/meli/default.nix deleted file mode 100644 index d17a3db..0000000 --- a/modules/programs/meli/default.nix +++ /dev/null @@ -1,46 +0,0 @@ -# meli - Terminal email client -{ - config, - lib, - pkgs, - ... -}: - -let - mailDir = "${config.home.homeDirectory}/.local/mail"; -in -{ - imports = [ ./assertions.nix ]; - - config = lib.mkIf config.programs.meli.enable { - home.packages = [ pkgs.meli ]; - - xdg.configFile."meli/config.toml" = { - text = '' - [terminal] - themes = "dark" - - [notifications] - enable = false - - [pager] - html_filter = "${pkgs.bat}/bin/bat --language=html" - - [composing] - editor_command = "${pkgs.neovim}/bin/nvim" - - [pgp] - auto_verify_signatures = true - gpg_binary = "${pkgs.gnupg}/bin/gpg" - - [search] - backend = "notmuch" - database_path = "${mailDir}/.notmuch" - ''; - }; - - programs.zsh.initExtra = lib.mkAfter '' - alias meli='meli-sync && meli' - ''; - }; -} diff --git a/modules/programs/neomutt/assertions.nix b/modules/programs/neomutt/assertions.nix new file mode 100644 index 0000000..d651047 --- /dev/null +++ b/modules/programs/neomutt/assertions.nix @@ -0,0 +1,27 @@ +{ config, ... }: + +{ + assertions = [ + { + assertion = !config.programs.meli.enable || config.programs.less.enable; + message = '' + programs.meli is enabled but programs.less.enable is not. + meli requires less as its pager. Please enable programs.less. + ''; + } + { + assertion = !config.programs.meli.enable || config.programs.bat.enable; + message = '' + programs.meli is enabled but programs.bat.enable is not. + meli requires bat for text/html filtering. Please enable programs.bat. + ''; + } + { + assertion = !config.programs.meli.enable || config.programs.email.enable; + message = '' + programs.meli is enabled but programs.email.enable is not. + meli requires the email module (mbsync + notmuch) to be enabled. + ''; + } + ]; +} diff --git a/modules/programs/neomutt/default.nix b/modules/programs/neomutt/default.nix new file mode 100644 index 0000000..c0e16d4 --- /dev/null +++ b/modules/programs/neomutt/default.nix @@ -0,0 +1,17 @@ +# neomutt - Terminal email client +{ + config, + lib, + ... +}: + +{ + imports = [ ./assertions.nix ]; + + config = lib.mkIf config.programs.neomutt.enable { + programs.neomutt = { + sidebar.enable = true; + sort = "reverse-threads"; + }; + }; +} diff --git a/modules/scripts/default.nix b/modules/scripts/default.nix index 5e6b88b..9d29192 100644 --- a/modules/scripts/default.nix +++ b/modules/scripts/default.nix @@ -190,19 +190,6 @@ let } ]; }; - meli-sync = { - path = ./meli-sync.sh; - deps = [ - pkgs.mbsync - pkgs.notmuch - ]; - conditions = [ - { - option = "programs.meli.enable"; - value = true; - } - ]; - }; }; # Check whether all conditions for a script are satisfied diff --git a/users/arpit.nix b/users/arpit.nix index 31aa76c..1729588 100644 --- a/users/arpit.nix +++ b/users/arpit.nix @@ -1,6 +1,11 @@ { config, lib, ... }: { + imports = [ + ../modules/private/email.nix + ../modules/private/git.nix + ]; + nixpkgs.config.allowUnfree = true; home.username = "arpit"; @@ -24,8 +29,6 @@ programs.ffmpeg.enable = true; programs.fzf.enable = true; programs.git.enable = true; - programs.git.username = "Arpit Chakladar"; - programs.git.email = "arpitchakladar+git@gmail.com"; programs.git.useSSH = true; programs.git.signing.signByDefault = true; programs.gpg.enable = true; @@ -37,7 +40,7 @@ programs.lf.enable = true; programs.lsd.enable = true; programs.maim.enable = true; - programs.meli.enable = true; + programs.neomutt.enable = true; programs.nixvim.enable = true; programs.nvtop.enable = true; programs.opencode.enable = true; -- cgit v1.2.3