Compare commits

..

1 Commits

Author SHA1 Message Date
199e17853f Tweak rofi finder script to only search for files 2020-10-01 11:07:27 +02:00
205 changed files with 14517 additions and 2886 deletions

View File

@@ -1,4 +0,0 @@
# Do not edit this file. To specify the files to encrypt, create your own
# .gitattributes file in the directory where your files are.
* !filter !diff
*.gpg binary

2
.gitattributes vendored
View File

@@ -1,2 +0,0 @@
ssh/.ssh/** filter=git-crypt diff=git-crypt
ssh/.ssh/config !filter !diff

13
.gitignore vendored
View File

@@ -1,8 +1,9 @@
weechat/.weechat/*.log
weechat/.weechat/logs
weechat/.weechat/script/
weechat/.weechat/sec.conf
neovim/.config/nvim/.netrwhist
neovim/.config/nvim/plugged
gpg/.gnupg/**
!gpg/.gnupg/gpg-agent.conf
beets/.config/beets/**
!beets/.config/beets/config.yaml
kitty/.config/kitty/current-theme.conf
kitty/.config/kitty/kitty.conf.bak
deluge/.config/deluge/state/
deluge/.config/deluge/*.state
deluge/.config/deluge/icons/

View File

@@ -19,8 +19,8 @@ git clone https://git.coolneng.duckdns.org/coolneng/dotfiles ~/.dotfiles
cd ~/.dotfiles
#+END_SRC
3. Run stow
3. Execute stow on all the folders
#+BEGIN_SRC sh
stow */
stow *
#+END_SRC

View File

@@ -1,14 +0,0 @@
directory: ~/Music
library: ~/.config/beets/musiclibrary.db
import:
write: yes
copy: no
move: yes
resume: ask
incremental: yes
quiet_fallback: skip
timid: no
plugins: fetchart embedart musicbrainz
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

@@ -1,6 +0,0 @@
{
"device": "alsa_input.pci-0000_00_1f.3.analog-stereo",
"device-description": "Built-in Audio Analog Stereo",
"device-profile": "analog-input-internal-mic",
"preset-name": "Improved Microphone"
}

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,100 +0,0 @@
{
"input": {
"blocklist": [],
"compressor": {
"attack": 20.0,
"boost-amount": 6.0,
"boost-threshold": -72.0,
"hpf-frequency": 10.0,
"hpf-mode": "off",
"input-gain": 0.0,
"knee": -6.0,
"lpf-frequency": 20000.0,
"lpf-mode": "off",
"makeup": 0.0,
"mode": "Downward",
"output-gain": 0.0,
"ratio": 4.0,
"release": 100.0,
"release-threshold": -120.0,
"sidechain": {
"lookahead": 0.0,
"mode": "RMS",
"preamp": 0.0,
"reactivity": 10.0,
"source": "Middle",
"type": "Feed-forward"
},
"threshold": -12.0
},
"deesser": {
"detection": "RMS",
"f1-freq": 6000.0,
"f1-level": 0.0,
"f2-freq": 4500.0,
"f2-level": 12.0,
"f2-q": 1.0,
"input-gain": 0.0,
"laxity": 15,
"makeup": 0.0,
"mode": "Wide",
"output-gain": 0.0,
"ratio": 3.0,
"sc-listen": false,
"threshold": -18.0
},
"filter": {
"frequency": 80.0,
"inertia": 20.0,
"input-gain": 0.0,
"mode": "12dB/oct Highpass",
"output-gain": 0.0,
"resonance": -3.0
},
"gate": {
"attack": 5.0,
"detection": "RMS",
"input-gain": 0.0,
"knee": 9.0,
"makeup": 0.0,
"output-gain": 0.0,
"range": -12.0,
"ratio": 2.0,
"release": 100.0,
"stereo-link": "Average",
"threshold": -18.0
},
"limiter": {
"alr": false,
"alr-attack": 5.0,
"alr-knee": 0.0,
"alr-release": 50.0,
"attack": 5.0,
"dithering": "None",
"external-sidechain": false,
"gain-boost": true,
"input-gain": 0.0,
"lookahead": 5.0,
"mode": "Herm Thin",
"output-gain": 0.0,
"oversampling": "None",
"release": 5.0,
"sidechain-preamp": 0.0,
"stereo-link": 100.0,
"threshold": -1.0
},
"plugins_order": [
"gate",
"compressor",
"filter",
"deesser",
"rnnoise",
"limiter"
],
"rnnoise": {
"input-gain": 0.0,
"model-path": "",
"output-gain": 0.0
}
}
}

View File

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

View File

@@ -1,653 +0,0 @@
{
"output": {
"autogain": {
"target": -12.0
},
"blocklist": [],
"equalizer": {
"input-gain": -0.3,
"left": {
"band0": {
"frequency": 22.59,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band1": {
"frequency": 28.440000000000001,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band2": {
"frequency": 35.799999999999997,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band3": {
"frequency": 45.07,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band4": {
"frequency": 56.740000000000002,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band5": {
"frequency": 71.430000000000007,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band6": {
"frequency": 89.930000000000007,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band7": {
"frequency": 113.20999999999999,
"gain": 4,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band8": {
"frequency": 142.53,
"gain": 4,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band9": {
"frequency": 179.43000000000001,
"gain": 4,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band10": {
"frequency": 225.88999999999999,
"gain": 4,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band11": {
"frequency": 284.38,
"gain": 4,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band12": {
"frequency": 358.01999999999998,
"gain": 4,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band13": {
"frequency": 450.72000000000003,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band14": {
"frequency": 567.41999999999996,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band15": {
"frequency": 714.34000000000003,
"gain": -1,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band16": {
"frequency": 899.28999999999996,
"gain": -2,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band17": {
"frequency": 1132.1500000000001,
"gain": -3.6000000000000001,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band18": {
"frequency": 1425.29,
"gain": -2.5,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band19": {
"frequency": 1794.3299999999999,
"gain": -1.5,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band20": {
"frequency": 2258.9299999999998,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band21": {
"frequency": 2843.8200000000002,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band22": {
"frequency": 3580.1599999999999,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band23": {
"frequency": 4507.1499999999996,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band24": {
"frequency": 5674.1599999999999,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band25": {
"frequency": 7143.3500000000004,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band26": {
"frequency": 8992.9400000000005,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band27": {
"frequency": 11321.450000000001,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band28": {
"frequency": 14252.860000000001,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band29": {
"frequency": 17943.279999999999,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
}
},
"mode": "IIR",
"num-bands": 30,
"output-gain": -6.5,
"right": {
"band0": {
"frequency": 22.59,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band1": {
"frequency": 28.440000000000001,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band2": {
"frequency": 35.799999999999997,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band3": {
"frequency": 45.07,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band4": {
"frequency": 56.740000000000002,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band5": {
"frequency": 71.430000000000007,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band6": {
"frequency": 89.930000000000007,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band7": {
"frequency": 113.20999999999999,
"gain": 4,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band8": {
"frequency": 142.53,
"gain": 4,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band9": {
"frequency": 179.43000000000001,
"gain": 4,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band10": {
"frequency": 225.88999999999999,
"gain": 4,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band11": {
"frequency": 284.38,
"gain": 4,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band12": {
"frequency": 358.01999999999998,
"gain": 4,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band13": {
"frequency": 450.72000000000003,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band14": {
"frequency": 567.41999999999996,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band15": {
"frequency": 714.34000000000003,
"gain": -1,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band16": {
"frequency": 899.28999999999996,
"gain": -2,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band17": {
"frequency": 1132.1500000000001,
"gain": -3.6000000000000001,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band18": {
"frequency": 1425.29,
"gain": -2.5,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band19": {
"frequency": 1794.3299999999999,
"gain": -1.5,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band20": {
"frequency": 2258.9299999999998,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band21": {
"frequency": 2843.8200000000002,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band22": {
"frequency": 3580.1599999999999,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band23": {
"frequency": 4507.1499999999996,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band24": {
"frequency": 5674.1599999999999,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band25": {
"frequency": 7143.3500000000004,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band26": {
"frequency": 8992.9400000000005,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band27": {
"frequency": 11321.450000000001,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band28": {
"frequency": 14252.860000000001,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band29": {
"frequency": 17943.279999999999,
"gain": 0,
"mode": "RLC (BT)",
"mute": false,
"q": 4.3600000000000003,
"slope": "x1",
"solo": false,
"type": "Bell"
}
},
"split-channels": false
},
"exciter": {
"amount": 6.0,
"blend": 0.0,
"ceil": 16000.0,
"ceil-active": false,
"harmonics": 8.000000000000002,
"input-gain": -2.0,
"output-gain": 0.0,
"scope": 5500.0
},
"limiter": {
"alr": false,
"alr-attack": 5.0,
"alr-knee": 0.0,
"alr-release": 50.0,
"attack": 5.0,
"dithering": "None",
"gain-boost": true,
"input-gain": 0.0,
"lookahead": 10.0,
"mode": "Herm Thin",
"output-gain": 0.0,
"oversampling": "Half x4(3L)",
"release": 5.0,
"sidechain-preamp": 0.0,
"stereo-link": 100.0,
"threshold": 0.0
},
"plugins_order": [
"equalizer",
"exciter",
"autogain",
"limiter"
]
}
}

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,27 @@ 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 hdmi-audio "pactl set-card-profile 0 output:hdmi-stereo-extra1"
alias laptop-audio "pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo"
alias sc "systemctl"
alias scu "systemctl --user"
alias jc "journalctl -eu"
alias jcu "journalctl --user -eu"
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)"
alias jc "journalctl -fu"
# Additional paths
set PATH $PATH $HOME/.emacs.d/bin
set PATH $PATH $HOME/.local/share/scripts
# fff colors [0-9]
set -x FFF_COL1 4
set -x FFF_COL2 8
# fff 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
# 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:3100
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
@@ -33,4 +33,3 @@ SETUVAR fish_pager_color_completion:\x1d
SETUVAR fish_pager_color_description:B3A06D\x1eyellow
SETUVAR fish_pager_color_prefix:white\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
SETUVAR fish_pager_color_selected_background:\x2dr

View File

@@ -12,13 +12,3 @@
program = gpg2
[tag]
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

View File

@@ -4,37 +4,22 @@ CMakeFiles/
cmake_install.cmake
compile_commands.json
Debug/
.ccls
.ccls-cache
.cache
.clang_complete
*.o
/**/*.o
bin
obj/
# LaTeX
auto
.auctex-auto
/**/auto/
# Misc
.*.swp
.#*
*.log
.DS_Store
# Python
.mypy_cache
__pycache__
.ipynb_checkpoints
.venv
**/__pycache__
# Emacs
.dir-locals.el
# Dev environment with Nix
.envrc
.direnv
.mysql
.pgdata
# Lock files
# Java
*.class
*.jar
.classpath
.project
.settings
# Emacs
.projectile-cache.eld
# Platformio
.pio
.direnv

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

@@ -1,12 +1,10 @@
file:///home/coolneng/Downloads
file:///home/coolneng/Documents
file:///home/coolneng/Documents/Uni
file:///home/coolneng/Documents/Work
file:///home/coolneng/Documents/Paperwork
file:///home/coolneng/Photos/Random%20dump
file:///home/coolneng/Photos/Memri
file:///home/coolneng/Photos/NPC
file:///home/coolneng/Photos/GIFs
file:///home/coolneng/Photos/Screenshots
file:///home/coolneng/Photos/MuisLata
file:///home/coolneng/Photos/Rehiwi
file:///home/coolneng/Photos/Personal
file:///home/coolneng/Photos/NPC
file:///home/coolneng/Photos/Memri
file:///home/coolneng/Photos/Random%20dump

View File

@@ -0,0 +1,15 @@
var child_process = require('child_process');
function getStdout(cmd) {
var stdout = child_process.execSync(cmd);
return stdout.toString().trim();
}
exports.host = "imap.gmail.com"
exports.port = 993;
exports.tls = true;
exports.username = "akasroua@gmail.com";
exports.password = getStdout("pass mail/gmail");
exports.onNewMail = "mbsync gmail"
exports.onNewMailPost = "notmuch new"
exports.boxes = [ "INBOX"];

View File

@@ -0,0 +1,15 @@
var child_process = require('child_process');
function getStdout(cmd) {
var stdout = child_process.execSync(cmd);
return stdout.toString().trim();
}
exports.host = "correo.ugr.es"
exports.port = 993;
exports.tls = true;
exports.username = "akasroua@correo.ugr.es";
exports.password = getStdout("pass mail/uni");
exports.onNewMail = "mbsync uni"
exports.onNewMailPost = "notmuch new"
exports.boxes = [ "INBOX"];

View File

@@ -1,26 +1,17 @@
profile multihead-dock {
output eDP-1 enable position 1920,0
output DP-1 enable mode 1920x1080 position 0,0
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 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
profile multihead {
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
exec pkill waybar; waybar
}
profile nomad {
output eDP-1 enable
exec light -S 50
output eDP-1 enable mode 1920x1080
exec light -S 70
exec pkill waybar; waybar
}

35
khal/.config/khal/config Normal file
View File

@@ -0,0 +1,35 @@
[calendars]
[[bob_calendar_local]]
path = ~/.calendars/radicale/
type = discover
[[bob_contacts_local]]
path = ~/.contacts/*
type = discover
[[google_calendar_local]]
path = ~/.calendars/google/amin.kasrou@jitkey.com/
type = discover
color = dark green
[locale]
timeformat = %H:%M
dateformat = %d/%m/
longdateformat = %d/%m/%Y
datetimeformat = %d/%m/%Y %H:%M
longdatetimeformat = %d/%m/%Y %H:%M
local_timezone= Europe/Brussels
default_timezone= Europe/Brussels
[default]
default_calendar = amin.kasrou@jitkey.com
timedelta = 7d
highlight_event_days = true
print_new = event
[view]
agenda_event_format = {calendar-color}{cancelled}{start-end-time-style} {title}{repeat-symbol}{reset}
[highlight_days]
method = fg

View File

@@ -0,0 +1,49 @@
# example configuration file for khard version >= 0.13.0
# place it under $HOME/.config/khard/khard.conf
[addressbooks]
[[contacts]]
path = ~/.contacts/Contacts/
[general]
debug = no
default_action = list
editor = vim
merge_editor = vimdiff
[contact table]
# display names by first or last name: first_name / last_name
display = first_name
# group by address book: yes / no
group_by_addressbook = no
# reverse table ordering: yes / no
reverse = no
# append nicknames to name column: yes / no
show_nicknames = no
# show uid table column: yes / no
show_uids = yes
# sort by first or last name: first_name / last_name
sort = last_name
# localize dates: yes / no
localize_dates = yes
# set a comma separated list of preferred phone number types in descending priority
# or nothing for non-filtered alphabetical order
preferred_phone_number_type = pref, cell, home
# set a comma separated list of preferred email address types in descending priority
# or nothing for non-filtered alphabetical order
preferred_email_address_type = pref, work, home
[vcard]
# extend contacts with your own private objects
# these objects are stored with a leading "X-" before the object name in the vcard files
# every object label may only contain letters, digits and the - character
# example:
# private_objects = Jabber, Skype, Twitter
private_objects = Jabber, Skype, Twitter
# preferred vcard version: 3.0 / 4.0
preferred_version = 3.0
# Look into source vcf files to speed up search queries: yes / no
search_in_source_files = no
# skip unparsable vcard files: yes / no
skip_unparsable = no

View File

@@ -0,0 +1,51 @@
# example configuration file for khard version >= 0.13.0
# place it under $HOME/.config/khard/khard.conf
[addressbooks]
[[family]]
path = ~/.contacts/family/
[[friends]]
path = ~/.contacts/friends/
[general]
debug = no
default_action = list
editor = vim
merge_editor = vimdiff
[contact table]
# display names by first or last name: first_name / last_name
display = first_name
# group by address book: yes / no
group_by_addressbook = no
# reverse table ordering: yes / no
reverse = no
# append nicknames to name column: yes / no
show_nicknames = no
# show uid table column: yes / no
show_uids = yes
# sort by first or last name: first_name / last_name
sort = last_name
# localize dates: yes / no
localize_dates = yes
# set a comma separated list of preferred phone number types in descending priority
# or nothing for non-filtered alphabetical order
preferred_phone_number_type = pref, cell, home
# set a comma separated list of preferred email address types in descending priority
# or nothing for non-filtered alphabetical order
preferred_email_address_type = pref, work, home
[vcard]
# extend contacts with your own private objects
# these objects are stored with a leading "X-" before the object name in the vcard files
# every object label may only contain letters, digits and the - character
# example:
# private_objects = Jabber, Skype, Twitter
private_objects = Jabber, Skype, Twitter
# preferred vcard version: 3.0 / 4.0
preferred_version = 3.0
# Look into source vcf files to speed up search queries: yes / no
search_in_source_files = no
# skip unparsable vcard files: yes / no
skip_unparsable = no

View File

@@ -6,10 +6,10 @@
#: individual font faces and even specify special fonts for particular
#: characters.
font_family Terminus (TTF)
bold_font Terminus (TTF) Bold
italic_font Terminus (TTF) Italic
bold_italic_font Terminus (TTF) Bold Italic
font_family Go Mono
bold_font Go Mono Bold
italic_font Go Mono Italic
bold_italic_font Go Mono Bold Italic
#: You can specify different fonts for the bold/italic/bold-italic
#: variants. To get a full list of supported fonts use the `kitty
@@ -23,7 +23,7 @@ bold_italic_font Terminus (TTF) Bold Italic
#: italic_font Operator Mono Book Italic
#: bold_italic_font Operator Mono Medium Italic
font_size 16.5
font_size 14.0
#: Font size (in pts)
@@ -73,10 +73,12 @@ box_drawing_scale 0.001, 1, 1.5, 2
#: }}}
#: Cursor customization {{{
# cursor #cccccc
cursor #cccccc
#: Default cursor color
# cursor_text_color #111111
cursor_text_color #111111
#: Choose the color of text under the cursor. If you want it rendered
#: with the background color of the cell underneath instead, use the
@@ -152,7 +154,8 @@ mouse_hide_wait 3.0
#: mouse not being used. Set to zero to disable mouse cursor hiding.
#: Set to a negative value to hide the mouse cursor immediately when
#: typing text.
# url_color #0087bd
url_color #0087bd
url_style curly
#: The color and style for highlighting URLs on mouse-over. url_style
@@ -351,14 +354,17 @@ placement_strategy center
#: this option. Using a value of center means the cell area will be
#: placed centrally. A value of top-left means the padding will be on
#: only the bottom and right edges.
# active_border_color #00ff00
active_border_color #00ff00
#: The color for the border of the active window. Set this to none to
#: not draw borders around the active window.
# inactive_border_color #cccccc
inactive_border_color #cccccc
#: The color for the border of inactive windows
# bell_border_color #ff5a00
bell_border_color #ff5a00
#: The color for the border of inactive windows in which a bell has
#: occurred
@@ -439,11 +445,12 @@ tab_title_template {title}
#: title. If you wish to include the tab-index as well, use something
#: like: {index}: {title}. Useful if you have shortcuts mapped for
#: goto_tab N.
# active_tab_foreground #000
# active_tab_background #eee
active_tab_foreground #000
active_tab_background #eee
active_tab_font_style bold-italic
# inactive_tab_foreground #444
# inactive_tab_background #999
inactive_tab_foreground #444
inactive_tab_background #999
inactive_tab_font_style normal
#: Tab bar colors and styles
@@ -452,6 +459,9 @@ inactive_tab_font_style normal
#: Color scheme {{{
foreground #c6c8d1
background #161821
#: The foreground and background colors
background_opacity 1.0
@@ -480,6 +490,62 @@ dynamic_background_opacity no
dim_opacity 0.75
#: How much to dim text that has the DIM/FAINT attribute set. One
#: means no dimming and zero means fully dimmed (i.e. invisible).
selection_foreground #000000
#: The foreground for text selected with the mouse. A value of none
#: means to leave the color unchanged.
selection_background #fffacd
#: The background for text selected with the mouse.
#: The 16 terminal colors. There are 8 basic colors, each color has a
#: dull and bright version. You can also set the remaining colors from
#: the 256 color table as color16 to color255.
color0 #161821
color8 #6b7089
#: black
color1 #e27878
color9 #e98989
#: red
color2 #b4be82
color10 #c0ca8e
#: green
color3 #e2a478
color11 #e9b189
#: yellow
color4 #84a0c6
color12 #91acd1
#: blue
color5 #a093c7
color13 #ada0d3
#: magenta
color6 #89b8c2
color14 #95c4ce
#: cyan
color7 #c6c8d1
color15 #d2d4de
#: white
#: }}}
@@ -574,7 +640,8 @@ term xterm-kitty
#: }}}
#: OS specific tweaks {{{
# macos_titlebar_color system
macos_titlebar_color system
#: Change the color of the kitty window's titlebar on macOS. A value
#: of system means to use the default system color, a value of
@@ -989,17 +1056,3 @@ 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

@@ -2,9 +2,8 @@
IMAPAccount gmail
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,162 +13,74 @@ 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:
Near :gmail-local:
Create Both
Expunge Both
SyncState *
Master :gmail-remote:
Slave :gmail-local:
Channel sync-gmail-sent
Far :gmail-remote:"[Gmail]/Sent Mail"
Near :gmail-local:sent
Create Both
Expunge Both
SyncState *
Master :gmail-remote:"[Gmail]/Sent Mail"
Slave :gmail-local:sent
Channel sync-gmail-trash
Far :gmail-remote:"[Gmail]/Bin"
Near :gmail-local:trash
Create Both
Expunge Both
SyncState *
Master :gmail-remote:"[Gmail]/Bin"
Slave :gmail-local:trash
Channel sync-gmail-junk
Far :gmail-remote:"[Gmail]/Spam"
Near :gmail-local:junk
Create Both
Expunge Both
SyncState *
Channel sync-gmail-archive
Far :gmail-remote:"[Gmail]/All Mail"
Near :gmail-local:archive
Create Both
Expunge Both
SyncState *
Master :gmail-remote:"[Gmail]/Spam"
Slave :gmail-local:junk
# Get all the channels together into a group.
Group gmail
Channel sync-gmail-default
Channel sync-gmail-sent
Channel sync-gmail-trash
Channel sync-gmail-junk
Channel sync-gmail-archive
IMAPAccount disroot
Host disroot.org
User akasroua@disroot.org
AuthMechs LOGIN
PassCmd "pass mail/disroot"
TLSType IMAPS
Create Both
Expunge Both
SyncState *
IMAPAccount uni
Host correo.ugr.es
User akasroua@correo.ugr.es
PassCmd "pass mail/uni"
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt
IMAPStore disroot-remote
Account disroot
IMAPStore uni-remote
Account uni
MaildirStore disroot-local
MaildirStore uni-local
Subfolders Verbatim
# The trailing "/" is important
Path ~/.mail/disroot/
Inbox ~/.mail/disroot/inbox/
Path ~/.mail/uni/
Inbox ~/.mail/uni/INBOX/
Channel uni-default
Master :uni-remote:
Slave :uni-local:
Channel uni-sent
Master :uni-remote:"Sent"
Slave :uni-local:sent
Channel uni-trash
Master :uni-remote:"Trash"
Slave :uni-local:trash
Channel uni-archive
Master :uni-remote:"BUZONdeEntradaUGR"
Slave :uni-local:archive
# Get all the channels together into a group.
Group uni
Channel uni-default
Channel uni-sent
Channel uni-trash
Channel uni-archive
Channel sync-disroot-default
Far :disroot-remote:
Near :disroot-local:
Create Both
Expunge Both
SyncState *
Channel sync-disroot-sent
Far :disroot-remote:"Sent"
Near :disroot-local:sent
Create Both
Expunge Both
SyncState *
Channel sync-disroot-trash
Far :disroot-remote:"Trash"
Near :disroot-local:trash
Create Both
Expunge Both
SyncState *
Channel sync-disroot-junk
Far :disroot-remote:"Junk"
Near :disroot-local:junk
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
Create Both
Expunge Both
SyncState *
Channel sync-disroot-buying
Far :disroot-remote:"Buying"
Near :disroot-local:buying
Create Both
Expunge Both
SyncState *
Channel sync-disroot-services
Far :disroot-remote:"Services"
Near :disroot-local:services
Create Both
Expunge Both
SyncState *
Channel sync-disroot-smart
Far :disroot-remote:"SMART"
Near :disroot-local:smart
Create Both
Expunge Both
SyncState *
Channel sync-disroot-travel
Far :disroot-remote:"Travel"
Near :disroot-local:travel
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 +0,0 @@
https://icecast.radiofrance.fr/fip-hifi.aac

View File

@@ -0,0 +1,14 @@
Nujabes/Hydeout Productions (First Collection)/01 Moon Strut (intro).flac
Nujabes/Hydeout Productions (First Collection)/02 Don't Even try it (feat Funky DL).flac
Nujabes/Hydeout Productions (First Collection)/03 Strive (feat Apani B Fly Emcee).flac
Nujabes/Hydeout Productions (First Collection)/04 Home Sweet Home (feat Substantial).flac
Nujabes/Hydeout Productions (First Collection)/05 Still talking to you.flac
Nujabes/Hydeout Productions (First Collection)/06 Luv (Sic) (feat Shing02).flac
Nujabes/Hydeout Productions (First Collection)/07 Steadfast.flac
Nujabes/Hydeout Productions (First Collection)/08 Lyrical Terrorists (feat Substantial, L-Universe).flac
Nujabes/Hydeout Productions (First Collection)/09 Lose My Religion (remix) (feat L-Universe).flac
Nujabes/Hydeout Productions (First Collection)/10 It's About Time (Fat Jon Remix) (feat Pase Rock).flac
Nujabes/Hydeout Productions (First Collection)/11 Plazma Avenue (remix) (feat Five Deez).flac
Nujabes/Hydeout Productions (First Collection)/12 Peoples don't stray (feat Funky DL).flac
Nujabes/Hydeout Productions (First Collection)/13 D.T.F.N (feat Cise Starr).flac
Nujabes/Hydeout Productions (First Collection)/14 Luv (Sic) Part 2 (feat Shing02).flac

View File

@@ -0,0 +1,14 @@
Nujabes/Hydeout Productions (Second Collection)/01 Voice of Autumn.flac
Nujabes/Hydeout Productions (Second Collection)/02 Sky is falling (feat C.L Smooth).flac
Nujabes/Hydeout Productions (Second Collection)/03 Waltz for Life will born (feat Uyama Hiroto).flac
Nujabes/Hydeout Productions (Second Collection)/04 Imaginary Folklore (feat Clammbon).flac
Nujabes/Hydeout Productions (Second Collection)/05 Hikari (feat Substantial).flac
Nujabes/Hydeout Productions (Second Collection)/06 Counting Stars.flac
Nujabes/Hydeout Productions (Second Collection)/07 Another Reflection.flac
Nujabes/Hydeout Productions (Second Collection)/08 Fly by Night (feat Five Deez).flac
Nujabes/Hydeout Productions (Second Collection)/09 Old Light (Voices from 93 Million Miles Away remix) (feat Pase Rock).flac
Nujabes/Hydeout Productions (Second Collection)/10 With Rainy Eyes (feat Emancipator).flac
Nujabes/Hydeout Productions (Second Collection)/11 Luv (Sic) (Modal Soul remix) (feat Shing02).flac
Nujabes/Hydeout Productions (Second Collection)/12 Windspeaks (feat Uyama Hiroto).flac
Nujabes/Hydeout Productions (Second Collection)/13 Winter Lane (Nujabes remix) (feat DSK).flac
Nujabes/Hydeout Productions (Second Collection)/14 After Hanabi (Listen to my Beats).flac

View File

@@ -1 +1,2 @@
http://ice5.securenetsystems.net/KCSM
http://ice7.securenetsystems.net/KCSM2

View File

@@ -0,0 +1,15 @@
Nujabes/Metaphorical Music/01 Blessing It -remix (feat. Substantial & Pase Rock from Five Deez).flac
Nujabes/Metaphorical Music/02 Horn In The Middle.flac
Nujabes/Metaphorical Music/03 Lady Brown (feat. Cise Starr from CYNE).flac
Nujabes/Metaphorical Music/04 Kumomi.flac
Nujabes/Metaphorical Music/05 Highs 2 Lows (feat. Cise Starr from CYNE).flac
Nujabes/Metaphorical Music/06 Beat Laments The World.flac
Nujabes/Metaphorical Music/07 Letter From Yokosuka.flac
Nujabes/Metaphorical Music/08 Think Different (feat. Substantial).flac
Nujabes/Metaphorical Music/09 A Day By Atmosphere Supreme.flac
Nujabes/Metaphorical Music/10 Next View (feat. Uyama Hiroto).flac
Nujabes/Metaphorical Music/11 Latitude -remix (feat. Five Deez).flac
Nujabes/Metaphorical Music/12 F.I.L.O. (feat. Shing02).flac
Nujabes/Metaphorical Music/13 Summer Gypsy.flac
Nujabes/Metaphorical Music/14 The Final View.flac
Nujabes/Metaphorical Music/15 Peaceland.flac

View File

@@ -0,0 +1,14 @@
Nujabes/Modal Soul/01 Feather (featuring Cise Starr&Akin from CYNE).flac
Nujabes/Modal Soul/02 ordinary joe (featuring Terry Callier).flac
Nujabes/Modal Soul/03 reflection eternal.flac
Nujabes/Modal Soul/04 Luv(sic.)pt3 (Featuring Shing02).flac
Nujabes/Modal Soul/05 Music is mine.flac
Nujabes/Modal Soul/06 Eclipse (feat. Substantial).flac
Nujabes/Modal Soul/07 The Sign (feat. Pase Rock).flac
Nujabes/Modal Soul/08 Thank you (featuring Apani B).flac
Nujabes/Modal Soul/09 World's end Rhapsody.flac
Nujabes/Modal Soul/10 Modal Soul (featuring Uyama Hiroto).flac
Nujabes/Modal Soul/11 flowers.flac
Nujabes/Modal Soul/12 sea of cloud.flac
Nujabes/Modal Soul/13 Light on the land.flac
Nujabes/Modal Soul/14 Horizon.flac

View File

@@ -0,0 +1 @@
http://radio.plaza.one/mp3

View File

@@ -0,0 +1,2 @@
http://novazz.ice.infomaniak.ch/novazz-128.mp3
http://novazz.ice.infomaniak.net/novazz-128.mp3

View File

@@ -0,0 +1 @@
http://nova-ln.ice.infomaniak.ch/nova-ln-128.mp3

View File

@@ -1 +0,0 @@
https://stream.radioparadise.com/flac

View File

@@ -0,0 +1,14 @@
Nujabes/Spiritual State/01 - Spiritual State (featuring Uyama Hiroto).flac
Nujabes/Spiritual State/02 - Sky is Tumbling (featuring Cise Star).flac
Nujabes/Spiritual State/03 - Gone Are The Days (featuring Uyama Hiroto).flac
Nujabes/Spiritual State/04 - Spiral.flac
Nujabes/Spiritual State/05 - City Lights (featuring Pase Rock & Substantial).flac
Nujabes/Spiritual State/06 - Color of Autumn.flac
Nujabes/Spiritual State/07 - Dawn on the Side.flac
Nujabes/Spiritual State/08 - Yes (featuring Pase Rock).flac
Nujabes/Spiritual State/09 - Rainyway Back Home.flac
Nujabes/Spiritual State/10 - Far Fowls.flac
Nujabes/Spiritual State/11 - Fellows.flac
Nujabes/Spiritual State/12 - Waiting For The Clouds (featuring Substantial).flac
Nujabes/Spiritual State/13 - Prayer.flac
Nujabes/Spiritual State/14 - Island (featuring Uyama Hiroto & haruka nakamura).flac

View File

@@ -1,43 +0,0 @@
# Vim-like Keybindings
def_key "/"
find
def_key "/"
find_item_forward
def_key "+"
show_clock
def_key "="
volume_up
def_key "j"
scroll_down
def_key "k"
scroll_up
def_key "ctrl-u"
page_up
def_key "ctrl-d"
page_down
def_key "h"
previous_column
def_key "l"
next_column
def_key "."
show_lyrics
def_key "n"
next_found_item
def_key "N"
previous_found_item
def_key "g"
move_home
def_key "G"
move_end

View File

@@ -1,6 +1,5 @@
# mpd
mpd_music_dir = "~/Music"
mpd_connection_timeout = 60
## Selected tracks ##
selected_item_prefix = "* "
@@ -25,10 +24,8 @@ 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"
# Playlist
user_interface = "alternative"
@@ -41,4 +38,3 @@ alternative_header_second_line_format = "$6{%a} $b$8-$9 $4{%b}$9"
now_playing_prefix = "$b$4>$5> "
now_playing_suffix = "$2$/b$2"
progressbar_look = "─┅─"
search_engine_display_mode = "columns"

View File

@@ -1,8 +0,0 @@
## Bind volume control to +/-
+ add volume 5
- add volume -5
## Cycle through dynamic normalization, loud normalization or none
F1 cycle-values af "lavfi=[dynaudnorm=s=30]" "lavfi=[loudnorm]" ""
## Change subtitle size
ALT+k add sub-scale +0.1
ALT+j add sub-scale -0.1

View File

@@ -1,25 +1,16 @@
## Subtitle settings
sub-font-size=30
sub-font-size=38
embeddedfonts=no
sub-font='Roboto Condensed'
sub-auto=all
sub-file-paths=Subs:subs
## HW Decoding
hwdec=vaapi
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

@@ -3,18 +3,18 @@ defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
port 587
logfile /tmp/msmtp.log
# Accounts
account gmail
host smtp.gmail.com
port 587
from akasroua@gmail.com
user akasroua@gmail.com
passwordeval "pass mail/gmail"
account disroot
host disroot.org
from akasroua@disroot.org
user akasroua@disroot.org
passwordeval "pass mail/disroot"
account uni
host correo.ugr.es
port 587
from akasroua@correo.ugr.es
user akasroua@correo.ugr.es
passwordeval "pass mail/uni"

View File

@@ -0,0 +1,29 @@
# 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 header_cache = ~/.config/mutt/accounts/gmail/cache/headers
#set message_cachedir = ~/.config/mutt/accounts/gmail/cache/bodies
#set certificate_file = ~/.config/mutt/accounts/gmail/certificates
#source "~/.config/mutt/credentials/getmuttpass gmail |"
set mbox_type = Maildir
set ssl_starttls = yes
set ssl_force_tls = yes
set record = "+sent"
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,29 @@
# vim: filetype=neomuttrc
# muttrc file for account coolneng
set realname = "Amin Kasrou Aouam"
set from = "akasroua@correo.ugr.es"
set sendmail = "./.config/neomutt/etc/sendmail uni"
set folder = "~/.mail/uni"
#set header_cache = ~/.config/mutt/accounts/coolneng/cache/headers
#set message_cachedir = ~/.config/mutt/accounts/coolneng/cache/bodies
#set certificate_file = ~/.config/mutt/accounts/coolneng/certificates
#source "~/.config/mutt/credentials/getmuttpass coolneng |"
set mbox_type = Maildir
set ssl_starttls = yes
set ssl_force_tls = yes
set record = "+sent"
bind index,pager gg noop
bind index,pager g noop
bind index gg first-entry
unmailboxes *
mailboxes =INBOX =trash =sent =archive
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."
set spoolfile = "+INBOX"
set record = "+sent"
set postponed = ""
set trash = "+trash"

View File

@@ -0,0 +1,28 @@
## A file for aliases
# Uni staff
alias dani dmolina@decsai.ugr.es
alias cano carloscano@ugr.es
alias paco carranzafr@ugr.es
alias desigual cdemesa@decsai.ugr.es
alias merino cmerino@ugr.es
alias carlos carlosrodriguez@ugr.es
alias mari mjesusrodriguez@ugr.es
alias bea beap@ugr.es
alias jorge jsguerrero@ugr.es
alias boras rafagrosso@ugr.es
alias fran fjrodriguez@decsai.ugr.es
# Uni students
alias elenche elenche@correo.ugr.es
alias bezout jesusmartinz@correo.ugr.es
alias lesca lesca98@correo.ugr.es
alias oumnia oumnia487@correo.ugr.es
alias juanca jclm@correo.ugr.es
# 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,6 @@
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/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,4 @@
#!/bin/sh
nix-shell -p python38
python ~/.local/bin/MIMEmbellish | msmtp -a $1 -t

View File

@@ -0,0 +1 @@
<EFBFBD>

View File

@@ -0,0 +1 @@
<EFBFBD>

View File

@@ -0,0 +1,89 @@
#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
set sleep_time = 0
set sort = 'reverse-date'
set editor = $EDITOR
set copy = no
set timeout = "15"
set mail_check = "30"
set imap_idle = yes
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
# 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

View File

@@ -0,0 +1,4 @@
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/uni.muttrc<enter><change-folder>!<enter>'
source /home/coolneng/.config/neomutt/accounts/uni.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,88 @@
snippet sign "Signature"
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 dp "Slide notes"
# Diapo $1
endsnippet

View File

@@ -1,6 +1,5 @@
""Basic stuff
set number
set relativenumber
set encoding=utf8
set clipboard+=unnamedplus
set nofoldenable
@@ -14,8 +13,6 @@ set directory=~/.cache
""Ignore case and highlight matches when searching
set ignorecase
set hlsearch
""Persistent undo
set undofile
""Resize line number colum
set numberwidth=2
""Keybindings
@@ -25,20 +22,53 @@ nnoremap <leader>n :noh<cr>
"Move the current line up or down
nnoremap <leader>k :m-2<cr>==
nnoremap <leader>j :m+<cr>==
""Markdown
au 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', { 'on': 'Goyo' }
Plug 'SirVer/ultisnips', { 'for': 'markdown' }
Plug 'Raimondi/delimitMate'
Plug 'nordtheme/vim'
Plug 'rose-pine/neovim'
Plug 'LnL7/vim-nix'
Plug 'cocopon/iceberg.vim'
call plug#end()
""Colors
colorscheme iceberg
set termguicolors
colorscheme nord
set background=light
""Sets the colorscheme in tmux
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
""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()
set noshowmode
set noshowcmd
set scrolloff=999
let b:quitting = 0
let b:quitting_bang = 0
autocmd QuitPre <buffer> let b:quitting = 1
cabbrev <buffer> q! let b:quitting_bang = 1 <bar> q!
endfunction
function! s:goyo_leave()
set showmode
set showcmd
set scrolloff=5
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 @@
{ allowUnfree = 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

@@ -1,6 +1,6 @@
%%
% Copyright (c) 2017 - 2021, Pascal Wagler;
% Copyright (c) 2014 - 2021, John MacFarlane
% Copyright (c) 2017 - 2019, Pascal Wagler;
% Copyright (c) 2014 - 2019, John MacFarlane
%
% All rights reserved.
%
@@ -49,9 +49,6 @@ $if(latex-dir-rtl)$
\PassOptionsToPackage{RTLdocument}{bidi}
$endif$
$endif$
$if(CJKmainfont)$
\PassOptionsToPackage{space}{xeCJK}
$endif$
%
\documentclass[
$if(fontsize)$
@@ -63,7 +60,7 @@ $endif$
$if(papersize)$
$papersize$paper,
$else$
paper=a4,
a4paper,
$endif$
$if(beamer)$
ignorenonframetext,
@@ -77,7 +74,7 @@ $endif$
$for(classoption)$
$classoption$$sep$,
$endfor$
,captions=tableheading
,tablecaptionabove
]{$if(beamer)$$documentclass$$else$$if(book)$scrbook$else$scrartcl$endif$$endif$}
$if(beamer)$
$if(background-image)$
@@ -132,7 +129,6 @@ $endif$
$if(beamerarticle)$
\usepackage{beamerarticle} % needs to be loaded first
$endif$
\usepackage{amsmath,amssymb}
$if(fontfamily)$
\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$}
$else$
@@ -140,10 +136,12 @@ $else$
$endif$
$if(linestretch)$
\usepackage{setspace}
\setstretch{$linestretch$}
$else$
\usepackage{setspace}
\setstretch{1.2}
$endif$
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
@@ -338,11 +336,7 @@ $highlighting-macros$
$endif$
$if(tables)$
\usepackage{longtable,booktabs,array}
$if(multirow)$
\usepackage{multirow}
$endif$
\usepackage{calc} % for calculating minipage widths
\usepackage{longtable,booktabs}
$if(beamer)$
\usepackage{caption}
% Make caption package work with longtable
@@ -366,7 +360,7 @@ $else$
\usepackage{footnotebackref}
$endif$
$if(graphics)$
\usepackage{graphicx}
\usepackage{graphicx,grffile}
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
@@ -375,10 +369,6 @@ $if(graphics)$
% margins by default, and it is still possible to overwrite the defaults
% using explicit options in \includegraphics[width, height, ...]{}
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
% Set default figure placement to htbp
\makeatletter
\def\fps@figure{htbp}
\makeatother
$endif$
$if(links-as-notes)$
% Make links footnotes instead of hotlinks:
@@ -393,7 +383,7 @@ $endif$
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
$if(numbersections)$
\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$}
\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$3$endif$}
$else$
\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
$endif$
@@ -432,23 +422,17 @@ $if(lang)$
$endif$
% Load polyglossia as late as possible: uses bidi with RTL langages (e.g. Hebrew, Arabic)
\usepackage{polyglossia}
\setmainlanguage[$for(polyglossia-lang.options)$$polyglossia-lang.options$$sep$,$endfor$]{$polyglossia-lang.name$}
\setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$}
$for(polyglossia-otherlangs)$
\setotherlanguage[$for(polyglossia-otherlangs.options)$$polyglossia-otherlangs.options$$sep$,$endfor$]{$polyglossia-otherlangs.name$}
\setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$}
$endfor$
\else
\usepackage[$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel}
% get rid of language-specific shorthands (see #6817):
\let\LanguageShortHands\languageshorthands
\def\languageshorthands#1{}
\usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel}
$if(babel-newcommands)$
$babel-newcommands$
$endif$
\fi
$endif$
\ifluatex
\usepackage{selnolig} % disable illegal ligatures
\fi
$if(dir)$
\ifxetex
% Load bidi as late as possible as it modifies e.g. graphicx
@@ -475,27 +459,10 @@ $endif$
$if(csl-refs)$
\newlength{\cslhangindent}
\setlength{\cslhangindent}{1.5em}
\newlength{\csllabelwidth}
\setlength{\csllabelwidth}{3em}
\newenvironment{CSLReferences}[2] % #1 hanging-ident, #2 entry spacing
{% don't indent paragraphs
\setlength{\parindent}{0pt}
% turn on hanging indent if param 1 is 1
\ifodd #1 \everypar{\setlength{\hangindent}{\cslhangindent}}\ignorespaces\fi
% set entry spacing
\ifnum #2 > 0
\setlength{\parskip}{#2\baselineskip}
\fi
}%
{}
\usepackage{calc}
\newcommand{\CSLBlock}[1]{#1\hfill\break}
\newcommand{\CSLLeftMargin}[1]{\parbox[t]{\csllabelwidth}{#1}}
\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{#1}\break}
\newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1}
$endif$
$if(csquotes)$
\usepackage{csquotes}
\newenvironment{cslreferences}%
{$if(csl-hanging-indent)$\setlength{\parindent}{0pt}%
\everypar{\setlength{\hangindent}{\cslhangindent}}\ignorespaces$endif$}%
{\par}
$endif$
$if(title)$
@@ -513,7 +480,9 @@ $else$
$endif$
\subtitle{$subtitle$}
$endif$
$if(author)$
\author{$for(author)$$author$$sep$ \and $endfor$}
$endif$
\date{$date$}
$if(beamer)$
$if(institute)$
@@ -562,10 +531,6 @@ $endfor$
\fi
$endif$
$if(page-background)$
\usepackage[pages=all]{background}
$endif$
%
% for the background color of the title page
%
@@ -665,14 +630,13 @@ $endif$
%\addtokomafont{chapter}{\color{heading-color}}
%
% variables for title, author and date
% variables for title and author
%
$if(beamer)$
$else$
\usepackage{titling}
\title{$title$}
\author{$for(author)$$author$$sep$, $endfor$}
\date{$date$}
$endif$
%
@@ -864,17 +828,6 @@ $else$
\renewcommand{\footrulewidth}{0.4pt}
}
\pagestyle{eisvogel-header-footer}
$if(page-background)$
\backgroundsetup{
scale=1,
color=black,
opacity=$if(page-background-opacity)$$page-background-opacity$$else$0.2$endif$,
angle=0,
contents={%
\includegraphics[width=\paperwidth,height=\paperheight]{$page-background$}
}%
}
$endif$
$endif$
$endif$
@@ -944,7 +897,7 @@ $endif$
$if(logo)$
\noindent
\includegraphics[width=$if(logo-width)$$logo-width$$else$35mm$endif$, left]{$logo$}
\includegraphics[width=$if(logo-width)$$logo-width$$else$100$endif$pt, left]{$logo$}
$endif$
$if(titlepage-background)$
@@ -989,7 +942,7 @@ $if(toc-title)$
\renewcommand*\contentsname{$toc-title$}
$endif$
$if(beamer)$
\begin{frame}[allowframebreaks]
\begin{frame}
$if(toc-title)$
\frametitle{$toc-title$}
$endif$
@@ -1003,7 +956,7 @@ $else$
$if(colorlinks)$
\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$}
$endif$
\setcounter{tocdepth}{$toc-depth$}
\setcounter{tocdepth}{$if(toc-depth)$$toc-depth$$else$3$endif$}
\tableofcontents
$if(toc-own-page)$
\newpage

View File

@@ -1,79 +0,0 @@
#+LaTeX_CLASS: org-plain-latex
#+LaTeX_CLASS_OPTIONS: [letterpaper, 11pt]
#+LATEX_HEADER: \usepackage{lmodern} % Ensures we have the right font
#+LATEX_HEADER: \usepackage[T1]{fontenc}
#+LATEX_HEADER: \usepackage[AUTO]{inputenc}
#+LATEX_HEADER: \usepackage{graphicx}
#+LATEX_HEADER: \usepackage{amsmath, amsthm, amssymb}
#+LATEX_HEADER: \usepackage[table, xcdraw]{xcolor}
% Colorizing links in a nicer way.
#+LATEX_HEADER: \definecolor{bblue}{HTML}{0645AD}
#+LATEX_HEADER: \usepackage[colorlinks]{hyperref}
#+LATEX_HEADER: \hypersetup{colorlinks, linkcolor=blue, urlcolor=bblue}
% Moving up the title.
#+LATEX_HEADER: \usepackage{titling}
#+LATEX_HEADER: \setlength{\droptitle}{-6em}
#+LATEX_HEADER: \setlength{\parindent}{0pt}
#+LATEX_HEADER: \setlength{\parskip}{1em}
#+LATEX_HEADER: \usepackage[stretch=10]{microtype}
#+LATEX_HEADER: \usepackage{hyphenat}
#+LATEX_HEADER: \usepackage{ragged2e}
#+LATEX_HEADER: \usepackage{subfig} % Subfigures (not needed in Org I think)
#+LATEX_HEADER: \usepackage{hyperref} % Links
#+LATEX_HEADER: \usepackage{listings} % Code highlighting
% Disables flush alighment on the right side. Personal preference.
# #+LATEX_HEADER: \RaggedRight
% Page geometry
#+LATEX_HEADER: \usepackage[top=1in, bottom=1.25in, left=1.55in, right=1.55in]{geometry}
% Line spacing
#+LATEX_HEADER: \renewcommand{\baselinestretch}{1.15}
% Page numbering - this disables it
# #+LATEX_HEADER: \pagenumbering{gobble}
% Spacing, titling, text setting.
#+LATEX_HEADER: \usepackage[explicit]{titlesec}
% Title customization
#+LATEX_HEADER: \pretitle{\begin{center}\fontsize{20pt}{20pt}\selectfont}
#+LATEX_HEADER: \posttitle{\par\end{center}}
#+LATEX_HEADER: \preauthor{\begin{center}\vspace{-6bp}\fontsize{14pt}{14pt}\selectfont}
#+LATEX_HEADER: \postauthor{\par\end{center}\vspace{-25bp}}
#+LATEX_HEADER: \predate{\begin{center}\fontsize{12pt}{12pt}\selectfont}
#+LATEX_HEADER: \postdate{\par\end{center}\vspace{0em}}
% Section/subsection headings:
%Section
#+LATEX_HEADER: \titlespacing\section{0pt}{5pt}{5pt} % left margin, space before section header, space after section header
%Subsection
#+LATEX_HEADER: \titlespacing\subsection{0pt}{5pt}{-2pt} % left margin, space before subsection header, space after subsection header
%Subsubsection
#+LATEX_HEADER: \titlespacing\subsubsection{0pt}{5pt}{-2pt} % left margin, space before subsection header, space after subsection header
% List spacing
#+LATEX_HEADER: \usepackage{enumitem}
#+LATEX_HEADER: \setlist{itemsep=-2pt} % or \setlist{noitemsep} to leave space around whole list
# %Section
# #+LATEX_HEADER: \titleformat{\section} {\Large}{\thesection}{1em}{\textbf{#1}} % Section header formatting
# #+LATEX_HEADER: \titlespacing\section{0pt}{5pt}{-5pt} % left margin, space before section header, space after section header
# %Subsection
# #+LATEX_HEADER: \titleformat{\subsection} {\large}{\thesubsection}{1em}{\textbf{#1}}
\titlespacing\subsection{0pt}{5pt}{-5pt} % left margin, space before subsection header, space after subsection header
# %Subsubsection
# #+LATEX_HEADER: \titleformat{\subsubsection} {\large}{\thesubsubsection}{1em}{#1}
\titlespacing\subsubsection{0pt}{5pt}{-5pt} % left margin, space before subsection header, space after subsection header

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

@@ -1,25 +1,8 @@
[git.coolneng.duckdns.org*]
target=api/gitea
target=dev/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
target=dev/github
username_extractor=specific_line
line_username=1
skip_username=7
[gitlab.com*]
target=api/gitlab
username_extractor=specific_line
line_username=1
skip_username=7
[github.ugent.be*]
target=web/ugent.be
username_extractor=specific_line
line_username=1
skip_username=7

View File

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

View File

@@ -1,62 +0,0 @@
;; Goes into ~/.config/pulsemixer.cfg, $XDG_CONFIG_HOME respected
;; Everything that starts with "#" or ";" is a comment
;; For the option to take effect simply uncomment it
[general]
step = 1
step-big = 10
; server =
[keys]
;; To bind "special keys" such as arrows see "Key constant" table in
;; https://docs.python.org/3/library/curses.html#constants
; up = k, KEY_UP, KEY_PPAGE
; down = j, KEY_DOWN, KEY_NPAGE
; left = h, KEY_LEFT
; right = l, KEY_RIGHT
; left-big = H, KEY_SLEFT
; right-big = L, KEY_SRIGHT
; top = g, KEY_HOME
; bottom = G, KEY_END
; mode1 = KEY_F1
; mode2 = KEY_F2
; mode3 = KEY_F3
; next-mode = KEY_TAB
; prev-mode = KEY_BTAB
; mute = m
; lock = ' ' ; 'space', quotes are stripped
; quit = q, KEY_ESC
[ui]
hide-unavailable-profiles = yes
; hide-unavailable-ports = no
; color = 2 ; same as --color, 0 no color, 1 color currently selected, 2 full-color
; mouse = yes
[style]
;; Pulsemixer will use these characters to draw interface
;; Single characters only
; bar-top-left = ┌
; bar-left-mono = ╶
; bar-top-right = ┐
; bar-right-mono = ╴
; bar-bottom-left = └
; bar-bottom-right = ┘
; bar-on = ▮
; bar-on-muted = ▯
; bar-off = -
; arrow = ' '
; arrow-focused = ─
; arrow-locked = ─
; default-stream = *
; info-locked = L
; info-unlocked = U
; info-muted = M ; 🔇
; info-unmuted = M ; 🔉
[renames]
;; Changes stream names in interactive mode, regular expression are supported
;; https://docs.python.org/3/library/re.html#regular-expression-syntax
; 'default name example' = 'new name'
; '(?i)built-in .* audio' = 'Audio Controller'
; 'AudioIPC Server' = 'Firefox'

View File

@@ -1,323 +1,14 @@
configuration {
/* modi: "window,run,ssh";*/
/* width: 50;*/
lines: 5;
/* columns: 1;*/
font: "Roboto Condensed 19";
bw: 0;
/* location: 0;*/
padding: 200;
/* yoffset: 0;*/
/* xoffset: 0;*/
/* fixed-num-lines: true;*/
/* show-icons: false;*/
/* terminal: "rofi-sensible-terminal";*/
/* ssh-client: "ssh";*/
/* ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]";*/
/* run-command: "{cmd}";*/
/* run-list-command: "";*/
/* run-shell-command: "{terminal} -e {cmd}";*/
/* window-command: "wmctrl -i -R {window}";*/
/* window-match-fields: "all";*/
/* icon-theme: ;*/
/* drun-match-fields: "name,generic,exec,categories,keywords";*/
/* drun-categories: ;*/
/* drun-show-actions: false;*/
/* drun-display-format: "{name} [<span weight='light' size='small'><i>({generic})</i></span>]";*/
/* drun-url-launcher: "xdg-open";*/
/* disable-history: false;*/
/* ignored-prefixes: "";*/
/* sort: false;*/
/* sorting-method: "normal";*/
/* case-sensitive: false;*/
/* cycle: true;*/
/* sidebar-mode: false;*/
eh: 2;
/* auto-select: false;*/
/* parse-hosts: false;*/
/* parse-known-hosts: true;*/
/* combi-modi: "window,run";*/
/* matching: "normal";*/
/* tokenize: true;*/
/* m: "-5";*/
/* line-margin: 2;*/
/* line-padding: 1;*/
/* filter: ;*/
separator-style: "none";
hide-scrollbar: true;
/* fake-transparency: false;*/
/* dpi: -1;*/
/* threads: 0;*/
/* scrollbar-width: 8;*/
/* scroll-method: 0;*/
/* fake-background: "screenshot";*/
/* window-format: "{w} {c} {t}";*/
/* click-to-exit: true;*/
/* show-match: true;*/
/* theme: ;*/
fullscreen: true;
color-normal: "argb:031d1f21, #f3f4f5, argb:031d1f21, argb:031d1f21, #9575cd";
color-urgent: "argb:031d1f21, #f3f4f5, argb:bc303541, argb:031d1f21, #9575cd";
color-active: "argb:031d1f21, #f3f4f5, argb:031d1f21, argb:031d1f21, #9575cd";
color-window: "argb:c82d303b, #7c8389, #1d1f21";
/* max-history-size: 25;*/
/* combi-hide-mode-prefix: false;*/
/* matching-negate-char: '-' /* unsupported */;*/
/* cache-dir: ;*/
/* window-thumbnail: false;*/
/* drun-use-desktop-cache: false;*/
/* drun-reload-desktop-cache: false;*/
/* normalize-match: false;*/
/* pid: "/run/user/1000/rofi.pid";*/
/* display-window: ;*/
/* display-windowcd: ;*/
/* display-run: ;*/
/* display-ssh: ;*/
/* display-drun: ;*/
/* display-combi: ;*/
/* display-keys: ;*/
/* display-file-browser: ;*/
/* kb-primary-paste: "Control+V,Shift+Insert";*/
/* kb-secondary-paste: "Control+v,Insert";*/
/* kb-clear-line: "Control+w";*/
/* kb-move-front: "Control+a";*/
/* kb-move-end: "Control+e";*/
/* kb-move-word-back: "Alt+b,Control+Left";*/
/* kb-move-word-forward: "Alt+f,Control+Right";*/
/* kb-move-char-back: "Left,Control+b";*/
/* kb-move-char-forward: "Right,Control+f";*/
/* kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/
/* kb-remove-word-forward: "Control+Alt+d";*/
/* kb-remove-char-forward: "Delete,Control+d";*/
/* kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h";*/
/* kb-remove-to-eol: "Control+k";*/
/* kb-remove-to-sol: "Control+u";*/
/* kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/
/* kb-accept-custom: "Control+Return";*/
/* kb-accept-alt: "Shift+Return";*/
/* kb-delete-entry: "Shift+Delete";*/
/* kb-mode-next: "Shift+Right,Control+Tab";*/
/* kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/
/* kb-row-left: "Control+Page_Up";*/
/* kb-row-right: "Control+Page_Down";*/
/* kb-row-up: "Up,Control+p,ISO_Left_Tab";*/
/* kb-row-down: "Down,Control+n";*/
/* kb-row-tab: "Tab";*/
/* kb-page-prev: "Page_Up";*/
/* kb-page-next: "Page_Down";*/
/* kb-row-first: "Home,KP_Home";*/
/* kb-row-last: "End,KP_End";*/
/* kb-row-select: "Control+space";*/
/* kb-screenshot: "Alt+S";*/
/* kb-ellipsize: "Alt+period";*/
/* kb-toggle-case-sensitivity: "grave,dead_grave";*/
/* kb-toggle-sort: "Alt+grave";*/
/* kb-cancel: "Escape,Control+g,Control+bracketleft";*/
/* kb-custom-1: "Alt+1";*/
/* kb-custom-2: "Alt+2";*/
/* kb-custom-3: "Alt+3";*/
/* kb-custom-4: "Alt+4";*/
/* kb-custom-5: "Alt+5";*/
/* kb-custom-6: "Alt+6";*/
/* kb-custom-7: "Alt+7";*/
/* kb-custom-8: "Alt+8";*/
/* kb-custom-9: "Alt+9";*/
/* kb-custom-10: "Alt+0";*/
/* kb-custom-11: "Alt+exclam";*/
/* kb-custom-12: "Alt+at";*/
/* kb-custom-13: "Alt+numbersign";*/
/* kb-custom-14: "Alt+dollar";*/
/* kb-custom-15: "Alt+percent";*/
/* kb-custom-16: "Alt+dead_circumflex";*/
/* kb-custom-17: "Alt+ampersand";*/
/* kb-custom-18: "Alt+asterisk";*/
/* kb-custom-19: "Alt+parenleft";*/
/* kb-select-1: "Super+1";*/
/* kb-select-2: "Super+2";*/
/* kb-select-3: "Super+3";*/
/* kb-select-4: "Super+4";*/
/* kb-select-5: "Super+5";*/
/* kb-select-6: "Super+6";*/
/* kb-select-7: "Super+7";*/
/* kb-select-8: "Super+8";*/
/* kb-select-9: "Super+9";*/
/* kb-select-10: "Super+0";*/
/* ml-row-left: "ScrollLeft";*/
/* ml-row-right: "ScrollRight";*/
/* ml-row-up: "ScrollUp";*/
/* ml-row-down: "ScrollDown";*/
/* me-select-entry: "MousePrimary";*/
/* me-accept-entry: "MouseDPrimary";*/
/* me-accept-custom: "Control+MouseDPrimary";*/
}
/**
* rofi -dump-theme output.
* Rofi version: 1.6.1
**/
* {
red: rgba ( 220, 50, 47, 100 % );
selected-active-foreground: rgba ( 149, 117, 205, 100 % );
lightfg: rgba ( 88, 104, 117, 100 % );
separatorcolor: rgba ( 29, 31, 33, 100 % );
urgent-foreground: rgba ( 243, 244, 245, 100 % );
alternate-urgent-background: rgba ( 48, 53, 65, 74 % );
lightbg: rgba ( 238, 232, 213, 100 % );
background-color: rgba ( 0, 0, 0, 0 % );
border-color: rgba ( 124, 131, 137, 100 % );
normal-background: rgba ( 29, 31, 33, 1 % );
selected-urgent-background: rgba ( 29, 31, 33, 1 % );
alternate-active-background: rgba ( 29, 31, 33, 1 % );
spacing: 2;
blue: rgba ( 38, 139, 210, 100 % );
alternate-normal-foreground: var(foreground);
urgent-background: rgba ( 29, 31, 33, 1 % );
selected-normal-foreground: rgba ( 149, 117, 205, 100 % );
active-foreground: rgba ( 243, 244, 245, 100 % );
background: rgba ( 45, 48, 59, 78 % );
selected-active-background: rgba ( 29, 31, 33, 1 % );
active-background: rgba ( 29, 31, 33, 1 % );
selected-normal-background: rgba ( 29, 31, 33, 1 % );
alternate-normal-background: rgba ( 29, 31, 33, 1 % );
foreground: rgba ( 243, 244, 245, 100 % );
selected-urgent-foreground: rgba ( 149, 117, 205, 100 % );
normal-foreground: var(foreground);
alternate-urgent-foreground: var(urgent-foreground);
alternate-active-foreground: var(active-foreground);
}
element {
padding: 1px ;
spacing: 5px ;
border: 0;
}
element normal.normal {
background-color: var(normal-background);
text-color: var(normal-foreground);
}
element normal.urgent {
background-color: var(urgent-background);
text-color: var(urgent-foreground);
}
element normal.active {
background-color: var(active-background);
text-color: var(active-foreground);
}
element selected.normal {
background-color: var(selected-normal-background);
text-color: var(selected-normal-foreground);
}
element selected.urgent {
background-color: var(selected-urgent-background);
text-color: var(selected-urgent-foreground);
}
element selected.active {
background-color: var(selected-active-background);
text-color: var(selected-active-foreground);
}
element alternate.normal {
background-color: var(alternate-normal-background);
text-color: var(alternate-normal-foreground);
}
element alternate.urgent {
background-color: var(alternate-urgent-background);
text-color: var(alternate-urgent-foreground);
}
element alternate.active {
background-color: var(alternate-active-background);
text-color: var(alternate-active-foreground);
}
element-text {
background-color: rgba ( 0, 0, 0, 0 % );
highlight: inherit;
text-color: inherit;
}
element-icon {
background-color: rgba ( 0, 0, 0, 0 % );
size: 1.0000em ;
text-color: inherit;
}
window {
padding: 200;
background-color: var(background);
border: 0;
fullscreen: true;
}
mainbox {
padding: 0;
border: 0;
}
message {
padding: 1px ;
border-color: var(separatorcolor);
border: 0px ;
}
textbox {
text-color: var(foreground);
}
listview {
padding: 2px 0px 0px ;
scrollbar: false;
border-color: var(separatorcolor);
spacing: 2px ;
fixed-height: 0;
border: 0px ;
}
scrollbar {
width: 4px ;
padding: 0;
handle-width: 8px ;
border: 0;
handle-color: var(normal-foreground);
}
sidebar {
border-color: var(separatorcolor);
border: 2px dash 0px 0px ;
}
button {
spacing: 0;
text-color: var(normal-foreground);
}
button selected {
background-color: var(selected-normal-background);
text-color: var(selected-normal-foreground);
}
num-filtered-rows {
expand: false;
text-color: rgba ( 128, 128, 128, 100 % );
}
num-rows {
expand: false;
text-color: rgba ( 128, 128, 128, 100 % );
}
textbox-num-sep {
expand: false;
str: "/";
text-color: rgba ( 128, 128, 128, 100 % );
}
inputbar {
padding: 1px ;
spacing: 0px ;
text-color: var(normal-foreground);
children: [ prompt,textbox-prompt-colon,entry,num-filtered-rows,textbox-num-sep,num-rows,case-indicator ];
}
case-indicator {
spacing: 0;
text-color: var(normal-foreground);
}
entry {
text-color: var(normal-foreground);
spacing: 0;
placeholder-color: rgba ( 128, 128, 128, 100 % );
placeholder: "Type to filter";
}
prompt {
spacing: 0;
text-color: var(normal-foreground);
}
textbox-prompt-colon {
margin: 0px 0.3000em 0.0000em 0.0000em ;
expand: false;
str: ":";
text-color: inherit;
}
mode-switcher {
border: 0px ;
}

