Removed commit history
Signed-off-by: Marko Korhonen <marko.korhonen@reekynet.com>main
commit
b1335a3628
@ -0,0 +1,3 @@
|
|||||||
|
[submodule "dotdrop"]
|
||||||
|
path = dotdrop
|
||||||
|
url = https://github.com/deadc0de6/dotdrop.git
|
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019 Marko Korhonen
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
@ -0,0 +1,12 @@
|
|||||||
|
# ReekyMarko's dotfiles
|
||||||
|
![screenshot of my setup](https://i.imgur.com/lz1Q4Zz.png?raw=true")
|
||||||
|
|
||||||
|
My personal dotfiles for my workstations, mostly for easy access for myself
|
||||||
|
but feel free to steal them for yourself!
|
||||||
|
|
||||||
|
I'm using [dotdrop](https://github.com/deadc0de6/dotdrop) to manage and ease deployment of my dotfiles.
|
||||||
|
|
||||||
|
## Mirrors
|
||||||
|
This repository lives at [ReekyNET Git](https://git.reekynet.com/ReekyMarko/dotfiles), but it is also mirrored to [GitLab](https://gitlab.com/ReekyMarko/dotfiles), [GitHub](https://github.com/ReekyMarko/dotfiles) and [Bitbucket](https://bitbucket.org/ReekyMarko/dotfiles).
|
||||||
|
|
||||||
|
If you have any ideas for improvements, questions or anything of this sort, you can open an issue or a pull request in either ReekyNET Git (registrations open for anyone), or any of the mirrors.
|
@ -0,0 +1,227 @@
|
|||||||
|
actions:
|
||||||
|
vim-plug: nvim +PlugInstall +qall
|
||||||
|
zplug: zplug install
|
||||||
|
config:
|
||||||
|
backup: true
|
||||||
|
banner: true
|
||||||
|
create: true
|
||||||
|
dotpath: home
|
||||||
|
ignoreempty: false
|
||||||
|
keepdot: true
|
||||||
|
link_dotfile_default: nolink
|
||||||
|
link_on_import: nolink
|
||||||
|
longkey: false
|
||||||
|
showdiff: false
|
||||||
|
workdir: ~/.config/dotdrop
|
||||||
|
dotfiles:
|
||||||
|
d_systemd:
|
||||||
|
dst: ~/.config/systemd/user
|
||||||
|
src: .config/systemd/user
|
||||||
|
d_mpv:
|
||||||
|
dst: ~/.config/mpv
|
||||||
|
src: .config/mpv
|
||||||
|
d_nvim_config:
|
||||||
|
actions:
|
||||||
|
- vim-plug
|
||||||
|
dst: ~/.config/nvim/conf.d
|
||||||
|
src: .config/nvim/conf.d
|
||||||
|
d_scripts:
|
||||||
|
dst: ~/Scripts
|
||||||
|
src: Scripts
|
||||||
|
d_sway:
|
||||||
|
dst: ~/.config/sway
|
||||||
|
src: .config/sway
|
||||||
|
d_ticons:
|
||||||
|
dst: ~/.local/share/TelegramDesktop/tdata/ticons
|
||||||
|
src: .local/share/TelegramDesktop/tdata/ticons
|
||||||
|
d_waybar:
|
||||||
|
dst: ~/.config/waybar
|
||||||
|
src: .config/waybar
|
||||||
|
f_abcde.conf:
|
||||||
|
dst: ~/.abcde.conf
|
||||||
|
src: .abcde.conf
|
||||||
|
f_alacritty.yml:
|
||||||
|
dst: ~/.config/alacritty/alacritty.yml
|
||||||
|
src: .config/alacritty/alacritty.yml
|
||||||
|
f_authorized_keys:
|
||||||
|
dst: ~/.ssh/authorized_keys
|
||||||
|
src: .ssh/authorized_keys
|
||||||
|
f_beets_config:
|
||||||
|
dst: ~/.config/beets/config.yaml
|
||||||
|
src: .config/beets/config.yaml
|
||||||
|
f_beets_whitelist:
|
||||||
|
dst: ~/.config/beets/whitelist
|
||||||
|
src: .config/beets/whitelist
|
||||||
|
f_bspwmrc:
|
||||||
|
dst: ~/.config/bspwm/bspwmrc
|
||||||
|
src: .config/bspwm/bspwmrc
|
||||||
|
f_coc-settings.json:
|
||||||
|
dst: ~/.config/nvim/coc-settings.json
|
||||||
|
src: .config/nvim/coc-settings.json
|
||||||
|
f_efm-langserver.yaml:
|
||||||
|
dst: ~/.config/efm-langserver/config.yaml
|
||||||
|
src: .config/efm-langserver/config.yaml
|
||||||
|
f_gitconfig:
|
||||||
|
dst: ~/.gitconfig
|
||||||
|
src: .gitconfig
|
||||||
|
f_init.vim:
|
||||||
|
dst: ~/.config/nvim/init.vim
|
||||||
|
src: .config/nvim/init.vim
|
||||||
|
f_libra_config:
|
||||||
|
dst: ~/.config/libra/config.toml
|
||||||
|
src: .config/libra/config.toml
|
||||||
|
f_mailcap:
|
||||||
|
dst: ~/.mailcap
|
||||||
|
src: .mailcap
|
||||||
|
f_makepkg.conf:
|
||||||
|
dst: ~/.config/pacman/makepkg.conf
|
||||||
|
src: .config/pacman/makepkg.conf
|
||||||
|
f_mako_config:
|
||||||
|
dst: ~/.config/mako/config
|
||||||
|
src: .config/mako/config
|
||||||
|
f_mimeo_associations.txt:
|
||||||
|
dst: ~/.config/mimeo/associations.txt
|
||||||
|
src: .config/mimeo/associations.txt
|
||||||
|
f_mpd.conf:
|
||||||
|
dst: ~/.config/mpd/mpd.conf
|
||||||
|
src: .config/mpd/mpd.conf
|
||||||
|
f_mpdris2.conf:
|
||||||
|
dst: ~/.config/mpDris2/mpDris2.conf
|
||||||
|
src: .config/mpDris2/mpDris2.conf
|
||||||
|
f_mpdscribble.conf:
|
||||||
|
dst: ~/.mpdscribble/mpdscribble.conf
|
||||||
|
src: .mpdscribble/mpdscribble.conf
|
||||||
|
f_ncmpcpp_bindings:
|
||||||
|
dst: ~/.config/ncmpcpp/bindings
|
||||||
|
src: .config/ncmpcpp/bindings
|
||||||
|
f_ranger.conf:
|
||||||
|
dst: ~/.config/ranger/rc.conf
|
||||||
|
src: .config/ranger/rc.conf
|
||||||
|
f_ranger_commands.py:
|
||||||
|
dst: ~/.config/ranger/commands.py
|
||||||
|
src: .config/ranger/commands.py
|
||||||
|
f_redshift.conf:
|
||||||
|
dst: ~/.config/redshift/redshift.conf
|
||||||
|
src: .config/redshift/redshift.conf
|
||||||
|
f_rofi-pass.conf:
|
||||||
|
dst: ~/.config/rofi-pass/config
|
||||||
|
src: .config/rofi-pass/config
|
||||||
|
f_rtv.cfg:
|
||||||
|
dst: ~/.config/rtv/rtv.cfg
|
||||||
|
src: .config/rtv/rtv.cfg
|
||||||
|
f_ssh.conf:
|
||||||
|
dst: ~/.ssh/config
|
||||||
|
src: .ssh/config
|
||||||
|
f_steam-native.desktop:
|
||||||
|
dst: ~/.local/share/applications/steam-native.desktop
|
||||||
|
src: .local/share/applications/steam-native.desktop
|
||||||
|
f_tdesktop_lang.strings:
|
||||||
|
dst: ~/.config/telegram-desktop/lang.strings
|
||||||
|
src: .config/telegram-desktop/lang.strings
|
||||||
|
f_tmux.conf:
|
||||||
|
dst: ~/.tmux.conf
|
||||||
|
src: .tmux.conf
|
||||||
|
f_yay_config.json:
|
||||||
|
dst: ~/.config/yay/config.json
|
||||||
|
src: .config/yay/config.json
|
||||||
|
f_youtube-dl_config:
|
||||||
|
dst: ~/.config/youtube-dl/config
|
||||||
|
src: .config/youtube-dl/config
|
||||||
|
f_youtube-viewer.conf:
|
||||||
|
dst: ~/.config/youtube-viewer/youtube-viewer.conf
|
||||||
|
src: .config/youtube-viewer/youtube-viewer.conf
|
||||||
|
f_zathurarc:
|
||||||
|
dst: ~/.config/zathura/zathurarc
|
||||||
|
src: .config/zathura/zathurarc
|
||||||
|
f_zprofile:
|
||||||
|
dst: ~/.zprofile
|
||||||
|
src: .zprofile
|
||||||
|
f_zshrc:
|
||||||
|
dst: ~/.zshrc
|
||||||
|
src: .zshrc
|
||||||
|
d_rofi:
|
||||||
|
src: .config/rofi
|
||||||
|
dst: ~/.config/rofi
|
||||||
|
d_zsh:
|
||||||
|
src: .config/zsh
|
||||||
|
dst: ~/.config/zsh
|
||||||
|
f_fonts.conf:
|
||||||
|
src: .config/fontconfig/fonts.conf
|
||||||
|
dst: ~/.config/fontconfig/fonts.conf
|
||||||
|
f_ignore:
|
||||||
|
src: .ignore
|
||||||
|
dst: ~/.ignore
|
||||||
|
f_nvimpager_init.vim:
|
||||||
|
src: .config/nvimpager/init.vim
|
||||||
|
dst: ~/.config/nvimpager/init.vim
|
||||||
|
profiles:
|
||||||
|
Media:
|
||||||
|
dotfiles:
|
||||||
|
- f_beets_config
|
||||||
|
- f_beets_whitelist
|
||||||
|
- f_abcde.conf
|
||||||
|
- d_mpv
|
||||||
|
- f_youtube-dl_config
|
||||||
|
- f_mpd.conf
|
||||||
|
Sway:
|
||||||
|
dotfiles:
|
||||||
|
- d_sway
|
||||||
|
- d_waybar
|
||||||
|
- d_rofi
|
||||||
|
- f_mako_config
|
||||||
|
- f_redshift.conf
|
||||||
|
- f_rofi-pass.conf
|
||||||
|
Pacman:
|
||||||
|
dotfiles:
|
||||||
|
- f_yay_config.json
|
||||||
|
- f_makepkg.conf
|
||||||
|
Mirkwood:
|
||||||
|
dotfiles:
|
||||||
|
- d_systemd
|
||||||
|
- f_tdesktop_lang.strings
|
||||||
|
- f_gitconfig
|
||||||
|
- f_mailcap
|
||||||
|
- f_zprofile
|
||||||
|
- f_mimeo_associations.txt
|
||||||
|
- f_mpdscribble.conf
|
||||||
|
- f_mpdris2.conf
|
||||||
|
- f_ranger_commands.py
|
||||||
|
- f_libra_config
|
||||||
|
- f_ncmpcpp_bindings
|
||||||
|
- f_zathurarc
|
||||||
|
- f_youtube-viewer.conf
|
||||||
|
- f_efm-langserver.yaml
|
||||||
|
- f_fonts.conf
|
||||||
|
include:
|
||||||
|
- Terminal
|
||||||
|
- Media
|
||||||
|
- Sway
|
||||||
|
- Pacman
|
||||||
|
ReekyRaspberry:
|
||||||
|
include:
|
||||||
|
- Terminal
|
||||||
|
Rivendell:
|
||||||
|
include:
|
||||||
|
- Terminal
|
||||||
|
- Media
|
||||||
|
- Pacman
|
||||||
|
Terminal:
|
||||||
|
dotfiles:
|
||||||
|
- f_nvimpager_init.vim
|
||||||
|
- f_ignore
|
||||||
|
- f_rtv.cfg
|
||||||
|
- d_zsh
|
||||||
|
- f_zshrc
|
||||||
|
- f_tmux.conf
|
||||||
|
- f_ranger.conf
|
||||||
|
- f_ssh.conf
|
||||||
|
- f_authorized_keys
|
||||||
|
- d_scripts
|
||||||
|
- d_nvim_config
|
||||||
|
- f_init.vim
|
||||||
|
- f_coc-settings.json
|
||||||
|
- f_gitconfig
|
||||||
|
- f_alacritty.yml
|
||||||
|
AnittaPC:
|
||||||
|
include:
|
||||||
|
- Terminal
|
@ -0,0 +1,139 @@
|
|||||||
|
config:
|
||||||
|
backup: true
|
||||||
|
banner: true
|
||||||
|
create: true
|
||||||
|
dotpath: root
|
||||||
|
ignoreempty: false
|
||||||
|
keepdot: true
|
||||||
|
link_dotfile_default: nolink
|
||||||
|
link_on_import: nolink
|
||||||
|
longkey: false
|
||||||
|
showdiff: false
|
||||||
|
workdir: ~/.config/sdotdrop
|
||||||
|
dotfiles:
|
||||||
|
f_60-uinput-permissions.rules:
|
||||||
|
dst: /etc/udev/rules.d/60-uinput-permissions.rules
|
||||||
|
src: etc/udev/rules.d/60-uinput-permissions.rules
|
||||||
|
d_bin:
|
||||||
|
dst: /usr/local/bin
|
||||||
|
src: usr/local/bin
|
||||||
|
f_99-sysctl.conf:
|
||||||
|
dst: /etc/sysctl.d/99-sysctl.conf
|
||||||
|
src: etc/sysctl.d/99-sysctl.conf
|
||||||
|
f_adb.service:
|
||||||
|
dst: /etc/systemd/system/adb.service
|
||||||
|
src: etc/systemd/system/adb.service
|
||||||
|
f_clamd.conf:
|
||||||
|
dst: /etc/clamav/clamd.conf
|
||||||
|
src: etc/clamav/clamd.conf
|
||||||
|
f_cryptissue:
|
||||||
|
dst: /etc/cryptissue
|
||||||
|
src: etc/cryptissue
|
||||||
|
f_default.pa:
|
||||||
|
dst: /etc/pulse/default.pa
|
||||||
|
src: etc/pulse/default.pa
|
||||||
|
f_detected.sh:
|
||||||
|
dst: /etc/clamav/detected.sh
|
||||||
|
src: etc/clamav/detected.sh
|
||||||
|
f_environment:
|
||||||
|
dst: /etc/environment
|
||||||
|
src: etc/environment
|
||||||
|
f_freetype2.sh:
|
||||||
|
dst: /etc/profile.d/freetype2.sh
|
||||||
|
src: etc/profile.d/freetype2.sh
|
||||||
|
f_iwd@.service:
|
||||||
|
dst: /etc/systemd/system/iwd@.service
|
||||||
|
src: etc/systemd/system/iwd@.service
|
||||||
|
f_loader.conf:
|
||||||
|
dst: /boot/loader/loader.conf
|
||||||
|
src: boot/loader/loader.conf
|
||||||
|
f_fonts.conf:
|
||||||
|
dst: /etc/fonts/local.conf
|
||||||
|
src: etc/fonts/local.conf
|
||||||
|
f_locale.conf:
|
||||||
|
dst: /etc/locale.conf
|
||||||
|
src: etc/locale.conf
|
||||||
|
f_locale.gen:
|
||||||
|
dst: /etc/locale.gen
|
||||||
|
src: etc/locale.gen
|
||||||
|
f_logind.conf:
|
||||||
|
dst: /etc/systemd/logind.conf
|
||||||
|
src: etc/systemd/logind.conf
|
||||||
|
f_bluetooth.conf:
|
||||||
|
dst: /etc/bluetooth/main.conf
|
||||||
|
src: etc/bluetooth/main.conf
|
||||||
|
f_pacman.conf:
|
||||||
|
dst: /etc/pacman.conf
|
||||||
|
src: etc/pacman.conf
|
||||||
|
f_pacserve.service.conf:
|
||||||
|
dst: /etc/pacserve/pacserve.service.conf
|
||||||
|
src: etc/pacserve/pacserve.service.conf
|
||||||
|
f_qemu.conf:
|
||||||
|
dst: /etc/libvirt/qemu.conf
|
||||||
|
src: etc/libvirt/qemu.conf
|
||||||
|
f_resolved.conf:
|
||||||
|
dst: /etc/systemd/resolved.conf
|
||||||
|
src: etc/systemd/resolved.conf
|
||||||
|
f_sshd_config:
|
||||||
|
dst: /etc/ssh/sshd_config
|
||||||
|
src: etc/ssh/sshd_config
|
||||||
|
f_timesyncd.conf:
|
||||||
|
dst: /etc/systemd/timesyncd.conf
|
||||||
|
src: etc/systemd/timesyncd.conf
|
||||||
|
f_welcomemessage.conf:
|
||||||
|
dst: /etc/welcomemessage.conf
|
||||||
|
src: etc/welcomemessage.conf
|
||||||
|
f_wifi_backend.conf:
|
||||||
|
dst: /etc/NetworkManager/conf.d/wifi_backend.conf
|
||||||
|
src: etc/NetworkManager/conf.d/wifi_backend.conf
|
||||||
|
f_override.conf:
|
||||||
|
src: etc/systemd/system/getty@tty1.service.d/override.conf
|
||||||
|
dst: /etc/systemd/system/getty@tty1.service.d/override.conf
|
||||||
|
f_rc-manager.conf:
|
||||||
|
src: etc/NetworkManager/conf.d/rc-manager.conf
|
||||||
|
dst: /etc/NetworkManager/conf.d/rc-manager.conf
|
||||||
|
profiles:
|
||||||
|
locale:
|
||||||
|
dotfiles:
|
||||||
|
- f_locale.conf
|
||||||
|
- f_locale.gen
|
||||||
|
pacman:
|
||||||
|
dotfiles:
|
||||||
|
- f_pacman.conf
|
||||||
|
- f_pacserve.service.conf
|
||||||
|
Mirkwood:
|
||||||
|
dotfiles:
|
||||||
|
- f_environment
|
||||||
|
- f_cryptissue
|
||||||
|
- f_welcomemessage.conf
|
||||||
|
- f_clamd.conf
|
||||||
|
- f_detected.sh
|
||||||
|
- d_bin
|
||||||
|
- f_adb.service
|
||||||
|
- f_bluetooth.conf
|
||||||
|
- f_resolved.conf
|
||||||
|
- f_qemu.conf
|
||||||
|
- f_default.pa
|
||||||
|
- f_iwd@.service
|
||||||
|
- f_loader.conf
|
||||||
|
- f_sshd_config
|
||||||
|
- f_logind.conf
|
||||||
|
- f_60-uinput-permissions.rules
|
||||||
|
- f_freetype2.sh
|
||||||
|
- f_fonts.conf
|
||||||
|
- f_timesyncd.conf
|
||||||
|
- f_99-sysctl.conf
|
||||||
|
- f_override.conf
|
||||||
|
- f_rc-manager.conf
|
||||||
|
include:
|
||||||
|
- locale
|
||||||
|
- pacman
|
||||||
|
Rivendell:
|
||||||
|
include:
|
||||||
|
- locale
|
||||||
|
- pacman
|
||||||
|
dotfiles:
|
||||||
|
- f_bluetooth.conf
|
||||||
|
- f_60-uinput-permissions.rules
|
||||||
|
- f_timesyncd.conf
|
||||||
|
- f_sshd_config
|
@ -0,0 +1,78 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Short url for this file: bit.ly/reekydots
|
||||||
|
|
||||||
|
# to run this, execute
|
||||||
|
# bash <(curl -sL bit.ly/reekydots)
|
||||||
|
|
||||||
|
|
||||||
|
# Run this to install my dotfiles on a fresh Arch Linux installation.
|
||||||
|
# This should work on any fresh Arch Linux install with an internet connection
|
||||||
|
|
||||||
|
# When asked a hostname, make sure it's already in the dotrop config,
|
||||||
|
# otherwise dotdrop won't install anything
|
||||||
|
|
||||||
|
export DOTREPO="$HOME/Git/dotfiles"
|
||||||
|
|
||||||
|
read -p "Hostname: " hostname
|
||||||
|
read -p "Install pkglist-extra? [y/n]: " extra
|
||||||
|
|
||||||
|
# install yay
|
||||||
|
sudo pacman -Syu --needed --noconfirm git wget base-devel python python-jinja python-pyaml python-docopt
|
||||||
|
cd ~
|
||||||
|
wget https://aur.archlinux.org/cgit/aur.git/snapshot/yay-bin.tar.gz
|
||||||
|
tar xfv yay-bin.tar.gz
|
||||||
|
cd yay-bin
|
||||||
|
makepkg -sic --noconfirm
|
||||||
|
cd ..
|
||||||
|
rm -r yay-bin*
|
||||||
|
yay -S --noconfirm --combinedupgrade --sudoloop --pgpfetch reflector
|
||||||
|
printf "\nUpdating mirrorlists, this might take a while"
|
||||||
|
sudo reflector --latest 200 --protocol http --protocol https --sort rate --save /etc/pacman.d/mirrorlist
|
||||||
|
|
||||||
|
# install dotfiles
|
||||||
|
mkdir ~/Git
|
||||||
|
git clone https://gitlab.com/ReekyMarko/dotfiles.git ~/Git/dotfiles
|
||||||
|
cd ~/Git/dotfiles
|
||||||
|
git submodule init
|
||||||
|
git submodule update
|
||||||
|
./dotdrop.sh -p "$hostname" install
|
||||||
|
sudo $DOTREPO/dotdrop.sh -p "$hostname" --cfg=$DOTREPO/global-config.yaml install
|
||||||
|
|
||||||
|
# setup locale
|
||||||
|
yay -S --noconfirm locale-en_xx
|
||||||
|
sudo locale-gen
|
||||||
|
|
||||||
|
# set network, timezone and hostname
|
||||||
|
sudo su -c " echo "$hostname" > /etc/hostname"
|
||||||
|
yay -S --noconfirm tzupdate
|
||||||
|
sudo timedatectl set-ntp true
|
||||||
|
sudo tzupdate
|
||||||
|
|
||||||
|
# install essentials
|
||||||
|
yay -S --needed - < pkglist
|
||||||
|
|
||||||
|
# install all other packages
|
||||||
|
if [[ "$extra" == "y" ]]; then
|
||||||
|
yay -S --noconfirm nodejs-lts-carbon
|
||||||
|
yay -S --needed - < pkglist-extra
|
||||||
|
fi
|
||||||
|
|
||||||
|
# install zplugin
|
||||||
|
mkdir ~/.zplugin
|
||||||
|
git clone https://github.com/zdharma/zplugin.git ~/.zplugin/bin
|
||||||
|
|
||||||
|
# install tmux plugin manager
|
||||||
|
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
|
||||||
|
|
||||||
|
# change shell
|
||||||
|
chsh -s /bin/zsh
|
||||||
|
|
||||||
|
# enable autologin for the current user
|
||||||
|
mkdir /etc/systemd/system/getty@tty1.service.d
|
||||||
|
sudo su -c "cat <<CONFIG > /etc/systemd/system/getty@tty1.service.d/override.conf
|
||||||
|
ExecStart=
|
||||||
|
ExecStart=-/usr/bin/agetty --autologin $(who | sed 's/ .*//') --noclear %I $TERM
|
||||||
|
CONFIG"
|
||||||
|
|
||||||
|
printf "\nEverything done. Install display drivers and reboot"
|
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 8bebf7319dc02490bb82aa43b7edd3882240ab0f
|
@ -0,0 +1,21 @@
|
|||||||
|
! Snazzy - Converted from https://github.com/sindresorhus/iterm2-snazzy
|
||||||
|
! using https://github.com/richo/itermcolors2xdefaults
|
||||||
|
URxvt*background: #1e1f28
|
||||||
|
URxvt*foreground: #ebece6
|
||||||
|
URxvt*cursorColor: #e4e4e4
|
||||||
|
URxvt*color0: #000
|
||||||
|
URxvt*color1: #fb4245
|
||||||
|
URxvt*color2: #50fa7b
|
||||||
|
URxvt*color3: #f0fa8b
|
||||||
|
URxvt*color4: #49b9fe
|
||||||
|
URxvt*color5: #fb4cb3
|
||||||
|
URxvt*color6: #8be9fd
|
||||||
|
URxvt*color7: #ededec
|
||||||
|
URxvt*color8: #555555
|
||||||
|
URxvt*color9: #fb4245
|
||||||
|
URxvt*color10: #50fa7b
|
||||||
|
URxvt*color11: #f0fa8b
|
||||||
|
URxvt*color12: #49b9fe
|
||||||
|
URxvt*color13: #fb4cb3
|
||||||
|
URxvt*color14: #8be9fd
|
||||||
|
URxvt*color15: #ededec
|
@ -0,0 +1,89 @@
|
|||||||
|
# -----------------$HOME/.abcde.conf----------------- #
|
||||||
|
#
|
||||||
|
# A sample configuration file to convert music cds to
|
||||||
|
# FLAC using abcde version 2.7.2
|
||||||
|
#
|
||||||
|
# http://andrews-corner.org/linux/abcde/index.html
|
||||||
|
# -------------------------------------------------- #
|
||||||
|
|
||||||
|
# Encode tracks immediately after reading. Saves disk space, gives
|
||||||
|
# better reading of 'scratchy' disks and better troubleshooting of
|
||||||
|
# encoding process but slows the operation of abcde quite a bit:
|
||||||
|
LOWDISK=y
|
||||||
|
|
||||||
|
# Specify the method to use to retrieve the track information,
|
||||||
|
# the alternative is to specify 'musicbrainz':
|
||||||
|
CDDBMETHOD=cddb
|
||||||
|
|
||||||
|
# Make a local cache of cddb entries and then volunteer to use
|
||||||
|
# these entries when and if they match the cd:
|
||||||
|
CDDBCOPYLOCAL="y"
|
||||||
|
CDDBLOCALDIR="$HOME/.cddb"
|
||||||
|
CDDBLOCALRECURSIVE="y"
|
||||||
|
CDDBUSELOCAL="y"
|
||||||
|
|
||||||
|
# Specify the encoder to use for FLAC. In this case
|
||||||
|
# flac is the only choice.
|
||||||
|
FLACENCODERSYNTAX=flac
|
||||||
|
|
||||||
|
# Specify the path to the selected encoder. In most cases the encoder
|
||||||
|
# should be in your $PATH as I illustrate below, otherwise you will
|
||||||
|
# need to specify the full path. For example: /usr/bin/flac
|
||||||
|
FLAC=flac
|
||||||
|
|
||||||
|
# Specify your required encoding options here. Multiple options can
|
||||||
|
# be selected as '--best --another-option' etc.
|
||||||
|
# Overall bitrate is about 880 kbs/s with level 8.
|
||||||
|
FLACOPTS='-s -e -V -8'
|
||||||
|
|
||||||
|
# Output type for FLAC.
|
||||||
|
OUTPUTTYPE="flac"
|
||||||
|
|
||||||
|
# The cd ripping program to use. There are a few choices here: cdda2wav,
|
||||||
|
# dagrab, cddafs (Mac OS X only) and flac. New to abcde 2.7 is 'libcdio'.
|
||||||
|
CDROMREADERSYNTAX=cdparanoia
|
||||||
|
|
||||||
|
# Give the location of the ripping program and pass any extra options,
|
||||||
|
# if using libcdio set 'CD_PARANOIA=cd-paranoia'.
|
||||||
|
CDPARANOIA=cdparanoia
|
||||||
|
CDPARANOIAOPTS="--never-skip=40"
|
||||||
|
|
||||||
|
# Give the location of the CD identification program:
|
||||||
|
CDDISCID=cd-discid
|
||||||
|
|
||||||
|
# Give the base location here for the encoded music files.
|
||||||
|
OUTPUTDIR="$HOME/Documents/Rip"
|
||||||
|
|
||||||
|
# The default actions that abcde will take.
|
||||||
|
ACTIONS=cddb,playlist,read,encode,tag,move,clean
|
||||||
|
|
||||||
|
# Decide here how you want the tracks labelled for a standard 'single-artist',
|
||||||
|
# multi-track encode and also for a multi-track, 'various-artist' encode:
|
||||||
|
OUTPUTFORMAT='${OUTPUT}/${ARTISTFILE}-${ALBUMFILE}/${TRACKNUM}.${TRACKFILE}'
|
||||||
|
VAOUTPUTFORMAT='${OUTPUT}/Various-${ALBUMFILE}/${TRACKNUM}.${ARTISTFILE}-${TRACKFILE}'
|
||||||
|
|
||||||
|
# Decide here how you want the tracks labelled for a standard 'single-artist',
|
||||||
|
# single-track encode and also for a single-track 'various-artist' encode.
|
||||||
|
# (Create a single-track encode with 'abcde -1' from the commandline.)
|
||||||
|
ONETRACKOUTPUTFORMAT='${OUTPUT}/${ARTISTFILE}-${ALBUMFILE}/${ALBUMFILE}'
|
||||||
|
VAONETRACKOUTPUTFORMAT='${OUTPUT}/Various-${ALBUMFILE}/${ALBUMFILE}'
|
||||||
|
|
||||||
|
# Create playlists for single and various-artist encodes. I would suggest
|
||||||
|
# commenting these out for single-track encoding.
|
||||||
|
PLAYLISTFORMAT='${OUTPUT}/${ARTISTFILE}-${ALBUMFILE}/${ALBUMFILE}.m3u'
|
||||||
|
VAPLAYLISTFORMAT='${OUTPUT}/Various-${ALBUMFILE}/${ALBUMFILE}.m3u'
|
||||||
|
|
||||||
|
# This function takes out dots preceding the album name, and removes a grab
|
||||||
|
# bag of illegal characters. It allows spaces, if you do not wish spaces add
|
||||||
|
# in -e 's/ /_/g' after the first sed command.
|
||||||
|
mungefilename ()
|
||||||
|
{
|
||||||
|
echo "$@" | sed -e 's/^\.*//' | tr -d ":><|*/\"'?[:cntrl:]"
|
||||||
|
}
|
||||||
|
|
||||||
|
# What extra options?
|
||||||
|
MAXPROCS=2 # Run a few encoders simultaneously
|
||||||
|
PADTRACKS=y # Makes tracks 01 02 not 1 2
|
||||||
|
EXTRAVERBOSE=2 # Useful for debugging
|
||||||
|
COMMENT='abcde version 2.7.2' # Place a comment...
|
||||||
|
EJECTCD=y # Please eject cd when finished :-)
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,182 @@
|
|||||||
|
window:
|
||||||
|
dimensions:
|
||||||
|
columns: 0
|
||||||
|
lines: 0
|
||||||
|
padding:
|
||||||
|
x: 30
|
||||||
|
y: 20
|
||||||
|
dynamic_padding: false
|
||||||
|
decorations: full
|
||||||
|
scrolling:
|
||||||
|
history: 10000
|
||||||
|
multiplier: 3
|
||||||
|
faux_multiplier: 3
|
||||||
|
auto_scroll: false
|
||||||
|
tabspaces: 8
|
||||||
|
font:
|
||||||
|
normal:
|
||||||
|
family: Hack Nerd Font Mono
|
||||||
|
size: 12.0
|
||||||
|
offset:
|
||||||
|
x: 0
|
||||||
|
y: 0
|
||||||
|
glyph_offset:
|
||||||
|
x: 0
|
||||||
|
y: 0
|
||||||
|
use_thin_strokes: true
|
||||||
|
draw_bold_text_with_bright_colors: true
|
||||||
|
colors:
|
||||||
|
# Default colors
|
||||||
|
primary:
|
||||||
|
# hard contrast: background = '0x1d2021'
|
||||||
|
background: '0x282828'
|
||||||
|
# soft contrast: background = '0x32302f'
|
||||||
|
foreground: '0xebdbb2'
|
||||||
|
|
||||||
|
# Normal colors
|
||||||
|
normal:
|
||||||
|
black: '0x282828'
|
||||||
|
red: '0xcc241d'
|
||||||
|
green: '0x98971a'
|
||||||
|
yellow: '0xd79921'
|
||||||
|
blue: '0x458588'
|
||||||
|
magenta: '0xb16286'
|
||||||
|
cyan: '0x689d6a'
|
||||||
|
white: '0xa89984'
|
||||||
|
|
||||||
|
# Bright colors
|
||||||
|
bright:
|
||||||
|
black: '0x928374'
|
||||||
|
red: '0xfb4934'
|
||||||
|
green: '0xb8bb26'
|
||||||
|
yellow: '0xfabd2f'
|
||||||
|
blue: '0x83a598'
|
||||||
|
magenta: '0xd3869b'
|
||||||
|
cyan: '0x8ec07c'
|
||||||
|
white: '0xebdbb2'
|
||||||
|
visual_bell:
|
||||||
|
animation: EaseOutExpo
|
||||||
|
duration: 0
|
||||||
|
color: '0xffffff'
|
||||||
|
background_opacity: 1.0
|
||||||
|
mouse_bindings:
|
||||||
|
- { mouse: Middle, action: PasteSelection }
|
||||||
|
mouse:
|
||||||
|
double_click: { threshold: 300 }
|
||||||
|
triple_click: { threshold: 300 }
|
||||||
|
hide_when_typing: false
|
||||||
|
url:
|
||||||
|
modifiers: None
|
||||||
|
selection:
|
||||||
|
semantic_escape_chars: ",│`|:\"' ()[]{}<>"
|
||||||
|
save_to_clipboard: false
|
||||||
|
dynamic_title: true
|
||||||
|
cursor:
|
||||||
|
style: Block
|
||||||
|
unfocused_hollow: true
|
||||||
|
live_config_reload: true
|
||||||
|
enable_experimental_conpty_backend: true
|
||||||
|
alt_send_esc: true
|
||||||
|
key_bindings:
|
||||||
|
- { key: Paste, action: Paste }
|
||||||
|
- { key: Copy, action: Copy }
|
||||||
|
- { key: L, mods: Control, action: ClearLogNotice }
|
||||||
|
- { key: L, mods: Control, chars: "\x0c" }
|
||||||
|
- { key: Home, chars: "\x1bOH", mode: AppCursor }
|
||||||
|
- { key: Home, chars: "\x1b[H", mode: ~AppCursor }
|
||||||
|
- { key: End, chars: "\x1bOF", mode: AppCursor }
|
||||||
|
- { key: End, chars: "\x1b[F", mode: ~AppCursor }
|
||||||
|
- { key: PageUp, mods: Shift, action: ScrollPageUp, mode: ~Alt }
|
||||||
|
- { key: PageUp, mods: Shift, chars: "\x1b[5;2~", mode: Alt }
|
||||||
|
- { key: PageUp, mods: Control, chars: "\x1b[5;5~" }
|
||||||
|
- { key: PageUp, chars: "\x1b[5~" }
|
||||||
|
- { key: PageDown, mods: Shift, action: ScrollPageDown, mode: ~Alt }
|
||||||
|
- { key: PageDown, mods: Shift, chars: "\x1b[6;2~", mode: Alt }
|
||||||
|
- { key: PageDown, mods: Control, chars: "\x1b[6;5~" }
|
||||||
|
- { key: PageDown, chars: "\x1b[6~" }
|
||||||
|
- { key: Tab, mods: Shift, chars: "\x1b[Z" }
|
||||||
|
- { key: Back, chars: "\x7f" }
|
||||||
|
- { key: Back, mods: Alt, chars: "\x1b\x7f" }
|
||||||
|
- { key: Insert, chars: "\x1b[2~" }
|
||||||
|
- { key: Delete, chars: "\x1b[3~" }
|
||||||
|
- { key: Left, mods: Shift, chars: "\x1b[1;2D" }
|
||||||
|
- { key: Left, mods: Control, chars: "\x1b[1;5D" }
|
||||||
|
- { key: Left, mods: Alt, chars: "\x1b[1;3D" }
|
||||||
|
- { key: Left, chars: "\x1b[D", mode: ~AppCursor }
|
||||||
|
- { key: Left, chars: "\x1bOD", mode: AppCursor }
|
||||||
|
- { key: Right, mods: Shift, chars: "\x1b[1;2C" }
|
||||||
|
- { key: Right, mods: Control, chars: "\x1b[1;5C" }
|
||||||
|
- { key: Right, mods: Alt, chars: "\x1b[1;3C" }
|
||||||
|
- { key: Right, chars: "\x1b[C", mode: ~AppCursor }
|
||||||
|
- { key: Right, chars: "\x1bOC", mode: AppCursor }
|
||||||
|
- { key: Up, mods: Shift, chars: "\x1b[1;2A" }
|
||||||
|
- { key: Up, mods: Control, chars: "\x1b[1;5A" }
|
||||||
|
- { key: Up, mods: Alt, chars: "\x1b[1;3A" }
|
||||||
|
- { key: Up, chars: "\x1b[A", mode: ~AppCursor }
|
||||||
|
- { key: Up, chars: "\x1bOA", mode: AppCursor }
|
||||||
|
- { key: Down, mods: Shift, chars: "\x1b[1;2B" }
|
||||||
|
- { key: Down, mods: Control, chars: "\x1b[1;5B" }
|
||||||
|
- { key: Down, mods: Alt, chars: "\x1b[1;3B" }
|
||||||
|
- { key: Down, chars: "\x1b[B", mode: ~AppCursor }
|
||||||
|
- { key: Down, chars: "\x1bOB", mode: AppCursor }
|
||||||
|
- { key: F1, chars: "\x1bOP" }
|
||||||
|
- { key: F2, chars: "\x1bOQ" }
|
||||||
|
- { key: F3, chars: "\x1bOR" }
|
||||||
|
- { key: F4, chars: "\x1bOS" }
|
||||||
|
- { key: F5, chars: "\x1b[15~" }
|
||||||
|
- { key: F6, chars: "\x1b[17~" }
|
||||||
|
- { key: F7, chars: "\x1b[18~" }
|
||||||
|
- { key: F8, chars: "\x1b[19~" }
|
||||||
|
- { key: F9, chars: "\x1b[20~" }
|
||||||
|
- { key: F10, chars: "\x1b[21~" }
|
||||||
|
- { key: F11, chars: "\x1b[23~" }
|
||||||
|
- { key: F12, chars: "\x1b[24~" }
|
||||||
|
- { key: F1, mods: Shift, chars: "\x1b[1;2P" }
|
||||||
|
- { key: F2, mods: Shift, chars: "\x1b[1;2Q" }
|
||||||
|
- { key: F3, mods: Shift, chars: "\x1b[1;2R" }
|
||||||
|
- { key: F4, mods: Shift, chars: "\x1b[1;2S" }
|
||||||
|
- { key: F5, mods: Shift, chars: "\x1b[15;2~" }
|
||||||
|
- { key: F6, mods: Shift, chars: "\x1b[17;2~" }
|
||||||
|
- { key: F7, mods: Shift, chars: "\x1b[18;2~" }
|
||||||
|
- { key: F8, mods: Shift, chars: "\x1b[19;2~" }
|
||||||
|
- { key: F9, mods: Shift, chars: "\x1b[20;2~" }
|
||||||
|
- { key: F10, mods: Shift, chars: "\x1b[21;2~" }
|
||||||
|
- { key: F11, mods: Shift, chars: "\x1b[23;2~" }
|
||||||
|
- { key: F12, mods: Shift, chars: "\x1b[24;2~" }
|
||||||
|
- { key: F1, mods: Control, chars: "\x1b[1;5P" }
|
||||||
|
- { key: F2, mods: Control, chars: "\x1b[1;5Q" }
|
||||||
|
- { key: F3, mods: Control, chars: "\x1b[1;5R" }
|
||||||
|
- { key: F4, mods: Control, chars: "\x1b[1;5S" }
|
||||||
|
- { key: F5, mods: Control, chars: "\x1b[15;5~" }
|
||||||
|
- { key: F6, mods: Control, chars: "\x1b[17;5~" }
|
||||||
|
- { key: F7, mods: Control, chars: "\x1b[18;5~" }
|
||||||
|
- { key: F8, mods: Control, chars: "\x1b[19;5~" }
|
||||||
|
- { key: F9, mods: Control, chars: "\x1b[20;5~" }
|
||||||
|
- { key: F10, mods: Control, chars: "\x1b[21;5~" }
|
||||||
|
- { key: F11, mods: Control, chars: "\x1b[23;5~" }
|
||||||
|
- { key: F12, mods: Control, chars: "\x1b[24;5~" }
|
||||||
|
- { key: F1, mods: Alt, chars: "\x1b[1;6P" }
|
||||||
|
- { key: F2, mods: Alt, chars: "\x1b[1;6Q" }
|
||||||
|
- { key: F3, mods: Alt, chars: "\x1b[1;6R" }
|
||||||
|
- { key: F4, mods: Alt, chars: "\x1b[1;6S" }
|
||||||
|
- { key: F5, mods: Alt, chars: "\x1b[15;6~" }
|
||||||
|
- { key: F6, mods: Alt, chars: "\x1b[17;6~" }
|
||||||
|
- { key: F7, mods: Alt, chars: "\x1b[18;6~" }
|
||||||
|
- { key: F8, mods: Alt, chars: "\x1b[19;6~" }
|
||||||
|
- { key: F9, mods: Alt, chars: "\x1b[20;6~" }
|
||||||
|
- { key: F10, mods: Alt, chars: "\x1b[21;6~" }
|
||||||
|
- { key: F11, mods: Alt, chars: "\x1b[23;6~" }
|
||||||
|
- { key: F12, mods: Alt, chars: "\x1b[24;6~" }
|
||||||
|
- { key: F1, mods: Super, chars: "\x1b[1;3P" }
|
||||||
|
- { key: F2, mods: Super, chars: "\x1b[1;3Q" }
|
||||||
|
- { key: F3, mods: Super, chars: "\x1b[1;3R" }
|
||||||
|
- { key: F4, mods: Super, chars: "\x1b[1;3S" }
|
||||||
|
- { key: F5, mods: Super, chars: "\x1b[15;3~" }
|
||||||
|
- { key: F6, mods: Super, chars: "\x1b[17;3~" }
|
||||||
|
- { key: F7, mods: Super, chars: "\x1b[18;3~" }
|
||||||
|
- { key: F8, mods: Super, chars: "\x1b[19;3~" }
|
||||||
|
- { key: F9, mods: Super, chars: "\x1b[20;3~" }
|
||||||
|
- { key: F10, mods: Super, chars: "\x1b[21;3~" }
|
||||||
|
- { key: F11, mods: Super, chars: "\x1b[23;3~" }
|
||||||
|
- { key: F12, mods: Super, chars: "\x1b[24;3~" }
|
||||||
|
- { key: NumpadEnter, chars: "\n" }
|
@ -0,0 +1,9 @@
|
|||||||
|
continue
|
||||||
|
file-allocation=falloc
|
||||||
|
log-level=warn
|
||||||
|
max-connection-per-server=4
|
||||||
|
max-concurrent-downloads=3
|
||||||
|
max-overall-download-limit=0
|
||||||
|
min-split-size=5M
|
||||||
|
enable-http-pipelining=true
|
||||||
|
rpc-secret="{{@@ env['PASS_ARIA2'] @@}}"
|
@ -0,0 +1,45 @@
|
|||||||
|
directory: ~/Music
|
||||||
|
library: ~/Music/beets.db
|
||||||
|
plugins:
|
||||||
|
- acousticbrainz
|
||||||
|
- check
|
||||||
|
- edit
|
||||||
|
- fetchart
|
||||||
|
- follow
|
||||||
|
- fuzzy
|
||||||
|
- info
|
||||||
|
- lastgenre
|
||||||
|
- lyrics
|
||||||
|
- mbcollection
|
||||||
|
- mpdupdate
|
||||||
|
- play
|
||||||
|
- replaygain
|
||||||
|
- thumbnails
|
||||||
|
- web
|
||||||
|
import:
|
||||||
|
copy: no
|
||||||
|
move: yes
|
||||||
|
link: no
|
||||||
|
lastgenre:
|
||||||
|
whitelist: ~/.config/beets/whitelist
|
||||||
|
lyrics:
|
||||||
|
fallback: ''
|
||||||
|
play:
|
||||||
|
command: mpv
|
||||||
|
mpd:
|
||||||
|
host: localhost
|
||||||
|
port: 6600
|
||||||
|
follow:
|
||||||
|
email: reekymarko@reekynet.com
|
||||||
|
password: "{{@@ env['PASS_MUSPY'] @@}}"
|
||||||
|
userid: w8njp08ude90mfzsgumjhqinnirj4g
|
||||||
|
auto: yes
|
||||||
|
replaygain:
|
||||||
|
backend: gstreamer
|
||||||
|
auto: yes
|
||||||
|
musicbrainz:
|
||||||
|
user: ReekyMarko
|
||||||
|
pass: "{{@@ env['PASS_MUSICBRAINZ'] @@}}"
|
||||||
|
mbcollection:
|
||||||
|
auto: "yes"
|
||||||
|
collection: "a4955b5c-db7f-4e27-9887-f77f820bad34"
|
@ -0,0 +1,37 @@
|
|||||||
|
avantgarde
|
||||||
|
experimental music
|
||||||
|
lofi
|
||||||
|
blues
|
||||||
|
classical
|
||||||
|
comedy
|
||||||
|
comedy music
|
||||||
|
comedy rock
|
||||||
|
humor
|
||||||
|
parody music
|
||||||
|
standup
|
||||||
|
country
|
||||||
|
country rap
|
||||||
|
country rock
|
||||||
|
rockabilly
|
||||||
|
easy listening
|
||||||
|
electronic
|
||||||
|
drum and bass
|
||||||
|
hardcore
|
||||||
|
house
|
||||||
|
techno
|
||||||
|
uk garage
|
||||||
|
dubstep
|
||||||
|
rap
|
||||||
|
folk
|
||||||
|
hip hop
|
||||||
|
countryrap
|
||||||
|
rap rock
|
||||||
|
jazz
|
||||||
|
pop
|
||||||
|
rhythm and blues
|
||||||
|
rock
|
||||||
|
hard rock
|
||||||
|
alternative rock
|
||||||
|
heavy metal
|
||||||
|
punk rock
|
||||||
|
reggae
|
@ -0,0 +1,75 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# set screen timeout
|
||||||
|
xset s 300 120
|
||||||
|
xset dpms 422
|
||||||
|
|
||||||
|
# screen locker
|
||||||
|
xss-lock -n ~/Scripts/dim-screen.sh -- evenbetterlockscreen -l &
|
||||||
|
|
||||||
|
# lock screen
|
||||||
|
evenbetterlockscreen -l &
|
||||||
|
|
||||||
|
# set wallpaper
|
||||||
|
wal -R
|
||||||
|
|
||||||
|
# Start hotkey daemon
|
||||||
|
sxhkd &
|
||||||
|
|
||||||
|
bspc monitor -d web term chat mail music 6 7
|
||||||
|
|
||||||
|
bspc config border_width 0
|
||||||
|
bspc config window_gap 37
|
||||||
|
|
||||||
|
bspc config split_ratio 0.52
|
||||||
|
bspc config borderless_monocle true
|
||||||
|
bspc config gapless_monocle true
|
||||||
|
|
||||||
|
bspc rule -a TelegramDesktop desktop=^3
|
||||||
|
bspc rule -a Franz desktop=^3
|
||||||
|
bspc rule -a Thunderbird desktop=^4
|
||||||
|
|
||||||
|
bspc rule -a Zathura state=tiled
|
||||||
|
bspc rule -a Nightly:Navigator state=tiled
|
||||||
|
bspc rule -a kdeconnect-indicator state=tiled
|
||||||
|
bspc rule -a libreoffice state=tiled
|
||||||
|
bspc rule -a Screenkey manage=off
|
||||||
|
|
||||||
|
bspc config super mod4
|
||||||
|
bspc config pointer_action1 move
|
||||||
|
bspc config pointer_action2 none
|
||||||
|
bspc config pointer_action3 resize_corner
|
||||||
|
bspc config click_to_focus true
|
||||||
|
|
||||||
|
# set pywal colors
|
||||||
|
. "${HOME}/.cache/wal/colors.sh"
|
||||||
|
bspc config normal_border_color "$color1"
|
||||||
|
bspc config active_border_color "$color2"
|
||||||
|
bspc config focused_border_color "$color15"
|
||||||
|
bspc config presel_feedback_color "$color1"
|
||||||
|
|
||||||
|
|
||||||
|
# set cursor style
|
||||||
|
xsetroot -cursor_name left_ptr
|
||||||
|
|
||||||
|
# startup applications
|
||||||
|
joplin-desktop &
|
||||||
|
compton -f --config ~/.config/compton/config &
|
||||||
|
redshift &
|
||||||
|
/usr/lib/xfce4/notifyd/xfce4-notifyd &
|
||||||
|
telegram-desktop &
|
||||||
|
setxkbmap eu &
|
||||||
|
/usr/lib/kdeconnectd &
|
||||||
|
kdeconnect-indicator &
|
||||||
|
udiskie --tray &
|
||||||
|
xfce4-clipman &
|
||||||
|
/usr/bin/gnome-keyring-daemon --start --components=secrets &
|
||||||
|
~/Scripts/polybar.sh &
|
||||||
|
/usr/lib/mate-polkit/polkit-mate-authentication-agent-1 &
|
||||||
|
blueberry-tray &
|
||||||
|
nm-applet &
|
||||||
|
thunderbird &
|
||||||
|
mpDris2 &
|
||||||
|
|
||||||
|
# hide mouse cursor
|
||||||
|
unclutter -idle 1 &
|
@ -0,0 +1,53 @@
|
|||||||
|
backend = "glx";
|
||||||
|
glx-no-stencil = true;
|
||||||
|
glx-copy-from-front = false;
|
||||||
|
glx-swap-method = 1;
|
||||||
|
inactive-opacity-override = true;
|
||||||
|
|
||||||
|
# Fix tearing
|
||||||
|
vsync = "opengl-swc";
|
||||||
|
unredir-if-possible = false;
|
||||||
|
paint-on-overlay = true;
|
||||||
|
|
||||||
|
# Shadow
|
||||||
|
shadow = true; # Enabled client-side shadows on windows.
|
||||||
|
no-dock-shadow = true; # Avoid drawing shadows on dock/panel windows.
|
||||||
|
no-dnd-shadow = true; # Don't draw shadows on DND windows.
|
||||||
|
shadow-radius = 10; # The blur radius for shadows. (default 12)
|
||||||
|
shadow-offset-x = -15; # The left offset for shadows. (default -15)
|
||||||
|
shadow-offset-y = -15; # The top offset for shadows. (default -15)
|
||||||
|
shadow-opacity = 0.5;
|
||||||
|
menu-opacity = 1;
|
||||||
|
shadow-exclude = [
|
||||||
|
"class_g = 'slop'",
|
||||||
|
"n:e:Notification",
|
||||||
|
"class_g ?= 'Xfce4-notifyd'",
|
||||||
|
#"class_g ?= 'Xfce4-power-manager'"
|
||||||
|
];
|
||||||
|
|
||||||
|
opacity-rule = [
|
||||||
|
"50:class_g = 'Bspwm' && class_i = 'presel_feedback'",
|
||||||
|
"99:class_g = 'slop'"
|
||||||
|
];
|
||||||
|
|
||||||
|
# The shadow exclude options are helpful if you have shadows enabled. Due to the way compton draws its shadows, certain applications will have visual glitches
|
||||||
|
# (most applications are fine, only apps that do weird things with xshapes or argb are affected).
|
||||||
|
# This list includes all the affected apps I found in my testing. The "! name~=''" part excludes shadows on any "Unknown" windows, this prevents a visual glitch with the XFWM alt tab switcher.
|
||||||
|
|
||||||
|
# Fading
|
||||||
|
fading = true; # Fade windows during opacity changes.
|
||||||
|
fade-delta = 4; # The time between steps in a fade in milliseconds. (default 10).
|
||||||
|
fade-in-step = 0.03; # Opacity change between steps while fading in. (default 0.028).
|
||||||
|
fade-out-step = 0.03; # Opacity change between steps while fading out. (default 0.03).
|
||||||
|
no-fading-openclose = false; # Fade windows in/out when opening/closing
|
||||||
|
|
||||||
|
detect-client-opacity = true; # This prevents opacity being ignored for some apps. For example without this enabled my xfce4-notifyd is 100% opacity no matter what.
|
||||||
|
|
||||||
|
#Window type settings
|
||||||
|
wintypes:
|
||||||
|
{
|
||||||
|
tooltip = { fade = true; shadow = false; };
|
||||||
|
menu = { shadow = false; };
|
||||||
|
dropdown_menu = { shadow = false; };
|
||||||
|
popup_menu = { shadow = false; };
|
||||||
|
};
|
@ -0,0 +1,6 @@
|
|||||||
|
languages:
|
||||||
|
markdown:
|
||||||
|
lint-command: 'yarn --cwd ~/.bin/node run markdownlint -s'
|
||||||
|
lint-stdin: true
|
||||||
|
lint-formats:
|
||||||
|
- '%f: %l: %m'
|
@ -0,0 +1,3 @@
|
|||||||
|
_JAVA_AWT_WM_NONREPARENTING=1
|
||||||
|
_JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
|
||||||
|
JAVA_FONTS=/usr/share/fonts/TTF
|
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version='1.0'?>
|
||||||
|
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
|
||||||
|
<fontconfig>
|
||||||
|
|
||||||
|
<alias>
|
||||||
|
<family>sans-serif</family>
|
||||||
|
<prefer>
|
||||||
|
<family>Overpass</family>
|
||||||
|
</prefer>
|
||||||
|
</alias>
|
||||||
|
|
||||||
|
<alias>
|
||||||
|
<family>serif</family>
|
||||||
|
<prefer>
|
||||||
|
<family>Overpass</family>
|
||||||
|
</prefer>
|
||||||
|
</alias>
|
||||||
|
|
||||||
|
<alias>
|
||||||
|
<family>monospace</family>
|
||||||
|
<prefer>
|
||||||
|
<family>Hack Nerd Font Mono</family>
|
||||||
|
</prefer>
|
||||||
|
</alias>
|
||||||
|
|
||||||
|
</fontconfig>
|
@ -0,0 +1,3 @@
|
|||||||
|
VteTerminal, vte-terminal {
|
||||||
|
padding: 40px;
|
||||||
|
}
|
@ -0,0 +1,132 @@
|
|||||||
|
# ~/.config/i3/config
|
||||||
|
set $mod mod4
|
||||||
|
set $term alacritty
|
||||||
|
|
||||||
|
bindsym $mod+d exec --no-startup-id rofi -show-icons -show drun -config /home/reekymarko/.config/rofi/config
|
||||||
|
|
||||||
|
font pango:System San Francisco Display 11
|
||||||
|
|
||||||
|
new_window 1pixel
|
||||||
|
hide_edge_borders vertical
|
||||||
|
|
||||||
|
# Use Mouse+$mod to drag floating windows to their wanted position
|
||||||
|
floating_modifier $mod
|
||||||
|
|
||||||
|
# start a terminal
|
||||||
|
bindsym $mod+Return exec --no-startup-id $term
|
||||||
|
|
||||||
|
# kill focused window
|
||||||
|
bindsym $mod+w kill
|
||||||
|
|
||||||
|
# change focus
|
||||||
|
bindsym $mod+h focus left
|
||||||
|
bindsym $mod+j focus down
|
||||||
|
bindsym $mod+k focus up
|
||||||
|
bindsym $mod+l focus right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Left focus left
|
||||||
|
bindsym $mod+Down focus down
|
||||||
|
bindsym $mod+Up focus up
|
||||||
|
bindsym $mod+Right focus right
|
||||||
|
|
||||||
|
# move focused window
|
||||||
|
bindsym $mod+Shift+h move left
|
||||||
|
bindsym $mod+Shift+j move down
|
||||||
|
bindsym $mod+Shift+k move up
|
||||||
|
bindsym $mod+Shift+l move right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Shift+Left move left
|
||||||
|
bindsym $mod+Shift+Down move down
|
||||||
|
bindsym $mod+Shift+Up move up
|
||||||
|
bindsym $mod+Shift+Right move right
|
||||||
|
|
||||||
|
# split in horizontal orientation
|
||||||
|
bindsym $mod+y split h
|
||||||
|
|
||||||
|
# split in vertical orientation
|
||||||
|
bindsym $mod+x split v
|
||||||
|
|
||||||
|
# enter fullscreen mode for the focused container
|
||||||
|
bindsym $mod+f fullscreen toggle
|
||||||
|
|
||||||
|
# change container layout (stacked, tabbed, toggle split)
|
||||||
|
bindsym $mod+s layout stacking
|
||||||
|
bindsym $mod+w layout tabbed
|
||||||
|
bindsym $mod+e layout toggle split
|
||||||
|
|
||||||
|
# toggle tiling / floating
|
||||||
|
bindsym $mod+Shift+space floating toggle
|
||||||
|
|
||||||
|
# change focus between tiling / floating windows
|
||||||
|
bindsym $mod+space focus mode_toggle
|
||||||
|
# focus the parent container
|
||||||
|
bindsym $mod+a focus parent
|
||||||
|
|
||||||
|
focus_follows_mouse no
|
||||||
|
|
||||||
|
# focus the child container
|
||||||
|
#bindsym $mod+d focus child
|
||||||
|
|
||||||
|
# open with clipboard contents
|
||||||
|
bindsym $mod+v exec --no-startup-id mpv --ytdl-format="bestvideo[ext=mp4][height<=?1080]+bestaudio[ext=m4a]" $(xclip -o)
|
||||||
|
bindym $mod+Shift+b exec --no-startup-id firefox-nightly $(xclip -o)
|
||||||
|
|
||||||
|
#workspace names
|
||||||
|
set $workspace1 "1: Start "
|
||||||
|
set $workspace2 "2"
|
||||||
|
set $workspace3 "3"
|
||||||
|
set $workspace4 "4"
|
||||||
|
set $workspace5 "5"
|
||||||
|
set $workspace6 "6"
|
||||||
|
set $workspace7 "7"
|
||||||
|
set $workspace8 "8: Mail "
|
||||||
|
set $workspace9 "9: Messaging "
|
||||||
|
set $workspace10 "10: Music "
|
||||||
|
|
||||||
|
# switch to workspace
|
||||||
|
bindsym $mod+1 workspace $workspace1
|
||||||
|
bindsym $mod+2 workspace $workspace2
|
||||||
|
bindsym $mod+3 workspace $workspace3
|
||||||
|
bindsym $mod+4 workspace $workspace4
|
||||||
|
bindsym $mod+5 workspace $workspace5
|
||||||
|
bindsym $mod+6 workspace $workspace6
|
||||||
|
bindsym $mod+7 workspace $workspace7
|
||||||
|
bindsym $mod+8 workspace $workspace8
|
||||||
|
bindsym $mod+9 workspace $workspace9
|
||||||
|
bindsym $mod+0 workspace $workspace10
|
||||||
|
|
||||||
|
# move focused container to workspace
|
||||||
|
bindsym $mod+Shift+1 move container to workspace $workspace1
|
||||||
|
bindsym $mod+Shift+2 move container to workspace $workspace2
|
||||||
|
bindsym $mod+Shift+3 move container to workspace $workspace3
|
||||||
|
bindsym $mod+Shift+4 move container to workspace $workspace4
|
||||||
|
bindsym $mod+Shift+5 move container to workspace $workspace5
|
||||||
|
bindsym $mod+Shift+6 move container to workspace $workspace6
|
||||||
|
bindsym $mod+Shift+7 move container to workspace $workspace7
|
||||||
|
bindsym $mod+Shift+8 move container to workspace $workspace8
|
||||||
|
bindsym $mod+Shift+9 move container to workspace $workspace9
|
||||||
|
bindsym $mod+Shift+0 move container to workspace $workspace10
|
||||||
|
|
||||||
|
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||||
|
bindsym $mod+Shift+r restart
|
||||||
|
# exit i3 (logs you out of your X session)
|
||||||
|
bindsym $mod+Shift+e exec --no-startup-id i3-msg exit
|
||||||
|
|
||||||
|
|
||||||
|
# pulseaudio controls
|
||||||
|
bindsym XF86AudioRaiseVolume exec --no-startup-id amixer -D pulse sset Master 5%+ # increase sound volume
|
||||||
|
bindsym XF86AudioLowerVolume exec --no-startup-id amixer -D pulse sset Master 5%- # decrease sound volume
|
||||||
|
bindsym XF86AudioMute exec --no-startup-id amixer -D pulse set Master 1+ toggle # mute sound
|
||||||
|
|
||||||
|
# open browser
|
||||||
|
bindsym $mod+b exec --no-startup-id firefox-nightly
|
||||||
|
|
||||||
|
# window rules
|
||||||
|
for_window [class="Steam"] move to workspace $workspace2
|
||||||
|
|
||||||
|
# autostart applications
|
||||||
|
exec --no-startup-id setxkbmap eu
|
||||||
|
exec --no-startup-id steam-native
|
||||||
|
exec --no-startup-id kodi
|
@ -0,0 +1,28 @@
|
|||||||
|
[calendars]
|
||||||
|
|
||||||
|
[[birthdays]]
|
||||||
|
path = ~/.calendars/contact_birthdays
|
||||||
|
type = calendar
|
||||||
|
color = light green
|
||||||
|
readonly = True
|
||||||
|
|
||||||
|
[[school]]
|
||||||
|
path = ~/.calendars/school
|
||||||
|
type = calendar
|
||||||
|
color = light green
|
||||||
|
|
||||||
|
[[personal]]
|
||||||
|
path = ~/.calendars/personal
|
||||||
|
type = calendar
|
||||||
|
color = light green
|
||||||
|
|
||||||
|
[[card_local]]
|
||||||
|
path = ~/.contacts/*
|
||||||
|
type = discover
|
||||||
|
|
||||||
|
[locale]
|
||||||
|
timeformat = %H:%M
|
||||||
|
dateformat = %Y-%m-%d
|
||||||
|
longdateformat = %Y-%m-%d
|
||||||
|
datetimeformat = %Y-%m-%d %H:%M
|
||||||
|
longdatetimeformat = %Y-%m-%d %H:%M
|
@ -0,0 +1,28 @@
|
|||||||
|
# example configuration file for khard version >= 0.11.0
|
||||||
|
# place it under $HOME/.config/khard/khard.conf
|
||||||
|
|
||||||
|
[addressbooks]
|
||||||
|
[[contacts]]
|
||||||
|
path = ~/.contacts
|
||||||
|
|
||||||
|
[general]
|
||||||
|
debug = no
|
||||||
|
default_action = list
|
||||||
|
editor = vim
|
||||||
|
merge_editor = vimdiff
|
||||||
|
|
||||||
|
[contact table]
|
||||||
|
# display names by first or last name: first_name / last_name
|
||||||
|
display = first_name
|
||||||
|
# group by address book: yes / no
|
||||||
|
group_by_addressbook = no
|
||||||
|
# reverse table ordering: yes / no
|
||||||
|
reverse = no
|
||||||
|
# append nicknames to name column: yes / no
|
||||||
|
show_nicknames = no
|
||||||
|
# show uid table column: yes / no
|
||||||
|
show_uids = yes
|
||||||
|
# sort by first or last name: first_name / last_name
|
||||||
|
sort = last_name
|
||||||
|
# localize dates: yes / no
|
||||||
|
localize_dates = yes
|
@ -0,0 +1,2 @@
|
|||||||
|
MPDAddress = "127.0.0.1:6600"
|
||||||
|
ListenbrainzToken = "{{@@ env['PASS_LISTENBRAINZ'] @@}}"
|
@ -0,0 +1,6 @@
|
|||||||
|
background-color=#282828
|
||||||
|
text-color=#EBDBB2
|
||||||
|
border-color=#F7B125
|
||||||
|
icons=1
|
||||||
|
default-timeout=5000
|
||||||
|
max-visible=6
|
@ -0,0 +1,41 @@
|
|||||||
|
mpvq %U
|
||||||
|
^https?://invidio.us/.*
|
||||||
|
|
||||||
|
mpvq %U
|
||||||
|
^https?://(m.)?(www.)?youtube.com/watch\?.*v=
|
||||||
|
|
||||||
|
mpvq %U
|
||||||
|
^https?://(www.)?youtube.com/playlist\?.*list=
|
||||||
|
|
||||||
|
mpvq %U
|
||||||
|
^https?://(www.)?youtu.be/
|
||||||
|
|
||||||
|
mpvq %U
|
||||||
|
^https?://(www.)?(m.)?twitch.tv/
|
||||||
|
|
||||||
|
mpvq %U
|
||||||
|
^https?://(?:[a-z0-9\-]+\.)+[a-z]{2,6}(?:/[^/#?]+)+\.(?:mp4|mkv|webm|avi|3gp|gif|gifv)
|
||||||
|
|
||||||
|
mpvq %U
|
||||||
|
^https?://www.facebook.com/.*/videos/
|
||||||
|
|
||||||
|
mpvq %U
|
||||||
|
^https?://gfycat.com/.*
|
||||||
|
|
||||||
|
mpvq %U
|
||||||
|
^https?://vimeo.com/.*
|
||||||
|
|
||||||
|
mpvq %U
|
||||||
|
^https?://v.redd.it/.*
|
||||||
|
|
||||||
|
imgurviewer %U
|
||||||
|
^https?://(www.)?imgur.com/a/
|
||||||
|
|
||||||
|
imgurviewer %U
|
||||||
|
^https?://(www.)?imgur.com/gallery/
|
||||||
|
|
||||||
|
imageviewer %U
|
||||||
|
^https?://(?:[a-z0-9\-]+\.)+[a-z]{2,6}(?:/[^/#?]+)+\.(?:jpg|jpeg|png|svg)
|
||||||
|
|
||||||
|
zathura %U
|
||||||
|
^https?://(?:[a-z0-9\-]+\.)+[a-z]{2,6}(?:/[^/#?]+)+\.(?:pdf)
|
@ -0,0 +1,14 @@
|
|||||||
|
#[Connection]
|
||||||
|
#host = localhost
|
||||||
|
#port = 6600
|
||||||
|
#password = {{@@ env['PASS_MPD'] @@}}
|
||||||
|
|
||||||
|
#[Library]
|
||||||
|
#music_dir = ~/Music
|
||||||
|
#cover_regex = ^(album|cover|\.?folder|front).*\.(gif|jpeg|jpg|png)$
|
||||||
|
|
||||||
|
[Bling]
|
||||||
|
#mmkeys = True
|
||||||
|
notify = False
|
||||||
|
#Urgency of the notification: 0 for low, 1 for medium and 2 for high.
|
||||||
|
#notify_urgency = 0
|
@ -0,0 +1,20 @@
|
|||||||
|
music_directory "~/Music"
|
||||||
|
playlist_directory "~/Music/Playlists"
|
||||||
|
db_file "~/.mpd/database"
|
||||||
|
log_file "~/.mpd/log"
|
||||||
|
pid_file "~/.mpd/pid"
|
||||||
|
state_file "~/.mpd/state"
|
||||||
|
sticker_file "~/.mpd/sticker.sql"
|
||||||
|
input {
|
||||||
|
plugin "curl"
|
||||||
|
}
|
||||||
|
audio_output {
|
||||||
|
type "fifo"
|
||||||
|
name "my_fifo"
|
||||||
|
path "/tmp/mpd.fifo"
|
||||||
|
format "44100:16:2"
|
||||||
|
}
|
||||||
|
audio_output {
|
||||||
|
type "pulse"
|
||||||
|
name "pulse audio"
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
Alt+LEFT add video-pan-x -0.1
|
||||||
|
Alt+h add video-pan-x -0.1
|
||||||
|
|
||||||
|
Alt+DOWN add video-pan-y +0.1
|
||||||
|
Alt+j add video-pan-y +0.1
|
||||||
|
|
||||||
|
Alt+UP add video-pan-y -0.1
|
||||||
|
Alt+k add video-pan-y -0.1
|
||||||
|
|
||||||
|
Alt+RIGHT add video-pan-x +0.1
|
||||||
|
Alt+l add video-pan-x +0.1
|
@ -0,0 +1,124 @@
|
|||||||
|
#############
|
||||||
|
# Video #
|
||||||
|
#############
|
||||||
|
|
||||||
|
# Hardware decoding
|
||||||
|
vo=gpu
|
||||||
|
hwdec=vaapi
|
||||||
|
hwdec-codecs=all
|
||||||
|
|
||||||
|
{%@@ if profile == "Mirkwood" @@%}
|
||||||
|
gpu-context=wayland
|
||||||
|
{%@@ elif profile == "Rivendell" @@%}
|
||||||
|
ao=alsa
|
||||||
|
{%@@ endif @@%}
|
||||||
|
|
||||||
|
# Interpolation
|
||||||
|
#profile=gpu-hq
|
||||||
|
#scale=ewa_lanczossharp
|
||||||
|
#cscale=ewa_lanczossharp
|
||||||
|
#dscale=mitchell
|
||||||
|
#video-sync=display-resample
|
||||||
|
#interpolation=yes
|
||||||
|
#tscale=box
|
||||||
|
#tscale-window=sphinx
|
||||||
|
#tscale-radius=1.0
|
||||||
|
#tscale-clamp=0.0
|
||||||
|
|
||||||
|
#############
|
||||||
|
# Audio #
|
||||||
|
#############
|
||||||
|
pulse-buffer=50 # using a large buffer causes seeking issues
|
||||||
|
audio-pitch-correction=yes # automatically insert scaletempo when playing with higher speed
|
||||||
|
|
||||||
|
#############
|
||||||
|
# Plugins/misc #
|
||||||
|
#############
|
||||||
|
# Mpris plugin
|
||||||
|
script=/usr/lib/mpv/mpris.so
|
||||||
|
|
||||||
|
# Acestream plugin
|
||||||
|
script=/usr/lib/mpv/mpv-acestream.lua
|
||||||
|
|
||||||
|
# Start ipc server
|
||||||
|
input-ipc-server=/tmp/mpvsocket
|
||||||
|
|
||||||
|
# set youtube-dl max res to 1080
|
||||||
|
ytdl-format=bestvideo[height<=1080]+bestaudio/best[height<=1080]
|
||||||
|
|
||||||
|
#############
|
||||||
|
# Languages #
|
||||||
|
#############
|
||||||
|
slang=eng,en,enUS,en-US,fi,fiFI,fi-FI # automatically select these subtitles (decreasing priority)
|
||||||
|
alang=eng,en,enUS,en-US,fi,fiFI,fi-FI # automatically select these audio tracks (decreasing priority)
|
||||||
|
ytdl-raw-options=sub-lang="en,eng,enUS,en-US,fi,fiFI,fi-FI"
|
||||||
|
|
||||||
|
#############
|
||||||
|
# Subtitles #
|
||||||
|
#############
|
||||||
|
no-sub # subtitles off on startup
|
||||||
|
demuxer-mkv-subtitle-preroll # try to correctly show embedded subs when seeking
|
||||||
|
sub-auto=fuzzy # external subs don't have to match the file name exactly to autoload
|
||||||
|
sub-file-paths=ass:srt:sub:subs:subtitles # search for external subs in the listed subdirectories
|
||||||
|
embeddedfonts=yes # use embedded fonts for SSA/ASS subs
|
||||||
|
sub-ass-force-style=Kerning=yes # allows you to override style parameters of ASS scripts
|
||||||
|
|
||||||
|
# the following options only apply to subtitles without own styling (i.e. not ASS but e.g. SRT)
|
||||||
|
sub-font="Overpass"
|
||||||
|
sub-font-size=45
|
||||||
|
sub-color="#FFFFFFFF"
|
||||||
|
sub-border-color="#FF262626"
|
||||||
|
sub-border-size=3.2
|
||||||
|
sub-shadow-offset=1
|
||||||
|
sub-shadow-color="#33000000"
|
||||||
|
sub-spacing=0.5
|
||||||
|
|
||||||
|
#############
|
||||||
|
# OSD / OSC #
|
||||||
|
#############
|
||||||
|
osd-font="Overpass"
|
||||||
|
osd-font-size=30
|
||||||
|
osd-color="#ffffffff" # ARGB format
|
||||||
|
osd-border-color="#ff151515" # ARGB format
|
||||||
|
osd-bar-align-y=0 # progress bar y alignment (-1 top, 0 centered, 1 bottom)
|
||||||
|
osd-border-size=2 # size for osd text and progress bar
|
||||||
|
osd-shadow-offset=1 # pixel width for osd text and progress bar
|
||||||
|
osd-bar-w=60 # width of " " "
|
||||||
|
osd-shadow-color="#11000000"
|
||||||
|
osd-fractions
|
||||||
|
|
||||||
|
###################################
|
||||||
|
# Protocol Specific Configuration #
|
||||||
|
###################################
|
||||||
|
|
||||||
|
|
||||||
|
[protocol.https]
|
||||||
|
cache=yes
|
||||||
|
user-agent='Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0'
|
||||||
|
|
||||||
|
[protocol.http]
|
||||||
|
cache=yes
|
||||||
|
user-agent='Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0'
|
||||||
|
|
||||||
|
[extension.gif]
|
||||||
|
cache=no
|
||||||
|
no-pause
|
||||||
|
loop-file=yes
|
||||||
|
|
||||||
|
[extension.gifv]
|
||||||
|
cache=no
|
||||||
|
no-pause
|
||||||
|
loop-file=yes
|
||||||
|
|
||||||
|
# Profile for 4k videos
|
||||||
|
[4k]
|
||||||
|
ytdl-format="bestvideo[height<=2160]+bestaudio/best[height<=2160]"
|
||||||
|
|
||||||
|
[best]
|
||||||
|
ytdl-format="bestvideo+bestaudio"
|
||||||
|
|
||||||
|
# Use vulkan and hwdec
|
||||||
|
[vulkan]
|
||||||
|
gpu-api=vulkan
|
||||||
|
gpu-context=waylandvk
|
||||||
|
hwdec=vaapi-copy
|
@ -0,0 +1 @@
|
|||||||
|
hidetimeout=2000
|
@ -0,0 +1,30 @@
|
|||||||
|
-- default keybinding: b
|
||||||
|
-- add the following to your input.conf to change the default keybinding:
|
||||||
|
-- keyname script_binding auto_load_subs
|
||||||
|
local utils = require 'mp.utils'
|
||||||
|
|
||||||
|
function display_error()
|
||||||
|
mp.msg.warn("Subtitle download failed: ")
|
||||||
|
mp.osd_message("Subtitle download failed")
|
||||||
|
end
|
||||||
|
|
||||||
|
function load_sub_fn()
|
||||||
|
path = mp.get_property("path")
|
||||||
|
srt_path = string.gsub(path, "%.%w+$", ".srt")
|
||||||
|
t = { args = { "subliminal", "download", "-s", "-f", "-l", "en", path } }
|
||||||
|
|
||||||
|
mp.osd_message("Searching subtitle")
|
||||||
|
res = utils.subprocess(t)
|
||||||
|
if res.error == nil then
|
||||||
|
if mp.commandv("sub_add", srt_path) then
|
||||||
|
mp.msg.warn("Subtitle download succeeded")
|
||||||
|
mp.osd_message("Subtitle '" .. srt_path .. "' download succeeded")
|
||||||
|
else
|
||||||
|
display_error()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
display_error()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
mp.add_key_binding("b", "auto_load_subs", load_sub_fn)
|
@ -0,0 +1,367 @@
|
|||||||
|
local assdraw = require 'mp.assdraw'
|
||||||
|
|
||||||
|
local W = 0
|
||||||
|
local H = 0
|
||||||
|
-- 2D array of size W*H that's addressed via gField[x][y]. Each entry is a
|
||||||
|
-- table, with the following fields:
|
||||||
|
-- is_mine: true or false
|
||||||
|
-- area_mines: mine count in the 3x3 surrounding area
|
||||||
|
-- is_covered: true or false, for visibility
|
||||||
|
-- flag: flag put by user, one of FLAG_*
|
||||||
|
local gField = nil
|
||||||
|
|
||||||
|
local FLAG_NONE = "" -- not flagged
|
||||||
|
local FLAG_MINE = "⚑" -- "⚐" -- flagged as containing mine
|
||||||
|
local FLAG_MAYBE_MINE = "!" -- flagged as maybe containing mine
|
||||||
|
local FLAG_MAYBE_SAFE = "?" -- flagged as maybe empty
|
||||||
|
|
||||||
|
local STATUS_PLAYING = "playing"
|
||||||
|
local STATUS_WON = "won"
|
||||||
|
local STATUS_LOST = "lost"
|
||||||
|
|
||||||
|
local gStatus = nil
|
||||||
|
|
||||||
|
local gMines = 0
|
||||||
|
|
||||||
|
local gX = 0
|
||||||
|
local gY = 0
|
||||||
|
|
||||||
|
local gNeedRefresh = false
|
||||||
|
local gHidden = true
|
||||||
|
local gTransparent = false
|
||||||
|
|
||||||
|
local PRESETS = {
|
||||||
|
-- taken from kmines
|
||||||
|
{ name = "easy", w = 9, h = 9, mines = 10 },
|
||||||
|
{ name = "medium", w = 16, h = 16, mines = 40 },
|
||||||
|
{ name = "hard", w = 30, h = 16, mines = 99 },
|
||||||
|
}
|
||||||
|
local gCurrentPreset = 2
|
||||||
|
|
||||||
|
function init_field()
|
||||||
|
local preset = PRESETS[gCurrentPreset]
|
||||||
|
gStatus = STATUS_PLAYING
|
||||||
|
gField = {}
|
||||||
|
W = preset.w
|
||||||
|
H = preset.h
|
||||||
|
gMines = math.min(preset.mines, W * H - 1)
|
||||||
|
gX = 1
|
||||||
|
gY = 1
|
||||||
|
|
||||||
|
for x = 1, W do
|
||||||
|
gField[x] = {}
|
||||||
|
for y = 1, H do
|
||||||
|
gField[x][y] = {
|
||||||
|
is_mine = false,
|
||||||
|
area_mines = 0,
|
||||||
|
is_covered = true,
|
||||||
|
flag = FLAG_NONE,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- place mines using the dumbfuck algorithm
|
||||||
|
local place_mines = gMines
|
||||||
|
while place_mines > 0 do
|
||||||
|
local x = math.random(1, W)
|
||||||
|
local y = math.random(1, H)
|
||||||
|
if not gField[x][y].is_mine then
|
||||||
|
gField[x][y].is_mine = true
|
||||||
|
place_mines = place_mines - 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- pick a random start position (also using dumbfuck algorithm)
|
||||||
|
for i = 1, 1000000 do
|
||||||
|
local x = math.random(1, W)
|
||||||
|
local y = math.random(1, H)
|
||||||
|
if not gField[x][y].is_mine then
|
||||||
|
gX = x
|
||||||
|
gY = y
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- compute proximities after mines have been placed
|
||||||
|
for y = 1, H do
|
||||||
|
for x = 1, W do
|
||||||
|
local tile = gField[x][y]
|
||||||
|
for a_x = -1, 1 do
|
||||||
|
for a_y = -1, 1 do
|
||||||
|
local t_x = x + a_x
|
||||||
|
local t_y = y + a_y
|
||||||
|
if t_x >= 1 and t_x <= W and t_y >= 1 and t_y <= H and
|
||||||
|
gField[t_x][t_y].is_mine
|
||||||
|
then
|
||||||
|
tile.area_mines = tile.area_mines + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
uncover()
|
||||||
|
|
||||||
|
check_status()
|
||||||
|
|
||||||
|
gNeedRefresh = true
|
||||||
|
end
|
||||||
|
|
||||||
|
function uncover_at(x, y)
|
||||||
|
if x < 1 or x > W or y < 1 or y > H then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local tile = gField[x][y]
|
||||||
|
|
||||||
|
if not tile.is_covered then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
tile.is_covered = false
|
||||||
|
|
||||||
|
if tile.is_mine then
|
||||||
|
return -- lost anyway
|
||||||
|
end
|
||||||
|
|
||||||
|
-- uncover mines as far as it goes
|
||||||
|
-- apparently, the standard thing to do is recursively uncovering all
|
||||||
|
-- tiles which have 0 neightbours - tiles with 1 or more neighbours are
|
||||||
|
-- uncovered, but not recursively
|
||||||
|
if tile.area_mines == 0 then
|
||||||
|
for a_x = -1, 1 do
|
||||||
|
for a_y = -1, 1 do
|
||||||
|
uncover_at(x + a_x, y + a_y)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
gNeedRefresh = true
|
||||||
|
end
|
||||||
|
|
||||||
|
function check_status()
|
||||||
|
if gStatus ~= STATUS_PLAYING then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local won = true
|
||||||
|
local lost = false
|
||||||
|
|
||||||
|
for y = 1, H do
|
||||||
|
for x = 1, W do
|
||||||
|
local tile = gField[x][y]
|
||||||
|
won = won and (tile.is_mine == tile.is_covered)
|
||||||
|
lost = lost or (tile.is_mine and not tile.is_covered)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if lost then
|
||||||
|
gStatus = STATUS_LOST
|
||||||
|
gNeedRefresh = true
|
||||||
|
elseif won then
|
||||||
|
gStatus = STATUS_WON
|
||||||
|
gNeedRefresh = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function uncover()
|
||||||
|
if gStatus ~= STATUS_PLAYING and not gField[gX][gY].is_covered then
|
||||||
|
init_field()
|
||||||
|
render()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
uncover_at(gX, gY)
|
||||||
|
check_status()
|
||||||
|
render()
|
||||||
|
end
|
||||||
|
|
||||||
|
function flag()
|
||||||
|
local tile = gField[gX][gY]
|
||||||
|
local cycle = {FLAG_NONE, FLAG_MINE, FLAG_MAYBE_MINE, FLAG_MAYBE_SAFE}
|
||||||
|
for i = 1, #cycle do
|
||||||
|
if tile.flag == cycle[i] then
|
||||||
|
tile.flag = cycle[(i - 1 + 1) % #cycle + 1]
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not tile.is_covered then
|
||||||
|
tile.flag = FLAG_NONE
|
||||||
|
end
|
||||||
|
force_render()
|
||||||
|
end
|
||||||
|
|
||||||
|
function move(x, y)
|
||||||
|
gX = math.min(math.max(gX + x, 1), W)
|
||||||
|
gY = math.min(math.max(gY + y, 1), H)
|
||||||
|
|
||||||
|
force_render()
|
||||||
|
end
|
||||||
|
|
||||||
|
function force_render()
|
||||||
|
gNeedRefresh = true
|
||||||
|
render()
|
||||||
|
end
|
||||||
|
|
||||||
|
function render()
|
||||||
|
if not gNeedRefresh then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if gHidden then
|
||||||
|
mp.set_osd_ass(1280, 720, "")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local canvas_w = 1280
|
||||||
|
local canvas_h = 720
|
||||||
|
local dw, dh, da = mp.get_osd_size()
|
||||||
|
if dw ~= nil and dw > 0 and dh > 0 then
|
||||||
|
canvas_w = dw / dh * canvas_h
|
||||||
|
end
|
||||||
|
|
||||||
|
local tile_wh = 32
|
||||||
|
|
||||||
|
local o_x = canvas_w / 2 - tile_wh * W / 2
|
||||||
|
local o_y = canvas_h / 2 - tile_wh * (H + 2) / 2 + tile_wh
|
||||||
|
|
||||||
|
local ass = assdraw.ass_new()
|
||||||
|
|
||||||
|
local transp = nil
|
||||||
|
if gTransparent then
|
||||||
|
transp = "{\\1a&HA0&\\3a&HA0&}"
|
||||||
|
end
|
||||||
|
|
||||||
|
-- some shitty background
|
||||||
|
ass:new_event()
|
||||||
|
ass:append("{\\1c&Ha3a3a3&\\1a&H30&}")
|
||||||
|
if transp then
|
||||||
|
ass:append(transp)
|
||||||
|
end
|
||||||
|
ass:pos(o_x - tile_wh, o_y - tile_wh)
|
||||||
|
ass:draw_start()
|
||||||
|
ass:rect_cw(0, 0, (W + 2) * tile_wh, (H + 2) * tile_wh)
|
||||||
|
-- grid
|
||||||
|
local function grid_line(x0, y0, x1, y1)
|
||||||
|
ass:new_event()
|
||||||
|
ass:append("{\\bord0.5}")
|
||||||
|
if transp then
|
||||||
|
ass:append(transp)
|
||||||
|
end
|
||||||
|
ass:pos(x0, y0)
|
||||||
|
ass:draw_start()
|
||||||
|
ass:coord(0, 0)
|
||||||
|
ass:line_to(x1 - x0, y1 - y0)
|
||||||
|
end
|
||||||
|
for x = 0, W do
|
||||||
|
local p_x = x * tile_wh + o_x
|
||||||
|
grid_line(p_x, o_y, p_x, o_y + tile_wh * H)
|
||||||
|
end
|
||||||
|
for y = 0, H do
|
||||||
|
local p_y = y * tile_wh + o_y
|
||||||
|
grid_line(o_x, p_y, o_x + tile_wh * W, p_y)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function draw_sym(x, y, sym, c)
|
||||||
|
ass:new_event()
|
||||||
|
ass:pos(x, y)
|
||||||
|
ass:append("{\\an5\\fs25\\bord0\\1c&H" .. c .. "&\\b1}" .. sym)
|
||||||
|
end
|
||||||
|
|
||||||
|
for x = 1, W do
|
||||||
|
for y = 1, H do
|
||||||
|
local tile = gField[x][y]
|
||||||
|
local p_x = (x - 1) * tile_wh + tile_wh / 2 + o_x
|
||||||
|
local p_y = (y - 1) * tile_wh + tile_wh / 2 + o_y
|
||||||
|
local wh = tile_wh - 4
|
||||||
|
local sym = nil
|
||||||
|
if tile.is_covered then
|
||||||
|
ass:new_event()
|
||||||
|
if transp then
|
||||||
|
ass:append(transp)
|
||||||
|
end
|
||||||
|
ass:pos(p_x, p_y)
|
||||||
|
ass:draw_start()
|
||||||
|
ass:round_rect_cw(-wh / 2, -wh / 2, wh / 2, wh / 2, 5)
|
||||||
|
ass:draw_stop()
|
||||||
|
elseif tile.is_mine then
|
||||||
|
draw_sym(p_x, p_y, "💣", "0000FF")
|
||||||
|
elseif tile.area_mines > 0 then
|
||||||
|
draw_sym(p_x, p_y, tile.area_mines, "000000")
|
||||||
|
end
|
||||||
|
if tile.flag ~= FLAG_NONE then
|
||||||
|
draw_sym(p_x, p_y, tile.flag, "FF0000")
|
||||||
|
end
|
||||||
|
if x == gX and y == gY then
|
||||||
|
local wh = tile_wh - 12
|
||||||
|
ass:new_event()
|
||||||
|
ass:append("{\\1a&HFF&}")
|
||||||
|
ass:pos(p_x, p_y)
|
||||||
|
ass:draw_start()
|
||||||
|
ass:rect_cw(-wh / 2, -wh / 2, wh / 2, wh / 2)
|
||||||
|
ass:draw_stop()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local banner = nil
|
||||||
|
if gStatus == STATUS_WON then
|
||||||
|
banner = "You may have won, but actually you just wasted time."
|
||||||
|
elseif gStatus == STATUS_LOST then
|
||||||
|
banner = "You lost (and wasted time)."
|
||||||
|
end
|
||||||
|
if banner then
|
||||||
|
ass:new_event()
|
||||||
|
ass:pos(o_x + tile_wh * W / 2, o_y - tile_wh - 10)
|
||||||
|
ass:append("{\\fs40\\b1\\an2}" .. banner)
|
||||||
|
end
|
||||||
|
|
||||||
|
mp.set_osd_ass(canvas_w, canvas_h, ass.text)
|
||||||
|
end
|
||||||
|
|
||||||
|
mp.observe_property("osd-width", "native", force_render)
|
||||||
|
mp.observe_property("osd-height", "native", force_render)
|
||||||
|
|
||||||
|
init_field()
|
||||||
|
force_render()
|
||||||
|
|
||||||
|
function toggle_transp()
|
||||||
|
gTransparent = not gTransparent
|
||||||
|
force_render()
|
||||||
|
end
|
||||||
|
|
||||||
|
function cycle_preset()
|
||||||
|
gCurrentPreset = (gCurrentPreset + 1 - 1) % #PRESETS + 1
|
||||||
|
init_field()
|
||||||
|
render()
|
||||||
|
end
|
||||||
|
|
||||||
|
function toggle_show()
|
||||||
|
if gHidden then
|
||||||
|
gHidden = false
|
||||||
|
|
||||||
|
local REP = {repeatable = true}
|
||||||
|
mp.add_forced_key_binding("left", "mines-left", function() move(-1, 0) end, REP)
|
||||||
|
mp.add_forced_key_binding("right", "mines-right", function() move(1, 0) end, REP)
|
||||||
|
mp.add_forced_key_binding("up", "mines-up", function() move(0, -1) end, REP)
|
||||||
|
mp.add_forced_key_binding("down", "mines-down", function() move(0, 1) end, REP)
|
||||||
|
mp.add_forced_key_binding("space", "mines-uncover", uncover)
|
||||||
|
mp.add_forced_key_binding("b", "mines-flag", flag)
|
||||||
|
mp.add_forced_key_binding("t", "mines-transp", toggle_transp)
|
||||||
|
mp.add_forced_key_binding("w", "mines-preset", cycle_preset)
|
||||||
|
else
|
||||||
|
gHidden = true
|
||||||
|
|
||||||
|
mp.remove_key_binding("mines-left")
|
||||||
|
mp.remove_key_binding("mines-right")
|
||||||
|
mp.remove_key_binding("mines-up")
|
||||||
|
mp.remove_key_binding("mines-down")
|
||||||
|
mp.remove_key_binding("mines-uncover")
|
||||||
|
mp.remove_key_binding("mines-flag")
|
||||||
|
mp.remove_key_binding("mines-transp")
|
||||||
|
mp.remove_key_binding("mines-preset")
|
||||||
|
end
|
||||||
|
|
||||||
|
force_render()
|
||||||
|
end
|
||||||
|
|
||||||
|
mp.add_forced_key_binding("ctrl+x", "mines-show", toggle_show)
|
@ -0,0 +1,43 @@
|
|||||||
|
-- Toggle redshift when viewing videos with mpv
|
||||||
|
|
||||||
|
if os.execute("pgrep -x redshift >/dev/null") ~= 0
|
||||||
|
then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Consider that redshift is enabled when starting
|
||||||
|
rs_enabled = true
|
||||||
|
|
||||||
|
function rs_toggle()
|
||||||
|
os.execute("pkill -x -USR1 redshift")
|
||||||
|
end
|
||||||
|
|
||||||
|
function rs_disable()
|
||||||
|
if rs_enabled
|
||||||
|
then
|
||||||
|
rs_toggle()
|
||||||
|
rs_enabled = false
|
||||||
|
mp.msg.log("info", "Disabling redshift")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function rs_enable()
|
||||||
|
if not rs_enabled
|
||||||
|
then
|
||||||
|
rs_toggle()
|
||||||
|
rs_enabled = true
|
||||||
|
mp.msg.log("info", "Reenabling redshift")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function rs_handler()
|
||||||
|
if mp.get_property("video") ~= "no"
|
||||||
|
then
|
||||||
|
rs_disable()
|
||||||
|
else
|
||||||
|
rs_enable()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
mp.register_event("file-loaded", rs_handler)
|
||||||
|
mp.register_event("shutdown", rs_enable)
|
@ -0,0 +1,145 @@
|
|||||||
|
local msg = require "mp.msg"
|
||||||
|
local utils = require "mp.utils"
|
||||||
|
local options = require "mp.options"
|
||||||
|
|
||||||
|
local cut_pos = nil
|
||||||
|
local copy_audio = true
|
||||||
|
local o = {
|
||||||
|
target_dir = "~",
|
||||||
|
vcodec = "rawvideo",
|
||||||
|
acodec = "pcm_s16le",
|
||||||
|
prevf = "",
|
||||||
|
vf = "format=yuv444p16$hqvf,scale=in_color_matrix=$matrix,format=bgr24",
|
||||||
|
hqvf = "",
|
||||||
|
postvf = "",
|
||||||
|
opts = "",
|
||||||
|
ext = "avi",
|
||||||
|
command_template = [[
|
||||||
|
ffmpeg -v warning -y -stats
|
||||||
|
-ss $shift -i "$in" -t $duration
|
||||||
|
-c:v $vcodec -c:a $acodec $audio
|
||||||
|
-vf $prevf$vf$postvf $opts "$out.$ext"
|
||||||
|
]],
|
||||||
|
}
|
||||||
|
options.read_options(o)
|
||||||
|
|
||||||
|
function timestamp(duration)
|
||||||
|
local hours = duration / 3600
|
||||||
|
local minutes = duration % 3600 / 60
|
||||||
|
local seconds = duration % 60
|
||||||
|
return string.format("%02d:%02d:%02.03f", hours, minutes, seconds)
|
||||||
|
end
|
||||||
|
|
||||||
|
function osd(str)
|
||||||
|
return mp.osd_message(str, 3)
|
||||||
|
end
|
||||||
|
|
||||||
|
function get_homedir()
|
||||||
|
-- It would be better to do platform detection instead of fallback but
|
||||||
|
-- it's not that easy in Lua.
|
||||||
|
return os.getenv("HOME") or os.getenv("USERPROFILE") or ""
|
||||||
|
end
|
||||||
|
|
||||||
|
function log(str)
|
||||||
|
local logpath = utils.join_path(
|
||||||
|
o.target_dir:gsub("~", get_homedir()),
|
||||||
|
"mpv_slicing.log")
|
||||||
|
f = io.open(logpath, "a")
|
||||||
|
f:write(string.format("# %s\n%s\n",
|
||||||
|
os.date("%Y-%m-%d %H:%M:%S"),
|
||||||
|
str))
|
||||||
|
f:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
function escape(str)
|
||||||
|
-- FIXME(Kagami): This escaping is NOT enough, see e.g.
|
||||||
|
-- https://stackoverflow.com/a/31413730
|
||||||
|
-- Consider using `utils.subprocess` instead.
|
||||||
|
return str:gsub("\\", "\\\\"):gsub('"', '\\"')
|
||||||
|
end
|
||||||
|
|
||||||
|
function trim(str)
|
||||||
|
return str:gsub("^%s+", ""):gsub("%s+$", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
function get_csp()
|
||||||
|
local csp = mp.get_property("colormatrix")
|
||||||
|
if csp == "bt.601" then return "bt601"
|
||||||
|
elseif csp == "bt.709" then return "bt709"
|
||||||
|
elseif csp == "smpte-240m" then return "smpte240m"
|
||||||
|
else
|
||||||
|
local err = "Unknown colorspace: " .. csp
|
||||||
|
osd(err)
|
||||||
|
error(err)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function get_outname(shift, endpos)
|
||||||
|
local name = mp.get_property("filename")
|
||||||
|
local dotidx = name:reverse():find(".", 1, true)
|
||||||
|
if dotidx then name = name:sub(1, -dotidx-1) end
|
||||||
|
name = name:gsub(" ", "_")
|
||||||
|
name = name:gsub(":", "-")
|
||||||
|
name = name .. string.format(".%s-%s", timestamp(shift), timestamp(endpos))
|
||||||
|
return name
|
||||||
|
end
|
||||||
|
|
||||||
|
function cut(shift, endpos)
|
||||||
|
local cmd = trim(o.command_template:gsub("%s+", " "))
|
||||||
|
local inpath = escape(utils.join_path(
|
||||||
|
utils.getcwd(),
|
||||||
|
mp.get_property("stream-path")))
|
||||||
|
local outpath = escape(utils.join_path(
|
||||||
|
o.target_dir:gsub("~", get_homedir()),
|
||||||
|
get_outname(shift, endpos)))
|
||||||
|
|
||||||
|
cmd = cmd:gsub("$shift", shift)
|
||||||
|
cmd = cmd:gsub("$duration", endpos - shift)
|
||||||
|
cmd = cmd:gsub("$vcodec", o.vcodec)
|
||||||
|
cmd = cmd:gsub("$acodec", o.acodec)
|
||||||
|
cmd = cmd:gsub("$audio", copy_audio and "" or "-an")
|
||||||
|
cmd = cmd:gsub("$prevf", o.prevf)
|
||||||
|
cmd = cmd:gsub("$vf", o.vf)
|
||||||
|
cmd = cmd:gsub("$hqvf", o.hqvf)
|
||||||
|
cmd = cmd:gsub("$postvf", o.postvf)
|
||||||
|
cmd = cmd:gsub("$matrix", get_csp())
|
||||||
|
cmd = cmd:gsub("$opts", o.opts)
|
||||||
|
-- Beware that input/out filename may contain replacing patterns.
|
||||||
|
cmd = cmd:gsub("$ext", o.ext)
|
||||||
|
cmd = cmd:gsub("$out", outpath)
|
||||||
|
cmd = cmd:gsub("$in", inpath, 1)
|
||||||
|
|
||||||
|
msg.info(cmd)
|
||||||
|
log(cmd)
|
||||||
|
os.execute(cmd)
|
||||||
|
end
|
||||||
|
|
||||||
|
function toggle_mark()
|
||||||
|
local pos = mp.get_property_number("time-pos")
|
||||||
|
if cut_pos then
|
||||||
|
local shift, endpos = cut_pos, pos
|
||||||
|
if shift > endpos then
|
||||||
|
shift, endpos = endpos, shift
|
||||||
|
end
|
||||||
|
if shift == endpos then
|
||||||
|
osd("Cut fragment is empty")
|
||||||
|
else
|
||||||
|
cut_pos = nil
|
||||||
|
osd(string.format("Cut fragment: %s - %s",
|
||||||
|
timestamp(shift),
|
||||||
|
timestamp(endpos)))
|
||||||
|
cut(shift, endpos)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
cut_pos = pos
|
||||||
|
osd(string.format("Marked %s as start position", timestamp(pos)))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function toggle_audio()
|
||||||
|
copy_audio = not copy_audio
|
||||||
|
osd("Audio capturing is " .. (copy_audio and "enabled" or "disabled"))
|
||||||
|
end
|
||||||
|
|
||||||
|
mp.add_key_binding("c", "slicing_mark", toggle_mark)
|
||||||
|
mp.add_key_binding("a", "slicing_audio", toggle_audio)
|
@ -0,0 +1,99 @@
|
|||||||
|
SPACE repeatable playlist-next
|
||||||
|
alt+SPACE repeatable playlist-prev
|
||||||
|
|
||||||
|
UP ignore
|
||||||
|
DOWN ignore
|
||||||
|
LEFT repeatable playlist-prev
|
||||||
|
RIGHT repeatable playlist-next
|
||||||
|
|
||||||
|
# simple reminder of default bindings
|
||||||
|
#1 add contrast -1
|
||||||
|
#2 add contrast 1
|
||||||
|
#3 add brightness -1
|
||||||
|
#4 add brightness 1
|
||||||
|
#5 add gamma -1
|
||||||
|
#6 add gamma 1
|
||||||
|
#7 add saturation -1
|
||||||
|
#8 add saturation 1
|
||||||
|
|
||||||
|
# mouse-centric bindings
|
||||||
|
MBTN_RIGHT script-binding image_viewer/drag-to-pan
|
||||||
|
MBTN_LEFT script-binding image_viewer/pan-follows-cursor
|
||||||
|
WHEEL_UP script-message cursor-centric-zoom 0.1
|
||||||
|
WHEEL_DOWN script-message cursor-centric-zoom -0.1
|
||||||
|
|
||||||
|
# panning with the keyboard:
|
||||||
|
# pan-image takes the following arguments
|
||||||
|
# pan-image AXIS AMOUNT ZOOM_INVARIANT IMAGE_CONSTRAINED
|
||||||
|
# ^ ^ ^
|
||||||
|
# x or y | |
|
||||||
|
# | |
|
||||||
|
# if yes, will pan by the same if yes, stops panning if the image
|
||||||
|
# amount regardless of zoom would go outside of the window
|
||||||
|
|
||||||
|
ctrl+down repeatable script-message pan-image y -0.1 yes yes
|
||||||
|
ctrl+up repeatable script-message pan-image y +0.1 yes yes
|
||||||
|
ctrl+right repeatable script-message pan-image x -0.1 yes yes
|
||||||
|
ctrl+left repeatable script-message pan-image x +0.1 yes yes
|
||||||
|
|
||||||
|
# now with more precision
|
||||||
|
alt+down repeatable script-message pan-image y -0.01 yes yes
|
||||||
|
alt+up repeatable script-message pan-image y +0.01 yes yes
|
||||||
|
alt+right repeatable script-message pan-image x -0.01 yes yes
|
||||||
|
alt+left repeatable script-message pan-image x +0.01 yes yes
|
||||||
|
|
||||||
|
# replace at will with h,j,k,l if you prefer vim-style bindings
|
||||||
|
|
||||||
|
# on a trackpad you may want to use these
|
||||||
|
#WHEEL_UP repeatable script-message pan-image y -0.02 yes yes
|
||||||
|
#WHEEL_DOWN repeatable script-message pan-image y +0.02 yes yes
|
||||||
|
#WHEEL_LEFT repeatable script-message pan-image x -0.02 yes yes
|
||||||
|
#WHEEL_RIGHT repeatable script-message pan-image x +0.02 yes yes
|
||||||
|
|
||||||
|
# align the border of the image to the border of the window
|
||||||
|
# align-border takes the following arguments:
|
||||||
|
# align-border ALIGN_X ALIGN_Y
|
||||||
|
# any value for ALIGN_* is accepted, -1 and 1 map to the border of the window
|
||||||
|
ctrl+shift+right script-message align-border -1 ""
|
||||||
|
ctrl+shift+left script-message align-border 1 ""
|
||||||
|
ctrl+shift+down script-message align-border "" -1
|
||||||
|
ctrl+shift+up script-message align-border "" 1
|
||||||
|
|
||||||
|
# reset the image
|
||||||
|
ctrl+0 no-osd set video-pan-x 0; no-osd set video-pan-y 0; no-osd set video-zoom 0
|
||||||
|
|
||||||
|
+ add video-zoom 0.5
|
||||||
|
- add video-zoom -0.5; script-message reset-pan-if-visible
|
||||||
|
= no-osd set video-zoom 0; script-message reset-pan-if-visible
|
||||||
|
|
||||||
|
# sxiv compatibility
|
||||||
|
w no-osd set video-unscaled yes; keypress =
|
||||||
|
e no-osd set video-unscaled no; keypress =
|
||||||
|
|
||||||
|
h no-osd vf toggle hflip; show-text "Horizontal flip"
|
||||||
|
v no-osd vf toggle vflip; show-text "Vertical flip"
|
||||||
|
|
||||||
|
r script-message rotate-video 90; show-text "Clockwise rotation"
|
||||||
|
R script-message rotate-video -90; show-text "Counter-clockwise rotation"
|
||||||
|
alt+r no-osd set video-rotate 0; show-text "Reset rotation"
|
||||||
|
|
||||||
|
d script-message ruler
|
||||||
|
|
||||||
|
# Toggling between pixel-exact reproduction and interpolation
|
||||||
|
a cycle-values scale nearest ewa_lanczossharp
|
||||||
|
|
||||||
|
# Toggle color management on or off
|
||||||
|
c cycle icc-profile-auto
|
||||||
|
|
||||||
|
# Screenshot of the window output
|
||||||
|
S screenshot window
|
||||||
|
|
||||||
|
# Toggle aspect ratio information on and off
|
||||||
|
A cycle-values video-aspect "-1" "no"
|
||||||
|
|
||||||
|
p script-message force-print-filename
|
||||||
|
|
||||||
|
# ADVANCED: you can define bindings that belong to a "section" (named "image-viewer" here) like so:
|
||||||
|
#alt+SPACE {image-viewer} repeatable playlist-prev
|
||||||
|
#SPACE {image-viewer} repeatable playlist-next
|
||||||
|
# to load them conditionally with a command. See scripts-opts/image_viewer.conf for how you can do this
|
@ -0,0 +1,46 @@
|
|||||||
|
## IMAGE
|
||||||
|
# classic opengl-hq parameter, change at will
|
||||||
|
scale=spline36
|
||||||
|
cscale=spline36
|
||||||
|
dscale=mitchell
|
||||||
|
dither-depth=auto
|
||||||
|
correct-downscaling
|
||||||
|
sigmoid-upscaling
|
||||||
|
# debanding seems rarely useful with images
|
||||||
|
#deband
|
||||||
|
|
||||||
|
## MISC
|
||||||
|
mute=yes
|
||||||
|
# the osc is mostly useful for videos
|
||||||
|
osc=no
|
||||||
|
# don't try to autoload subtitles or audio files
|
||||||
|
sub-auto=no
|
||||||
|
audio-file-auto=no
|
||||||
|
# get rid of the useless V: 00:00:00 / 00:00:00 line
|
||||||
|
term-status-msg=
|
||||||
|
|
||||||
|
# replace mpv with mvi in the window title
|
||||||
|
title="${?media-title:${media-title}}${!media-title:No file} - mvi"
|
||||||
|
|
||||||
|
# don't slideshow by default
|
||||||
|
image-display-duration=inf
|
||||||
|
# loop files in case of webms or gifs
|
||||||
|
loop-file=inf
|
||||||
|
# and loop the whole playlist
|
||||||
|
loop-playlist=inf
|
||||||
|
|
||||||
|
# you need this if you plan to use drag-to-pan or pan-follows-cursor with MOUSE_LEFT
|
||||||
|
window-dragging=no
|
||||||
|
|
||||||
|
#according to haasn, aspect ratio info for PNG and JPG is "universally bust"
|
||||||
|
[extension.png]
|
||||||
|
video-aspect=no
|
||||||
|
|
||||||
|
[extension.jpg]
|
||||||
|
video-aspect=no
|
||||||
|
|
||||||
|
[extension.jpeg]
|
||||||
|
profile=extension.jpg
|
||||||
|
|
||||||
|
[silent]
|
||||||
|
msg-level=all=no
|
@ -0,0 +1,78 @@
|
|||||||
|
## MISC
|
||||||
|
# size of the margins with pan-follows-cursor
|
||||||
|
pan_follows_cursor_margin=50
|
||||||
|
# whether pan-follows-cursor should pan when the entire image is visible
|
||||||
|
pan_follows_cursor_move_if_full_view=no
|
||||||
|
|
||||||
|
## STATUS LINE
|
||||||
|
# whether to show a status line
|
||||||
|
status_line_enabled=yes
|
||||||
|
# its position, possible values: (bottom|top)_(left|right)
|
||||||
|
status_line_position=bottom_left
|
||||||
|
# its font size
|
||||||
|
status_line_size=36
|
||||||
|
# the text to be expanded
|
||||||
|
# see property expansion: https://mpv.io/manual/master/#property-expansion
|
||||||
|
# \N can be used for line breaks
|
||||||
|
# you can also use ass tags, see here: http://docs.aegisub.org/3.2/ASS_Tags/
|
||||||
|
status_line=${filename} [${playlist-pos-1}/${playlist-count}]
|
||||||
|
|
||||||
|
## MINIMAP
|
||||||
|
# whether to show a minimap
|
||||||
|
minimap_enabled=yes
|
||||||
|
# the position of the center of the minimap, in percentage of the window (x, y)
|
||||||
|
minimap_center=92,92
|
||||||
|
# the scale of the minimap (i.e. the view rectangle is scale / 100 times the size of the window)
|
||||||
|
minimap_scale=12
|
||||||
|
# the cutoff size of the minimap (i.e. the image rectangle is clipped if it falls outside of the this zone)
|
||||||
|
minimap_max_size=16,16
|
||||||
|
# opacity of the "image" (from 00=opaque to FF=transparent)
|
||||||
|
minimap_image_opacity=88
|
||||||
|
# color of the "image" (#BBGGRR where each component rages from 00 to FF)
|
||||||
|
minimap_image_color=BBBBBB
|
||||||
|
# opacity of the "view"
|
||||||
|
minimap_view_opacity=BB
|
||||||
|
minimap_view_color=222222
|
||||||
|
# whether the view should be drawn above the image
|
||||||
|
minimap_view_above_image=yes
|
||||||
|
# whether to show the minimap if the current image is fully visible
|
||||||
|
minimap_hide_when_full_image_in_view=yes
|
||||||
|
|
||||||
|
## RULER
|
||||||
|
# whether to show the length of the lines between the two points
|
||||||
|
ruler_show_distance=yes
|
||||||
|
# whether to show the coordinates of the two points
|
||||||
|
ruler_show_coordinates=yes
|
||||||
|
# the coordinate space of the text shown. Can be "image", "window", "both"
|
||||||
|
ruler_coordinates_space=image
|
||||||
|
# can be "degrees", "radians", "both", or "no"
|
||||||
|
ruler_show_angles=degrees
|
||||||
|
ruler_line_width=2
|
||||||
|
ruler_dots_radius=3
|
||||||
|
ruler_font_size=36
|
||||||
|
# ranges from 00 (black) to FF (white)
|
||||||
|
ruler_line_color=33
|
||||||
|
# bindings used to set points. The binding to trigger ruler mode can also be used. Comma-separated list
|
||||||
|
ruler_confirm_bindings=MBTN_LEFT,ENTER
|
||||||
|
# bindings used to set points. The binding to trigger ruler mode can also be used. Comma-separated list
|
||||||
|
ruler_exit_bindings=ESC
|
||||||
|
# if yes, the first point will be immediately set at the cursor position when calling 'ruler'
|
||||||
|
ruler_set_first_point_on_begin=no
|
||||||
|
# if yes, the ruler overlay will be immediately cleared when setting the second point
|
||||||
|
ruler_clear_on_second_point_set=no
|
||||||
|
|
||||||
|
## HOOKS
|
||||||
|
# commands to execute when a file detected as an image (1 frame, no audio) is loaded or unloaded
|
||||||
|
# an image was loaded, and the previous file was not an image (or there was no previous file)
|
||||||
|
command_on_first_image_loaded=
|
||||||
|
# an image was loaded (regardless of what the previous file was)
|
||||||
|
command_on_image_loaded=
|
||||||
|
# a non-image was loaded, and the previous file was an image
|
||||||
|
command_on_non_image_loaded=
|
||||||
|
# the purpose of these "hooks" is to let you change bindings, profiles, reset properties...
|
||||||
|
# see https://mpv.io/manual/master/#list-of-input-commands for general command information
|
||||||
|
# note that there is no such thing as "unloading a profile", to emulate this you must create an opposite profile and load that
|
||||||
|
# example possible values:
|
||||||
|
#command_on_first_image_loaded=apply-profile image; enable-section image-viewer; script-message enable-status-line
|
||||||
|
#command_on_image_loaded=no-osd set video-pan-x 0; script-message align-border "" -1
|
||||||
|
#command_on_non_image_loaded=disable-section image-viewer; no-osd set video-pan-x 0; no-osd set video-pan-y 0; no-osd set video-zoom 0; script-message disable-status-line
|
@ -0,0 +1,953 @@
|
|||||||
|
local opts = {
|
||||||
|
pan_follows_cursor_margin = 50,
|
||||||
|
pan_follows_cursor_move_if_full_view = false,
|
||||||
|
|
||||||
|
status_line_enabled = false,
|
||||||
|
status_line_position = "bottom_left",
|
||||||
|
status_line_size = 36,
|
||||||
|
status_line = "${filename} [${playlist-pos-1}/${playlist-count}]",
|
||||||
|
|
||||||
|
minimap_enabled = true,
|
||||||
|
minimap_center = "92,92",
|
||||||
|
minimap_scale = 12,
|
||||||
|
minimap_max_size = "16,16",
|
||||||
|
minimap_image_opacity = "88",
|
||||||
|
minimap_image_color = "BBBBBB",
|
||||||
|
minimap_view_opacity = "BB",
|
||||||
|
minimap_view_color = "222222",
|
||||||
|
minimap_view_above_image = true,
|
||||||
|
minimap_hide_when_full_image_in_view = true,
|
||||||
|
|
||||||
|
ruler_show_distance=true,
|
||||||
|
ruler_show_coordinates=true,
|
||||||
|
ruler_coordinates_space="both",
|
||||||
|
ruler_show_angles="degrees",
|
||||||
|
ruler_line_width=2,
|
||||||
|
ruler_dots_radius=3,
|
||||||
|
ruler_font_size=36,
|
||||||
|
ruler_line_color="33",
|
||||||
|
ruler_confirm_bindings="MBTN_LEFT,ENTER",
|
||||||
|
ruler_exit_bindings="ESC",
|
||||||
|
ruler_set_first_point_on_begin=false,
|
||||||
|
ruler_clear_on_second_point_set=false,
|
||||||
|
|
||||||
|
command_on_first_image_loaded="",
|
||||||
|
command_on_image_loaded="",
|
||||||
|
command_on_non_image_loaded="",
|
||||||
|
}
|
||||||
|
(require 'mp.options').read_options(opts)
|
||||||
|
function split(input)
|
||||||
|
local ret = {}
|
||||||
|
for str in string.gmatch(input, "([^,]+)") do
|
||||||
|
ret[#ret + 1] = str
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
function str_to_num(array)
|
||||||
|
local ret = {}
|
||||||
|
for _, v in ipairs(array) do
|
||||||
|
ret[#ret + 1] = tonumber(v)
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
opts.minimap_center=str_to_num(split(opts.minimap_center))
|
||||||
|
opts.minimap_max_size=str_to_num(split(opts.minimap_max_size))
|
||||||
|
opts.ruler_confirm_bindings=split(opts.ruler_confirm_bindings)
|
||||||
|
opts.ruler_exit_bindings=split(opts.ruler_exit_bindings)
|
||||||
|
|
||||||
|
function clamp(value, low, high)
|
||||||
|
if value <= low then
|
||||||
|
return low
|
||||||
|
elseif value >= high then
|
||||||
|
return high
|
||||||
|
else
|
||||||
|
return value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local msg = require 'mp.msg'
|
||||||
|
local assdraw = require 'mp.assdraw'
|
||||||
|
|
||||||
|
local ass = { -- shared ass state
|
||||||
|
status_line = "",
|
||||||
|
minimap = "",
|
||||||
|
ruler = "",
|
||||||
|
}
|
||||||
|
|
||||||
|
local cleanup = nil -- function set up by drag-to-pan/pan-follows cursor and must be called to clean lingering state
|
||||||
|
local mouse_move_callbacks = {} -- functions that are called when mouse_move is triggered
|
||||||
|
function add_mouse_move_callback(key, func)
|
||||||
|
if #mouse_move_callbacks == 0 then
|
||||||
|
mp.add_forced_key_binding("mouse_move", "image-viewer-internal", function()
|
||||||
|
for _, func in pairs(mouse_move_callbacks) do
|
||||||
|
func()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
mouse_move_callbacks[key] = func
|
||||||
|
end
|
||||||
|
function remove_mouse_move_callback(key)
|
||||||
|
mouse_move_callbacks[key] = nil
|
||||||
|
for _,_ in pairs(mouse_move_callbacks) do
|
||||||
|
return
|
||||||
|
end
|
||||||
|
mp.remove_key_binding("image-viewer-internal")
|
||||||
|
end
|
||||||
|
|
||||||
|
video_dimensions_stale = true
|
||||||
|
function get_video_dimensions()
|
||||||
|
-- this function is very much ripped from video/out/aspect.c in mpv's source
|
||||||
|
if not video_dimensions_stale then return _video_dimensions end
|
||||||
|
local video_params = mp.get_property_native("video-out-params")
|
||||||
|
if not video_params then
|
||||||
|
_video_dimensions = nil
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
if not _timestamp then _timestamp = 0 end
|
||||||
|
_timestamp = _timestamp + 1
|
||||||
|
_video_dimensions = {
|
||||||
|
timestamp = _timestamp,
|
||||||
|
top_left = {x = 0, y = 0},
|
||||||
|
bottom_right = {x = 0, y = 0},
|
||||||
|
size = {w = 0, h = 0},
|
||||||
|
ratios = {w = 0, h = 0}, -- by how much the original video got scaled
|
||||||
|
}
|
||||||
|
local keep_aspect = mp.get_property_bool("keepaspect")
|
||||||
|
local w = video_params["w"]
|
||||||
|
local h = video_params["h"]
|
||||||
|
local dw = video_params["dw"]
|
||||||
|
local dh = video_params["dh"]
|
||||||
|
if mp.get_property_number("video-rotate") % 180 == 90 then
|
||||||
|
w, h = h,w
|
||||||
|
dw, dh = dh, dw
|
||||||
|
end
|
||||||
|
local window_w, window_h = mp.get_osd_size()
|
||||||
|
|
||||||
|
if keep_aspect then
|
||||||
|
local unscaled = mp.get_property_native("video-unscaled")
|
||||||
|
local panscan = mp.get_property_number("panscan")
|
||||||
|
|
||||||
|
local fwidth = window_w
|
||||||
|
local fheight = math.floor(window_w / dw * dh)
|
||||||
|
if fheight > window_h or fheight < h then
|
||||||
|
local tmpw = math.floor(window_h / dh * dw)
|
||||||
|
if tmpw <= window_w then
|
||||||
|
fheight = window_h
|
||||||
|
fwidth = tmpw
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local vo_panscan_area = window_h - fheight
|
||||||
|
local f_w = fwidth / fheight
|
||||||
|
local f_h = 1
|
||||||
|
if vo_panscan_area == 0 then
|
||||||
|
vo_panscan_area = window_h - fwidth
|
||||||
|
f_w = 1
|
||||||
|
f_h = fheight / fwidth
|
||||||
|
end
|
||||||
|
if unscaled or unscaled == "downscale-big" then
|
||||||
|
vo_panscan_area = 0
|
||||||
|
if unscaled or (dw <= window_w and dh <= window_h) then
|
||||||
|
fwidth = dw
|
||||||
|
fheight = dh
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local scaled_width = fwidth + math.floor(vo_panscan_area * panscan * f_w)
|
||||||
|
local scaled_height = fheight + math.floor(vo_panscan_area * panscan * f_h)
|
||||||
|
|
||||||
|
local split_scaling = function (dst_size, scaled_src_size, zoom, align, pan)
|
||||||
|
scaled_src_size = math.floor(scaled_src_size * 2 ^ zoom)
|
||||||
|
align = (align + 1) / 2
|
||||||
|
local dst_start = math.floor((dst_size - scaled_src_size) * align + pan * scaled_src_size)
|
||||||
|
if dst_start < 0 then
|
||||||
|
--account for C int cast truncating as opposed to flooring
|
||||||
|
dst_start = dst_start + 1
|
||||||
|
end
|
||||||
|
local dst_end = dst_start + scaled_src_size;
|
||||||
|
if dst_start >= dst_end then
|
||||||
|
dst_start = 0
|
||||||
|
dst_end = 1
|
||||||
|
end
|
||||||
|
return dst_start, dst_end
|
||||||
|
end
|
||||||
|
local zoom = mp.get_property_number("video-zoom")
|
||||||
|
|
||||||
|
local align_x = mp.get_property_number("video-align-x")
|
||||||
|
local pan_x = mp.get_property_number("video-pan-x")
|
||||||
|
_video_dimensions.top_left.x, _video_dimensions.bottom_right.x = split_scaling(window_w, scaled_width, zoom, align_x, pan_x)
|
||||||
|
|
||||||
|
local align_y = mp.get_property_number("video-align-y")
|
||||||
|
local pan_y = mp.get_property_number("video-pan-y")
|
||||||
|
_video_dimensions.top_left.y, _video_dimensions.bottom_right.y = split_scaling(window_h, scaled_height, zoom, align_y, pan_y)
|
||||||
|
else
|
||||||
|
_video_dimensions.top_left.x = 0
|
||||||
|
_video_dimensions.bottom_right.x = window_w
|
||||||
|
_video_dimensions.top_left.y = 0
|
||||||
|
_video_dimensions.bottom_right.y = window_h
|
||||||
|
end
|
||||||
|
_video_dimensions.size.w = _video_dimensions.bottom_right.x - _video_dimensions.top_left.x
|
||||||
|
_video_dimensions.size.h = _video_dimensions.bottom_right.y - _video_dimensions.top_left.y
|
||||||
|
_video_dimensions.ratios.w = _video_dimensions.size.w / w
|
||||||
|
_video_dimensions.ratios.h = _video_dimensions.size.h / h
|
||||||
|
video_dimensions_stale = false
|
||||||
|
return _video_dimensions
|
||||||
|
end
|
||||||
|
|
||||||
|
for _, p in ipairs({
|
||||||
|
"keepaspect",
|
||||||
|
"video-out-params",
|
||||||
|
"video-unscaled",
|
||||||
|
"panscan",
|
||||||
|
"video-zoom",
|
||||||
|
"video-align-x",
|
||||||
|
"video-pan-x",
|
||||||
|
"video-align-y",
|
||||||
|
"video-pan-y",
|
||||||
|
"osd-width",
|
||||||
|
"osd-height",
|
||||||
|
}) do
|
||||||
|
mp.observe_property(p, "native", function() video_dimensions_stale = true end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function drag_to_pan_handler(table)
|
||||||
|
if cleanup then
|
||||||
|
cleanup()
|
||||||
|
cleanup = nil
|
||||||
|
end
|
||||||
|
if table["event"] == "down" then
|
||||||
|
local video_dimensions = get_video_dimensions()
|
||||||
|
if not video_dimensions then return end
|
||||||
|
local mouse_pos_origin, video_pan_origin = {}, {}
|
||||||
|
local moved = false
|
||||||
|
mouse_pos_origin.x, mouse_pos_origin.y = mp.get_mouse_pos()
|
||||||
|
video_pan_origin.x = mp.get_property("video-pan-x")
|
||||||
|
video_pan_origin.y = mp.get_property("video-pan-y")
|
||||||
|
local idle = function()
|
||||||
|
if moved then
|
||||||
|
local mX, mY = mp.get_mouse_pos()
|
||||||
|
local pX = video_pan_origin.x + (mX - mouse_pos_origin.x) / video_dimensions.size.w
|
||||||
|
local pY = video_pan_origin.y + (mY - mouse_pos_origin.y) / video_dimensions.size.h
|
||||||
|
mp.command("no-osd set video-pan-x " .. clamp(pX, -3, 3) .. "; no-osd set video-pan-y " .. clamp(pY, -3, 3))
|
||||||
|
moved = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
mp.register_idle(idle)
|
||||||
|
add_mouse_move_callback("drag-to-pan", function() moved = true end)
|
||||||
|
cleanup = function()
|
||||||
|
remove_mouse_move_callback("drag-to-pan")
|
||||||
|
mp.unregister_idle(idle)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function pan_follows_cursor_handler(table)
|
||||||
|
if cleanup then
|
||||||
|
cleanup()
|
||||||
|
cleanup = nil
|
||||||
|
end
|
||||||
|
if table["event"] == "down" then
|
||||||
|
local video_dimensions = get_video_dimensions()
|
||||||
|
if not video_dimensions then return end
|
||||||
|
local window_w, window_h = mp.get_osd_size()
|
||||||
|
local moved = true
|
||||||
|
local idle = function()
|
||||||
|
if moved then
|
||||||
|
local mX, mY = mp.get_mouse_pos()
|
||||||
|
local x = math.min(1, math.max(- 2 * mX / window_w + 1, -1))
|
||||||
|
local y = math.min(1, math.max(- 2 * mY / window_h + 1, -1))
|
||||||
|
local command = ""
|
||||||
|
local margin, move_full = opts.pan_follows_cursor_margin, opts.pan_follows_cursor_move_if_full_view
|
||||||
|
if (not move_full and window_w < video_dimensions.size.w) then
|
||||||
|
command = command .. "no-osd set video-pan-x " .. clamp(x * (video_dimensions.size.w - window_w + 2 * margin) / (2 * video_dimensions.size.w), -3, 3) .. ";"
|
||||||
|
elseif mp.get_property_number("video-pan-x") ~= 0 then
|
||||||
|
command = command .. "no-osd set video-pan-x " .. "0;"
|
||||||
|
end
|
||||||
|
if (not move_full and window_h < video_dimensions.size.h) then
|
||||||
|
command = command .. "no-osd set video-pan-y " .. clamp(y * (video_dimensions.size.h - window_h + 2 * margin) / (2 * video_dimensions.size.h), -3, 3) .. ";"
|
||||||
|
elseif mp.get_property_number("video-pan-y") ~= 0 then
|
||||||
|
command = command .. "no-osd set video-pan-y " .. "0;"
|
||||||
|
end
|
||||||
|
if command ~= "" then
|
||||||
|
mp.command(command)
|
||||||
|
end
|
||||||
|
moved = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
mp.register_idle(idle)
|
||||||
|
add_mouse_move_callback("pan-follows-cursor", function() moved = true end)
|
||||||
|
cleanup = function()
|
||||||
|
remove_mouse_move_callback("pan-follows-cursor")
|
||||||
|
mp.unregister_idle(idle)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function cursor_centric_zoom_handler(amt)
|
||||||
|
local zoom_inc = tonumber(amt)
|
||||||
|
if not zoom_inc or zoom_inc == 0 then return end
|
||||||
|
local video_dimensions = get_video_dimensions()
|
||||||
|
if not video_dimensions then return end
|
||||||
|
local mouse_pos_origin, video_pan_origin = {}, {}
|
||||||
|
mouse_pos_origin.x, mouse_pos_origin.y = mp.get_mouse_pos()
|
||||||
|
video_pan_origin.x = mp.get_property("video-pan-x")
|
||||||
|
video_pan_origin.y = mp.get_property("video-pan-y")
|
||||||
|
local zoom_origin = mp.get_property("video-zoom")
|
||||||
|
-- how far the cursor is form the middle of the video (in percentage)
|
||||||
|
local rx = (video_dimensions.top_left.x + video_dimensions.size.w / 2 - mouse_pos_origin.x) / (video_dimensions.size.w / 2)
|
||||||
|
local ry = (video_dimensions.top_left.y + video_dimensions.size.h / 2 - mouse_pos_origin.y) / (video_dimensions.size.h / 2)
|
||||||
|
|
||||||
|
-- the size in pixels of the (in|de)crement
|
||||||
|
local diffHeight = (2 ^ zoom_inc - 1) * video_dimensions.size.h
|
||||||
|
local diffWidth = (2 ^ zoom_inc - 1) * video_dimensions.size.w
|
||||||
|
local newPanX = (video_pan_origin.x * video_dimensions.size.w + rx * diffWidth / 2) / (video_dimensions.size.w + diffWidth)
|
||||||
|
local newPanY = (video_pan_origin.y * video_dimensions.size.h + ry * diffHeight / 2) / (video_dimensions.size.h + diffHeight)
|
||||||
|
mp.command("no-osd set video-zoom " .. zoom_origin + zoom_inc .. "; no-osd set video-pan-x " .. clamp(newPanX, -3, 3) .. "; no-osd set video-pan-y " .. clamp(newPanY, -3, 3))
|
||||||
|
end
|
||||||
|
|
||||||
|
function align_border(x, y)
|
||||||
|
local video_dimensions = get_video_dimensions()
|
||||||
|
if not video_dimensions then return end
|
||||||
|
local window_w, window_h = mp.get_osd_size()
|
||||||
|
local x, y = tonumber(x), tonumber(y)
|
||||||
|
local command = ""
|
||||||
|
if x then
|
||||||
|
command = command .. "no-osd set video-pan-x " .. clamp(x * (video_dimensions.size.w - window_w) / (2 * video_dimensions.size.w), -3, 3) .. ";"
|
||||||
|
end
|
||||||
|
if y then
|
||||||
|
command = command .. "no-osd set video-pan-y " .. clamp(y * (video_dimensions.size.h - window_h) / (2 * video_dimensions.size.h), -3, 3) .. ";"
|
||||||
|
end
|
||||||
|
if command ~= "" then
|
||||||
|
mp.command(command)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function pan_image(axis, amount, zoom_invariant, image_constrained)
|
||||||
|
amount = tonumber(amount)
|
||||||
|
if not amount or amount == 0 or axis ~= "x" and axis ~= "y" then return end
|
||||||
|
if zoom_invariant == "yes" then
|
||||||
|
amount = amount / 2 ^ mp.get_property_number("video-zoom")
|
||||||
|
end
|
||||||
|
local prop = "video-pan-" .. axis
|
||||||
|
local old_pan = mp.get_property_number(prop)
|
||||||
|
if image_constrained == "yes" then
|
||||||
|
local video_dimensions = get_video_dimensions()
|
||||||
|
if not video_dimensions then return end
|
||||||
|
local measure = axis == "x" and "w" or "h"
|
||||||
|
local window = {}
|
||||||
|
window.w, window.h = mp.get_osd_size()
|
||||||
|
local pixels_moved = amount * video_dimensions.size[measure]
|
||||||
|
-- should somehow refactor this
|
||||||
|
if pixels_moved > 0 then
|
||||||
|
if window[measure] > video_dimensions.size[measure] then
|
||||||
|
if video_dimensions.bottom_right[axis] >= window[measure] then return end
|
||||||
|
if video_dimensions.bottom_right[axis] + pixels_moved > window[measure] then
|
||||||
|
amount = (window[measure] - video_dimensions.bottom_right[axis]) / video_dimensions.size[measure]
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if video_dimensions.top_left[axis] >= 0 then return end
|
||||||
|
if video_dimensions.top_left[axis] + pixels_moved > 0 then
|
||||||
|
amount = (0 - video_dimensions.top_left[axis]) / video_dimensions.size[measure]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if window[measure] > video_dimensions.size[measure] then
|
||||||
|
if video_dimensions.top_left[axis] <= 0 then return end
|
||||||
|
if video_dimensions.top_left[axis] + pixels_moved < 0 then
|
||||||
|
amount = (0 - video_dimensions.top_left[axis]) / video_dimensions.size[measure]
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if video_dimensions.bottom_right[axis] <= window[measure] then return end
|
||||||
|
if video_dimensions.bottom_right[axis] + pixels_moved < window[measure] then
|
||||||
|
amount = (window[measure] - video_dimensions.bottom_right[axis]) / video_dimensions.size[measure]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
mp.set_property_number(prop, old_pan + amount)
|
||||||
|
end
|
||||||
|
|
||||||
|
function rotate_video(amt)
|
||||||
|
local rot = mp.get_property_number("video-rotate")
|
||||||
|
rot = (rot + amt) % 360
|
||||||
|
mp.set_property_number("video-rotate", rot)
|
||||||
|
end
|
||||||
|
|
||||||
|
function reset_pan_if_visible()
|
||||||
|
local video_dimensions = get_video_dimensions()
|
||||||
|
if not video_dimensions then return end
|
||||||
|
local window_w, window_h = mp.get_osd_size()
|
||||||
|
local command = ""
|
||||||
|
if (window_w >= video_dimensions.size.w) then
|
||||||
|
command = command .. "no-osd set video-pan-x 0" .. ";"
|
||||||
|
end
|
||||||
|
if (window_h >= video_dimensions.size.h) then
|
||||||
|
command = command .. "no-osd set video-pan-y 0" .. ";"
|
||||||
|
end
|
||||||
|
if command ~= "" then
|
||||||
|
mp.command(command)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function force_print_filename()
|
||||||
|
mp.set_property("msg-level", "cplayer=info")
|
||||||
|
mp.commandv("print-text", mp.get_property("path"))
|
||||||
|
mp.set_property("msg-level", "all=no")
|
||||||
|
end
|
||||||
|
|
||||||
|
function draw_ass()
|
||||||
|
local ww, wh = mp.get_osd_size()
|
||||||
|
local merge = function(a, b)
|
||||||
|
return b ~= "" and (a .. "\n" .. b) or a
|
||||||
|
end
|
||||||
|
mp.set_osd_ass(ww, wh, merge(merge(ass.status_line, ass.minimap), ass.ruler))
|
||||||
|
end
|
||||||
|
|
||||||
|
local status_line_enabled = false
|
||||||
|
local status_line_stale = true
|
||||||
|
|
||||||
|
function mark_status_line_stale()
|
||||||
|
status_line_stale = true
|
||||||
|
end
|
||||||
|
|
||||||
|
function refresh_status_line()
|
||||||
|
if not status_line_stale then return end
|
||||||
|
status_line_stale = false
|
||||||
|
local path = mp.get_property("path")
|
||||||
|
if path == nil or path == "" then
|
||||||
|
ass.status_line = ""
|
||||||
|
draw_ass()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local expanded = mp.command_native({ "expand-text", opts.status_line })
|
||||||
|
if not expanded then
|
||||||
|
msg.warn("Error expanding status line")
|
||||||
|
ass.status_line = ""
|
||||||
|
draw_ass()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local w,h = mp.get_osd_size()
|
||||||
|
local an, x, y
|
||||||
|
local margin = 10
|
||||||
|
if opts.status_line_position == "top_left" then
|
||||||
|
x = margin
|
||||||
|
y = margin
|
||||||
|
an = 7
|
||||||
|
elseif opts.status_line_position == "top_right" then
|
||||||
|
x = w-margin
|
||||||
|
y = margin
|
||||||
|
an = 9
|
||||||
|
elseif opts.status_line_position == "bottom_right" then
|
||||||
|
x = w-margin
|
||||||
|
y = h-margin
|
||||||
|
an = 3
|
||||||
|
else
|
||||||
|
x = margin
|
||||||
|
y = h-margin
|
||||||
|
an = 1
|
||||||
|
end
|
||||||
|
local a = assdraw:ass_new()
|
||||||
|
a:new_event()
|
||||||
|
a:an(an)
|
||||||
|
a:pos(x,y)
|
||||||
|
a:append("{\\fs".. opts.status_line_size.. "}{\\bord1.0}")
|
||||||
|
a:append(expanded)
|
||||||
|
ass.status_line = a.text
|
||||||
|
draw_ass()
|
||||||
|
end
|
||||||
|
|
||||||
|
function enable_status_line()
|
||||||
|
if status_line_enabled then return end
|
||||||
|
status_line_enabled = true
|
||||||
|
local start = 0
|
||||||
|
while true do
|
||||||
|
local s, e, cap = string.find(opts.status_line, "%${[?!]?([%l%d-/]*)", start)
|
||||||
|
if not s then break end
|
||||||
|
mp.observe_property(cap, nil, mark_status_line_stale)
|
||||||
|
start = e
|
||||||
|
end
|
||||||
|
mp.observe_property("path", nil, mark_status_line_stale)
|
||||||
|
mp.observe_property("osd-width", nil, mark_status_line_stale)
|
||||||
|
mp.observe_property("osd-height", nil, mark_status_line_stale)
|
||||||
|
mp.register_idle(refresh_status_line)
|
||||||
|
mark_status_line_stale()
|
||||||
|
end
|
||||||
|
|
||||||
|
function disable_status_line()
|
||||||
|
if not status_line_enabled then return end
|
||||||
|
status_line_enabled = false
|
||||||
|
mp.unobserve_property(mark_status_line_stale)
|
||||||
|
mp.unregister_idle(refresh_status_line)
|
||||||
|
ass.status_line = ""
|
||||||
|
draw_ass()
|
||||||
|
end
|
||||||
|
|
||||||
|
if opts.status_line_enabled then
|
||||||
|
enable_status_line()
|
||||||
|
end
|
||||||
|
|
||||||
|
if opts.command_on_image_loaded ~= "" or opts.command_on_non_image_loaded ~= "" then
|
||||||
|
local was_image = false
|
||||||
|
local frame_count = nil
|
||||||
|
local audio_tracks = nil
|
||||||
|
local out_params_ready = nil
|
||||||
|
local path = nil
|
||||||
|
|
||||||
|
function state_changed()
|
||||||
|
function set_image(is_image)
|
||||||
|
if is_image and not was_image and opts.command_on_first_image_loaded ~= "" then
|
||||||
|
mp.command(opts.command_on_first_image_loaded)
|
||||||
|
end
|
||||||
|
if is_image and opts.command_on_image_loaded ~= "" then
|
||||||
|
mp.command(opts.command_on_image_loaded)
|
||||||
|
end
|
||||||
|
if not is_image and was_image and opts.command_on_non_image_loaded ~= "" then
|
||||||
|
mp.command(opts.command_on_non_image_loaded)
|
||||||
|
end
|
||||||
|
was_image = is_image
|
||||||
|
end
|
||||||
|
-- only do things when state is consistent
|
||||||
|
if path ~= nil and audio_tracks ~= nil then
|
||||||
|
if frame_count == nil and audio_tracks > 0 then
|
||||||
|
set_image(false)
|
||||||
|
elseif out_params_ready and frame_count ~= nil then
|
||||||
|
-- png have 0 frames, jpg 1 ¯\_(ツ)_/¯
|
||||||
|
set_image((frame_count == 0 or frame_count == 1) and audio_tracks == 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
mp.observe_property("video-out-params/par", "number", function(_, val)
|
||||||
|
out_params_ready = (val ~= nil and val > 0)
|
||||||
|
state_changed()
|
||||||
|
end)
|
||||||
|
mp.observe_property("estimated-frame-count", "number", function(_, val)
|
||||||
|
frame_count = val
|
||||||
|
state_changed()
|
||||||
|
end)
|
||||||
|
mp.observe_property("path", "string", function(_, val)
|
||||||
|
if not val or val == "" then
|
||||||
|
path = nil
|
||||||
|
else
|
||||||
|
path = val
|
||||||
|
end
|
||||||
|
state_changed()
|
||||||
|
end)
|
||||||
|
mp.register_event("tracks-changed", function()
|
||||||
|
audio_tracks = 0
|
||||||
|
local tracks = 0
|
||||||
|
for _, track in ipairs(mp.get_property_native("track-list")) do
|
||||||
|
tracks = tracks + 1
|
||||||
|
if track.type == "audio" then
|
||||||
|
audio_tracks = audio_tracks + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if tracks == 0 then
|
||||||
|
audio_tracks = nil
|
||||||
|
end
|
||||||
|
state_changed()
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function refresh_minimap()
|
||||||
|
local dim = get_video_dimensions()
|
||||||
|
if not dim then
|
||||||
|
ass.minimap = ""
|
||||||
|
draw_ass()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if _minimap_old_timestamp and dim.timestamp == _minimap_old_timestamp then return end
|
||||||
|
_minimap_old_timestamp = dim.timestamp
|
||||||
|
local ww, wh = mp.get_osd_size()
|
||||||
|
if opts.minimap_hide_when_full_image_in_view then
|
||||||
|
if dim.top_left.x >= 0 and
|
||||||
|
dim.top_left.y >= 0 and
|
||||||
|
dim.bottom_right.x <= ww and
|
||||||
|
dim.bottom_right.y <= wh
|
||||||
|
then
|
||||||
|
ass.minimap = ""
|
||||||
|
draw_ass()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local center = {
|
||||||
|
x=opts.minimap_center[1]/100*ww,
|
||||||
|
y=opts.minimap_center[2]/100*wh
|
||||||
|
}
|
||||||
|
local cutoff = {
|
||||||
|
x=opts.minimap_max_size[1]/100*ww/2,
|
||||||
|
y=opts.minimap_max_size[2]/100*wh/2
|
||||||
|
}
|
||||||
|
local a = assdraw.ass_new()
|
||||||
|
local draw = function(x, y, w, h, opacity, color)
|
||||||
|
a:new_event()
|
||||||
|
a:pos(center.x, center.y)
|
||||||
|
a:append("{\\bord0}")
|
||||||
|
a:append("{\\shad0}")
|
||||||
|
a:append("{\\c&" .. color .. "&}")
|
||||||
|
a:append("{\\2a&HFF}")
|
||||||
|
a:append("{\\3a&HFF}")
|
||||||
|
a:append("{\\4a&HFF}")
|
||||||
|
a:append("{\\1a&H" .. opacity .. "}")
|
||||||
|
w=w/2
|
||||||
|
h=h/2
|
||||||
|
a:draw_start()
|
||||||
|
local rounded = {true,true,true,true} -- tl, tr, br, bl
|
||||||
|
local x0,y0,x1,y1 = x-w, y-h, x+w, y+h
|
||||||
|
if x0 < -cutoff.x then
|
||||||
|
x0 = -cutoff.x
|
||||||
|
rounded[4] = false
|
||||||
|
rounded[1] = false
|
||||||
|
end
|
||||||
|
if y0 < -cutoff.y then
|
||||||
|
y0 = -cutoff.y
|
||||||
|
rounded[1] = false
|
||||||
|
rounded[2] = false
|
||||||
|
end
|
||||||
|
if x1 > cutoff.x then
|
||||||
|
x1 = cutoff.x
|
||||||
|
rounded[2] = false
|
||||||
|
rounded[3] = false
|
||||||
|
end
|
||||||
|
if y1 > cutoff.y then
|
||||||
|
y1 = cutoff.y
|
||||||
|
rounded[3] = false
|
||||||
|
rounded[4] = false
|
||||||
|
end
|
||||||
|
|
||||||
|
local r = 3
|
||||||
|
local c = 0.551915024494 * r
|
||||||
|
if rounded[0] then
|
||||||
|
a:move_to(x0 + r, y0)
|
||||||
|
else
|
||||||
|
a:move_to(x0,y0)
|
||||||
|
end
|
||||||
|
if rounded[1] then
|
||||||
|
a:line_to(x1 - r, y0)
|
||||||
|
a:bezier_curve(x1 - r + c, y0, x1, y0 + r - c, x1, y0 + r)
|
||||||
|
else
|
||||||
|
a:line_to(x1, y0)
|
||||||
|
end
|
||||||
|
if rounded[2] then
|
||||||
|
a:line_to(x1, y1 - r)
|
||||||
|
a:bezier_curve(x1, y1 - r + c, x1 - r + c, y1, x1 - r, y1)
|
||||||
|
else
|
||||||
|
a:line_to(x1, y1)
|
||||||
|
end
|
||||||
|
if rounded[3] then
|
||||||
|
a:line_to(x0 + r, y1)
|
||||||
|
a:bezier_curve(x0 + r - c, y1, x0, y1 - r + c, x0, y1 - r)
|
||||||
|
else
|
||||||
|
a:line_to(x0, y1)
|
||||||
|
end
|
||||||
|
if rounded[4] then
|
||||||
|
a:line_to(x0, y0 + r)
|
||||||
|
a:bezier_curve(x0, y0 + r - c, x0 + r - c, y0, x0 + r, y0)
|
||||||
|
else
|
||||||
|
a:line_to(x0, y0)
|
||||||
|
end
|
||||||
|
a:draw_stop()
|
||||||
|
end
|
||||||
|
local image = function()
|
||||||
|
draw((dim.top_left.x + dim.size.w/2 - ww/2) / opts.minimap_scale,
|
||||||
|
(dim.top_left.y + dim.size.h/2 - wh/2) / opts.minimap_scale,
|
||||||
|
dim.size.w / opts.minimap_scale,
|
||||||
|
dim.size.h / opts.minimap_scale,
|
||||||
|
opts.minimap_image_opacity,
|
||||||
|
opts.minimap_image_color)
|
||||||
|
end
|
||||||
|
local view = function()
|
||||||
|
draw(0,
|
||||||
|
0,
|
||||||
|
ww / opts.minimap_scale,
|
||||||
|
wh / opts.minimap_scale,
|
||||||
|
opts.minimap_view_opacity,
|
||||||
|
opts.minimap_view_color)
|
||||||
|
end
|
||||||
|
if opts.minimap_view_above_image then
|
||||||
|
image()
|
||||||
|
view()
|
||||||
|
else
|
||||||
|
view()
|
||||||
|
image()
|
||||||
|
end
|
||||||
|
ass.minimap = a.text
|
||||||
|
draw_ass()
|
||||||
|
end
|
||||||
|
|
||||||
|
local minimap_enabled = false
|
||||||
|
|
||||||
|
function enable_minimap()
|
||||||
|
if minimap_enabled then return end
|
||||||
|
minimap_enabled = true
|
||||||
|
mp.register_idle(refresh_minimap)
|
||||||
|
end
|
||||||
|
|
||||||
|
function disable_minimap()
|
||||||
|
if not minimap_enabled then return end
|
||||||
|
minimap_enabled = false
|
||||||
|
ass.minimap = a.text
|
||||||
|
draw_ass()
|
||||||
|
mp.unregister_idle(refresh_minimap)
|
||||||
|
end
|
||||||
|
|
||||||
|
if opts.minimap_enabled then
|
||||||
|
enable_minimap()
|
||||||
|
end
|
||||||
|
|
||||||
|
local ruler_state = 0 -- {0,1,2,3} = {inactive,setting first point,setting second point,done}
|
||||||
|
local ruler_first_point = nil -- in video space coordinates
|
||||||
|
local ruler_second_point = nil -- in video space coordinates
|
||||||
|
|
||||||
|
function cursor_video_space()
|
||||||
|
local dim = get_video_dimensions()
|
||||||
|
if not dim then return nil end
|
||||||
|
local mx, my = mp.get_mouse_pos()
|
||||||
|
local ret = {}
|
||||||
|
ret.x = (mx - dim.top_left.x) / dim.ratios.w
|
||||||
|
ret.y = (my - dim.top_left.y) / dim.ratios.h
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
function video_space_to_screen(point)
|
||||||
|
local dim = get_video_dimensions()
|
||||||
|
if not dim then return nil end
|
||||||
|
local ret = {}
|
||||||
|
ret.x = point.x * dim.ratios.w + dim.top_left.x
|
||||||
|
ret.y = point.y * dim.ratios.h + dim.top_left.y
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
|
function refresh_ruler()
|
||||||
|
local dim = get_video_dimensions()
|
||||||
|
if not dim then
|
||||||
|
ass.ruler = ""
|
||||||
|
draw_ass()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local line_start = {}
|
||||||
|
local line_end = {}
|
||||||
|
if ruler_second_point then
|
||||||
|
line_start.image = ruler_first_point
|
||||||
|
line_start.screen = video_space_to_screen(ruler_first_point)
|
||||||
|
line_end.image = ruler_second_point
|
||||||
|
line_end.screen = video_space_to_screen(ruler_second_point)
|
||||||
|
elseif ruler_first_point then
|
||||||
|
line_start.image = ruler_first_point
|
||||||
|
line_start.screen = video_space_to_screen(ruler_first_point)
|
||||||
|
line_end.image = cursor_video_space()
|
||||||
|
line_end.screen = {}
|
||||||
|
line_end.screen.x, line_end.screen.y = mp.get_mouse_pos()
|
||||||
|
else
|
||||||
|
local mx, my = mp.get_mouse_pos()
|
||||||
|
line_start.image = cursor_video_space()
|
||||||
|
line_start.screen = {}
|
||||||
|
line_start.screen.x, line_start.screen.y = mp.get_mouse_pos()
|
||||||
|
line_end = line_start
|
||||||
|
end
|
||||||
|
local distinct = (math.abs(line_start.screen.x - line_end.screen.x) >= 1
|
||||||
|
or math.abs(line_start.screen.y - line_end.screen.y) >= 1)
|
||||||
|
|
||||||
|
local a = assdraw:ass_new()
|
||||||
|
local draw_setup = function(bord)
|
||||||
|
a:new_event()
|
||||||
|
a:pos(0,0)
|
||||||
|
a:append("{\\bord" .. bord .. "}")
|
||||||
|
a:append("{\\shad0}")
|
||||||
|
local r = opts.ruler_line_color
|
||||||
|
a:append("{\\3c&H".. r .. r .. r .. "&}")
|
||||||
|
a:append("{\\1a&HFF}")
|
||||||
|
a:append("{\\2a&HFF}")
|
||||||
|
a:append("{\\3a&H00}")
|
||||||
|
a:append("{\\4a&HFF}")
|
||||||
|
a:draw_start()
|
||||||
|
end
|
||||||
|
local dot = function(pos, size)
|
||||||
|
draw_setup(size)
|
||||||
|
a:move_to(pos.x, pos.y-0.5)
|
||||||
|
a:line_to(pos.x, pos.y+0.5)
|
||||||
|
end
|
||||||
|
local line = function(from, to, size)
|
||||||
|
draw_setup(size)
|
||||||
|
a:move_to(from.x, from.y)
|
||||||
|
a:line_to(to.x, to.y)
|
||||||
|
end
|
||||||
|
if distinct then
|
||||||
|
dot(line_start.screen, opts.ruler_dots_radius)
|
||||||
|
line(line_start.screen, line_end.screen, opts.ruler_line_width)
|
||||||
|
dot(line_end.screen, opts.ruler_dots_radius)
|
||||||
|
else
|
||||||
|
dot(line_start.screen, opts.ruler_dots_radius)
|
||||||
|
end
|
||||||
|
|
||||||
|
local line_info = function()
|
||||||
|
if not opts.ruler_show_distance then return end
|
||||||
|
a:new_event()
|
||||||
|
a:append("{\\fs36}{\\bord1}")
|
||||||
|
a:pos((line_start.screen.x + line_end.screen.x) / 2, (line_start.screen.y + line_end.screen.y) / 2)
|
||||||
|
local an = 1
|
||||||
|
if line_start.image.x < line_end.image.x then an = an + 2 end
|
||||||
|
if line_start.image.y < line_end.image.y then an = an + 6 end
|
||||||
|
a:an(an)
|
||||||
|
local image = math.sqrt(math.pow(line_start.image.x - line_end.image.x, 2) + math.pow(line_start.image.y - line_end.image.y, 2))
|
||||||
|
local screen = math.sqrt(math.pow(line_start.screen.x - line_end.screen.x, 2) + math.pow(line_start.screen.y - line_end.screen.y, 2))
|
||||||
|
if opts.ruler_coordinates_space == "both" then
|
||||||
|
a:append(string.format("image: %.1f\\Nscreen: %.1f", image, screen))
|
||||||
|
elseif opts.ruler_coordinates_space == "image" then
|
||||||
|
a:append(string.format("%.1f", image))
|
||||||
|
elseif opts.ruler_coordinates_space == "window" then
|
||||||
|
a:append(string.format("%.1f", screen))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local dot_info = function(pos, opposite)
|
||||||
|
if not opts.ruler_show_coordinates then return end
|
||||||
|
a:new_event()
|
||||||
|
a:append("{\\fs" .. opts.ruler_font_size .."}{\\bord1}")
|
||||||
|
a:pos(pos.screen.x, pos.screen.y)
|
||||||
|
local an
|
||||||
|
if distinct then
|
||||||
|
an = 1
|
||||||
|
if line_start.image.x > line_end.image.x then an = an + 2 end
|
||||||
|
if line_start.image.y < line_end.image.y then an = an + 6 end
|
||||||
|
else
|
||||||
|
an = 7
|
||||||
|
end
|
||||||
|
if opposite then
|
||||||
|
an = 9 + 1 - an
|
||||||
|
end
|
||||||
|
a:an(an)
|
||||||
|
if opts.ruler_coordinates_space == "both" then
|
||||||
|
a:append(string.format("image: %.1f, %.1f\\Nscreen: %i, %i",
|
||||||
|
pos.image.x, pos.image.y, pos.screen.x, pos.screen.y))
|
||||||
|
elseif opts.ruler_coordinates_space == "image" then
|
||||||
|
a:append(string.format("%.1f, %.1f", pos.image.x, pos.image.y))
|
||||||
|
elseif opts.ruler_coordinates_space == "window" then
|
||||||
|
a:append(string.format("%i, %i", pos.screen.x, pos.screen.y))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
dot_info(line_start, true)
|
||||||
|
if distinct then
|
||||||
|
line_info()
|
||||||
|
dot_info(line_end, false)
|
||||||
|
end
|
||||||
|
if distinct and opts.ruler_show_angles ~= "no" then
|
||||||
|
local dist = 50
|
||||||
|
local pos_from_angle = function(mult, angle)
|
||||||
|
return {
|
||||||
|
x = line_start.screen.x + mult * dist * math.cos(angle),
|
||||||
|
y = line_start.screen.y + mult * dist * math.sin(angle)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
local extended = {x=line_start.screen.x, y=line_start.screen.y}
|
||||||
|
if line_end.screen.x > line_start.screen.x then
|
||||||
|
extended.x = extended.x + dist
|
||||||
|
else
|
||||||
|
extended.x = extended.x - dist
|
||||||
|
end
|
||||||
|
line(line_start.screen, extended, math.max(0, opts.ruler_line_width-0.5))
|
||||||
|
local angle = math.atan(math.abs(line_start.image.y - line_end.image.y) / math.abs(line_start.image.x - line_end.image.x))
|
||||||
|
local fix_angle
|
||||||
|
local an
|
||||||
|
if line_end.image.y < line_start.image.y and line_end.image.x > line_start.image.x then
|
||||||
|
-- upper-right
|
||||||
|
an = 4
|
||||||
|
fix_angle = function(angle) return - angle end
|
||||||
|
elseif line_end.image.y < line_start.image.y then
|
||||||
|
-- upper-left
|
||||||
|
an = 6
|
||||||
|
fix_angle = function(angle) return math.pi + angle end
|
||||||
|
elseif line_end.image.x < line_start.image.x then
|
||||||
|
-- bottom-left
|
||||||
|
an = 6
|
||||||
|
fix_angle = function(angle) return math.pi - angle end
|
||||||
|
else
|
||||||
|
-- bottom-right
|
||||||
|
an = 4
|
||||||
|
fix_angle = function(angle) return angle end
|
||||||
|
end
|
||||||
|
-- should implement this https://math.stackexchange.com/questions/873224/calculate-control-points-of-cubic-bezier-curve-approximating-a-part-of-a-circle
|
||||||
|
local cp1 = pos_from_angle(1, fix_angle(angle*1/4))
|
||||||
|
local cp2 = pos_from_angle(1, fix_angle(angle*3/4))
|
||||||
|
local p2 = pos_from_angle(1, fix_angle(angle))
|
||||||
|
a:bezier_curve(cp1.x, cp1.y, cp2.x, cp2.y, p2.x, p2.y)
|
||||||
|
|
||||||
|
a:new_event()
|
||||||
|
a:append("{\\fs" .. opts.ruler_font_size .."}{\\bord1}")
|
||||||
|
local text_pos = pos_from_angle(1.1, fix_angle(angle*2/3)) -- you'd think /2 would make more sense, but *2/3 looks better
|
||||||
|
a:pos(text_pos.x, text_pos.y)
|
||||||
|
a:an(an)
|
||||||
|
if opts.ruler_show_angles == "both" then
|
||||||
|
a:append(string.format("%.2f\\N%.1f°", angle, angle / math.pi * 180))
|
||||||
|
elseif opts.ruler_show_angles == "degrees" then
|
||||||
|
a:append(string.format("%.1f°", angle / math.pi * 180))
|
||||||
|
elseif opts.ruler_show_angles == "radians" then
|
||||||
|
a:append(string.format("%.2f", angle))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ass.ruler = a.text
|
||||||
|
draw_ass()
|
||||||
|
end
|
||||||
|
|
||||||
|
function ruler_next()
|
||||||
|
if ruler_state == 0 then
|
||||||
|
mp.register_idle(refresh_ruler)
|
||||||
|
add_mouse_move_callback("ruler", function() end) -- only used to get an idle event on mouse move
|
||||||
|
for _,key in ipairs(opts.ruler_confirm_bindings) do
|
||||||
|
mp.add_forced_key_binding(key, "ruler-next-" .. key, ruler_next)
|
||||||
|
end
|
||||||
|
for _,key in ipairs(opts.ruler_exit_bindings) do
|
||||||
|
mp.add_forced_key_binding(key, "ruler-stop-" .. key, ruler_stop)
|
||||||
|
end
|
||||||
|
ruler_state = 1
|
||||||
|
if opts.ruler_set_first_point_on_begin then
|
||||||
|
ruler_next()
|
||||||
|
end
|
||||||
|
elseif ruler_state == 1 then
|
||||||
|
ruler_first_point = cursor_video_space()
|
||||||
|
ruler_state = 2
|
||||||
|
elseif ruler_state == 2 then
|
||||||
|
ruler_state = 3
|
||||||
|
ruler_second_point = cursor_video_space()
|
||||||
|
if opts.ruler_clear_on_second_point_set then
|
||||||
|
ruler_next()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
ruler_stop()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function ruler_stop()
|
||||||
|
if ruler_state == 0 then return end
|
||||||
|
mp.unregister_idle(refresh_ruler)
|
||||||
|
for _,key in ipairs(opts.ruler_confirm_bindings) do
|
||||||
|
mp.remove_key_binding("ruler-next-" .. key)
|
||||||
|
end
|
||||||
|
for _,key in ipairs(opts.ruler_exit_bindings) do
|
||||||
|
mp.remove_key_binding("ruler-stop-" .. key)
|
||||||
|
end
|
||||||
|
remove_mouse_move_callback("ruler")
|
||||||
|
ruler_state = 0
|
||||||
|
ruler_first_point = nil
|
||||||
|
ruler_second_point = nil
|
||||||
|
ass.ruler = ""
|
||||||
|
draw_ass()
|
||||||
|
end
|
||||||
|
|
||||||
|
mp.add_key_binding(nil, "drag-to-pan", drag_to_pan_handler, {complex = true})
|
||||||
|
mp.add_key_binding(nil, "pan-follows-cursor", pan_follows_cursor_handler, {complex = true})
|
||||||
|
mp.add_key_binding(nil, "cursor-centric-zoom", cursor_centric_zoom_handler)
|
||||||
|
mp.add_key_binding(nil, "align-border", align_border)
|
||||||
|
mp.add_key_binding(nil, "pan-image", pan_image)
|
||||||
|
mp.add_key_binding(nil, "rotate-video", rotate_video)
|
||||||
|
mp.add_key_binding(nil, "reset-pan-if-visible", reset_pan_if_visible)
|
||||||
|
mp.add_key_binding(nil, "force-print-filename", force_print_filename)
|
||||||
|
|
||||||
|
mp.add_key_binding(nil, "ruler", ruler_next)
|
||||||
|
|
||||||
|
mp.add_key_binding(nil, "enable-status-line", enable_status_line)
|
||||||
|
mp.add_key_binding(nil, "disable-status-line", disable_status_line)
|
||||||
|
mp.add_key_binding(nil, "toggle-status-line", function() if status_line_enabled then disable_status_line() else enable_status_line() end end)
|
||||||
|
|
||||||
|
mp.add_key_binding(nil, "enable-minimap", enable_minimap)
|
||||||
|
mp.add_key_binding(nil, "disable-minimap", disable_minimap)
|
||||||
|
mp.add_key_binding(nil, "toggle-minimap", function() if minimap_enabled then disable_minimap() else enable_minimap() end end)
|
@ -0,0 +1,551 @@
|
|||||||
|
##############################################################
|
||||||
|
## This is the example bindings file. Copy it to ##
|
||||||
|
## ~/.ncmpcpp/bindings or $XDG_CONFIG_HOME/ncmpcpp/bindings ##
|
||||||
|
## and set up your preferences ##
|
||||||
|
##############################################################
|
||||||
|
##
|
||||||
|
##### General rules #####
|
||||||
|
##
|
||||||
|
## 1) Because each action has runtime checks whether it's
|
||||||
|
## ok to run it, a few actions can be bound to one key.
|
||||||
|
## Actions will be bound in order given in configuration
|
||||||
|
## file. When a key is pressed, first action in order
|
||||||
|
## will test itself whether it's possible to run it. If
|
||||||
|
## test succeeds, action is executed and other actions
|
||||||
|
## bound to this key are ignored. If it doesn't, next
|
||||||
|
## action in order tests itself etc.
|
||||||
|
##
|
||||||
|
## 2) It's possible to bind more that one action at once
|
||||||
|
## to a key. It can be done using the following syntax:
|
||||||
|
##
|
||||||
|
## def_key "key"
|
||||||
|
## action1
|
||||||
|
## action2
|
||||||
|
## ...
|
||||||
|
##
|
||||||
|
## This creates a chain of actions. When such chain is
|
||||||
|
## executed, each action in chain is run until the end of
|
||||||
|
## chain is reached or one of its actions fails to execute
|
||||||
|
## due to its requirements not being met. If multiple actions
|
||||||
|
## and/or chains are bound to the same key, they will be
|
||||||
|
## consecutively run until one of them gets fully executed.
|
||||||
|
##
|
||||||
|
## 3) When ncmpcpp starts, bindings configuration file is
|
||||||
|
## parsed and then ncmpcpp provides "missing pieces"
|
||||||
|
## of default keybindings. If you want to disable some
|
||||||
|
## bindings, there is a special action called 'dummy'
|
||||||
|
## for that purpose. Eg. if you want to disable ability
|
||||||
|
## to crop playlists, you need to put the following
|
||||||
|
## into configuration file:
|
||||||
|
##
|
||||||
|
## def_key "C"
|
||||||
|
## dummy
|
||||||
|
##
|
||||||
|
## After that ncmpcpp will not bind any default action
|
||||||
|
## to this key.
|
||||||
|
##
|
||||||
|
## 4) To let you write simple macros, the following special
|
||||||
|
## actions are provided:
|
||||||
|
##
|
||||||
|
## - push_character "character" - pushes given special
|
||||||
|
## character into input queue, so it will be immediately
|
||||||
|
## picked by ncmpcpp upon next call to readKey function.
|
||||||
|
## Accepted values: mouse, up, down, page_up, page_down,
|
||||||
|
## home, end, space, enter, insert, delete, left, right,
|
||||||
|
## tab, ctrl-a, ctrl-b, ..., ctrl-z, ctrl-[, ctrl-\\,
|
||||||
|
## ctrl-], ctrl-^, ctrl-_, f1, f2, ..., f12, backspace.
|
||||||
|
## In addition, most of these names can be prefixed with
|
||||||
|
## alt-/ctrl-/shift- to be recognized with the appropriate
|
||||||
|
## modifier key(s).
|
||||||
|
##
|
||||||
|
## - push_characters "string" - pushes given string into
|
||||||
|
## input queue.
|
||||||
|
##
|
||||||
|
## - require_runnable "action" - checks whether given action
|
||||||
|
## is runnable and fails if it isn't. This is especially
|
||||||
|
## useful when mixed with previous two functions. Consider
|
||||||
|
## the following macro definition:
|
||||||
|
##
|
||||||
|
## def_key "key"
|
||||||
|
## push_characters "custom_filter"
|
||||||
|
## apply_filter
|
||||||
|
##
|
||||||
|
## If apply_filter can't be currently run, we end up with
|
||||||
|
## sequence of characters in input queue which will be
|
||||||
|
## treated just as we typed them. This may lead to unexpected
|
||||||
|
## results (in this case 'c' will most likely clear current
|
||||||
|
## playlist, 'u' will trigger database update, 's' will stop
|
||||||
|
## playback etc.). To prevent such thing from happening, we
|
||||||
|
## need to change above definition to this one:
|
||||||
|
##
|
||||||
|
## def_key "key"
|
||||||
|
## require_runnable "apply_filter"
|
||||||
|
## push_characters "custom_filter"
|
||||||
|
## apply_filter
|
||||||
|
##
|
||||||
|
## Here, first we test whether apply_filter can be actually run
|
||||||
|
## before we stuff characters into input queue, so if condition
|
||||||
|
## is not met, whole chain is aborted and we're fine.
|
||||||
|
##
|
||||||
|
## - require_screen "screen" - checks whether given screen is
|
||||||
|
## currently active. accepted values: browser, clock, help,
|
||||||
|
## media_library, outputs, playlist, playlist_editor,
|
||||||
|
## search_engine, tag_editor, visualizer, last_fm, lyrics,
|
||||||
|
## selected_items_adder, server_info, song_info,
|
||||||
|
## sort_playlist_dialog, tiny_tag_editor.
|
||||||
|
##
|
||||||
|
## - run_external_command "command" - runs given command using
|
||||||
|
## system() function.
|
||||||
|
##
|
||||||
|
## 5) In addition to binding to a key, you can also bind actions
|
||||||
|
## or chains of actions to a command. If it comes to commands,
|
||||||
|
## syntax is very similar to defining keys. Here goes example
|
||||||
|
## definition of a command:
|
||||||
|
##
|
||||||
|
## def_command "quit" [deferred]
|
||||||
|
## stop
|
||||||
|
## quit
|
||||||
|
##
|
||||||
|
## If you execute the above command (which can be done by
|
||||||
|
## invoking action execute_command, typing 'quit' and pressing
|
||||||
|
## enter), ncmpcpp will stop the player and then quit. Note the
|
||||||
|
## presence of word 'deferred' enclosed in square brackets. It
|
||||||
|
## tells ncmpcpp to wait for confirmation (ie. pressing enter)
|
||||||
|
## after you typed quit. Instead of 'deferred', 'immediate'
|
||||||
|
## could be used. Then ncmpcpp will not wait for confirmation
|
||||||
|
## (enter) and will execute the command the moment it sees it.
|
||||||
|
##
|
||||||
|
## Note: while command chains are executed, internal environment
|
||||||
|
## update (which includes current window refresh and mpd status
|
||||||
|
## update) is not performed for performance reasons. However, it
|
||||||
|
## may be desirable to do so in some situration. Therefore it's
|
||||||
|
## possible to invoke by hand by performing 'update enviroment'
|
||||||
|
## action.
|
||||||
|
##
|
||||||
|
## Note: There is a difference between:
|
||||||
|
##
|
||||||
|
## def_key "key"
|
||||||
|
## action1
|
||||||
|
##
|
||||||
|
## def_key "key"
|
||||||
|
## action2
|
||||||
|
##
|
||||||
|
## and
|
||||||
|
##
|
||||||
|
## def_key "key"
|
||||||
|
## action1
|
||||||
|
## action2
|
||||||
|
##
|
||||||
|
## First one binds two single actions to the same key whilst
|
||||||
|
## second one defines a chain of actions. The behavior of
|
||||||
|
## these two is different and is described in (1) and (2).
|
||||||
|
##
|
||||||
|
## Note: Function def_key accepts non-ascii characters.
|
||||||
|
##
|
||||||
|
##### List of unbound actions #####
|
||||||
|
##
|
||||||
|
## The following actions are not bound to any key/command:
|
||||||
|
##
|
||||||
|
## - set_volume
|
||||||
|
##
|
||||||
|
#
|
||||||
|
#def_key "mouse"
|
||||||
|
# mouse_event
|
||||||
|
#
|
||||||
|
#def_key "h"
|
||||||
|
# previous_column
|
||||||
|
def_key "j"
|
||||||
|
scroll_down
|
||||||
|
def_key "k"
|
||||||
|
scroll_up
|
||||||
|
#def_key "l"
|
||||||
|
# next_column
|
||||||
|
#def_key "up"
|
||||||
|
# scroll_up
|
||||||
|
#
|
||||||
|
#def_key "shift-up"
|
||||||
|
# select_item
|
||||||
|
# scroll_up
|
||||||
|
#
|
||||||
|
#def_key "down"
|
||||||
|
# scroll_down
|
||||||
|
#
|
||||||
|
#def_key "shift-down"
|
||||||
|
# select_item
|
||||||
|
# scroll_down
|
||||||
|
#
|
||||||
|
#def_key "["
|
||||||
|
# scroll_up_album
|
||||||
|
#
|
||||||
|
#def_key "]"
|
||||||
|
# scroll_down_album
|
||||||
|
#
|
||||||
|
#def_key "{"
|
||||||
|
# scroll_up_artist
|
||||||
|
#
|
||||||
|
#def_key "}"
|
||||||
|
# scroll_down_artist
|
||||||
|
#
|
||||||
|
#def_key "page_up"
|
||||||
|
# page_up
|
||||||
|
#
|
||||||
|
#def_key "page_down"
|
||||||
|
# page_down
|
||||||
|
#
|
||||||
|
#def_key "home"
|
||||||
|
# move_home
|
||||||
|
#
|
||||||
|
#def_key "end"
|
||||||
|
# move_end
|
||||||
|
#
|
||||||
|
#def_key "insert"
|
||||||
|
# select_item
|
||||||
|
#
|
||||||
|
#def_key "enter"
|
||||||
|
# enter_directory
|
||||||
|
#
|
||||||
|
#def_key "enter"
|
||||||
|
# toggle_output
|
||||||
|
#
|
||||||
|
#def_key "enter"
|
||||||
|
# run_action
|
||||||
|
#
|
||||||
|
#def_key "enter"
|
||||||
|
# play_item
|
||||||
|
#
|
||||||
|
#def_key "space"
|
||||||
|
# add_item_to_playlist
|
||||||
|
#
|
||||||
|
#def_key "space"
|
||||||
|
# toggle_lyrics_update_on_song_change
|
||||||
|
#
|
||||||
|
#def_key "space"
|
||||||
|
# toggle_visualization_type
|
||||||
|
#
|
||||||
|
#def_key "delete"
|
||||||
|
# delete_playlist_items
|
||||||
|
#
|
||||||
|
#def_key "delete"
|
||||||
|
# delete_browser_items
|
||||||
|
#
|
||||||
|
#def_key "delete"
|
||||||
|
# delete_stored_playlist
|
||||||
|
#
|
||||||
|
#def_key "right"
|
||||||
|
# next_column
|
||||||
|
#
|
||||||
|
#def_key "right"
|
||||||
|
# slave_screen
|
||||||
|
#
|
||||||
|
#def_key "right"
|
||||||
|
# volume_up
|
||||||
|
#
|
||||||
|
#def_key "+"
|
||||||
|
# volume_up
|
||||||
|
#
|
||||||
|
#def_key "left"
|
||||||
|
# previous_column
|
||||||
|
#
|
||||||
|
#def_key "left"
|
||||||
|
# master_screen
|
||||||
|
#
|
||||||
|
#def_key "left"
|
||||||
|
# volume_down
|
||||||
|
#
|
||||||
|
#def_key "-"
|
||||||
|
# volume_down
|
||||||
|
#
|
||||||
|
#def_key ":"
|
||||||
|
# execute_command
|
||||||
|
#
|
||||||
|
#def_key "tab"
|
||||||
|
# next_screen
|
||||||
|
#
|
||||||
|
#def_key "shift-tab"
|
||||||
|
# previous_screen
|
||||||
|
#
|
||||||
|
#def_key "f1"
|
||||||
|
# show_help
|
||||||
|
#
|
||||||
|
#def_key "1"
|
||||||
|
# show_playlist
|
||||||
|
#
|
||||||
|
#def_key "2"
|
||||||
|
# show_browser
|
||||||
|
#
|
||||||
|
#def_key "2"
|
||||||
|
# change_browse_mode
|
||||||
|
#
|
||||||
|
#def_key "3"
|
||||||
|
# show_search_engine
|
||||||
|
#
|
||||||
|
#def_key "3"
|
||||||
|
# reset_search_engine
|
||||||
|
#
|
||||||
|
#def_key "4"
|
||||||
|
# show_media_library
|
||||||
|
#
|
||||||
|
#def_key "4"
|
||||||
|
# toggle_media_library_columns_mode
|
||||||
|
#
|
||||||
|
#def_key "5"
|
||||||
|
# show_playlist_editor
|
||||||
|
#
|
||||||
|
#def_key "6"
|
||||||
|
# show_tag_editor
|
||||||
|
#
|
||||||
|
#def_key "7"
|
||||||
|
# show_outputs
|
||||||
|
#
|
||||||
|
#def_key "8"
|
||||||
|
# show_visualizer
|
||||||
|
#
|
||||||
|
#def_key "="
|
||||||
|
# show_clock
|
||||||
|
#
|
||||||
|
#def_key "@"
|
||||||
|
# show_server_info
|
||||||
|
#
|
||||||
|
#def_key "s"
|
||||||
|
# stop
|
||||||
|
#
|
||||||
|
#def_key "p"
|
||||||
|
# pause
|
||||||
|
#
|
||||||
|
#def_key ">"
|
||||||
|
# next
|
||||||
|
#
|
||||||
|
#def_key "<"
|
||||||
|
# previous
|
||||||
|
#
|
||||||
|
#def_key "ctrl-h"
|
||||||
|
# jump_to_parent_directory
|
||||||
|
#
|
||||||
|
#def_key "ctrl-h"
|
||||||
|
# replay_song
|
||||||
|
#
|
||||||
|
#def_key "backspace"
|
||||||
|
# jump_to_parent_directory
|
||||||
|
#
|
||||||
|
#def_key "backspace"
|
||||||
|
# replay_song
|
||||||
|
#
|
||||||
|
#def_key "f"
|
||||||
|
# seek_forward
|
||||||
|
#
|
||||||
|
#def_key "b"
|
||||||
|
# seek_backward
|
||||||
|
#
|
||||||
|
#def_key "r"
|
||||||
|
# toggle_repeat
|
||||||
|
#
|
||||||
|
#def_key "z"
|
||||||
|
# toggle_random
|
||||||
|
#
|
||||||
|
#def_key "y"
|
||||||
|
# save_tag_changes
|
||||||
|
#
|
||||||
|
#def_key "y"
|
||||||
|
# start_searching
|
||||||
|
#
|
||||||
|
#def_key "y"
|
||||||
|
# toggle_single
|
||||||
|
#
|
||||||
|
#def_key "R"
|
||||||
|
# toggle_consume
|
||||||
|
#
|
||||||
|
#def_key "Y"
|
||||||
|
# toggle_replay_gain_mode
|
||||||
|
#
|
||||||
|
#def_key "T"
|
||||||
|
# toggle_add_mode
|
||||||
|
#
|
||||||
|
#def_key "|"
|
||||||
|
# toggle_mouse
|
||||||
|
#
|
||||||
|
#def_key "#"
|
||||||
|
# toggle_bitrate_visibility
|
||||||
|
#
|
||||||
|
#def_key "Z"
|
||||||
|
# shuffle
|
||||||
|
#
|
||||||
|
#def_key "x"
|
||||||
|
# toggle_crossfade
|
||||||
|
#
|
||||||
|
#def_key "X"
|
||||||
|
# set_crossfade
|
||||||
|
#
|
||||||
|
#def_key "u"
|
||||||
|
# update_database
|
||||||
|
#
|
||||||
|
#def_key "ctrl-s"
|
||||||
|
# sort_playlist
|
||||||
|
#
|
||||||
|
#def_key "ctrl-s"
|
||||||
|
# toggle_browser_sort_mode
|
||||||
|
#
|
||||||
|
#def_key "ctrl-s"
|
||||||
|
# toggle_media_library_sort_mode
|
||||||
|
#
|
||||||
|
#def_key "ctrl-r"
|
||||||
|
# reverse_playlist
|
||||||
|
#
|
||||||
|
#def_key "ctrl-f"
|
||||||
|
# apply_filter
|
||||||
|
#
|
||||||
|
#def_key "ctrl-_"
|
||||||
|
# select_found_items
|
||||||
|
#
|
||||||
|
#def_key "/"
|
||||||
|
# find
|
||||||
|
#
|
||||||
|
#def_key "/"
|
||||||
|
# find_item_forward
|
||||||
|
#
|
||||||
|
#def_key "?"
|
||||||
|
# find
|
||||||
|
#
|
||||||
|
#def_key "?"
|
||||||
|
# find_item_backward
|
||||||
|
#
|
||||||
|
#def_key "."
|
||||||
|
# next_found_item
|
||||||
|
#
|
||||||
|
#def_key ","
|
||||||
|
# previous_found_item
|
||||||
|
#
|
||||||
|
#def_key "w"
|
||||||
|
# toggle_find_mode
|
||||||
|
#
|
||||||
|
#def_key "e"
|
||||||
|
# edit_song
|
||||||
|
#
|
||||||
|
#def_key "e"
|
||||||
|
# edit_library_tag
|
||||||
|
#
|
||||||
|
#def_key "e"
|
||||||
|
# edit_library_album
|
||||||
|
#
|
||||||
|
#def_key "e"
|
||||||
|
# edit_directory_name
|
||||||
|
#
|
||||||
|
#def_key "e"
|
||||||
|
# edit_playlist_name
|
||||||
|
#
|
||||||
|
#def_key "e"
|
||||||
|
# edit_lyrics
|
||||||
|
#
|
||||||
|
#def_key "i"
|
||||||
|
# show_song_info
|
||||||
|
#
|
||||||
|
#def_key "I"
|
||||||
|
# show_artist_info
|
||||||
|
#
|
||||||
|
#def_key "g"
|
||||||
|
# jump_to_position_in_song
|
||||||
|
#
|
||||||
|
#def_key "l"
|
||||||
|
# show_lyrics
|
||||||
|
#
|
||||||
|
#def_key "ctrl-v"
|
||||||
|
# select_range
|
||||||
|
#
|
||||||
|
#def_key "v"
|
||||||
|
# reverse_selection
|
||||||
|
#
|
||||||
|
#def_key "V"
|
||||||
|
# remove_selection
|
||||||
|
#
|
||||||
|
#def_key "B"
|
||||||
|
# select_album
|
||||||
|
#
|
||||||
|
#def_key "a"
|
||||||
|
# add_selected_items
|
||||||
|
#
|
||||||
|
#def_key "c"
|
||||||
|
# clear_playlist
|
||||||
|
#
|
||||||
|
#def_key "c"
|
||||||
|
# clear_main_playlist
|
||||||
|
#
|
||||||
|
#def_key "C"
|
||||||
|
# crop_playlist
|
||||||
|
#
|
||||||
|
#def_key "C"
|
||||||
|
# crop_main_playlist
|
||||||
|
#
|
||||||
|
#def_key "m"
|
||||||
|
# move_sort_order_up
|
||||||
|
#
|
||||||
|
#def_key "m"
|
||||||
|
# move_selected_items_up
|
||||||
|
#
|
||||||
|
#def_key "n"
|
||||||
|
# move_sort_order_down
|
||||||
|
#
|
||||||
|
#def_key "n"
|
||||||
|
# move_selected_items_down
|
||||||
|
#
|
||||||
|
#def_key "M"
|
||||||
|
# move_selected_items_to
|
||||||
|
#
|
||||||
|
#def_key "A"
|
||||||
|
# add
|
||||||
|
#
|
||||||
|
#def_key "S"
|
||||||
|
# save_playlist
|
||||||
|
#
|
||||||
|
#def_key "o"
|
||||||
|
# jump_to_playing_song
|
||||||
|
#
|
||||||
|
#def_key "G"
|
||||||
|
# jump_to_browser
|
||||||
|
#
|
||||||
|
#def_key "G"
|
||||||
|
# jump_to_playlist_editor
|
||||||
|
#
|
||||||
|
#def_key "~"
|
||||||
|
# jump_to_media_library
|
||||||
|
#
|
||||||
|
#def_key "E"
|
||||||
|
# jump_to_tag_editor
|
||||||
|
#
|
||||||
|
#def_key "U"
|
||||||
|
# toggle_playing_song_centering
|
||||||
|
#
|
||||||
|
#def_key "P"
|
||||||
|
# toggle_display_mode
|
||||||
|
#
|
||||||
|
#def_key "\\"
|
||||||
|
# toggle_interface
|
||||||
|
#
|
||||||
|
#def_key "!"
|
||||||
|
# toggle_separators_between_albums
|
||||||
|
#
|
||||||
|
#def_key "L"
|
||||||
|
# toggle_lyrics_fetcher
|
||||||
|
#
|
||||||
|
#def_key "F"
|
||||||
|
# fetch_lyrics_in_background
|
||||||
|
#
|
||||||
|
#def_key "alt-l"
|
||||||
|
# toggle_fetching_lyrics_in_background
|
||||||
|
#
|
||||||
|
#def_key "ctrl-l"
|
||||||
|
# toggle_screen_lock
|
||||||
|
#
|
||||||
|
#def_key "`"
|
||||||
|
# toggle_library_tag_type
|
||||||
|
#
|
||||||
|
#def_key "`"
|
||||||
|
# refetch_lyrics
|
||||||
|
#
|
||||||
|
#def_key "`"
|
||||||
|
# add_random_items
|
||||||
|
#
|
||||||
|
#def_key "ctrl-p"
|
||||||
|
# set_selected_items_priority
|
||||||
|
#
|
||||||
|
#def_key "q"
|
||||||
|
# quit
|
||||||
|
#
|
@ -0,0 +1,14 @@
|
|||||||
|
# vim: filetype=muttrc
|
||||||
|
|
||||||
|
set my_email = "admin@reekynet.com"
|
||||||
|
set from = $my_email
|
||||||
|
set sendmail = "/usr/bin/msmtp -a $my_email"
|
||||||
|
set realname = "ReekyNET Admin"
|
||||||
|
set status_format = "-%r-Mutt: $my_email %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---"
|
||||||
|
set mbox_type = Maildir
|
||||||
|
set folder = "~/.mail/$my_email"
|
||||||
|
set mbox = "+INBOX"
|
||||||
|
set record = "+INBOX"
|
||||||
|
set postponed = "+Drafts"
|
||||||
|
set spoolfile = "+INBOX"
|
||||||
|
mailboxes = +INBOX
|
@ -0,0 +1,14 @@
|
|||||||
|
# vim: filetype=muttrc
|
||||||
|
|
||||||
|
set my_email = "marko.korhonen@metropolia.fi"
|
||||||
|
set from = $my_email
|
||||||
|
set sendmail = "/usr/bin/msmtp -a $my_email"
|
||||||
|
set realname = "Marko Korhonen"
|
||||||
|
set status_format = "-%r-Mutt: $my_email %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---"
|
||||||
|
set mbox_type = Maildir
|
||||||
|
set folder = "~/.mail/$my_email"
|
||||||
|
set mbox = "+INBOX"
|
||||||
|
set record = "+INBOX"
|
||||||
|
set postponed = "+Drafts"
|
||||||
|
set spoolfile = "+INBOX"
|
||||||
|
mailboxes = +INBOX
|
@ -0,0 +1,14 @@
|
|||||||
|
# vim: filetype=muttrc
|
||||||
|
|
||||||
|
set my_email = "marko.korhonen@reekynet.com"
|
||||||
|
set from = $my_email
|
||||||
|
set sendmail = "/usr/bin/msmtp -a $my_email"
|
||||||
|
set realname = "Marko Korhonen"
|
||||||
|
set status_format = "-%r-Mutt: $my_email %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---"
|
||||||
|
set mbox_type = Maildir
|
||||||
|
set folder = "~/.mail/$my_email"
|
||||||
|
set mbox = "+INBOX"
|
||||||
|
set record = "+INBOX"
|
||||||
|
set postponed = "+Drafts"
|
||||||
|
set spoolfile = "+INBOX"
|
||||||
|
mailboxes = +INBOX
|
@ -0,0 +1,15 @@
|
|||||||
|
# vim: filetype=muttrc
|
||||||
|
|
||||||
|
# Incoming mail from maildir
|
||||||
|
set my_email = "reekymarko@reekynet.com"
|
||||||
|
set from = $my_email
|
||||||
|
set sendmail = "/usr/bin/msmtp -a $my_email"
|
||||||
|
set realname = "Marko Korhonen"
|
||||||
|
set status_format = "-%r-Mutt: $my_email %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---"
|
||||||
|
set mbox_type = Maildir
|
||||||
|
set folder = ~/.mail/$my_email
|
||||||
|
set mbox = +INBOX
|
||||||
|
set record = +Sent
|
||||||
|
set postponed = +Drafts
|
||||||
|
set spoolfile = +INBOX
|
||||||
|
mailboxes = +INBOX
|
@ -0,0 +1 @@
|
|||||||
|
color normal default default
|
@ -0,0 +1,15 @@
|
|||||||
|
# vim: filetype=muttrc
|
||||||
|
|
||||||
|
set sendmail = "/usr/bin/msmtp"
|
||||||
|
set mbox_type = Maildir
|
||||||
|
set folder = ~/.mail
|
||||||
|
set spoolfile = +Personal/INBOX
|
||||||
|
|
||||||
|
source ~/.config/neomutt/appearance
|
||||||
|
source ~/.config/neomutt/sidebar
|
||||||
|
source ~/.config/neomutt/accounts/reekymarko@reekynet.com
|
||||||
|
|
||||||
|
macro index <f2> '<sync-mailbox><enter-command>source ~/.config/neomutt/accounts/reekymarko@reekynet.com<enter><change-folder>!<enter>'
|
||||||
|
macro index <f3> '<sync-mailbox><enter-command>source ~/.config/neomutt/accounts/marko.korhonen@reekynet.com<enter><change-folder>!<enter>'
|
||||||
|
macro index <f4> '<sync-mailbox><enter-command>source ~/.config/neomutt/accounts/admin@reekynet.com<enter><change-folder>!<enter>'
|
||||||
|
macro index <f5> '<sync-mailbox><enter-command>source ~/.config/neomutt/accounts/marko.korhonen@metropolia.fi<enter><change-folder>!<enter>'
|
@ -0,0 +1,5 @@
|
|||||||
|
# vim: filetype=muttrc
|
||||||
|
|
||||||
|
set sidebar_visible = yes
|
||||||
|
set sidebar_indent_string = ' '
|
||||||
|
sidebar_whitelist '~/.mail/<>/INBOX'
|
@ -0,0 +1,28 @@
|
|||||||
|
[dmenu]
|
||||||
|
fn = -*-SF-Pro-Display-Regular-*-*-*-10-*-*-*-*-*-*-*
|
||||||
|
dmenu_command = /usr/bin/rofi
|
||||||
|
l = 10
|
||||||
|
# # Note that dmenu_command can contain arguments as well like `rofi -width 30`
|
||||||
|
# # Rofi and dmenu are set to case insensitive by default `-i`
|
||||||
|
# l = number of lines to display, defaults to number of total network options
|
||||||
|
# fn = font string
|
||||||
|
# nb = normal background (name, #RGB, or #RRGGBB)
|
||||||
|
# nf = normal foreground
|
||||||
|
# sb = selected background
|
||||||
|
# sf = selected foreground
|
||||||
|
# b = (just set to empty value and menu will appear at the bottom
|
||||||
|
# m = number of monitor to display on
|
||||||
|
# p = Custom Prompt for the networks menu
|
||||||
|
# pinentry = Pinentry command
|
||||||
|
# rofi_highlight = <True or False> # (Default: False) use rofi highlighting instead of '**'
|
||||||
|
|
||||||
|
# # override normal foreground and background colors (dmenu) or use the
|
||||||
|
# # -password option (rofi) to obscure passphrase entry
|
||||||
|
# [dmenu_passphrase]
|
||||||
|
# nf = #222222
|
||||||
|
# nb = #222222
|
||||||
|
# rofi_obscure = True
|
||||||
|
|
||||||
|
[editor]
|
||||||
|
terminal = termite
|
||||||
|
gui_if_available = True
|
@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"python.jediEnabled": false,
|
||||||
|
"python.setLinter": "pylint",
|
||||||
|
"suggest.noselect": false,
|
||||||
|
"suggest.echodocSupport": true,
|
||||||
|
"suggest.maxCompleteItemCount": 20,
|
||||||
|
"coc.preferences.formatOnSaveFiletypes": [
|
||||||
|
"javascript",
|
||||||
|
"typescript",
|
||||||
|
"typescriptreact",
|
||||||
|
"json",
|
||||||
|
"javascriptreact"
|
||||||
|
],
|
||||||
|
"eslint.filetypes": [
|
||||||
|
"javascript",
|
||||||
|
"typescript",
|
||||||
|
"typescriptreact",
|
||||||
|
"javascriptreact"
|
||||||
|
],
|
||||||
|
"eslint.autoFixOnSave": false,
|
||||||
|
"prettier.singleQuote": true,
|
||||||
|
"diagnostic.errorSign": "•",
|
||||||
|
"diagnostic.warningSign": "•",
|
||||||
|
"diagnostic.infoSign": "•",
|
||||||
|
"suggest.snippetIndicator": "~",
|
||||||
|
"languageserver": {
|
||||||
|
"bash": {
|
||||||
|
"command": "bash-language-server",
|
||||||
|
"args": ["start"],
|
||||||
|
"filetypes": ["sh"],
|
||||||
|
"ignoredRootPaths": ["~"]
|
||||||
|
},
|
||||||
|
"xml": {
|
||||||
|
"command": "xml-language-server",
|
||||||
|
"args": ["start"],
|
||||||
|
"filetypes": ["xml"],
|
||||||
|
"ignoredRootPaths": ["~"]
|
||||||
|
},
|
||||||
|
"efm": {
|
||||||
|
"command": "~/.bin/go/bin/efm-langserver",
|
||||||
|
"args": [],
|
||||||
|
"filetypes": ["markdown"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,97 @@
|
|||||||
|
" Auto-install vim-plug
|
||||||
|
if empty(glob('~/.config/nvim/autoload/plug.vim'))
|
||||||
|
silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
|
||||||
|
autocmd VimEnter * PlugInstall
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Set coc extensions
|
||||||
|
let g:coc_global_extensions = [
|
||||||
|
\ 'coc-tsserver',
|
||||||
|
\ 'coc-html',
|
||||||
|
\ 'coc-tsserver',
|
||||||
|
\ 'coc-json',
|
||||||
|
\ 'coc-yaml',
|
||||||
|
\ 'coc-highlight',
|
||||||
|
\ 'coc-vimtex',
|
||||||
|
\ 'coc-prettier',
|
||||||
|
\ 'coc-python',
|
||||||
|
\ 'coc-emmet'
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
call plug#begin()
|
||||||
|
|
||||||
|
" Make editing passwords safer
|
||||||
|
Plug 'https://git.zx2c4.com/password-store', { 'rtp': 'contrib/vim/redact_pass.vim' }
|
||||||
|
|
||||||
|
" Pandoc live preview
|
||||||
|
Plug 'ReekyMarko/pandoc-preview.vim'
|
||||||
|
|
||||||
|
" Spelling
|
||||||
|
Plug 'vim-scripts/Vimchant'
|
||||||
|
|
||||||
|
" Pandoc plugin
|
||||||
|
Plug 'vim-pandoc/vim-pandoc'
|
||||||
|
|
||||||
|
" Fuzzy finder
|
||||||
|
Plug 'junegunn/fzf'
|
||||||
|
Plug 'junegunn/fzf.vim'
|
||||||
|
|
||||||
|
" This is so I can use vim as a diff pager
|
||||||
|
Plug 'powerman/vim-plugin-AnsiEsc'
|
||||||
|
|
||||||
|
" Airline statusline
|
||||||
|
Plug 'vim-airline/vim-airline'
|
||||||
|
|
||||||
|
" Syntax plugins
|
||||||
|
Plug 'stephpy/vim-yaml'
|
||||||
|
Plug 'vim-pandoc/vim-pandoc-syntax'
|
||||||
|
Plug 'leafgarland/typescript-vim'
|
||||||
|
Plug 'ianks/vim-tsx'
|
||||||
|
Plug 'kevinoid/vim-jsonc'
|
||||||
|
Plug 'MaxMEllon/vim-jsx-pretty'
|
||||||
|
Plug 'zplugin/zplugin-vim-syntax'
|
||||||
|
Plug 'aouelete/sway-vim-syntax'
|
||||||
|
|
||||||
|
" Read editorconfig settings
|
||||||
|
Plug 'editorconfig/editorconfig-vim'
|
||||||
|
|
||||||
|
" Make directory if it doesn't exist
|
||||||
|
Plug 'pbrisbin/vim-mkdir'
|
||||||
|
|
||||||
|
" Tree explorer
|
||||||
|
Plug 'scrooloose/nerdtree'
|
||||||
|
|
||||||
|
" Moar snippets
|
||||||
|
Plug 'honza/vim-snippets'
|
||||||
|
|
||||||
|
" Filetype icons
|
||||||
|
Plug 'ryanoasis/vim-devicons'
|
||||||
|
|
||||||
|
" A personal wiki for vim
|
||||||
|
Plug 'vimwiki/vimwiki'
|
||||||
|
|
||||||
|
" Surround stuff with brackets and quotes
|
||||||
|
Plug 'tpope/vim-surround'
|
||||||
|
|
||||||
|
" Do stuff as sudo
|
||||||
|
Plug 'lambdalisue/suda.vim'
|
||||||
|
|
||||||
|
" Conguer of Completion
|
||||||
|
Plug 'neoclide/coc.nvim', {'do': './install.sh nightly'}
|
||||||
|
|
||||||
|
" Git wrapper
|
||||||
|
Plug 'tpope/vim-fugitive'
|
||||||
|
|
||||||
|
" Git diff in gutter
|
||||||
|
Plug 'airblade/vim-gitgutter'
|
||||||
|
|
||||||
|
" Gpg support
|
||||||
|
Plug 'jamessan/vim-gnupg'
|
||||||
|
|
||||||
|
" Colorscheme
|
||||||
|
Plug 'morhetz/gruvbox'
|
||||||
|
|
||||||
|
" Latex plugin
|
||||||
|
Plug 'lervag/vimtex'
|
||||||
|
|
||||||
|
call plug#end()
|
@ -0,0 +1,44 @@
|
|||||||
|
" Set colorscheme
|
||||||
|
colorscheme gruvbox
|
||||||
|
|
||||||
|
" Enable italics
|
||||||
|
let g:gruvbox_italic = 1
|
||||||
|
|
||||||
|
" Disable mode indicator because airline shows it
|
||||||
|
set noshowmode
|
||||||
|
|
||||||
|
" True color support
|
||||||
|
set termguicolors
|
||||||
|
|
||||||
|
" Airline
|
||||||
|
set laststatus=2
|
||||||
|
set encoding=utf-8
|
||||||
|
let g:airline#extensions#tabline#enabled = 1
|
||||||
|
let g:airline_powerline_fonts = 1
|
||||||
|
let g:airline_section_warning = ''
|
||||||
|
let g:airline_section_error = ''
|
||||||
|
let g:airline_theme='gruvbox'
|
||||||
|
|
||||||
|
" Line numbering
|
||||||
|
set number
|
||||||
|
set relativenumber
|
||||||
|
|
||||||
|
" Always show signcolumn
|
||||||
|
set signcolumn=yes
|
||||||
|
|
||||||
|
" Autoindent and syntax highlight
|
||||||
|
set autoindent
|
||||||
|
set smartindent
|
||||||
|
syntax on
|
||||||
|
filetype on
|
||||||
|
filetype plugin indent on
|
||||||
|
set tabstop=4
|
||||||
|
set shiftwidth=4
|
||||||
|
|
||||||
|
" Make gutter and cursorline bg transparent
|
||||||
|
highlight CursorLineNr guibg=transparent
|
||||||
|
highlight SignColumn guibg=transparent
|
||||||
|
highlight GitGutterAdd guibg=transparent guifg=#b8bb26
|
||||||
|
highlight GitGutterChange guibg=transparent guifg=#8ec07c
|
||||||
|
highlight GitGutterDelete guibg=transparent guifg=#fb4934
|
||||||
|
highlight GitGutterChangeDelete guibg=transparent guifg=#8ec07c
|
@ -0,0 +1,37 @@
|
|||||||
|
" Toggle nerdtree
|
||||||
|
map <silent> <C-t> :NERDTreeToggle<CR>
|
||||||
|
|
||||||
|
" Markdown preview
|
||||||
|
nmap <C-s> <Plug>MarkdownPreview
|
||||||
|
nmap <M-s> <Plug>MarkdownPreviewStop
|
||||||
|
nmap <C-p> <Plug>MarkdownPreviewToggle
|
||||||
|
|
||||||
|
" FZF
|
||||||
|
nmap <C-f> :Files<CR>
|
||||||
|
nmap <C-g> :Rg<CR>
|
||||||
|
" Ripgrep command customization
|
||||||
|
command! -bang -nargs=* Rg
|
||||||
|
\ call fzf#vim#grep(
|
||||||
|
\ 'rg --column --hidden --line-number --no-heading --color=always --smart-case '.shellescape(<q-args>), 1,
|
||||||
|
\ <bang>0 ? fzf#vim#with_preview('up:60%')
|
||||||
|
\ : fzf#vim#with_preview('right:50%:hidden', '?'),
|
||||||
|
\ <bang>0)
|
||||||
|
|
||||||
|
set splitbelow
|
||||||
|
set splitright
|
||||||
|
|
||||||
|
" Move between buffers
|
||||||
|
nnoremap <C-N> :bn<CR>
|
||||||
|
nnoremap <C-B> :bp<CR>
|
||||||
|
|
||||||
|
" Move between splits
|
||||||
|
nnoremap <C-J> <C-W><C-J>
|
||||||
|
nnoremap <C-K> <C-W><C-K>
|
||||||
|
nnoremap <C-L> <C-W><C-L>
|
||||||
|
nnoremap <C-H> <C-W><C-H>
|
||||||
|
|
||||||
|
" Enable mouse
|
||||||
|
set mouse=a
|
||||||
|
|
||||||
|
" Preview with pandoc
|
||||||
|
nnoremap <leader>v :PandocPreview<cr>
|
@ -0,0 +1,129 @@
|
|||||||
|
" Enable symbol highlight
|
||||||
|
autocmd CursorHold * silent call CocActionAsync('highlight')
|
||||||
|
|
||||||
|
" If hidden is not set, TextEdit might fail.
|
||||||
|
set hidden
|
||||||
|
|
||||||
|
" Some servers have issues with backup files, see #649
|
||||||
|
set nobackup
|
||||||
|
set nowritebackup
|
||||||
|
|
||||||
|
" Better display for messages
|
||||||
|
set cmdheight=2
|
||||||
|
|
||||||
|
" Smaller updatetime for CursorHold & CursorHoldI
|
||||||
|
set updatetime=300
|
||||||
|
|
||||||
|
" Don't give |ins-completion-menu| messages.
|
||||||
|
set shortmess+=c
|
||||||
|
|
||||||
|
" Use tab for trigger completion with characters ahead and navigate.
|
||||||
|
" Use command ':verbose imap <tab>' to make sure tab is not mapped by other plugin.
|
||||||
|
inoremap <silent><expr> <TAB>
|
||||||
|
\ pumvisible() ? "\<C-n>" :
|
||||||
|
\ <SID>check_back_space() ? "\<TAB>" :
|
||||||
|
\ coc#refresh()
|
||||||
|
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
|
||||||
|
|
||||||
|
function! s:check_back_space() abort
|
||||||
|
let col = col('.') - 1
|
||||||
|
return !col || getline('.')[col - 1] =~# '\s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Use <cr> to confirm snippet
|
||||||
|
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm() :
|
||||||
|
\"\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
|
||||||
|
|
||||||
|
" Use <c-space> to trigger completion.
|
||||||
|
inoremap <silent><expr> <c-space> coc#refresh()
|
||||||
|
|
||||||
|
" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current position.
|
||||||
|
" Coc only does snippet and additional edit on confirm.
|
||||||
|
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
|
||||||
|
|
||||||
|
" Use `[c` and `]c` to navigate diagnostics
|
||||||
|
nmap <silent> [c <Plug>(coc-diagnostic-prev)
|
||||||
|
nmap <silent> ]c <Plug>(coc-diagnostic-next)
|
||||||
|
|
||||||
|
" Remap keys for gotos
|
||||||
|
nmap <silent> gd <Plug>(coc-definition)
|
||||||
|
nmap <silent> gy <Plug>(coc-type-definition)
|
||||||
|
nmap <silent> gi <Plug>(coc-implementation)
|
||||||
|
nmap <silent> gr <Plug>(coc-references)
|
||||||
|
|
||||||
|
" Use K to show documentation in preview window
|
||||||
|
nnoremap <silent> K :call <SID>show_documentation()<CR>
|
||||||
|
|
||||||
|
function! s:show_documentation()
|
||||||
|
if (index(['vim','help'], &filetype) >= 0)
|
||||||
|
execute 'h '.expand('<cword>')
|
||||||
|
else
|
||||||
|
call CocAction('doHover')
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Highlight symbol under cursor on CursorHold
|
||||||
|
autocmd CursorHold * silent call CocActionAsync('highlight')
|
||||||
|
|
||||||
|
" Remap for rename current word
|
||||||
|
nmap <leader>rn <Plug>(coc-rename)
|
||||||
|
|
||||||
|
" Remap for format selected region
|
||||||
|
xmap <leader>f <Plug>(coc-format-selected)
|
||||||
|
nmap <leader>f <Plug>(coc-format-selected)
|
||||||
|
|
||||||
|
augroup mygroup
|
||||||
|
autocmd!
|
||||||
|
" Setup formatexpr specified filetype(s).
|
||||||
|
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
|
||||||
|
" Update signature help on jump placeholder
|
||||||
|
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
|
||||||
|
augroup end
|
||||||
|
|
||||||
|
" Remap for do codeAction of selected region, ex: `<leader>aap` for current paragraph
|
||||||
|
xmap <leader>a <Plug>(coc-codeaction-selected)
|
||||||
|
nmap <leader>a <Plug>(coc-codeaction-selected)
|
||||||
|
|
||||||
|
" Remap for do codeAction of current line
|
||||||
|
nmap <leader>ac <Plug>(coc-codeaction)
|
||||||
|
" Fix autofix problem of current line
|
||||||
|
nmap <leader>qf <Plug>(coc-fix-current)
|
||||||
|
|
||||||
|
" Use `:Format` to format current buffer
|
||||||
|
command! -nargs=0 Format :call CocAction('format')
|
||||||
|
|
||||||
|
" Use `:Fold` to fold current buffer
|
||||||
|
command! -nargs=? Fold :call CocAction('fold', <f-args>)
|
||||||
|
|
||||||
|
|
||||||
|
" Add diagnostic info for https://github.com/itchyny/lightline.vim
|
||||||
|
let g:lightline = {
|
||||||
|
\ 'colorscheme': 'wombat',
|
||||||
|
\ 'active': {
|
||||||
|
\ 'left': [ [ 'mode', 'paste' ],
|
||||||
|
\ [ 'cocstatus', 'readonly', 'filename', 'modified' ] ]
|
||||||
|
\ },
|
||||||
|
\ 'component_function': {
|
||||||
|
\ 'cocstatus': 'coc#status'
|
||||||
|
\ },
|
||||||
|
\ }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
" Using CocList
|
||||||
|
" Show all diagnostics
|
||||||
|
nnoremap <silent> <space>a :<C-u>CocList diagnostics<cr>
|
||||||
|
" Manage extensions
|
||||||
|
nnoremap <silent> <space>e :<C-u>CocList extensions<cr>
|
||||||
|
" Show commands
|
||||||
|
nnoremap <silent> <space>c :<C-u>CocList commands<cr>
|
||||||
|
" Find symbol of current document
|
||||||
|
nnoremap <silent> <space>o :<C-u>CocList outline<cr>
|
||||||
|
" Search workspace symbols
|
||||||
|
nnoremap <silent> <space>s :<C-u>CocList -I symbols<cr>
|
||||||
|
" Do default action for next item.
|
||||||
|
nnoremap <silent> <space>j :<C-u>CocNext<CR>
|
||||||
|
" Do default action for previous item.
|
||||||
|
nnoremap <silent> <space>k :<C-u>CocPrev<CR>
|
||||||
|
" Resume latest coc list
|
||||||
|
nnoremap <silent> <space>p :<C-u>CocListResume<CR>
|
@ -0,0 +1,9 @@
|
|||||||
|
" LaTex settings
|
||||||
|
let g:vimtex_view_method='zathura'
|
||||||
|
let g:Tex_DefaultTargetFormat='pdf'
|
||||||
|
let g:Tex_MultipleCompileFormats='pdf, aux'
|
||||||
|
let g:vimtex_compiler_progname='nvr'
|
||||||
|
|
||||||
|
" YAML settings
|
||||||
|
au! BufNewFile,BufReadPost *.{yaml,yml} set filetype=yaml foldmethod=indent
|
||||||
|
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
|
@ -0,0 +1,34 @@
|
|||||||
|
" Enable python support
|
||||||
|
let g:python3_host_prog='/usr/bin/python3'
|
||||||
|
let pyxversion=3
|
||||||
|
|
||||||
|
" Use suda by default
|
||||||
|
let g:suda_smart_edit = 1
|
||||||
|
|
||||||
|
" Remap exit terminal mode to esc
|
||||||
|
tnoremap <Esc> <C-\><C-n>
|
||||||
|
|
||||||
|
" Use system clipboard
|
||||||
|
set clipboard=unnamedplus
|
||||||
|
|
||||||
|
" Remove extra line
|
||||||
|
set cmdheight=1
|
||||||
|
|
||||||
|
" Set pandoc preview program
|
||||||
|
let g:pandoc_preview_pdf_cmd = "zathura"
|
||||||
|
|
||||||
|
" Case insensitive seatch
|
||||||
|
set ignorecase
|
||||||
|
set smartcase
|
||||||
|
|
||||||
|
" Format on paste
|
||||||
|
set paste
|
||||||
|
|
||||||
|
" Automatically change working directory
|
||||||
|
set autochdir
|
||||||
|
|
||||||
|
" Nerdtree settings
|
||||||
|
let NERDTreeMinimalUI = 1 "remove press ? for help"
|
||||||
|
let NERDTreeAutoDeleteBuffer = 1 " delete buffer when file is deleted
|
||||||
|
let NERDTreeQuitOnOpen = 1 " close nerdtree when opening file
|
||||||
|
let NERDTreeDirArrows = 1
|
@ -0,0 +1,5 @@
|
|||||||
|
" Run multiple wikis "
|
||||||
|
let g:vimwiki_list = [
|
||||||
|
\{'path': '~/Documents/VimWiki/personal.wiki'},
|
||||||
|
\{'path': '~/Documents/VimWiki/tech.wiki'}
|
||||||
|
\]
|
@ -0,0 +1,18 @@
|
|||||||
|
{%@@ if profile == "Mirkwood" @@%}
|
||||||
|
" Wayland clipboard provider that strips carriage returns (GTK3 issue).
|
||||||
|
" This is needed because currently there's an issue where GTK3 applications on
|
||||||
|
" Wayland contain carriage returns at the end of the lines (this is a root
|
||||||
|
" issue that needs to be fixed).
|
||||||
|
let g:clipboard = {
|
||||||
|
\ 'name': 'wayland-strip-carriage',
|
||||||
|
\ 'copy': {
|
||||||
|
\ '+': 'wl-copy --foreground --type text/plain',
|
||||||
|
\ '*': 'wl-copy --foreground --type text/plain --primary',
|
||||||
|
\ },
|
||||||
|
\ 'paste': {
|
||||||
|
\ '+': {-> systemlist('wl-paste --no-newline | tr -d "\r"')},
|
||||||
|
\ '*': {-> systemlist('wl-paste --no-newline --primary | tr -d "\r"')},
|
||||||
|
\ },
|
||||||
|
\ 'cache_enabled': 1,
|
||||||
|
\ }
|
||||||
|
{%@@ endif @@%}
|
@ -0,0 +1,3 @@
|
|||||||
|
for f in split(glob('~/.config/nvim/conf.d/*.vim'), '\n')
|
||||||
|
exe 'source' f
|
||||||
|
endfor
|
@ -0,0 +1,19 @@
|
|||||||
|
" Source UI plugins
|
||||||
|
set runtimepath+=~/.config/nvim/plugged/vim-airline
|
||||||
|
set runtimepath+=~/.config/nvim/plugged/gruvbox
|
||||||
|
|
||||||
|
" Source syntax plugins
|
||||||
|
set runtimepath+=~/.config/nvim/plugged/vim-yaml
|
||||||
|
set runtimepath+=~/.config/nvim/plugged/vim-pandoc-syntax
|
||||||
|
set runtimepath+=~/.config/nvim/plugged/typescript-vim
|
||||||
|
set runtimepath+=~/.config/nvim/plugged/vim-tsx
|
||||||
|
set runtimepath+=~/.config/nvim/plugged/vim-jsonc
|
||||||
|
set runtimepath+=~/.config/nvim/plugged/vim-jsx-pretty
|
||||||
|
set runtimepath+=~/.config/nvim/plugged/zplugin-vim-syntax
|
||||||
|
set runtimepath+=~/.config/nvim/plugged/sway-vim-syntax
|
||||||
|
|
||||||
|
set runtimepath+=~/.config/nvim/plugged/vim-pandoc-syntax
|
||||||
|
source ~/.config/nvim/conf.d/02-appearance.vim
|
||||||
|
source ~/.config/nvim/conf.d/03-keybinds.vim
|
||||||
|
source ~/.config/nvim/conf.d/06-misc.vim
|
||||||
|
source ~/.config/nvim/conf.d/08-clipboardfix.vim
|
@ -0,0 +1,48 @@
|
|||||||
|
DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
|
||||||
|
'ftp::/usr/bin/curl -gqfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
|
||||||
|
'http::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
|
||||||
|
'https::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
|
||||||
|
'rsync::/usr/bin/rsync --no-motd -z %u %o'
|
||||||
|
'scp::/usr/bin/scp -C %u %o')
|
||||||
|
|
||||||
|
|
||||||
|
VCSCLIENTS=('bzr::bzr'
|
||||||
|
'git::git'
|
||||||
|
'hg::mercurial'
|
||||||
|
'svn::subversion')
|
||||||
|
|
||||||
|
CARCH="x86_64"
|
||||||
|
CHOST="x86_64-pc-linux-gnu"
|
||||||
|
|
||||||
|
CPPFLAGS="-D_FORTIFY_SOURCE=2"
|
||||||
|
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt"
|
||||||
|
CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt"
|
||||||
|
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"
|
||||||
|
MAKEFLAGS="-j$(nproc)"
|
||||||
|
DEBUG_CFLAGS="-g -fvar-tracking-assignments"
|
||||||
|
DEBUG_CXXFLAGS="-g -fvar-tracking-assignments"
|
||||||
|
|
||||||
|
BUILDENV=(!distcc color !ccache check !sign)
|
||||||
|
|
||||||
|
OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug)
|
||||||
|
|
||||||
|
INTEGRITY_CHECK=(md5)
|
||||||
|
STRIP_BINARIES="--strip-all"
|
||||||
|
STRIP_SHARED="--strip-unneeded"
|
||||||
|
STRIP_STATIC="--strip-debug"
|
||||||
|
MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
|
||||||
|
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
|
||||||
|
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
|
||||||
|
DBGSRCDIR="/usr/src/debug"
|
||||||
|
|
||||||
|
|
||||||
|
COMPRESSGZ=(pigz -c -f -n)
|
||||||
|
COMPRESSBZ2=(bzip2 -c -f)
|
||||||
|
COMPRESSXZ=(xz -c -z - --threads=0)
|
||||||
|
COMPRESSZST=(zstd -c -z -q -)
|
||||||
|
COMPRESSLRZ=(lrzip -q)
|
||||||
|
COMPRESSLZO=(lzop -q)
|
||||||
|
COMPRESSZ=(compress -c -f)
|
||||||
|
|
||||||
|
PKGEXT='.pkg.tar.zst'
|
||||||
|
SRCEXT='.src.tar.gz'
|
@ -0,0 +1,263 @@
|
|||||||
|
[colors]
|
||||||
|
background = ${xrdb:color0:#222}
|
||||||
|
foreground = ${xrdb:color7:#222}
|
||||||
|
foreground-alt = ${xrdb:color7:#222}
|
||||||
|
primary = ${xrdb:color1:#222}
|
||||||
|
secondary = ${xrdb:color2:#222}
|
||||||
|
alert = ${xrdb:color3:#222}
|
||||||
|
|
||||||
|
[bar/top]
|
||||||
|
monitor= eDP
|
||||||
|
width = 100%
|
||||||
|
height = 35
|
||||||
|
offset-x = 0
|
||||||
|
offset-y = -1
|
||||||
|
;bottom = true
|
||||||
|
|
||||||
|
background = ${colors.background}
|
||||||
|
foreground = ${colors.foreground}
|
||||||
|
|
||||||
|
underline-size = 2
|
||||||
|
underline-color = #eee
|
||||||
|
|
||||||
|
spacing = 1
|
||||||
|
module-margin-left = 0
|
||||||
|
module-margin-right = 0
|
||||||
|
|
||||||
|
font-0 = "SF Pro Display:style=regular:pixelsize=13;0"
|
||||||
|
font-1 = "Material Design Icons:style=Regular:pixelsize=13;1"
|
||||||
|
|
||||||
|
modules-left = bspwm
|
||||||
|
modules-center = player-mpris-tail
|
||||||
|
modules-right = battery pulseaudio date
|
||||||
|
|
||||||
|
tray-position = right
|
||||||
|
tray-padding = 2
|
||||||
|
tray-background = ${xrdb:color0:#222}
|
||||||
|
|
||||||
|
wm-restack = bspwm
|
||||||
|
|
||||||
|
scroll-up = bspwm-desknext
|
||||||
|
scroll-down = bspwm-deskprev
|
||||||
|
|
||||||
|
; MODULES
|
||||||
|
|
||||||
|
[module/network]
|
||||||
|
type = internal/network
|
||||||
|
interface = wlp1s0
|
||||||
|
format-connected = <ramp-signal>
|
||||||
|
ramp-signal-0 = 浪
|
||||||
|
ramp-signal-1 = 冷
|
||||||
|
ramp-signal-2 = 爛
|
||||||
|
ramp-signal-3 = 嵐
|
||||||
|
ramp-signal-4 = 襤
|
||||||
|
ramp-signal-5 = 蠟
|
||||||
|
|
||||||
|
[module/bspwm]
|
||||||
|
type = internal/bspwm
|
||||||
|
|
||||||
|
ws-icon-0 = web;
|
||||||
|
ws-icon-1 = term;
|
||||||
|
ws-icon-2 = chat;ﭕ
|
||||||
|
ws-icon-3 = mail;
|
||||||
|
ws-icon-4 = music;
|
||||||
|
ws-icon-default =
|
||||||
|
|
||||||
|
format = <label-state> <label-mode>
|
||||||
|
|
||||||
|
label-focused = %icon%
|
||||||
|
label-focused-background = #88000000
|
||||||
|
label-focused-underline= #ddd
|
||||||
|
label-focused-padding = 4
|
||||||
|
|
||||||
|
label-occupied = %icon%
|
||||||
|
label-occupied-padding = 4
|
||||||
|
|
||||||
|
label-urgent = %icon%
|
||||||
|
label-urgent-padding = 4
|
||||||
|
|
||||||
|
label-empty = %icon%
|
||||||
|
label-empty-foreground = #44ffffff
|
||||||
|
label-empty-padding = 4
|
||||||
|
|
||||||
|
[module/xwindow]
|
||||||
|
type = internal/xwindow
|
||||||
|
label = %title:0:120:...%
|
||||||
|
label-padding = 4
|
||||||
|
|
||||||
|
[module/weather]
|
||||||
|
type = custom/script
|
||||||
|
exec = weather-bar
|
||||||
|
tail = true
|
||||||
|
|
||||||
|
[module/date]
|
||||||
|
type = internal/date
|
||||||
|
|
||||||
|
; Seconds to sleep between updates
|
||||||
|
interval = 1.0
|
||||||
|
|
||||||
|
; See "man date" for details on how to format the date string
|
||||||
|
; NOTE: if you want to use syntax tags here you need to use %%{...}
|
||||||
|
date = " %a %Y-%m-%d"
|
||||||
|
|
||||||
|
; Optional time format
|
||||||
|
time = %H:%M
|
||||||
|
|
||||||
|
; if `date-alt` or `time-alt` is defined, clicking
|
||||||
|
; the module will toggle between formats
|
||||||
|
date-alt = %A, %d %B %Y
|
||||||
|
time-alt = %H:%M:%S
|
||||||
|
|
||||||
|
label = %date% %time%
|
||||||
|
format = <label>
|
||||||
|
;format-background = #5a000000
|
||||||
|
format-padding = 3
|
||||||
|
|
||||||
|
[module/padding]
|
||||||
|
type = custom/text
|
||||||
|
content =
|
||||||
|
content-foreground = #00000000
|
||||||
|
content-background = #55000000
|
||||||
|
|
||||||
|
[module/battery]
|
||||||
|
type = internal/battery
|
||||||
|
|
||||||
|
full-at = 99
|
||||||
|
|
||||||
|
battery = BAT0
|
||||||
|
adapter = AC0
|
||||||
|
|
||||||
|
poll-interval = 5
|
||||||
|
|
||||||
|
format-charging = <animation-charging> <label-charging>
|
||||||
|
format-discharging = <ramp-capacity> <label-discharging>
|
||||||
|
format-full = <ramp-capacity> <label-full>
|
||||||
|
label-charging = %percentage%
|
||||||
|
label-discharging = %percentage%
|
||||||
|
label-full = %percentage%
|
||||||
|
format-charging-padding = 3
|
||||||
|
format-discharging-padding = 3
|
||||||
|
format-full-padding = 3
|
||||||
|
|
||||||
|
ramp-capacity-0 =
|
||||||
|
ramp-capacity-1 =
|
||||||
|
ramp-capacity-2 =
|
||||||
|
ramp-capacity-3 =
|
||||||
|
ramp-capacity-4 =
|
||||||
|
ramp-capacity-5 =
|
||||||
|
ramp-capacity-6 =
|
||||||
|
ramp-capacity-7 =
|
||||||
|
ramp-capacity-8 =
|
||||||
|
ramp-capacity-9 =
|
||||||
|
ramp-capacity-10 =
|
||||||
|
|
||||||
|
animation-charging-0 =
|
||||||
|
animation-charging-1 =
|
||||||
|
animation-charging-2 =
|
||||||
|
animation-charging-3 =
|
||||||
|
animation-charging-4 =
|
||||||
|
animation-charging-5 =
|
||||||
|
animation-charging-6 =
|
||||||
|
animation-charging-7 =
|
||||||
|
animation-charging-8 =
|
||||||
|
animation-charging-9 =
|
||||||
|
animation-charging-10 =
|
||||||
|
animation-charging-framerate = 750
|
||||||
|
|
||||||
|
[module/xbacklight]
|
||||||
|
type = internal/backlight
|
||||||
|
|
||||||
|
card = amdgpu_bl0
|
||||||
|
enable-scroll = true
|
||||||
|
|
||||||
|
format = <ramp> <label>
|
||||||
|
label = %percentage%
|
||||||
|
|
||||||
|
ramp-0 = 🌕
|
||||||
|
ramp-1 = 🌔
|
||||||
|
ramp-2 = 🌓
|
||||||
|
ramp-3 = 🌒
|
||||||
|
ramp-4 = 🌑
|
||||||
|
|
||||||
|
[module/pulseaudio]
|
||||||
|
type = internal/pulseaudio
|
||||||
|
|
||||||
|
format-volume = <ramp-volume> <label-volume>
|
||||||
|
format-muted = <label-muted>
|
||||||
|
label-volume = %percentage%
|
||||||
|
label-muted = muted
|
||||||
|
label-muted-foreground = #aaa
|
||||||
|
format-volume-padding = 3
|
||||||
|
format-muted-padding = 3
|
||||||
|
|
||||||
|
ramp-volume-0 =
|
||||||
|
ramp-volume-1 =
|
||||||
|
ramp-volume-2 =
|
||||||
|
ramp-headphones-0 =
|
||||||
|
|
||||||
|
[module/powermenu]
|
||||||
|
type = custom/menu
|
||||||
|
|
||||||
|
label-open =
|
||||||
|
;label-open-background = #dd0000
|
||||||
|
;label-open-foreground = #fff
|
||||||
|
label-close = cancel
|
||||||
|
;label-close-background = #dd0000
|
||||||
|
;label-close-foreground = #fff
|
||||||
|
label-open-padding = 4
|
||||||
|
label-close-padding = 3
|
||||||
|
|
||||||
|
menu-0-0 = reboot
|
||||||
|
menu-0-0-exec = menu-open-1
|
||||||
|
menu-0-1 = power off
|
||||||
|
menu-0-1-exec = menu-open-2
|
||||||
|
menu-0-0-padding = 3
|
||||||
|
menu-0-1-padding = 3
|
||||||
|
|
||||||
|
menu-1-0 = reboot?
|
||||||
|
menu-1-0-exec = sudo reboot
|
||||||
|
menu-1-0-padding = 3
|
||||||
|
|
||||||
|
menu-2-0 = power off?
|
||||||
|
menu-2-0-exec = sudo poweroff
|
||||||
|
menu-2-0-padding = 3
|
||||||
|
|
||||||
|
[module/player-mpris-tail]
|
||||||
|
type = custom/script
|
||||||
|
exec = ~/Scripts/player-mpris-tail.py -f '{icon} {artist} - {title}'
|
||||||
|
tail = true
|
||||||
|
label = %output%
|
||||||
|
click-left = ~/Scripts/player-mpris-tail.py play-pause
|
||||||
|
click-right = ~/Scripts/player-mpris-tail.py next
|
||||||
|
click-middle = ~/Scripts/player-mpris-tail.py stop
|
||||||
|
|
||||||
|
; Seconds to sleep between progressbar/song timer sync
|
||||||
|
; Default: 1
|
||||||
|
interval = 2
|
||||||
|
|
||||||
|
; Available tags:
|
||||||
|
; <label-song> (default)
|
||||||
|
; <label-time>
|
||||||
|
; <bar-progress>
|
||||||
|
; <toggle> - gets replaced with <icon-(pause|play)>
|
||||||
|
; <toggle-stop> - gets replaced with <icon-(stop|play)>
|
||||||
|
; <icon-random>
|
||||||
|
; <icon-repeat>
|
||||||
|
; <icon-repeatone>
|
||||||
|
; <icon-prev>
|
||||||
|
; <icon-stop>
|
||||||
|
; <icon-play>
|
||||||
|
; <icon-pause>
|
||||||
|
; <icon-next>
|
||||||
|
; <icon-seekb>
|
||||||
|
; <icon-seekf>
|
||||||
|
format-online = <label-song>
|
||||||
|
|
||||||
|
; Available tokens:
|
||||||
|
; %artist%
|
||||||
|
; %album%
|
||||||
|
; %date%
|
||||||
|
; %title%
|
||||||
|
; Default: %artist% - %title%
|
||||||
|
label-song = %title%
|
||||||
|
format-online-padding = 3
|
@ -0,0 +1,213 @@
|
|||||||
|
# This is a sample commands.py. You can add your own commands here.
|
||||||
|
#
|
||||||
|
# Please refer to commands_full.py for all the default commands and a complete
|
||||||
|
# documentation. Do NOT add them all here, or you may end up with defunct
|
||||||
|
# commands when upgrading ranger.
|
||||||
|
|
||||||
|
# You always need to import ranger.api.commands here to get the Command class:
|
||||||
|
from ranger.api.commands import *
|
||||||
|
|
||||||
|
# A simple command for demonstration purposes follows.
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# You can import any python module as needed.
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Any class that is a subclass of "Command" will be integrated into ranger as a
|
||||||
|
# command. Try typing ":my_edit<ENTER>" in ranger!
|
||||||
|
class my_edit(Command):
|
||||||
|
# The so-called doc-string of the class will be visible in the built-in
|
||||||
|
# help that is accessible by typing "?c" inside ranger.
|
||||||
|
""":my_edit <filename>
|
||||||
|
|
||||||
|
A sample command for demonstration purposes that opens a file in an editor.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# The execute method is called when you run this command in ranger.
|
||||||
|
def execute(self):
|
||||||
|
# self.arg(1) is the first (space-separated) argument to the function.
|
||||||
|
# This way you can write ":my_edit somefilename<ENTER>".
|
||||||
|
if self.arg(1):
|
||||||
|
# self.rest(1) contains self.arg(1) and everything that follows
|
||||||
|
target_filename = self.rest(1)
|
||||||
|
else:
|
||||||
|
# self.fm is a ranger.core.filemanager.FileManager object and gives
|
||||||
|
# you access to internals of ranger.
|
||||||
|
# self.fm.thisfile is a ranger.container.file.File object and is a
|
||||||
|
# reference to the currently selected file.
|
||||||
|
target_filename = self.fm.thisfile.path
|
||||||
|
|
||||||
|
# This is a generic function to print text in ranger.
|
||||||
|
self.fm.notify("Let's edit the file " + target_filename + "!")
|
||||||
|
|
||||||
|
# Using bad=True in fm.notify allows you to print error messages:
|
||||||
|
if not os.path.exists(target_filename):
|
||||||
|
self.fm.notify("The given file does not exist!", bad=True)
|
||||||
|
return
|
||||||
|
|
||||||
|
# This executes a function from ranger.core.acitons, a module with a
|
||||||
|
# variety of subroutines that can help you construct commands.
|
||||||
|
# Check out the source, or run "pydoc ranger.core.actions" for a list.
|
||||||
|
self.fm.edit_file(target_filename)
|
||||||
|
|
||||||
|
# The tab method is called when you press tab, and should return a list of
|
||||||
|
# suggestions that the user will tab through.
|
||||||
|
def tab(self):
|
||||||
|
# This is a generic tab-completion function that iterates through the
|
||||||
|
# content of the current directory.
|
||||||
|
return self._tab_directory_content()
|
||||||
|
|
||||||
|
|
||||||
|
# https://github.com/ranger/ranger/wiki/Integrating-File-Search-with-fzf
|
||||||
|
# Now, simply bind this function to a key, by adding this to your ~/.config/ranger/rc.conf: map <C-f> fzf_select
|
||||||
|
class fzf_select(Command):
|
||||||
|
"""
|
||||||
|
:fzf_select
|
||||||
|
|
||||||
|
Find a file using fzf.
|
||||||
|
|
||||||
|
With a prefix argument select only directories.
|
||||||
|
|
||||||
|
See: https://github.com/junegunn/fzf
|
||||||
|
"""
|
||||||
|
def execute(self):
|
||||||
|
import subprocess
|
||||||
|
if self.quantifier:
|
||||||
|
# match only directories
|
||||||
|
command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \
|
||||||
|
-o -type d -print 2> /dev/null | sed 1d | cut -b3- | fzf +m"
|
||||||
|
else:
|
||||||
|
# match files and directories
|
||||||
|
command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \
|
||||||
|
-o -print 2> /dev/null | sed 1d | cut -b3- | fzf +m"
|
||||||
|
fzf = self.fm.execute_command(command, stdout=subprocess.PIPE)
|
||||||
|
stdout, stderr = fzf.communicate()
|
||||||
|
if fzf.returncode == 0:
|
||||||
|
fzf_file = os.path.abspath(stdout.decode('utf-8').rstrip('\n'))
|
||||||
|
if os.path.isdir(fzf_file):
|
||||||
|
self.fm.cd(fzf_file)
|
||||||
|
else:
|
||||||
|
self.fm.select_file(fzf_file)
|
||||||
|
# fzf_locate
|
||||||
|
class fzf_locate(Command):
|
||||||
|
"""
|
||||||
|
:fzf_locate
|
||||||
|
|
||||||
|
Find a file using fzf.
|
||||||
|
|
||||||
|
With a prefix argument select only directories.
|
||||||
|
|
||||||
|
See: https://github.com/junegunn/fzf
|
||||||
|
"""
|
||||||
|
def execute(self):
|
||||||
|
import subprocess
|
||||||
|
if self.quantifier:
|
||||||
|
command="locate home media | fzf -e -i"
|
||||||
|
else:
|
||||||
|
command="locate home media | fzf -e -i"
|
||||||
|
fzf = self.fm.execute_command(command, stdout=subprocess.PIPE)
|
||||||
|
stdout, stderr = fzf.communicate()
|
||||||
|
if fzf.returncode == 0:
|
||||||
|
fzf_file = os.path.abspath(stdout.decode('utf-8').rstrip('\n'))
|
||||||
|
if os.path.isdir(fzf_file):
|
||||||
|
self.fm.cd(fzf_file)
|
||||||
|
else:
|
||||||
|
self.fm.select_file(fzf_file)
|
||||||
|
|
||||||
|
class fzf_bring(Command):
|
||||||
|
"""
|
||||||
|
:fzf_bring
|
||||||
|
|
||||||
|
Find a file using fzf and bring it to the current directory.
|
||||||
|
|
||||||
|
See: https://github.com/junegunn/fzf
|
||||||
|
"""
|
||||||
|
def execute(self):
|
||||||
|
import subprocess
|
||||||
|
if self.quantifier:
|
||||||
|
# match only directories
|
||||||
|
command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \
|
||||||
|
-o -type d -print 2> /dev/null | sed 1d | cut -b3- | fzf +m"
|
||||||
|
else:
|
||||||
|
# match files and directories
|
||||||
|
command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \
|
||||||
|
-o -print 2> /dev/null | sed 1d | cut -b3- | fzf +m"
|
||||||
|
fzf = self.fm.execute_command(command, stdout=subprocess.PIPE)
|
||||||
|
stdout, stderr = fzf.communicate()
|
||||||
|
if fzf.returncode == 0:
|
||||||
|
fzf_file = os.path.abspath(stdout.decode('utf-8').rstrip('\n'))
|
||||||
|
if os.path.isdir(fzf_file):
|
||||||
|
self.fm.cd(fzf_file)
|
||||||
|
else:
|
||||||
|
self.fm.select_file(fzf_file)
|
||||||
|
|
||||||
|
|
||||||
|
import os
|
||||||
|
from ranger.core.loader import CommandLoader
|
||||||
|
|
||||||
|
class compress(Command):
|
||||||
|
def execute(self):
|
||||||
|
""" Compress marked files to current directory """
|
||||||
|
cwd = self.fm.thisdir
|
||||||
|
marked_files = cwd.get_selection()
|
||||||
|
|
||||||
|
if not marked_files:
|
||||||
|
return
|
||||||
|
|
||||||
|
def refresh(_):
|
||||||
|
cwd = self.fm.get_directory(original_path)
|
||||||
|
cwd.load_content()
|
||||||
|
|
||||||
|
original_path = cwd.path
|
||||||
|
parts = self.line.split()
|
||||||
|
au_flags = parts[1:]
|
||||||
|
|
||||||
|
descr = "compressing files in: " + os.path.basename(parts[1])
|
||||||
|
obj = CommandLoader(args=['apack'] + au_flags + \
|
||||||
|
[os.path.relpath(f.path, cwd.path) for f in marked_files], descr=descr)
|
||||||
|
|
||||||
|
obj.signal_bind('after', refresh)
|
||||||
|
self.fm.loader.add(obj)
|
||||||
|
|
||||||
|
def tab(self):
|
||||||
|
""" Complete with current folder name """
|
||||||
|
|
||||||
|
extension = ['.zip', '.tar.gz', '.rar', '.7z']
|
||||||
|
return ['compress ' + os.path.basename(self.fm.thisdir.path) + ext for ext in extension]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import os
|
||||||
|
from ranger.core.loader import CommandLoader
|
||||||
|
|
||||||
|
class extracthere(Command):
|
||||||
|
def execute(self):
|
||||||
|
""" Extract copied files to current directory """
|
||||||
|
copied_files = tuple(self.fm.copy_buffer)
|
||||||
|
|
||||||
|
if not copied_files:
|
||||||
|
return
|
||||||
|
|
||||||
|
def refresh(_):
|
||||||
|
cwd = self.fm.get_directory(original_path)
|
||||||
|
cwd.load_content()
|
||||||
|
|
||||||
|
one_file = copied_files[0]
|
||||||
|
cwd = self.fm.thisdir
|
||||||
|
original_path = cwd.path
|
||||||
|
au_flags = ['-X', cwd.path]
|
||||||
|
au_flags += self.line.split()[1:]
|
||||||
|
au_flags += ['-e']
|
||||||
|
|
||||||
|
self.fm.copy_buffer.clear()
|
||||||
|
self.fm.cut_buffer = False
|
||||||
|
if len(copied_files) == 1:
|
||||||
|
descr = "extracting: " + os.path.basename(one_file.path)
|
||||||
|
else:
|
||||||
|
descr = "extracting files from: " + os.path.basename(one_file.dirname)
|
||||||
|
obj = CommandLoader(args=['aunpack'] + au_flags \
|
||||||
|
+ [f.path for f in copied_files], descr=descr)
|
||||||
|
|
||||||
|
obj.signal_bind('after', refresh)
|
||||||
|
self.fm.loader.add(obj)
|
@ -0,0 +1,50 @@
|
|||||||
|
# image previews
|
||||||
|
#set preview_script /usr/share/doc/ranger/config/scope.sh
|
||||||
|
set preview_images true
|
||||||
|
set preview_images_method ueberzug
|
||||||
|
|
||||||
|
# appearance
|
||||||
|
set draw_borders true
|
||||||
|
set colorscheme default
|
||||||
|
set column_ratios 1,3,4
|
||||||
|
set padding_right true
|
||||||
|
set show_selection_in_titlebar true
|
||||||
|
set display_size_in_main_column true
|
||||||
|
set display_size_in_status_bar true
|
||||||
|
set display_tags_in_all_columns true
|
||||||
|
|
||||||
|
# extract archive
|
||||||
|
map X shell extracthere %f
|
||||||
|
|
||||||
|
# make file runnable
|
||||||
|
map x shell chmod -x %s
|
||||||
|
|
||||||
|
# don't show hidden files
|
||||||
|
set show_hidden false
|
||||||
|
|
||||||
|
# confirm on multiple file delete
|
||||||
|
set confirm_on_delete multiple
|
||||||
|
|
||||||
|
set tilde_in_titlebar true
|
||||||
|
|
||||||
|
# VIM keybinds
|
||||||
|
copymap <UP> k
|
||||||
|
copymap <DOWN> j
|
||||||
|
copymap <LEFT> h
|
||||||
|
copymap <RIGHT> l
|
||||||
|
copymap <HOME> gg
|
||||||
|
copymap <END> G
|
||||||
|
copymap <PAGEDOWN> <C-F>
|
||||||
|
copymap <PAGEUP> <C-B>
|
||||||
|
map / console search%space
|
||||||
|
map n search_next
|
||||||
|
map N search_next forward=False
|
||||||
|
map ct search_next order=tag
|
||||||
|
map cs search_next order=size
|
||||||
|
map ci search_next order=mimetype
|
||||||
|
map cc search_next order=ctime
|
||||||
|
map cm search_next order=mtime
|
||||||
|
map ca search_next order=atime
|
||||||
|
|
||||||
|
# toggle hidden
|
||||||
|
map zh toggle_option show_hidden
|
@ -0,0 +1,3 @@
|
|||||||
|
[manual]
|
||||||
|
lat=60.19
|
||||||
|
lon=24.94
|
@ -0,0 +1,88 @@
|
|||||||
|
# permanently set alternative root dir. Use ":" to separate multiple roots
|
||||||
|
# which can be switched at runtime with shift+left/right
|
||||||
|
# root=/path/to/root
|
||||||
|
|
||||||
|
# rofi command. Make sure to have "$@" as last argument
|
||||||
|
_rofi () {
|
||||||
|
rofi -i -no-auto-select "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# image viewer to display qrcode of selected entry
|
||||||
|
# qrencode is needed to generate the image and a viewer
|
||||||
|
# that can read from pipes. Known viewers to work are feh and display
|
||||||
|
_image_viewer () {
|
||||||
|
feh -
|
||||||
|
# display
|
||||||
|
}
|
||||||
|
|
||||||
|
# xdotool needs the keyboard layout to be set using setxkbmap
|
||||||
|
# You can do this in your autostart scripts (e.g. xinitrc)
|
||||||
|
|
||||||
|
# If for some reason, you cannot do this, you can set the command here.
|
||||||
|
# and set fix_layout to true
|
||||||
|
fix_layout=false
|
||||||
|
|
||||||
|
layout_cmd () {
|
||||||
|
setxkbmap eu
|
||||||
|
}
|
||||||
|
|
||||||
|
# fields to be used
|
||||||
|
URL_field='url'
|
||||||
|
USERNAME_field='username'
|
||||||
|
AUTOTYPE_field='autotype'
|
||||||
|
|
||||||
|
# delay to be used for :delay keyword
|
||||||
|
delay=2
|
||||||
|
|
||||||
|
# rofi-pass needs to close itself before it can type passwords. Set delay here.
|
||||||
|
wait=0.2
|
||||||
|
|
||||||
|
## Programs to be used
|
||||||
|
# Editor
|
||||||
|
EDITOR='gvim -f'
|
||||||
|
|
||||||
|
# Browser
|
||||||
|
BROWSER='xdg-open'
|
||||||
|
|
||||||
|
## Misc settings
|
||||||
|
|
||||||
|
default_do='menu' # menu, autotype, copyPass, typeUser, typePass, copyUser, copyUrl, viewEntry, typeMenu, actionMenu, copyMenu, openUrl
|
||||||
|
auto_enter='true'
|
||||||
|
notify='false'
|
||||||
|
default_autotype='user :tab pass'
|
||||||
|
|
||||||
|
# color of the help messages
|
||||||
|
# leave empty for autodetection
|
||||||
|
help_color="#4872FF"
|
||||||
|
|
||||||
|
# Clipboard settings
|
||||||
|
# Possible options: primary, clipboard, both
|
||||||
|
clip=primary
|
||||||
|
|
||||||
|
## Options for generating new password entries
|
||||||
|
|
||||||
|
# open new password entries in editor
|
||||||
|
edit_new_pass="true"
|
||||||
|
|
||||||
|
# default_user is also used for password files that have no user field.
|
||||||
|
#default_user="${ROFI_PASS_DEFAULT_USER-$(whoami)}"
|
||||||
|
#default_user2=mary_ann
|
||||||
|
#password_length=12
|
||||||
|
|
||||||
|
# Custom Keybindings
|
||||||
|
autotype="Alt+1"
|
||||||
|
type_user="Alt+2"
|
||||||
|
type_pass="Alt+3"
|
||||||
|
open_url="Alt+4"
|
||||||
|
copy_name="Alt+u"
|
||||||
|
copy_url="Alt+l"
|
||||||
|
copy_pass="Alt+p"
|
||||||
|
show="Alt+o"
|
||||||
|
copy_entry="Alt+2"
|
||||||
|
type_entry="Alt+1"
|
||||||
|
copy_menu="Alt+c"
|
||||||
|
action_menu="Alt+a"
|
||||||
|
type_menu="Alt+t"
|
||||||
|
help="Alt+h"
|
||||||
|
switch="Alt+x"
|
||||||
|
insert_pass="Alt+n"
|
@ -0,0 +1,9 @@
|
|||||||
|
rofi.lines: 5
|
||||||
|
rofi.eh: 2
|
||||||
|
rofi.padding: 50
|
||||||
|
rofi.fullscreen: false
|
||||||
|
rofi.bw: 0
|
||||||
|
rofi.separator-style: none
|
||||||
|
rofi.hide-scrollbar: true
|
||||||
|
rofi.font: Overpass 22
|
||||||
|
rofi.theme: ~/.config/rofi/gruvbox-dark.rasi
|
@ -0,0 +1,127 @@
|
|||||||
|
/* ==========================================================================
|
||||||
|
File: gruvbox-common.rasi
|
||||||
|
Desc: Shared rules between all gruvbox themes
|
||||||
|
Author: bardisty <b@bah.im>
|
||||||
|
Source: https://github.com/bardisty/gruvbox-rofi
|
||||||
|
Modified: Mon Feb 12 2018 06:06:47 PST -0800
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
window {
|
||||||
|
background-color: @background;
|
||||||
|
border: 2;
|
||||||
|
padding: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
mainbox {
|
||||||
|
border: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
message {
|
||||||
|
border: 2px 0 0;
|
||||||
|
border-color: @separatorcolor;
|
||||||
|
padding: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
textbox {
|
||||||
|
highlight: @highlight;
|
||||||
|
text-color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
listview {
|
||||||
|
border: 2px solid 0 0;
|
||||||
|
padding: 2px 0 0;
|
||||||
|
border-color: @separatorcolor;
|
||||||
|
spacing: 2px;
|
||||||
|
scrollbar: @scrollbar;
|
||||||
|
}
|
||||||
|
|
||||||
|
element {
|
||||||
|
border: 0;
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
element.normal.normal {
|
||||||
|
background-color: @normal-background;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
element.normal.urgent {
|
||||||
|
background-color: @urgent-background;
|
||||||
|
text-color: @urgent-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
element.normal.active {
|
||||||
|
background-color: @active-background;
|
||||||
|
text-color: @active-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
element.selected.normal {
|
||||||
|
background-color: @selected-normal-background;
|
||||||
|
text-color: @selected-normal-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
element.selected.urgent {
|
||||||
|
background-color: @selected-urgent-background;
|
||||||
|
text-color: @selected-urgent-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
element.selected.active {
|
||||||
|
background-color: @selected-active-background;
|
||||||
|
text-color: @selected-active-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
element.alternate.normal {
|
||||||
|
background-color: @alternate-normal-background;
|
||||||
|
text-color: @alternate-normal-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
element.alternate.urgent {
|
||||||
|
background-color: @alternate-urgent-background;
|
||||||
|
text-color: @alternate-urgent-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
element.alternate.active {
|
||||||
|
background-color: @alternate-active-background;
|
||||||
|
text-color: @alternate-active-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollbar {
|
||||||
|
width: 4px;
|
||||||
|
border: 0;
|
||||||
|
handle-color: @scrollbar-handle;
|
||||||
|
handle-width: 8px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sidebar {
|
||||||
|
border: 2px 0 0;
|
||||||
|
border-color: @separatorcolor;
|
||||||
|
}
|
||||||
|
|
||||||
|
inputbar {
|
||||||
|
spacing: 0;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
padding: 2px;
|
||||||
|
children: [ prompt, textbox-prompt-sep, entry, case-indicator ];
|
||||||
|
}
|
||||||
|
|
||||||
|
case-indicator,
|
||||||
|
entry,
|
||||||
|
prompt,
|
||||||
|
button {
|
||||||
|
spacing: 0;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.selected {
|
||||||
|
background-color: @selected-normal-background;
|
||||||
|
text-color: @selected-normal-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
textbox-prompt-sep {
|
||||||
|
expand: false;
|
||||||
|
str: ":";
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
margin: 0 0.3em 0 0;
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
/* ==========================================================================
|
||||||
|
Rofi color theme
|
||||||
|
|
||||||
|
Based on the Gruvbox color scheme for Vim by morhetz
|
||||||
|
https://github.com/morhetz/gruvbox
|
||||||
|
|
||||||
|
File: gruvbox-dark-soft.rasi
|
||||||
|
Desc: Gruvbox dark (soft contrast) color theme for Rofi
|
||||||
|
Author: bardisty <b@bah.im>
|
||||||
|
Source: https://github.com/bardisty/gruvbox-rofi
|
||||||
|
Modified: Mon Feb 12 2018 06:04:37 PST -0800
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
* {
|
||||||
|
/* Theme settings */
|
||||||
|
highlight: bold italic;
|
||||||
|
scrollbar: true;
|
||||||
|
|
||||||
|
/* Gruvbox dark colors */
|
||||||
|
gruvbox-dark-bg0-soft: #32302f;
|
||||||
|
gruvbox-dark-bg1: #3c3836;
|
||||||
|
gruvbox-dark-bg3: #665c54;
|
||||||
|
gruvbox-dark-fg0: #fbf1c7;
|
||||||
|
gruvbox-dark-fg1: #ebdbb2;
|
||||||
|
gruvbox-dark-red-dark: #cc241d;
|
||||||
|
gruvbox-dark-red-light: #fb4934;
|
||||||
|
gruvbox-dark-yellow-dark: #d79921;
|
||||||
|
gruvbox-dark-yellow-light: #fabd2f;
|
||||||
|
gruvbox-dark-gray: #a89984;
|
||||||
|
|
||||||
|
/* Theme colors */
|
||||||
|
background: @gruvbox-dark-bg0-soft;
|
||||||
|
background-color: @background;
|
||||||
|
foreground: @gruvbox-dark-fg1;
|
||||||
|
border-color: @gruvbox-dark-gray;
|
||||||
|
separatorcolor: @border-color;
|
||||||
|
scrollbar-handle: @border-color;
|
||||||
|
|
||||||
|
normal-background: @background;
|
||||||
|
normal-foreground: @foreground;
|
||||||
|
alternate-normal-background: @background;
|
||||||
|
alternate-normal-foreground: @foreground;
|
||||||
|
selected-normal-background: @gruvbox-dark-bg3;
|
||||||
|
selected-normal-foreground: @gruvbox-dark-fg0;
|
||||||
|
|
||||||
|
active-background: @gruvbox-dark-yellow-dark;
|
||||||
|
active-foreground: @background;
|
||||||
|
alternate-active-background: @active-background;
|
||||||
|
alternate-active-foreground: @active-foreground;
|
||||||
|
selected-active-background: @gruvbox-dark-yellow-light;
|
||||||
|
selected-active-foreground: @active-foreground;
|
||||||
|
|
||||||
|
urgent-background: @gruvbox-dark-red-dark;
|
||||||
|
urgent-foreground: @background;
|
||||||
|
alternate-urgent-background: @urgent-background;
|
||||||
|
alternate-urgent-foreground: @urgent-foreground;
|
||||||
|
selected-urgent-background: @gruvbox-dark-red-light;
|
||||||
|
selected-urgent-foreground: @urgent-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
@import "gruvbox-common.inc"
|
@ -0,0 +1,150 @@
|
|||||||
|
* {
|
||||||
|
nord0: #2E3440;
|
||||||
|
nord1: #3B4252;
|
||||||
|
nord2: #434C5E;
|
||||||
|
nord3: #4C566A;
|
||||||
|
nord4: #D8DEE9;
|
||||||
|
nord5: #E5E9F0;
|
||||||
|
nord6: #ECEFF4;
|
||||||
|
nord7: #8FBCBB;
|
||||||
|
nord8: #88C0D0;
|
||||||
|
nord9: #81A1C1;
|
||||||
|
nord10: #5E81AC;
|
||||||
|
nord11: #BF616A;
|
||||||
|
nord12: #D08770;
|
||||||
|
nord13: #EBCB8B;
|
||||||
|
nord14: #A3BE8C;
|
||||||
|
nord15: #B48EAD;
|
||||||
|
background: @nord0;
|
||||||
|
foreground: @nord4;
|
||||||
|
selected-normal-foreground: @nord4;
|
||||||
|
normal-foreground: @foreground;
|
||||||
|
alternate-normal-background: @nord0;
|
||||||
|
selected-urgent-foreground: @nord4;
|
||||||
|
urgent-foreground: @foreground;
|
||||||
|
alternate-urgent-background: @nord0;
|
||||||
|
active-foreground: @foreground;
|
||||||
|
selected-active-foreground: @foreground;
|
||||||
|
alternate-active-background: @nord0;
|
||||||
|
bordercolor: @nord10;
|
||||||
|
alternate-normal-foreground: @foreground;
|
||||||
|
normal-background: @background;
|
||||||
|
selected-normal-background: @nord3;
|
||||||
|
border-color: @nord10;
|
||||||
|
spacing: 2;
|
||||||
|
separatorcolor: @blue;
|
||||||
|
urgent-background: @background;
|
||||||
|
selected-urgent-background: @nord3;
|
||||||
|
alternate-urgent-foreground: @urgent-foreground;
|
||||||
|
background-color: @background;
|
||||||
|
alternate-active-foreground: @active-foreground;
|
||||||
|
active-background: @background;
|
||||||
|
selected-active-background: @nord3;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------
|
||||||
|
// Style
|
||||||
|
//----------------------
|
||||||
|
|
||||||
|
#window {
|
||||||
|
background-color: @background;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mainbox {
|
||||||
|
border: 2;
|
||||||
|
padding: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
#message {
|
||||||
|
border: 2px 2px 2px ;
|
||||||
|
border-color: @separatorcolor;
|
||||||
|
padding: 10 ;
|
||||||
|
}
|
||||||
|
|
||||||
|
#textbox {
|
||||||
|
text-color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#listview {
|
||||||
|
fixed-height: 0;
|
||||||
|
padding: 5 0 0;
|
||||||
|
spacing: 5px ;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element {
|
||||||
|
border: 0;
|
||||||
|
padding: 5px ;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element.normal.normal {
|
||||||
|
background-color: @normal-background;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element.normal.urgent {
|
||||||
|
background-color: @urgent-background;
|
||||||
|
text-color: @urgent-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element.normal.active {
|
||||||
|
background-color: @active-background;
|
||||||
|
text-color: @active-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element.selected.normal {
|
||||||
|
background-color: @selected-normal-background;
|
||||||
|
text-color: @selected-normal-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element.selected.urgent {
|
||||||
|
background-color: @selected-urgent-background;
|
||||||
|
text-color: @selected-urgent-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element.selected.active {
|
||||||
|
background-color: @selected-active-background;
|
||||||
|
text-color: @selected-active-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element.alternate.normal {
|
||||||
|
background-color: @alternate-normal-background;
|
||||||
|
text-color: @alternate-normal-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element.alternate.urgent {
|
||||||
|
background-color: @alternate-urgent-background;
|
||||||
|
text-color: @alternate-urgent-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#element.alternate.active {
|
||||||
|
background-color: @alternate-active-background;
|
||||||
|
text-color: @alternate-active-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#button.selected {
|
||||||
|
background-color: @selected-normal-background;
|
||||||
|
text-color: @selected-normal-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#inputbar {
|
||||||
|
spacing: 5;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
padding: 5px ;
|
||||||
|
border: 0 0 1;
|
||||||
|
border-color: @separatorcolor;
|
||||||
|
}
|
||||||
|
|
||||||
|
#case-indicator {
|
||||||
|
spacing: 0;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry {
|
||||||
|
spacing: 0;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#prompt {
|
||||||
|
spacing: 0;
|
||||||
|
text-color: @normal-foreground;
|
||||||
|
}
|
@ -0,0 +1,162 @@
|
|||||||
|
; Reddit Terminal Viewer Configuration File
|
||||||
|
; https://github.com/michael-lazar/rtv
|
||||||
|
;
|
||||||
|
; This file should be placed in $XDG_CONFIG/rtv/rtv.cfg
|
||||||
|
; If $XDG_CONFIG is not set, use ~/.config/rtv/rtv.cfg
|
||||||
|
|
||||||
|
[rtv]
|
||||||
|
##################
|
||||||
|
# General Settings
|
||||||
|
##################
|
||||||
|
|
||||||
|
; Turn on ascii-only mode to disable all unicode characters.
|
||||||
|
; This may be necessary for compatibility with some terminal browsers.
|
||||||
|
ascii = False
|
||||||
|
|
||||||
|
; Turn on monochrome mode to disable color.
|
||||||
|
monochrome = False
|
||||||
|
|
||||||
|
; Flash when an invalid action is executed.
|
||||||
|
flash = True
|
||||||
|
|
||||||
|
; Enable debugging by logging all HTTP requests and errors to the given file.
|
||||||
|
;log = /tmp/rtv.log
|
||||||
|
|
||||||
|
; Default subreddit that will be opened when the program launches.
|
||||||
|
subreddit = front
|
||||||
|
;subreddit = python
|
||||||
|
;subreddit = python+linux+programming
|
||||||
|
;subreddit = all
|
||||||
|
|
||||||
|
; Allow rtv to store reddit authentication credentials between sessions.
|
||||||
|
persistent = True
|
||||||
|
|
||||||
|
; Clear any stored credentials when the program starts.
|
||||||
|
clear_auth = False
|
||||||
|
|
||||||
|
; Maximum number of opened links that will be saved in the history file.
|
||||||
|
history_size = 200
|
||||||
|
|
||||||
|
; Open external links using programs defined in the mailcap config.
|
||||||
|
enable_media = True
|
||||||
|
|
||||||
|
; Maximum number of columns for a comment
|
||||||
|
max_comment_cols = 120
|
||||||
|
|
||||||
|
; Hide username if logged in, display "Logged in" instead
|
||||||
|
hide_username = False
|
||||||
|
|
||||||
|
; Color theme, use "rtv --list-themes" to view a list of valid options.
|
||||||
|
; This can be an absolute filepath, or the name of a theme file that has
|
||||||
|
; been installed into either the custom of default theme paths.
|
||||||
|
;theme = molokai
|
||||||
|
|
||||||
|
################
|
||||||
|
# OAuth Settings
|
||||||
|
################
|
||||||
|
; This sections defines the paramaters that will be used during the OAuth
|
||||||
|
; authentication process. rtv is registered as an "installed app",
|
||||||
|
; see https://github.com/reddit/reddit/wiki/OAuth2 for more information.
|
||||||
|
|
||||||
|
; These settings are defined at https://www.reddit.com/prefs/apps and should
|
||||||
|
; not be altered unless you are defining your own developer application.
|
||||||
|
oauth_client_id = E2oEtRQfdfAfNQ
|
||||||
|
oauth_client_secret = praw_gapfill
|
||||||
|
oauth_redirect_uri = http://127.0.0.1:65000/
|
||||||
|
|
||||||
|
; Port that the rtv webserver will listen on. This should match the redirect
|
||||||
|
; uri defined above.
|
||||||
|
oauth_redirect_port = 65000
|
||||||
|
|
||||||
|
; Access permissions that will be requested.
|
||||||
|
oauth_scope = edit,history,identity,mysubreddits,privatemessages,read,report,save,submit,subscribe,vote
|
||||||
|
|
||||||
|
; This is a separate token for the imgur api. It's used to extract images
|
||||||
|
; from imgur links and albums so they can be opened with mailcap.
|
||||||
|
; See https://imgur.com/account/settings/apps to generate your own key.
|
||||||
|
imgur_client_id = 93396265f59dec9
|
||||||
|
|
||||||
|
[bindings]
|
||||||
|
##############
|
||||||
|
# Key Bindings
|
||||||
|
##############
|
||||||
|
; If you would like to define custom bindings, copy this section into your
|
||||||
|
; config file with the [bindings] heading. All commands must be bound to at
|
||||||
|
; least one key for the config to be valid.
|
||||||
|
;
|
||||||
|
; 1.) Plain keys can be represented by either uppercase/lowercase characters
|
||||||
|
; or the hexadecimal numbers referring their ascii codes. For reference, see
|
||||||
|
; https://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart
|
||||||
|
; e.g. Q, q, 1, ?
|
||||||
|
; e.g. 0x20 (space), 0x3c (less-than sign)
|
||||||
|
;
|
||||||
|
; 2.) Special ascii control codes should be surrounded with <>. For reference,
|
||||||
|
; see https://en.wikipedia.org/wiki/ASCII#ASCII_control_code_chart
|
||||||
|
; e.g. <LF> (enter), <ESC> (escape)
|
||||||
|
;
|
||||||
|
; 3.) Other special keys are defined by curses, they should be surrounded by <>
|
||||||
|
; and prefixed with KEY_. For reference, see
|
||||||
|
; https://docs.python.org/2/library/curses.html#constants
|
||||||
|
; e.g. <KEY_LEFT> (left arrow), <KEY_F5>, <KEY_NPAGE> (page down)
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
; - Curses <KEY_ENTER> is unreliable and should always be used in conjunction
|
||||||
|
; with <LF>.
|
||||||
|
; - Use 0x20 for the space key.
|
||||||
|
; - A subset of Ctrl modifiers are available through the ascii control codes.
|
||||||
|
; For example, Ctrl-D will trigger an <EOT> signal. See the table above for
|
||||||
|
; a complete reference.
|
||||||
|
|
||||||
|
; Base page
|
||||||
|
EXIT = Q
|
||||||
|
FORCE_EXIT = q
|
||||||
|
HELP = ?
|
||||||
|
SORT_HOT = 1
|
||||||
|
SORT_TOP = 2
|
||||||
|
SORT_RISING = 3
|
||||||
|
SORT_NEW = 4
|
||||||
|
SORT_CONTROVERSIAL = 5
|
||||||
|
SORT_GILDED = 6
|
||||||
|
MOVE_UP = k, <KEY_UP>
|
||||||
|
MOVE_DOWN = j, <KEY_DOWN>
|
||||||
|
PREVIOUS_THEME = <KEY_F2>
|
||||||
|
NEXT_THEME = <KEY_F3>
|
||||||
|
PAGE_UP = m, <KEY_PPAGE>, <NAK>
|
||||||
|
PAGE_DOWN = n, <KEY_NPAGE>, <EOT>
|
||||||
|
PAGE_TOP = gg
|
||||||
|
PAGE_BOTTOM = G
|
||||||
|
UPVOTE = a
|
||||||
|
DOWNVOTE = z
|
||||||
|
LOGIN = u
|
||||||
|
DELETE = d
|
||||||
|
EDIT = e
|
||||||
|
INBOX = i
|
||||||
|
REFRESH = r, <KEY_F5>
|
||||||
|
PROMPT = /
|
||||||
|
SAVE = w
|
||||||
|
COPY_PERMALINK = y
|
||||||
|
COPY_URL = Y
|
||||||
|
|
||||||
|
; Submission page
|
||||||
|
SUBMISSION_TOGGLE_COMMENT = 0x20
|
||||||
|
SUBMISSION_OPEN_IN_BROWSER = o, <LF>, <KEY_ENTER>
|
||||||
|
SUBMISSION_POST = c
|
||||||
|
SUBMISSION_EXIT = h, <KEY_LEFT>
|
||||||
|
SUBMISSION_OPEN_IN_PAGER = l, <KEY_RIGHT>
|
||||||
|
SUBMISSION_OPEN_IN_URLVIEWER = b
|
||||||
|
SUBMISSION_GOTO_PARENT = K
|
||||||
|
SUBMISSION_GOTO_SIBLING = J
|
||||||
|
|
||||||
|
; Subreddit page
|
||||||
|
SUBREDDIT_SEARCH = f
|
||||||
|
SUBREDDIT_POST = c
|
||||||
|
SUBREDDIT_OPEN = l, <KEY_RIGHT>
|
||||||
|
SUBREDDIT_OPEN_IN_BROWSER = o, <LF>, <KEY_ENTER>
|
||||||
|
SUBREDDIT_OPEN_SUBSCRIPTIONS = s
|
||||||
|
SUBREDDIT_OPEN_MULTIREDDITS = S
|
||||||
|
SUBREDDIT_FRONTPAGE = p
|
||||||
|
SUBREDDIT_HIDE = 0x20
|
||||||
|
|
||||||
|
; Subscription page
|
||||||
|
SUBSCRIPTION_SELECT = l, <LF>, <KEY_ENTER>, <KEY_RIGHT>
|
||||||
|
SUBSCRIPTION_EXIT = h, s, S, <ESC>, <KEY_LEFT>
|
@ -0,0 +1,6 @@
|
|||||||
|
# vim:ft=sway
|
||||||
|
|
||||||
|
set $mod Mod4
|
||||||
|
set $term alacritty
|
||||||
|
set $gnome-schema org.gnome.desktop.interface
|
||||||
|
set $wallpaper ~/Pictures/Wallpapers/random/$(ls ~/Pictures/Wallpapers/random | sort -R | tail -n 1)
|
@ -0,0 +1,6 @@
|
|||||||
|
# vim:ft=sway
|
||||||
|
|
||||||
|
bar {
|
||||||
|
swaybar_command waybar
|
||||||
|
output eDP-1
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
# vim:ft=sway
|
||||||
|
|
||||||
|
input * {
|
||||||
|
xkb_layout eu
|
||||||
|
xkb_options caps:escape
|
||||||
|
}
|
||||||
|
|
||||||
|
input "1739:32382:DELL0884:00_06CB:7E7E_Touchpad" {
|
||||||
|
tap enabled
|
||||||
|
natural_scroll enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
input '1267:9364:ELAN_Touchscreen' map_to_output eDP-1
|
@ -0,0 +1,3 @@
|
|||||||
|
# vim:ft=sway
|
||||||
|
|
||||||
|
output * bg $wallpaper fill
|
@ -0,0 +1,17 @@
|
|||||||
|
# vim:ft=sway
|
||||||
|
|
||||||
|
# Start applications in specific workspaces
|
||||||
|
assign [title="Telegram"] workspace 3
|
||||||
|
assign [app_id="evolution"] workspace 4
|
||||||
|
|
||||||
|
# Make passff float
|
||||||
|
for_window [title="moz-extension:\/\/aa3e4372-6ac1-4d2f-b1f4-1bd4cf33c726 - Firefox Nightly"] floating enable
|
||||||
|
|
||||||
|
# Automatically switch to urgent workspace
|
||||||
|
for_window [urgent="latest"] focus
|
||||||
|
|
||||||
|
# Make gimp export window float
|
||||||
|
for_window [title="Export Image*"] floating enable
|
||||||
|
|
||||||
|
# Make fzf-launcher float
|
||||||
|
for_window [app_id="fzf-launcher"] focus, floating enabled, border pixel 1
|
@ -0,0 +1,177 @@
|
|||||||
|
# vim:ft=sway
|
||||||
|
|
||||||
|
# start terminal
|
||||||
|
bindsym $mod+Return exec $term
|
||||||
|
|
||||||
|
# kill focused window
|
||||||
|
bindsym $mod+w kill
|
||||||
|
|
||||||
|
# start your launcher
|
||||||
|
bindsym $mod+Shift+p exec rofi-pass --bmarks
|
||||||
|
|
||||||
|
# Drag floating windows by holding down $mod and left mouse button.
|
||||||
|
# Resize them with right mouse button + $mod.
|
||||||
|
# Despite the name, also works for non-floating windows.
|
||||||
|
# Change normal to inverse to use left mouse button for resizing and right
|
||||||
|
# mouse button for dragging.
|
||||||
|
floating_modifier $mod normal
|
||||||
|
|
||||||
|
# reload the configuration file
|
||||||
|
bindsym $mod+Shift+r reload
|
||||||
|
|
||||||
|
# open link from clipboard in default application
|
||||||
|
bindsym $mod+Shift+o exec mimeo "$(wl-paste)"
|
||||||
|
|
||||||
|
# flash the current window
|
||||||
|
bindsym $mod+n exec flash_window
|
||||||
|
|
||||||
|
# turn on and off internal screen
|
||||||
|
bindsym --locked XF86Search output eDP-1 enable
|
||||||
|
bindsym --locked Shift+XF86Search output eDP-1 disable
|
||||||
|
|
||||||
|
# FZF
|
||||||
|
# exit menu
|
||||||
|
bindsym $mod+Shift+e exec $term --class fzf-launcher -e $HOME/Scripts/sway-exit.sh
|
||||||
|
# launch a program
|
||||||
|
bindsym $mod+d exec $term --class fzf-launcher --title "FZF Launcher" -e sh -c '~/Scripts/sway-launcher-desktop.sh'
|
||||||
|
# open a file
|
||||||
|
bindsym $mod+o exec $term --class fzf-launcher --title "FZF Open file" -e sh -c 'setsid mimeo $(fzf)'
|
||||||
|
# password manager
|
||||||
|
bindsym $mod+p exec $term --class fzf-launcher --title "FZF pass" -e sh -c fzf-pass
|
||||||
|
|
||||||
|
# manage notifications
|
||||||
|
bindsym $mod+Backspace exec makoctl invoke
|
||||||
|
bindsym Control+Escape exec makoctl dismiss
|
||||||
|
|
||||||
|
# activate lockscreen
|
||||||
|
bindsym Control+Shift+l exec loginctl lock-session
|
||||||
|
|
||||||
|
# Move your focus around
|
||||||
|
bindsym $mod+h focus left
|
||||||
|
bindsym $mod+j focus down
|
||||||
|
bindsym $mod+k focus up
|
||||||
|
bindsym $mod+l focus right
|
||||||
|
# or use $mod+[up|down|left|right]
|
||||||
|
bindsym $mod+Left focus left
|
||||||
|
bindsym $mod+Down focus down
|
||||||
|
bindsym $mod+Up focus up
|
||||||
|
bindsym $mod+Right focus right
|
||||||
|
|
||||||
|
|
||||||
|
# _move_ the focused window with the same, but add Shift
|
||||||
|
bindsym $mod+Shift+h move left
|
||||||
|
bindsym $mod+Shift+j move down
|
||||||
|
bindsym $mod+Shift+k move up
|
||||||
|
bindsym $mod+Shift+l move right
|
||||||
|
# ditto, with arrow keys
|
||||||
|
bindsym $mod+Shift+Left move left
|
||||||
|
bindsym $mod+Shift+Down move down
|
||||||
|
bindsym $mod+Shift+Up move up
|
||||||
|
bindsym $mod+Shift+Right move right
|
||||||
|
|
||||||
|
# Layout stuff:
|
||||||
|
# Split direction
|
||||||
|
bindsym $mod+y splith
|
||||||
|
bindsym $mod+x splitv
|
||||||
|
|
||||||
|
# Switch the current container between different layout styles
|
||||||
|
bindsym $mod+s layout stacking
|
||||||
|
bindsym $mod+e layout tabbed
|
||||||
|
bindsym $mod+t layout toggle split
|
||||||
|
|
||||||
|
# Make the current focus fullscreen
|
||||||
|
bindsym $mod+f fullscreen
|
||||||
|
|
||||||
|
# Toggle the current focus between tiling and floating mode
|
||||||
|
bindsym $mod+Shift+space floating toggle
|
||||||
|
|
||||||
|
# Swap focus between the tiling area and the floating area
|
||||||
|
bindsym $mod+space focus mode_toggle
|
||||||
|
|
||||||
|
# move focus to the parent container
|
||||||
|
bindsym $mod+a focus parent
|
||||||
|
|
||||||
|
# Move the currently focused window to the scratchpad
|
||||||
|
bindsym $mod+Shift+minus move scratchpad
|
||||||
|
|
||||||
|
# Show the next scratchpad window or hide the focused scratchpad window.
|
||||||
|
# If there are multiple scratchpad windows, this command cycles through them.
|
||||||
|
bindsym $mod+minus scratchpad show
|
||||||
|
|
||||||
|
mode "resize" {
|
||||||
|
# left will shrink the containers width
|
||||||
|
# right will grow the containers width
|
||||||
|
# up will shrink the containers height
|
||||||
|
# down will grow the containers height
|
||||||
|
bindsym h resize grow width 10px
|
||||||
|
bindsym j resize shrink height 10px
|
||||||
|
bindsym k resize grow height 10px
|
||||||
|
bindsym l resize shrink width 10px
|
||||||
|
|
||||||
|
# ditto, with arrow keys
|
||||||
|
bindsym Left resize grow width 10px
|
||||||
|
bindsym Down resize shrink height 10px
|
||||||
|
bindsym Up resize grow height 10px
|
||||||
|
bindsym Right resize shrink width 10px
|
||||||
|
|
||||||
|
# return to default mode
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
bindsym $mod+r mode "resize"
|
||||||
|
|
||||||
|
# start browser
|
||||||
|
bindsym $mod+b exec firefox-nightly
|
||||||
|
|
||||||
|
# media keys
|
||||||
|
bindsym --locked XF86AudioRaiseVolume exec pulseaudio-ctl up
|
||||||
|
bindsym --locked XF86AudioLowerVolume exec pulseaudio-ctl down
|
||||||
|
bindsym --locked XF86AudioMute exec pulseaudio-ctl mute
|
||||||
|
bindsym --locked XF86AudioNext exec playerctl next
|
||||||
|
bindsym --locked XF86AudioPrev exec playerctl previous
|
||||||
|
bindsym --locked XF86AudioPlay exec playerctl play-pause
|
||||||
|
bindsym --locked XF86AudioStop exec playerctl stop
|
||||||
|
bindsym --locked Ctrl+Alt+s exec playerctl stop
|
||||||
|
|
||||||
|
# rotate screen
|
||||||
|
bindsym $mod+Control+Left exec swaymsg output eDP-1 transform 90
|
||||||
|
bindsym $mod+Control+Down exec swaymsg output eDP-1 transform 0
|
||||||
|
bindsym $mod+Control+Up exec swaymsg output eDP-1 transform 180
|
||||||
|
bindsym $mod+Control+Right exec swaymsg output eDP-1 transform 270
|
||||||
|
|
||||||
|
# display brightness
|
||||||
|
bindsym --locked XF86MonBrightnessUp exec light -A 5
|
||||||
|
bindsym --locked XF86MonBrightnessDown exec light -U 5
|
||||||
|
|
||||||
|
# switch to urgent workspace
|
||||||
|
bindsym $mod+u [urgent=latest] focus
|
||||||
|
|
||||||
|
# Switch to workspace
|
||||||
|
bindsym $mod+1 workspace 1
|
||||||
|
bindsym $mod+2 workspace 2
|
||||||
|
bindsym $mod+3 workspace 3
|
||||||
|
bindsym $mod+4 workspace 4
|
||||||
|
bindsym $mod+5 workspace 5
|
||||||
|
bindsym $mod+6 workspace 6
|
||||||
|
bindsym $mod+7 workspace 7
|
||||||
|
bindsym $mod+8 workspace 8
|
||||||
|
bindsym $mod+9 workspace 9
|
||||||
|
bindsym $mod+0 workspace 10
|
||||||
|
|
||||||
|
# Move container to workspace
|
||||||
|
bindsym $mod+Shift+1 move container to workspace 1
|
||||||
|
bindsym $mod+Shift+2 move container to workspace 2
|
||||||
|
bindsym $mod+Shift+3 move container to workspace 3
|
||||||
|
bindsym $mod+Shift+4 move container to workspace 4
|
||||||
|
bindsym $mod+Shift+5 move container to workspace 5
|
||||||
|
bindsym $mod+Shift+6 move container to workspace 6
|
||||||
|
bindsym $mod+Shift+7 move container to workspace 7
|
||||||
|
bindsym $mod+Shift+8 move container to workspace 8
|
||||||
|
bindsym $mod+Shift+9 move container to workspace 9
|
||||||
|
bindsym $mod+Shift+0 move container to workspace 10
|
||||||
|
|
||||||
|
# Take a screenshot to clipboard
|
||||||
|
bindsym Print exec grim -g "$(slurp -d)" - | wl-copy -t image/png
|
||||||
|
|
||||||
|
# Copy qr code to clipboard
|
||||||
|
bindsym Shift+Print exec grim -g "$(slurp -d)" - | zbarimg -q --raw PNG:- | wl-copy
|
@ -0,0 +1,17 @@
|
|||||||
|
# vim:ft=sway
|
||||||
|
|
||||||
|
default_border none
|
||||||
|
gaps inner 10
|
||||||
|
gaps outer 20
|
||||||
|
|
||||||
|
seat * hide_cursor 4000
|
||||||
|
|
||||||
|
###### Borders ######
|
||||||
|
# class border backgr. text indicator child_border
|
||||||
|
#client.focused #F7B125 #F7B125 #FFFFFF #377375 #F7B125
|
||||||
|
#client.focused_inactive #5C6370 #2E3440 #FFFFFF #2E3440 #2E3440
|
||||||
|
#client.unfocused #5C6370 #2E3440 #FFFFFF #2E3440 #2E3440
|
||||||
|
|
||||||
|
#for_window [app_id="^.*"] border pixel 5
|
||||||
|
#for_window [class="^.*"] border pixel 5
|
||||||
|
#####################
|
@ -0,0 +1,36 @@
|
|||||||
|
# vim:ft=sway
|
||||||
|
|
||||||
|
exec {
|
||||||
|
{%@@ if profile == "Mirkwood" @@%}
|
||||||
|
nm-applet --indicator
|
||||||
|
redshift-gtk -m wayland
|
||||||
|
mpDris2
|
||||||
|
evolution
|
||||||
|
telegram-desktop
|
||||||
|
syncthing-gtk -m
|
||||||
|
mako
|
||||||
|
$HOME/Scripts/swayidle.sh
|
||||||
|
{%@@ elif profile == "Rivendell" @@%}
|
||||||
|
kodi
|
||||||
|
{%@@ endif @@%}
|
||||||
|
/usr/lib/kdeconnectd
|
||||||
|
kdeconnect-indicator
|
||||||
|
/usr/bin/gnome-keyring-daemon --start --components=secrets
|
||||||
|
/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||||
|
ydotoold
|
||||||
|
wl-paste -t text --watch clipman store
|
||||||
|
autotiling
|
||||||
|
}
|
||||||
|
|
||||||
|
exec_always {
|
||||||
|
{%@@ if profile == "Mirkwood" @@%}
|
||||||
|
bash $HOME/.config/sway/randr/laptop.sh
|
||||||
|
{%@@ endif @@%}
|
||||||
|
gsettings set $gnome-schema gtk-theme 'Matcha-dark-aliz'
|
||||||
|
gsettings set $gnome-schema icon-theme 'Numix'
|
||||||
|
gsettings set $gnome-schema cursor-theme 'Breeze'
|
||||||
|
gsettings set $gnome-schema font-name 'Overpass 12'
|
||||||
|
gsettings set $gnome-schema document-font-name 'Overpass 12'
|
||||||
|
gsettings set $gnome-schema monospace-font-name 'Hack Nerd Font Mono 12'
|
||||||
|
flashfocus
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
include ~/.config/sway/conf.d/*.conf
|
@ -0,0 +1,19 @@
|
|||||||
|
# Fix java on wayland
|
||||||
|
_JAVA_AWT_WM_NONREPARENTING=1
|
||||||
|
_JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
|
||||||
|
|
||||||
|
# Enable qt5 theming and wayland support
|
||||||
|
QT_QPA_PLATFORMTHEME=qt5ct
|
||||||
|
QT_QPA_PLATFORM=wayland-egl
|
||||||
|
QT_WAYLAND_DISABLE_WINDOWDECORATION=1
|
||||||
|
|
||||||
|
# Firefox
|
||||||
|
MOZ_ENABLE_WAYLAND=1
|
||||||
|
MOZ_USE_XINPUT2=1
|
||||||
|
MOZ_WEBRENDER=1
|
||||||
|
|
||||||
|
# Fix redshift on wlroots
|
||||||
|
WLR_DRM_NO_ATOMIC=1
|
||||||
|
|
||||||
|
# Make clutter programs use wayland
|
||||||
|
CLUTTER_BACKEND=wayland
|
@ -0,0 +1,3 @@
|
|||||||
|
wlr-randr \
|
||||||
|
--output eDP-1 --mode 1920x1080 --pos 0,0 --transform normal \
|
||||||
|
--output HDMI-A-1 --mode 1920x1080 --pos 1900,0 --transform normal \
|
@ -0,0 +1,43 @@
|
|||||||
|
# DO NOT CHANGE THIS FILE. Override these defaults by writing new files in
|
||||||
|
# /etc/sway/security.d/*
|
||||||
|
|
||||||
|
# Configures enabled compositor features for specific programs
|
||||||
|
permit * fullscreen keyboard mouse
|
||||||
|
permit /usr/bin/swaylock lock
|
||||||
|
permit /usr/bin/swaybg background
|
||||||
|
permit /usr/bin/swaybar panel
|
||||||
|
|
||||||
|
# Configures enabled IPC features for specific programs
|
||||||
|
ipc /usr/bin/swaymsg {
|
||||||
|
* enabled
|
||||||
|
|
||||||
|
events {
|
||||||
|
* disabled
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ipc /usr/bin/swaybar {
|
||||||
|
bar-config enabled
|
||||||
|
outputs enabled
|
||||||
|
workspaces enabled
|
||||||
|
command enabled
|
||||||
|
|
||||||
|
events {
|
||||||
|
workspace enabled
|
||||||
|
mode enabled
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ipc /usr/bin/swaylock {
|
||||||
|
outputs enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
# Limits the contexts from which certain commands are permitted
|
||||||
|
commands {
|
||||||
|
* all
|
||||||
|
|
||||||
|
fullscreen binding criteria
|
||||||
|
bindsym config
|
||||||
|
exit binding
|
||||||
|
kill binding
|
||||||
|
}
|
@ -0,0 +1,209 @@
|
|||||||
|
#
|
||||||
|
# wm independent hotkeys
|
||||||
|
#
|
||||||
|
|
||||||
|
# terminal emulator
|
||||||
|
super + Return
|
||||||
|
termite
|
||||||
|
|
||||||
|
# rotate screen
|
||||||
|
super + shift + Left
|
||||||
|
xrandr --output eDP --rotate left && xinput set-prop "ELAN Touchscreen" --type=float "Coordinate Transformation Matrix" 0 -1 1 1 0 0 0 0 1
|
||||||
|
|
||||||
|
super + shift + Right
|
||||||
|
xrandr --output eDP --rotate right && xinput set-prop "ELAN Touchscreen" --type=float "Coordinate Transformation Matrix" 0 1 0 -1 0 1 0 0 1
|
||||||
|
|
||||||
|
super + shift + Up
|
||||||
|
xrandr --output eDP --rotate normal && xinput set-prop "ELAN Touchscreen" --type=float "Coordinate Transformation Matrix" 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
super + shift + Down
|
||||||
|
xrandr --output eDP --rotate inverted && xinput set-prop "ELAN Touchscreen" --type=float "Coordinate Transformation Matrix" -1 0 1 0 -1 1 0 0 1
|
||||||
|
|
||||||
|
# play music / video from clipboard with mpv (second one can be used to open with default application using mimeo)
|
||||||
|
super + shift + p
|
||||||
|
mpv --no-video "$(xclip -o -selection clipboard)"
|
||||||
|
super + shift + o
|
||||||
|
mimeo "$(xclip -o -selection clipboard)"
|
||||||
|
|
||||||
|
# connect to bluetooth speaker and headset
|
||||||
|
XF86Search
|
||||||
|
bluetoothctl connect 27:59:BE:CE:45:42
|
||||||
|
shift + XF86Search
|
||||||
|
bluetoothctl connect 17:08:01:0D:09:33
|
||||||
|
|
||||||
|
# program launcher
|
||||||
|
super + d
|
||||||
|
rofi -show-icons -show drun
|
||||||
|
å
|
||||||
|
rofi -show-icons -show drun
|
||||||
|
|
||||||
|
# password manager
|
||||||
|
super + p
|
||||||
|
rofi-pass --last-used
|
||||||
|
|
||||||
|
# password manager bookmarks
|
||||||
|
super + shift + b
|
||||||
|
rofi-pass --bmarks --last-used
|
||||||
|
|
||||||
|
# networkmanager_dmenu
|
||||||
|
super + x
|
||||||
|
networkmanager_dmenu
|
||||||
|
|
||||||
|
# make sxhkd reload its configuration files:
|
||||||
|
super + Escape
|
||||||
|
pkill -USR1 -x sxhkd; \
|
||||||
|
notify-send "sxhkd config reloaded"
|
||||||
|
|
||||||
|
#
|
||||||
|
# bspwm hotkeys
|
||||||
|
#
|
||||||
|
|
||||||
|
# quit bspwm normally
|
||||||
|
super + shift + e
|
||||||
|
bspc quit
|
||||||
|
|
||||||
|
# close and kill
|
||||||
|
super + {_,shift + }w
|
||||||
|
bspc node -{c,k}
|
||||||
|
|
||||||
|
# alternate between the tiled and monocle layout
|
||||||
|
super + m
|
||||||
|
bspc desktop -l next
|
||||||
|
|
||||||
|
# if the current node is automatic, send it to the last manual, otherwise pull the last leaf
|
||||||
|
super + y
|
||||||
|
bspc query -N -n focused.automatic && bspc node -n last.!automatic || bspc node last.leaf -n focused
|
||||||
|
|
||||||
|
# swap the current node and the biggest node
|
||||||
|
super + g
|
||||||
|
bspc node -s biggest
|
||||||
|
|
||||||
|
# open browser
|
||||||
|
super + b
|
||||||
|
/usr/local/bin/firefox-nightly
|
||||||
|
|
||||||
|
#
|
||||||
|
# state/flags
|
||||||
|
#
|
||||||
|
|
||||||
|
# set the window state
|
||||||
|
super + {t,shift + t,s,f}
|
||||||
|
bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
|
||||||
|
|
||||||
|
# set the node flags
|
||||||
|
super + ctrl + {x,y,z}
|
||||||
|
bspc node -g {locked,sticky,private}
|
||||||
|
|
||||||
|
#
|
||||||
|
# focus/swap
|
||||||
|
#
|
||||||
|
|
||||||
|
# focus the node in the given direction
|
||||||
|
super + {_,shift + }{h,j,k,l}
|
||||||
|
bspc node -{f,s} {west,south,north,east}
|
||||||
|
|
||||||
|
# focus the node for the given path jump
|
||||||
|
# super + {p,b,comma,period}
|
||||||
|
# bspc node -f @{parent,brother,first,second}
|
||||||
|
|
||||||
|
# focus the next/previous node
|
||||||
|
super + {_,shift + }c
|
||||||
|
bspc node -f {next,prev}
|
||||||
|
|
||||||
|
# focus the next/previous desktop
|
||||||
|
super + bracket{left,right}
|
||||||
|
bspc desktop -f {prev,next}
|
||||||
|
|
||||||
|
# focus the last node/desktop
|
||||||
|
super + {grave,Tab}
|
||||||
|
bspc {node,desktop} -f last
|
||||||
|
|
||||||
|
# focus the older or newer node in the focus history
|
||||||
|
super + {o,i}
|
||||||
|
bspc wm -h off; \
|
||||||
|
bspc node {older,newer} -f; \
|
||||||
|
bspc wm -h on
|
||||||
|
|
||||||
|
# focus or send to the given desktop
|
||||||
|
super + {_,shift + }{1-9,0}
|
||||||
|
bspc {desktop -f,node -d} '^{1-9,10}'
|
||||||
|
|
||||||
|
# focus the next/previous node in the same window
|
||||||
|
super + {comma,period}
|
||||||
|
bspc node -f {next,prev}.local
|
||||||
|
|
||||||
|
#
|
||||||
|
# preselect
|
||||||
|
#
|
||||||
|
|
||||||
|
# preselect the direction
|
||||||
|
super + ctrl + {h,j,k,l}
|
||||||
|
bspc node -p {west,south,north,east}
|
||||||
|
|
||||||
|
# preselect the ratio
|
||||||
|
super + ctrl + {1-9}
|
||||||
|
bspc node -o 0.{1-9}
|
||||||
|
|
||||||
|
# cancel the preselection for the focused node
|
||||||
|
super + ctrl + space
|
||||||
|
bspc node -p cancel
|
||||||
|
|
||||||
|
# cancel the preselection for the focused desktop
|
||||||
|
super + ctrl + shift + space
|
||||||
|
bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
|
||||||
|
|
||||||
|
#
|
||||||
|
# move/resize
|
||||||
|
#
|
||||||
|
|
||||||
|
# expand a window by moving one of its side outward
|
||||||
|
super + alt + {h,j,k,l}
|
||||||
|
bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}
|
||||||
|
|
||||||
|
# contract a window by moving one of its side inward
|
||||||
|
super + alt + shift + {h,j,k,l}
|
||||||
|
bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}
|
||||||
|
|
||||||
|
# move a floating window
|
||||||
|
super + {Left,Down,Up,Right}
|
||||||
|
bspc node -v {-20 0,0 20,0 -20,20 0}
|
||||||
|
|
||||||
|
super + {equal,minus}
|
||||||
|
bspc config window_gap $(( $(bspc config window_gap) {+,-} 5 ))
|
||||||
|
|
||||||
|
super + ctrl + {Left,Right,Up,Down}
|
||||||
|
bspc node @focused:/ --rotate {270,90,180,180}
|
||||||
|
|
||||||
|
# screenshots
|
||||||
|
Print
|
||||||
|
maim -u -s -l -c 0.157,0.333,0.466,0.4 | xclip -selection clipboard -t image/png && canberra-gtk-play -i camera-shutter
|
||||||
|
|
||||||
|
# volume
|
||||||
|
XF86AudioRaiseVolume
|
||||||
|
amixer -D pulse sset Master 5%+
|
||||||
|
XF86AudioLowerVolume
|
||||||
|
amixer -D pulse sset Master 5%-
|
||||||
|
XF86AudioMute
|
||||||
|
amixer -D pulse set Master 1+ toggle
|
||||||
|
|
||||||
|
# monitor brightness
|
||||||
|
XF86MonBrightnessUp
|
||||||
|
light -A 5
|
||||||
|
XF86MonBrightnessDown
|
||||||
|
light -U 5
|
||||||
|
|
||||||
|
# music controls
|
||||||
|
XF86AudioNext
|
||||||
|
playerctl next
|
||||||
|
XF86AudioPrev
|
||||||
|
playerctl previous
|
||||||
|
XF86AudioPlay
|
||||||
|
playerctl play-pause
|
||||||
|
XF86AudioStop
|
||||||
|
playerctl stop
|
||||||
|
ctrl + alt + s
|
||||||
|
playerctl stop
|
||||||
|
|
||||||
|
# Lock Desktop
|
||||||
|
ctrl + shift + l
|
||||||
|
xset s activate
|
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Aria2 download manager
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
ExecStart=/usr/bin/aria2c --daemon --enable-rpc --rpc-listen-all --rpc-allow-origin-all --rpc-certificate %h/.config/aria2/cert.pem --private-key %h/.config/aria2/key.pem --rpc-secure --save-session %h/.config/aria2/session.lock --input-file %h/.config/aria2/session.lock --conf-path %h/.config/aria2/aria2.conf --dir %h/Downloads
|
||||||
|
RestartSec=1min
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
@ -0,0 +1,10 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=A simple clipboard manager for Wayland
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/clipman -d
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=sway-session.target
|
@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Listenbrainz scrobbler for MPD
|
||||||
|
After=mpd.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=%h/.bin/go/bin/libra
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=A lightweight Wayland notification daemon
|
||||||
|
Documentation=man:mako(1)
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/mako
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=sway-session.target
|
@ -0,0 +1,6 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=sway compositor session
|
||||||
|
Documentation=man:systemd.special(7)
|
||||||
|
BindsTo=graphical-session.target
|
||||||
|
Wants=graphical-session-pre.target
|
||||||
|
After=graphical-session-pre.target
|
@ -0,0 +1,17 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=sway - SirCmpwn's Wayland window manager
|
||||||
|
Documentation=man:sway(5)
|
||||||
|
BindsTo=graphical-session.target
|
||||||
|
Wants=graphical-session-pre.target
|
||||||
|
After=graphical-session-pre.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
EnvironmentFile=-%h/.config/sway/env
|
||||||
|
ExecStart=/usr/bin/sway
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=1
|
||||||
|
TimeoutStopSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Idle manager for Wayland
|
||||||
|
Documentation=man:swayidle(1)
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=%h/Scripts/swayidle.sh
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=sway-session.target
|
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Highly customizable Wayland bar for Sway and Wlroots based compositors.
|
||||||
|
Documentation=https://github.com/Alexays/Waybar/wiki/
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/waybar
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=sway-session.target
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,44 @@
|
|||||||
|
[options]
|
||||||
|
font = Noto Color Emoji 12
|
||||||
|
font = Material Design Icons 12
|
||||||
|
font = Hack Nerd Font 12
|
||||||
|
|
||||||
|
[colors]
|
||||||
|
|
||||||
|
# special
|
||||||
|
foreground = #d8dee9
|
||||||
|
foreground_bold = #d8dee9
|
||||||
|
cursor = #d8dee9
|
||||||
|
background = #2e3440
|
||||||
|
|
||||||
|
# black
|
||||||
|
color0 = #3b4252
|
||||||
|
color8 = #4c566a
|
||||||
|
|
||||||
|
# red
|
||||||
|
color1 = #bf616a
|
||||||
|
color9 = #bf616a
|
||||||
|
|
||||||
|
# green
|
||||||
|
color2 = #a3be8c
|
||||||
|
color10 = #a3be8c
|
||||||
|
|
||||||
|
# yellow
|
||||||
|
color3 = #ebcb8b
|
||||||
|
color11 = #ebcb8b
|
||||||
|
|
||||||
|
# blue
|
||||||
|
color4 = #81a1c1
|
||||||
|
color12 = #81a1c1
|
||||||
|
|
||||||
|
# magenta
|
||||||
|
color5 = #b48ead
|
||||||
|
color13 = #b48ead
|
||||||
|
|
||||||
|
# cyan
|
||||||
|
color6 = #88c0d0
|
||||||
|
color14 = #8fbcbb
|
||||||
|
|
||||||
|
# white
|
||||||
|
color7 = #e5e9f0
|
||||||
|
color15 = #eceff4
|
@ -0,0 +1,5 @@
|
|||||||
|
{%@@ if profile == "ReekyPC" @@%}
|
||||||
|
device_config:
|
||||||
|
- id_uuid: 10879044936567925003
|
||||||
|
ignore:true
|
||||||
|
{%@@ endif @@%}
|
@ -0,0 +1,15 @@
|
|||||||
|
# This file is written by xdg-user-dirs-update
|
||||||
|
# If you want to change or add directories, just edit the line you're
|
||||||
|
# interested in. All local changes will be retained on the next run.
|
||||||
|
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
|
||||||
|
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
|
||||||
|
# absolute path. No other format is supported.
|
||||||
|
#
|
||||||
|
XDG_DESKTOP_DIR="$HOME/Desktop"
|
||||||
|
XDG_DOWNLOAD_DIR="$HOME/Downloads"
|
||||||
|
XDG_TEMPLATES_DIR="$HOME/Templates"
|
||||||
|
XDG_PUBLICSHARE_DIR="$HOME/Public"
|
||||||
|
XDG_DOCUMENTS_DIR="$HOME/Documents"
|
||||||
|
XDG_MUSIC_DIR="$HOME/Music"
|
||||||
|
XDG_PICTURES_DIR="$HOME/Pictures"
|
||||||
|
XDG_VIDEOS_DIR="$HOME/Videos"
|
@ -0,0 +1,120 @@
|
|||||||
|
// vim: ft=jsonc
|
||||||
|
{
|
||||||
|
"layer": "bottom", // Waybar at top layer
|
||||||
|
"height": 22, // Waybar height
|
||||||
|
"modules-left": ["sway/workspaces", "sway/mode", "custom/playerctl"],
|
||||||
|
"modules-center": ["sway/window"],
|
||||||
|
"modules-right": [
|
||||||
|
"idle_inhibitor",
|
||||||
|
"pulseaudio",
|
||||||
|
"network",
|
||||||
|
"cpu",
|
||||||
|
"memory",
|
||||||
|
"battery",
|
||||||
|
"clock",
|
||||||
|
"tray"
|
||||||
|
],
|
||||||
|
// Modules configuration
|
||||||
|
"sway/workspaces": {
|
||||||
|
"disable-scroll": true,
|
||||||
|
"all-outputs": true,
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"1": "",
|
||||||
|
"2": "",
|
||||||
|
"3": "",
|
||||||
|
"4": "",
|
||||||
|
"5": "",
|
||||||
|
"urgent": "",
|
||||||
|
"focused": "",
|
||||||
|
"default": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sway/mode": {
|
||||||
|
"format": "<span style=\"italic\">{}</span>"
|
||||||
|
},
|
||||||
|
"idle_inhibitor": {
|
||||||
|
"tooltip": false,
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"activated": "",
|
||||||
|
"deactivated": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
// "icon-size": 21,
|
||||||
|
"spacing": 10
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"tooltip": false,
|
||||||
|
"format": "{:%Y-%m-%d %H:%M}"
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"tooltip": false,
|
||||||
|
"format": "{usage}% CPU"
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"tooltip": false,
|
||||||
|
"format": "{}% RAM"
|
||||||
|
},
|
||||||
|
"backlight": {
|
||||||
|
// "device": "acpi_video1",
|
||||||
|
"format": "{percent}% {icon}",
|
||||||
|
"format-icons": ["", ""]
|
||||||
|
},
|
||||||
|
"battery": {
|
||||||
|
"tooltip": false,
|
||||||
|
"states": {
|
||||||
|
// "good": 95,
|
||||||
|
"warning": 30,
|
||||||
|
"critical": 15
|
||||||
|
},
|
||||||
|
"format": "{capacity}% {icon}",
|
||||||
|
// "format-good": "", // An empty format will hide the module
|
||||||
|
// "format-full": "",
|
||||||
|
"format-icons": ["", "", "", "", ""]
|
||||||
|
},
|
||||||
|
"battery#bat2": {
|
||||||
|
"bat": "BAT2"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"tooltip": false,
|
||||||
|
"interface": "wg0",
|
||||||
|
"format-ethernet": "VPN Connected",
|
||||||
|
"format-disconnected": "VPN disconnected ⚠",
|
||||||
|
"on-click": "sudo systemctl start wg-quick@wg0.service",
|
||||||
|
"on-click-right": "sudo systemctl stop wg-quick@wg0.service",
|
||||||
|
"interval": 10
|
||||||
|
},
|
||||||
|
"pulseaudio": {
|
||||||
|
"tooltip": false,
|
||||||
|
//"scroll-step": 1,
|
||||||
|
"format": "{volume}% {icon}",
|
||||||
|
"format-bluetooth": "{volume}% {icon}",
|
||||||
|
"format-muted": "",
|
||||||
|
"format-icons": {
|
||||||
|
"headphones": "",
|
||||||
|
"handsfree": "",
|
||||||
|
"headset": "",
|
||||||
|
"phone": "",
|
||||||
|
"portable": "",
|
||||||
|
"car": "",
|
||||||
|
"default": ["", ""]
|
||||||
|
},
|
||||||
|
"on-click": "pulseaudio-ctl mute",
|
||||||
|
"on-click-right": "pavucontrol",
|
||||||
|
"on-scroll-up": "pulseaudio-ctl up",
|
||||||
|
"on-scroll-down": "pulseaudio-ctl down"
|
||||||
|
},
|
||||||
|
"custom/playerctl": {
|
||||||
|
"tooltip": false,
|
||||||
|
"format": "{}",
|
||||||
|
"exec": "$HOME/Scripts/metadata.sh",
|
||||||
|
"interval": 2,
|
||||||
|
"max-length": 40,
|
||||||
|
"on-click": "playerctl play-pause",
|
||||||
|
"on-click-right": "playerctl next",
|
||||||
|
"on-scroll-up": "playerctl volume 0.05+",
|
||||||
|
"on-scroll-down": "playerctl volume 0.05-"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,111 @@
|
|||||||
|
* {
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
font-family: "Noto Sans Display", "Font Awesome 5 Free";
|
||||||
|
font-size: 13px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background: #282828;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
|
||||||
|
#workspaces button {
|
||||||
|
padding: 0 5px;
|
||||||
|
background: transparent;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.focused {
|
||||||
|
background: #64727D;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mode {
|
||||||
|
background: #64727D;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock, #battery, #cpu, #memory, #backlight, #network, #pulseaudio, #custom-playerctl, #tray, #mode, #idle_inhibitor {
|
||||||
|
padding: 0 10px;
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock {
|
||||||
|
background-color: #64727D;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery {
|
||||||
|
background-color: #ffffff;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.charging {
|
||||||
|
color: black;
|
||||||
|
background-color: #a3be8c;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink {
|
||||||
|
to {
|
||||||
|
background-color: #ffffff;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.critical:not(.charging) {
|
||||||
|
background: #bf616a;
|
||||||
|
color: white;
|
||||||
|
animation-name: blink;
|
||||||
|
animation-duration: 0.5s;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
animation-direction: alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cpu {
|
||||||
|
background: #2ecc71;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#memory {
|
||||||
|
color: black;
|
||||||
|
background: #b48ead;
|
||||||
|
}
|
||||||
|
|
||||||
|
#backlight {
|
||||||
|
background: #90b1b1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#network {
|
||||||
|
color: black;
|
||||||
|
background: #81a1c1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#network.disconnected {
|
||||||
|
background: #f53c3c;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio {
|
||||||
|
background: #88c0d0;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio.muted {
|
||||||
|
background: #90b1b1;
|
||||||
|
color: #2a5c45;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-playerctl {
|
||||||
|
background: #a3be8c;
|
||||||
|
color: #2a5c45;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
background-color: #282828;
|
||||||
|
}
|
||||||
|
|
||||||
|
#idle_inhibitor {
|
||||||
|
background-color: #8fbcbb;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,51 @@
|
|||||||
|
[weather]
|
||||||
|
; If you have a Weather Underground API key, provide it here. When you provide an API key here,
|
||||||
|
; weather-bar will use the WU API instead of NOAA, which enables much more weather detail and more
|
||||||
|
; frequent weather updates.
|
||||||
|
;
|
||||||
|
; If you don't yet have an API key, you can sign up for their **free** "Stratus" plan, which gives
|
||||||
|
; you 500 queries per day. https://www.wunderground.com/api
|
||||||
|
weather-underground-api-key = "fde86b6cdf518288"
|
||||||
|
|
||||||
|
; By default, noaa-weather-bar will attempt to geolocate you and determine the nearest NOAA weather station
|
||||||
|
; based on this location. If the geolocation is failing or inaccurate, you can override it by providing a
|
||||||
|
; latitude and longitude (in +/- DD.dddddd format) or a NOAA station ID here.
|
||||||
|
;
|
||||||
|
; To hardcode a latitude/longitude, uncomment the following:
|
||||||
|
; latitude = 39.17851
|
||||||
|
; longitude = -96.63765
|
||||||
|
;
|
||||||
|
; To hardcode a specific ICAO or WU PWS weather station, uncomment the following:
|
||||||
|
; station = "KMHK"
|
||||||
|
; station = "KTXALAMO5"
|
||||||
|
|
||||||
|
|
||||||
|
[format]
|
||||||
|
; weather-format formats the line as displayed in your bar.
|
||||||
|
;
|
||||||
|
; Available tokens:
|
||||||
|
; ------------------------
|
||||||
|
; %temperature-fahrenheit% - Temperature in degrees Fahrenheit
|
||||||
|
; %temperature-celcius% - Temperature in degrees Celcius
|
||||||
|
; %barometer% - Barometer in millibar
|
||||||
|
; %wind-speed-mph% - Wind speed in miles/hour
|
||||||
|
; %wind-speed-kph% - Wind speed in kilometers/hour
|
||||||
|
; %wind-direction% - Wind direction in degrees
|
||||||
|
; %wind-cardinal% - Wind direction in cardinals (e.g. N, SW, WNW, etc.)
|
||||||
|
; %station-id% - NOAA station ID (e.g. KMHK)
|
||||||
|
;
|
||||||
|
; The folowing tokens are also available if you have provided your Weather Underground API
|
||||||
|
; key above (they will not work for NOAA reports):
|
||||||
|
; ----------------------------------------------------------------------------------------
|
||||||
|
; %weather% - Current general weather conditions (e.g. "Partly Cloudy")
|
||||||
|
; %wind-gust-mph% - Maximum wind gust in miles/hour
|
||||||
|
; %wind-gust-kph% - Maximum wind gust in kilometers/hour
|
||||||
|
; %humidity% - Humidity in %
|
||||||
|
; %wind-chill-fahrenheit% - Wind chill in degrees Fahrenheit
|
||||||
|
; %wind-chill-celcius% - Wind chill in degrees Celcius
|
||||||
|
; %heat-index-fahrenheit% - Heat index in degrees Fahrenheit
|
||||||
|
; %heat-index-celcius% - Heat index in degrees Celcius
|
||||||
|
; %rain-today-inches% - Rainfall today in inches
|
||||||
|
; %rain-last-hour-inches% - Rainfall in the last hour in inches
|
||||||
|
|
||||||
|
weather-format = " %station-id% %temperature-celcius%°C %wind-cardinal% @ %wind-speed-kph% kph"
|
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"aururl": "https://aur.archlinux.org",
|
||||||
|
"buildDir": "$HOME/.cache/yay",
|
||||||
|
"editor": "vim",
|
||||||
|
"editorflags": "",
|
||||||
|
"makepkgbin": "makepkg",
|
||||||
|
"makepkgconf": "",
|
||||||
|
"pacmanbin": "pacman",
|
||||||
|
"pacmanconf": "/etc/pacman.conf",
|
||||||
|
"tarbin": "bsdtar",
|
||||||
|
"redownload": "no",
|
||||||
|
"rebuild": "no",
|
||||||
|
"answerclean": "",
|
||||||
|
"answerdiff": "",
|
||||||
|
"answeredit": "",
|
||||||
|
"answerupgrade": "",
|
||||||
|
"gitbin": "git",
|
||||||
|
"gpgbin": "gpg",
|
||||||
|
"gpgflags": "",
|
||||||
|
"mflags": "",
|
||||||
|
"sortby": "votes",
|
||||||
|
"gitflags": "",
|
||||||
|
"removemake": "ask",
|
||||||
|
"requestsplitn": 150,
|
||||||
|
"sortmode": 0,
|
||||||
|
"completionrefreshtime": 7,
|
||||||
|
"sudoloop": false,
|
||||||
|
"timeupdate": false,
|
||||||
|
"devel": true,
|
||||||
|
"cleanAfter": false,
|
||||||
|
"gitclone": true,
|
||||||
|
"provides": true,
|
||||||
|
"pgpfetch": true,
|
||||||
|
"upgrademenu": true,
|
||||||
|
"cleanmenu": true,
|
||||||
|
"diffmenu": true,
|
||||||
|
"editmenu": false,
|
||||||
|
"combinedupgrade": true,
|
||||||
|
"useask": false
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue