mirror of
https://github.com/kmein/niveum
synced 2026-03-16 10:11:08 +01:00
feat: sxiv, notemenu, stardict, neomutt
feat(sxiv): add (broken) key-handlers feat(i3): add notemenu feat(stardict): add (broken) folder feat(neomutt): add kieran.meinhardt@gmail.com
This commit is contained in:
@@ -43,6 +43,7 @@ in
|
|||||||
./rofi.nix
|
./rofi.nix
|
||||||
./ssh.nix
|
./ssh.nix
|
||||||
./sudo.nix
|
./sudo.nix
|
||||||
|
./sxiv.nix
|
||||||
./themes/mac-os.nix
|
./themes/mac-os.nix
|
||||||
./theming.nix
|
./theming.nix
|
||||||
./tmux.nix
|
./tmux.nix
|
||||||
@@ -304,5 +305,178 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ pkgs.neomutt ];
|
||||||
|
home-manager.users.me.xdg.configFile."neomutt/neomuttrc".text = ''
|
||||||
|
set mailcap_path = ${pkgs.writeText "mailcap" ''
|
||||||
|
text/plain; $EDITOR %s ;
|
||||||
|
text/html; ${pkgs.lynx} -assume_charset=%{charset} -display_charset=utf-8 -dump %s; nametemplate=%s.html; copiousoutput;
|
||||||
|
image/*; ${pkgs.sxiv}/bin/sxiv %s ;
|
||||||
|
video/*; ${pkgs.utillinux}/bin/setsid ${pkgs.mpv}/bin/mpv --quiet %s &; copiousoutput
|
||||||
|
application/*; ${pkgs.xdg_utils}/bin/xdg-open %s ;
|
||||||
|
''}
|
||||||
|
|
||||||
|
set sort = reverse-threads
|
||||||
|
set sleep_time = 0 # Pause 0 seconds for informational messages
|
||||||
|
set markers = no # Disables the `+` displayed at line wraps
|
||||||
|
set mark_old = no # Unread mail stay unread until read
|
||||||
|
set mime_forward = yes # attachments are forwarded with mail
|
||||||
|
set wait_key = no # mutt won't ask "press key to continue"
|
||||||
|
set fast_reply # skip to compose when replying
|
||||||
|
set fcc_attach # save attachments with the body
|
||||||
|
set forward_format = "Fwd: %s" # format of subject when forwarding
|
||||||
|
set forward_quote # include message in forwards
|
||||||
|
set reverse_name # reply as whomever it was to
|
||||||
|
set include = no # dont include message in replies
|
||||||
|
set mail_check=60 # to avoid lags using IMAP with some email providers (yahoo for example)
|
||||||
|
auto_view text/html # automatically show html (mailcap uses w3m)
|
||||||
|
alternative_order text/plain text/enriched text/html
|
||||||
|
|
||||||
|
source ${pkgs.neomutt}/share/doc/neomutt/vim-keys/vim-keys.rc
|
||||||
|
source ${pkgs.writeText "vim-keys.rc" ''
|
||||||
|
bind index j next-entry
|
||||||
|
bind index k previous-entry
|
||||||
|
bind attach <return> view-mailcap
|
||||||
|
bind attach l view-mailcap
|
||||||
|
bind editor <space> noop
|
||||||
|
bind index G last-entry
|
||||||
|
bind index gg first-entry
|
||||||
|
bind pager,attach h exit
|
||||||
|
bind pager j next-line
|
||||||
|
bind pager k previous-line
|
||||||
|
bind pager l view-attachments
|
||||||
|
bind index D delete-message
|
||||||
|
bind index U undelete-message
|
||||||
|
bind index L limit
|
||||||
|
bind index h noop
|
||||||
|
bind index l display-message
|
||||||
|
bind index <space> tag-entry
|
||||||
|
bind index,pager H view-raw-message
|
||||||
|
bind browser l select-entry
|
||||||
|
bind pager,browser gg top-page
|
||||||
|
bind pager,browser G bottom-page
|
||||||
|
# bind index,pager,browser d half-down
|
||||||
|
# bind index,pager,browser u half-up
|
||||||
|
bind index,pager S sync-mailbox
|
||||||
|
bind index,pager R group-reply
|
||||||
|
bind index \031 previous-undeleted # Mouse wheel
|
||||||
|
bind index \005 next-undeleted # Mouse wheel
|
||||||
|
bind pager \031 previous-line # Mouse wheel
|
||||||
|
bind pager \005 next-line # Mouse wheel
|
||||||
|
bind editor <Tab> complete-query
|
||||||
|
|
||||||
|
set sidebar_visible = yes
|
||||||
|
set sidebar_width = 20
|
||||||
|
set sidebar_short_path = yes
|
||||||
|
set sidebar_next_new_wrap = yes
|
||||||
|
set mail_check_stats
|
||||||
|
set sidebar_format = '%B%?F? [%F]?%* %?N?%N/? %?S?%S?'
|
||||||
|
bind index,pager \Ck sidebar-prev
|
||||||
|
bind index,pager \Cj sidebar-next
|
||||||
|
bind index,pager \Co sidebar-open
|
||||||
|
bind index,pager \Cp sidebar-prev-new
|
||||||
|
bind index,pager \Cn sidebar-next-new
|
||||||
|
bind index,pager B sidebar-toggle-visible
|
||||||
|
''}
|
||||||
|
|
||||||
|
source ${pkgs.writeText "colours.rc" ''
|
||||||
|
# Default index colors:
|
||||||
|
# color index yellow default '.*'
|
||||||
|
color index_author red default '.*'
|
||||||
|
color index_number blue default
|
||||||
|
color index_subject cyan default '.*'
|
||||||
|
|
||||||
|
# New mail is boldened
|
||||||
|
color index brightyellow black "~N"
|
||||||
|
color index_author brightred black "~N"
|
||||||
|
color index_subject brightcyan black "~N"
|
||||||
|
|
||||||
|
# Tagged mail is highlighted
|
||||||
|
color index brightyellow blue "~T"
|
||||||
|
color index_author brightred blue "~T"
|
||||||
|
color index_subject brightcyan blue "~T"
|
||||||
|
|
||||||
|
# Other colors and aesthetic settings:
|
||||||
|
mono bold bold
|
||||||
|
mono underline underline
|
||||||
|
mono indicator reverse
|
||||||
|
mono error bold
|
||||||
|
color normal default default
|
||||||
|
color indicator brightblack white
|
||||||
|
color sidebar_highlight red default
|
||||||
|
color sidebar_divider brightblack black
|
||||||
|
color sidebar_flagged red black
|
||||||
|
color sidebar_new green black
|
||||||
|
color normal brightyellow default
|
||||||
|
color error red default
|
||||||
|
color tilde black default
|
||||||
|
color message cyan default
|
||||||
|
color markers red white
|
||||||
|
color attachment white default
|
||||||
|
color search brightmagenta default
|
||||||
|
color status brightyellow black
|
||||||
|
color hdrdefault brightgreen default
|
||||||
|
color quoted green default
|
||||||
|
color quoted1 blue default
|
||||||
|
color quoted2 cyan default
|
||||||
|
color quoted3 yellow default
|
||||||
|
color quoted4 red default
|
||||||
|
color quoted5 brightred default
|
||||||
|
color signature brightgreen default
|
||||||
|
color bold black default
|
||||||
|
color underline black default
|
||||||
|
color normal default default
|
||||||
|
|
||||||
|
# Regex highlighting:
|
||||||
|
color header blue default ".*"
|
||||||
|
color header brightmagenta default "^(From)"
|
||||||
|
color header brightcyan default "^(Subject)"
|
||||||
|
color header brightwhite default "^(CC|BCC)"
|
||||||
|
color body brightred default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
|
||||||
|
color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
|
||||||
|
color body green default "\`[^\`]*\`" # Green text between ` and `
|
||||||
|
color body brightblue default "^# \.*" # Headings as bold blue
|
||||||
|
color body brightcyan default "^## \.*" # Subheadings as bold cyan
|
||||||
|
color body brightgreen default "^### \.*" # Subsubheadings as bold green
|
||||||
|
color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow
|
||||||
|
color body brightcyan default "[;:][-o][)/(|]" # emoticons
|
||||||
|
color body brightcyan default "[;:][)(|]" # emoticons
|
||||||
|
color body brightcyan default "[ ][*][^*]*[*][ ]?" # more emoticon?
|
||||||
|
color body brightcyan default "[ ]?[*][^*]*[*][ ]" # more emoticon?
|
||||||
|
color body red default "(BAD signature)"
|
||||||
|
color body cyan default "(Good signature)"
|
||||||
|
color body brightblack default "^gpg: Good signature .*"
|
||||||
|
color body brightyellow default "^gpg: "
|
||||||
|
color body brightyellow red "^gpg: BAD signature from.*"
|
||||||
|
mono body bold "^gpg: Good signature"
|
||||||
|
mono body bold "^gpg: BAD signature from.*"
|
||||||
|
color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
|
||||||
|
''}
|
||||||
|
|
||||||
|
set index_format="%2C %Z %?X?A& ? %D %-15.15F %s (%-4.4c)"
|
||||||
|
set smtp_authenticators = 'gssapi:login'
|
||||||
|
|
||||||
|
source ${
|
||||||
|
let emailUser = "kieran.meinhardt";
|
||||||
|
in pkgs.writeText "gmail.rc" ''
|
||||||
|
set from="${emailUser}@gmail.com"
|
||||||
|
set realname="${config.niveum.user.name}"
|
||||||
|
|
||||||
|
set imap_login="${emailUser}@gmail.com"
|
||||||
|
set imap_pass="`${pkgs.pass}/bin/pass mail/${emailUser}@gmail.com`"
|
||||||
|
|
||||||
|
set smtp_url="smtps://${emailUser}@gmail.com@smtp.gmail.com:465/"
|
||||||
|
set smtp_pass="$imap_pass"
|
||||||
|
|
||||||
|
set folder=imaps://${emailUser}@imap.gmail.com/
|
||||||
|
set spoolfile="+INBOX"
|
||||||
|
set record="+[Gmail]/Gesendet"
|
||||||
|
set postponed="+[Gmail]/Entwürfe"
|
||||||
|
set mbox="+[Gmail]/Archiv"
|
||||||
|
|
||||||
|
mailboxes =INBOX, =[Gmail]/Gesendet, =[Gmail]/Entwürfe, =[Gmail]/Archiv
|
||||||
|
''}
|
||||||
|
'';
|
||||||
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,6 +137,13 @@ in with config.niveum; {
|
|||||||
"${modifier}+Shift+w" = "exec ${pkgs.xautolock}/bin/xautolock -locknow";
|
"${modifier}+Shift+w" = "exec ${pkgs.xautolock}/bin/xautolock -locknow";
|
||||||
"${modifier}+a" = "exec --no-startup-id ${pkgs.rofi}/bin/rofi -display-window — -show window";
|
"${modifier}+a" = "exec --no-startup-id ${pkgs.rofi}/bin/rofi -display-window — -show window";
|
||||||
"${modifier}+d" = "exec --no-startup-id ${pkgs.dmenu}/bin/dmenu_run";
|
"${modifier}+d" = "exec --no-startup-id ${pkgs.dmenu}/bin/dmenu_run";
|
||||||
|
"${modifier}+Shift+d" = "exec ${pkgs.writers.writeDash "notemenu" ''
|
||||||
|
set -efu
|
||||||
|
PATH=$PATH:${lib.makeBinPath [ pkgs.dmenu pkgs.findutils ]}
|
||||||
|
|
||||||
|
cd ~/notes
|
||||||
|
find . -type f | dmenu -i -l 20 | xargs i3-sensible-terminal -e "$EDITOR"
|
||||||
|
''}";
|
||||||
"${modifier}+p" = "exec --no-startup-id ${pkgs.pass}/bin/passmenu -l 5";
|
"${modifier}+p" = "exec --no-startup-id ${pkgs.pass}/bin/passmenu -l 5";
|
||||||
"${modifier}+u" = "exec ${pkgs.scripts.emoji-menu}/bin/emoji-menu";
|
"${modifier}+u" = "exec ${pkgs.scripts.emoji-menu}/bin/emoji-menu";
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,6 @@
|
|||||||
# MEDIA
|
# MEDIA
|
||||||
ffmpeg
|
ffmpeg
|
||||||
imagemagick
|
imagemagick
|
||||||
sxiv
|
|
||||||
scrot
|
scrot
|
||||||
# ARCHIVE TOOLS
|
# ARCHIVE TOOLS
|
||||||
unzip
|
unzip
|
||||||
|
|||||||
@@ -7,9 +7,35 @@ let
|
|||||||
inherit sha256;
|
inherit sha256;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
makeStardictDataDir = dicts: pkgs.linkFarm "dictionaries" (map ({name, path}: { name = "dic/${name}"; inherit path; }) dicts);
|
||||||
scardanelli = config.networking.hostName == "scardanelli";
|
scardanelli = config.networking.hostName == "scardanelli";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
environment.variables.STARDICT_DATA_DIR = toString (makeStardictDataDir [
|
||||||
|
{
|
||||||
|
name = "gr-de";
|
||||||
|
path = pkgs.fetchurl {
|
||||||
|
url = "http://tovotu.de/data/stardict/pape_gr-de.zip";
|
||||||
|
sha256 = "1d705y47b40vp0mg79vbwasw4y0i8fmnlwvf4x4ri0dkfqng9sky";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "la-de";
|
||||||
|
path = pkgs.fetchurl {
|
||||||
|
url = "http://tovotu.de/data/stardict/georges_lat-de.zip";
|
||||||
|
sha256 = "12n26nzwg28wn4zwv45mv0wkgy1jh1d8p0k6haamz9601cqq7hkj";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "de-la";
|
||||||
|
path = pkgs.fetchurl {
|
||||||
|
url = "http://tovotu.de/data/stardict/georges_de-lat.zip";
|
||||||
|
sha256 = "0inm6xn1lcnb851cj329n0v2vbfc1z1bxwhgsd8fnm0zxy3f3ifq";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
environment.variables.CITATIONSTYLES = toString (pkgs.linkFarm "citation-styles" [
|
environment.variables.CITATIONSTYLES = toString (pkgs.linkFarm "citation-styles" [
|
||||||
(zoteroStyle {
|
(zoteroStyle {
|
||||||
name = "chicago-author-date-de";
|
name = "chicago-author-date-de";
|
||||||
@@ -41,5 +67,6 @@ in
|
|||||||
# proselint
|
# proselint
|
||||||
asciidoctor
|
asciidoctor
|
||||||
wordnet
|
wordnet
|
||||||
|
sdcv # stardict cli
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
53
configs/sxiv.nix
Normal file
53
configs/sxiv.nix
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{ pkgs, lib, ... }:
|
||||||
|
let
|
||||||
|
important-directories = pkgs.writeText "directories" ''
|
||||||
|
h ~/
|
||||||
|
d ~/cloud/Dropbox/
|
||||||
|
g ~/cloud/gdrive/
|
||||||
|
s ~/cloud/Seafile/
|
||||||
|
kk ~/cloud/keybase/private/kmein/
|
||||||
|
kp ~/cloud/keybase/public/kmein/
|
||||||
|
t /tmp
|
||||||
|
D ~/Downloads
|
||||||
|
cf ''${XDG_CONFIG_HOME:-$HOME/.config}
|
||||||
|
'';
|
||||||
|
in {
|
||||||
|
environment.systemPackages = [ pkgs.sxiv ];
|
||||||
|
|
||||||
|
# TODO fix
|
||||||
|
home-manager.users.me.xdg.configFile."sxiv/exec/key-handler".source = pkgs.writers.writeDash "key-handler" ''
|
||||||
|
PATH=$PATH:${lib.makeBinPath [ pkgs.gnused pkgs.gawk pkgs.dmenu pkgs.coreutils pkgs.libnotify pkgs.imagemagick pkgs.xclip ]}
|
||||||
|
|
||||||
|
echo >&2 key "$1" pressed
|
||||||
|
while read file; do
|
||||||
|
case "$1" in
|
||||||
|
"c")
|
||||||
|
[ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${important-directories} | awk '{print $2}' | dmenu -l 20 -i -p "Copy file(s) to where?" | sed "s|~|$HOME|g")"
|
||||||
|
[ -z "$destdir" ] && exit
|
||||||
|
[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit
|
||||||
|
cp "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file copied to $destdir." &
|
||||||
|
;;
|
||||||
|
"m")
|
||||||
|
[ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${important-directories} | awk '{print $2}' | dmenu -l 20 -i -p "Move file(s) to where?" | sed "s|~|$HOME|g")"
|
||||||
|
[ -z "$destdir" ] && exit
|
||||||
|
[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit
|
||||||
|
mv "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file moved to $destdir." &
|
||||||
|
;;
|
||||||
|
"r")
|
||||||
|
convert -rotate 90 "$file" "$file" ;;
|
||||||
|
"R")
|
||||||
|
convert -rotate -90 "$file" "$file" ;;
|
||||||
|
"f")
|
||||||
|
convert -flop "$file" "$file" ;;
|
||||||
|
"y")
|
||||||
|
echo -n "$file" | xclip -selection clipboard &&
|
||||||
|
notify-send "$file copied to clipboard" & ;;
|
||||||
|
"Y")
|
||||||
|
readlink -f "$file" | xclip -selection clipboard &&
|
||||||
|
notify-send "$(readlink -f "$file") copied to clipboard" & ;;
|
||||||
|
"d")
|
||||||
|
[ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user