Compare commits
1 Commits
master
...
e801bfc4a2
| Author | SHA1 | Date | |
|---|---|---|---|
|
e801bfc4a2
|
4
.git-crypt/.gitattributes
vendored
4
.git-crypt/.gitattributes
vendored
@@ -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
|
||||
Binary file not shown.
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -1,2 +0,0 @@
|
||||
ssh/.ssh/** filter=git-crypt diff=git-crypt
|
||||
ssh/.ssh/config !filter !diff
|
||||
13
.gitignore
vendored
13
.gitignore
vendored
@@ -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/
|
||||
|
||||
@@ -19,7 +19,7 @@ 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 */
|
||||
|
||||
@@ -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.
@@ -1,2 +0,0 @@
|
||||
[MIME Cache]
|
||||
x-scheme-handler/org-protocol=org-protocol.desktop;
|
||||
@@ -1,7 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Name=org-protocol
|
||||
Exec=emacsclient %u
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Categories=System;
|
||||
MimeType=x-scheme-handler/org-protocol;
|
||||
@@ -1 +0,0 @@
|
||||
source /run/current-system/sw/share/nix-direnv/direnvrc
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -6,20 +6,30 @@ set -g man_standout -o blue
|
||||
set -g man_bold -o magenta
|
||||
|
||||
# Aliases
|
||||
alias f "fff"
|
||||
alias bc "bc -l"
|
||||
alias vim "nvim"
|
||||
alias docker-compose "podman-compose"
|
||||
alias sc "systemctl"
|
||||
alias scu "systemctl --user"
|
||||
alias jc "journalctl -eu"
|
||||
alias jcu "journalctl --user -eu"
|
||||
alias webtorrent "webtorrent -i -o /tmp/webtorrent --mpv --player-args='--sub-auto=all --sub-file-paths=Subs:subs'"
|
||||
alias ns "nix-shell -p"
|
||||
alias tmpdir "cd $(mktemp -d)"
|
||||
|
||||
# Additional paths
|
||||
set PATH $PATH $HOME/.emacs.d/bin
|
||||
set PATH $PATH $HOME/.local/share/scripts
|
||||
|
||||
# fff settings
|
||||
## colors [0-9]
|
||||
set -x FFF_COL1 4
|
||||
set -x FFF_COL2 8
|
||||
# favourites
|
||||
set -x FFF_FAV1 $HOME/Documents/Uni
|
||||
set -x FFF_FAV2 $HOME/Documents/Papers
|
||||
set -x FFF_FAV3 $HOME/Documents/Books/Academic
|
||||
set -x FFF_FAV4 $HOME/Documents/Education
|
||||
# keybindings
|
||||
set -x FFF_KEY_MOVE off
|
||||
set -x FFF_KEY_MOVE_ALL off
|
||||
|
||||
|
||||
# Set up direnv
|
||||
eval (direnv hook fish)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -4,10 +4,7 @@ CMakeFiles/
|
||||
cmake_install.cmake
|
||||
compile_commands.json
|
||||
Debug/
|
||||
.ccls
|
||||
.ccls-cache
|
||||
.cache
|
||||
.clang_complete
|
||||
*.o
|
||||
# LaTeX
|
||||
auto
|
||||
@@ -15,13 +12,14 @@ auto
|
||||
# Misc
|
||||
.*.swp
|
||||
.#*
|
||||
*.*lock
|
||||
*.log
|
||||
.DS_Store
|
||||
# Python
|
||||
.mypy_cache
|
||||
__pycache__
|
||||
.ipynb_checkpoints
|
||||
.venv
|
||||
# Emacs
|
||||
.dir-locals.el
|
||||
# Dev environment with Nix
|
||||
.envrc
|
||||
.direnv
|
||||
@@ -34,7 +32,3 @@ __pycache__
|
||||
.classpath
|
||||
.project
|
||||
.settings
|
||||
# Emacs
|
||||
.projectile-cache.eld
|
||||
# Platformio
|
||||
.pio
|
||||
|
||||
@@ -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
|
||||
@@ -8,5 +8,6 @@ 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
|
||||
|
||||
15
imapnotify/.config/imapnotify/gmail.js
Normal file
15
imapnotify/.config/imapnotify/gmail.js
Normal 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"];
|
||||
15
imapnotify/.config/imapnotify/uni.js
Normal file
15
imapnotify/.config/imapnotify/uni.js
Normal 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"];
|
||||
@@ -1,26 +1,18 @@
|
||||
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
|
||||
exec pkill Xwayland
|
||||
}
|
||||
|
||||
39
kitty/.config/kitty/iceberg_dark.conf
Normal file
39
kitty/.config/kitty/iceberg_dark.conf
Normal file
@@ -0,0 +1,39 @@
|
||||
background #161821
|
||||
foreground #c6c8d1
|
||||
|
||||
selection_background #1e2132
|
||||
selection_foreground #c6c8d1
|
||||
|
||||
cursor #d2d4de
|
||||
|
||||
# black
|
||||
color0 #161821
|
||||
color8 #6b7089
|
||||
|
||||
# red
|
||||
color1 #e27878
|
||||
color9 #e98989
|
||||
|
||||
# green
|
||||
color2 #b4be82
|
||||
color10 #c0ca8e
|
||||
|
||||
# yellow/orange
|
||||
color3 #e2a478
|
||||
color11 #e9b189
|
||||
|
||||
# blue
|
||||
color4 #84a0c6
|
||||
color12 #91acd1
|
||||
|
||||
# magenta/purple
|
||||
color5 #a093c7
|
||||
color13 #ada0d3
|
||||
|
||||
# cyan
|
||||
color6 #89b8c2
|
||||
color14 #95c4ce
|
||||
|
||||
# white
|
||||
color7 #c6c8d1
|
||||
color15 #d2d4de
|
||||
40
kitty/.config/kitty/iceberg_light.conf
Normal file
40
kitty/.config/kitty/iceberg_light.conf
Normal file
@@ -0,0 +1,40 @@
|
||||
background #e8e9ec
|
||||
foreground #33374c
|
||||
|
||||
selection_background #d2d4dd
|
||||
selection_foreground #33374c
|
||||
|
||||
cursor #33374c
|
||||
cursor_text_color #e8e9ec
|
||||
|
||||
# black
|
||||
color0 #dcdfe7
|
||||
color8 #8389a3
|
||||
|
||||
# red
|
||||
color1 #cc517a
|
||||
color9 #cc3768
|
||||
|
||||
# green
|
||||
color2 #668e3d
|
||||
color10 #598030
|
||||
|
||||
# yellow/orange
|
||||
color3 #c57339
|
||||
color11 #b6662d
|
||||
|
||||
# blue
|
||||
color4 #2d539e
|
||||
color12 #22478e
|
||||
|
||||
# magenta/purple
|
||||
color5 #7759b4
|
||||
color13 #6845ad
|
||||
|
||||
# cyan
|
||||
color6 #3f83a6
|
||||
color14 #327698
|
||||
|
||||
# white
|
||||
color7 #33374c
|
||||
color15 #262a3f
|
||||
@@ -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,8 @@ inactive_tab_font_style normal
|
||||
|
||||
#: Color scheme {{{
|
||||
|
||||
include iceberg_dark.conf
|
||||
|
||||
#: The foreground and background colors
|
||||
|
||||
background_opacity 1.0
|
||||
@@ -574,7 +583,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 +999,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
|
||||
|
||||
127
mbsync/.mbsyncrc
127
mbsync/.mbsyncrc
@@ -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,7 +13,7 @@ MaildirStore gmail-local
|
||||
Subfolders Verbatim
|
||||
# The trailing "/" is important
|
||||
Path ~/.mail/gmail/
|
||||
Inbox ~/.mail/gmail/inbox/
|
||||
Inbox ~/.mail/gmail/Inbox/
|
||||
|
||||
Channel sync-gmail-default
|
||||
Far :gmail-remote:
|
||||
@@ -47,129 +46,65 @@ Create Both
|
||||
Expunge Both
|
||||
SyncState *
|
||||
|
||||
Channel sync-gmail-archive
|
||||
Far :gmail-remote:"[Gmail]/All Mail"
|
||||
Near :gmail-local:archive
|
||||
Create Both
|
||||
Expunge Both
|
||||
SyncState *
|
||||
|
||||
# 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
|
||||
IMAPAccount uni
|
||||
Host correo.ugr.es
|
||||
User akasroua
|
||||
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 sync-disroot-default
|
||||
Far :disroot-remote:
|
||||
Near :disroot-local:
|
||||
Channel uni-default
|
||||
Far :uni-remote:
|
||||
Near :uni-local:
|
||||
Create Both
|
||||
Expunge Both
|
||||
SyncState *
|
||||
|
||||
|
||||
Channel sync-disroot-sent
|
||||
Far :disroot-remote:"Sent"
|
||||
Near :disroot-local:sent
|
||||
Channel uni-sent
|
||||
Far :uni-remote:"Sent"
|
||||
Near :uni-local:sent
|
||||
Create Both
|
||||
Expunge Both
|
||||
SyncState *
|
||||
|
||||
|
||||
Channel sync-disroot-trash
|
||||
Far :disroot-remote:"Trash"
|
||||
Near :disroot-local:trash
|
||||
Channel uni-trash
|
||||
Far :uni-remote:"Trash"
|
||||
Near :uni-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
|
||||
Channel uni-archive
|
||||
Far :uni-remote:"BUZONdeEntradaUGR"
|
||||
Near :uni-local:archive
|
||||
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
|
||||
# Get all the channels together into a group.
|
||||
Group uni
|
||||
Channel uni-default
|
||||
Channel uni-sent
|
||||
Channel uni-trash
|
||||
Channel uni-archive
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
https://icecast.radiofrance.fr/fip-hifi.aac
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -1 +1,2 @@
|
||||
http://ice5.securenetsystems.net/KCSM
|
||||
http://ice7.securenetsystems.net/KCSM2
|
||||
|
||||
15
mpd/.config/mpd/playlists/Metaphorical Music.m3u
Normal file
15
mpd/.config/mpd/playlists/Metaphorical Music.m3u
Normal 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
|
||||
14
mpd/.config/mpd/playlists/Modal Soul.m3u
Normal file
14
mpd/.config/mpd/playlists/Modal Soul.m3u
Normal 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
|
||||
1
mpd/.config/mpd/playlists/Nightwave Plaza.m3u
Normal file
1
mpd/.config/mpd/playlists/Nightwave Plaza.m3u
Normal file
@@ -0,0 +1 @@
|
||||
http://radio.plaza.one/mp3
|
||||
2
mpd/.config/mpd/playlists/Radio Nova.m3u
Normal file
2
mpd/.config/mpd/playlists/Radio Nova.m3u
Normal file
@@ -0,0 +1,2 @@
|
||||
http://novazz.ice.infomaniak.ch/novazz-128.mp3
|
||||
http://novazz.ice.infomaniak.net/novazz-128.mp3
|
||||
1
mpd/.config/mpd/playlists/Radio Nova: La Nuit.m3u
Normal file
1
mpd/.config/mpd/playlists/Radio Nova: La Nuit.m3u
Normal file
@@ -0,0 +1 @@
|
||||
http://nova-ln.ice.infomaniak.ch/nova-ln-128.mp3
|
||||
@@ -1 +0,0 @@
|
||||
https://stream.radioparadise.com/flac
|
||||
14
mpd/.config/mpd/playlists/Spiritual State.m3u
Normal file
14
mpd/.config/mpd/playlists/Spiritual State.m3u
Normal 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
|
||||
@@ -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"
|
||||
|
||||
@@ -1,8 +1,3 @@
|
||||
## 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
|
||||
|
||||
@@ -1,25 +1,16 @@
|
||||
## Subtitle settings
|
||||
sub-font-size=30
|
||||
sub-font-size=26
|
||||
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
|
||||
|
||||
@@ -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"
|
||||
|
||||
24
neomutt/.config/neomutt/accounts/gmail.muttrc
Normal file
24
neomutt/.config/neomutt/accounts/gmail.muttrc
Normal file
@@ -0,0 +1,24 @@
|
||||
# vim: filetype=neomuttrc
|
||||
# muttrc file for account gmail
|
||||
set realname = "Amin Kasrou Aouam"
|
||||
set from = "akasroua@gmail.com"
|
||||
set sendmail = "~/.config/neomutt/etc/sendmail gmail"
|
||||
set folder = "~/.mail/gmail"
|
||||
|
||||
set mbox_type = Maildir
|
||||
set ssl_starttls = yes
|
||||
set ssl_force_tls = yes
|
||||
|
||||
bind index,pager gg noop
|
||||
bind index,pager g noop
|
||||
bind index gg first-entry
|
||||
unmailboxes *
|
||||
mailboxes =junk =Inbox =trash =sent
|
||||
macro index,pager gi "<change-folder>=Inbox<enter>" "Go to inbox."
|
||||
macro index,pager gs "<change-folder>=sent<enter>" "Go to sent."
|
||||
macro index,pager gt "<change-folder>=trash<enter>" "Go to trash."
|
||||
macro index,pager gj "<change-folder>=junk<enter>" "Go to spam."
|
||||
set spoolfile = "+Inbox"
|
||||
set record = "+sent"
|
||||
set postponed = ""
|
||||
set trash = "+trash"
|
||||
24
neomutt/.config/neomutt/accounts/uni.muttrc
Normal file
24
neomutt/.config/neomutt/accounts/uni.muttrc
Normal file
@@ -0,0 +1,24 @@
|
||||
# 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 mbox_type = Maildir
|
||||
set ssl_starttls = yes
|
||||
set ssl_force_tls = yes
|
||||
|
||||
bind index,pager gg noop
|
||||
bind index,pager g noop
|
||||
bind index gg first-entry
|
||||
unmailboxes *
|
||||
mailboxes =INBOX =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"
|
||||
66
neomutt/.config/neomutt/colors.muttrc
Normal file
66
neomutt/.config/neomutt/colors.muttrc
Normal file
@@ -0,0 +1,66 @@
|
||||
# Header colors:
|
||||
color header blue default ".*"
|
||||
color header brightmagenta default "^(From)"
|
||||
color header brightcyan default "^(Subject)"
|
||||
color header brightwhite default "^(CC|BCC)"
|
||||
|
||||
mono bold bold
|
||||
mono underline underline
|
||||
mono indicator reverse
|
||||
mono error bold
|
||||
color normal default default
|
||||
color indicator brightmagenta default # currently selected message. default makes bar clear, disabled arrow to save space.
|
||||
color sidebar_highlight red default
|
||||
color sidebar_divider brightblack black
|
||||
color sidebar_flagged red black
|
||||
color sidebar_new green black
|
||||
color normal brightyellow default
|
||||
color error red default
|
||||
color tilde black default
|
||||
color message cyan default
|
||||
color markers red white
|
||||
color attachment white default
|
||||
color search brightmagenta default
|
||||
color status magenta black
|
||||
color hdrdefault brightgreen default
|
||||
color quoted green default
|
||||
color quoted1 blue default
|
||||
color quoted2 cyan default
|
||||
color quoted3 yellow default
|
||||
color quoted4 red default
|
||||
color quoted5 brightred default
|
||||
color signature brightgreen default
|
||||
color bold black default
|
||||
color underline black default
|
||||
color normal default default
|
||||
|
||||
color body brightblue default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
|
||||
color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
|
||||
color body green default "\`[^\`]*\`" # Green text between ` and `
|
||||
color body brightblue default "^# \.*" # Headings as bold blue
|
||||
color body brightcyan default "^## \.*" # Subheadings as bold cyan
|
||||
color body brightgreen default "^### \.*" # Subsubheadings as bold green
|
||||
color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow
|
||||
color body brightcyan default "[;:][-o][)/(|]" # emoticons
|
||||
color body brightcyan default "[;:][)(|]" # emoticons
|
||||
color body brightcyan default "[ ][*][^*]*[*][ ]?" # more emoticon?
|
||||
color body brightcyan default "[ ]?[*][^*]*[*][ ]" # more emoticon?
|
||||
color body red default "(BAD signature)"
|
||||
color body cyan default "(Good signature)"
|
||||
color body brightblack default "^gpg: Good signature .*"
|
||||
color body brightyellow default "^gpg: "
|
||||
color body brightyellow red "^gpg: BAD signature from.*"
|
||||
color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
|
||||
|
||||
# Default index colors:
|
||||
color index brightwhite default '.*'
|
||||
color index_author brightgreen default '.*'
|
||||
color index_number blue default
|
||||
color index_subject cyan default '.*'
|
||||
|
||||
# For new mail:
|
||||
color index brightyellow black "~N"
|
||||
color index_author brightred black "~N"
|
||||
color index_subject brightcyan black "~N"
|
||||
|
||||
color progress black cyan
|
||||
29
neomutt/.config/neomutt/etc/aliases
Normal file
29
neomutt/.config/neomutt/etc/aliases
Normal file
@@ -0,0 +1,29 @@
|
||||
## A file for aliases
|
||||
|
||||
# Uni staff
|
||||
alias dani dmolina@decsai.ugr.es
|
||||
alias cano ccano@decsai.ugr.es
|
||||
alias merino cmerino@ugr.es
|
||||
alias fran fjrodriguez@decsai.ugr.es
|
||||
alias salva salvaguti@decsai.ugr.es
|
||||
alias marisol marisolbc@ugr.es
|
||||
|
||||
# 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
|
||||
alias aiub aiub.tel@gmail.com
|
||||
|
||||
# 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
|
||||
|
||||
# COACE
|
||||
alias jorge secretario@arquitectosdeceuta.com
|
||||
alias judit comunicacion@arquitectosdeceuta.com
|
||||
alias manoli administracion@arquitectosdeceuta.com
|
||||
131
neomutt/.config/neomutt/etc/gpg.rc
Normal file
131
neomutt/.config/neomutt/etc/gpg.rc
Normal 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
|
||||
|
||||
7
neomutt/.config/neomutt/etc/mailcap
Normal file
7
neomutt/.config/neomutt/etc/mailcap
Normal file
@@ -0,0 +1,7 @@
|
||||
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/msword; libreoffice %s ;
|
||||
application/pgp-encrypted; gpg -d '%s'; copiousoutput;
|
||||
71
neomutt/.config/neomutt/etc/muttcol
Normal file
71
neomutt/.config/neomutt/etc/muttcol
Normal 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<>\"]""']))']))']))']))']))']))']))']))']))']))']))']))'])']))))))])]"
|
||||
4
neomutt/.config/neomutt/etc/sendmail
Executable file
4
neomutt/.config/neomutt/etc/sendmail
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
nix-shell -p python38
|
||||
python ~/.local/bin/MIMEmbellish | msmtp -a $1 -t
|
||||
93
neomutt/.config/neomutt/neomuttrc
Normal file
93
neomutt/.config/neomutt/neomuttrc
Normal file
@@ -0,0 +1,93 @@
|
||||
#vim: filetype=neomuttrc
|
||||
# This is the general mutt config which has the settings that all accounts use.
|
||||
bind index,pager i noop
|
||||
bind index,pager g noop
|
||||
bind index \Cf noop
|
||||
source etc/muttcol
|
||||
source etc/aliases
|
||||
source personal.muttrc
|
||||
source colors.muttrc
|
||||
set sleep_time = 0
|
||||
set sort = 'reverse-date'
|
||||
set editor = $EDITOR
|
||||
set copy = no
|
||||
set beep_new = yes
|
||||
set mailcap_path = ~/.config/neomutt/etc/mailcap
|
||||
set date_format="%d/%m/%y %H:%M"
|
||||
set index_format="%2C %zs %?X?A& ? %D %-15.15F %s (%-4.4c)"
|
||||
set markers = no
|
||||
set mark_old = no
|
||||
set mime_forward = yes
|
||||
set smtp_authenticators = 'gssapi:login'
|
||||
set wait_key = no
|
||||
auto_view text/html
|
||||
auto_view application/pgp-encrypted
|
||||
alternative_order text/plain text/enriched text/html
|
||||
set rfc2047_parameters = yes
|
||||
set send_charset = 'us-ascii:utf-8'
|
||||
set ssl_use_tlsv1_2 = yes
|
||||
unset help
|
||||
set pager_stop = yes
|
||||
set wrap=-20
|
||||
|
||||
# General remappings
|
||||
bind editor <space> noop
|
||||
bind index G last-entry
|
||||
bind index gg first-entry
|
||||
bind pager j next-line
|
||||
bind pager k previous-line
|
||||
bind pager gg top
|
||||
bind pager G bottom
|
||||
bind index d half-down
|
||||
bind index u half-up
|
||||
bind index D delete-message
|
||||
bind index U undelete-message
|
||||
bind index F search
|
||||
bind index,pager R group-reply
|
||||
bind index,pager \031 previous-undeleted # Mouse wheel
|
||||
bind index,pager \005 next-undeleted # Mouse wheel
|
||||
macro index,pager S <sync-mailbox>
|
||||
macro index,pager \Cu |urlscan\n
|
||||
macro index,pager ,, |urlscan\n
|
||||
|
||||
# View attachments properly.
|
||||
bind attach <return> view-mailcap
|
||||
set fast_reply # skip to compose when replying
|
||||
set fcc_attach # save attachments with the body
|
||||
unset mime_forward # forward attachments as part of body
|
||||
set forward_format = "Fwd: %s" # format of subject when forwarding
|
||||
set forward_decode # decode when forwarding
|
||||
set forward_quote # include message in forwards
|
||||
set reverse_name # reply as whomever it was to
|
||||
set include # include message in replies
|
||||
|
||||
#Ctrl-R to mark all as read
|
||||
macro index \Cr "T~U<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" "mark all messages as read"
|
||||
#
|
||||
# #sync email
|
||||
macro index o "<shell-escape>mbsync -a 2>/dev/null 1>&2 &<enter>" "run mbsync to sync all mail"
|
||||
|
||||
# #copy/move dialogs
|
||||
macro index C "<copy-message>?<toggle-mailboxes>" "copy a message to a mailbox"
|
||||
macro index M "<save-message>?<toggle-mailboxes>" "move a message to a mailbox"
|
||||
|
||||
# Notmuch searching
|
||||
macro index \Cf "<enter-command>unset wait_key<enter><shell-escape>read -p 'notmuch query: ' x; echo \$x >~/.cache/mutt_terms<enter><limit>~i \"\`notmuch search --output=messages \$(cat ~/.cache/mutt_terms) | head -n 600 | perl -le '@a=<>;chomp@a;s/\^id:// for@a;$,=\"|\";print@a'\`\"<enter>" "show only messages matching a notmuch pattern"
|
||||
macro index A "<limit>all\n" "show all messages (undo limit)"
|
||||
|
||||
# # Sidebar mappings
|
||||
set sidebar_visible = yes
|
||||
set sidebar_width = 20
|
||||
set sidebar_short_path = yes
|
||||
set sidebar_next_new_wrap = yes
|
||||
set mail_check_stats
|
||||
set sidebar_format = '%B%?F? [%F]?%* %?N?%N/? %?S?%S?'
|
||||
bind index,pager \Ck sidebar-prev
|
||||
bind index,pager \Cj sidebar-next
|
||||
bind index,pager \Co sidebar-open
|
||||
bind index,pager \Cp sidebar-prev-new
|
||||
bind index,pager \Cn sidebar-next-new
|
||||
bind index,pager B sidebar-toggle-visible
|
||||
|
||||
# Remove signature
|
||||
unset signature
|
||||
4
neomutt/.config/neomutt/personal.muttrc
Normal file
4
neomutt/.config/neomutt/personal.muttrc
Normal 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
238
neomutt/.local/bin/MIMEmbellish
Executable 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()
|
||||
88
neovim/.config/nvim/UltiSnips/markdown.snippets
Normal file
88
neovim/.config/nvim/UltiSnips/markdown.snippets
Normal 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
|
||||
@@ -1,6 +1,5 @@
|
||||
""Basic stuff
|
||||
set number
|
||||
set relativenumber
|
||||
set encoding=utf8
|
||||
set clipboard+=unnamedplus
|
||||
set nofoldenable
|
||||
@@ -25,20 +24,46 @@ nnoremap <leader>n :noh<cr>
|
||||
"Move the current line up or down
|
||||
nnoremap <leader>k :m-2<cr>==
|
||||
nnoremap <leader>j :m+<cr>==
|
||||
""Markdown
|
||||
autocmd Filetype markdown Goyo
|
||||
let g:markdown_fenced_languages = ['cpp', 'python', 'java', 'sql']
|
||||
let g:vim_markdown_math=1
|
||||
""Snippets
|
||||
let g:UltiSnipsExpandTrigger = '<tab>'
|
||||
let g:UltiSnipsJumpForwardTrigger = '<tab>'
|
||||
let g:UltiSnipsJumpBackwardTrigger = '<s-tab>'
|
||||
""Vim-plug
|
||||
call plug#begin('~/.config/nvim/plugged')
|
||||
Plug 'plasticboy/vim-markdown', { 'for': 'markdown' }
|
||||
Plug 'junegunn/goyo.vim', {'for': 'markdown', 'on': 'Goyo' }
|
||||
Plug 'SirVer/ultisnips', { 'for': 'markdown' }
|
||||
Plug 'Raimondi/delimitMate'
|
||||
Plug 'nordtheme/vim'
|
||||
Plug 'rose-pine/neovim'
|
||||
Plug 'LnL7/vim-nix'
|
||||
Plug 'cocopon/iceberg.vim'
|
||||
call plug#end()
|
||||
""Colors
|
||||
colorscheme iceberg
|
||||
set bg=dark
|
||||
set termguicolors
|
||||
colorscheme nord
|
||||
set background=light
|
||||
""Disabe status line
|
||||
set laststatus=0
|
||||
""Set Markdown filetype for neomutt
|
||||
autocmd BufNewFile,BufRead /tmp/neomutt* set filetype=markdown
|
||||
""Quit whether Goyo is active or not
|
||||
function! s:goyo_enter()
|
||||
let b:quitting = 0
|
||||
let b:quitting_bang = 0
|
||||
call feedkeys('jk')
|
||||
autocmd QuitPre <buffer> let b:quitting = 1
|
||||
cabbrev <buffer> q! let b:quitting_bang = 1 <bar> q!
|
||||
endfunction
|
||||
|
||||
function! s:goyo_leave()
|
||||
if b:quitting_bang
|
||||
qa!
|
||||
else
|
||||
qa
|
||||
endif
|
||||
endfunction
|
||||
|
||||
autocmd! User GoyoEnter nested call <SID>goyo_enter()
|
||||
autocmd! User GoyoLeave nested call <SID>goyo_leave()
|
||||
|
||||
4
nix/.config/nixpkgs/config.nix
Normal file
4
nix/.config/nixpkgs/config.nix
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
allowUnfree = true;
|
||||
android_sdk.accept_license = true;
|
||||
}
|
||||
88
notmuch/.notmuch-config
Normal file
88
notmuch/.notmuch-config
Normal 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
|
||||
@@ -1,6 +1,6 @@
|
||||
%%
|
||||
% Copyright (c) 2017 - 2021, Pascal Wagler;
|
||||
% Copyright (c) 2014 - 2021, John MacFarlane
|
||||
% Copyright (c) 2017 - 2020, Pascal Wagler;
|
||||
% Copyright (c) 2014 - 2020, John MacFarlane
|
||||
%
|
||||
% All rights reserved.
|
||||
%
|
||||
@@ -140,18 +140,22 @@ $else$
|
||||
$endif$
|
||||
$if(linestretch)$
|
||||
\usepackage{setspace}
|
||||
\setstretch{$linestretch$}
|
||||
$else$
|
||||
\usepackage{setspace}
|
||||
\setstretch{1.2}
|
||||
$endif$
|
||||
\usepackage{amsmath}
|
||||
\usepackage{ifxetex,ifluatex}
|
||||
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
|
||||
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage{textcomp} % provide euro and other symbols
|
||||
\usepackage{amssymb}
|
||||
\else % if luatex or xetex
|
||||
$if(mathspec)$
|
||||
\ifxetex
|
||||
\usepackage{amssymb}
|
||||
\usepackage{mathspec}
|
||||
\else
|
||||
\usepackage{unicode-math}
|
||||
@@ -339,9 +343,6 @@ $highlighting-macros$
|
||||
$endif$
|
||||
$if(tables)$
|
||||
\usepackage{longtable,booktabs,array}
|
||||
$if(multirow)$
|
||||
\usepackage{multirow}
|
||||
$endif$
|
||||
\usepackage{calc} % for calculating minipage widths
|
||||
$if(beamer)$
|
||||
\usepackage{caption}
|
||||
@@ -494,9 +495,6 @@ $if(csl-refs)$
|
||||
\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{#1}\break}
|
||||
\newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1}
|
||||
$endif$
|
||||
$if(csquotes)$
|
||||
\usepackage{csquotes}
|
||||
$endif$
|
||||
|
||||
$if(title)$
|
||||
\title{$title$$if(thanks)$\thanks{$thanks$}$endif$}
|
||||
@@ -944,7 +942,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)$
|
||||
|
||||
@@ -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
|
||||
598
pandoc/.pandoc/templates/email.html
Normal file
598
pandoc/.pandoc/templates/email.html
Normal 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>
|
||||
@@ -1,25 +1,15 @@
|
||||
[git.coolneng.duckdns.org*]
|
||||
target=api/gitea
|
||||
username_extractor=specific_line
|
||||
line_username=1
|
||||
skip_username=7
|
||||
[git.psydnd.org*]
|
||||
target=api/gitea
|
||||
target=web/git.coolneng.duckdns.org
|
||||
username_extractor=specific_line
|
||||
line_username=1
|
||||
skip_username=7
|
||||
[github.com*]
|
||||
target=api/github
|
||||
target=web/github.com
|
||||
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
|
||||
target=web/gitlab.com
|
||||
username_extractor=specific_line
|
||||
line_username=1
|
||||
skip_username=7
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
[virtualenvs]
|
||||
in-project = true
|
||||
@@ -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 ;
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "use flake" >.envrc
|
||||
lorri init
|
||||
direnv allow
|
||||
|
||||
@@ -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"
|
||||
@@ -1,7 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
search_directory=~/Documents
|
||||
downloads=~/Downloads
|
||||
|
||||
xdg-open "$(rg --no-messages --no-ignore --files $search_directory $downloads -g "*.{pdf,docx,doc,xlsx,xls,pptx,ppt}" |
|
||||
xdg-open "$(rg --no-messages --files $search_directory -g "{*.pdf}" -g "{*.doc[x]}" -g "{*.xls[x]}" |
|
||||
rofi -threads 0 -dmenu -sort -sorting-method fzf -i -p "find")"
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
5
scripts/.local/share/scripts/niv-init
Executable file
5
scripts/.local/share/scripts/niv-init
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
niv init
|
||||
niv update nixpkgs -b nixpkgs-unstable
|
||||
sed "s/pkgs ? import <nixpkgs>/sources ? import .\/nix\/sources.nix, pkgs ? import sources.nixpkgs/" -i shell.nix
|
||||
@@ -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}"
|
||||
@@ -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
|
||||
|
||||
36
scripts/.local/share/scripts/popup-window
Executable file
36
scripts/.local/share/scripts/popup-window
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
select_action() {
|
||||
action_content=(
|
||||
"System resources usage"
|
||||
"Connectivity test"
|
||||
"Kill emacs"
|
||||
"Start videocall"
|
||||
"Stop videocall"
|
||||
)
|
||||
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" ;;
|
||||
"Kill emacs") execute_command "pkill emacs" ;;
|
||||
"Sync doom emacs") execute_command "$HOME/.emacs.d/bin/doom sync" ;;
|
||||
"Start videocall") execute_command "$script_folder/pulseaudio-mic-mute" && execute_command "$script_folder/videocall start" ;;
|
||||
"Stop videocall") execute_command "$script_folder/pulseaudio-mic-mute" && execute_command "$script_folder/videocall stop" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
script_folder="$HOME/.local/share/scripts"
|
||||
|
||||
select_action "$@"
|
||||
@@ -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 "$@"
|
||||
@@ -5,46 +5,10 @@ usage() {
|
||||
echo "type git: VCS project"
|
||||
echo "type remote-git: VCS project with README, LICENSE and tests"
|
||||
echo "type src: Simple coding project"
|
||||
echo "type init: Initialize populated project"
|
||||
echo "type doc: Assignment"
|
||||
echo "type nix-ld: Run unpatched programs with Nix"
|
||||
echo "type datasci: Python data science project"
|
||||
exit 1
|
||||
}
|
||||
|
||||
copy_nix_files() {
|
||||
if [ "$1" = "flake" ]; then
|
||||
cp ~/Projects/devenv/flake-template.nix flake.nix
|
||||
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
|
||||
@@ -52,43 +16,31 @@ fi
|
||||
type=$1
|
||||
|
||||
if [ "$type" = "git" ]; then
|
||||
copy_nix_files "nix"
|
||||
create_dir data
|
||||
create_dir src
|
||||
git_initialization
|
||||
direnv_integration "nix"
|
||||
git init
|
||||
cp ~/Documents/IT/shell.nix .
|
||||
mkdir src data
|
||||
git add ./*
|
||||
git commit -m "Initial commit"
|
||||
lorri init
|
||||
direnv allow
|
||||
elif [ "$type" = "remote-git" ]; then
|
||||
git init
|
||||
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"
|
||||
cp ~/Documents/IT/gpl-3.0.md LICENSE.md
|
||||
cp ~/Documents/IT/shell.nix .
|
||||
mkdir src tests data
|
||||
git add ./*
|
||||
git commit -m "Initial commit"
|
||||
lorri init
|
||||
direnv allow
|
||||
elif [ "$type" = "doc" ]; then
|
||||
create_dir assets
|
||||
touch Report.org
|
||||
touch .project
|
||||
mkdir docs docs/assets
|
||||
touch docs/Summary.org
|
||||
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"
|
||||
cp ~/Documents/IT/shell.nix .
|
||||
mkdir src data
|
||||
lorri init
|
||||
direnv allow
|
||||
else
|
||||
usage
|
||||
fi
|
||||
|
||||
@@ -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 "$@"
|
||||
@@ -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
|
||||
@@ -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"
|
||||
@@ -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
|
||||
|
||||
@@ -1,36 +1,5 @@
|
||||
#!/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"
|
||||
@@ -39,12 +8,24 @@ fi
|
||||
|
||||
mode=$1
|
||||
|
||||
change_theme() {
|
||||
sed -i "s/iceberg_$1/iceberg_$2/" ~/.config/kitty/kitty.conf
|
||||
sed -i "s/bg=$1/bg=$2/" ~/.config/nvim/init.vim
|
||||
sed -i "s/iceberg_$1/iceberg_$2/" ~/.dotfiles/tmux/.tmux.conf
|
||||
}
|
||||
|
||||
reload_kitty() {
|
||||
pkill kitty
|
||||
tmux source-file ~/.tmux.conf
|
||||
kitty --class tmux tmux a
|
||||
}
|
||||
|
||||
if [ "$mode" = "light" ]; then
|
||||
emacsclient --eval "(load-theme 'os1 'no-confirm)"
|
||||
change_theme "$DARK_THEME" "$LIGHT_THEME"
|
||||
recolor_zathura
|
||||
emacsclient --eval "(load-theme 'doom-nord-light 'no-confirm)"
|
||||
change_theme dark light
|
||||
reload_kitty
|
||||
else
|
||||
emacsclient --eval "(load-theme 'doom-one 'no-confirm)"
|
||||
change_theme "$LIGHT_THEME" "$DARK_THEME"
|
||||
recolor_zathura
|
||||
emacsclient --eval "(load-theme 'doom-nord 'no-confirm)"
|
||||
change_theme light dark
|
||||
reload_kitty
|
||||
fi
|
||||
|
||||
@@ -2,10 +2,9 @@
|
||||
|
||||
select_action() {
|
||||
action_content=(
|
||||
"local"
|
||||
"zion"
|
||||
"hpc"
|
||||
"kermit-gpu"
|
||||
"unit"
|
||||
"aegis"
|
||||
)
|
||||
action=$(printf '%s\n' "${action_content[@]}" | rofi -no-auto-select -i "$@" -dmenu -p "Choose a session")
|
||||
execute_action "$action"
|
||||
@@ -17,10 +16,9 @@ launch_session() {
|
||||
|
||||
execute_action() {
|
||||
case "$1" in
|
||||
"local") launch_session "local" ;;
|
||||
"zion") launch_session "zion" ;;
|
||||
"hpc") launch_session "hpc" ;;
|
||||
"kermit-gpu") launch_session "kermit-gpu" ;;
|
||||
"unit") launch_session "unit" ;;
|
||||
"aegis") launch_session "aegis" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
git config user.name "akasroua"
|
||||
git config user.email "amin.kasrouaouam@ugent.be"
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
git fetch upstream
|
||||
git checkout master
|
||||
git rebase upstream/master
|
||||
git push -f origin master
|
||||
30
scripts/.local/share/scripts/videocall
Executable file
30
scripts/.local/share/scripts/videocall
Executable file
@@ -0,0 +1,30 @@
|
||||
#!/bin/sh
|
||||
|
||||
usage() {
|
||||
echo "Usage: videocall <start|stop>"
|
||||
exit 1
|
||||
}
|
||||
|
||||
move_workspace() {
|
||||
swaymsg workspace "$1", move workspace to "$2"
|
||||
}
|
||||
|
||||
main() {
|
||||
if [ "$1" = "start" ]; then
|
||||
move_workspace "3: " "HDMI-A-2"
|
||||
move_workspace "2: " "eDP-1"
|
||||
elif [ "$1" = "stop" ]; then
|
||||
move_workspace "3: " "eDP-1"
|
||||
move_workspace "2: " "HDMI-A-2"
|
||||
else
|
||||
usage
|
||||
fi
|
||||
}
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
action=$1
|
||||
|
||||
main "$action"
|
||||
@@ -1,27 +1,46 @@
|
||||
host zion
|
||||
user coolneng
|
||||
hostname 192.168.128.2
|
||||
hostname 192.168.13.2
|
||||
port 22
|
||||
identityfile ~/.ssh/zion
|
||||
|
||||
host localhost
|
||||
user root
|
||||
hostname localhost
|
||||
port 22
|
||||
identityfile ~/.ssh/localhost
|
||||
|
||||
host prodyfo
|
||||
user ec2-user
|
||||
hostname ec2-52-47-172-241.eu-west-3.compute.amazonaws.com
|
||||
port 22
|
||||
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
|
||||
|
||||
host unit
|
||||
user coace
|
||||
hostname 10.0.1.3
|
||||
port 22
|
||||
identityfile ~/.ssh/coace
|
||||
|
||||
host sica
|
||||
user root
|
||||
hostname 10.0.1.3
|
||||
port 2222
|
||||
identityfile ~/.ssh/sica
|
||||
KexAlgorithms +diffie-hellman-group1-sha1
|
||||
|
||||
host aegis
|
||||
user coace
|
||||
hostname 10.0.1.4
|
||||
port 22
|
||||
identityfile ~/.ssh/aegis
|
||||
|
||||
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
|
||||
user root
|
||||
hostname 192.168.13.20
|
||||
port 22
|
||||
identityfile ~/.ssh/kobo
|
||||
|
||||
host kathreftis
|
||||
user root
|
||||
hostname 192.168.13.131
|
||||
port 22
|
||||
identityfile ~/.ssh/kathreftis
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user