From c2d1a80875885ec5dd3393b30f93479125c1fb87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kier=C3=A1n=20Meinhardt?= Date: Sun, 19 Apr 2020 13:00:13 +0200 Subject: [PATCH] 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 --- configs/default.nix | 174 +++++++++++++++++++++++++++++++++++ configs/i3.nix | 7 ++ configs/packages/default.nix | 1 - configs/packages/writing.nix | 27 ++++++ configs/sxiv.nix | 53 +++++++++++ 5 files changed, 261 insertions(+), 1 deletion(-) create mode 100644 configs/sxiv.nix diff --git a/configs/default.nix b/configs/default.nix index e5c4e5a..6df4942 100644 --- a/configs/default.nix +++ b/configs/default.nix @@ -43,6 +43,7 @@ in ./rofi.nix ./ssh.nix ./sudo.nix + ./sxiv.nix ./themes/mac-os.nix ./theming.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 view-mailcap + bind attach l view-mailcap + bind editor 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 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 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 + ''} + ''; + } ]; } diff --git a/configs/i3.nix b/configs/i3.nix index 944c67a..a73689a 100644 --- a/configs/i3.nix +++ b/configs/i3.nix @@ -137,6 +137,13 @@ in with config.niveum; { "${modifier}+Shift+w" = "exec ${pkgs.xautolock}/bin/xautolock -locknow"; "${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}+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}+u" = "exec ${pkgs.scripts.emoji-menu}/bin/emoji-menu"; diff --git a/configs/packages/default.nix b/configs/packages/default.nix index 4d4c045..5855930 100644 --- a/configs/packages/default.nix +++ b/configs/packages/default.nix @@ -53,7 +53,6 @@ # MEDIA ffmpeg imagemagick - sxiv scrot # ARCHIVE TOOLS unzip diff --git a/configs/packages/writing.nix b/configs/packages/writing.nix index ed1cd5d..bd56f83 100644 --- a/configs/packages/writing.nix +++ b/configs/packages/writing.nix @@ -7,9 +7,35 @@ let inherit sha256; }; }; + makeStardictDataDir = dicts: pkgs.linkFarm "dictionaries" (map ({name, path}: { name = "dic/${name}"; inherit path; }) dicts); scardanelli = config.networking.hostName == "scardanelli"; 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" [ (zoteroStyle { name = "chicago-author-date-de"; @@ -41,5 +67,6 @@ in # proselint asciidoctor wordnet + sdcv # stardict cli ]; } diff --git a/configs/sxiv.nix b/configs/sxiv.nix new file mode 100644 index 0000000..6095100 --- /dev/null +++ b/configs/sxiv.nix @@ -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 + ''; +}