This commit is contained in:
Till 2026-02-12 15:28:48 +01:00
parent 40539ae163
commit 9fdeb99a61
11 changed files with 122 additions and 251 deletions

View file

@ -5,4 +5,10 @@
aichat
glow
];
programs.fish.shellAliases = {
vibe = "aichat -c";
clank = "aichat -e";
slop = "aichat";
};
}

View file

@ -3,7 +3,7 @@
let
myRemote = slug: {
passwordCommand = [ "pass" "ktiu/radicale" ];
passwordCommand = [ "pass" "accounts/ktiu-radicale" ];
userName = "ktiu";
type = "caldav";
url = "https://kalender.ktiu.net/ktiu/${slug}";
@ -127,7 +127,7 @@ in
remote = {
type = "caldav";
url = "https://cloud.gridisnotajournal.de/remote.php/dav/calendars/till/grid/";
passwordCommand = [ "pass" "grid/nextcloud" ];
passwordCommand = [ "pass" "uni/grid-caldav-nextcloud" ];
userName = "till";
};
};

View file

@ -1,25 +1,18 @@
# Navigation
bind pager k previous-entry
bind pager j next-entry
# bind index,pager \Cu half-up
# bind index,pager \Cd half-down
# bind pager gg top
# bind index gg first-entry
# bind pager G bottom
# bind index G last-entry
# bind index,pager N search-opposite
bind index <return> display-message
bind index <space> collapse-thread
bind index,pager gf change-folder
# Read HTML
bind index,pager V noop
macro index,pager V "<view-attachments><search>html<enter><view-mailcap><exit>"
macro index,pager V "<view-attachments><search>html<enter><view-mailcap><exit>" "View as HTML"
# compose
bind compose p postpone-message
bind compose P pgp-menu
# macro compose I "<attach-file>`tmpfile=$(mktemp -u --suffix .png -t XXXXXXXXXXXX -p ~/tmp) && wl-paste -t image/png > "$tmpfile" && echo "$tmpfile"`<enter>" "attach image from clipboard"
macro compose I "<attach-file>\`tmpfile=$(mktemp -u --suffix .png -t XXXXXXXXXXXX -p ~/tmp) && wl-paste -t image/png > \"$tmpfile\" && echo \"$tmpfile\"\`<enter>" "attach image from clipboard"
bind editor <Tab> complete-query
bind editor ^T complete
@ -28,58 +21,47 @@ bind index,pager m noop
macro index,pager mar "<tag-pattern>new<enter><tag-prefix-cond><clear-flag>n<enter><tag-prefix-cond><clear-flag>*<enter>" "Mark all read"
# compose with signature management
macro index,pager @ "<enter-command>set signature=$my_signature<enter><compose-to-sender>" "Compose to sender"
macro index,pager c "<enter-command>set signature=$my_signature<enter><mail>" "Compose new message"
macro index,pager r "<enter-command>unset signature<enter><reply>" "Reply to message"
macro index,pager a "<enter-command>unset signature<enter><group-reply>" "Reply all"
macro index,pager f "<enter-command>unset signature<enter><forward-message>" "Forward message"
macro index,pager r "<enter-command>unset signature<enter><reply>" "Reply to message"
macro index,pager a "<enter-command>unset signature<enter><group-reply>" "Reply all"
macro index,pager f "<enter-command>unset signature<enter><forward-message>" "Forward message"
# moving messages
macro index,pager J ":set resolve=no\n<clear-flag>n:set resolve=yes\n<save-message>$my_junk<enter>" \
"Move to junk folder"
macro index,pager y ":set resolve=no\n<clear-flag>n:set resolve=yes\n<save-message>$mbox<enter>" \
"Move message to the archive"
macro index,pager I "<save-message>$spoolfile<enter>" "Move message to the inbox"
macro index,pager J ":set resolve=no\n<clear-flag>n:set resolve=yes\n<save-message>$my_junk<enter>" "Move to junk"
macro index,pager y ":set resolve=no\n<clear-flag>n:set resolve=yes\n<save-message>$mbox<enter>" "Move to archive"
macro index,pager I "<save-message>$spoolfile<enter>" "Move to inbox"
# switch folders
macro index,pager g! "<change-folder>$spoolfile<enter><refresh>" "Go to inbox"
macro index,pager gd "<change-folder>$postponed<enter><refresh>" "Go to drafts"
macro index,pager g< "<change-folder>$record<enter><refresh>" "Go to sent"
macro index,pager ga "<change-folder>$mbox<enter>" "Go to archive"
macro index,pager g> "<change-folder>$mbox<enter><refresh>" "Go to archive"
macro index,pager gt "<change-folder>$trash<enter><refresh>" "Go to trash"
macro index,pager gj "<change-folder>$my_junk<enter><refresh>" "Go to junk"
macro index,pager g! "<change-folder>$spoolfile<enter><refresh>" "Go to inbox"
macro index,pager gd "<change-folder>$postponed<enter><refresh>" "Go to drafts"
macro index,pager g< "<change-folder>$record<enter><refresh>" "Go to sent"
macro index,pager g> "<change-folder>$mbox<enter><refresh>" "Go to archive"
macro index,pager gt "<change-folder>$trash<enter><refresh>" "Go to trash"
macro index,pager gj "<change-folder>$my_junk<enter><refresh>" "Go to junk"
# accounts
macro index,pager gu "<change-folder>~/.local/share/mail/gu/Inbox<enter><refresh>" "Go to GU"
# macro index,pager gp "<change-folder>+systemli/IMAP/Inbox<enter><refresh>" "Go to Systemli"
macro index,pager gm "<change-folder>~/.local/share/mail/t9e/Inbox<enter><refresh>" "Go to t9e"
# macro index,pager gm "<change-folder>+gmail/IMAP/Inbox<enter><refresh>" "Go to Gmail"
macro index,pager gk "<change-folder>~/.local/share/mail/ksh/Inbox<enter><refresh>" "Go to KSH"
macro index,pager gi "<change-folder>~/.local/share/mail/ktiu/Inbox<enter><refresh>" "Go to ktiu"
# macro index,pager gf "<change-folder>~/.local/share/mail/dkg/Inbox<enter><refresh>" "Go to DKG"
macro index,pager gu "<change-folder>~/.local/share/mail/gu/Inbox<enter><refresh>" "Go to gu"
macro index,pager gm "<change-folder>~/.local/share/mail/t9e/Inbox<enter><refresh>" "Go to t9e"
macro index,pager gk "<change-folder>~/.local/share/mail/ksh/Inbox<enter><refresh>" "Go to ksh"
macro index,pager gi "<change-folder>~/.local/share/mail/ktiu/Inbox<enter><refresh>" "Go to ktiu"
macro index,pager L "<limit>all\n" "Show all messages (undo limit)"
# macro index,pager go "<shell-escape>mbsync -c ~/.config/mbsync/mbsyncrc $my_mbsync_acct && notmuch new &<enter>" \
# "Run mbsync to sync mail for this account"
macro index,pager go "<shell-escape>mbsync $my_account && notmuch new<enter>" "Sync this account"
macro index,pager gO "<shell-escape>mbsync -a && notmuch new<enter>" "Sync all accounts"
macro index,pager go "<shell-escape>mbsync $my_mbsync_acct && notmuch new<enter>" \
bind index,pager / noop
macro index,pager // "<vfolder-from-query-readonly>folder:/$my_account/" "Find in account"
macro index,pager g/ "<vfolder-from-query-readonly>" "Find in all accounts"
macro index,pager /! "<vfolder-from-query-readonly>folder:+$my_account/$my_nm_spoolfile" "Find in inbox"
macro index,pager /< "<vfolder-from-query-readonly>folder:+$my_account/$my_nm_record" "Find in sent"
macro index,pager /> "<vfolder-from-query-readonly>folder:+$my_account/$my_nm_mbox" "Find in archive"
macro index,pager /d "<vfolder-from-query-readonly>folder:+$my_account/$my_nm_postponed" "Find in drafts"
macro index,pager /t "<vfolder-from-query-readonly>folder:+$my_account/$my_nm_trash" "Find in trash"
macro index,pager /j "<vfolder-from-query-readonly>folder:+$my_account/$my_nm_junk" "Find in junk"
macro index,pager g/ "<vfolder-from-query-readonly>" "find in nm"
macro index,pager A "<pipe-message>khard add-email --vcard-version=4.0<return>" "Add sender to khard"
macro index,pager A \
"<pipe-message>khard add-email --vcard-version=4.0<return>" \
"add the sender email address to khard"
macro index,pager S "<pipe-message> ripmime -i - -d ~/tmp && rm ~/tmp/textfile*" "Save all attachments"
macro index,pager S \
"<pipe-message> ripmime -i - -d ~/tmp && rm ~/tmp/textfile*" \
"save all non-text attachments using ripmime"
macro index,pager gb \
"<pipe-message> urlscan<enter>" \
"extract URLs out of a message"
macro index,pager gO \
"<shell-escape>mbsync -a && notmuch new<enter>" \
"run mbsync to sync all mail"
macro index,pager gb "<pipe-message> urlscan<enter>" "Extract URLs"

