mirror of
https://github.com/nmasur/dotfiles
synced 2024-11-26 13:05:37 +00:00
add aerc and fix nvim 0.8
This commit is contained in:
parent
2af30faf7c
commit
dfd903d3c9
@ -33,7 +33,7 @@ nixpkgs.lib.nixosSystem {
|
|||||||
../../modules/graphical
|
../../modules/graphical
|
||||||
../../modules/gaming
|
../../modules/gaming
|
||||||
../../modules/applications
|
../../modules/applications
|
||||||
../../modules/mail/himalaya.nix
|
../../modules/mail/default.nix
|
||||||
../../modules/repositories/notes.nix
|
../../modules/repositories/notes.nix
|
||||||
../../modules/services/keybase.nix
|
../../modules/services/keybase.nix
|
||||||
../../modules/services/gnupg.nix
|
../../modules/services/gnupg.nix
|
||||||
|
186
modules/mail/aerc.nix
Normal file
186
modules/mail/aerc.nix
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
{ config, pkgs, ... }: {
|
||||||
|
|
||||||
|
config = {
|
||||||
|
|
||||||
|
home-manager.users.${config.user} = {
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
w3m # Render HTML
|
||||||
|
dante # Socksify for rendering HTML
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.aerc = {
|
||||||
|
enable = true;
|
||||||
|
extraBinds = {
|
||||||
|
# Binds are of the form <key sequence> = <command to run>
|
||||||
|
# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>"
|
||||||
|
# If you wish to bind #, you can wrap the key sequence in quotes: "#" = quit
|
||||||
|
global = {
|
||||||
|
"<C-p>" = ":prev-tab<Enter>";
|
||||||
|
"<C-n>" = ":next-tab <Enter>";
|
||||||
|
"<C-t>" = ":term<Enter>";
|
||||||
|
"?" = ":help keys<Enter>";
|
||||||
|
};
|
||||||
|
|
||||||
|
messages = {
|
||||||
|
q = ":quit<Enter>";
|
||||||
|
|
||||||
|
j = ":next <Enter>";
|
||||||
|
"<Down>" = ":next<Enter>";
|
||||||
|
"<C-d>" = ":next 50%<Enter>";
|
||||||
|
"<C-f>" = ":next 100%<Enter>";
|
||||||
|
"<PgDn>" = ":next 100%<Enter>";
|
||||||
|
|
||||||
|
k = ":prev <Enter>";
|
||||||
|
"<Up>" = ":prev<Enter>";
|
||||||
|
"<C-u>" = ":prev 50%<Enter>";
|
||||||
|
"<C-b>" = ":prev 100%<Enter>";
|
||||||
|
"<PgUp>" = ":prev 100%<Enter>";
|
||||||
|
g = ":select 0 <Enter>";
|
||||||
|
G = ":select -1<Enter>";
|
||||||
|
|
||||||
|
J = ":next-folder <Enter>";
|
||||||
|
K = ":prev-folder<Enter>";
|
||||||
|
H = ":collapse-folder<Enter>";
|
||||||
|
L = ":expand-folder<Enter>";
|
||||||
|
|
||||||
|
v = ":mark -t<Enter>";
|
||||||
|
V = ":mark -v<Enter>";
|
||||||
|
|
||||||
|
T = ":toggle-threads<Enter>";
|
||||||
|
|
||||||
|
"<Enter>" = ":view<Enter>";
|
||||||
|
d = ":prompt 'Really delete this message?' 'delete-message'<Enter>";
|
||||||
|
D = ":delete<Enter>";
|
||||||
|
A = ":archive flat<Enter>";
|
||||||
|
|
||||||
|
C = ":compose<Enter>";
|
||||||
|
|
||||||
|
rr = ":reply -a<Enter>";
|
||||||
|
rq = ":reply -aq<Enter>";
|
||||||
|
Rr = ":reply<Enter>";
|
||||||
|
Rq = ":reply -q<Enter>";
|
||||||
|
|
||||||
|
c = ":cf<space>";
|
||||||
|
"$" = ":term<space>";
|
||||||
|
"!" = ":term<space>";
|
||||||
|
"|" = ":pipe<space>";
|
||||||
|
|
||||||
|
"/" = ":search<space>";
|
||||||
|
"\\" = ":filter <space>";
|
||||||
|
n = ":next-result<Enter>";
|
||||||
|
N = ":prev-result<Enter>";
|
||||||
|
"<Esc>" = ":clear<Enter>";
|
||||||
|
};
|
||||||
|
|
||||||
|
"messages:folder=Drafts" = { "<Enter>" = ":recall<Enter>"; };
|
||||||
|
|
||||||
|
view = {
|
||||||
|
"/" = ":toggle-key-passthrough <Enter> /";
|
||||||
|
q = ":close<Enter>";
|
||||||
|
O = ":open<Enter>";
|
||||||
|
S = ":save<space>";
|
||||||
|
"|" = ":pipe<space>";
|
||||||
|
D = ":delete<Enter>";
|
||||||
|
A = ":archive flat<Enter>";
|
||||||
|
|
||||||
|
"<C-l>" = ":open-link <space>";
|
||||||
|
|
||||||
|
f = ":forward <Enter>";
|
||||||
|
rr = ":reply -a<Enter>";
|
||||||
|
rq = ":reply -aq<Enter>";
|
||||||
|
Rr = ":reply<Enter>";
|
||||||
|
Rq = ":reply -q<Enter>";
|
||||||
|
|
||||||
|
H = ":toggle-headers<Enter>";
|
||||||
|
"<C-k>" = ":prev-part<Enter>";
|
||||||
|
"<C-j>" = ":next-part<Enter>";
|
||||||
|
J = ":next <Enter>";
|
||||||
|
K = ":prev<Enter>";
|
||||||
|
};
|
||||||
|
|
||||||
|
"view::passthrough" = {
|
||||||
|
"$noinherit" = "true";
|
||||||
|
"$ex" = "<C-x>";
|
||||||
|
"<Esc>" = ":toggle-key-passthrough<Enter>";
|
||||||
|
};
|
||||||
|
|
||||||
|
compose = {
|
||||||
|
# Keybindings used when the embedded terminal is not selected in the compose
|
||||||
|
# view
|
||||||
|
"$noinherit" = "true";
|
||||||
|
"$ex" = "<C-x>";
|
||||||
|
"<C-k>" = ":prev-field<Enter>";
|
||||||
|
"<C-j>" = ":next-field<Enter>";
|
||||||
|
"<A-p>" = ":switch-account -p<Enter>";
|
||||||
|
"<A-n>" = ":switch-account -n<Enter>";
|
||||||
|
"<tab>" = ":next-field<Enter>";
|
||||||
|
"<C-p>" = ":prev-tab<Enter>";
|
||||||
|
"<C-n>" = ":next-tab<Enter>";
|
||||||
|
};
|
||||||
|
|
||||||
|
"compose::editor" = {
|
||||||
|
# Keybindings used when the embedded terminal is selected in the compose view
|
||||||
|
"$noinherit" = "true";
|
||||||
|
"$ex" = "<C-x>";
|
||||||
|
"<C-k>" = ":prev-field<Enter>";
|
||||||
|
"<C-j>" = ":next-field<Enter>";
|
||||||
|
"<C-p>" = ":prev-tab<Enter>";
|
||||||
|
"<C-n>" = ":next-tab<Enter>";
|
||||||
|
};
|
||||||
|
|
||||||
|
"compose::review" = {
|
||||||
|
# Keybindings used when reviewing a message to be sent
|
||||||
|
y = ":send <Enter>";
|
||||||
|
n = ":abort<Enter>";
|
||||||
|
p = ":postpone<Enter>";
|
||||||
|
q = ":choose -o d discard abort -o p postpone postpone<Enter>";
|
||||||
|
e = ":edit<Enter>";
|
||||||
|
a = ":attach<space>";
|
||||||
|
d = ":detach<space>";
|
||||||
|
};
|
||||||
|
|
||||||
|
terminal = {
|
||||||
|
"$noinherit" = "true";
|
||||||
|
"$ex" = "<C-x>";
|
||||||
|
"<C-p>" = ":prev-tab<Enter>";
|
||||||
|
"<C-n>" = ":next-tab<Enter>";
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
extraConfig = {
|
||||||
|
general.unsafe-accounts-conf = true;
|
||||||
|
viewer = { pager = "${pkgs.less}/bin/less -R"; };
|
||||||
|
filters = {
|
||||||
|
"text/plain" =
|
||||||
|
"${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize";
|
||||||
|
"text/calendar" =
|
||||||
|
"${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/calendar";
|
||||||
|
"text/html" =
|
||||||
|
"${pkgs.aerc}/share/aerc/filters/html"; # Requires w3m, dante
|
||||||
|
# "text/html" =
|
||||||
|
# "${pkgs.aerc}/share/aerc/filters/html | ${pkgs.aerc}/share/aerc/filters/colorize";
|
||||||
|
# "text/*" =
|
||||||
|
# ''${pkgs.bat}/bin/bat -fP --file-name="$AERC_FILENAME "'';
|
||||||
|
"message/delivery-status" =
|
||||||
|
"${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize";
|
||||||
|
"message/rfc822" =
|
||||||
|
"${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/share/aerc/filters/colorize";
|
||||||
|
"application/x-sh" = "${pkgs.bat}/bin/bat -fP -l sh";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
accounts.email.accounts.home.aerc = {
|
||||||
|
enable = true;
|
||||||
|
extraAccounts = {
|
||||||
|
check-mail = "1m";
|
||||||
|
check-mail-cmd = "${pkgs.isync}/bin/mbsync -a";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.fish.shellAbbrs = { ae = "aerc"; };
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
83
modules/mail/default.nix
Normal file
83
modules/mail/default.nix
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
|
imports = [ ./himalaya.nix ./aerc.nix ];
|
||||||
|
|
||||||
|
options = {
|
||||||
|
mailUser = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "User name for the email address.";
|
||||||
|
default = config.user;
|
||||||
|
};
|
||||||
|
mailServer = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "Server name for the email address.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
|
||||||
|
home-manager.users.${config.user} = {
|
||||||
|
programs.mbsync = { enable = true; };
|
||||||
|
services.mbsync = lib.mkIf pkgs.stdenv.isLinux {
|
||||||
|
enable = true;
|
||||||
|
frequency = "*:0/5";
|
||||||
|
};
|
||||||
|
accounts.email = {
|
||||||
|
maildirBasePath = "${config.homePath}/mail";
|
||||||
|
accounts = {
|
||||||
|
home = let address = "${config.mailUser}@${config.mailServer}";
|
||||||
|
in {
|
||||||
|
userName = address;
|
||||||
|
realName = config.fullName;
|
||||||
|
primary = true;
|
||||||
|
inherit address;
|
||||||
|
aliases = map (mailUser: "${mailUser}@${config.mailServer}") [
|
||||||
|
"me"
|
||||||
|
"hey"
|
||||||
|
"admin"
|
||||||
|
];
|
||||||
|
alot = { };
|
||||||
|
flavor = "plain";
|
||||||
|
folders = { };
|
||||||
|
getmail = { };
|
||||||
|
imap = {
|
||||||
|
host = "imap.purelymail.com";
|
||||||
|
port = 993;
|
||||||
|
tls.enable = true;
|
||||||
|
};
|
||||||
|
imapnotify = {
|
||||||
|
enable = false;
|
||||||
|
boxes = [ ];
|
||||||
|
onNotify = "";
|
||||||
|
onNotifyPost = "";
|
||||||
|
};
|
||||||
|
maildir = { path = "main"; };
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
create = "maildir";
|
||||||
|
expunge = "none";
|
||||||
|
remove = "none";
|
||||||
|
patterns = [ "*" ];
|
||||||
|
extraConfig.channel = {
|
||||||
|
CopyArrivalDate = "yes"; # Sync time of original message
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mu.enable = false;
|
||||||
|
notmuch.enable = false;
|
||||||
|
passwordCommand =
|
||||||
|
"${pkgs.age}/bin/age --decrypt --identity ${config.identityFile} ${
|
||||||
|
builtins.toString ../../private/mailpass.age
|
||||||
|
}";
|
||||||
|
smtp = {
|
||||||
|
host = "smtp.purelymail.com";
|
||||||
|
port = 465;
|
||||||
|
tls.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
@ -1,89 +1,19 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, ... }: {
|
||||||
|
|
||||||
options = {
|
|
||||||
mailUser = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
description = "User name for the email address.";
|
|
||||||
default = config.user;
|
|
||||||
};
|
|
||||||
mailServer = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
description = "Server name for the email address.";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
|
|
||||||
programs.himalaya = { enable = true; };
|
programs.himalaya = { enable = true; };
|
||||||
programs.mbsync = { enable = true; };
|
accounts.email.accounts.home.himalaya = {
|
||||||
services.mbsync = lib.mkIf pkgs.stdenv.isLinux {
|
|
||||||
enable = true;
|
|
||||||
frequency = "*:0/5";
|
|
||||||
};
|
|
||||||
|
|
||||||
accounts.email = {
|
|
||||||
maildirBasePath = "${config.homePath}/mail";
|
|
||||||
accounts = {
|
|
||||||
home = let address = "${config.mailUser}@${config.mailServer}";
|
|
||||||
in {
|
|
||||||
userName = address;
|
|
||||||
realName = config.fullName;
|
|
||||||
primary = true;
|
|
||||||
inherit address;
|
|
||||||
aliases = map (mailUser: "${mailUser}@${config.mailServer}") [
|
|
||||||
"me"
|
|
||||||
"hey"
|
|
||||||
"admin"
|
|
||||||
];
|
|
||||||
alot = { };
|
|
||||||
flavor = "plain";
|
|
||||||
folders = { };
|
|
||||||
getmail = { };
|
|
||||||
himalaya = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
|
backend = "imap";
|
||||||
|
sender = "smtp";
|
||||||
downloads-dir = config.userDirs.download;
|
downloads-dir = config.userDirs.download;
|
||||||
smtp-insecure = true;
|
smtp-insecure = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
imap = {
|
|
||||||
host = "imap.purelymail.com";
|
|
||||||
port = 993;
|
|
||||||
tls.enable = true;
|
|
||||||
};
|
|
||||||
imapnotify = {
|
|
||||||
enable = false;
|
|
||||||
boxes = [ ];
|
|
||||||
onNotify = "";
|
|
||||||
onNotifyPost = "";
|
|
||||||
};
|
|
||||||
maildir = { path = "main"; };
|
|
||||||
mbsync = {
|
|
||||||
enable = true;
|
|
||||||
create = "maildir";
|
|
||||||
expunge = "none";
|
|
||||||
remove = "none";
|
|
||||||
patterns = [ "*" ];
|
|
||||||
extraConfig.channel = {
|
|
||||||
CopyArrivalDate = "yes"; # Sync time of original message
|
|
||||||
};
|
|
||||||
};
|
|
||||||
mu.enable = false;
|
|
||||||
notmuch.enable = false;
|
|
||||||
passwordCommand =
|
|
||||||
"${pkgs.age}/bin/age --decrypt --identity ${config.identityFile} ${
|
|
||||||
builtins.toString ../../private/mailpass.age
|
|
||||||
}";
|
|
||||||
smtp = {
|
|
||||||
host = "smtp.purelymail.com";
|
|
||||||
port = 465;
|
|
||||||
tls.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.fish.shellAbbrs = { hi = "himalaya"; };
|
programs.fish.shellAbbrs = { hi = "himalaya"; };
|
||||||
|
|
||||||
|
@ -79,6 +79,7 @@ M.packer = function(use)
|
|||||||
return vim.fn.executable(program) == 1
|
return vim.fn.executable(program) == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
|
||||||
require("null-ls").setup({
|
require("null-ls").setup({
|
||||||
sources = {
|
sources = {
|
||||||
require("null-ls").builtins.formatting.stylua.with({
|
require("null-ls").builtins.formatting.stylua.with({
|
||||||
@ -132,15 +133,15 @@ M.packer = function(use)
|
|||||||
-- require("null-ls").builtins.diagnostics.pylint,
|
-- require("null-ls").builtins.diagnostics.pylint,
|
||||||
},
|
},
|
||||||
-- Format on save
|
-- Format on save
|
||||||
on_attach = function(client)
|
on_attach = function(client, bufnr)
|
||||||
if client.server_capabilities.document_formatting then
|
if client.supports_method("textDocument/formatting") then
|
||||||
local id = vim.api.nvim_create_augroup("LspFormatting", {
|
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
|
||||||
clear = true,
|
|
||||||
})
|
|
||||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||||
group = id,
|
group = augroup,
|
||||||
pattern = "*",
|
buffer = bufnr,
|
||||||
callback = vim.lsp.buf.format,
|
callback = function()
|
||||||
|
vim.lsp.buf.format({ bufnr = bufnr })
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
@ -53,10 +53,12 @@ M.packer = function(use)
|
|||||||
symbols = { " ", "-", "x" },
|
symbols = { " ", "-", "x" },
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
-- Save when moving to new buffer
|
|
||||||
vim.api.nvim_create_autocmd("FileType", {
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
pattern = "markdown",
|
pattern = "markdown",
|
||||||
command = "set autowriteall",
|
callback = function()
|
||||||
|
vim.o.autowriteall = true -- Save in new buffer
|
||||||
|
vim.o.wrapmargin = 79 -- Wrap text automatically
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
@ -8,49 +8,6 @@ M.packer = function(use)
|
|||||||
require("impatient")
|
require("impatient")
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Improve speed and filetype detection
|
|
||||||
use({
|
|
||||||
"nathom/filetype.nvim",
|
|
||||||
config = function()
|
|
||||||
-- Filetype for .env files
|
|
||||||
local envfiletype = function()
|
|
||||||
vim.bo.filetype = "text"
|
|
||||||
vim.bo.syntax = "sh"
|
|
||||||
end
|
|
||||||
-- Force filetype patterns that Vim doesn't know about
|
|
||||||
require("filetype").setup({
|
|
||||||
overrides = {
|
|
||||||
extensions = {
|
|
||||||
Brewfile = "brewfile",
|
|
||||||
muttrc = "muttrc",
|
|
||||||
tfvars = "terraform",
|
|
||||||
tf = "terraform",
|
|
||||||
},
|
|
||||||
literal = {
|
|
||||||
Caskfile = "brewfile",
|
|
||||||
[".gitignore"] = "gitignore",
|
|
||||||
config = "config",
|
|
||||||
},
|
|
||||||
complex = {
|
|
||||||
[".*git/config"] = "gitconfig",
|
|
||||||
["tmux.conf%..*link"] = "tmux",
|
|
||||||
["gitconfig%..*link"] = "gitconfig",
|
|
||||||
[".*ignore%..*link"] = "gitignore",
|
|
||||||
[".*%.toml%..*link"] = "toml",
|
|
||||||
},
|
|
||||||
function_extensions = {},
|
|
||||||
function_literal = {
|
|
||||||
[".envrc"] = envfiletype,
|
|
||||||
[".env"] = envfiletype,
|
|
||||||
[".env.dev"] = envfiletype,
|
|
||||||
[".env.prod"] = envfiletype,
|
|
||||||
[".env.example"] = envfiletype,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
@ -32,8 +32,6 @@ vim.opt.completeopt = {
|
|||||||
"menuone",
|
"menuone",
|
||||||
"noselect",
|
"noselect",
|
||||||
}
|
}
|
||||||
-- Required until 0.6.0: do not source the default filetype.vim
|
|
||||||
vim.g.did_load_filetypes = 1
|
|
||||||
|
|
||||||
-- Remember last position when reopening file
|
-- Remember last position when reopening file
|
||||||
vim.api.nvim_exec(
|
vim.api.nvim_exec(
|
||||||
@ -77,6 +75,13 @@ vim.api.nvim_exec(
|
|||||||
false
|
false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = "*.eml",
|
||||||
|
callback = function()
|
||||||
|
vim.o.wrapmargin = 79 -- Wrap text automatically
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
-- Netrw
|
-- Netrw
|
||||||
vim.g.netrw_liststyle = 3 -- Change style to 'tree' view
|
vim.g.netrw_liststyle = 3 -- Change style to 'tree' view
|
||||||
vim.g.netrw_banner = 0 -- Remove useless banner
|
vim.g.netrw_banner = 0 -- Remove useless banner
|
||||||
|
Loading…
Reference in New Issue
Block a user