View File

@@ -0,0 +1,34 @@
#!/usr/bin/env bash
#PUT THIS FILE IN ~/.local/share/rofi/finder.sh
#USE: rofi -show find -modi find:~/.local/share/rofi/finder.sh
if [ ! -z "$@" ]; then
QUERY=$@
if [[ "$@" == /* ]]; then
if [[ "$@" == *\?\? ]]; then
coproc (xdg-open "${QUERY%\/* \?\?}" >/dev/null 2>&1)
exec 1>&-
exit
else
coproc (xdg-open "$@" >/dev/null 2>&1)
exec 1>&-
exit
fi
elif [[ "$@" == \!\!* ]]; then
echo "!!-- Type your search query to find files"
echo "!!-- To search again type !<search_query>"
echo "!!-- To search parent directories type ?<search_query>"
echo "!!-- You can print this help by typing !!"
elif [[ "$@" == \?* ]]; then
while read -r line; do
echo "$line" \?\?
done <<<$(fd -t file "${QUERY#\?}" $HOME/Documents 2>&1 | grep -v 'Permission denied\|Input/output error')
else
fd -t file "${QUERY#!}" $HOME/Documents 2>&1 | grep -v 'Permission denied\|Input/output error'
fi
else
echo "!!-- Type your search query to find files"
echo "!!-- To seach again type !<search_query>"
echo "!!-- To seach parent directories type ?<search_query>"
echo "!!-- You can print this help by typing !!"
fi

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,4 +1,4 @@
#!/bin/sh
echo "use flake" >.envrc
echo "use nix" >.envrc
direnv allow

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 +0,0 @@
#!/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}" |
rofi -threads 0 -dmenu -sort -sorting-method fzf -i -p "find")"

View File

@@ -1,14 +0,0 @@
#!/bin/sh
ACCOUNT="$1"
if [ $# -lt 1 ]; then
ACCOUNT="-a"
fi
mbsync "$ACCOUNT"
if pgrep -f 'mu server'; then
emacsclient -e '(mu4e-update-index)'
else
mu index --lazy-check
fi

View File

@@ -1,419 +0,0 @@
#!/usr/bin/env python3
#
# Mutt OAuth2 token management script, version 2020-08-07
# Written against python 3.7.3, not tried with earlier python versions.
#
# Copyright (C) 2020 Alexander Perlis
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
'''Mutt OAuth2 token management'''
import sys
import json
import argparse
import urllib.parse
import urllib.request
import imaplib
import poplib
import smtplib
import base64
import secrets
import hashlib
import time
from datetime import timedelta, datetime
from pathlib import Path
import socket
import http.server
import subprocess
# The token file must be encrypted because it contains multi-use bearer tokens
# whose usage does not require additional verification. Specify whichever
# encryption and decryption pipes you prefer. They should read from standard
# input and write to standard output. The example values here invoke GPG,
# although won't work until an appropriate identity appears in the first line.
ENCRYPTION_PIPE = ['gpg', '--encrypt', '--recipient', '9893DA236405AF57']
DECRYPTION_PIPE = ['gpg', '--decrypt']
registrations = {
'google': {
'authorize_endpoint': 'https://accounts.google.com/o/oauth2/auth',
'devicecode_endpoint': 'https://oauth2.googleapis.com/device/code',
'token_endpoint': 'https://accounts.google.com/o/oauth2/token',
'redirect_uri': 'urn:ietf:wg:oauth:2.0:oob',
'imap_endpoint': 'imap.gmail.com',
'pop_endpoint': 'pop.gmail.com',
'smtp_endpoint': 'smtp.gmail.com',
'sasl_method': 'OAUTHBEARER',
'scope': 'https://mail.google.com/',
'client_id': '',
'client_secret': '',
},
'microsoft': {
'authorize_endpoint': 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
'devicecode_endpoint': 'https://login.microsoftonline.com/common/oauth2/v2.0/devicecode',
'token_endpoint': 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
'redirect_uri': 'https://login.microsoftonline.com/common/oauth2/nativeclient',
'tenant': 'common',
'imap_endpoint': 'outlook.office365.com',
'pop_endpoint': 'outlook.office365.com',
'smtp_endpoint': 'smtp.office365.com',
'sasl_method': 'XOAUTH2',
'scope': ('offline_access https://outlook.office.com/IMAP.AccessAsUser.All '
'https://outlook.office.com/POP.AccessAsUser.All '
'https://outlook.office.com/SMTP.Send'),
'client_id': '08162f7c-0fd2-4200-a84a-f25a4db0b584',
'client_secret': 'TxRBilcHdC6WGBee]fs?QR:SJ8nI[g82',
},
}
ap = argparse.ArgumentParser(epilog='''
This script obtains and prints a valid OAuth2 access token. State is maintained in an
encrypted TOKENFILE. Run with "--verbose --authorize" to get started or whenever all
tokens have expired, optionally with "--authflow" to override the default authorization
flow. To truly start over from scratch, first delete TOKENFILE. Use "--verbose --test"
to test the IMAP/POP/SMTP endpoints.
''')
ap.add_argument('-v', '--verbose', action='store_true', help='increase verbosity')
ap.add_argument('-d', '--debug', action='store_true', help='enable debug output')
ap.add_argument('tokenfile', help='persistent token storage')
ap.add_argument('-a', '--authorize', action='store_true', help='manually authorize new tokens')
ap.add_argument('--authflow', help='authcode | localhostauthcode | devicecode')
ap.add_argument('-t', '--test', action='store_true', help='test IMAP/POP/SMTP endpoints')
args = ap.parse_args()
token = {}
path = Path(args.tokenfile)
if path.exists():
if 0o777 & path.stat().st_mode != 0o600:
sys.exit('Token file has unsafe mode. Suggest deleting and starting over.')
try:
sub = subprocess.run(DECRYPTION_PIPE, check=True, input=path.read_bytes(),
capture_output=True)
token = json.loads(sub.stdout)
except subprocess.CalledProcessError:
sys.exit('Difficulty decrypting token file. Is your decryption agent primed for '
'non-interactive usage, or an appropriate environment variable such as '
'GPG_TTY set to allow interactive agent usage from inside a pipe?')
def writetokenfile():
'''Writes global token dictionary into token file.'''
if not path.exists():
path.touch(mode=0o600)
if 0o777 & path.stat().st_mode != 0o600:
sys.exit('Token file has unsafe mode. Suggest deleting and starting over.')
sub2 = subprocess.run(ENCRYPTION_PIPE, check=True, input=json.dumps(token).encode(),
capture_output=True)
path.write_bytes(sub2.stdout)
if args.debug:
print('Obtained from token file:', json.dumps(token))
if not token:
if not args.authorize:
sys.exit('You must run script with "--authorize" at least once.')
print('Available app and endpoint registrations:', *registrations)
token['registration'] = input('OAuth2 registration: ')
token['authflow'] = input('Preferred OAuth2 flow ("authcode" or "localhostauthcode" '
'or "devicecode"): ')
token['email'] = input('Account e-mail address: ')
token['access_token'] = ''
token['access_token_expiration'] = ''
token['refresh_token'] = ''
writetokenfile()
if token['registration'] not in registrations:
sys.exit(f'ERROR: Unknown registration "{token["registration"]}". Delete token file '
f'and start over.')
registration = registrations[token['registration']]
authflow = token['authflow']
if args.authflow:
authflow = args.authflow
baseparams = {'client_id': registration['client_id']}
# Microsoft uses 'tenant' but Google does not
if 'tenant' in registration:
baseparams['tenant'] = registration['tenant']
def access_token_valid():
'''Returns True when stored access token exists and is still valid at this time.'''
token_exp = token['access_token_expiration']
return token_exp and datetime.now() < datetime.fromisoformat(token_exp)
def update_tokens(r):
'''Takes a response dictionary, extracts tokens out of it, and updates token file.'''
token['access_token'] = r['access_token']
token['access_token_expiration'] = (datetime.now() +
timedelta(seconds=int(r['expires_in']))).isoformat()
if 'refresh_token' in r:
token['refresh_token'] = r['refresh_token']
writetokenfile()
if args.verbose:
print(f'NOTICE: Obtained new access token, expires {token["access_token_expiration"]}.')
if args.authorize:
p = baseparams.copy()
p['scope'] = registration['scope']
if authflow in ('authcode', 'localhostauthcode'):
verifier = secrets.token_urlsafe(90)
challenge = base64.urlsafe_b64encode(hashlib.sha256(verifier.encode()).digest())[:-1]
redirect_uri = registration['redirect_uri']
listen_port = 0
if authflow == 'localhostauthcode':
# Find an available port to listen on
s = socket.socket()
s.bind(('127.0.0.1', 0))
listen_port = s.getsockname()[1]
s.close()
redirect_uri = 'http://localhost:'+str(listen_port)+'/'
# Probably should edit the port number into the actual redirect URL.
p.update({'login_hint': token['email'],
'response_type': 'code',
'redirect_uri': redirect_uri,
'code_challenge': challenge,
'code_challenge_method': 'S256'})
print(registration["authorize_endpoint"] + '?' +
urllib.parse.urlencode(p, quote_via=urllib.parse.quote))
authcode = ''
if authflow == 'authcode':
authcode = input('Visit displayed URL to retrieve authorization code. Enter '
'code from server (might be in browser address bar): ')
else:
print('Visit displayed URL to authorize this application. Waiting...',
end='', flush=True)
class MyHandler(http.server.BaseHTTPRequestHandler):
'''Handles the browser query resulting from redirect to redirect_uri.'''
# pylint: disable=C0103
def do_HEAD(self):
'''Response to a HEAD requests.'''
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
'''For GET request, extract code parameter from URL.'''
# pylint: disable=W0603
global authcode
querystring = urllib.parse.urlparse(self.path).query
querydict = urllib.parse.parse_qs(querystring)
if 'code' in querydict:
authcode = querydict['code'][0]
self.do_HEAD()
self.wfile.write(b'<html><head><title>Authorizaton result</title></head>')
self.wfile.write(b'<body><p>Authorization redirect completed. You may '
b'close this window.</p></body></html>')
with http.server.HTTPServer(('127.0.0.1', listen_port), MyHandler) as httpd:
try:
httpd.handle_request()
except KeyboardInterrupt:
pass
if not authcode:
sys.exit('Did not obtain an authcode.')
for k in 'response_type', 'login_hint', 'code_challenge', 'code_challenge_method':
del p[k]
p.update({'grant_type': 'authorization_code',
'code': authcode,
'client_secret': registration['client_secret'],
'code_verifier': verifier})
try:
response = urllib.request.urlopen(registration['token_endpoint'],
urllib.parse.urlencode(p).encode())
except urllib.error.HTTPError as err:
print(err.code, err.reason)
response = err
response = response.read()
if args.debug:
print(response)
response = json.loads(response)
if 'error' in response:
print(response['error'])
if 'error_description' in response:
print(response['error_description'])
sys.exit(1)
elif authflow == 'devicecode':
try:
response = urllib.request.urlopen(registration['devicecode_endpoint'],
urllib.parse.urlencode(p).encode())
except urllib.error.HTTPError as err:
print(err.code, err.reason)
response = err
response = response.read()
if args.debug:
print(response)
response = json.loads(response)
if 'error' in response:
print(response['error'])
if 'error_description' in response:
print(response['error_description'])
sys.exit(1)
print(response['message'])
del p['scope']
p.update({'grant_type': 'urn:ietf:params:oauth:grant-type:device_code',
'client_secret': registration['client_secret'],
'device_code': response['device_code']})
interval = int(response['interval'])
print('Polling...', end='', flush=True)
while True:
time.sleep(interval)
print('.', end='', flush=True)
try:
response = urllib.request.urlopen(registration['token_endpoint'],
urllib.parse.urlencode(p).encode())
except urllib.error.HTTPError as err:
# Not actually always an error, might just mean "keep trying..."
response = err
response = response.read()
if args.debug:
print(response)
response = json.loads(response)
if 'error' not in response:
break
if response['error'] == 'authorization_declined':
print(' user declined authorization.')
sys.exit(1)
if response['error'] == 'expired_token':
print(' too much time has elapsed.')
sys.exit(1)
if response['error'] != 'authorization_pending':
print(response['error'])
if 'error_description' in response:
print(response['error_description'])
sys.exit(1)
print()
else:
sys.exit(f'ERROR: Unknown OAuth2 flow "{token["authflow"]}. Delete token file and '
f'start over.')
update_tokens(response)
if not access_token_valid():
if args.verbose:
print('NOTICE: Invalid or expired access token; using refresh token '
'to obtain new access token.')
if not token['refresh_token']:
sys.exit('ERROR: No refresh token. Run script with "--authorize".')
p = baseparams.copy()
p.update({'client_secret': registration['client_secret'],
'refresh_token': token['refresh_token'],
'grant_type': 'refresh_token'})
try:
response = urllib.request.urlopen(registration['token_endpoint'],
urllib.parse.urlencode(p).encode())
except urllib.error.HTTPError as err:
print(err.code, err.reason)
response = err
response = response.read()
if args.debug:
print(response)
response = json.loads(response)
if 'error' in response:
print(response['error'])
if 'error_description' in response:
print(response['error_description'])
print('Perhaps refresh token invalid. Try running once with "--authorize"')
sys.exit(1)
update_tokens(response)
if not access_token_valid():
sys.exit('ERROR: No valid access token. This should not be able to happen.')
if args.verbose:
print('Access Token: ', end='')
print(token['access_token'])
def build_sasl_string(user, host, port, bearer_token):
'''Build appropriate SASL string, which depends on cloud server's supported SASL method.'''
if registration['sasl_method'] == 'OAUTHBEARER':
return f'n,a={user},\1host={host}\1port={port}\1auth=Bearer {bearer_token}\1\1'
if registration['sasl_method'] == 'XOAUTH2':
return f'user={user}\1auth=Bearer {bearer_token}\1\1'
sys.exit(f'Unknown SASL method {registration["sasl_method"]}.')
if args.test:
errors = False
imap_conn = imaplib.IMAP4_SSL(registration['imap_endpoint'])
sasl_string = build_sasl_string(token['email'], registration['imap_endpoint'], 993,
token['access_token'])
if args.debug:
imap_conn.debug = 4
try:
imap_conn.authenticate(registration['sasl_method'], lambda _: sasl_string.encode())
# Microsoft has a bug wherein a mismatch between username and token can still report a
# successful login... (Try a consumer login with the token from a work/school account.)
# Fortunately subsequent commands fail with an error. Thus we follow AUTH with another
# IMAP command before reporting success.
imap_conn.list()
if args.verbose:
print('IMAP authentication succeeded')
except imaplib.IMAP4.error as e:
print('IMAP authentication FAILED (does your account allow IMAP?):', e)
errors = True
pop_conn = poplib.POP3_SSL(registration['pop_endpoint'])
sasl_string = build_sasl_string(token['email'], registration['pop_endpoint'], 995,
token['access_token'])
if args.debug:
pop_conn.set_debuglevel(2)
try:
# poplib doesn't have an auth command taking an authenticator object
# Microsoft requires a two-line SASL for POP
# pylint: disable=W0212
pop_conn._shortcmd('AUTH ' + registration['sasl_method'])
pop_conn._shortcmd(base64.standard_b64encode(sasl_string.encode()).decode())
if args.verbose:
print('POP authentication succeeded')
except poplib.error_proto as e:
print('POP authentication FAILED (does your account allow POP?):', e.args[0].decode())
errors = True
# SMTP_SSL would be simpler but Microsoft does not answer on port 465.
smtp_conn = smtplib.SMTP(registration['smtp_endpoint'], 587)
sasl_string = build_sasl_string(token['email'], registration['smtp_endpoint'], 587,
token['access_token'])
smtp_conn.ehlo('test')
smtp_conn.starttls()
smtp_conn.ehlo('test')
if args.debug:
smtp_conn.set_debuglevel(2)
try:
smtp_conn.auth(registration['sasl_method'], lambda _=None: sasl_string)
if args.verbose:
print('SMTP authentication succeeded')
except smtplib.SMTPAuthenticationError as e:
print('SMTP authentication FAILED:', e)
errors = True
if errors:
sys.exit(1)

View File

@@ -1,12 +0,0 @@
#!/bin/sh
emacs_pid=$(pidof emacs)
if [ -z "$emacs_pid" ]; then
echo ""
exit 0
fi
CLOCK_STATUS=$(emacsclient --eval "(bergheim/org-clock-status)" 2>/dev/null)
echo "${CLOCK_STATUS:1:-1}"

View File

@@ -2,35 +2,7 @@
directory=/tmp/webtorrent
player=mpv
data_file=$HOME/Documents/Misc/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:]]*$//')
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")
}
increment_episode() {
next_episode=$((episode + 1))
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"
read -rp "File number: " nr
webtorrent download "$@" -s "$nr" -o "$directory" --"$player"
else
increment_episode
webtorrent download "$@" -s "$episode" -o "$directory" --"$player"
fi
webtorrent download "$1" -s -o "$directory" --"$player"
read -rp "File number: " nr
webtorrent download "$@" -s "$nr" -o "$directory" --"$player"

View File

@@ -1,16 +0,0 @@
#!/bin/sh
usage() {
echo "Usage: power-manager <operation>"
echo "operation: poweroff|reboot"
}
if [ $# -lt 1 ]; then
usage
exit 1
fi
operation=$1
emacsclient --eval '(doom/save-session "~/.emacs.d/.local/etc/workspaces/autosave")'
systemctl "$operation"

View File

@@ -1,21 +0,0 @@
#!/usr/bin/env bash
select_action() {
action_content=(
"Shutdown"
"Reboot"
"Suspend"
)
action=$(printf '%s\n' "${action_content[@]}" | rofi -no-auto-select -i "$@" -dmenu -p "Choose an action")
execute_action "$action"
}
execute_action() {
case "$1" in
"Shutdown") ~/.local/share/scripts/power-manager "poweroff" ;;
"Reboot") ~/.local/share/scripts/power-manager "reboot" ;;
"Suspend") systemctl suspend -i ;;
esac
}
select_action "$@"

View File

@@ -1,94 +0,0 @@
#!/bin/sh
usage() {
echo "Usage: project-init <type>"
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
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 .
fi
}
git_initialization() {
git init
git add ./*
git commit -m "Initial commit"
}
direnv_integration() {
if [ "$1" = "flake" ]; then
echo "use flake" >.envrc
else
echo "use nix" >.envrc
fi
direnv allow
}
create_dir() {
if [ ! -d "$1" ]; then
mkdir "$1"
fi
}
if [ $# != 1 ]; then
usage
fi
type=$1
if [ "$type" = "git" ]; then
copy_nix_files "nix"
create_dir data
create_dir src
git_initialization
direnv_integration "nix"
elif [ "$type" = "remote-git" ]; then
touch README.org
cp ~/Projects/devenv/LICENSE.md LICENSE.md
copy_nix_files "flake"
create_dir data
create_dir src
git_initialization
direnv_integration "flake"
elif [ "$type" = "doc" ]; then
create_dir assets
touch Report.org
touch .project
elif [ "$type" = "src" ]; then
copy_nix_files "nix"
create_dir data
create_dir src
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,12 +0,0 @@
#!/bin/sh
pulsemixer $(\
pulsemixer --list-sources |\
grep Default |\
awk -v args="$args" '{
gsub(/,$/,"",$3);
cmdargs = cmdargs"--id "$3" "args" "
} END {
print cmdargs
}'
) --toggle-mute

View File

@@ -1,33 +0,0 @@
#!/usr/bin/env bash
select_action() {
action_content=(
"System resources usage"
"Connectivity test"
"Reload doom emacs"
"Sync mail"
"Restart Waybar"
)
action=$(printf '%s\n' "${action_content[@]}" | rofi -no-auto-select -i "$@" -dmenu -p "Choose an action")
execute_action "$action"
}
launch_kitty() {
bash -c "kitty --class popup -- $1"
}
execute_command() {
bash -c "$1"
}
execute_action() {
case "$1" in
"System resources usage") launch_kitty "htop" ;;
"Connectivity test") launch_kitty "ping -c 2 freebsd.org" ;;
"Reload doom emacs") execute_command "$HOME/.emacs.d/bin/doom sync" ;;
"Sync mail") execute_command "/home/coolneng/.local/share/scripts/mail-sync -a" ;;
"Restart Waybar") execute_command "pkill waybar; waybar &" ;;
esac
}
select_action "$@"

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,7 +1,7 @@
#!/bin/sh
if [ $# -lt 2 ]; then
echo "Usage: subject <subject name> <subject type>"
echo "Usage: subject.sh <subject name> <subject type>"
echo "subject type 0: programming"
echo "subject type 1: no programming"
exit 1
@@ -10,11 +10,11 @@ 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
if [ "$type" -eq 0 ]; then
mkdir -p "$formatted_name"/Code
mkdir -p "$name"/Code
mkdir -p "$name"/TP
mkdir -p "$name"/Exos
else
mkdir -p "$name"/TP
mkdir -p "$name"/Exos
fi

View File

@@ -1,50 +0,0 @@
#!/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" "é"
}
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>"
}
recolor_zathura() {
instances=$(pgrep -f zathura)
temp_file=/tmp/zathura-instances
echo "$instances" >"$temp_file"
while IFS= read -r line; do
dbus-send --type="method_call" --dest=org.pwmt.zathura.PID-"$line" \
/org/pwmt/zathura org.pwmt.zathura.ExecuteCommand string:"source"
done <"$temp_file"
}
if [ $# -lt 1 ]; then
echo "Usage: switch_theme <mode>"
echo "mode: dark|light"
exit 1
fi
mode=$1
if [ "$mode" = "light" ]; then
emacsclient --eval "(load-theme 'os1 'no-confirm)"
change_theme "$DARK_THEME" "$LIGHT_THEME"
recolor_zathura
else
emacsclient --eval "(load-theme 'doom-one 'no-confirm)"
change_theme "$LIGHT_THEME" "$DARK_THEME"
recolor_zathura
fi

View File

@@ -1,27 +0,0 @@
#!/usr/bin/env bash
select_action() {
action_content=(
"local"
"zion"
"hpc"
"kermit-gpu"
)
action=$(printf '%s\n' "${action_content[@]}" | rofi -no-auto-select -i "$@" -dmenu -p "Choose a session")
execute_action "$action"
}
launch_session() {
bash -c "tmuxp load ~/.tmuxp/$1.yaml"
}
execute_action() {
case "$1" in
"local") launch_session "local" ;;
"zion") launch_session "zion" ;;
"hpc") launch_session "hpc" ;;
"kermit-gpu") launch_session "kermit-gpu" ;;
esac
}
select_action "$@"

View File

@@ -1,4 +0,0 @@
#!/bin/sh
git config user.name "akasroua"
git config user.email "amin.kasrouaouam@ugent.be"

View File

@@ -1,6 +0,0 @@
#!/bin/sh
git fetch upstream
git checkout master
git rebase upstream/master
git push -f origin master

View File

@@ -1,27 +1,23 @@
host zion
user coolneng
hostname 192.168.128.2
hostname 10.8.0.1
port 22
identityfile ~/.ssh/zion
host eu.nixbuild.net
pubkeyacceptedkeytypes ssh-ed25519
identityfile ~/.ssh/nixbuild
host hpc
user vsc44348
hostname login.hpc.ugent.be
port 22
identityfile ~/.ssh/id_ed25519
host kobo
host localhost
user root
hostname 192.168.13.20
hostname localhost
port 22
identityfile ~/.ssh/kobo
identityfile ~/.ssh/localhost
host kathreftis
user root
hostname 192.168.13.131
host prodyfo
user ec2-user
hostname ec2-52-47-172-241.eu-west-3.compute.amazonaws.com
port 22
identityfile ~/.ssh/kathreftis
identityfile ~/.ssh/odyfo
host devyfo
user ec2-user
hostname ec2-35-181-115-141.eu-west-3.compute.amazonaws.com
port 22
identityfile ~/.ssh/odyfo

Some files were not shown because too many files have changed in this diff Show More