Compare commits

..

1 Commits

Author SHA1 Message Date
7f08045407 Add nix-ld option to project-init 2022-09-04 08:44:32 +02:00
86 changed files with 2065 additions and 530 deletions

View File

@@ -22,5 +22,5 @@ cd ~/.dotfiles
3. Run stow
#+BEGIN_SRC sh
stow */
stow *
#+END_SRC

View File

@@ -8,7 +8,7 @@ import:
incremental: yes
quiet_fallback: skip
timid: no
plugins: fetchart embedart musicbrainz
plugins: fetchart embedart
art_filename: folder
fetchart:
cover_format: jpeg

Binary file not shown.

View File

@@ -1,2 +0,0 @@
[MIME Cache]
x-scheme-handler/org-protocol=org-protocol.desktop;

View File

@@ -1,7 +0,0 @@
[Desktop Entry]
Name=org-protocol
Exec=emacsclient %u
Type=Application
Terminal=false
Categories=System;
MimeType=x-scheme-handler/org-protocol;

View File

@@ -0,0 +1,6 @@
{
"device": "alsa_output.pci-0000_00_1f.3.analog-stereo",
"device-description": "Built-in Audio Analog Stereo",
"device-profile": "analog-output-headphones",
"preset-name": "AKG K361"
}

View File

@@ -0,0 +1,6 @@
{
"device": "alsa_output.pci-0000_00_1f.3.analog-stereo",
"device-description": "Built-in Audio Analog Stereo",
"device-profile": "analog-output-speaker",
"preset-name": "Advanced Auto Gain"
}

View File

@@ -1,6 +0,0 @@
{
"device": "alsa_output.pci-0000_04_00.6.analog-stereo",
"device-description": "Family 17h/19h HD Audio Controller Analog Stereo",
"device-profile": "analog-output-headphones",
"preset-name": "AKG K361"
}

View File

@@ -1,6 +0,0 @@
{
"device": "alsa_output.pci-0000_04_00.6.analog-stereo",
"device-description": "Family 17h/19h HD Audio Controller Analog Stereo",
"device-profile": "analog-output-speaker",
"preset-name": "Laptop speakers"
}

View File

@@ -1,16 +0,0 @@
{
"output": {
"blocklist": [],
"convolver#0": {
"autogain": true,
"bypass": false,
"input-gain": 0.0,
"ir-width": 100,
"kernel-path": "/home/coolneng/.config/easyeffects/irs/AKG K361.irs",
"output-gain": 0.0
},
"plugins_order": [
"convolver#0"
]
}
}

View File

@@ -1,16 +0,0 @@
{
"output": {
"blocklist": [],
"convolver#0": {
"autogain": true,
"bypass": false,
"input-gain": 0.0,
"ir-width": 100,
"kernel-path": "/home/coolneng/.config/easyeffects/irs/AKG K361.irs",
"output-gain": 0.0
},
"plugins_order": [
"convolver#0"
]
}
}

View File

@@ -1,16 +0,0 @@
{
"output": {
"blocklist": [],
"convolver#0": {
"autogain": true,
"bypass": false,
"input-gain": 0.0,
"ir-width": 100,
"kernel-name": "AKG K361",
"output-gain": 0.0
},
"plugins_order": [
"convolver#0"
]
}
}

View File

@@ -6,20 +6,31 @@ set -g man_standout -o blue
set -g man_bold -o magenta
# Aliases
alias f "fff"
alias bc "bc -l"
alias vim "nvim"
alias docker-compose "podman-compose"
alias sc "systemctl"
alias scu "systemctl --user"
alias jc "journalctl -eu"
alias jcu "journalctl --user -eu"
alias jc "journalctl -u"
alias webtorrent "webtorrent -i -o /tmp/webtorrent --mpv --player-args='--sub-auto=all --sub-file-paths=Subs:subs'"
alias ns "nix-shell -p"
alias tmpdir "cd $(mktemp -d)"
# Additional paths
set PATH $PATH $HOME/.emacs.d/bin
set PATH $PATH $HOME/.local/share/scripts
# fff settings
## colors [0-9]
set -x FFF_COL1 4
set -x FFF_COL2 8
# favourites
set -x FFF_FAV1 $HOME/Documents/Uni
set -x FFF_FAV2 $HOME/Documents/Papers
set -x FFF_FAV3 $HOME/Documents/Books/Academic
set -x FFF_FAV4 $HOME/Documents/Education
# keybindings
set -x FFF_KEY_MOVE off
set -x FFF_KEY_MOVE_ALL off
# Set up direnv
eval (direnv hook fish)

View File

@@ -3,7 +3,7 @@
SETUVAR __fish_init_2_39_8:\x1d
SETUVAR __fish_init_2_3_0:\x1d
SETUVAR __fish_init_3_x:\x1d
SETUVAR __fish_initialized:3800
SETUVAR __fish_initialized:3400
SETUVAR fish_color_autosuggestion:555\x1ebrblack
SETUVAR fish_color_cancel:\x2dr
SETUVAR fish_color_command:white\x1e\x2d\x2dbold
@@ -22,7 +22,7 @@ SETUVAR fish_color_operator:red
SETUVAR fish_color_param:cyan
SETUVAR fish_color_quote:green
SETUVAR fish_color_redirection:red
SETUVAR fish_color_search_match:white\x1e\x2d\x2dbackground\x3dbrblack
SETUVAR fish_color_search_match:bryellow\x1e\x2d\x2dbackground\x3dbrblack
SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack
SETUVAR fish_color_status:red
SETUVAR fish_color_user:brgreen

View File

@@ -4,6 +4,7 @@
signingkey = 9893DA236405AF57
[core]
excludesfile = /home/coolneng/.config/git/global_gitignore
pager = delta
[credential]
helper = !pass-git-helper $@
[commit]
@@ -14,11 +15,16 @@
gpgsign = true
[gitlab]
user = akasroua
[lfs]
activitytimeout = 60
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[filter "git-ignore-line.sh"]
clean = /home/coolneng/.dotfiles/scripts/.local/share/scripts/git-ignore-line.sh
smudge = cat
[interactive]
diffFilter = delta --color-only
[add.interactive]
useBuiltin = false # required for git 2.37.0
[delta]
navigate = true # use n and N to move between diff sections
[merge]
conflictstyle = diff3
[diff]
colorMoved = default

View File

@@ -4,10 +4,8 @@ CMakeFiles/
cmake_install.cmake
compile_commands.json
Debug/
.ccls
.ccls-cache
.cache
.clang_complete
*.o
# LaTeX
auto
@@ -20,8 +18,6 @@ auto
# Python
.mypy_cache
__pycache__
.ipynb_checkpoints
.venv
# Dev environment with Nix
.envrc
.direnv
@@ -34,7 +30,3 @@ __pycache__
.classpath
.project
.settings
# Emacs
.projectile-cache.eld
# Platformio
.pio

View File

@@ -0,0 +1,15 @@
{
"host": "disroot.org",
"port": 993,
"tls": true,
"tlsOptions": {
"rejectUnauthorized": true
},
"username": "akasroua@disroot.org",
"passwordCmd": "pass mail/disroot",
"onNewMail": "mbsync disroot",
"onNewMailPost": "notmuch new",
"boxes": [
"INBOX"
]
}

View File

@@ -0,0 +1,15 @@
{
"host": "imap.gmail.com",
"port": 993,
"tls": true,
"tlsOptions": {
"rejectUnauthorized": true
},
"username": "akasroua@gmail.com",
"passwordCmd": "pass mail/gmail",
"onNewMail": "mbsync gmail",
"onNewMailPost": "notmuch new",
"boxes": [
"INBOX"
]
}

View File

@@ -1,22 +0,0 @@
configurations:
-
host: disroot.org
port: 993
tls: true
tlsOptions:
rejectUnauthorized: true
username: akasroua@disroot.org
passwordCmd: 'pass mail/disroot'
onNewMail: '~/.local/share/scripts/mail-sync disroot'
-
host: imap.gmail.com
port: 993
tls: true
tlsOptions:
rejectUnauthorized: true
username: akasroua@gmail.com
passwordCmd: 'pass mail/gmail'
onNewMail: '~/.local/share/scripts/mail-sync gmail'
boxes:
-
mailbox: INBOX

View File

@@ -0,0 +1,16 @@
{
"host": "outlook.office365.com",
"port": 993,
"tls": true,
"tlsOptions": {
"rejectUnauthorized": true
},
"username": "amin.kasrouaouam@ugent.be",
"passwordCmd": "/home/coolneng/.local/share/scripts/mutt_oauth2.py /home/coolneng/.cache/tokenfile",
"xoauth2": true,
"onNewMail": "mbsync ugent",
"onNewMailPost": "notmuch new",
"boxes": [
"INBOX"
]
}

View File

@@ -1,26 +1,26 @@
profile multihead-dock {
output eDP-1 enable position 1920,0
output DP-1 enable mode 1920x1080 position 0,0
profile multihead-DP {
output eDP-1 enable
output DP-1 enable
exec swaymsg workspace "1: ", move workspace to eDP-1
exec swaymsg workspace "3: ", move workspace to eDP-1
exec swaymsg workspace "2: ", move workspace to DP-1
exec swaymsg workspace "4: 󱓷", move workspace to DP-1
exec swaymsg workspace "4: ", move workspace to DP-1
exec light -S 100
exec light -s sysfs/leds/tpacpi::kbd_backlight -S 0
}
profile multihead-HDMI {
output eDP-1 enable position 0,0
output HDMI-A-1 enable mode 1920x1080 position 1920,0
output eDP-1 enable
output HDMI-A-2 enable
exec swaymsg workspace "1: ", move workspace to eDP-1
exec swaymsg workspace "3: ", move workspace to eDP-1
exec swaymsg workspace "2: ", move workspace to HDMI-A-2
exec swaymsg workspace "4: 󱓷", move workspace to HDMI-A-2
exec swaymsg workspace "4: ", move workspace to HDMI-A-2
exec light -S 100
exec light -s sysfs/leds/tpacpi::kbd_backlight -S 0
}
profile nomad {
output eDP-1 enable
exec light -S 50
output eDP-1 enable mode 1920x1080
exec light -S 70
}

View File

@@ -989,17 +989,9 @@ map kitty_mod+delete clear_terminal reset active
#: }}}
# }}}
#
# Open URL by clicking on it
mouse_map left press ungrabbed,grabbed mouse_click_url
confirm_os_window_close 0
# BEGIN_KITTY_THEME
# Nord
include current-theme.conf
# END_KITTY_THEME

View File

@@ -0,0 +1,39 @@
background #161821
foreground #c6c8d1
selection_background #1e2132
selection_foreground #c6c8d1
cursor #d2d4de
# black
color0 #161821
color8 #6b7089
# red
color1 #e27878
color9 #e98989
# green
color2 #b4be82
color10 #c0ca8e
# yellow/orange
color3 #e2a478
color11 #e9b189
# blue
color4 #84a0c6
color12 #91acd1
# magenta/purple
color5 #a093c7
color13 #ada0d3
# cyan
color6 #89b8c2
color14 #95c4ce
# white
color7 #c6c8d1
color15 #d2d4de

View File

@@ -0,0 +1,40 @@
background #e8e9ec
foreground #33374c
selection_background #d2d4dd
selection_foreground #33374c
cursor #33374c
cursor_text_color #e8e9ec
# black
color0 #dcdfe7
color8 #8389a3
# red
color1 #cc517a
color9 #cc3768
# green
color2 #668e3d
color10 #598030
# yellow/orange
color3 #c57339
color11 #b6662d
# blue
color4 #2d539e
color12 #22478e
# magenta/purple
color5 #7759b4
color13 #6845ad
# cyan
color6 #3f83a6
color14 #327698
# white
color7 #33374c
color15 #262a3f

View File

@@ -4,7 +4,7 @@ Host imap.gmail.com
User akasroua@gmail.com
AuthMechs LOGIN
PassCmd "pass mail/gmail"
TLSType IMAPS
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt
IMAPStore gmail-remote
@@ -14,7 +14,7 @@ MaildirStore gmail-local
Subfolders Verbatim
# The trailing "/" is important
Path ~/.mail/gmail/
Inbox ~/.mail/gmail/inbox/
Inbox ~/.mail/gmail/Inbox/
Channel sync-gmail-default
Far :gmail-remote:
@@ -47,26 +47,81 @@ Create Both
Expunge Both
SyncState *
Channel sync-gmail-archive
Far :gmail-remote:"[Gmail]/All Mail"
Near :gmail-local:archive
Create Both
Expunge Both
SyncState *
Group gmail
Channel sync-gmail-default
Channel sync-gmail-sent
Channel sync-gmail-trash
Channel sync-gmail-junk
Channel sync-gmail-archive
IMAPAccount ugent
Host outlook.office365.com
User amin.kasrouaouam@ugent.be
AuthMechs XOAUTH2
PassCmd "nix-shell -p python3 --command 'python /home/coolneng/.local/share/scripts/mutt_oauth2.py /home/coolneng/.cache/tokenfile'"
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt
IMAPStore ugent-remote
Account ugent
MaildirStore ugent-local
Subfolders Verbatim
# The trailing "/" is important
Path ~/.mail/ugent/
Inbox ~/.mail/ugent/inbox/
Channel ugent-default
Far :ugent-remote:
Near :ugent-local:
Create Both
Expunge Both
SyncState *
Channel ugent-sent
Far :ugent-remote:"Sent Items"
Near :ugent-local:sent
Create Both
Expunge Both
SyncState *
Channel ugent-trash
Far :ugent-remote:"Deleted Items"
Near :ugent-local:trash
Create Both
Expunge Both
SyncState *
Channel ugent-archive
Far :ugent-remote:"Archive"
Near :ugent-local:archive
Create Both
Expunge Both
SyncState *
Channel ugent-junk
Far :ugent-remote:"Junk Email"
Near :ugent-local:junk
Create Both
Expunge Both
SyncState *
Group ugent
Channel ugent-default
Channel ugent-sent
Channel ugent-trash
Channel ugent-archive
Channel ugent-junk
IMAPAccount disroot
Host disroot.org
User akasroua@disroot.org
AuthMechs LOGIN
PassCmd "pass mail/disroot"
TLSType IMAPS
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt
IMAPStore disroot-remote
@@ -109,13 +164,6 @@ Create Both
Expunge Both
SyncState *
Channel sync-disroot-archive
Far :disroot-remote:"Archive"
Near :disroot-local:archive
Create Both
Expunge Both
SyncState *
Channel sync-disroot-bookings
Far :disroot-remote:"Bookings"
Near :disroot-local:bookings
@@ -152,24 +200,13 @@ Create Both
Expunge Both
SyncState *
Channel sync-disroot-jobs
Far :disroot-remote:"Jobs"
Near :disroot-local:jobs
Create Both
Expunge Both
SyncState *
Group disroot
Channel sync-disroot-default
Channel sync-disroot-sent
Channel sync-disroot-trash
Channel sync-disroot-archive
Channel sync-disroot-junk
Channel sync-disroot-bookings
Channel sync-disroot-buying
Channel sync-disroot-services
Channel sync-disroot-smart
Channel sync-disroot-travel
Channel sync-disroot-archive
Channel sync-disroot-jobs

View File

@@ -1,72 +1,8 @@
[Default Applications]
application/pdf=org.pwmt.zathura.desktop
text/html=firefox.desktop
x-scheme-handler/http=firefox.desktop
x-scheme-handler/https=firefox.desktop
x-scheme-handler/about=firefox.desktop
x-scheme-handler/unknown=firefox.desktop
x-scheme-handler/msteams=teams-for-linux.desktop
application/vnd.ms-asf=mpv.desktop
application/vnd.rn-realmedia=mpv.desktop
application/smil+xml=mpv.desktop
application/x-matroska=mpv.desktop
application/mxf=mpv.desktop
application/ogg=mpv.desktop
application/x-shorten=mpv.desktop
application/x-mobipocket-ebook=calibre-gui.desktop
application/x-sony-bbeb=calibre-gui.desktop
application/pdf=org.pwmt.zathura.desktop
application/vnd.oasis.opendocument.spreadsheet-flat-xml=calc.desktop
application/vnd.ms-works=calc.desktop
application/vnd.ms-excel=calc.desktop
application/x-quattropro=calc.desktop
application/vnd.dbf=calc.desktop
application/vnd.stardivision.calc=calc.desktop
application/vnd.oasis.opendocument.spreadsheet-template=calc.desktop
application/vnd.oasis.opendocument.chart=calc.desktop
application/vnd.oasis.opendocument.chart-template=calc.desktop
application/vnd.sun.xml.calc.template=calc.desktop
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=calc.desktop
application/x-gnumeric=calc.desktop
application/vnd.apple.numbers=calc.desktop
application/vnd.lotus-1-2-3=calc.desktop
application/vnd.oasis.opendocument.spreadsheet=calc.desktop
application/vnd.sun.xml.calc=calc.desktop
application/vnd.openxmlformats-officedocument.spreadsheetml.template=calc.desktop
application/vnd.stardivision.chart=calc.desktop
image/jpeg=swayimg.desktop
image/tiff=swayimg.desktop
image/x-tga=swayimg.desktop
image/png=swayimg.desktop
image/x-exr=swayimg.desktop
image/gif=swayimg.desktop
image/x-portable-anymap=swayimg.desktop
image/webp=swayimg.desktop
image/heif=swayimg.desktop
image/avif=swayimg.desktop
image/bmp=swayimg.desktop
image/svg+xml=swayimg.desktop
text/x-tex=emacsclient.desktop
text/x-c++src=emacsclient.desktop
text/x-java=emacsclient.desktop
text/x-chdr=emacsclient.desktop
text/tcl=emacsclient.desktop
text/markdown=emacsclient.desktop
text/x-pascal=emacsclient.desktop
text/x-makefile=emacsclient.desktop
text/x-moc=emacsclient.desktop
text/plain=emacsclient.desktop
text/x-csrc=emacsclient.desktop
text/x-c++hdr=emacsclient.desktop
text/html=firefox.desktop
application/bitwig-device=com.bitwig.BitwigStudio.desktop
application/bitwig-remote-controls=com.bitwig.BitwigStudio.desktop
application/bitwig-package=com.bitwig.BitwigStudio.desktop
application/bitwig-preset=com.bitwig.BitwigStudio.desktop
application/bitwig-module=com.bitwig.BitwigStudio.desktop
application/bitwig-scene=com.bitwig.BitwigStudio.desktop
application/vnd.bitwig.dawproject=com.bitwig.BitwigStudio.desktop
application/bitwig-project=com.bitwig.BitwigStudio.desktop
application/bitwig-template=com.bitwig.BitwigStudio.desktop
application/bitwig-modulator=com.bitwig.BitwigStudio.desktop
application/bitwig-extension=com.bitwig.BitwigStudio.desktop
application/bitwig-clip=com.bitwig.BitwigStudio.desktop

View File

@@ -1,6 +1,5 @@
# mpd
mpd_music_dir = "~/Music"
mpd_connection_timeout = 60
## Selected tracks ##
selected_item_prefix = "* "
@@ -25,7 +24,7 @@ statusbar_visibility = "yes"
cyclic_scrolling = "yes"
titles_visibility = "no"
display_bitrate = "yes"
playlist_separate_albums = "yes"
playlist_separate_albums = "no"
ask_before_clearing_playlists = "no"
media_library_primary_tag = "album_artist"
media_library_hide_album_dates = "yes"

View File

@@ -5,21 +5,17 @@ sub-font='Roboto Condensed'
sub-auto=all
sub-file-paths=Subs:subs
## HW Decoding
hwdec=vaapi
hwdec=auto-safe
vo=gpu
profile=gpu-hq
## Volume settings
volume-max=200
af=acompressor
## Youtube-dl settings
ytdl-format=bestvideo[height<=1080][vcodec!=av1]+bestaudio/best
ytdl-format=bestvideo[height<=?1080][vcodec!=vp9]+bestaudio/best
## Wayland
gpu-context=wayland
## Default window size
geometry=70%x70%
## HACK use API instead of lcoal database for sponsorblock
script-opts-append=sponsorblock-local_database=no
## Use pipewire for audio
ao=pipewire
## Save position of the video
save-position-on-quit

View File

@@ -13,6 +13,13 @@ from akasroua@gmail.com
user akasroua@gmail.com
passwordeval "pass mail/gmail"
account ugent
auth xoauth2
host smtp.office365.com
from amin.kasrouaouam@ugent.be
user amin.kasrouaouam@ugent.be
passwordeval "nix-shell -p python3 --command 'python /home/coolneng/.local/share/scripts/mutt_oauth2.py /home/coolneng/.cache/tokenfile'"
account disroot
host disroot.org
from akasroua@disroot.org

View File

@@ -0,0 +1,28 @@
# vim: filetype=neomuttrc
# muttrc file for account disroot
set realname = "Amin Kasrou Aouam"
set from = "akasroua@disroot.org"
set sendmail = "~/.config/neomutt/etc/sendmail disroot"
set folder = "~/.mail/disroot"
set mbox_type = Maildir
set ssl_starttls = yes
set ssl_force_tls = yes
bind index,pager gg noop
bind index,pager g noop
bind index gg first-entry
unmailboxes *
mailboxes =junk =inbox =trash =sent =bookings =buying =services =smart =travel
macro index,pager gi "<change-folder>=inbox<enter>" "Go to inbox."
macro index,pager gs "<change-folder>=sent<enter>" "Go to sent."
macro index,pager gt "<change-folder>=trash<enter>" "Go to trash."
macro index,pager gj "<change-folder>=junk<enter>" "Go to spam."
macro index,pager gb "<change-folder>=bookings<enter>" "Go to bookings."
macro index,pager gy "<change-folder>=buying<enter>" "Go to buying."
macro index,pager ge "<change-folder>=services<enter>" "Go to services."
macro index,pager gm "<change-folder>=smart<enter>" "Go to smart."
macro index,pager gr "<change-folder>=travel<enter>" "Go to travel."
set spoolfile = "+inbox"
set postponed = ""
set trash = "+trash"

View File

@@ -0,0 +1,24 @@
# vim: filetype=neomuttrc
# muttrc file for account gmail
set realname = "Amin Kasrou Aouam"
set from = "akasroua@gmail.com"
set sendmail = "~/.config/neomutt/etc/sendmail gmail"
set folder = "~/.mail/gmail"
set mbox_type = Maildir
set ssl_starttls = yes
set ssl_force_tls = yes
bind index,pager gg noop
bind index,pager g noop
bind index gg first-entry
unmailboxes *
mailboxes =junk =Inbox =trash =sent
macro index,pager gi "<change-folder>=Inbox<enter>" "Go to inbox."
macro index,pager gs "<change-folder>=sent<enter>" "Go to sent."
macro index,pager gt "<change-folder>=trash<enter>" "Go to trash."
macro index,pager gj "<change-folder>=junk<enter>" "Go to spam."
set spoolfile = "+Inbox"
set record = "+sent"
set postponed = ""
set trash = "+trash"

View File

@@ -0,0 +1,25 @@
# vim: filetype=neomuttrc
# muttrc file for account coolneng
set realname = "Amin Kasrou Aouam"
set from = "amin.kasrouaouam@ugent.be"
set sendmail = "~/.config/neomutt/etc/sendmail ugent"
set folder = "~/.mail/ugent"
set mbox_type = Maildir
set ssl_starttls = yes
set ssl_force_tls = yes
bind index,pager gg noop
bind index,pager g noop
bind index gg first-entry
unmailboxes *
mailboxes =inbox =sent =trash =archive =junk
macro index,pager gi "<change-folder>=inbox<enter>" "Go to inbox."
macro index,pager gs "<change-folder>=sent<enter>" "Go to sent."
macro index,pager gt "<change-folder>=trash<enter>" "Go to trash."
macro index,pager ga "<change-folder>=archive<enter>" "Go to archive."
macro index,pager gj "<change-folder>=junk<enter>" "Go to junk."
set spoolfile = "+inbox"
set record = "+sent"
set postponed = ""
set trash = "+deleted"

View File

@@ -0,0 +1,66 @@
# Header colors:
color header blue default ".*"
color header brightmagenta default "^(From)"
color header brightcyan default "^(Subject)"
color header brightwhite default "^(CC|BCC)"
mono bold bold
mono underline underline
mono indicator reverse
mono error bold
color normal default default
color indicator brightmagenta default # currently selected message. default makes bar clear, disabled arrow to save space.
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 magenta 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
color body brightblue 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.*"
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<>\"]"
# Default index colors:
color index brightwhite default '.*'
color index_author brightgreen default '.*'
color index_number blue default
color index_subject cyan default '.*'
# For new mail:
color index brightyellow black "~N"
color index_author brightred black "~N"
color index_subject brightcyan black "~N"
color progress black cyan

View File

@@ -0,0 +1,21 @@
## A file for aliases
# UGR professors
alias dani dmolina@decsai.ugr.es
alias cano ccano@decsai.ugr.es
alias merino cmerino@ugr.es
alias fran fjrodriguez@decsai.ugr.es
alias salva salvaguti@decsai.ugr.es
alias marisol marisolbc@ugr.es
# UGent students
alias mickey michael.fatjanov@ugent.be
alias natan natan.tourne@ugent.be
alias conor sean.barr@ugent.be
# Personal
alias barbas arodasaparicio@gmail.com
alias rafika rafibel63@gmail.com
alias oekk luismata06@gmail.com
alias walid mkasrou@gmail.com
alias walida naouam61@gmail.com

View File

@@ -0,0 +1,131 @@
# -*-muttrc-*-
#
# Command formats for gpg.
#
# Version notes:
#
# GPG 2.1 introduces the option "--pinentry-mode", which requires
# the "loopback" argument in instances where "--passphrase-fd" is
# used.
#
# Some of the older commented-out versions of the commands use gpg-2comp from:
# http://70t.de/download/gpg-2comp.tar.gz
#
# %p The empty string when no passphrase is needed,
# the string "PGPPASSFD=0" if one is needed.
#
# This is mostly used in conditional % sequences.
#
# %f Most PGP commands operate on a single file or a file
# containing a message. %f expands to this file's name.
#
# %s When verifying signatures, there is another temporary file
# containing the detached signature. %s expands to this
# file's name.
#
# %a In "signing" contexts, this expands to the value of the
# configuration variable $pgp_sign_as, if set, otherwise
# $pgp_default_key. You probably need to
# use this within a conditional % sequence.
#
# %r In many contexts, neomutt passes key IDs to pgp. %r expands to
# a list of key IDs.
# Section A: Key Management
# The default key for encryption (used by $pgp_self_encrypt and
# $postpone_encrypt).
#
# It will also be used for signing unless $pgp_sign_as is set to a
# key.
#
# Unless your key does not have encryption capability, uncomment this
# line and replace the keyid with your own.
#
# set pgp_default_key="0x12345678"
# If you have a separate signing key, or your key _only_ has signing
# capability, uncomment this line and replace the keyid with your
# signing keyid.
#
# set pgp_sign_as="0x87654321"
# Section B: Commands
# Note that we explicitly set the comment armor header since GnuPG, when used
# in some localiaztion environments, generates 8bit data in that header, thereby
# breaking PGP/MIME.
# decode application/pgp
#
set pgp_decode_command="gpg --status-fd=2 %?p?--pinentry-mode loopback --passphrase-fd 0? --no-verbose --quiet --batch --output - %f"
# Verify a signature
#
set pgp_verify_command="gpg --status-fd=2 --no-verbose --quiet --batch --output - --verify %s %f"
# Decrypt an attachment
#
set pgp_decrypt_command="gpg --status-fd=2 %?p?--pinentry-mode loopback --passphrase-fd 0? --no-verbose --quiet --batch --output - --decrypt %f"
# Create a PGP/MIME signed attachment
#
# set pgp_sign_command="gpg-2comp --comment '' --no-verbose --batch --output - %?p?--passphrase-fd 0? --armor --detach-sign --textmode %?a?-u %a? %f"
#
set pgp_sign_command="gpg %?p?--pinentry-mode loopback --passphrase-fd 0? --no-verbose --batch --quiet --output - --armor --textmode %?a?--local-user %a? --detach-sign %f"
# Create a application/pgp inline signed message. This style is obsolete but still needed for Hushmail recipients and some MUAs.
#
# set pgp_clearsign_command="gpg-2comp --comment '' --no-verbose --batch --output - %?p?--passphrase-fd 0? --armor --textmode --clearsign %?a?-u %a? %f"
#
set pgp_clearsign_command="gpg %?p?--pinentry-mode loopback --passphrase-fd 0? --no-verbose --batch --quiet --output - --armor --textmode %?a?--local-user %a? --clearsign %f"
# Create an encrypted attachment (note that some users include the --always-trust option here)
#
# set pgp_encrypt_only_command="/usr/libexec/neomutt/pgpewrap gpg-2comp -v --batch --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f"
#
set pgp_encrypt_only_command="/usr/libexec/neomutt/pgpewrap gpg --batch --quiet --no-verbose --output - --textmode --armor --encrypt -- --recipient %r -- %f"
# Create an encrypted and signed attachment (note that some users include the --always-trust option here)
#
# set pgp_encrypt_sign_command="/usr/libexec/neomutt/pgpewrap gpg-2comp %?p?--passphrase-fd 0? -v --batch --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f"
#
set pgp_encrypt_sign_command="/usr/libexec/neomutt/pgpewrap gpg %?p?--pinentry-mode loopback --passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - %?a?--local-user %a? --armor --sign --encrypt -- --recipient %r -- %f"
# Import a key into the public key ring
#
set pgp_import_command="gpg --no-verbose --import %f"
# Export a key from the public key ring
#
set pgp_export_command="gpg --no-verbose --armor --export %r"
# Verify a key
#
set pgp_verify_key_command="gpg --verbose --batch --fingerprint --check-sigs %r"
# Read in the public key ring
#
set pgp_list_pubring_command="gpg --no-verbose --batch --quiet --with-colons --with-fingerprint --with-fingerprint --list-keys %r"
# Read in the secret key ring
#
set pgp_list_secring_command="gpg --no-verbose --batch --quiet --with-colons --with-fingerprint --with-fingerprint --list-secret-keys %r"
# Fetch keys
# set pgp_getkeys_command="pkspxycwrap %r"
# pattern for good signature - may need to be adapted to locale!
# OK, here's a version which uses gnupg's message catalog:
# set pgp_good_sign="^gpgv?: Good signature from"
# set pgp_good_sign="`gettext -d gnupg -s 'Good signature from "' | tr -d '"'`"
#
# Output pattern to indicate a valid signature using --status-fd messages
set pgp_good_sign="^\\[GNUPG:\\] GOODSIG"
# Output pattern to verify a decryption occurred
# This is now deprecated by pgp_check_gpg_decrypt_status_fd:
# set pgp_decryption_okay="^\\[GNUPG:\\] DECRYPTION_OKAY"
set pgp_check_gpg_decrypt_status_fd

View File

@@ -0,0 +1,8 @@
text/html; w3m -I %{charset} -T text/html %s; copiousoutput;
text/* ; nvim %s ; edit=nvim %s ; compose=nvim %s ; needsterminal
image/*; imv %s ; copiousoutput
application/pdf; zathura %s ;
application/vnd.openxmlformats-officedocument.wordprocessingml.document; libreoffice %s ;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; libreoffice %s ;
application/msword; libreoffice %s ;
application/pgp-encrypted; gpg -d '%s'; copiousoutput;

View File

@@ -0,0 +1,71 @@
# vim: filetype=neomuttrc
# Default index colors:
color index yellow default '.*'
color index_author red default '.*'
color index_number blue default
color index_subject cyan default '.*'
# For new mail:
color index brightyellow black "~N"
color index_author brightred black "~N"
color index_subject brightcyan black "~N"
# Header colors:
color header blue default ".*"
color header brightmagenta default "^(From)"
color header brightcyan default "^(Subject)"
color header brightwhite default "^(CC|BCC)"
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
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 "[*]?((N)?ACK|CU|LOL|SCNR|BRB|BTW|CWYL|\
|FWIW|vbg|GD&R|HTH|HTHBE|IMHO|IMNSHO|\
|IRL|RTFM|ROTFL|ROFL|YMMV)[*]?"
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<>\"]""']))']))']))']))']))']))']))']))']))']))']))']))'])']))))))])]"

View File

@@ -0,0 +1,3 @@
#!/bin/sh
nix-shell -p python3 --command "python ~/.local/bin/MIMEmbellish | msmtp -a $1 -t"

View File

@@ -0,0 +1,93 @@
#vim: filetype=neomuttrc
# This is the general mutt config which has the settings that all accounts use.
bind index,pager i noop
bind index,pager g noop
bind index \Cf noop
source etc/muttcol
source etc/aliases
source personal.muttrc
source colors.muttrc
set sleep_time = 0
set sort = 'reverse-date'
set editor = $EDITOR
set copy = no
set beep_new = yes
set mailcap_path = ~/.config/neomutt/etc/mailcap
set date_format="%d/%m/%y %H:%M"
set index_format="%2C %zs %?X?A& ? %D %-15.15F %s (%-4.4c)"
set markers = no
set mark_old = no
set mime_forward = yes
set smtp_authenticators = 'gssapi:login'
set wait_key = no
auto_view text/html
auto_view application/pgp-encrypted
alternative_order text/plain text/enriched text/html
set rfc2047_parameters = yes
set send_charset = 'us-ascii:utf-8'
set ssl_use_tlsv1_2 = yes
unset help
set pager_stop = yes
set wrap=-20
# General remappings
bind editor <space> noop
bind index G last-entry
bind index gg first-entry
bind pager j next-line
bind pager k previous-line
bind pager gg top
bind pager G bottom
bind index d half-down
bind index u half-up
bind index D delete-message
bind index U undelete-message
bind index F search
bind index,pager R group-reply
bind index,pager \031 previous-undeleted # Mouse wheel
bind index,pager \005 next-undeleted # Mouse wheel
macro index,pager S <sync-mailbox>
macro index,pager \Cu |urlscan\n
macro index,pager ,, |urlscan\n
# View attachments properly.
bind attach <return> view-mailcap
set fast_reply # skip to compose when replying
set fcc_attach # save attachments with the body
unset mime_forward # forward attachments as part of body
set forward_format = "Fwd: %s" # format of subject when forwarding
set forward_decode # decode when forwarding
set forward_quote # include message in forwards
set reverse_name # reply as whomever it was to
set include # include message in replies
#Ctrl-R to mark all as read
macro index \Cr "T~U<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" "mark all messages as read"
#
# #sync email
macro index o "<shell-escape>mbsync -a 2>/dev/null 1>&2 &<enter>" "run mbsync to sync all mail"
# #copy/move dialogs
macro index C "<copy-message>?<toggle-mailboxes>" "copy a message to a mailbox"
macro index M "<save-message>?<toggle-mailboxes>" "move a message to a mailbox"
# Notmuch searching
macro index \Cf "<enter-command>unset wait_key<enter><shell-escape>read -p 'notmuch query: ' x; echo \$x >~/.cache/mutt_terms<enter><limit>~i \"\`notmuch search --output=messages \$(cat ~/.cache/mutt_terms) | head -n 600 | perl -le '@a=<>;chomp@a;s/\^id:// for@a;$,=\"|\";print@a'\`\"<enter>" "show only messages matching a notmuch pattern"
macro index A "<limit>all\n" "show all messages (undo limit)"
# # Sidebar mappings
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
# Remove signature
unset signature

View File

@@ -0,0 +1,6 @@
macro index,pager i3 '<sync-mailbox><enter-command>source "/home/coolneng/.config/neomutt"/accounts/disroot.muttrc<enter><change-folder>!<enter>'
source /home/coolneng/.config/neomutt/accounts/disroot.muttrc
macro index,pager i2 '<sync-mailbox><enter-command>source "/home/coolneng/.config/neomutt"/accounts/gmail.muttrc<enter><change-folder>!<enter>'
source /home/coolneng/.config/neomutt/accounts/gmail.muttrc
macro index,pager i1 '<sync-mailbox><enter-command>source "/home/coolneng/.config/neomutt"/accounts/ugent.muttrc<enter><change-folder>!<enter>'
source /home/coolneng/.config/neomutt/accounts/ugent.muttrc

238
neomutt/.local/bin/MIMEmbellish Executable file
View File

@@ -0,0 +1,238 @@
#!/usr/bin/env python
import re
import sys
import email
import shlex
import mimetypes
import subprocess
from copy import copy
from hashlib import md5
from email import charset
from email import encoders
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.nonmultipart import MIMENonMultipart
from os.path import basename, splitext, expanduser
charset.add_charset('utf-8', charset.SHORTEST, '8bit')
def pandoc(from_format, to_format='markdown', plain='markdown', title=None):
markdown = ('markdown'
'-blank_before_blockquote')
if from_format == 'plain':
from_format = plain
if from_format == 'markdown':
from_format = markdown
if to_format == 'markdown':
to_format = markdown
command = 'pandoc -f {} -t {} --standalone --highlight-style=tango'
if to_format in ('html', 'html5'):
if title is not None:
command += ' --variable=pagetitle:{}'.format(shlex.quote(title))
command += ' --webtex --template={}'.format(
expanduser('~/.pandoc/templates/email.html'))
return command.format(from_format, to_format)
def gmailfy(payload):
return payload.replace('<blockquote>',
'<blockquote class="gmail_quote" style="'
'padding: 0 7px 0 7px;'
'border-left: 2px solid #cccccc;'
'font-style: italic;'
'margin: 0 0 7px 3px;'
'">')
def make_alternative(message, part):
alternative = convert(part, 'html',
pandoc(part.get_content_subtype(),
to_format='html',
title=message.get('Subject')))
alternative.set_payload(gmailfy(alternative.get_payload()))
return alternative
def make_replacement(message, part):
return convert(part, 'plain', pandoc(part.get_content_subtype()))
def convert(part, to_subtype, command):
payload = part.get_payload()
if isinstance(payload, str):
payload = payload.encode('utf-8')
else:
payload = part.get_payload(None, True)
if not isinstance(payload, bytes):
payload = payload.encode('utf-8')
process = subprocess.run(
shlex.split(command),
input=payload, stdout=subprocess.PIPE, check=True)
return MIMEText(process.stdout, to_subtype, 'utf-8')
def with_alternative(parent, part, from_signed,
make_alternative=make_alternative,
make_replacement=None):
try:
alternative = make_alternative(parent or part, from_signed or part)
replacement = (make_replacement(parent or part, part)
if from_signed is None and make_replacement is not None
else part)
except:
return parent or part
envelope = MIMEMultipart('alternative')
if parent is None:
for k, v in part.items():
if (k.lower() != 'mime-version'
and not k.lower().startswith('content-')):
envelope.add_header(k, v)
del part[k]
envelope.attach(replacement)
envelope.attach(alternative)
if parent is None:
return envelope
payload = parent.get_payload()
payload[payload.index(part)] = envelope
return parent
def tag_attachments(message):
if message.get_content_type() == 'multipart/mixed':
for part in message.get_payload():
if (part.get_content_maintype() in ['image']
and 'Content-ID' not in part):
filename = part.get_param('filename',
header='Content-Disposition')
if isinstance(filename, tuple):
filename = str(filename[2], filename[0] or 'us-ascii')
if filename:
filename = splitext(basename(filename))[0]
if filename:
part.add_header('Content-ID', '<{}>'.format(filename))
return message
def attachment_from_file_path(attachment_path):
try:
mime, encoding = mimetypes.guess_type(attachment_path, strict=False)
maintype, subtype = mime.split('/')
with open(attachment_path, 'rb') as payload:
attachment = MIMENonMultipart(maintype, subtype)
attachment.set_payload(payload.read())
encoders.encode_base64(attachment)
if encoding:
attachment.add_header('Content-Encoding', encoding)
return attachment
except:
return None
attachment_path_pattern = re.compile(r'\]\s*\(\s*file://(/[^)]*\S)\s*\)|'
r'\]\s*:\s*file://(/.*\S)\s*$',
re.MULTILINE)
def link_attachments(payload):
attached = []
attachments = []
def on_match(match):
if match.group(1):
attachment_path = match.group(1)
cid_fmt = '](cid:{})'
else:
attachment_path = match.group(2)
cid_fmt = ']: cid:{}'
attachment_id = md5(attachment_path.encode()).hexdigest()
if attachment_id in attached:
return cid_fmt.format(attachment_id)
attachment = attachment_from_file_path(attachment_path)
if attachment:
attachment.add_header('Content-ID', '<{}>'.format(attachment_id))
attachments.append(attachment)
attached.append(attachment_id)
return cid_fmt.format(attachment_id)
return match.group()
return attachments, attachment_path_pattern.sub(on_match, payload)
def with_local_attachments(parent, part, from_signed,
link_attachments=link_attachments):
if from_signed is None:
attachments, payload = link_attachments(part.get_payload())
part.set_payload(payload)
else:
attachments, payload = link_attachments(from_signed.get_payload())
from_signed = copy(from_signed)
from_signed.set_payload(payload)
if not attachments:
return parent, part, from_signed
if parent is None:
parent = MIMEMultipart('mixed')
for k, v in part.items():
if (k.lower() != 'mime-version'
and not k.lower().startswith('content-')):
parent.add_header(k, v)
del part[k]
parent.attach(part)
for attachment in attachments:
parent.attach(attachment)
return parent, part, from_signed
def is_target(part, target_subtypes):
return (part.get('Content-Disposition', 'inline') == 'inline'
and part.get_content_maintype() == 'text'
and part.get_content_subtype() in target_subtypes)
def pick_from_signed(part, target_subtypes):
for from_signed in part.get_payload():
if is_target(from_signed, target_subtypes):
return from_signed
def seek_target(message, target_subtypes=['plain', 'markdown']):
if message.is_multipart():
if message.get_content_type() == 'multipart/signed':
part = pick_from_signed(message, target_subtypes)
if part is not None:
return None, message, part
elif message.get_content_type() == 'multipart/mixed':
for part in message.get_payload():
if part.is_multipart():
if part.get_content_type() == 'multipart/signed':
from_signed = pick_from_signed(part, target_subtypes)
if from_signed is not None:
return message, part, from_signed
elif is_target(part, target_subtypes):
return message, part, None
else:
if is_target(message, target_subtypes):
return None, message, None
return None, None, None
def main():
try:
message = email.message_from_file(sys.stdin)
parent, part, from_signed = seek_target(message)
if (parent, part, from_signed) == (None, None, None):
print(message)
return
tag_attachments(message)
print(with_alternative(
*with_local_attachments(parent, part, from_signed)))
except (BrokenPipeError, KeyboardInterrupt):
pass
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,101 @@
snippet sign "Signature"
Best regards,
Amin Kasrou Aouam
endsnippet
snippet firma "Spanish Signature"
Un saludo,
Amin Kasrou Aouam
endsnippet
snippet meta "YAML metadata for eisvogel"
---
title: "$1"
author: [Amin Kasrou Aouam]
date: "`date +%F`"
titlepage: true
logo: /home/coolneng/Pictures/Logos/UGR.png
listings-no-page-break: true
toc-own-page: true
...
endsnippet
snippet hand "YAML metadata for tufte-handout"
---
documentclass: tufte-handout
title: $1
author: Amin Kasrou Aouam
date: `date +%F`
fontsize: 12pt
...
endsnippet
snippet ass "YAML metadata for assignment"
---
title: $1
author: Amin Kasrou Aouam
date: `date +%F`
---
endsnippet
snippet slides "YAML metadata for the Metropolis template"
---
title: "$1"
author: [Amin Kasrou Aouam]
date: "`date +%F`"
header-includes:
- \definecolor{dkgreen}{rgb}{0,0.52,0}
- \definecolor{gray}{rgb}{0.5,0.5,0.5}
- \definecolor{mauve}{rgb}{0.4,0,0.7}
- \definecolor{customBlue}{rgb}{0.1,0.1,0.65}
- \definecolor{customOrange}{rgb}{0.88,0.53,0.13}
- \lstset{frame=tb}
- \lstset{language=c}
- \lstset{aboveskip=5mm}
- \lstset{belowskip=5mm}
- \lstset{showstringspaces=false}
- \lstset{columns=flexible}
- \lstset{basicstyle={\scriptsize\ttfamily}}
- \lstset{numbers=left}
- \lstset{numberstyle=\tiny}
- \lstset{stepnumber=1}
- \lstset{numbersep=8pt}
- \lstset{numberstyle=\tiny\color{gray}}
- \lstset{keywordstyle=\color{customBlue}}
- \lstset{commentstyle=\color{dkgreen}}
- \lstset{stringstyle=\color{mauve}}
- \lstset{breaklines=true}
- \lstset{breakatwhitespace=true}
- \lstset{tabsize=4}
...
endsnippet
snippet b "Bullet point"
* $1
endsnippet
snippet sl "Slide notes"
# Slide $1
endsnippet
snippet fsl "First slide notes"
# Slide $1
endsnippet
snippet se "Section notes"
# Section $1
endsnippet
snippet fse "First section notes"
# Section $1
endsnippet

View File

@@ -25,20 +25,46 @@ nnoremap <leader>n :noh<cr>
"Move the current line up or down
nnoremap <leader>k :m-2<cr>==
nnoremap <leader>j :m+<cr>==
""Markdown
autocmd Filetype markdown Goyo
let g:markdown_fenced_languages = ['cpp', 'python', 'java', 'sql']
let g:vim_markdown_math=1
""Snippets
let g:UltiSnipsExpandTrigger = '<tab>'
let g:UltiSnipsJumpForwardTrigger = '<tab>'
let g:UltiSnipsJumpBackwardTrigger = '<s-tab>'
""Vim-plug
call plug#begin('~/.config/nvim/plugged')
Plug 'plasticboy/vim-markdown', { 'for': 'markdown' }
Plug 'junegunn/goyo.vim', {'for': 'markdown', 'on': 'Goyo' }
Plug 'SirVer/ultisnips', { 'for': 'markdown' }
Plug 'Raimondi/delimitMate'
Plug 'nordtheme/vim'
Plug 'rose-pine/neovim'
Plug 'cocopon/iceberg.vim'
Plug 'LnL7/vim-nix'
call plug#end()
""Colors
colorscheme iceberg
set termguicolors
colorscheme nord
set background=light
""Disabe status line
set laststatus=0
""Set Markdown filetype for neomutt
autocmd BufNewFile,BufRead /tmp/neomutt* set filetype=markdown
""Quit whether Goyo is active or not
function! s:goyo_enter()
let b:quitting = 0
let b:quitting_bang = 0
call feedkeys('jk')
autocmd QuitPre <buffer> let b:quitting = 1
cabbrev <buffer> q! let b:quitting_bang = 1 <bar> q!
endfunction
function! s:goyo_leave()
if b:quitting_bang
qa!
else
qa
endif
endfunction
autocmd! User GoyoEnter nested call <SID>goyo_enter()
autocmd! User GoyoLeave nested call <SID>goyo_leave()

View File

@@ -0,0 +1,4 @@
{
allowUnfree = true;
android_sdk.accept_license = true;
}

88
notmuch/.notmuch-config Normal file
View File

@@ -0,0 +1,88 @@
# .notmuch-config - Configuration file for the notmuch mail system
#
# For more information about notmuch, see https://notmuchmail.org
# Database configuration
#
# The only value supported here is 'path' which should be the top-level
# directory where your mail currently exists and to where mail will be
# delivered in the future. Files should be individual email messages.
# Notmuch will store its database within a sub-directory of the path
# configured here named ".notmuch".
#
[database]
path=/home/coolneng/.mail
# User configuration
#
# Here is where you can let notmuch know how you would like to be
# addressed. Valid settings are
#
# name Your full name.
# primary_email Your primary email address.
# other_email A list (separated by ';') of other email addresses
# at which you receive email.
#
# Notmuch will use the various email addresses configured here when
# formatting replies. It will avoid including your own addresses in the
# recipient list of replies, and will set the From address based on the
# address to which the original email was addressed.
#
[user]
name=Amin Kasrou Aouam
primary_email=akasroua@gmail.com
other_email=akasroua@correo.ugr.es;
# Configuration for "notmuch new"
#
# The following options are supported here:
#
# tags A list (separated by ';') of the tags that will be
# added to all messages incorporated by "notmuch new".
#
# ignore A list (separated by ';') of file and directory names
# that will not be searched for messages by "notmuch new".
#
# NOTE: *Every* file/directory that goes by one of those
# names will be ignored, independent of its depth/location
# in the mail store.
#
[new]
tags=unread;inbox;
ignore=
# Search configuration
#
# The following option is supported here:
#
# exclude_tags
# A ;-separated list of tags that will be excluded from
# search results by default. Using an excluded tag in a
# query will override that exclusion.
#
[search]
exclude_tags=deleted;spam;
# Maildir compatibility configuration
#
# The following option is supported here:
#
# synchronize_flags Valid values are true and false.
#
# If true, then the following maildir flags (in message filenames)
# will be synchronized with the corresponding notmuch tags:
#
# Flag Tag
# ---- -------
# D draft
# F flagged
# P passed
# R replied
# S unread (added when 'S' flag is not present)
#
# The "notmuch new" command will notice flag changes in filenames
# and update tags, while the "notmuch tag" and "notmuch restore"
# commands will notice tag changes and update flags in filenames
#
[maildir]
synchronize_flags=true

View File

@@ -0,0 +1,598 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="ProgId" content="Word.Document">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
$for(author-meta)$
<meta name="author" content="$author-meta$" />
$endfor$
$if(date-meta)$
<meta name="date" content="$date-meta$" />
$endif$
$if(keywords)$
<meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" />
$endif$
<title>$if(title-prefix)$$title-prefix$ $endif$$pagetitle$</title>
<style type="text/css">
body, table, td, a {
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
table, td {
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
}
img {
-ms-interpolation-mode: bicubic;
}
img {
border: 0;
height: auto;
line-height: 100%;
outline: none;
text-decoration: none;
}
body {
height: 100% !important;
margin: 0 !important;
padding: 0 !important;
width: 100% !important;
}
figure {
margin: 0;
padding: 0;
}
article, aside, details, figcaption, figure,footer, header, hgroup, menu, nav, section {
display: block;
}
a[x-apple-data-detectors] {
color: inherit !important;
text-decoration: none !important;
font-size: inherit !important;
font-family: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
}
div[style*="margin: 16px 0;"] {
margin: 0 !important;
}
table,td,div,a {
box-sizing: border-box;
}
img {
-ms-interpolation-mode: bicubic;
max-width: 100%;
display: inline-block;
padding-top: 7px;
}
body, .body {
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 14px;
line-height: 1.2;
height: 100% !important;
width: 100% !important;
margin: 0;
padding: 0;
-webkit-font-smoothing: antialiased;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
table {
border-collapse: separate !important;
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
width: 100%;
}
table td {
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 14px;
vertical-align: top;
}
.ExternalClass {
width: 100%;
}
.ExternalClass,.ExternalClass p,.ExternalClass span,.ExternalClass font,.ExternalClass td,.ExternalClass div {
line-height: 100%;
}
strong, b {
font-weight: bold;
}
.ajT {
height: none;
padding-top: none;
}
body {
background-color: #ffffff;
}
.body {
background-color: #ffffff;
width: 100%;
}
.container {
display: block;
Margin: 0 auto !important;
max-width: 800px;
padding: 10px;
width: 100% !important;
}
.content {
display: block;
margin: 0 auto;
max-width: 800px;
padding: 10px;
}
.main {
background: #ffffff;
border: none;
border-radius: 4px;
width: 100%;
}
.wrapper {
padding: 10px;
}
.content-block {
padding: 0 0 10px;
}
.header {
margin-bottom: 10px;
margin-top: 0px;
width: 100%;
}
.footer {
clear: both;
width: 100%;
}
.footer * {
color: #7F7F7F;
font-size: 12px;
}
.footer td {
padding: 20px 0;
}
h1,h2,h3,h4,h5,h6 {
color: #222222 !important;
font-family: "Roboto", "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
font-weight: bold;
line-height: 1.2;
margin: 0;
margin-bottom: 7px;
margin-top: 10.5px;
}
h1, h2 {
margin-bottom: 10.5px;
margin-top: 14px;
}
h1 {
font-size: 22.4px;
text-transform: capitalize;
}
h2 {
font-size: 19.6px;
}
h3 {
font-size: 16.8px;
}
h4 {
font-size: 15.4px;
}
h5 {
font-size: 14px;
}
h6 {
font-size: 12.6px;
}
p,ul,ol {
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 14px;
font-weight: normal;
margin: 0;
padding-top: 7px;
color: #111111;
}
ul, ol {
margin: 0;
margin-bottom: 7.5px;
padding-left: 25px;
}
ul li, ol li {
list-style-position: outside;
margin-left: 5px;
margin-bottom: 1px;
}
li > ul, li > ol {
margin-top: 7.5px;
}
a {
color: #348eda;
text-decoration: none;
font-weight: bold;
}
pre > a, code > a {
color: none;
font-weight: normal;
}
code,pre,.word-wrap {
word-break: break-word;
word-wrap: break-word;
-webkit-hyphens: auto;
-moz-hyphens: auto;
hyphens: auto;
}
pre, code {
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
font-size: 11.9px;
}
pre {
display: block;
width: 96%;
margin: 1em 0;
margin-bottom: 9px;
background: #f8f8f8;
padding: 1%;
white-space: pre-wrap;
border-radius: 4px;
}
p > code {
color: #111111;
background: none;
}
blockquote {
padding: 0 7px 0 7px;
border-left: 2px solid #cccccc;
border-top: 4.2px solid transparent;
font-style: italic;
margin: 0 0 7px 3px;
}
blockquote p {
padding: 0;
}
mark {
background: #ff0;
}
dl dt {
font-weight: bold;
}
dl dd {
margin-left: 28px;
}
.et-btn {
width: 100%;
font-family: "Roboto", "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
margin-bottom: 10px;
}
.et-btn table {
width: auto;
}
.et-btn table td {
background-color: #ffffff;
border-radius: 4px;
text-align: center;
}
.et-btn a {
background-color: #ffffff;
border: solid 1px #348eda;
border-radius: 4px;
color: #348eda;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: bold;
margin: 0;
padding: 8px 18px;
text-decoration: none;
text-transform: capitalize;
font-family: "Roboto", "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
}
.et-btn-primary table td {
background-color: #348eda;
}
.et-btn-primary a {
background-color: #348eda;
border-color: #348eda;
color: #ffffff;
}
.et-btn-secondary table td {
background-color: transparent;
}
.et-btn-secondary a {
background-color: transparent;
border-color: #348eda;
color: #348eda;
}
.et-notice {
border-collapse: separate;
}
.et-notice-spacer {
padding: 10px 0;
}
.et-notice td {
line-height: 1.2;
font-size: 14px;
font-weight: normal;
font-family: "Roboto", "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
}
.et-notice td p {
margin: 0;
padding: 0;
}
.et-notice-info td {
background: #f0f6fb;
border: 1px solid #b7d3ed;
border-radius: 4px;
color: #2c6eac;
padding: 6px 10px;
}
.et-notice-success td {
background: #e1f2bd;
border: 1px solid #c6e682;
border-radius: 4px;
color: #61821a;
padding: 6px 10px;
}
.et-notice-warning td {
background: #f7eed0;
border: 1px solid #edd993;
border-radius: 4px;
color: #9a7d1a;
padding: 6px 10px;
}
.et-notice-danger td {
background: #f5d5d5;
border: 1px solid #e89b9b;
border-radius: 4px;
color: #952222;
padding: 6px 10px;
}
.et-notice-lg td {
font-size: 16.8px;
line-height: 1.2;
}
.divider {
border-collapse: separate;
}
.divider-spacer {
padding: 14px 0;
}
.divider td {
border-top: 1px solid #ccc;
line-height: 0;
font-size: 0;
height: 1px;
margin: 0;
padding: 0;
}
hr {
margin: 28px 0;
border: none;
border-top: 1px solid #cccccc;
color: #ffffff;
}
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
.align-left {
text-align: left;
}
.clear {
clear: both;
}
.mt0 {
margin-top: 0;
}
.mb0 {
margin-bottom: 0;
}
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
mso-hide: all;
visibility: hidden;
width: 0;
}
@media only screen and (max-width: 840px) {
table[class=body] {
font-size: 12px !important;
}
table[class=body] p,table[class=body] ul,table[class=body] ol {
font-size: 12px !important;
}
table[class=body] .et-btn {
margin-bottom: 15px;
}
table[class=body] h1 {
font-size: 18.2px !important;
}
table[class=body] h2 {
font-size: 16.8px !important;
}
table[class=body] h3 {
font-size: 15.4px !important;
}
table[class=body] h4 {
font-size: 14.7px !important;
}
table[class=body] h5 {
font-size: 12.6px !important;
}
table[class=body] h6 {
font-size: 11.9px !important;
}
table[class=body] h1, table[class=body] h2 {
margin-bottom: 14px !important;
margin-top: 14px !important;
}
table[class=body] .container, table[class=body] .content {
width: 100% !important;
max-width: 100% !important;
}
table[class=body] .content,table[class=body] .wrapper {
padding: 10px !important;
}
table[class=body] .container {
padding: 0 !important;
width: 100% !important;
}
table[class=body] .btn table,table[class=body] .btn a {
width: 100% !important;
}
}
</style>
$if(quotes)$
<style type="text/css">q { quotes: "“" "”" "" ""; }</style>
$endif$
$if(highlighting-css)$
<style type="text/css">
$highlighting-css$
</style>
$endif$
$for(css)$
<link rel="stylesheet" href="$css$" type="text/css" />
$endfor$
$if(math)$
$math$
$endif$
$for(header-includes)$
$header-includes$
$endfor$
</head>
<body>
$for(include-before)$
$include-before$
$endfor$
$if(title)$
<div id="$idprefix$header">
<h1 class="title">$title$</h1>
$if(subtitle)$
<h1 class="subtitle">$subtitle$</h1>
$endif$
$for(author)$
<h2 class="author">$author$</h2>
$endfor$
$if(date)$
<h3 class="date">$date$</h3>
$endif$
</div>
$endif$
$if(toc)$
<div id="$idprefix$TOC">
$toc$
</div>
$endif$
$body$
$for(include-after)$
$include-after$
$endfor$
</body>
</html>

View File

@@ -3,11 +3,6 @@ target=api/gitea
username_extractor=specific_line
line_username=1
skip_username=7
[git.psydnd.org*]
target=api/gitea
username_extractor=specific_line
line_username=1
skip_username=7
[github.com*]
target=api/github
username_extractor=specific_line

View File

@@ -1,2 +0,0 @@
[virtualenvs]
in-project = true

View File

@@ -1,22 +0,0 @@
#!/usr/bin/env bash
tmp_dir="/tmp/cliphist"
rm -rf "$tmp_dir"
if [[ -n "$1" ]]; then
cliphist decode <<<"$1" | wl-copy
exit
fi
mkdir -p "$tmp_dir"
read -r -d '' prog <<EOF
/^[0-9]+\s<meta http-equiv=/ { next }
match(\$0, /^([0-9]+)\s(\[\[\s)?binary.*(jpg|jpeg|png|bmp)/, grp) {
system("echo " grp[1] "\\\\\t | cliphist decode >$tmp_dir/"grp[1]"."grp[3])
print \$0"\0icon\x1f$tmp_dir/"grp[1]"."grp[3]
next
}
1
EOF
cliphist list | gawk "$prog"

View File

@@ -1,16 +0,0 @@
#!/bin/sh
IMAGE_URL="https://earthview.withgoogle.com/download"
ID_FILE="${HOME}/Documents/Misc/earthview-ids"
MAX_ID="$(wc -l <"${ID_FILE}")"
OUTPUT_FILE=/tmp/earthview-wallpaper.jpg
get_random_id() {
RANDOM_ID="$(shuf -n 1 -i 1-"${MAX_ID}")"
ID="$(sed -n "${RANDOM_ID}p" "$ID_FILE")"
}
set -e
get_random_id
curl -fLs "${IMAGE_URL}/${ID}.jpg" -o "${OUTPUT_FILE}"
swaymsg "output * bg $OUTPUT_FILE fill"

View File

@@ -1,7 +1,6 @@
#!/bin/sh
search_directory=~/Documents
downloads=~/Downloads
xdg-open "$(rg --no-messages --no-ignore --files $search_directory $downloads -g "*.{pdf,docx,doc,xlsx,xls,pptx,ppt}" |
xdg-open "$(rg --no-messages --no-ignore --files $search_directory -g "{*.pdf}" -g "{*.doc[x]}" -g "{*.xls[x]}" -g "{*.ppt[x]}" |
rofi -threads 0 -dmenu -sort -sorting-method fzf -i -p "find")"

View File

@@ -0,0 +1,87 @@
#!/bin/sh
# Git filter to ignore lines in your files.
#
# Copyright (c) 2017-2019 Aryel Mota Góis <aryel.gois@gmail.com>
#
# MIT License
#
#
# SETUP:
#
# cp git-ignore-line.sh ~/bin/git-ignore-line
#
#
# USAGE:
#
# Mark single lines you want to ignore with 'GITIGNORE'. It ignores
# the whole line. It is recommended to be inside a comment in your code.
#
# Mark multiple lines surrounding them with 'GITIGNORE START' and
# 'GITIGNORE END'. It can not be nested.
#
# NOTE: Ignored lines might be lost on checkout.
#
#
# Add files to ignore:
#
# git ignore-line <pattern>
#
# Remove patterns with:
#
# git ignore-line -r <pattern>
#
# List configured patterns:
#
# git ignore-line -l
#
# PATTERN can be a file or a glob pattern: '*.html'. Remember to
# escape the `*`.
#
#
# TODO:
#
# - Stash the lines ignored by this filter before a git checkout.
set -eu
# Check if stdin is not tty and remove ignored lines from it.
[ -t 0 ] || exec sed \
'/GITIGNORE START/,/GITIGNORE END/d; /GITIGNORE/d' \
/dev/stdin
# Running from tty.
program=$(basename "$0")
# Find git repository.
git_dir=$(git rev-parse --git-dir)
# Path to attributes file.
attr_file=$git_dir/info/attributes
# Check arguments.
if [ $# -eq 2 ] && [ "$1" = '-r' ]; then
# Remove filter for pattern.
sed "s|^$2 filter=$program||" "$attr_file" > "$attr_file.tmp"
mv -- "$attr_file.tmp" "$attr_file"
elif [ $# -eq 1 ]; then
if [ "$1" = '-l' ]; then
# List patterns.
grep "filter=$program" "$attr_file" || true
else
# Add filter for pattern.
echo "$1 filter=$program" >> "$attr_file"
# Configure filter.
git config --global "filter.$program.clean" "$program"
git config --global "filter.$program.smudge" cat
fi
else
# Show help.
>&2 echo "Usage: $program [-r] <pattern>"
>&2 echo " or: $program -l"
exit 1
fi

View File

@@ -1,14 +1,9 @@
#!/bin/sh
ACCOUNT="$1"
if [ $# -lt 1 ]; then
ACCOUNT="-a"
echo "Usage: mail-sync <account name>"
exit 1
fi
mbsync "$ACCOUNT"
if pgrep -f 'mu server'; then
emacsclient -e '(mu4e-update-index)'
else
mu index --lazy-check
fi
mbsync "$1"
notmuch new

View File

@@ -0,0 +1,5 @@
#!/bin/sh
niv init
niv update nixpkgs -b nixpkgs-unstable
sed "s/pkgs ? import <nixpkgs>/sources ? import .\/nix\/sources.nix, pkgs ? import sources.nixpkgs/" -i shell.nix

View File

@@ -2,11 +2,10 @@
directory=/tmp/webtorrent
player=mpv
data_file=$HOME/Documents/Misc/peerflix-db.csv
data_file=$HOME/Documents/IT/peerflix-db.csv
parse_csv() {
show_name=$(echo "$1" | cut -d "=" -f 3 | awk -F "S[0-9]|[S|s]eason|[C|c]omplete|([0-9]+)" '{print $1}' |
tr -d "[:digit:]" | tr "[:punct:]" " " | sed -e 's/[[:space:]]*$//')
show_name=$(echo "$1" | cut -d "=" -f 3 | cut -d "%" -f 1 | tr + " ")
episode=$(awk -F ',' -v var="$show_name" '$1 ~ var {print $2}' "$data_file")
line_number=$(awk -F ',' -v var="$show_name" '$1 ~ var {print NR}' "$data_file")
}
@@ -16,15 +15,6 @@ increment_episode() {
sed -e "$line_number s/$episode/$next_episode/" -i "$data_file"
}
usage() {
echo "Usage: peerflix <magnet link>"
exit 1
}
if [ $# -ne 1 ]; then
usage
fi
parse_csv "$1"
if [ -z "$episode" ]; then
webtorrent download "$1" -s -o "$directory" --"$player"

View File

@@ -5,23 +5,17 @@ usage() {
echo "type git: VCS project"
echo "type remote-git: VCS project with README, LICENSE and tests"
echo "type src: Simple coding project"
echo "type init: Initialize populated project"
echo "type doc: Assignment"
echo "type nix-ld: Run unpatched programs with Nix"
echo "type datasci: Python data science project"
exit 1
}
copy_nix_files() {
if [ "$1" = "flake" ]; then
cp ~/Projects/devenv/flake-template.nix flake.nix
cp ~/Documents/IT/flake-template.nix flake.nix
elif [ "$1" = "nix-ld" ]; then
cp ~/Projects/devenv/nix-ld.nix shell.nix
elif [ "$1" = "datasci" ]; then
cp ~/Projects/devenv/python-data-science.nix shell.nix
else
cp ~/Projects/devenv/shell.nix .
cp ~/Documents/IT/nix-ld.nix shell.nix
fi
cp ~/Documents/IT/shell.nix .
}
git_initialization() {
@@ -39,12 +33,6 @@ direnv_integration() {
direnv allow
}
create_dir() {
if [ ! -d "$1" ]; then
mkdir "$1"
fi
}
if [ $# != 1 ]; then
usage
fi
@@ -52,43 +40,29 @@ fi
type=$1
if [ "$type" = "git" ]; then
copy_nix_files "nix"
create_dir data
create_dir src
mkdir src data
copy_nix_files "flake"
git_initialization
direnv_integration "nix"
direnv_integration "flake"
elif [ "$type" = "remote-git" ]; then
touch README.org
cp ~/Projects/devenv/LICENSE.md LICENSE.md
cp ~/Documents/IT/gpl-3.0.md LICENSE.md
copy_nix_files "flake"
create_dir data
create_dir src
mkdir src tests data
git_initialization
direnv_integration "flake"
elif [ "$type" = "doc" ]; then
create_dir assets
touch Report.org
mkdir docs docs/assets
touch docs/Summary.org
touch .project
elif [ "$type" = "src" ]; then
copy_nix_files "nix"
create_dir data
create_dir src
mkdir src data
touch .project
direnv_integration "nix"
elif [ "$type" = "init" ]; then
touch .project
if [ ! -f shell.nix ]; then
copy_nix_files "nix"
fi
direnv_integration "nix"
elif [ "$type" = "nix-ld" ]; then
copy_nix_files "nix-ld"
direnv_integration "nix"
elif [ "$type" = "datasci" ]; then
copy_nix_files "datasci"
create_dir data
touch .project
direnv_integration "nix"
else
usage
fi

View File

@@ -1,6 +0,0 @@
#!/bin/sh
# Convert ZFS legacy mountpoints to ZFS mounts
zfs list -Ho name | while read -r dataset; do
zfs set mountpoint="/$dataset" "$dataset"
done

View File

@@ -1,12 +0,0 @@
#!/bin/sh
usage() {
echo "Usage: shebang-patcher <script>"
exit 1
}
if [ $# != 1 ]; then
usage
fi
sed "s/#!\/bin\/bash/#!\/usr\/bin\/env bash/" -i "$1"

View File

@@ -1,5 +1,6 @@
#!/bin/sh
if [ $# -lt 2 ]; then
echo "Usage: subject <subject name> <subject type>"
echo "subject type 0: programming"
@@ -10,11 +11,10 @@ fi
name=$1
type=$2
formatted_name=$(echo "$name" | tr -s ' ' '_')
mkdir -p "$formatted_name"/Labs
mkdir -p "$formatted_name"/Exercises
touch "$formatted_name"/.project
mkdir -p "$name"/Labs
mkdir -p "$name"/Exercises
touch "$name"/.project
if [ "$type" -eq 0 ]; then
mkdir -p "$formatted_name"/Code
mkdir -p "$name"/Code
fi

View File

@@ -1,24 +1,27 @@
#!/bin/sh
LIGHT_THEME="rose-pine"
DARK_THEME="nord"
KITTY_LIGHT_THEME="Rosé Pine Dawn"
NVIM_COLORSCHEME_LINE=41
capitalize() {
printf '%s' "$1" | head -c 1 | tr "[:lower:]" "[:upper:]"
printf '%s' "$1" | tail -c '+2' | tr "-" " " | tr "e" "é"
printf '%s' "$1" | tail -c '+2'
}
modify_delta() {
if [ "$1" = "light" ]; then
sed -e "s/light = false/light = true/" -e "s/Nord/OneHalfLight/" -i ~/.config/git/config
else
sed -e "s/light = true/light = false/" -e "s/OneHalfLight/Nord/" -i ~/.config/git/config
fi
}
change_theme() {
sed -e "$NVIM_COLORSCHEME_LINE s/$1/$2/" -i ~/.config/nvim/init.vim
sed -i "s/$1/$2/" ~/.config/zathura/zathurarc
if [ "$2" = "$LIGHT_THEME" ]; then
kitty +kitten themes --reload-in=all "$KITTY_LIGHT_THEME"
else
kitty +kitten themes --reload-in=all "$(capitalize "$2")"
fi
nvr --remote-send ":source ~/.config/nvim/init.vim <CR>"
sed -i "s/iceberg_$1/iceberg_$2/" ~/.config/kitty/kitty.conf
sed -i "s/bg=$1/bg=$2/" ~/.config/nvim/init.vim
sed -i "s/iceberg_$1/iceberg_$2/" ~/.dotfiles/tmux/.tmux.conf
sed -i "s/iceberg_$1/iceberg_$2/" ~/.config/zathura/zathurarc
modify_delta "$2"
kitty +kitten themes --reload-in=all "Iceberg $(capitalize "$2")"
tmux source-file ~/.tmux.conf
nvr --remote-send ":source ~/.config/nvim/init.vim <CR> :set nonumber <CR> :set norelativenumber <CR>"
}
recolor_zathura() {
@@ -40,11 +43,11 @@ fi
mode=$1
if [ "$mode" = "light" ]; then
emacsclient --eval "(load-theme 'os1 'no-confirm)"
change_theme "$DARK_THEME" "$LIGHT_THEME"
emacsclient --eval "(load-theme 'doom-nord-light 'no-confirm)"
change_theme dark light
recolor_zathura
else
emacsclient --eval "(load-theme 'doom-one 'no-confirm)"
change_theme "$LIGHT_THEME" "$DARK_THEME"
emacsclient --eval "(load-theme 'doom-nord 'no-confirm)"
change_theme light dark
recolor_zathura
fi

View File

@@ -5,7 +5,7 @@ select_action() {
"local"
"zion"
"hpc"
"kermit-gpu"
"idlab"
)
action=$(printf '%s\n' "${action_content[@]}" | rofi -no-auto-select -i "$@" -dmenu -p "Choose a session")
execute_action "$action"
@@ -20,7 +20,7 @@ execute_action() {
"local") launch_session "local" ;;
"zion") launch_session "zion" ;;
"hpc") launch_session "hpc" ;;
"kermit-gpu") launch_session "kermit-gpu" ;;
"idlab") launch_session "idlab" ;;
esac
}

View File

@@ -1,6 +1,6 @@
host zion
user coolneng
hostname 192.168.128.2
hostname 192.168.13.2
port 22
identityfile ~/.ssh/zion
@@ -14,14 +14,14 @@ host hpc
port 22
identityfile ~/.ssh/id_ed25519
host idlab
user akasroua
hostname 10.10.193.39
port 22
identityfile ~/.ssh/idlab
host kobo
user root
hostname 192.168.13.20
port 22
identityfile ~/.ssh/kobo
host kathreftis
user root
hostname 192.168.13.131
port 22
identityfile ~/.ssh/kathreftis

BIN
ssh/.ssh/idlab Normal file

Binary file not shown.

BIN
ssh/.ssh/idlab.pub Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -59,14 +59,10 @@ output * bg ~/Photos/Wallpapers/The_parallel_microscopic_Universe_II.jpg fill
# You can get the names of your inputs by running: swaymsg -t get_inputs
# Read `man 5 sway-input` for more information about this section.
# Keyboard layout
input type:keyboard {
xkb_layout us
xkb_variant altgr-intl
xkb_options eurosign:4
}
input * xkb_layout "es"
# Touchpad settings
input type:touchpad {
input "2:7:SynPS/2_Synaptics_TouchPad" {
dwt enabled
tap enabled
natural_scroll enabled
@@ -134,12 +130,12 @@ bindsym $mod+L focus right
set $workspace1 "1: "
set $workspace2 "2: "
set $workspace3 "3: "
set $workspace4 "4: 󱓷"
set $workspace4 "4: "
set $workspace5 "5: "
set $workspace6 "6: "
set $workspace7 "7: "
set $workspace8 "8: "
set $workspace9 "9: 󰕧"
set $workspace9 "9: "
set $workspace10 "10: "
# Switch to workspace
bindsym $mod+1 workspace $workspace1
@@ -254,7 +250,8 @@ for_window [app_id="imv"] floating enable
for_window [app_id="popup"] floating enable, resize set 1280 720
for_window [app_id="firefox" title="^Picture-in-Picture$"] floating enable, resize set 735 415; sticky enable
for_window [title="(?:Open|Save) (?:File|Folder|As)"] floating enable, resize set width 1030 height 710
for_window [title="Firefox — Sharing Indicator"] kill;
# Resize zathura to 70% in tiling mode
for_window [app_id="org.pwmt.zathura" workspace=$workspace4] resize set width 70 ppt
# Resize R plots to 40% in tiling mode
for_window [class="R_x11"] resize set width 40 ppt
# Split windows vertically
@@ -274,22 +271,21 @@ bindsym XF86AudioMicMute exec ~/.local/share/scripts/pulseaudio-mic-mute
bindsym XF86MonBrightnessUp exec light -A 10
bindsym XF86MonBrightnessDown exec light -U 10
# Media control
bindsym XF86Messenger exec mpc toggle
bindsym XF86Tools exec mpc toggle
bindsym XF86AudioPlay exec mpc toggle
bindsym XF86Go exec mpc stop
bindsym Cancel exec mpc prev
bindsym XF86Favorites exec mpc next
bindsym XF86Search exec mpc stop
bindsym XF86LaunchA exec mpc prev
bindsym XF86Explorer exec mpc next
#
# Program keybindings
#
# clipman
bindsym $mod+c exec rofi -modi clipboard:~/.local/share/scripts/cliphist-rofi-img -show clipboard -show-icons
bindsym $mod+c exec clipman pick -t rofi --max-items=50
# grim
bindsym Print exec grim
# slurp + grim to clipboard
bindsym Shift+Print exec slurp | grim -g - - | wl-copy
#bindsym Shift+Super_L exec slurp | grim -g - - | wl-copy
# find PDFs with rofi
bindsym $mod+f exec ~/.local/share/scripts/finder
# recurrent action launcher
@@ -298,8 +294,6 @@ bindsym $mod+Shift+a exec ~/.local/share/scripts/recurrent-actions
bindsym $mod+Shift+s exec ~/.local/share/scripts/tmuxp-session
# power menu
bindsym $mod+Shift+p exec ~/.local/share/scripts/power-menu
# earth view wallpaper
bindsym $mod+Shift+w exec ~/.local/share/scripts/earth-view-wallpaper
# theme switcher menu
bindsym $mod+Shift+t mode "$Theme-switch"
@@ -319,15 +313,16 @@ set $lock_bg ~/Photos/Wallpapers/wallhaven-638719.png
exec swayidle -w \
before-sleep 'swaylock -f -c 000000 -i $lock_bg'
# apply color profile to laptop screen
output eDP-1 color_profile icc ~/.config/colord/E14-G3.icm
# disable external monitor when lid is closed
set $monitor DP-1
bindswitch --reload --locked lid:on output $monitor disable
bindswitch --reload --locked lid:off output $monitor enable
#
# Autostart programs
#
# clipman
exec wl-paste -t text --watch cliphist store
exec wl-paste -t image --watch cliphist store
exec wl-paste -t text --watch clipman store --max-items=50
# kanshi
exec kanshi
# easyeffects
@@ -339,7 +334,7 @@ exec kitty --class tmux -- tmuxp load ~/.tmuxp/local.yaml
assign [app_id="firefox"] $workspace2
exec firefox
# emacs
assign [app_id="emacs"] $workspace3
assign [class=".*[Ee]macs.*"] $workspace3
# HACK Run a doom sync before launching emacs
exec ~/.emacs.d/bin/doom sync && exec emacs
@@ -359,9 +354,7 @@ assign [app_id="mpv"] $workspace9
# calibre
assign [app_id="calibre"] $workspace10
# chromium
assign [app_id="chromium-browser"] $workspace10
# teams
assign [class="teams-for-linux"] $workspace6
assign [class="Chromium-browser"] $workspace10

View File

@@ -8,6 +8,7 @@ set -g bell-action any
## Set default terminal
set -g default-terminal "screen-256color"
set -ag terminal-overrides ",xterm-256color:RGB"
# i3 split bindings
@@ -77,4 +78,3 @@ set -g mouse on
bind -T root WheelUpPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; copy-mode -e; send-keys -M"
bind -T root WheelDownPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; send-keys -M"
source ~/.tmux/statusbar.conf

View File

@@ -0,0 +1,11 @@
set -g status-justify "centre"
set -g status "on"
set -g status-left-style "none"
set -g status-style "none,bg=#1e2132"
set -g status-left "#[bold] #S"
set -g status-right ""
set -g pane-border-style "fg=#2e3244"
set -g pane-active-border-style "fg=#454b68"
setw -g window-status-style "none,fg=#c6c8d1,bg=#1e2132"
setw -g window-status-format " #[fg=#c6c8d1] #I #W "
setw -g window-status-current-format " #[fg=#c6c8d1,bg=#2e3244,bold] #I #W "

View File

@@ -0,0 +1,11 @@
set -g status-justify "centre"
set -g status "on"
set -g status-left-style "none"
set -g status-style "none,bg=#d2d4dd"
set -g status-left "#[bold] #S"
set -g status-right ""
set -g pane-border-style "fg=#c6c8d1"
set -g pane-active-border-style "fg=#33374c"
setw -g window-status-style "none,fg=#33374c,bg=#d2d4dd"
setw -g window-status-format " #[fg=#afafaf] #I #W "
setw -g window-status-current-format " #[fg=#282a2e,bold] #I #W "

View File

@@ -1,11 +0,0 @@
set -g status-justify "centre"
set -g status "on"
set -g status-left-style "none"
set -g status-style "none,bg=black"
set -g status-left "#[bold] #S"
set -g status-right ""
set -g pane-border-style "fg=#2e3244"
set -g pane-active-border-style "fg=#454b68"
setw -g window-status-style "none,fg=black,bg=brightblack"
setw -g window-status-format "#[fg=black,bg=brightblack] #I #W "
setw -g window-status-current-format "#[fg=black,bg=cyan,bold] #I #W "

13
tmux/.tmuxp/idlab.yaml Normal file
View File

@@ -0,0 +1,13 @@
session_name: idlab
suppress_history: false
windows:
- window_name: canvas
layout: even-vertical
panes:
- ssh -C idlab
- ssh -C idlab
- window_name: monitor
panes:
- ssh -C -t idlab "htop"

View File

@@ -1,20 +0,0 @@
session_name: kermit-gpu
suppress_history: false
windows:
- window_name: admin
focus: true
layout: even-vertical
panes:
- ssh -C kermit-gpu
- ssh -C kermit-gpu
- window_name: canvas
layout: even-vertical
panes:
- ssh -C kermit-gpu
- ssh -C kermit-gpu
- window_name: monitor
panes:
- ssh -C -t kermit-gpu "htop"

View File

@@ -25,6 +25,10 @@ windows:
panes:
- ncmpcpp
- window_name: mail
panes:
- neomutt
- window_name: stream
panes:
- null

View File

@@ -6,15 +6,15 @@ windows:
focus: true
layout: even-vertical
panes:
- ssh root@zion
- ssh root@zion
- ssh -C root@zion
- ssh -C root@zion
- window_name: canvas
layout: even-vertical
panes:
- ssh zion
- ssh zion
- ssh -C zion
- ssh -C zion
- window_name: monitor
panes:
- ssh -t zion "htop"
- ssh -C -t zion "htop"

View File

@@ -1,9 +1,25 @@
{
"layer": "top",
"height": 25,
"layer": "top", // Waybar at top layer
"height": 25, // Waybar height (to be removed for auto height)
"modules-left": ["sway/workspaces" ],
"modules-center": ["custom/org-pomodoro", "clock"],
"modules-right": ["mpd", "network", "pulseaudio", "battery" ],
"modules-right": ["mpd", "network", "pulseaudio", "battery", "battery#bat2"],
// Modules configuration
// "sway/workspaces": {
// "disable-scroll": true,
// "all-outputs": true,
// "format": "{name}: {icon}",
// "format-icons": {
// "1": "",
// "2": "",
// "3": "",
// "4": "",
// "5": "",
// "urgent": "",
// "focused": "",
// "default": ""
// }
// },
"mpd": {
"format": "<span foreground='#88C0D0'>{stateIcon}</span> {title}",
"format-disconnected": "",
@@ -14,14 +30,12 @@
"on": " "
},
"state-icons": {
"paused": "󰝚",
"playing": "󰝚"
"paused": "",
"playing": ""
},
"tooltip-format": "{elapsedTime:%H:%M:%S}/{totalTime:%H:%M:%S}",
"tooltip-format-disconnected": "MPD (disconnected)",
"title-len": 50,
"on-click": "mpc toggle",
"on-click-right": "mpc stop"
"title-len": 50
},
"clock": {
"format": "{:%a %d %b %H:%M}",
@@ -35,29 +49,52 @@
"critical": 10
},
"format": "<span foreground='#88C0D0'>{icon}</span> {capacity}%",
"format-charging": "<span foreground='#88C0D0'>󰂄</span> {capacity}%",
"format-plugged": "<span foreground='#88C0D0'>󰂄</span> {capacity}%",
"format-charging": "<span foreground='#88C0D0'></span> {capacity}%",
"format-plugged": "<span foreground='#88C0D0'></span> {capacity}%",
"format-alt": "{time} {icon}",
"format-full": "<span foreground='#88C0D0'>󰁹</span> 100%",
"format-icons": ["󰁼", "󰁿", "󰂁"]
// "format-good": "", // An empty format will hide the module
"format-full": "<span foreground='#88C0D0'></span> 100%",
"format-icons": ["", "", ""]
},
"battery#bat2": {
"bat": "BAT1",
"states": {
"good": 95,
"warning": 30,
"critical": 10
},
"format": "<span foreground='#88C0D0'>{icon}</span> {capacity}%",
"format-charging": "<span foreground='#88C0D0'></span> {capacity}%",
"format-plugged": "<span foreground='#88C0D0'></span> {capacity}%",
"format-alt": "{time} {icon}",
// "format-good": "", // An empty format will hide the module
"format-full": "<span foreground='#88C0D0'></span> 100%",
"format-icons": ["", "", ""]
},
"network": {
// "interface": "wlp2*", // (Optional) To force the use of this interface
"format-wifi": "<span foreground='#88C0D0'>{icon}</span> {essid}",
"format-ethernet": "<span foreground='#88C0D0'></span> Connected",
"format-linked": "{ifname} (No IP) ",
"format-disconnected": "<span foreground='#88C0D0'>睊</span> Disconnected",
"format-alt": "{ifname}: {ipaddr}/{cidr}",
"format-icons": ["󰤟", "󰤢", "󰤥"],
"format-icons": ["", "", ""],
"tooltip-format": "Online",
"tooltip-format-disconnected": "Offline"
},
"pulseaudio": {
// "scroll-step": 1, // %, can be a float
"format": "<span foreground='#88C0D0'>{icon}</span> {volume}%",
"format-muted": "<span foreground='#88C0D0'>󰖁</span>",
"format-muted": "<span foreground='#88C0D0'></span>",
"format-icons": {
"default": ["", "󰕾", ""]
"default": ["", "", ""]
},
"on-click": "",
"ignored-sinks": ["Easy Effects Sink"]
"ignored-sinks": ["EasyEffects Sink"]
},
"custom/org-pomodoro": {
"format": "<span foreground='#88C0D0'>祥</span> {}",
"exec": "$HOME/.local/share/scripts/org-clock-status",
"interval": 2
}
}

View File

@@ -2,7 +2,6 @@
border: none;
border-radius: 0;
/* `otf-font-awesome` is required to be installed for icons */
all: unset;
font-family: Inconsolata Nerd Font;
font-size: 17px;
min-height: 0px;
@@ -167,5 +166,3 @@ label:focus {
#mpd.paused {
}

View File

@@ -1,4 +0,0 @@
# Limit resolution to 1080p and exclude AV1
-f bestvideo[height<=1080][vcodec!=av1]+bestaudio/best
# Use HEVC codec to save space
-S vcodec:h265

View File

@@ -0,0 +1,5 @@
set recolor-lightcolor "#161821"
set recolor-darkcolor "#c6c8d1"
set completion-bg "#161821"
set statusbar-bg "#161821"
set statusbar-fg "#c6c8d1"

View File

@@ -0,0 +1,5 @@
set recolor-lightcolor "#e8e9ec"
set recolor-darkcolor "#33374c"
set completion-bg "#e8e9ec"
set statusbar-bg "#e8e9ec"
set statusbar-fg "#33374c"

View File

@@ -1,10 +0,0 @@
set completion-bg "#2E3440"
set statusbar-bg "#2E3440"
set statusbar-fg "#E5E9F0"
set recolor-lightcolor "#2E3440"
set recolor-darkcolor "#ECEFF4"
set default-bg "#2E3440"
set default-fg "#ECEFF4"
set render-loading true
set render-loading-bg "#2E3440"
set render-loading-fg "#ECEFF4"

View File

@@ -1,38 +0,0 @@
# https://github.com/rose-pine/rose-pine-theme
# Soho vibes for Zathura: Rosé Pine Dawn
#
# Usage:
# Copy contents of this file to ~/.config/zathura/zathurarc
#
# Change 'recolor' and 'recolor-keephue' to true to change
# the document colors for a more uniform viewing experience.
set default-bg "#faf4ed"
set default-fg "#575279"
set statusbar-fg "#9893a5"
set statusbar-bg "#fffaf3"
set inputbar-bg "#6e6a86"
set inputbar-fg "#faf4ed"
set notification-bg "#6e6a86"
set notification-fg "#faf4ed"
set notification-error-bg "#6e6a86"
set notification-error-fg "#ea9d34"
set notification-warning-bg "#6e6a86"
set notification-warning-fg "#ea9d34"
set highlight-color "#b4637a"
set highlight-active-color "#d7827e"
set completion-bg "#6e6a86"
set completion-fg "#d7827e"
set completion-highlight-fg "#575279"
set completion-highlight-bg "#d7827e"
set recolor-lightcolor "#faf4ed"
set recolor-darkcolor "#575279"

View File

@@ -1,11 +1,10 @@
# Zathura configuration
set adjust-open "best-fit"
set adjust-open "width"
set selection-clipboard clipboard
set recolor true
set recolor-keephue true
set window-title-basename true
set completion-bg "#161821"
set highlight-color "#a093c7"
set highlight-active-color "#a093c7"
set font "Terminus \(TTF\) 15"
include nord.conf