View file

@ -3,10 +3,10 @@ source $alias_file
set mailcap_path = ~/.config/neomutt/mailcap
# source ./smime.neomuttrc
set my_download_folder = ~/tmp
set shell = /bin/sh
# Caching and tmp
set header_cache = $XDG_CACHE_HOME/neomutt/headers
set message_cachedir = $XDG_CACHE_HOME/neomutt/bodies
@ -16,42 +16,24 @@ set tmpdir = $XDG_CACHE_HOME/neomutt/tmp
# Basic options
unset wait_key
set mbox_type = Maildir
# set delete
set mail_check_stats
unset confirm_append
unset beep
unset mark_old
set sleep_time = 0
# set shell = /bin/bash
# Sending
set use_envelope_from
unset reverse_realname
unset reverse_real_name
# Searching
set nm_default_url = "notmuch:///home/till/.local/share/mail/"
set my_nm_spoolfile = 'Inbox'
set my_nm_postponed = 'Drafts'
set my_nm_record = 'Sent'
set my_nm_trash = 'Trash'
# Multi-account setup
# source ~/.config/neomutt/accounts/dkg.neomuttrc
# source ~/.config/neomutt/accounts/gu.neomuttrc
# bind index,pager g noop
# folder-hook $folder/gu/ source ~/.config/neomutt/accounts/gu.neomuttrc
# folder-hook $folder/systemli/ source ~/.config/neomutt/accounts/systemli.neomuttrc
# folder-hook $folder/ks/ source ~/.config/neomutt/accounts/ks.neomuttrc
# folder-hook $folder/gmail/ source ~/.config/neomutt/accounts/gmail.neomuttrc
# folder-hook $folder/ktiu/ source ~/.config/neomutt/accounts/ktiu.neomuttrc
# folder-hook $folder/dkg/ source ~/.config/neomutt/accounts/dkg.neomuttrc
# folder-hook $folder/papa/ source ~/.config/neomutt/accounts/papa.neomuttrc
folder-hook . source ~/.config/neomutt/bindings.neomuttrc
# # Source config
# source ~/.config/neomutt/views.neomuttrc
# source ~/.config/neomutt/sidebar.neomuttrc
# source ~/.config/neomutt/colors.neomuttrc
# source ~/.config/neomutt/smime.neomuttrc
# source ~/.config/neomutt/pgp.neomuttrc
folder-hook . source ~/.config/neomutt/bindings.neomuttrc
# Compose
set editor = "nvim -c 'call woof#init#Init()'"
@ -118,13 +100,6 @@ color header brightgreen default "^(Subject)"
color header yellow default "^(From|To|CC|BCC)"
color header blue default "^Date"
## Status
# color status yellow default '\[ ↻ \]'
# color status green default '\[ ✔ \]'
# color status magenta default '\[ ٪ \]'
# color status black default '\[ [0-9]+ new \]'
# color status red default '\[ [0-9]+ to delete \]'
## Mutt
color message cyan default
color error red default

