Compare commits
32 commits
5a9a4e7162
...
fd20fb2576
Author | SHA1 | Date | |
---|---|---|---|
fd20fb2576 | |||
201c482f2b | |||
205c48633f | |||
2e6c1026fb | |||
5fce112927 | |||
f45e41b754 | |||
261935c27a | |||
b4ec0b9e0a | |||
6bc582f67a | |||
4c540496dd | |||
3b7c24c676 | |||
11c7b82de0 | |||
e1a8f8ec8d | |||
30030782e1 | |||
30e9d09ee4 | |||
7e2da571e7 | |||
b2ee02e474 | |||
c6f243c2c1 | |||
aefce1c498 | |||
a89249badd | |||
b534454a88 | |||
4b4afc68f3 | |||
cfddecba60 | |||
3c3cc20dc2 | |||
ac9a8c69ac | |||
dbcc18cc56 | |||
03684ce29f | |||
593628b81d | |||
ff2cbe7e2d | |||
a082d60a07 | |||
5a52d9ec6c | |||
88d5520b55 |
87 changed files with 17924 additions and 108 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -39,5 +39,5 @@ vifminfo.json
|
||||||
colorscheme.yml
|
colorscheme.yml
|
||||||
|
|
||||||
# taskwarrior
|
# taskwarrior
|
||||||
taskwarrior/.config/task/task-sync.rc
|
office/.config/task/task-sync.rc
|
||||||
taskwarrior/.config/task/contexts
|
office/.config/task/contexts
|
||||||
|
|
|
@ -56,6 +56,7 @@ Enjoy!
|
||||||
* [`pass`](pass/README.md) - Password management suite
|
* [`pass`](pass/README.md) - Password management suite
|
||||||
* [`bibtex`](bibtex/README.md) - LateX/BibteX/pandoc plaintext writing & reference suite
|
* [`bibtex`](bibtex/README.md) - LateX/BibteX/pandoc plaintext writing & reference suite
|
||||||
* [`git`](git/README.md) - distributed version control system.
|
* [`git`](git/README.md) - distributed version control system.
|
||||||
|
* [`office`](office/README.md) - office/productivity software for writing e-mail and setting appointments
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,9 @@ caddy Fast web server with automatic HTTPS R
|
||||||
calcurse A text-based personal organizer R
|
calcurse A text-based personal organizer R
|
||||||
catdoc A convertor for Microsoft Word, Excel, PowerPoint and RTF Files to text R
|
catdoc A convertor for Microsoft Word, Excel, PowerPoint and RTF Files to text R
|
||||||
chafa Image-to-text converter supporting a wide range of symbols and palettes, transparency, animations, etc. R
|
chafa Image-to-text converter supporting a wide range of symbols and palettes, transparency, animations, etc. R
|
||||||
|
cinny-desktop-bin Matrix client focusing primarily on a simple, elegant and secure interface (binary release) A
|
||||||
clipman A simple clipboard manager for Wayland A
|
clipman A simple clipboard manager for Wayland A
|
||||||
|
cups-pdf PDF printer for cups R
|
||||||
cups-pk-helper A helper that makes system-config-printer use PolicyKit R
|
cups-pk-helper A helper that makes system-config-printer use PolicyKit R
|
||||||
dbus-broker Linux D-Bus Message Broker R
|
dbus-broker Linux D-Bus Message Broker R
|
||||||
dcnnt Yet another tool to connect Android phone with desktop similar to KDE Connect A
|
dcnnt Yet another tool to connect Android phone with desktop similar to KDE Connect A
|
||||||
|
@ -46,7 +48,7 @@ dell-command-configure Configure various BIOS features on Dell laptops A
|
||||||
devour Window Manager agnostic swallowing feature for terminal emulators A
|
devour Window Manager agnostic swallowing feature for terminal emulators A
|
||||||
dhcpcd RFC2131 compliant DHCP client daemon R
|
dhcpcd RFC2131 compliant DHCP client daemon R
|
||||||
diff-so-fancy Good-looking diffs with diff-highlight and more R
|
diff-so-fancy Good-looking diffs with diff-highlight and more R
|
||||||
docker Pack, ship and run any application as a lightweight container R
|
distrobox Use any linux distribution inside your terminal. A
|
||||||
docker-compose Fast, isolated development environments using Docker R
|
docker-compose Fast, isolated development environments using Docker R
|
||||||
docx2txt Recovers text from DOCX files, with good formatting. R
|
docx2txt Recovers text from DOCX files, with good formatting. R
|
||||||
dos2unix Text file format converter R
|
dos2unix Text file format converter R
|
||||||
|
@ -54,7 +56,6 @@ duf Disk Usage/Free Utility R
|
||||||
dunst Customizable and lightweight notification-daemon R
|
dunst Customizable and lightweight notification-daemon R
|
||||||
dust A more intuitive version of du in rust R
|
dust A more intuitive version of du in rust R
|
||||||
efm-langserver General purpose Language Server A
|
efm-langserver General purpose Language Server A
|
||||||
element-desktop Glossy Matrix collaboration client — desktop version. R
|
|
||||||
enca Charset analyser and converter R
|
enca Charset analyser and converter R
|
||||||
entr Run arbitrary commands when files change R
|
entr Run arbitrary commands when files change R
|
||||||
evince Document viewer (PDF, PostScript, XPS, djvu, dvi, tiff, cbr, cbz, cb7, cbt) R
|
evince Document viewer (PDF, PostScript, XPS, djvu, dvi, tiff, cbr, cbz, cb7, cbt) R
|
||||||
|
@ -70,7 +71,7 @@ fonts-cjk Linux 下的免费商用字体包 A
|
||||||
freerdp Free implementation of the Remote Desktop Protocol (RDP) R
|
freerdp Free implementation of the Remote Desktop Protocol (RDP) R
|
||||||
fvextra Extensions to fancyvrb, including automatic line breaking and improved math mode R
|
fvextra Extensions to fancyvrb, including automatic line breaking and improved math mode R
|
||||||
fwupd Simple daemon to allow session software to update firmware R
|
fwupd Simple daemon to allow session software to update firmware R
|
||||||
fzf-tab-git Replace zsh's default completion selection menu with fzf. R
|
fzf-tab-bin-git Replace zsh's default completion selection menu with fzf (git version). This package also compiles the optional binary module. A
|
||||||
gallery-dl Command-line program to download image-galleries and collections from several image hosting sites A
|
gallery-dl Command-line program to download image-galleries and collections from several image hosting sites A
|
||||||
gamemode A daemon/lib combo that allows games to request a set of optimisations be temporarily applied to the host OS R
|
gamemode A daemon/lib combo that allows games to request a set of optimisations be temporarily applied to the host OS R
|
||||||
gimp GNU Image Manipulation Program R
|
gimp GNU Image Manipulation Program R
|
||||||
|
@ -80,12 +81,10 @@ gitui Blazing fast terminal-ui for git written in Rust R
|
||||||
gk6x-bin Configure keys, macros, and lighting on GK6X keyboards (GK64, GK84, GK61, etc) A
|
gk6x-bin Configure keys, macros, and lighting on GK6X keyboards (GK64, GK84, GK61, etc) A
|
||||||
glances CLI curses-based monitoring tool R
|
glances CLI curses-based monitoring tool R
|
||||||
glfw-wayland A free, open source, portable framework for graphical application development (wayland) R
|
glfw-wayland A free, open source, portable framework for graphical application development (wayland) R
|
||||||
glow Markdown renderer for the CLI R
|
glow Command-line markdown renderer R
|
||||||
gnome-keyring Stores passwords and encryption keys R
|
|
||||||
gnu-netcat GNU rewrite of netcat, the network piping application R
|
gnu-netcat GNU rewrite of netcat, the network piping application R
|
||||||
gnumeric A GNOME Spreadsheet Program R
|
gnumeric A GNOME Spreadsheet Program R
|
||||||
gnuplot Plotting package which outputs to X11, PostScript, PNG, GIF, and others R
|
gnuplot Plotting package which outputs to X11, PostScript, PNG, GIF, and others R
|
||||||
go Core compiler tools for the Go programming language R
|
|
||||||
go-md2man A markdown to manpage generator R
|
go-md2man A markdown to manpage generator R
|
||||||
gomuks A terminal based Matrix client written in Go A
|
gomuks A terminal based Matrix client written in Go A
|
||||||
gopls Language server for Go programming language R
|
gopls Language server for Go programming language R
|
||||||
|
@ -93,7 +92,6 @@ gotty-bin Simple command line tool that turns your CLI tools into web applicatio
|
||||||
grim Screenshot utility for Wayland R
|
grim Screenshot utility for Wayland R
|
||||||
grub GNU GRand Unified Bootloader (2) R
|
grub GNU GRand Unified Bootloader (2) R
|
||||||
gsimplecal Simple and lightweight GTK calendar R
|
gsimplecal Simple and lightweight GTK calendar R
|
||||||
gst-libav Multimedia graph framework - libav plugin R
|
|
||||||
gst-plugins-bad Multimedia graph framework - bad plugins R
|
gst-plugins-bad Multimedia graph framework - bad plugins R
|
||||||
gstreamer-vaapi Multimedia graph framework - vaapi plugin R
|
gstreamer-vaapi Multimedia graph framework - vaapi plugin R
|
||||||
gucharmap Gnome Unicode Charmap R
|
gucharmap Gnome Unicode Charmap R
|
||||||
|
@ -107,14 +105,17 @@ intel-ucode Microcode update files for Intel CPUs R
|
||||||
iputils Network monitoring tools, including ping R
|
iputils Network monitoring tools, including ping R
|
||||||
ipython An enhanced Interactive Python shell. R
|
ipython An enhanced Interactive Python shell. R
|
||||||
iucode-tool Tool to manipulate Intel® IA-32/X86-64 microcode bundles R
|
iucode-tool Tool to manipulate Intel® IA-32/X86-64 microcode bundles R
|
||||||
|
iwd Internet Wireless Daemon R
|
||||||
jabref-latest GUI frontend for BibTeX, written in Java; latest main (master) version from git A
|
jabref-latest GUI frontend for BibTeX, written in Java; latest main (master) version from git A
|
||||||
jiq-bin Interactive JSON query tool using jq expressions A
|
jiq-bin Interactive JSON query tool using jq expressions A
|
||||||
jmtpfs FUSE and libmtp based filesystem for accessing MTP (Media Transfer Protocol) devices A
|
jmtpfs FUSE and libmtp based filesystem for accessing MTP (Media Transfer Protocol) devices A
|
||||||
jpdftweak A Swiss Army Knife GUI application for PDF documents A
|
jpdftweak A Swiss Army Knife GUI application for PDF documents A
|
||||||
jrnl Collect your thoughts and notes without leaving the command line R
|
jrnl Collect your thoughts and notes without leaving the command line R
|
||||||
|
jupyter-nbclient A tool for running Jupyter Notebooks in different execution contexts. R
|
||||||
|
kanshi Dynamic output configuration for Wayland WMs R
|
||||||
keyd A key remapping daemon for linux. A
|
keyd A key remapping daemon for linux. A
|
||||||
khal CLI calendar application build around CalDAV R
|
khal CLI calendar application build around CalDAV R
|
||||||
khard Console CardDAV client R
|
khard Console address book manager R
|
||||||
kitty A modern, hackable, featureful, OpenGL-based terminal emulator R
|
kitty A modern, hackable, featureful, OpenGL-based terminal emulator R
|
||||||
kubo IPFS implementation in Go R
|
kubo IPFS implementation in Go R
|
||||||
lazygit Simple terminal UI for git commands R
|
lazygit Simple terminal UI for git commands R
|
||||||
|
@ -123,6 +124,8 @@ libqalculate Multi-purpose desktop calculator R
|
||||||
libreoffice-fresh LibreOffice branch which contains new features and program enhancements R
|
libreoffice-fresh LibreOffice branch which contains new features and program enhancements R
|
||||||
libva-intel-driver VA-API implementation for Intel G45 and HD Graphics family R
|
libva-intel-driver VA-API implementation for Intel G45 and HD Graphics family R
|
||||||
licenses A set of common license files R
|
licenses A set of common license files R
|
||||||
|
libvirt API for controlling virtualization engines (openvz,kvm,qemu,virtualbox,xen,etc) R
|
||||||
|
linux The Linux kernel and modules R
|
||||||
linux-firmware Firmware files for Linux R
|
linux-firmware Firmware files for Linux R
|
||||||
linux-headers Headers and scripts for building modules for the Linux kernel R
|
linux-headers Headers and scripts for building modules for the Linux kernel R
|
||||||
linux-lts The LTS Linux kernel and modules R
|
linux-lts The LTS Linux kernel and modules R
|
||||||
|
@ -145,6 +148,7 @@ masterpdfeditor-free A complete solution for creation and editing PDF files - Fr
|
||||||
mbsync-git free (GPL) mailbox synchronization program A
|
mbsync-git free (GPL) mailbox synchronization program A
|
||||||
mediainfo Supplies technical and tag information about a video or audio file (CLI interface) R
|
mediainfo Supplies technical and tag information about a video or audio file (CLI interface) R
|
||||||
mermaid-cli Generation of diagram and flowchart from text in a similar manner as markdown (CLI) A
|
mermaid-cli Generation of diagram and flowchart from text in a similar manner as markdown (CLI) A
|
||||||
|
micro Modern and intuitive terminal-based text editor R
|
||||||
mimeo Open files by MIME-type or file name using regular expressions. A
|
mimeo Open files by MIME-type or file name using regular expressions. A
|
||||||
minidlna A DLNA/UPnP-AV Media server (aka ReadyDLNA) R
|
minidlna A DLNA/UPnP-AV Media server (aka ReadyDLNA) R
|
||||||
minio-client Replacement for ls, cp, mkdir, diff and rsync commands for filesystems and object storage R
|
minio-client Replacement for ls, cp, mkdir, diff and rsync commands for filesystems and object storage R
|
||||||
|
@ -176,14 +180,14 @@ nmap Utility for network discovery and security auditing R
|
||||||
nodejs-markdownlint-cli MarkdownLint Command Line Interface A
|
nodejs-markdownlint-cli MarkdownLint Command Line Interface A
|
||||||
nodejs-pandiff Prose diffs for any document format supported by Pandoc A
|
nodejs-pandiff Prose diffs for any document format supported by Pandoc A
|
||||||
npm A package manager for javascript R
|
npm A package manager for javascript R
|
||||||
|
nss-mdns glibc plugin providing host name resolution via mDNS R
|
||||||
nsxiv Neo (or New or Not) Simple (or Small or Suckless) X Image Viewer A
|
nsxiv Neo (or New or Not) Simple (or Small or Suckless) X Image Viewer A
|
||||||
ntfs-3g NTFS filesystem driver and utilities R
|
ntfs-3g NTFS filesystem driver and utilities R
|
||||||
ntp Network Time Protocol reference implementation R
|
ntp Network Time Protocol reference implementation R
|
||||||
nushell A new type of shell R
|
nushell A new type of shell R
|
||||||
nvm Node Version Manager - Simple bash script to manage multiple active node.js versions R
|
|
||||||
nzbget Download from Usenet using .nzb files R
|
nzbget Download from Usenet using .nzb files R
|
||||||
offpunk-git Fork of the command-line Gemini client AV-98 with added offline capabilities A
|
offpunk-git Fork of the command-line Gemini client AV-98 with added offline capabilities A
|
||||||
oh-my-zsh-git A community-driven framework for managing your zsh configuration. Includes 180+ optional plugins and over 120 themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community R
|
oh-my-zsh-git A community-driven framework for managing your zsh configuration. Includes 180+ optional plugins and over 120 themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community A
|
||||||
os-prober Utility to detect other OSes on a set of drives R
|
os-prober Utility to detect other OSes on a set of drives R
|
||||||
otf-nerd-fonts-fira-code Monospaced font with programming ligatures. Patched with Nerd Fonts icons. A
|
otf-nerd-fonts-fira-code Monospaced font with programming ligatures. Patched with Nerd Fonts icons. A
|
||||||
parallel A shell tool for executing jobs in parallel R
|
parallel A shell tool for executing jobs in parallel R
|
||||||
|
@ -191,16 +195,20 @@ paru-bin Feature packed AUR helper A
|
||||||
pass-coffin A password store extension that hides data inside a signed and encrypted coffin A
|
pass-coffin A password store extension that hides data inside a signed and encrypted coffin A
|
||||||
pass-ssh A pass extension that creates ssh keys with an automatically generated passphrases stored in pass and outputs the public key using fzf or rofi A
|
pass-ssh A pass extension that creates ssh keys with an automatically generated passphrases stored in pass and outputs the public key using fzf or rofi A
|
||||||
pavucontrol PulseAudio Volume Control R
|
pavucontrol PulseAudio Volume Control R
|
||||||
|
pbzip2 Parallel implementation of the bzip2 block-sorting file compressor R
|
||||||
pdfjs PDF reader in javascript R
|
pdfjs PDF reader in javascript R
|
||||||
pdftk Command-line tool for working with PDFs R
|
pdftk Command-line tool for working with PDFs R
|
||||||
peek Simple screen recorder with an easy to use interface R
|
peek Simple screen recorder with an easy to use interface R
|
||||||
perf Linux kernel performance auditing tool R
|
perf Linux kernel performance auditing tool R
|
||||||
perl-authen-sasl Perl/CPAN Module Authen::SASL : SASL authentication framework R
|
perl-authen-sasl Perl/CPAN Module Authen::SASL : SASL authentication framework R
|
||||||
|
pigz Parallel implementation of the gzip file compressor R
|
||||||
pipewire-alsa Low-latency audio/video router and processor - ALSA configuration R
|
pipewire-alsa Low-latency audio/video router and processor - ALSA configuration R
|
||||||
playerctl mpris media player controller and lib for spotify, vlc, audacious, bmp, xmms2, and others. R
|
playerctl mpris media player controller and lib for spotify, vlc, audacious, bmp, xmms2, and others. R
|
||||||
|
podman Tool and library for running OCI-based containers in pods R
|
||||||
powertop A tool to diagnose issues with power consumption and power management R
|
powertop A tool to diagnose issues with power consumption and power management R
|
||||||
prettier An opinionated code formatter for JS, JSON, CSS, YAML and much more R
|
prettier An opinionated code formatter for JS, JSON, CSS, YAML and much more R
|
||||||
protonvpn Official ProtonVPN metapackage that installs protonvpn-gui and protonvpn-cli, maintained by the ProtonVPN team. A
|
protonvpn Official ProtonVPN metapackage that installs protonvpn-gui and protonvpn-cli, maintained by the ProtonVPN team. A
|
||||||
|
ptpython Python REPL build on top of prompt_toolkit A
|
||||||
pulsemixer CLI and curses mixer for pulseaudio R
|
pulsemixer CLI and curses mixer for pulseaudio R
|
||||||
pv A terminal-based tool for monitoring the progress of data through a pipeline. R
|
pv A terminal-based tool for monitoring the progress of data through a pipeline. R
|
||||||
pyright Type checker for the Python language R
|
pyright Type checker for the Python language R
|
||||||
|
@ -223,6 +231,8 @@ python-pyqt6-datavisualization Python bindings for QtDataVisualization R
|
||||||
python-pyqt6-networkauth Python bindings for QtNetworkAuth R
|
python-pyqt6-networkauth Python bindings for QtNetworkAuth R
|
||||||
python-readability-lxml Fast html to text parser (article readability tool) python library R
|
python-readability-lxml Fast html to text parser (article readability tool) python library R
|
||||||
python-slugify A Python slugify application that handles unicode R
|
python-slugify A Python slugify application that handles unicode R
|
||||||
|
python-tasklib Python library for interacting with taskwarrior databases R
|
||||||
|
qemu-base A basic QEMU setup for headless environments R
|
||||||
qt5-wayland Provides APIs for Wayland R
|
qt5-wayland Provides APIs for Wayland R
|
||||||
qt5-xmlpatterns Support for XPath, XQuery, XSLT and XML schema validation R
|
qt5-xmlpatterns Support for XPath, XQuery, XSLT and XML schema validation R
|
||||||
qt6-svg Classes for displaying the contents of SVG files R
|
qt6-svg Classes for displaying the contents of SVG files R
|
||||||
|
@ -232,6 +242,7 @@ quarto-cli-bin An open-source scientific and technical publishing system built o
|
||||||
qutebrowser A keyboard-driven, vim-like browser based on PyQt5 R
|
qutebrowser A keyboard-driven, vim-like browser based on PyQt5 R
|
||||||
redshift Adjusts the color temperature of your screen according to your surroundings. R
|
redshift Adjusts the color temperature of your screen according to your surroundings. R
|
||||||
refind An EFI boot manager R
|
refind An EFI boot manager R
|
||||||
|
refind-btrfs Generate rEFInd manual boot stanzas from Btrfs snapshots A
|
||||||
reflector A Python 3 module and script to retrieve and filter the latest Pacman mirror list. R
|
reflector A Python 3 module and script to retrieve and filter the latest Pacman mirror list. R
|
||||||
remind A sophisticated calendar and alarm program. R
|
remind A sophisticated calendar and alarm program. R
|
||||||
remmina remote desktop client written in GTK+ R
|
remmina remote desktop client written in GTK+ R
|
||||||
|
@ -248,12 +259,14 @@ shellcheck-bin Shell script analysis tool (binary release, static) A
|
||||||
shfmt Format shell programs R
|
shfmt Format shell programs R
|
||||||
slurp Select a region in a Wayland compositor R
|
slurp Select a region in a Wayland compositor R
|
||||||
smartmontools Control and monitor S.M.A.R.T. enabled ATA and SCSI Hard Drives R
|
smartmontools Control and monitor S.M.A.R.T. enabled ATA and SCSI Hard Drives R
|
||||||
|
snap-pac Pacman hooks that use snapper to create pre/post btrfs snapshots like openSUSE's YaST R
|
||||||
speedtest-cli Command line interface for testing internet bandwidth using speedtest.net R
|
speedtest-cli Command line interface for testing internet bandwidth using speedtest.net R
|
||||||
sshfs FUSE client based on the SSH File Transfer Protocol R
|
sshfs FUSE client based on the SSH File Transfer Protocol R
|
||||||
stow Manage installation of multiple softwares in the same directory tree R
|
stow Manage installation of multiple softwares in the same directory tree R
|
||||||
surfraw Shell Users' Revolutionary Front Rage Against the Web R
|
surfraw Shell Users' Revolutionary Front Rage Against the Web R
|
||||||
swaybg Wallpaper tool for Wayland compositors R
|
swaybg Wallpaper tool for Wayland compositors R
|
||||||
systemd-sysvcompat sysvinit compat for systemd R
|
swayidle Idle management daemon for Wayland R
|
||||||
|
swww Efficient animated wallpaper daemon for wayland, controlled at runtime. A
|
||||||
task-spooler Queue up tasks from the shell for batch execution A
|
task-spooler Queue up tasks from the shell for batch execution A
|
||||||
taskopen Script for taking notes and open urls with taskwarrior A
|
taskopen Script for taking notes and open urls with taskwarrior A
|
||||||
tasksh A shell command that wraps Taskwarrior commands A
|
tasksh A shell command that wraps Taskwarrior commands A
|
||||||
|
@ -261,14 +274,12 @@ tea A command line tool to interact with Gitea servers R
|
||||||
tex-gyre-fonts Substitute PostScript fonts in OpenType format R
|
tex-gyre-fonts Substitute PostScript fonts in OpenType format R
|
||||||
texlab A cross-platform implementation of the Language Server Protocol for LaTeX. R
|
texlab A cross-platform implementation of the Language Server Protocol for LaTeX. R
|
||||||
thermald The Linux Thermal Daemon program from 01.org R
|
thermald The Linux Thermal Daemon program from 01.org R
|
||||||
tigervnc Suite of VNC servers and clients. Based on the VNC 4 branch of TightVNC. R
|
|
||||||
timew Timewarrior, A command line time tracking application R
|
timew Timewarrior, A command line time tracking application R
|
||||||
timg Terminal Image and Video Viewer A
|
timg Terminal Image and Video Viewer A
|
||||||
tlp Linux Advanced Power Management R
|
tlp Linux Advanced Power Management R
|
||||||
tmux A terminal multiplexer R
|
tmux A terminal multiplexer R
|
||||||
toilet free replacement for the FIGlet utility. A
|
toilet free replacement for the FIGlet utility. A
|
||||||
tomb Crypto Undertaker, a simple tool to manage encrypted storage R
|
topgrade-bin Invoke the upgrade procedure of multiple package managers A
|
||||||
topgrade Invoke the upgrade procedure of multiple package managers R
|
|
||||||
traceroute Tracks the route taken by packets over an IP network R
|
traceroute Tracks the route taken by packets over an IP network R
|
||||||
translate-shell A command-line interface and interactive shell for Google Translate R
|
translate-shell A command-line interface and interactive shell for Google Translate R
|
||||||
transmission-qt Fast, easy, and free BitTorrent client (Qt GUI) R
|
transmission-qt Fast, easy, and free BitTorrent client (Qt GUI) R
|
||||||
|
@ -297,7 +308,6 @@ vim-language-server VimScript language server A
|
||||||
virtualbox Powerful x86 virtualization for enterprise as well as home use R
|
virtualbox Powerful x86 virtualization for enterprise as well as home use R
|
||||||
virtualbox-guest-iso The official VirtualBox Guest Additions ISO image R
|
virtualbox-guest-iso The official VirtualBox Guest Additions ISO image R
|
||||||
visidata Terminal spreadsheet multitool for discovering and arranging data R
|
visidata Terminal spreadsheet multitool for discovering and arranging data R
|
||||||
vulkan-intel Intel's Vulkan mesa driver R
|
|
||||||
wavemon Ncurses-based monitoring application for wireless network devices R
|
wavemon Ncurses-based monitoring application for wireless network devices R
|
||||||
waybar Highly customizable Wayland bar for Sway and Wlroots based compositors R
|
waybar Highly customizable Wayland bar for Sway and Wlroots based compositors R
|
||||||
waylock A simple screenlocker for wayland compositors R
|
waylock A simple screenlocker for wayland compositors R
|
||||||
|
@ -307,6 +317,7 @@ wezterm A GPU-accelerated cross-platform terminal emulator and multiplexer R
|
||||||
wget Network utility to retrieve files from the Web R
|
wget Network utility to retrieve files from the Web R
|
||||||
wireguard-tools next generation secure network tunnel - tools for configuration R
|
wireguard-tools next generation secure network tunnel - tools for configuration R
|
||||||
wireless_tools Tools allowing to manipulate the Wireless Extensions R
|
wireless_tools Tools allowing to manipulate the Wireless Extensions R
|
||||||
|
wlopm Wayland output power management. A
|
||||||
wpa_actiond Daemon that connects to wpa_supplicant and handles connect and disconnect events A
|
wpa_actiond Daemon that connects to wpa_supplicant and handles connect and disconnect events A
|
||||||
wtype xdotool type for wayland R
|
wtype xdotool type for wayland R
|
||||||
xdg-user-dirs Manage user directories like ~/Desktop and ~/Music R
|
xdg-user-dirs Manage user directories like ~/Desktop and ~/Music R
|
||||||
|
@ -314,7 +325,7 @@ xsv A CLI for indexing, slicing, analyzing, splitting and joining CSV files R
|
||||||
yaml-language-server YAML Language Server R
|
yaml-language-server YAML Language Server R
|
||||||
yarn Fast, reliable, and secure dependency management R
|
yarn Fast, reliable, and secure dependency management R
|
||||||
youtube-dl A command-line program to download videos from YouTube.com and a few more sites R
|
youtube-dl A command-line program to download videos from YouTube.com and a few more sites R
|
||||||
yt-dlp-git A youtube-dl fork with additional features and fixes (git) A
|
yt-dlp A youtube-dl fork with additional features and fixes R
|
||||||
ytfzf A POSIX script to find and watch youtube videos from the terminal R
|
ytfzf A POSIX script to find and watch youtube videos from the terminal R
|
||||||
zathura-cb Adds comic book support to zathura R
|
zathura-cb Adds comic book support to zathura R
|
||||||
zathura-djvu DjVu support for Zathura R
|
zathura-djvu DjVu support for Zathura R
|
||||||
|
@ -322,5 +333,5 @@ zathura-pdf-mupdf PDF support for Zathura (MuPDF backend) (Supports PDF, ePub, a
|
||||||
zotero-bin Zotero Standalone. Is a free, easy-to-use tool to help you collect, organize, cite, and share your research sources. A
|
zotero-bin Zotero Standalone. Is a free, easy-to-use tool to help you collect, organize, cite, and share your research sources. A
|
||||||
zq Tooling for super-structured data A
|
zq Tooling for super-structured data A
|
||||||
zsh-autosuggestions Fish-like autosuggestions for zsh R
|
zsh-autosuggestions Fish-like autosuggestions for zsh R
|
||||||
zsh-fast-syntax-highlighting-git Optimized and extended zsh-syntax-highlighting R
|
zsh-fast-syntax-highlighting Optimized and extended zsh-syntax-highlighting A
|
||||||
zsh-pure-prompt Pretty, minimal and fast ZSH prompt A
|
zsh-pure-prompt Pretty, minimal and fast ZSH prompt A
|
||||||
|
|
Can't render this file because it contains an unexpected character in line 288 and column 64.
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env sh
|
|
||||||
# Ensure the neomutt cache directories exist
|
|
||||||
|
|
||||||
[ -d "${XDG_CACHE_HOME:-~/.cache}/neomutt" ] || mkdir -p "${XDG_CACHE_HOME:-~/.cache}/neomutt/hcache"
|
|
|
@ -1,15 +0,0 @@
|
||||||
# e-mail module
|
|
||||||
|
|
||||||
[aerc](https://aerc-mail.org/) - terminal mail client
|
|
||||||
[isync](https://isync.sourceforge.io/mbsync.html) - mirror your Imapped mail directory locally with two way synchronization
|
|
||||||
[notmuch](https://notmuchmail.org/) - index and search your mail
|
|
||||||
|
|
||||||
The current mail setup uses `mbsync` (from the isync project) to locally mirror the GMail imap folder.
|
|
||||||
It, as of now, needs to be manually run by invoking `mbsync gmail` -- which expects your username and password to reside in a [`pass`](/pass) accessible file called `misc/aerc-gmail-app-password`.
|
|
||||||
In other words --- this is very specific to my setup and if transferring the options, please customize to your needs.
|
|
||||||
|
|
||||||
Then, `notmuch` can be run on the local maildir to generate and indexed full-text search engine.
|
|
||||||
Right now, `notmuch` can only be used through its cli, it is not yet connected to `aerc`.
|
|
||||||
|
|
||||||
`aerc` picks up the maildir created by `mbsync` in `~/documents/mail` and works on it.
|
|
||||||
`mbsync` syncs any changes made back to the remote imap directory.
|
|
|
@ -27,10 +27,9 @@ require("packer").startup(function()
|
||||||
-- vim plugs
|
-- vim plugs
|
||||||
-- essential
|
-- essential
|
||||||
use {
|
use {
|
||||||
'marty-oehme/Navigator.nvim',
|
'numToStr/Navigator.nvim',
|
||||||
branch = 'feat/add-wezterm-navigation',
|
|
||||||
config = function() require('Navigator').setup() end
|
config = function() require('Navigator').setup() end
|
||||||
} -- allow seamless navigation between vim buffers and tmux splits
|
} -- allow seamless navigation between vim buffers and tmux/wezterm splits
|
||||||
use 'jeffkreeftmeijer/vim-numbertoggle' -- toggles numbers to absolute for all buffers but the current which is relative
|
use 'jeffkreeftmeijer/vim-numbertoggle' -- toggles numbers to absolute for all buffers but the current which is relative
|
||||||
use 'RRethy/vim-illuminate' -- highlight other occurences of the word under cursor
|
use 'RRethy/vim-illuminate' -- highlight other occurences of the word under cursor
|
||||||
use 'ojroques/vim-oscyank' -- yank from *anywhere* (even ssh session) to clipboard, using :OSCYank
|
use 'ojroques/vim-oscyank' -- yank from *anywhere* (even ssh session) to clipboard, using :OSCYank
|
||||||
|
|
|
@ -9,7 +9,7 @@ PassCmd "pass show misc/gmail-app-password | head -n1"
|
||||||
# PassCmd "gpg2 -q --for-your-eyes-only --no-tty -d ~/.mailpass.gpg"
|
# PassCmd "gpg2 -q --for-your-eyes-only --no-tty -d ~/.mailpass.gpg"
|
||||||
#
|
#
|
||||||
# Use SSL
|
# Use SSL
|
||||||
SSLType IMAPS
|
TLSType IMAPS
|
||||||
CertificateFile /etc/ssl/certs/ca-certificates.crt
|
CertificateFile /etc/ssl/certs/ca-certificates.crt
|
||||||
# Throttle simultaneous access to make google happy
|
# Throttle simultaneous access to make google happy
|
||||||
PipelineDepth 60
|
PipelineDepth 60
|
16
office/.config/khal/config
Normal file
16
office/.config/khal/config
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
[calendars]
|
||||||
|
|
||||||
|
[[calendar_local]]
|
||||||
|
path = ~/documents/calendars/*
|
||||||
|
type = discover
|
||||||
|
color = auto
|
||||||
|
|
||||||
|
[locale]
|
||||||
|
timeformat = %H:%M
|
||||||
|
dateformat = %Y-%m-%d
|
||||||
|
longdateformat = %Y-%m-%d
|
||||||
|
datetimeformat = %Y-%m-%d %H:%M
|
||||||
|
longdatetimeformat = %Y-%m-%d %H:%M
|
||||||
|
|
||||||
|
[default]
|
||||||
|
default_calendar = Activities
|
|
@ -5,11 +5,31 @@ bind index,pager g noop # don't send group-replies with g
|
||||||
bind index gg first-entry
|
bind index gg first-entry
|
||||||
bind index G last-entry
|
bind index G last-entry
|
||||||
bind index <space> collapse-thread
|
bind index <space> collapse-thread
|
||||||
bind index,pager \CF next-page
|
|
||||||
bind index,pager \CB previous-page
|
# view manipulation
|
||||||
bind index,pager N search-opposite # vim-like search
|
bind attach,browser,index,pager \CF next-page
|
||||||
|
bind attach,browser,index,pager \CB previous-page
|
||||||
|
bind attach,browser,index,pager \Cu half-up
|
||||||
|
bind attach,browser,index,pager \Cd half-down
|
||||||
|
bind browser,index,pager \Ce next-line
|
||||||
|
bind browser,index,pager \Cy previous-line
|
||||||
|
|
||||||
bind index s toggle-new
|
bind index s toggle-new
|
||||||
|
bind index S set-flag
|
||||||
macro index \CS "T~U<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" "mark all messages as read"
|
macro index \CS "T~U<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" "mark all messages as read"
|
||||||
|
bind index,pager w display-toggle-weed
|
||||||
|
|
||||||
|
# Thread manipulation
|
||||||
|
bind pager d noop
|
||||||
|
bind index,pager dd delete-message
|
||||||
|
bind index,pager dT delete-thread
|
||||||
|
bind index,pager dt delete-subthread
|
||||||
|
bind pager,index gt next-thread
|
||||||
|
bind pager,index gT previous-thread
|
||||||
|
bind pager,index za collapse-thread
|
||||||
|
bind pager,index zA collapse-all
|
||||||
|
bind pager,index zr reconstruct-thread
|
||||||
|
bind pager,index zR entire-thread
|
||||||
|
|
||||||
# Email completion bindings
|
# Email completion bindings
|
||||||
bind editor <Tab> complete-query
|
bind editor <Tab> complete-query
|
||||||
|
@ -33,7 +53,7 @@ bind index,pager <up> sidebar-prev
|
||||||
bind index,pager <right> sidebar-open
|
bind index,pager <right> sidebar-open
|
||||||
# search navigation
|
# search navigation
|
||||||
macro index a "<limit>all\n" "show all messages (undo limit)"
|
macro index a "<limit>all\n" "show all messages (undo limit)"
|
||||||
# notmuch search navigation
|
bind browser,index,pager N search-opposite # vim-like search
|
||||||
bind index \\ vfolder-from-query # notmuch search
|
bind index \\ vfolder-from-query # notmuch search
|
||||||
# pager navigation
|
# pager navigation
|
||||||
bind pager,attach h exit
|
bind pager,attach h exit
|
||||||
|
@ -48,14 +68,20 @@ bind compose p postpone-message
|
||||||
macro compose M "F pandoc -s -f markdown -t html \ny^T^Utext/html; charset=UTF-8\n" "Convert from MD to HTML"
|
macro compose M "F pandoc -s -f markdown -t html \ny^T^Utext/html; charset=UTF-8\n" "Convert from MD to HTML"
|
||||||
|
|
||||||
# since we unbound the original g
|
# since we unbound the original g
|
||||||
bind index,pager R group-reply
|
bind index,pager r noop # to avoid accidentally sending replies
|
||||||
|
bind index,pager rr group-reply
|
||||||
|
bind index,pager ro reply
|
||||||
# open urls found in the e-mail
|
# open urls found in the e-mail
|
||||||
macro index,pager \CU "|urlview<enter>" "call urlview to open links"
|
macro index,pager \CU "|urlview<enter>" "call urlview to open links"
|
||||||
|
|
||||||
# Refresh far imap email
|
# Refresh far imap email
|
||||||
macro index O "<sync-mailbox><shell-escape>export MBSYNC_PRE=true; mail-check<enter><sync-mailbox>" "refresh all e-mail"
|
macro index O "<sync-mailbox><shell-escape>export MBSYNC_PRE=true; sync-mail<enter><sync-mailbox>" "refresh all e-mail"
|
||||||
macro index o "<sync-mailbox><shell-escape>export MBSYNC_PRE=true; mail-check gmail-inbox<enter><sync-mailbox>" "refresh inbox e-mail"
|
macro index o "<sync-mailbox><shell-escape>export MBSYNC_PRE=true; sync-mail gmail-inbox<enter><sync-mailbox>" "refresh inbox e-mail"
|
||||||
|
|
||||||
# Saner copy/move dialogs
|
# Saner copy/move dialogs
|
||||||
macro index C "<copy-message>?<toggle-mailboxes>" "copy a message to a mailbox"
|
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"
|
macro index M "<save-message>?<toggle-mailboxes>" "move a message to a mailbox"
|
||||||
|
|
||||||
|
# Send mail to taskwarrior
|
||||||
|
macro index,pager T "<pipe-message>mutt2task -c -d -t<enter>" "add mail as task to taskwarrior with custom description and tags"
|
||||||
|
macro index,pager t "<pipe-message>mutt2task -c<enter>" "add mail as task to taskwarrior"
|
27
office/.config/sh/alias.d/calcurse-vdir.sh
Normal file
27
office/.config/sh/alias.d/calcurse-vdir.sh
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
#
|
||||||
|
# Wraps around the calcurse invocation and syncs calendar data
|
||||||
|
# to local vdir - given by default below.
|
||||||
|
#
|
||||||
|
# For now ONLY PROVIDES ONE-WAY Synchronization, see below.
|
||||||
|
|
||||||
|
# The path in which *the calendars* reside (i.e. toplevel with access to all paths)
|
||||||
|
CAL_PATH="$HOME/documents/calendars"
|
||||||
|
|
||||||
|
calcurse() {
|
||||||
|
find "$CAL_PATH" -maxdepth 1 -type d -exec calcurse-vdir import {} \;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Enable two-way sync. One issue is that calcurse would sync everything
|
||||||
|
# into the top-level path (or the selected calendar path) since it makes
|
||||||
|
# not the same differentiation as the vdir between calendars.
|
||||||
|
# FIXME Not sure how to resolve currently.
|
||||||
|
#
|
||||||
|
# The below works as a simple two-way synchronization on exiting calcurse.
|
||||||
|
# To function the invocation has to be turned from a function above to an
|
||||||
|
# executable shell-script file instead.
|
||||||
|
# trap 'calcurse_export' 0
|
||||||
|
#
|
||||||
|
# calcurse_export() {
|
||||||
|
# calcurse-vdir export "$CAL_PATH"
|
||||||
|
# }
|
|
@ -1,7 +1,5 @@
|
||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
alias taskopen='taskopen --config=${XDG_CONFIG_HOME:-~/.config}/task/taskopenrc'
|
|
||||||
|
|
||||||
# invoking t starts the task shell
|
# invoking t starts the task shell
|
||||||
# passing arguments along passes them straight through to taskwarrior instead
|
# passing arguments along passes them straight through to taskwarrior instead
|
||||||
t() {
|
t() {
|
||||||
|
@ -17,3 +15,21 @@ t() {
|
||||||
# this is not very pretty and not super portable (needs ps) but
|
# this is not very pretty and not super portable (needs ps) but
|
||||||
# works for now. from here: https://unix.stackexchange.com/a/72564/414758
|
# works for now. from here: https://unix.stackexchange.com/a/72564/414758
|
||||||
if [ "$(ps -p $$ -o comm --no-headers)" = "zsh" ]; then compdef t=task; fi
|
if [ "$(ps -p $$ -o comm --no-headers)" = "zsh" ]; then compdef t=task; fi
|
||||||
|
|
||||||
|
# Make taskopen XDG conforming. If changing here, also change in taskrc alias.
|
||||||
|
alias taskopen='taskopen --config=${XDG_CONFIG_HOME:-~/.config}/task/taskopenrc'
|
||||||
|
|
||||||
|
alias ta="task add"
|
||||||
|
alias tal="task log"
|
||||||
|
alias tan="task annotate"
|
||||||
|
|
||||||
|
alias tn="task next +READY"
|
||||||
|
alias tun="task next urgency \> 4"
|
||||||
|
|
||||||
|
alias tra="task active"
|
||||||
|
alias trw="task end.after:today-1wk completed"
|
||||||
|
|
||||||
|
alias tad="task +ACTIVE done"
|
||||||
|
alias tas="task +ACTIVE stop"
|
||||||
|
|
||||||
|
alias to="task open"
|
4
office/.config/sh/env.d/neomutt-create-cache-dir.sh
Normal file
4
office/.config/sh/env.d/neomutt-create-cache-dir.sh
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
# Ensure the neomutt cache directories exist
|
||||||
|
|
||||||
|
[ -d "${XDG_CACHE_HOME:-$HOME/.cache}/neomutt" ] || mkdir -p "${XDG_CACHE_HOME:-$HOME/.cache}/neomutt/hcache"
|
6
office/.config/sh/env.d/taskwarrior-ensure-files.sh
Normal file
6
office/.config/sh/env.d/taskwarrior-ensure-files.sh
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
# Ensure necessary taskwarrior includes exist
|
||||||
|
|
||||||
|
[ -e "${XDG_CONFIG_HOME:-$HOME/.config}/task/contexts" ] || touch "${XDG_CONFIG_HOME:-$HOME/.config}/task/contexts"
|
||||||
|
[ -e "${XDG_CONFIG_HOME:-$HOME/.config}/task/task-sync.rc" ] || touch "${XDG_CONFIG_HOME:-$HOME/.config}/task/task-sync.rc"
|
||||||
|
[ -e "${XDG_CONFIG_HOME:-$HOME/.config}/task/colorscheme" ] || touch "${XDG_CONFIG_HOME:-$HOME/.config}/task/colorscheme"
|
20
office/.config/task/taskopenrc
Normal file
20
office/.config/task/taskopenrc
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
[General]
|
||||||
|
EDITOR = nvim
|
||||||
|
taskbin = task
|
||||||
|
path_ext = /usr/share/taskopen/scripts
|
||||||
|
|
||||||
|
[Actions]
|
||||||
|
note_custom_ext.regex = "^Note\\.(.*)"
|
||||||
|
note_custom_ext.command = "$EDITOR ${XDG_DATA_HOME:-~/.local/share}/task/notes/$UUID.$LAST_MATCH"
|
||||||
|
|
||||||
|
notes.regex = "^Note"
|
||||||
|
notes.command = "$EDITOR ${XDG_DATA_HOME:-~/.local/share}/task/notes/$UUID.md"
|
||||||
|
|
||||||
|
links.regex = "^https?://"
|
||||||
|
links.command = "xdg-open $FILE"
|
||||||
|
|
||||||
|
mail.regex = "^<.*@.*>$"
|
||||||
|
mail.command = "notmuch show mid:${FILE:1:-1}"
|
||||||
|
|
||||||
|
[CLI]
|
||||||
|
|
|
@ -23,6 +23,7 @@ weekstart=monday
|
||||||
|
|
||||||
# Make daily burndown default alias
|
# Make daily burndown default alias
|
||||||
alias.burndown=burndown.daily
|
alias.burndown=burndown.daily
|
||||||
|
alias.open=exec taskopen "--config=${XDG_CONFIG_HOME:-$HOME/.config}/task/taskopenrc"
|
||||||
|
|
||||||
# Sort the columns a little differently
|
# Sort the columns a little differently
|
||||||
active.indicator=>
|
active.indicator=>
|
1
office/.config/urlview/config
Normal file
1
office/.config/urlview/config
Normal file
|
@ -0,0 +1 @@
|
||||||
|
COMMAND xdg-open
|
39
office/.config/vdirsyncer/config
Normal file
39
office/.config/vdirsyncer/config
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
[general]
|
||||||
|
status_path = "~/.local/vdirsyncer/status/"
|
||||||
|
|
||||||
|
[pair calendar]
|
||||||
|
a = "calendar_local"
|
||||||
|
b = "calendar_nextcloud"
|
||||||
|
collections = ["from a", "from b"]
|
||||||
|
metadata = ["displayname", "color"]
|
||||||
|
conflict_resolution = "b wins"
|
||||||
|
|
||||||
|
[storage calendar_local]
|
||||||
|
type = "filesystem"
|
||||||
|
path = "~/documents/calendars/"
|
||||||
|
fileext = ".ics"
|
||||||
|
|
||||||
|
[storage calendar_nextcloud]
|
||||||
|
type = "caldav"
|
||||||
|
url = "https://files.martyoeh.me/remote.php/dav/"
|
||||||
|
username.fetch = ["shell", "pass personal/files.martyoeh.me/me | awk -F': ' '{print $2}'"]
|
||||||
|
password.fetch = ["shell", "pass personal/files.martyoeh.me/me | head -n1"]
|
||||||
|
|
||||||
|
[pair contacts]
|
||||||
|
a = "contacts_local"
|
||||||
|
b = "contacts_nextcloud"
|
||||||
|
collections = ["from a", "from b"]
|
||||||
|
metadata = ["displayname", "description"]
|
||||||
|
conflict_resolution = "b wins"
|
||||||
|
|
||||||
|
[storage contacts_local]
|
||||||
|
type = "filesystem"
|
||||||
|
path = "~/documents/contacts/"
|
||||||
|
fileext = ".vcf"
|
||||||
|
|
||||||
|
[storage contacts_nextcloud]
|
||||||
|
type = "carddav"
|
||||||
|
url = "https://files.martyoeh.me/remote.php/dav/"
|
||||||
|
username.fetch = ["shell", "pass personal/files.martyoeh.me/me | awk -F': ' '{print $2}'"]
|
||||||
|
password.fetch = ["shell", "pass personal/files.martyoeh.me/me | head -n1"]
|
||||||
|
|
100
office/.local/bin/mutt2task
Executable file
100
office/.local/bin/mutt2task
Executable file
|
@ -0,0 +1,100 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
"""
|
||||||
|
Creates a new task with corresponding description and tags.
|
||||||
|
|
||||||
|
Description and tags can be supplied via commandline through `-d` and `-t` options,
|
||||||
|
or interactively by using the options without supplying a string for them. E.g.:
|
||||||
|
|
||||||
|
`mutt2task` => task: Reply to <subject> from <sender>
|
||||||
|
`mutt2task -d "hello" -t one two` => task: hello +one +two
|
||||||
|
`mutt2task -d -t` => asks you interactively for description and tags
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import email
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
|
||||||
|
from tasklib import TaskWarrior, Task
|
||||||
|
|
||||||
|
|
||||||
|
def get_args():
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Creates a task with given message and annotates the task with message id"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-d",
|
||||||
|
"--description",
|
||||||
|
nargs="?",
|
||||||
|
const=True,
|
||||||
|
default=None,
|
||||||
|
help="Supply a description for the task. Use the option as a flag to supply description interactively.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-t",
|
||||||
|
"--tags",
|
||||||
|
nargs="*",
|
||||||
|
help="Supply any number of tags for the task. Use the option as a flag to supply tags interactively.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-c",
|
||||||
|
"--clean",
|
||||||
|
action="store_true",
|
||||||
|
help="Remove subject annoyances like RE FWD on a best-effort basis.",
|
||||||
|
)
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
args = get_args()
|
||||||
|
|
||||||
|
def clean_subject(subject):
|
||||||
|
to_remove = ["fwd", "re", "fw", "aw", "wg", "sv", "vs", "ref", "tr"]
|
||||||
|
for abbrev in to_remove:
|
||||||
|
patt = re.compile(r"^{}(?: |:)\s*".format(abbrev), re.IGNORECASE)
|
||||||
|
subject = patt.sub("", subject)
|
||||||
|
return subject
|
||||||
|
|
||||||
|
|
||||||
|
def get_task_description(message):
|
||||||
|
subject = clean_subject(message["subject"]) if args.clean else message["subject"]
|
||||||
|
description = 'Reply to "{}" from {}'.format(
|
||||||
|
subject, message["from"].split(" <")[0]
|
||||||
|
)
|
||||||
|
# automatically set description if one provided
|
||||||
|
if args.description and isinstance(args.description, str):
|
||||||
|
description = args.description
|
||||||
|
# otherwise let user enter one if option has been passed
|
||||||
|
elif args.description:
|
||||||
|
inp = input("Enter task description or press enter for default: ")
|
||||||
|
description = inp if inp else description
|
||||||
|
return description
|
||||||
|
|
||||||
|
|
||||||
|
def get_task_tags():
|
||||||
|
tags = ["mail"]
|
||||||
|
if args.tags and len(args.tags) > 0:
|
||||||
|
tags = sum([tag.split(" ") for tag in args.tags], [])
|
||||||
|
elif args.tags is not None and len(args.tags) == 0:
|
||||||
|
inp = input("Enter task tags or press enter for default: ")
|
||||||
|
tags = inp.split(" ") if inp else tags
|
||||||
|
return tags
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
try:
|
||||||
|
message = email.message_from_file(sys.stdin)
|
||||||
|
if not message:
|
||||||
|
print("Something went wrong, cannot parse mail.")
|
||||||
|
sys.exit(1)
|
||||||
|
tw = TaskWarrior("~/.local/share/task", create=False)
|
||||||
|
sys.stdin = open("/dev/tty") # make user able to add input again
|
||||||
|
task = Task(tw, description=get_task_description(message), tags=get_task_tags())
|
||||||
|
task.save()
|
||||||
|
task.add_annotation(message['message-id'])
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
42
office/README.md
Normal file
42
office/README.md
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# office module
|
||||||
|
|
||||||
|
neomutt - terminal mail client
|
||||||
|
[mbsync](https://isync.sourceforge.io/mbsync.html) - mirror your Imapped mail directory locally with two-way synchronization
|
||||||
|
[notmuch](https://notmuchmail.org/) - index and search your mail
|
||||||
|
msmtp - send mail through shell commands
|
||||||
|
imapfilter - rule-based filtering engine for your incoming mail
|
||||||
|
vdirsyncer - mirror your contacts and calendars locally with two-way synchronization
|
||||||
|
khal - terminal vdir-compatible calendar client
|
||||||
|
calcurse - a pretty terminal calendar client, but not very vdir compatible
|
||||||
|
taskwarrior - a super flexible terminal to-do list
|
||||||
|
|
||||||
|
The module has three areas of concern: a functioning mail suite (receiving, sending, searching), to-do management, and contacts and calendaring.
|
||||||
|
Take care that most of the credential/account setup of course is highly specific to my setup and should be changed as required.
|
||||||
|
|
||||||
|
## mail
|
||||||
|
|
||||||
|
The current mail setup uses `mbsync` (from the isync project) to locally mirror the GMail imap folder.
|
||||||
|
It is run through a `sync-mail` script which can invoke pre- and post-sync hooks
|
||||||
|
(e.g. run your incoming mail through filters as soon as they arrive or ingest them into full-text search engines).[^1]
|
||||||
|
The sync script also automatically unlocks any pass directory so that credentials can be put into their respective applications and the directory closes again after use.
|
||||||
|
`msmtp` is used for mail sending by neomutt (and git if using git send-email).
|
||||||
|
`neomutt` then picks up the mail directory filled by `mbsync` and lets you browse it, respond to mail or create new ones.
|
||||||
|
|
||||||
|
[^1]: That being said, the script is a little dusty and could probably use a little overhaul. It *works* but could be more fantastic I feel.
|
||||||
|
|
||||||
|
## calendar and contacts
|
||||||
|
|
||||||
|
For calendars and contacts, the wonderful `vdirsyncer` is used to sync everything from a remote Dav client (hard-coded to my server currently) to the local directories in documents.
|
||||||
|
This is then picked up by `khal` to allow you to browse and edit your events, and create new ones - all of which in turn ends up remotely.
|
||||||
|
|
||||||
|
You can also browse your events locally with `calcurse` which will import them on each startup, but will not sync back yet;
|
||||||
|
meaning, any changes you do through the application will not reflect themselves back on any of your other connected devices unfortunately.
|
||||||
|
|
||||||
|
## tasks
|
||||||
|
|
||||||
|
Task management is done through the wonderful `taskwarrior`. I mostly use it as-is from the commandline, with some personal tweaks to urgencies and task dependencies.
|
||||||
|
|
||||||
|
The goal here is to integrate taskwarrior relatively tightly into mail
|
||||||
|
(e.g. receiving a mail and turning it into a task, then being able to go back from the task to the respective mail)
|
||||||
|
and calendaring (turning a to-do into a calendar event, and creating to-dos for individual events right from the calendar),
|
||||||
|
but those goals are still a ways off and the suite is working fine enough for now.
|
|
@ -15,7 +15,9 @@ c.aliases["add-shaarli"] = "spawn --userscript shaarli_add.sh"
|
||||||
c.aliases["send-to-archive"] = "open https://web.archive.org/web/{url}"
|
c.aliases["send-to-archive"] = "open https://web.archive.org/web/{url}"
|
||||||
|
|
||||||
# save current page to pdf file
|
# save current page to pdf file
|
||||||
c.aliases["save_to_pdf"] = "spawn --userscript pagetopdf.sh"
|
c.aliases["save-to-pdf"] = "spawn --userscript pagetopdf.sh"
|
||||||
|
# open sci-hub pdf for doi
|
||||||
|
c.aliases["send-to-scihub"] = "spawn --userscript doi2scihub"
|
||||||
|
|
||||||
# translate current page / selection with google translate
|
# translate current page / selection with google translate
|
||||||
c.aliases["translate-page-google"] = "spawn --userscript translate_google.sh"
|
c.aliases["translate-page-google"] = "spawn --userscript translate_google.sh"
|
||||||
|
@ -23,8 +25,17 @@ c.aliases[
|
||||||
"translate-selection-google"
|
"translate-selection-google"
|
||||||
] = "spawn --userscript translate_google.sh --text"
|
] = "spawn --userscript translate_google.sh --text"
|
||||||
|
|
||||||
|
# open the current page in more readable version
|
||||||
|
c.aliases["readable"] = "spawn --userscript readability"
|
||||||
|
|
||||||
# print picture of current url as qr code
|
# print picture of current url as qr code
|
||||||
c.aliases["show-qr"] = "spawn --userscript qr"
|
c.aliases["show-qr"] = "spawn --userscript qr"
|
||||||
|
|
||||||
# add a task of current page to taskwarrior
|
# add a task of current page to taskwarrior
|
||||||
c.aliases["taskadd"] = "spawn --userscript taskadd"
|
c.aliases["taskadd"] = "spawn --userscript taskadd"
|
||||||
|
|
||||||
|
# try to remove the cookie banner from a website
|
||||||
|
c.aliases["cookie-block"] = "spawn --userscript qute-cookie-block"
|
||||||
|
|
||||||
|
# open last downloads in dmenu-like
|
||||||
|
c.aliases["recent-downloads"] = "spawn --userscript open_download"
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
c.content.blocking.enabled = True
|
c.content.blocking.enabled = True
|
||||||
c.content.blocking.method = "both"
|
c.content.blocking.method = "both"
|
||||||
c.content.blocking.adblock.lists = [
|
c.content.blocking.adblock.lists = [
|
||||||
"http://www.malwaredomainlist.com/hostslist/hosts.txt",
|
"https://www.malwaredomainlist.com/hostslist/hosts.txt",
|
||||||
"http://someonewhocares.org/hosts/hosts",
|
"https://someonewhocares.org/hosts/hosts",
|
||||||
"http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext",
|
"https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext",
|
||||||
"https://secure.fanboy.co.nz/fanboy-cookiemonster.txt",
|
"https://secure.fanboy.co.nz/fanboy-cookiemonster.txt",
|
||||||
]
|
]
|
||||||
c.content.blocking.hosts.lists = [
|
c.content.blocking.hosts.lists = [
|
||||||
"http://winhelp2002.mvps.org/hosts.zip",
|
"https://winhelp2002.mvps.org/hosts.zip",
|
||||||
"http://malwaredomains.lehigh.edu/files/justdomains.zip",
|
"https://malwaredomains.lehigh.edu/files/justdomains.zip",
|
||||||
]
|
]
|
||||||
c.content.blocking.whitelist = ["piwik.org"]
|
c.content.blocking.whitelist = ["piwik.org"]
|
||||||
c.content.autoplay = False
|
c.content.autoplay = False
|
||||||
|
|
|
@ -60,13 +60,13 @@ config.bind(
|
||||||
)
|
)
|
||||||
# Download shortcuts
|
# Download shortcuts
|
||||||
config.bind(lleader + "dd", "download", mode="normal")
|
config.bind(lleader + "dd", "download", mode="normal")
|
||||||
config.bind(lleader + "dp", "save_to_pdf", mode="normal")
|
config.bind(lleader + "dp", "save-to-pdf", mode="normal")
|
||||||
|
|
||||||
# open last download
|
# open last download
|
||||||
config.bind("gD", "spawn --userscript open_download")
|
config.bind("gD", "recent-downloads", mode="normal")
|
||||||
|
|
||||||
config.bind('"w', "add-wallabag", mode="normal") # add current page to wallabag
|
config.bind('"w', "add-wallabag", mode="normal") # add current page to wallabag
|
||||||
config.bind(";w", "hint links userscript wallabag_add.sh") # add link to wallabag
|
config.bind(";w", "hint links run add-wallabag") # add link to wallabag
|
||||||
config.bind('"s', "add-shaarli", mode="normal")
|
config.bind('"s', "add-shaarli", mode="normal")
|
||||||
|
|
||||||
config.bind('"a', "send-to-archive", mode="normal")
|
config.bind('"a', "send-to-archive", mode="normal")
|
||||||
|
@ -76,7 +76,10 @@ config.bind('"T', "translate-selection-google", mode="normal")
|
||||||
|
|
||||||
config.bind('"q', "show-qr")
|
config.bind('"q', "show-qr")
|
||||||
|
|
||||||
config.bind(lleader + "r", "spawn --userscript readability")
|
config.bind('"p', "send-to-scihub", mode="normal") # view current page doi on scihub
|
||||||
|
config.bind(";p", "hint links run send-to-scihub") # view linked doi on scihub
|
||||||
|
|
||||||
|
config.bind(lleader + "r", "readable", mode="normal")
|
||||||
|
|
||||||
# set stylesheets for the browser to use
|
# set stylesheets for the browser to use
|
||||||
config.bind(
|
config.bind(
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from qutebrowser.api import interceptor
|
from qutebrowser.api import interceptor
|
||||||
|
|
||||||
c.url.searchengines = {
|
c.url.searchengines = {
|
||||||
"#sci": "https://sci-hub.do/{}",
|
"sci": "https://sci-hub.ru/{}",
|
||||||
"DEFAULT": "https://search.martyoeh.me/?q={}",
|
"DEFAULT": "https://search.martyoeh.me/?q={}",
|
||||||
"al": "https://wiki.archlinux.org/index.php/{}",
|
"al": "https://wiki.archlinux.org/index.php/{}",
|
||||||
"alt": "https://alternativeto.net/software/{}/?license=opensource",
|
"alt": "https://alternativeto.net/software/{}/?license=opensource",
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#consent-page > div > div > div > form > div.wizard-body > div.actions.couple > a"/>
|
||||||
|
<wait/>
|
||||||
|
<click element="#select-legit-all-purpose > span.toggleAll.toggle-accpet-all"/>
|
||||||
|
<click element="#consent-page > div > form > div.page-footer > div > div > button"/>
|
||||||
|
</block>
|
17160
qutebrowser/.local/share/qutebrowser/cookie-blockers/blocklist.txt
Normal file
17160
qutebrowser/.local/share/qutebrowser/cookie-blockers/blocklist.txt
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#yDmH0d > c-wiz > div > div > div.NIoIEf > div.G4njw > div.qqtRac > div > div > div > a"/>
|
||||||
|
<wait/>
|
||||||
|
<click element="#yDmH0d > c-wiz > div > div > div > div.VP4fnf > div:nth-child(3) > div.uScs5d > div > div.uScs5d > div:nth-child(1) > div > button"/>
|
||||||
|
<click element="#yDmH0d > c-wiz > div > div > div > div.VP4fnf > div:nth-child(4) > div.uScs5d > div > div.uScs5d > div:nth-child(1) > div > button"/>
|
||||||
|
<click element="#yDmH0d > c-wiz > div > div > div > div.VP4fnf > div:nth-child(5) > div.IgeUeb > div.uScs5d > div > div.uScs5d > div:nth-child(1) > div > button"/>
|
||||||
|
<click element="#yDmH0d > c-wiz > div > div > div > div.VP4fnf > form > div > button"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<!-- TODO: You cannot block cookies on ebay -->
|
||||||
|
<click element="#gdpr-banner > div.gdpr-banner__wrapper > div > a"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#onetrust-reject-all-handler"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#gdpr-single-choice-overlay > div > div.wt-overlay__footer.wt-pt-xs-3 > div.wt-overlay__footer__action.wt-display-flex-md.wt-flex-grow-md-1.wt-order-xs-1.wt-order-md-neg1.wt-justify-content-flex-end > button"/>
|
||||||
|
<wait/>
|
||||||
|
<click element="#gdpr-privacy-settings > div > div.wt-overlay__footer.wt-align-items-center > div.wt-overlay__footer__action > div > div:nth-child(3) > button"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<!-- TODO: Facebook changes IDs of buttons -->
|
||||||
|
</block>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#wrapper > div.notification-banner > div > a"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<remove element=".hide-consent"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#EDu5ze > div"/>
|
||||||
|
<wait/>
|
||||||
|
<click element="#yDmH0d > c-wiz > div > div > div > div.VP4fnf > div:nth-child(4) > div.uScs5d > div > div.uScs5d > div:nth-child(1) > div > button"/>
|
||||||
|
<click element="#yDmH0d > c-wiz > div > div > div > div.VP4fnf > div:nth-child(5) > div.uScs5d > div > div.uScs5d > div:nth-child(1) > div > button"/>
|
||||||
|
<click element="#yDmH0d > c-wiz > div > div > div > div.VP4fnf > div:nth-child(6) > div.IgeUeb > div.uScs5d > div > div.uScs5d > div:nth-child(1) > div > button"/>
|
||||||
|
<click element="#yDmH0d > c-wiz > div > div > div > div.VP4fnf > form > div > button"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<!-- WARNING: The cookie-free version of this websites looks very different-->
|
||||||
|
<click element="#modal-host > div > div > div > div > div > div > div.css-zndjj2 > a"/>
|
||||||
|
<wait time="1000"/>
|
||||||
|
<click element="#__next > div.css-qbih8b > div > button.css-1glzvq1"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#onetrust-pc-btn-handler"/>
|
||||||
|
<click element="#cookie-preferences > div.save-preference-btn-container > button"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<!-- TODO: You cannot block cookies, only accept? -->
|
||||||
|
<click element="body > div.RnEpo.Yx5HN > div > div > div > div.mt3GC > button.aOOlW.HoLwm"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#artdeco-global-alert-container > div.artdeco-global-alert.artdeco-global-alert--NOTICE.artdeco-global-alert--COOKIE_CONSENT > section > div > div.artdeco-global-alert-action__wrapper > button:nth-child(1)"/>
|
||||||
|
<wait time="1500"/>
|
||||||
|
<click element="body > header > a:nth-child(1) > li-icon"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#modal-host > div > div > div > div > div > div > div.css-zndjj2 > a"/>
|
||||||
|
<wait time="1000"/>
|
||||||
|
<click element="#__next > div.css-1m0hjq0 > div > button.css-1mzn52w"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#modal-host > div > div > div > div > div > div > div.css-zndjj2 > a"/>
|
||||||
|
<wait/>
|
||||||
|
<click element="#__next > div.css-1m0hjq0 > div > button.css-1mzn52w"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#wcpConsentBannerCtrl > div._2j0fmugLb1FgYz6KPuB91w > button:nth-child(2)"/>
|
||||||
|
<wait/>
|
||||||
|
<click element="#_1dp8Vp5m3HwAqGx8qBmFV2_c1_reject"/>
|
||||||
|
<click element="#_1dp8Vp5m3HwAqGx8qBmFV2_c2_reject"/>
|
||||||
|
<click element="#_1dp8Vp5m3HwAqGx8qBmFV2_c3_reject"/>
|
||||||
|
<click element="#wcpCookiePreferenceCtrl > div.AFsJE948muYyzCMktdzuk > div > div.nohp3sIG12ZBhzcMnPala > button._3tOu1FJ59c_xz_PmI1lKV5._1zNQOqxpBFSokeCLGi_hGr"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<!-- TODO: Clicking on the button does not work -->
|
||||||
|
<!-- <click element="#cookie-disclosure > div.cta-btn-container > button:nth-child(2)"/> -->
|
||||||
|
<!-- TODO: Workaround: Close -->
|
||||||
|
<click element="#cookie-disclosure > div.btn-container > button > span.icon-close"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,54 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<!-- CANNOT OPT OUT OF EVERYTHING -->
|
||||||
|
<!-- TODO: Does not work? -->
|
||||||
|
<click element="#site-content > div.gdpr.shown.expanded.expanded-dock.css-17nqy7q.e1x0szx60 > div.css-183a15u.ejw0p350 > div > div.css-1s2i4vk > a"/>
|
||||||
|
<debug/>
|
||||||
|
<wait/>
|
||||||
|
<debug msg="After"/>
|
||||||
|
|
||||||
|
<click element="#gdpr-faq-cookie-table-2 > tbody > tr:nth-child(1) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-2 > tbody > tr:nth-child(2) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-2 > tbody > tr:nth-child(3) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-2 > tbody > tr:nth-child(4) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-2 > tbody > tr:nth-child(5) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-2 > tbody > tr:nth-child(6) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-2 > tbody > tr:nth-child(7) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-2 > tbody > tr:nth-child(8) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-2 > tbody > tr:nth-child(9) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-2 > tbody > tr:nth-child(10) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-2 > tbody > tr:nth-child(11) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-2 > tbody > tr:nth-child(12) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-2 > tbody > tr:nth-child(14) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(1) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(2) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(3) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(4) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(5) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(6) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(7) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(8) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(9) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(10) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(11) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(12) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(13) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(14) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(15) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(16) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(17) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(18) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-3 > tbody > tr:nth-child(19) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
|
||||||
|
<click element="#gdpr-faq-cookie-table-4 > tbody > tr:nth-child(1) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-4 > tbody > tr:nth-child(2) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-4 > tbody > tr:nth-child(3) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-4 > tbody > tr:nth-child(4) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-4 > tbody > tr:nth-child(7) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#gdpr-faq-cookie-table-4 > tbody > tr:nth-child(8) > td:nth-child(5) > a:nth-child(2)"/>
|
||||||
|
<click element="#opt-out-of-new-york-times-nonessential-trackers"/>
|
||||||
|
|
||||||
|
<!-- TODO: Close the new tab -->
|
||||||
|
<!-- TODO: Close the banner -->
|
||||||
|
</block>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#manageCookiesLink"/>
|
||||||
|
<wait time="1000"/>
|
||||||
|
<click element="#performance"/>
|
||||||
|
<click element="#functional"/>
|
||||||
|
<click element="#submitCookiesBtn"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#SHORTCUT_FOCUSABLE_DIV > div:nth-child(6) > div._3q-XSJ2vokDQrvdG6mR__k > section > div > section > section > form:nth-child(1) > button"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#cookie-link-manage"/>
|
||||||
|
<!-- TODO: Not sure clicking the right thing -->
|
||||||
|
<click element="#cookie-btn-allow"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="body > div.ff-sans.ps-fixed.z-nav-fixed.ws4.sm\\:w-auto.p32.bg-black-750.fc-white.bar-lg.b16.l16.r16.js-consent-banner > div > button.grid--cell.s-btn.s-btn__filled.js-cookie-settings"/>
|
||||||
|
<wait time="1000"/>
|
||||||
|
<click element="#onetrust-pc-sdk > div > div.s-modal--footer.mt0.grid.gs8.gsx > button.grid--cell.s-btn.s-btn__primary.save-preference-btn-handler.onetrust-close-btn-handler.js-consent-banner-hide.js-consent-save"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#rejectAllButton"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#react-root > div > div > div.css-1dbjc4n.r-13qz1uu.r-417010 > main > div > div > div.css-1dbjc4n.r-1awozwy.r-1m3jxhj.r-1upvrn0.r-18u37iz.r-1d7fvdj.r-d9fdf6.r-tvv088.r-13qz1uu > div.css-18t94o4.css-1dbjc4n.r-1niwhzg.r-11mg6pl.r-sdzlij.r-1phboty.r-rs99b7.r-18kxxzh.r-1q142lx.r-1w2pmg.r-19u6a5r.r-1mnahxq.r-ero68b.r-1gg2371.r-1ny4l3l.r-1fneopy.r-o7ynqc.r-6416eg.r-lrvibr > div > span"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<remove element=".oaDry"/>
|
||||||
|
</block>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<block>
|
||||||
|
<click element="#consent-page > div > div > div > form > div.wizard-body > div.actions.couple > a"/>
|
||||||
|
<wait time="2000"/>
|
||||||
|
<!-- This is not my spelling mistake :) vvvvvv -->
|
||||||
|
<click element="#select-legit-all-purpose > span.toggleAll.toggle-accpet-all"/>
|
||||||
|
<click element="#consent-page > div > form > div.page-footer > div > div > button"/>
|
||||||
|
</block>
|
116
qutebrowser/.local/share/qutebrowser/userscripts/doi2scihub
Executable file
116
qutebrowser/.local/share/qutebrowser/userscripts/doi2scihub
Executable file
|
@ -0,0 +1,116 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Goes to the sci-hub page for the current article, based on DOI.
|
||||||
|
|
||||||
|
|
||||||
|
Based on the work in
|
||||||
|
https://github.com/cadadr/configuration/blob/4b6a241d04d113f322b960890a0d0a0ab783a7b3/dotfiles/qutebrowser/userscripts/doi
|
||||||
|
with much gratitude.
|
||||||
|
|
||||||
|
The program can be invoked with DOI on a page selected, through the hinting mode when selecting a DOI link or on a publisher page (any page where doi meta-tags are set) - works on ScienceDirect, Taylor&Francis, Springer, etc.
|
||||||
|
That means you can give it a doi through a link or on the current page, for example with the following mappings:
|
||||||
|
|
||||||
|
```python
|
||||||
|
config.bind('"p', "spawn --userscript doi2scihub")
|
||||||
|
config.bind(';p', "hint links userscript doi2scihub")
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also pass the doi as the (only) argument to the userscript:
|
||||||
|
|
||||||
|
```
|
||||||
|
:spawn --userscript doi2scihub https://doi.org/10.37394/23207.2021.18.68
|
||||||
|
`
|
||||||
|
|
||||||
|
Updates its sci-hub link based on the one listed on sci-hub wiki page.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import html.parser
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
mode = os.getenv("QUTE_MODE")
|
||||||
|
|
||||||
|
text = None
|
||||||
|
|
||||||
|
class DoiTagParser(html.parser.HTMLParser):
|
||||||
|
doi = None
|
||||||
|
|
||||||
|
def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None:
|
||||||
|
if self.doi == None and tag == "meta":
|
||||||
|
if (
|
||||||
|
("name", "citation_doi") in attrs
|
||||||
|
or ("name", "dc.identifier") in attrs
|
||||||
|
or ("scheme", "doi") in attrs
|
||||||
|
):
|
||||||
|
for att in attrs:
|
||||||
|
if att[0] == "content":
|
||||||
|
self.doi = att[1]
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
class SciHubLinkParser(html.parser.HTMLParser):
|
||||||
|
current = None
|
||||||
|
link_patt = re.compile(r"^(?P<url>https?://sci-hub\..+)/about$")
|
||||||
|
|
||||||
|
def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None:
|
||||||
|
if self.current == None and tag == "a":
|
||||||
|
for att in attrs:
|
||||||
|
if att[0] == "href" and self.link_patt.match(att[1] or ""):
|
||||||
|
match = self.link_patt.match(att[1] or "")
|
||||||
|
self.current = match["url"] if match and match["url"] else None
|
||||||
|
|
||||||
|
|
||||||
|
def get_scihub_url(wiki_page: str = "https://wikiless.org/wiki/Sci-Hub"):
|
||||||
|
resp = requests.get(wiki_page)
|
||||||
|
parser = SciHubLinkParser()
|
||||||
|
parser.feed(resp.text)
|
||||||
|
return parser.current or "https://sci-hub.ru"
|
||||||
|
|
||||||
|
|
||||||
|
# use doi argument if we got one
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
text = sys.argv[1]
|
||||||
|
# use the hinted url
|
||||||
|
elif mode == "hints":
|
||||||
|
text = os.getenv("QUTE_URL", "").strip()
|
||||||
|
# use the current selection
|
||||||
|
elif mode == "command" and os.getenv("QUTE_SELECTED_TEXT"):
|
||||||
|
text = os.getenv("QUTE_SELECTED_TEXT", "").strip()
|
||||||
|
# just try to find a doi on current page
|
||||||
|
elif os.getenv("QUTE_HTML"):
|
||||||
|
with open(os.getenv("QUTE_HTML", ""), "r") as source:
|
||||||
|
parser = DoiTagParser()
|
||||||
|
parser.feed(source.read())
|
||||||
|
text = parser.doi
|
||||||
|
|
||||||
|
with open(os.getenv("QUTE_FIFO", ""), "w") as fifo:
|
||||||
|
if not text:
|
||||||
|
fifo.write(f'message-warning "Could not find a valid DOI"')
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# DOI syntax: https://www.doi.org/doi_handbook/2_Numbering.html#2.2.
|
||||||
|
#
|
||||||
|
# Note that this probably matches a subset of possible DOIs, as it
|
||||||
|
# seems that there’s no practical limitation on neither the length nor
|
||||||
|
# the contents of the DOI. But IMHO this is a healthy subset.
|
||||||
|
doi_re = re.compile(
|
||||||
|
# match possible URI prefix
|
||||||
|
r"(?P<blah>((https?)?://)?doi\.org/)?"
|
||||||
|
# match actual DOI
|
||||||
|
r"(?P<meat>[a-zA-Z0-9\./\-_]+)"
|
||||||
|
)
|
||||||
|
|
||||||
|
match = doi_re.match(text)
|
||||||
|
if match is None or match["meat"] is None:
|
||||||
|
fifo.write(
|
||||||
|
f"message-warning \"'{text}' is probably not a DOI, or update regexp\""
|
||||||
|
)
|
||||||
|
|
||||||
|
else:
|
||||||
|
url = get_scihub_url()
|
||||||
|
doi = match["meat"]
|
||||||
|
fifo.write(f"open -t {url}/{doi}")
|
BIN
qutebrowser/.local/share/qutebrowser/userscripts/qute-cookie-block
Executable file
BIN
qutebrowser/.local/share/qutebrowser/userscripts/qute-cookie-block
Executable file
Binary file not shown.
|
@ -13,6 +13,7 @@
|
||||||
# POWERMENU_LOCKSCREEN_CMD=""
|
# POWERMENU_LOCKSCREEN_CMD=""
|
||||||
# POWERMENU_LOGOUT_CMD=""
|
# POWERMENU_LOGOUT_CMD=""
|
||||||
# POWERMENU_SUSPEND_CMD=""
|
# POWERMENU_SUSPEND_CMD=""
|
||||||
|
# POWERMENU_HIBERNATE_CMD=""
|
||||||
# Command chooser options
|
# Command chooser options
|
||||||
# POWERMENU_PICKER_CMD=""
|
# POWERMENU_PICKER_CMD=""
|
||||||
# POWERMENU_PICKER_OPTS=""
|
# POWERMENU_PICKER_OPTS=""
|
||||||
|
@ -26,6 +27,7 @@ elif [ "${POWERMENU_SHOW_ICONS:-1}" -eq 1 ]; then
|
||||||
reboot_btn=""
|
reboot_btn=""
|
||||||
lock_btn=""
|
lock_btn=""
|
||||||
suspend_btn="鈴"
|
suspend_btn="鈴"
|
||||||
|
hibernate_btn="鈴"
|
||||||
logout_btn=""
|
logout_btn=""
|
||||||
fi
|
fi
|
||||||
if [ "${POWERMENU_SHOW_TEXT:-1}" -eq 1 ]; then
|
if [ "${POWERMENU_SHOW_TEXT:-1}" -eq 1 ]; then
|
||||||
|
@ -33,6 +35,7 @@ if [ "${POWERMENU_SHOW_TEXT:-1}" -eq 1 ]; then
|
||||||
reboot_btn="${reboot_btn} Restart"
|
reboot_btn="${reboot_btn} Restart"
|
||||||
lock_btn="${lock_btn} Lock Screen"
|
lock_btn="${lock_btn} Lock Screen"
|
||||||
suspend_btn="${suspend_btn} Suspend"
|
suspend_btn="${suspend_btn} Suspend"
|
||||||
|
hibernate_btn="${hibernate_btn} Hibernate"
|
||||||
logout_btn="${logout_btn} Log Out"
|
logout_btn="${logout_btn} Log Out"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -46,7 +49,7 @@ fi
|
||||||
selector_program="${POWERMENU_PICKER_CMD:-bemenu}"
|
selector_program="${POWERMENU_PICKER_CMD:-bemenu}"
|
||||||
selector_opts="${POWERMENU_PICKER_OPTS:--i}"
|
selector_opts="${POWERMENU_PICKER_OPTS:--i}"
|
||||||
|
|
||||||
menu=$(printf "%s\n" "$lock_btn" "$suspend_btn" "$power_off_btn" "$reboot_btn" "$logout_btn")
|
menu=$(printf "%s\n" "$lock_btn" "$suspend_btn" "$power_off_btn" "$reboot_btn" "$hibernate_btn" "$logout_btn")
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
result=$(printf "%s" "$menu" | $selector_program $selector_opts --prompt "$prompt")
|
result=$(printf "%s" "$menu" | $selector_program $selector_opts --prompt "$prompt")
|
||||||
|
|
||||||
|
@ -78,6 +81,11 @@ case "$result" in
|
||||||
;;
|
;;
|
||||||
"Suspend" | "$suspend_btn")
|
"Suspend" | "$suspend_btn")
|
||||||
if [ -n "$POWERMENU_SUSPEND_CMD" ]; then eval "$POWERMENU_SUSPEND_CMD"; else
|
if [ -n "$POWERMENU_SUSPEND_CMD" ]; then eval "$POWERMENU_SUSPEND_CMD"; else
|
||||||
|
systemctl suspend-then-hibernate
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
"Hibernate" | "$hibernate_btn")
|
||||||
|
if [ -n "$POWERMENU_HIBERNATE_CMD" ]; then eval "$POWERMENU_HIBERNATE_CMD"; else
|
||||||
systemctl hibernate
|
systemctl hibernate
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -92,24 +92,36 @@ _alreadyexists() { # 1=video_regex
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_should_archive() {
|
||||||
|
if [ -n "$ARCHIVE_FOLDER" ]; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
_download_cmd() {
|
_download_cmd() {
|
||||||
"$YT_DL_CMD" \
|
"$YT_DL_CMD" \
|
||||||
-o "$DL_FOLDER/$YT_DL_TITLE.%(ext)s" \
|
-o "$TEMP_FOLDER/$YT_DL_TITLE.%(ext)s" \
|
||||||
"${YT_DL_OPTS[@]}" \
|
"${YT_DL_OPTS[@]}" \
|
||||||
"$*"
|
"$*"
|
||||||
}
|
}
|
||||||
|
|
||||||
download() { # 1=url
|
download() { # 1=url
|
||||||
# # download the video to download folder
|
# # download the video to download folder
|
||||||
if ! _alreadyexists "$yt_dl_fname"; then
|
if ! _alreadyexists "$yt_dl_fname" || ! _should_archive; then
|
||||||
_download_cmd "$*"
|
_download_cmd "$*"
|
||||||
|
file=$(_findfile "$TEMP_FOLDER" "$yt_dl_fname")
|
||||||
|
mv "$file" "$DL_FOLDER"
|
||||||
|
|
||||||
|
if _should_archive; then
|
||||||
# yt-dl never knows the exact filename in advance
|
# yt-dl never knows the exact filename in advance
|
||||||
file=$(_findfile "$DL_FOLDER" "$yt_dl_fname")
|
file=$(_findfile "$DL_FOLDER" "$yt_dl_fname")
|
||||||
if [ -z "$file" ]; then exit 1; fi
|
if [ -z "$file" ]; then exit 1; fi
|
||||||
_call_archive "$file" "$ARCHIVE_FOLDER"
|
_call_archive "$file" "$ARCHIVE_FOLDER"
|
||||||
|
fi
|
||||||
# only link old file if one exists
|
# only link old file if one exists
|
||||||
else
|
elif _should_archive; then
|
||||||
archive_file=$(_findfile "$ARCHIVE_FOLDER" "$yt_dl_fname")
|
archive_file=$(_findfile "$ARCHIVE_FOLDER" "$yt_dl_fname")
|
||||||
echo "$archive_file" | while read -r file; do
|
echo "$archive_file" | while read -r file; do
|
||||||
echo "file $file exists, not downloading duplicate"
|
echo "file $file exists, not downloading duplicate"
|
||||||
|
@ -119,8 +131,9 @@ download() { # 1=url
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
DL_FOLDER="${DL_FOLDER:-${XDG_VIDEOS_DIR:-$HOME/videos}}/inbox"
|
TEMP_FOLDER="${TEMP_FOLDER:-${HOME}/downloads}"
|
||||||
ARCHIVE_FOLDER="${ARCHIVE_FOLDER:-${XDG_VIDEOS_DIR:-$HOME/videos}}/archive"
|
DL_FOLDER="${DL_FOLDER:-${XDG_VIDEOS_DIR:-$HOME/videos}/inbox}"
|
||||||
|
ARCHIVE_FOLDER="${ARCHIVE_FOLDER:-${XDG_VIDEOS_DIR:-$HOME/videos}/archive}"
|
||||||
YT_DL_CMD="${YT_DL_CMD:-yt-dlp}"
|
YT_DL_CMD="${YT_DL_CMD:-yt-dlp}"
|
||||||
yt_default_opts=(-f "best[height\<=1080]" --retries 15 --embed-subs --sub-lang "en,de,es,fr")
|
yt_default_opts=(-f "best[height\<=1080]" --retries 15 --embed-subs --sub-lang "en,de,es,fr")
|
||||||
declare -a YT_DL_OPTS=${YT_DL_OPTS:-( "${yt_default_opts[@]}" )}
|
declare -a YT_DL_OPTS=${YT_DL_OPTS:-( "${yt_default_opts[@]}" )}
|
||||||
|
|
|
@ -5,4 +5,5 @@ After=network.target network-online.target dbus.socket gpg-agent.socket
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
ExecStart=/home/marty/.local/bin/mail-check
|
# workaround to allow relative executable invocation (i.e. current users' home dir)
|
||||||
|
ExecStart=/bin/bash -c '%h/.local/bin/sync-mail'
|
||||||
|
|
|
@ -20,7 +20,17 @@ export LIBRARYROOT="${LIBRARYROOT:-$HOME/documents/library}"
|
||||||
export BIBFILE="${BIBFILE:-$LIBRARYROOT/academia/academia.bib}"
|
export BIBFILE="${BIBFILE:-$LIBRARYROOT/academia/academia.bib}"
|
||||||
|
|
||||||
# these are my personal 'important' application settings
|
# these are my personal 'important' application settings
|
||||||
export EDITOR="nvim"
|
if exist nvim; then
|
||||||
|
export EDITOR="nvim"
|
||||||
|
elif exist vim; then
|
||||||
|
export EDITOR="vim"
|
||||||
|
elif exist vi; then
|
||||||
|
export EDITOR="vi"
|
||||||
|
elif exist micro; then
|
||||||
|
export EDITOR="micro"
|
||||||
|
else
|
||||||
|
export EDITOR="nano"
|
||||||
|
fi
|
||||||
export BROWSER="qutebrowser"
|
export BROWSER="qutebrowser"
|
||||||
export TERMINAL="wezterm"
|
export TERMINAL="wezterm"
|
||||||
export PAGER="less"
|
export PAGER="less"
|
||||||
|
|
|
@ -84,6 +84,10 @@ export LESSHISTFILE="XDG_STATE_HOME/lesshst"
|
||||||
export MPLAYER_HOME="$XDG_CONFIG_HOME/mplayer"
|
export MPLAYER_HOME="$XDG_CONFIG_HOME/mplayer"
|
||||||
export NODE_REPL_HISTORY="$XDG_STATE_HOME/node_repl_history"
|
export NODE_REPL_HISTORY="$XDG_STATE_HOME/node_repl_history"
|
||||||
export NVM_DIR="$XDG_DATA_HOME/nvm"
|
export NVM_DIR="$XDG_DATA_HOME/nvm"
|
||||||
|
if [ ! -e "$PYTHONSTARTUP" ]; then
|
||||||
|
mkdir -p "$XDG_CONFIG_HOME/python"
|
||||||
|
touch "$PYTHONSTARTUP"
|
||||||
|
fi
|
||||||
export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc"
|
export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc"
|
||||||
export SQLITE_HISTORY="$XDG_STATE_HOME/sqlite_history"
|
export SQLITE_HISTORY="$XDG_STATE_HOME/sqlite_history"
|
||||||
export TEXMFVAR="$XDG_CACHE_HOME/texlive/texmf-var"
|
export TEXMFVAR="$XDG_CACHE_HOME/texlive/texmf-var"
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
# Themes are in this file so it can be ignored by
|
|
||||||
# git and theme changes don't show up as committable
|
|
||||||
# edits.
|
|
||||||
|
|
||||||
# Color theme (uncomment one to use)
|
|
||||||
#include /usr/share/doc/task/rc/light-16.theme
|
|
||||||
#include /usr/share/doc/task/rc/light-256.theme
|
|
||||||
#include /usr/share/doc/task/rc/dark-16.theme
|
|
||||||
#include /usr/share/doc/task/rc/dark-256.theme
|
|
||||||
#include /usr/share/doc/task/rc/dark-red-256.theme
|
|
||||||
#include /usr/share/doc/task/rc/dark-green-256.theme
|
|
||||||
#include /usr/share/doc/task/rc/dark-blue-256.theme
|
|
||||||
#include /usr/share/doc/task/rc/dark-violets-256.theme
|
|
||||||
#include /usr/share/doc/task/rc/dark-yellow-green.theme
|
|
||||||
#include /usr/share/doc/task/rc/dark-gray-256.theme
|
|
||||||
#include /usr/share/doc/task/rc/dark-gray-blue-256.theme
|
|
||||||
include /usr/share/doc/task/rc/solarized-dark-256.theme
|
|
||||||
#include /usr/share/doc/task/rc/solarized-light-256.theme
|
|
||||||
#include /usr/share/doc/task/rc/no-color.theme
|
|
|
@ -1,10 +0,0 @@
|
||||||
[General]
|
|
||||||
taskbin = task
|
|
||||||
path_ext = /usr/share/taskopen/scripts
|
|
||||||
|
|
||||||
[Actions]
|
|
||||||
notes.regex = "Note"
|
|
||||||
notes.command = "$EDITOR ${XDG_DATA_HOME:-~/.local/share}/task/notes/$UUID.md"
|
|
||||||
|
|
||||||
[CLI]
|
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
mod="Mod4"
|
mod="Mod4"
|
||||||
modemod="Mod1"
|
modemod="Mod1"
|
||||||
term=${TERMINAL:-foot}
|
term=${TERMINAL:-foot}
|
||||||
|
time_to_lockscreen=300
|
||||||
|
time_to_screendim=600
|
||||||
|
time_to_suspend=1200
|
||||||
|
|
||||||
## OPTIONS
|
## OPTIONS
|
||||||
riverctl spawn "dbus-update-activation-environment SEATD_SOCK DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=river"
|
riverctl spawn "dbus-update-activation-environment SEATD_SOCK DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=river"
|
||||||
|
@ -241,8 +244,19 @@ killall waybar
|
||||||
exec waybar &
|
exec waybar &
|
||||||
|
|
||||||
# start dynamic display configuration
|
# start dynamic display configuration
|
||||||
|
killall kanshi
|
||||||
exec kanshi &
|
exec kanshi &
|
||||||
|
|
||||||
|
# start screen idle locking/dimming/sleep tool
|
||||||
|
killall swayidle
|
||||||
|
exec swayidle \
|
||||||
|
timeout "${time_to_lockscreen}" 'lockscreen' \
|
||||||
|
timeout "${time_to_screendim}" 'wlopm --off "*"' \
|
||||||
|
timeout "${time_to_suspend}" 'systemctl suspend-then-hibernate' \
|
||||||
|
resume 'wlopm --on "*"' \
|
||||||
|
after-resume 'wlopm --on "*"' \
|
||||||
|
before-sleep 'lockscreen' &
|
||||||
|
|
||||||
killall clipman
|
killall clipman
|
||||||
exec wl-paste -t text --watch clipman store &
|
exec wl-paste -t text --watch clipman store &
|
||||||
# bash ~/.config/bin/gtktheme # setting our gtk variables
|
# bash ~/.config/bin/gtktheme # setting our gtk variables
|
||||||
|
|
|
@ -58,6 +58,20 @@ local function setup()
|
||||||
wezterm.sleep_ms(1000)
|
wezterm.sleep_ms(1000)
|
||||||
os.remove(name)
|
os.remove(name)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
wezterm.on("toggle-leader", function(window, pane)
|
||||||
|
wezterm.log_info("toggling the leader")
|
||||||
|
local overrides = window:get_config_overrides() or {}
|
||||||
|
if not overrides.leader then
|
||||||
|
wezterm.log_info("leader wasn't set")
|
||||||
|
overrides.leader = { key = "s", mods = "SUPER" };
|
||||||
|
else
|
||||||
|
wezterm.log_info("leader was set")
|
||||||
|
overrides.leader = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
window:set_config_overrides(overrides)
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
return { setup = setup }
|
return { setup = setup }
|
||||||
|
|
|
@ -73,7 +73,8 @@ local keys = {
|
||||||
key = 'l',
|
key = 'l',
|
||||||
mods = 'LEADER',
|
mods = 'LEADER',
|
||||||
action = act.EmitEvent 'ActivatePaneDirection-Right'
|
action = act.EmitEvent 'ActivatePaneDirection-Right'
|
||||||
}
|
},
|
||||||
|
{ key = 'a', mods = 'CTRL|ALT', action = act.EmitEvent 'toggle-leader'}
|
||||||
|
|
||||||
}
|
}
|
||||||
-- Leader + number to activate that tab
|
-- Leader + number to activate that tab
|
||||||
|
@ -108,6 +109,6 @@ local key_tables = {
|
||||||
{ key = 'g', mods = 'CTRL', action = act.ScrollToTop },
|
{ key = 'g', mods = 'CTRL', action = act.ScrollToTop },
|
||||||
{ key = 'G', mods = 'CTRL', action = act.ScrollToBottom },
|
{ key = 'G', mods = 'CTRL', action = act.ScrollToBottom },
|
||||||
{ key = 'Escape', action = 'PopKeyTable' }
|
{ key = 'Escape', action = 'PopKeyTable' }
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
return { keys = keys, key_tables = key_tables }
|
return { keys = keys, key_tables = key_tables }
|
||||||
|
|
|
@ -31,7 +31,6 @@ source /usr/share/fzf/key-bindings.zsh
|
||||||
[ -e $PLUG_FOLDER/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ] && source $PLUG_FOLDER/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
[ -e $PLUG_FOLDER/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ] && source $PLUG_FOLDER/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
||||||
[ -e $PLUG_FOLDER/alias-tips/alias-tips.plugin.zsh ] && source $PLUG_FOLDER/alias-tips/alias-tips.plugin.zsh
|
[ -e $PLUG_FOLDER/alias-tips/alias-tips.plugin.zsh ] && source $PLUG_FOLDER/alias-tips/alias-tips.plugin.zsh
|
||||||
[ -e $PLUG_FOLDER/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh ] && source $PLUG_FOLDER/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh
|
[ -e $PLUG_FOLDER/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh ] && source $PLUG_FOLDER/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh
|
||||||
[ -e $PLUG_FOLDER/zsh-vi-mode/zsh-vi-mode.plugin.zsh ] && source $PLUG_FOLDER/zsh-vi-mode/zsh-vi-mode.plugin.zsh
|
|
||||||
unset PLUG_FOLDER
|
unset PLUG_FOLDER
|
||||||
|
|
||||||
# simple fzf-tab settings
|
# simple fzf-tab settings
|
||||||
|
|
Loading…
Reference in a new issue