View file

@ -1,37 +1,26 @@
{ config, pkgs, lib, ... }:
{
programs.msmtp = {
enable = true;
configContent = lib.mkOrder 1200 ''
defaults
logfile ${config.xdg.stateHome}/msmtp/msmtp.log
port 587
account ktiu : t9e
from *@ktiu.net
'';
};
programs.msmtp.enable = true;
programs.mbsync.enable = true;
programs.notmuch.enable = true;
programs.neomutt = {
enable = true;
vimKeys = true;
extraConfig = builtins.readFile ./config.neomuttrc;
};
programs.notmuch.enable = true;
xdg.configFile."neomutt/bindings.neomuttrc".source = ./bindings.neomuttrc;
xdg.configFile."neomutt/smime.neomuttrc".source = ./smime.neomuttrc;
xdg.configFile."neomutt/mailcap".source = ./neomutt_mailcap;
accounts.email = {
maildirBasePath = "${config.xdg.dataHome}/mail";
accounts = {
gu = {
gu = { name, ... }: {
primary = true;
address = "straube@geo.uni-frankfurt.de";
realName = "Till Straube";
@ -39,7 +28,6 @@
smtp.host = "smtpauth.rz.uni-frankfurt.de";
smtp.tls.useStartTls = true;
userName = "tstraube";
notmuch.enable = true;
passwordCommand = "pass uni/hrz";
signature = {
text = ''
@ -49,6 +37,7 @@
'';
showSignature = "append";
};
notmuch.enable = true;
mbsync = {
enable = true;
create = "maildir";
@ -57,11 +46,15 @@
msmtp.enable = true;
neomutt = {
enable = true;
sendMailCommand = lib.getExe pkgs.msmtp;
sendMailCommand = "${lib.getExe pkgs.msmtp} -a ${ name }";
extraConfig = ''
set my_account='${ name }'
set mbox='+Archive'
set my_nm_mbox='Archive'
set my_junk='+Spamverdacht'
set my_mbsync_acct='gu'
set my_nm_junk='Spamverdacht'
set crypt_auto_smime
unset crypt_auto_pgp
@ -71,10 +64,8 @@
set crypt_replysign
set crypt_replysignencrypted
set crypt_verify_sig
# set smime_default_key = "f1355556.0"
set smime_sign_as = "f1355556.0"
set pgp_default_key = ""
# unset crypt_use_gpgme
unalternates *
alternates ^straube@em.uni-frankfurt.de$ \
@ -82,40 +73,37 @@
^tstraube@rz.uni-frankfurt.de$ \
^tstraube@uni-frankfurt.de$
unset reverse_name
set my_signature = ${
pkgs.writeText
"signature.txt"
config.accounts.email.accounts.gu.signature.text
}
set my_signature = ${ pkgs.writeText "signature.txt" config.accounts.email.accounts.gu.signature.text }
color status blue default
'';
};
};
t9e = {
t9e = { name, ... }: {
address = "till.straube@t9e.me";
realName = "Till Straube";
imap.host = "arielle.ktiu.net";
smtp.host = "arielle.ktiu.net";
smtp.tls.useStartTls = true;
notmuch.enable = true;
userName = "till.straube@t9e.me";
signature.text = ''
Till Straube (he/him)
PGP key: https://keys.openpgp.org/search?q=till.straube@t9e.me
'';
signature.showSignature = "append";
gpg = {
key = "5FA6782F543D12ED07110780BA1B73F10BABF8E3";
signByDefault = true;
};
gpg.signByDefault = true;
notmuch.enable = true;
neomutt = {
enable = true;
sendMailCommand = lib.getExe pkgs.msmtp;
sendMailCommand = "${lib.getExe pkgs.msmtp} -a ${ name }";
extraConfig = ''
set my_mbsync_acct='t9e'
set my_mbsync_account='${ name }'
set mbox='+Archive'
set my_nm_mbox='Archive'
set my_junk='+Junk'
set my_nm_junk='Junk'
set crypt_auto_pgp
unset crypt_auto_smime
@ -124,11 +112,7 @@
alternates @t9e.me$ @ktiu.net$
set reverse_name
set my_signature = ${
pkgs.writeText
"signature.txt"
config.accounts.email.accounts.t9e.signature.text
}
set my_signature = ${ pkgs.writeText "signature.txt" config.accounts.email.accounts.t9e.signature.text }
color status green default
'';
};
@ -139,87 +123,37 @@
};
msmtp = {
enable = true;
extraConfig.from = "*@t9e.me";
extraConfig.port = "587";
};
passwordCommand = "pass mail/arielle.ktiu.net";
passwordCommand = "pass accounts/ktiu-imap";
};
ktiu = {
address = "till@ktiu.net";
realName = "Till Straube";
imap.host = "shorbut.ktiu.net";
smtp.host = "shorbut.ktiu.net";
smtp.tls.useStartTls = true;
notmuch.enable = true;
userName = "till";
signature.text = ''
Till Straube (he/him)
PGP key: https://keys.openpgp.org/search?q=till@ktiu.net
'';
signature.showSignature = "append";
gpg = {
key = "5FA6782F543D12ED07110780BA1B73F10BABF8E3";
signByDefault = true;
};
neomutt = {
enable = true;
sendMailCommand = lib.getExe pkgs.msmtp;
extraConfig = ''
set my_mbsync_acct='ktiu'
set mbox='+Archive'
set my_junk='+Junk'
set crypt_auto_pgp
unset crypt_auto_smime
unalternates *
alternates @ktiu.net$
set reverse_name
set my_signature = ${
pkgs.writeText
"signature.txt"
config.accounts.email.accounts.ktiu.signature.text
}
color status green default
'';
};
mbsync = {
enable = true;
create = "maildir";
expunge = "both";
};
msmtp = {
enable = false;
# extraConfig.from = "*@ktiu.net";
};
passwordCommand = "secret-tool lookup server shorbut.ktiu.net account till";
};
ksh = {
ksh = { name, ...}: {
address = "kein_schlussstrich_hessen@systemli.org";
realName = "Kein Schlussstrich Hessen";
imap.host = "mail.systemli.org";
smtp.host = "mail.systemli.org";
smtp.tls.useStartTls = true;
notmuch.enable = true;
userName = "kein_schlussstrich_hessen@systemli.org";
signature.text = ''
Kein Schlussstrich Hessen
PGP Key: https://keys.openpgp.org/search?q=kein_schlussstrich_hessen@systemli.org
'';
signature.showSignature = "append";
gpg.signByDefault = true;
notmuch.enable = true;
neomutt = {
enable = true;
# sendMailCommand = "/home/till/.nix-profile/bin/msmtp";
sendMailCommand = lib.getExe pkgs.msmtp;
sendMailCommand = "${lib.getExe pkgs.msmtp} -a ${ name }";
extraConfig = ''
set my_mbsync_acct='ksh'
set my_mbsync_account='${ name }'
set mbox='+Erledigt'
set my_nm_mbox='Erledigt'
set my_junk='+Junk'
set postponed='+Drafts'
set record='+Sent'
set trash='+Trash'
set my_nm_junk='Junk'
set crypt_auto_pgp
unset crypt_auto_smime
@ -238,11 +172,8 @@
create = "maildir";
expunge = "both";
};
msmtp = {
enable = true;
extraConfig.from = "kein_schlussstrich_hessen@systemli.org";
};
passwordCommand = "pass other/ksh_systemli";
msmtp.enable = true;
passwordCommand = "pass ksh/systemli";
};
};
};

View file

@ -1,24 +0,0 @@
# Locations
# set smime_ca_location="~/.keys/neomutt/smime/ca"
# set smime_certificates="~/.keys/neomutt/smime/public"
# set smime_keys="~/.keys/neomutt/smime/private"
# Commands (smime_keys)
set smime_pk7out_command="openssl smime -verify -in %f -noverify -pk7out"
set smime_get_cert_command="openssl pkcs7 -print_certs -in %f"
set smime_get_signer_cert_command="openssl smime -verify -in %f -noverify -signer %c -out /dev/null"
set smime_get_cert_email_command="openssl x509 -in %f -noout -email"
set smime_import_cert_command="smime_keys add_cert %f"
# Outgoing
set smime_encrypt_with="aes256"
set smime_encrypt_command="openssl smime -encrypt -%a -outform DER -in %f %c"
set smime_sign_digest_alg="sha256"
set smime_sign_command="openssl smime -sign -md %d -signer %c -inkey %k -passin stdin -in %f -certfile %i -outform DER"
# Incoming
set smime_decrypt_command="openssl smime -decrypt -passin stdin -inform DER -in %f -inkey %k -recip %c"
set smime_verify_command="openssl smime -verify -inform DER -in %s %C -content %f"
set smime_verify_opaque_command="\
openssl smime -verify -inform DER -in %s %C || \
openssl smime -verify -inform DER -in %s -noverify 2>/dev/null"

View file

@ -23,8 +23,8 @@ set splitright
set tabstop=2
set updatetime=300
" set foldmethod=expr
" set foldexpr=nvim_treesitter#foldexpr()
set foldmethod=expr
set foldexpr=nvim_treesitter#foldexpr()
let g:netrw_liststyle = 3
let g:netrw_fastbrowse = 0

View file

@ -1,4 +1,4 @@
{ lib, pkgs, ... }:
{ pkgs, lib, ... }:
{
home.packages = with pkgs; [
@ -73,7 +73,7 @@
nnoremap <silent> [og :Goyo 80<return>
nnoremap <silent> ]og :Goyo!<return>
'';
}
}
{
plugin = limelight-vim;
config = ''
@ -115,7 +115,23 @@
'';
}
(nvim-treesitter.withPlugins (p: [ p.nix p.lua p.r p.typescript ]))
{
plugin = (nvim-treesitter.withPlugins (p: [ p.nix p.lua p.r p.typescript ]));
type = "lua";
config = ''
vim.api.nvim_create_autocmd('FileType', {
pattern = { 'nix', 'markdown', 'lua', 'r' },
callback = function()
-- Enable Tree-sitter-based folding
vim.o.foldexpr = 'v:lua.vim.treesitter.foldexpr()'
vim.o.foldmethod = 'expr'
-- Optional: configure fold behavior
vim.o.foldlevel = 99
vim.o.foldlevelstart = 99
end,
})
'';
}
{
plugin = papercolor-theme;
@ -154,7 +170,10 @@
'';
}
vim-fish
{
plugin = vim-fish;
}
vim-nix
{

View file

@ -8,18 +8,15 @@ cmp.setup({
end,
},
window = {
-- completion = cmp.config.window.bordered(),
-- documentation = cmp.config.window.bordered(),
},
mapping = cmp.mapping.preset.insert({
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.abort(),
['<Tab>'] = cmp.mapping.confirm({ select = true }),
}),
mapping = cmp.mapping.preset.insert(
{
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.abort(),
['<Tab>'] = cmp.mapping.confirm({ select = false }),
}
),
sources = cmp.config.sources({
{ name = 'cmp_pandoc' },
@ -34,17 +31,6 @@ cmp.setup({
})
-- To use git you need to install the plugin petertriho/cmp-git and uncomment lines below
-- Set configuration for specific filetype.
--[[ cmp.setup.filetype('gitcommit', {
sources = cmp.config.sources({
{ name = 'git' },
}, {
{ name = 'buffer' },
})
})
require("cmp_git").setup() ]]--
-- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline({ '/', '?' }, {
mapping = cmp.mapping.preset.cmdline(),
@ -66,8 +52,3 @@ cmp.setup.cmdline(':', {
-- Set up lspconfig.
local capabilities = require('cmp_nvim_lsp').default_capabilities()
-- Replace <YOUR_LSP_SERVER> with each lsp server you've enabled.
-- vim.lsp.config('<YOUR_LSP_SERVER>', {
-- capabilities = capabilities
-- })
-- vim.lsp.enable('<YOUR_LSP_SERVER>')

View file

@ -4,8 +4,9 @@
services.pcscd.enable = true;
environment.systemPackages = with pkgs; [
yubikey-personalization
keymapp
yubikey-personalization
yubikey-manager
];
services.udev = {

View file

@ -19,7 +19,7 @@ in {
{
id = "outline";
name = "Outline Client";
redirectURIs = [ "https://${outline.hostname}/auth/oidc.callback" ];
redirectURIs = [ "https://${config.services.outline.hostname}/auth/oidc.callback" ];
secretFile = "/var/custom-access/outline-oidc-secret.txt";
}
];