Merge
commit
0d68784dcc
|
@ -16,4 +16,13 @@ font:
|
|||
colors:
|
||||
primary:
|
||||
foreground: '0x111111'
|
||||
background: '0xdddddd'
|
||||
background: '0xcccccc'
|
||||
normal:
|
||||
black: '0x000000'
|
||||
red: '0xcc3333'
|
||||
green: '0x33cc33'
|
||||
yellow: '0x885800'
|
||||
blue: '0x3333cc'
|
||||
magenta: '0xcc33cc'
|
||||
cyan: '0x33cccc'
|
||||
white: '0xcccccc'
|
||||
|
|
|
@ -48,12 +48,13 @@ alias df="df -kTh"
|
|||
alias fzfpac="pacman -Slq | fzf -m --preview 'pacman -Si {1}' | xargs -ro sudo pacman -S"
|
||||
alias o="xdg-open"
|
||||
alias path="echo -e ${PATH//:/\\n}" # Pretty print path variables
|
||||
alias wiki="vim +WikiIndex"
|
||||
|
||||
# Programs
|
||||
|
||||
alias feh="feh -B black --scale-down --auto-zoom"
|
||||
alias fm='pcmanfm'
|
||||
alias v="nvim"
|
||||
alias w="nvim +WikiIndex"
|
||||
alias g='git'
|
||||
alias lm='xbacklight -set'
|
||||
alias py='python'
|
||||
|
@ -64,7 +65,15 @@ alias xev='xev | grep -A2 ButtonPress' # Ignore mouse movements
|
|||
|
||||
reboot_to_windows ()
|
||||
{
|
||||
# Check if grub is installed by checking if the command exists, if it does
|
||||
# not, then assume that the system is using systemd-boot
|
||||
if grub-install --version &>/dev/null; then
|
||||
windows_title=$(grep -i windows /boot/grub/grub.cfg | cut -d "'" -f 2)
|
||||
sudo grub-reboot "$windows_title" && sudo reboot
|
||||
sudo grub-reboot "$windows_title"
|
||||
echo "Grub set to reboot to Windows"
|
||||
else
|
||||
sudo bootctl set-oneshot windows.conf
|
||||
echo "Systemd set to reboot to Windows"
|
||||
fi
|
||||
}
|
||||
alias reboot-to-windows='reboot_to_windows'
|
||||
|
|
81
.bashrc
81
.bashrc
|
@ -3,13 +3,12 @@
|
|||
|
||||
source /etc/os-release
|
||||
|
||||
# Aliases {{{
|
||||
# Load aliases dynamically
|
||||
[ -f "$HOME/.bash_aliases" ] && source "$HOME/.bash_aliases"
|
||||
# }}}
|
||||
|
||||
# Add ~/.bin to PATH
|
||||
export PATH=~/.bin:$PATH
|
||||
|
||||
# Prompt
|
||||
# Prompt {{{
|
||||
get_branch_name() {
|
||||
git symbolic-ref --quiet --short HEAD 2>/dev/null \
|
||||
|| git rev-parse --short HEAD 2>/dev/null \
|
||||
|
@ -19,16 +18,35 @@ get_git_info() {
|
|||
git rev-parse --is-inside-work-tree &>/dev/null || return
|
||||
echo -e " $(get_branch_name)"
|
||||
}
|
||||
export PS1="\u \w ❭\[$(tput sgr0)\] "
|
||||
|
||||
# History
|
||||
PS1="\u \w ❭\[$(tput sgr0)\] "
|
||||
|
||||
# Ellipsis when deep in directory
|
||||
export PROMPT_DIRTRIM=2
|
||||
|
||||
export PS1
|
||||
# }}}
|
||||
|
||||
# Path {{{
|
||||
# Add ~/.bin to PATH
|
||||
export PATH=~/.bin:$PATH
|
||||
# }}}
|
||||
|
||||
# History {{{
|
||||
export HISTCONTROL=ignoreboth:erasedups
|
||||
export HISTSIZE=500000
|
||||
# Omit `clear, ls...`; commands prepended with space
|
||||
export HISTIGNORE="clear:l: *"
|
||||
# }}}
|
||||
|
||||
# Man pages
|
||||
# Man pages {{{
|
||||
export MANWIDTH=120
|
||||
# }}}
|
||||
|
||||
# Editor {{{
|
||||
# Set vim as default editor
|
||||
export EDITOR=nvim
|
||||
# }}}
|
||||
|
||||
# Vim
|
||||
export EDITOR=vim
|
||||
|
@ -58,11 +76,50 @@ export PATH=~/.nvm/versions/node/v14.16.0/bin:$PATH
|
|||
export NVM_DIR="$HOME/.nvm"
|
||||
[[ -s "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh" --no-use
|
||||
|
||||
# X11
|
||||
# X11 {{{
|
||||
export XDG_SESSION_TYPE=X11
|
||||
export XDG_CONFIG_HOME=$HOME/.config
|
||||
# }}}
|
||||
|
||||
# Jupyter
|
||||
# Nix package manager {{{
|
||||
# Add ~/.nix-profile/bin to PATH
|
||||
export PATH=~/.nix-profile/bin:$PATH
|
||||
# }}}
|
||||
|
||||
# FZF {{{
|
||||
# Check if fzf is installed
|
||||
if [ -f "/usr/bin/fzf" ]; then
|
||||
# Fuzzy finder setup
|
||||
export FZF_COMPLETION_TRIGGER='**'
|
||||
export FZF_DEFAULT_COMMAND='ag --hidden --skip-vcs-ignores -t -g ""'
|
||||
export FZF_DEFAULT_OPTS="
|
||||
--pointer='❭'
|
||||
--height 10%
|
||||
--color=fg:-1,bg:-1"
|
||||
export FZF_CTRL_T_COMMAND="${FZF_DEFAULT_COMMAND}"
|
||||
export FZF_CTRL_T_OPTS="--preview='bat {} | head -500'"
|
||||
source /usr/share/fzf/completion.bash
|
||||
source /usr/share/fzf/key-bindings.bash
|
||||
|
||||
_fzf_setup_completion path vim
|
||||
_fzf_setup_completion path zathura
|
||||
_fzf_setup_completion path xournalpp
|
||||
_fzf_setup_completion path nvim
|
||||
else
|
||||
echo "fzf not installed"
|
||||
fi
|
||||
# }}}
|
||||
|
||||
# Node {{{
|
||||
# Move nvm folder away from home directory
|
||||
export NVM_DIR="${XDG_CONFIG_HOME}/nvm"
|
||||
# Pretty much what is in `/usr/share/nvm/init-nvm.sh` but we add the `--no-use`
|
||||
# flag to `nvm.sh` to make it lazy
|
||||
source /usr/share/nvm/nvm.sh --no-use
|
||||
source /usr/share/nvm/bash_completion
|
||||
source /usr/share/nvm/install-nvm-exec
|
||||
# }}}
|
||||
|
||||
# Jupyter {{{
|
||||
export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab
|
||||
|
||||
# Ellipsis when deep in directory
|
||||
export PROMPT_DIRTRIM=2
|
||||
# }}}
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
sudo rtcwake -m no -l -t "$(date +%s -d 'tomorrow 09:30')"
|
2
.bin/cam
2
.bin/cam
|
@ -2,4 +2,4 @@
|
|||
|
||||
# Open webcam window
|
||||
|
||||
ffplay -f v4l2 -s 640x480 -i /dev/video0 >/dev/null 2>&1 & disown
|
||||
ffplay -f v4l2 -x 640 -y 480 -i /dev/video0 >/dev/null 2>&1 & disown
|
||||
|
|
|
@ -4,6 +4,6 @@ options="nl:en\nen:nl\nnl:fr\nfr:nl\nen:fr\nfr:en\nnl:de\nde:nl"
|
|||
|
||||
selected=$(echo -e "$options" | dmenu -p "s?:t?" -i -l 0)
|
||||
|
||||
notify-send --app-name= -t 3000 "$(trans $selected -b "$(dmenu -p $selected &)" \
|
||||
notify-send --app-name= -t 3000 "$(trans "$selected" -b "$(dmenu -p "$selected" &)" \
|
||||
| tr -d '\n' \
|
||||
| xclip -sel clip -f)"
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
|
||||
# Generate menu of book filenames and save paths
|
||||
# Preview window contains metadata
|
||||
selected="$(find /home/h/doc/books/ -regex '.*\.\(pdf\|epub\|djvu\)' -type f | sort | fzf --delimiter=/ --with-nth=-1 --preview 'pdfinfo {}' --preview-window=right:70%:wrap)"
|
||||
# selected="$(find /home/h/doc/books/ -regex '.*\.\(pdf\|epub\|djvu\)' -type f | sort | fzf --delimiter=/ --with-nth=-1 --preview 'pdfinfo {}' --preview-window=right:70%:wrap)"
|
||||
selected="$(find /home/h/doc/books/ -regex '.*\.\(pdf\|epub\|djvu\)' -type f | sort | fzf --delimiter=/ --with-nth=-1)"
|
||||
|
||||
# Open and redirect output to /dev/null
|
||||
zathura "$selected" 2> /dev/null &
|
||||
zathura "$selected" --fork
|
||||
|
|
|
@ -11,11 +11,12 @@ update() {
|
|||
|
||||
font_list=$(fc-list -f "%{fullname}\n")
|
||||
|
||||
echo "$font_list" | while read -r line ; do
|
||||
echo "$font_list" | while read line ; do
|
||||
|
||||
first="$(echo "$line" | cut -d',' -f1)"
|
||||
last="$(echo "$line" | cut -d',' -f2)"
|
||||
|
||||
if "$(contains_dash "$first")"; then
|
||||
if $(contains_dash "$first"); then
|
||||
echo "$last" >> "$fn"
|
||||
else
|
||||
echo "$first" >> "$fn"
|
||||
|
@ -25,5 +26,5 @@ update() {
|
|||
|
||||
case "$1" in
|
||||
--update) update;;
|
||||
*) sort "$fn" | uniq | awk 'NF' | fzf;;
|
||||
*) cat "$fn" | sort | uniq | awk 'NF' | fzf;;
|
||||
esac
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
sudo pacman -Qtdq | sudo pacman -Rns -
|
22
.bin/pomo
22
.bin/pomo
|
@ -13,17 +13,23 @@ from argparse import ArgumentParser
|
|||
from time import sleep
|
||||
from plyer import notification
|
||||
|
||||
|
||||
def clear():
|
||||
os.system('echo -n "" > /tmp/pomo')
|
||||
|
||||
|
||||
atexit.register(clear)
|
||||
|
||||
parser = ArgumentParser()
|
||||
|
||||
parser.add_argument('-p', '--prep-duration', type=int, help='Preparation duration of a session', default=0)
|
||||
parser.add_argument('-w', '--work-duration', type=int, help='Duration of a session', default=25)
|
||||
parser.add_argument('-b', '--break-duration', type=int, help='Duration of a break', default=5)
|
||||
parser.add_argument('-r', '--repeats', type=int, help='Numer of sessions', default=1)
|
||||
parser.add_argument('-p', '--prep-duration', type=int,
|
||||
help='Pre session duration', default=0)
|
||||
parser.add_argument('-w', '--work-duration', type=int,
|
||||
help='Session duration', default=25)
|
||||
parser.add_argument('-b', '--break-duration', type=int,
|
||||
help='Break duration', default=5)
|
||||
parser.add_argument('-r', '--repeats', type=int,
|
||||
help='Numer of sessions', default=1)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
|
@ -32,16 +38,19 @@ work_duration = args.work_duration * 60
|
|||
break_duration = args.break_duration * 60
|
||||
repeats = args.repeats
|
||||
|
||||
|
||||
def make_countdown(color):
|
||||
def countdown(duration):
|
||||
while duration != 0:
|
||||
mins = duration // 60
|
||||
secs = duration % 60
|
||||
os.system('echo -n "{:s} {:02d}:{:02d} \x01" > /tmp/pomo'.format(color, mins, secs))
|
||||
# os.system('echo -n "{:s} {:02d}:{:02d} \x01" > /tmp/pomo'.format(color, mins, secs))
|
||||
os.system('echo -n "{:02d}:{:02d}" > /tmp/pomo'.format(mins, secs))
|
||||
sleep(1)
|
||||
duration -= 1
|
||||
return countdown
|
||||
|
||||
|
||||
prep_countdown = make_countdown("\x01")
|
||||
work_countdown = make_countdown("\x03")
|
||||
break_countdown = make_countdown("\x02")
|
||||
|
@ -51,7 +60,8 @@ prep_countdown(prep_duration)
|
|||
while repeats != 0:
|
||||
notification.notify(title="Get started")
|
||||
work_countdown(work_duration)
|
||||
if break_duration != 0:
|
||||
notification.notify(title="Time for a break")
|
||||
break_countdown(break_duration)
|
||||
notification.notify(title="Break is over, set a new timer")
|
||||
notification.notify(title="Break is over, back to work")
|
||||
repeats -= 1
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Script to create script
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "Script name required"
|
||||
exit
|
||||
fi
|
||||
|
||||
path="$HOME/.bin/$1"
|
||||
|
||||
# Prevent overwriting existing script
|
||||
set -o noclobber
|
||||
|
||||
# Create script
|
||||
cat > "$path" << EOF
|
||||
#!/usr/bin/env bash
|
||||
|
||||
|
||||
EOF
|
||||
|
||||
chmod +x "$path"
|
||||
|
||||
# Open script in editor on line 3
|
||||
"$EDITOR" +3 "$path"
|
|
@ -0,0 +1,4 @@
|
|||
channels:
|
||||
- conda-forge
|
||||
- defaults
|
||||
channel_priority: strict
|
|
@ -0,0 +1,4 @@
|
|||
channels:
|
||||
- conda-forge
|
||||
- defaults
|
||||
channel_priority: strict
|
|
@ -0,0 +1,12 @@
|
|||
prev_img h
|
||||
next_img l
|
||||
scroll_left L
|
||||
scroll_right H
|
||||
scroll_up J
|
||||
scroll_down K
|
||||
zoom_in j
|
||||
zoom_out k
|
||||
zoom_fit z
|
||||
zoom_default =
|
||||
mirror bar
|
||||
close q Q
|
|
@ -0,0 +1,3 @@
|
|||
feh \
|
||||
-B black \
|
||||
--auto-zoom
|
|
@ -0,0 +1,56 @@
|
|||
[General]
|
||||
buttons=@Variant(\0\0\0\x7f\0\0\0\vQList<int>\0\0\0\0\xf\0\0\0\0\0\0\0\x2\0\0\0\x3\0\0\0\x4\0\0\0\x5\0\0\0\x6\0\0\0\x12\0\0\0\x13\0\0\0\a\0\0\0\t\0\0\0\x10\0\0\0\n\0\0\0\v\0\0\0\r\0\0\0\xe)
|
||||
checkForUpdates=false
|
||||
contrastOpacity=127
|
||||
contrastUiColor=#ffffff
|
||||
copyPathAfterSave=true
|
||||
disabledTrayIcon=false
|
||||
drawColor=#ff0044
|
||||
drawFontSize=7
|
||||
drawThickness=1
|
||||
fontFamily=Inter
|
||||
saveLastRegion=true
|
||||
savePath=/home/h/doc/clips
|
||||
savePathFixed=true
|
||||
showDesktopNotification=false
|
||||
showHelp=false
|
||||
showSidePanelButton=true
|
||||
showStartupLaunchMessage=false
|
||||
startupLaunch=true
|
||||
uiColor=#484848
|
||||
undoLimit=106
|
||||
userColors=picker, #800000, #ff0000, #ffff00, #00ff00, #00ffff, #0000ff, #ffffff, #000000
|
||||
|
||||
[Shortcuts]
|
||||
TYPE_ARROW=A
|
||||
TYPE_CIRCLE=C
|
||||
TYPE_CIRCLECOUNT=
|
||||
TYPE_COMMIT_CURRENT_TOOL=Ctrl+Return
|
||||
TYPE_COPY=Ctrl+C
|
||||
TYPE_DELETE_CURRENT_TOOL=Del
|
||||
TYPE_DRAWER=D
|
||||
TYPE_EXIT=Ctrl+Q
|
||||
TYPE_IMAGEUPLOADER=Return
|
||||
TYPE_MARKER=M
|
||||
TYPE_MOVESELECTION=Ctrl+M
|
||||
TYPE_MOVE_DOWN=Down
|
||||
TYPE_MOVE_LEFT=Left
|
||||
TYPE_MOVE_RIGHT=Right
|
||||
TYPE_MOVE_UP=Up
|
||||
TYPE_OPEN_APP=Ctrl+O
|
||||
TYPE_PENCIL=P
|
||||
TYPE_PIN=
|
||||
TYPE_PIXELATE=B
|
||||
TYPE_RECTANGLE=R
|
||||
TYPE_REDO=Ctrl+Shift+Z
|
||||
TYPE_RESIZE_DOWN=Shift+Down
|
||||
TYPE_RESIZE_LEFT=Shift+Left
|
||||
TYPE_RESIZE_RIGHT=Shift+Right
|
||||
TYPE_RESIZE_UP=Shift+Up
|
||||
TYPE_SAVE=Ctrl+S
|
||||
TYPE_SELECTION=S
|
||||
TYPE_SELECTIONINDICATOR=
|
||||
TYPE_SELECT_ALL=Ctrl+A
|
||||
TYPE_TEXT=T
|
||||
TYPE_TOGGLE_PANEL=Space
|
||||
TYPE_UNDO=Ctrl+Z
|
|
@ -0,0 +1,3 @@
|
|||
set runtimepath^=~/.vim runtimepath+=~/.vim/after
|
||||
let &packpath = &runtimepath
|
||||
source ~/.vimrc
|
|
@ -0,0 +1,40 @@
|
|||
backend = "glx";
|
||||
glx-no-stencil = true;
|
||||
glx-copy-from-font = false;
|
||||
|
||||
active-opacity = 1.0;
|
||||
inactive-opacity = 0.8;
|
||||
frame-opacity = 0.8;
|
||||
inactive-opacity-override = false;
|
||||
|
||||
shadow = true;
|
||||
shadow-radius = 16;
|
||||
shadow-opacity = 0.5;
|
||||
shadow-offset-x = -16;
|
||||
shadow-offset-y = -16;
|
||||
shadow-color = "#000000"
|
||||
|
||||
fading = true;
|
||||
fade-in-step = 0.05;
|
||||
fade-out-step = 0.05;
|
||||
fade-delta = 4
|
||||
|
||||
shadow-exclude = ["class_g = 'Rofi'", "class_g = 'albert'", "class_g = 'trayer'"];
|
||||
focus-exclude = ["class_g = 'Rofi'", "class_g = 'albert'", "class_g = 'trayer'"];
|
||||
blur-background-exclude = ["class_g = 'Rofi'", "class_g = 'albert'", "class_g = 'trayer'"];
|
||||
|
||||
blur-background = true;
|
||||
blur-inactive = true;
|
||||
blur-method = "dual_kawase";
|
||||
blur-strength = 8;
|
||||
|
||||
wintypes:
|
||||
{
|
||||
dock = { shadow = false; };
|
||||
dnd = { shadow = false; };
|
||||
tooltip = { shadow = false; };
|
||||
menu = { opacity = false; };
|
||||
dropdown_menu = { opacity = false; };
|
||||
popup_menu = { opacity = false; };
|
||||
utility = { opacity = false; };
|
||||
};
|
|
@ -7,9 +7,9 @@ unmap f
|
|||
map f toggle_fullscreen
|
||||
map [fullscreen] f toggle_fullscreen
|
||||
|
||||
# Theme
|
||||
set default-bg "#ffffff"
|
||||
set default-fg "#eee"
|
||||
# Initial theme
|
||||
set default-bg "#cccccc"
|
||||
set default-fg "#111"
|
||||
set statusbar-bg "#111"
|
||||
set statusbar-fg "#777"
|
||||
set inputbar-bg "#111"
|
||||
|
@ -23,14 +23,10 @@ set completion-highlight-bg "#333"
|
|||
set highlight-fg "#ccc"
|
||||
set highlight-color "#111"
|
||||
set highlight-active-color "#333"
|
||||
|
||||
# Dark mode
|
||||
set recolor
|
||||
set recolor-darkcolor "#aaa"
|
||||
set recolor-lightcolor "#111"
|
||||
|
||||
# midnight mode
|
||||
map <F1> focus_inputbar "set default-bg \#111111"
|
||||
set index-fg "#eee"
|
||||
set index-bg "#111"
|
||||
set index-active-fg "#eee"
|
||||
set index-active-bg "#333"
|
||||
|
||||
# Hide status bar
|
||||
set guioptions none
|
||||
|
@ -38,5 +34,32 @@ set render-loading "false"
|
|||
|
||||
map J zoom out
|
||||
map K zoom in
|
||||
map i recolor
|
||||
unmap q
|
||||
|
||||
#
|
||||
# Hack for switching color themes (change default background too on recolor)
|
||||
#
|
||||
|
||||
# Default to light recolor
|
||||
set recolor
|
||||
set recolor-lightcolor "#cccccc"
|
||||
set recolor-darkcolor "#111"
|
||||
set recolor-keephue
|
||||
|
||||
# No recolor
|
||||
map <F1> focus_inputbar ":set recolor true"
|
||||
map <F2> focus_inputbar ":set recolor false"
|
||||
map <F3> focus_inputbar ":set default-bg \#fff"
|
||||
map 1 feedkeys "<F2><Return><F3><Return>"
|
||||
|
||||
# Light recolor
|
||||
map <F4> focus_inputbar ":set default-bg \#cccccc"
|
||||
map <F5> focus_inputbar ":set recolor-lightcolor \#cccccc"
|
||||
map <F6> focus_inputbar ":set recolor-darkcolor \#111"
|
||||
map 2 feedkeys "<F1><Return><F4><Return><F5><Return><F6><Return>"
|
||||
|
||||
# Dark recolor
|
||||
map <F7> focus_inputbar ":set default-bg \#111"
|
||||
map <F8> focus_inputbar ":set recolor-lightcolor \#111"
|
||||
map <F9> focus_inputbar ":set recolor-darkcolor \#aaa"
|
||||
map 3 feedkeys "<F1><Return><F7><Return><F8><Return><F9><Return>"
|
||||
|
|
256
.vimrc
256
.vimrc
|
@ -104,12 +104,13 @@ nn <leader>so :so %<cr>
|
|||
call plug#begin()
|
||||
" Coc
|
||||
Plug 'neoclide/coc.nvim', {'branch': 'release'}
|
||||
Plug 'github/copilot.vim'
|
||||
" General
|
||||
Plug 'unblevable/quick-scope'
|
||||
Plug 'tpope/vim-commentary'
|
||||
Plug 'machakann/vim-sandwich'
|
||||
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
|
||||
Plug 'junegunn/fzf.vim'
|
||||
Plug 'vimwiki/vimwiki'
|
||||
" JS and TypeScript
|
||||
Plug 'pangloss/vim-javascript', { 'for': ['javascript', 'javascript.jsx'] }
|
||||
Plug 'leafgarland/typescript-vim', { 'for': ['typescript', 'typescript.tsx'] }
|
||||
|
@ -119,6 +120,11 @@ Plug 'evanleck/vim-svelte', {'branch': 'main'}
|
|||
Plug 'neoclide/jsonc.vim'
|
||||
" LaTeX & markdown
|
||||
Plug 'lervag/vimtex'
|
||||
" Wiki
|
||||
Plug 'lervag/wiki.vim'
|
||||
Plug 'hektor/taskwiki'
|
||||
" Markdown
|
||||
Plug 'vim-pandoc/vim-pandoc'
|
||||
Plug 'vim-pandoc/vim-pandoc-syntax'
|
||||
" TidalCycles
|
||||
Plug 'supercollider/scvim'
|
||||
|
@ -129,29 +135,77 @@ call plug#end()
|
|||
"""""""""""""""
|
||||
|
||||
" Coc
|
||||
" `.../sandwich` {{{
|
||||
nmap s <Nop>
|
||||
xmap s <Nop>
|
||||
let g:sandwich#recipes = deepcopy(g:sandwich#default_recipes)
|
||||
" }}}
|
||||
|
||||
" `neoclide/coc.nvim` {{{
|
||||
let g:coc_global_extensions = [
|
||||
\'coc-dictionary',
|
||||
\'coc-syntax',
|
||||
\'coc-eslint',
|
||||
\'coc-prettier',
|
||||
\'coc-tsserver',
|
||||
\'coc-python',
|
||||
\'coc-html',
|
||||
\'coc-emmet',
|
||||
\'coc-css',
|
||||
\'coc-svg',
|
||||
\'coc-svelte',
|
||||
\'coc-jedi',
|
||||
\'coc-json',
|
||||
\'coc-markdownlint',
|
||||
\'coc-yaml',
|
||||
\'coc-snippets',
|
||||
\'coc-clangd'
|
||||
\'coc-clangd',
|
||||
\'coc-bibtex'
|
||||
\]
|
||||
" Autocomplete
|
||||
imap <tab> <Plug>(coc-snippets-expand)
|
||||
nn <leader>es :CocCommand snippets.editSnippets<cr>
|
||||
ino <silent><expr><c-j> pumvisible() ? "\<c-n>" :
|
||||
\ coc#refresh()
|
||||
ino <expr><c-k> pumvisible() ? "\<C-p>" : "k"
|
||||
"
|
||||
|
||||
" `coc-snippets`
|
||||
|
||||
" TODO: is this block even necessary anymore?
|
||||
"
|
||||
" I use `coc-snippets-exand-jump` here as it is more flexible afaics
|
||||
" As stated in the docs:
|
||||
" `coc-snippets-expand` Expand snippet w/ current inserted text
|
||||
" `coc-snippets-expand-jump` Expand snippet or jump to next placeholder of current snippet if possible
|
||||
|
||||
" Use tab for expansion in every context Don't use it for jumping as
|
||||
" expansions have priority over jumping (which is not always what you want)
|
||||
"
|
||||
" E.g. You don't want to expand `time` to say `12:05` upon `<tab>`bing to go
|
||||
" from arguments to body in a function snippet
|
||||
|
||||
inor <silent><expr> <TAB>
|
||||
\ coc#pum#visible() ? coc#_select_confirm() :
|
||||
\ coc#expandable() ? "\<C-r>=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\<CR>" :
|
||||
\ "\<TAB>"
|
||||
|
||||
" Use <c-j> and <c-k> to move through suggestions
|
||||
" Open suggestions if not yet open
|
||||
|
||||
inor <silent><expr> <c-j> coc#pum#visible() ? coc#pum#next(1) : coc#refresh()
|
||||
|
||||
" NOTE: As the followning interfered with digraphs, I replaced `coc#refresh`
|
||||
" with `"\<C-g>u\<c-k>"` which afaik just does c-k when no completion menu is
|
||||
" shown
|
||||
" ```
|
||||
" inor <silent><expr> <c-k> coc#pum#visible() ? coc#pum#prev(1) : coc#refresh()
|
||||
" ```
|
||||
|
||||
inor <silent><expr> <c-k> coc#pum#visible() ? coc#pum#prev(1) : "\<C-g>u\<c-k>"
|
||||
|
||||
" NOTE: this is cutting text in visual mode, it is replaces `$VISUAL` on next
|
||||
" expansion
|
||||
"
|
||||
" although I mapped it, I have yet to test this feature
|
||||
|
||||
vmap <tab> <Plug>(coc-snippets-select)
|
||||
|
||||
ino <expr><cr> complete_info()["selected"] != "-1" ? "\<c-y>" : "\<c-g>u\<CR>"
|
||||
|
||||
" Show doccumentation
|
||||
fu! s:show_documentation()
|
||||
if (index(['vim','help'], &filetype) >= 0)
|
||||
|
@ -160,13 +214,21 @@ fu! s:show_documentation()
|
|||
call CocAction('doHover')
|
||||
endif
|
||||
endfunction
|
||||
nnoremap K :call show_documentation()
|
||||
nn <leader>es :CocCommand snippets.editSnippets<cr>
|
||||
" Code action on cursor position
|
||||
nm <leader>do <Plug>(coc-codeaction)
|
||||
" Coc statusline
|
||||
se statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}
|
||||
" Prettier command
|
||||
" Commands
|
||||
com! -nargs=0 Prettier :CocCommand prettier.formatFile
|
||||
" }}}
|
||||
|
||||
" `.../copilot` {{{
|
||||
|
||||
let g:copilot_node_command = "/home/h/.config/nvm/versions/node/v16.18.0/bin/node"
|
||||
let g:copilot_no_tab_map = v:true
|
||||
imap <c-l> <Plug>(copilot-next)
|
||||
imap <c-h> <Plug>(copilot-prev)
|
||||
imap <silent><script><expr> <s-tab> copilot#Accept("\<CR>")
|
||||
" Show Copilot node v16 as it does not work with v18 yet
|
||||
|
||||
" LaTex
|
||||
let g:vimtex_view_method='zathura'
|
||||
|
@ -202,9 +264,77 @@ let g:fzf_colors =
|
|||
\ 'marker': ['fg', 'Keyword'],
|
||||
\ 'spinner': ['fg', 'Label'], }
|
||||
|
||||
" Wiki
|
||||
let g:vimwiki_auto_chdir = 1
|
||||
let g:vimwiki_list = [{'path': '~/.vimwiki/', 'syntax': 'markdown', 'ext': '.md'}]
|
||||
let g:ag_working_path_mode="r"
|
||||
|
||||
" }}}
|
||||
|
||||
" `vim-pandoc/vim-pandoc` {{{
|
||||
" `vim-pandoc/vim-pandoc-syntax`
|
||||
|
||||
au FileType pandoc call pandoc#completion#Init()
|
||||
let g:pandoc#filetypes#pandoc_markdown=0
|
||||
let g:pandoc#spell#enabled=0
|
||||
let g:pandoc#spell#default_langs=['en_us', 'nl_be']
|
||||
let g:pandoc#syntax#conceal#urls=1
|
||||
let g:pandoc#syntax#conceal#blacklist=[]
|
||||
let g:pandoc#formatting#mode='a'
|
||||
let g:pandoc#formatting#textwidth=90
|
||||
let g:pandoc#modules#disabled = ["formatting", "dashes", "yaml", "metadata"]
|
||||
|
||||
" }}}
|
||||
|
||||
" `lervag/wiki.vim` {{{
|
||||
|
||||
" Only load wiki.vim for wiki directory
|
||||
let g:wiki_global_load=0
|
||||
let g:wiki_root='~/.wiki'
|
||||
let g:wiki_index_name='index'
|
||||
let g:wiki_zotero_root='~/doc/Zotero'
|
||||
let g:wiki_filetypes=['md']
|
||||
let g:wiki_completion_case_sensitive=0
|
||||
|
||||
" Mappings
|
||||
" Remap <leader>p
|
||||
|
||||
augroup filetype_pandoc
|
||||
autocmd!
|
||||
au BufRead,BufNewFile /home/h/.wiki/*.md nn <buffer><leader>p :WikiFzfPages<cr>
|
||||
au BufRead,BufNewFile /home/h/.wiki/*.md nnoremap <expr><buffer> sv empty(g:wiki#link#get()) ? ':vs<CR><c-w>w' : '<Plug>(wiki-link-follow-vsplit)'
|
||||
au BufRead,BufNewFile /home/h/.wiki/*.md nnoremap <expr><buffer> ss empty(g:wiki#link#get()) ? ':sp<CR><c-w>w' : '<Plug>(wiki-link-follow-split)'
|
||||
augroup END
|
||||
|
||||
" If we are on a wiki link
|
||||
|
||||
" let g:wiki_file_handlenmap r
|
||||
|
||||
" Links
|
||||
let g:wiki_link_extension='.md'
|
||||
" Do not automatically transform to link, use `<leader>wf` for this
|
||||
let g:wiki_link_toggle_on_follow=0
|
||||
let g:wiki_link_target_type='md'
|
||||
|
||||
let g:wiki_map_text_to_link='Slugify'
|
||||
|
||||
" E.g. transform `My link` into `[My link](my-link.md)`
|
||||
function Slugify(text) abort
|
||||
return [substitute(tolower(a:text), '\s\+', '-', 'g'), a:text]
|
||||
endfunction
|
||||
|
||||
vmap <leader>wf <Plug>(wiki-link-toggle-visual)
|
||||
|
||||
" Automatically save when navigation
|
||||
let g:wiki_write_on_nav=1
|
||||
|
||||
" }}}
|
||||
|
||||
" `tools-life/taskwiki` {{{
|
||||
|
||||
let g:taskwiki_taskrc_location='/home/h/.config/task/taskrc'
|
||||
let g:taskwiki_disable_concealcursor=1
|
||||
let g:taskwiki_dont_preserve_folds=1
|
||||
let g:taskwiki_dont_fold=1
|
||||
|
||||
" }}}
|
||||
|
||||
" JS and TypeScript
|
||||
let g:javascript_plugin_jsdoc = 1 " jsdoc syntax highlighting
|
||||
|
@ -217,6 +347,13 @@ let g:svelte_indent_style = 0
|
|||
" JSONC (see https://github.com/neoclide/jsonc.vim/pull/9")
|
||||
autocmd BufNewFile,BufRead */.vscode/*.json setlocal filetype=jsonc
|
||||
|
||||
" `.../quickscope` {{{
|
||||
|
||||
let g:qs_max_chars=80
|
||||
let g:qs_lazy_highlight = 1
|
||||
|
||||
" }}}
|
||||
|
||||
" SuperCollider
|
||||
au BufEnter,BufWinEnter,BufNewFile,BufRead *.sc,*.scd se filetype=supercollider
|
||||
au Filetype supercollider packadd scvim
|
||||
|
@ -238,24 +375,89 @@ let g:fzf_action = {
|
|||
\ 'ctrl-s': 'split',
|
||||
\ 'ctrl-v': 'vsplit'
|
||||
\}
|
||||
" Insert path completion
|
||||
ino <expr><c-f> fzf#vim#complete#path('rg --files --sort path')
|
||||
|
||||
" Color theme & statusline
|
||||
""""""""""""""""""""""""""
|
||||
" }}}
|
||||
|
||||
" Color theme & statusline {{{
|
||||
"
|
||||
|
||||
se nosc
|
||||
se nosmd
|
||||
se ls=2
|
||||
se stl=\ %0*%n
|
||||
se stl+=\ %m
|
||||
se stl+=\ %y%1*
|
||||
se stl+=\ %y%0*
|
||||
se stl+=\ %<%F
|
||||
se stl+=\ %1*%=%5l%*
|
||||
se stl+=%2*/%L%*
|
||||
se stl+=\ %0*%=%5l%*
|
||||
se stl+=%0*/%L%*
|
||||
|
||||
colo simple-dark
|
||||
colo yang
|
||||
|
||||
" Other
|
||||
"""""""""""""""""""""""
|
||||
" }}}
|
||||
|
||||
" Quick hacks {{{
|
||||
"
|
||||
|
||||
fu! Compile()
|
||||
if expand('%:e') == "md"
|
||||
:silent exec "!pandoc % -s -o /tmp/op.pdf &"
|
||||
endif
|
||||
endfu
|
||||
|
||||
fu! Preview()
|
||||
:call Compile()
|
||||
:silent exec "!zathura /tmp/op.pdf &"
|
||||
endfu
|
||||
|
||||
" VIM config hot reload
|
||||
autocmd! bufwritepost .vimrc source %
|
||||
|
||||
au! bufwritepost .vimrc source $HOME/.vimrc
|
||||
|
||||
" TODO: separate to filetype specific files
|
||||
|
||||
" JS
|
||||
" Jump between `=` and `;`
|
||||
au FileType javascript set mps+==:;
|
||||
|
||||
" JSONC (see https://github.com/neoclide/jsonc.vim/pull/9")
|
||||
au BufNewFile,BufRead */.vscode/*.json setlocal filetype=jsonc
|
||||
|
||||
" Hacky way to pass on active note to script for automated for HTML preview
|
||||
au BufEnter /home/h/.wiki/*.md silent exe '!echo %:t > /home/h/.local/share/nvim/plugged/bro/current-page'
|
||||
|
||||
" }}}
|
||||
|
||||
highlight QuickScopeSecondary cterm=underline
|
||||
highlight QuickScopePrimary ctermbg=253 ctermfg=232 cterm=none
|
||||
highlight Pmenu ctermfg=232
|
||||
|
||||
function! SynGroup()
|
||||
let l:s = synID(line('.'), col('.'), 1)
|
||||
echo synIDattr(l:s, 'name') . ' -> ' . synIDattr(synIDtrans(l:s), 'name')
|
||||
endfun
|
||||
|
||||
com! -nargs=0 Syn :call SynGroup()
|
||||
|
||||
" Taken from /usr/share/vim/vim90/defaults.vim
|
||||
augroup vimStartup
|
||||
au!
|
||||
|
||||
" When editing a file, always jump to the last known cursor position.
|
||||
" Don't do it when the position is invalid, when inside an event handler
|
||||
" (happens when dropping a file on gvim) and for a commit message (it's
|
||||
" likely a different one than last time).
|
||||
autocmd BufReadPost *
|
||||
\ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit'
|
||||
\ | exe "normal! g`\""
|
||||
\ | endif
|
||||
|
||||
augroup END
|
||||
|
||||
" Highlight todo's for every filetype
|
||||
" https://stackoverflow.com/questions/11709965/vim-highlight-the-word-todo-for-every-filetype
|
||||
augroup HiglightTODO
|
||||
autocmd!
|
||||
autocmd WinEnter,VimEnter * :silent! call matchadd('Todo', 'TODO', -1)
|
||||
autocmd WinEnter,VimEnter * :silent! call matchadd('Todo', 'FIXME', -1)
|
||||
autocmd WinEnter,VimEnter * :silent! call matchadd('Todo', 'QUESTION', -1)
|
||||
augroup END
|
||||
|
|
|
@ -1,5 +1,19 @@
|
|||
# Vortex core
|
||||
# Keyboard configuration
|
||||
|
||||
Generated from [TsFreddie's MPC tool](https://tsdo.in/much-programming-core/)
|
||||
Keyboard configuration for the Vortex Core 40% keyboard.
|
||||
|
||||
![](layout.png)
|
||||
Generated using [TsFreddie's MPC tool](https://tsdo.in/much-programming-core/).
|
||||
|
||||
Note: this is assuming `Caps lock` is remapped to `Esc` on press and `Ctrl` on hold (e.g. using `caps2esc`).
|
||||
|
||||
## Layer 0
|
||||
|
||||
Macros are mainly used for shift, ctrl & alt modifiers.
|
||||
|
||||
![](l0.png)
|
||||
|
||||
## Layer 1
|
||||
|
||||
Lighting configuration layer with some macros for workspaces.
|
||||
|
||||
![](l1.png)
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 72 KiB |
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 50 KiB |
File diff suppressed because one or more lines are too long
21
.xmobarrc
21
.xmobarrc
|
@ -1,13 +1,21 @@
|
|||
Config { overrideRedirect = False
|
||||
, font = "xft:Iosevka Term SS08:size=12:antialias=true"
|
||||
, bgColor = "#111"
|
||||
, fgColor = "#ccc"
|
||||
, position = TopW L 90
|
||||
, bgColor = "#cccccc"
|
||||
, fgColor = "#111"
|
||||
, position = TopW L 100
|
||||
, commands = [ Run Cpu
|
||||
[ "-L", "3"
|
||||
, "-H", "50"
|
||||
, "--high" , "red"
|
||||
, "--normal", "green"
|
||||
] 10
|
||||
, Run Battery [
|
||||
"-t", "<acstatus>: <left>% - <timeleft>",
|
||||
"--",
|
||||
--"-c", "charge_full",
|
||||
"-O", "AC",
|
||||
"-o", "Bat",
|
||||
"-h", "green",
|
||||
"-l", "red"
|
||||
] 10
|
||||
, Run Alsa "default" "Master"
|
||||
[ "--template", "Vol: <volumestatus>"
|
||||
|
@ -17,9 +25,12 @@ Config { overrideRedirect = False
|
|||
]
|
||||
, Run Memory ["--template", "Mem: <usedratio>%"] 10
|
||||
, Run Date "%a %Y-%m-%d %H:%M" "date" 10
|
||||
, Run Com "sb-pomo" [] "pomo" 10
|
||||
, Run Com "sb-anki" [] "anki" 10
|
||||
, Run Com "sb-tasks" [] "tasks" 10
|
||||
, Run XMonadLog
|
||||
]
|
||||
, sepChar = "%"
|
||||
, alignSep = "}{"
|
||||
, template = "%XMonadLog% }{ %alsa:default:Master% | %cpu% | %memory% | %date% "
|
||||
, template = "%XMonadLog%%anki%%pomo%%tasks% }{ %alsa:default:Master% | %battery% | %date%"
|
||||
}
|
||||
|
|
|
@ -1,45 +1,99 @@
|
|||
import XMonad
|
||||
import XMonad.Hooks.DynamicLog
|
||||
import XMonad.Hooks.EwmhDesktops
|
||||
import XMonad.Hooks.ManageDocks
|
||||
import XMonad.Layout.NoBorders (smartBorders)
|
||||
|
||||
import XMonad.Layout.Magnifier
|
||||
import qualified XMonad.Layout.Magnifier as Mag (MagnifyMsg (..))
|
||||
import XMonad.Layout.Spacing
|
||||
import XMonad.Layout.Tabbed (Theme (..), shrinkText,
|
||||
tabbedAlways)
|
||||
import XMonad.Layout.ThreeColumns
|
||||
import XMonad.Layout.ToggleLayouts (ToggleLayout (..), toggleLayouts)
|
||||
import XMonad.Layout.WindowArranger
|
||||
|
||||
import XMonad.Util.EZConfig
|
||||
import XMonad.Util.Loggers
|
||||
import XMonad.Util.Paste
|
||||
import XMonad.Util.Run (spawnPipe)
|
||||
import XMonad.Util.Ungrab
|
||||
|
||||
import XMonad.Actions.CycleWS
|
||||
import XMonad.Actions.WindowGo
|
||||
|
||||
import XMonad.Hooks.ManageHelpers
|
||||
import XMonad.Hooks.ScreenCorners
|
||||
import XMonad.Hooks.StatusBar
|
||||
import XMonad.Hooks.StatusBar.PP
|
||||
|
||||
import qualified XMonad.Util.Hacks as Hacks
|
||||
|
||||
-- EWMH compliance
|
||||
import XMonad.Hooks.EwmhDesktops
|
||||
|
||||
import qualified Data.Map.Strict as M
|
||||
import XMonad.Layout.Magnifier
|
||||
import qualified XMonad.Layout.Magnifier as Mag (MagnifyMsg (..))
|
||||
import XMonad.Layout.NoBorders (hasBorder, smartBorders)
|
||||
import XMonad.Layout.PerScreen
|
||||
import XMonad.Layout.ResizableTile
|
||||
import XMonad.Layout.Spacing
|
||||
import XMonad.Layout.ThreeColumns
|
||||
import XMonad.Layout.ToggleLayouts
|
||||
( ToggleLayout (..),
|
||||
toggleLayouts,
|
||||
)
|
||||
import XMonad.Layout.WindowNavigation
|
||||
import qualified XMonad.StackSet as W
|
||||
import XMonad.Util.EZConfig
|
||||
import qualified XMonad.Util.Hacks as Hacks
|
||||
import XMonad.Util.Loggers
|
||||
import XMonad.Util.Paste
|
||||
import XMonad.Util.Run
|
||||
( spawnExternalProcess,
|
||||
spawnPipe,
|
||||
)
|
||||
import XMonad.Util.Ungrab
|
||||
|
||||
-- Magnifier is off by default (can be controlled using arrow keys)
|
||||
myLayout = smartBorders $
|
||||
threeColMid |||
|
||||
magnifiercz magnificationFactorH tiled |||
|
||||
magnifiercz magnificationFactorV (Mirror tiled) |||
|
||||
Full
|
||||
-- Statusbar
|
||||
myXmobarPP :: PP
|
||||
myXmobarPP =
|
||||
def
|
||||
{ ppSep = tertiaryColor " | ",
|
||||
ppCurrent = brackitify,
|
||||
ppHidden = secondaryColor,
|
||||
ppHiddenNoWindows = tertiaryColor,
|
||||
ppUrgent = red . wrap (yellow "!") (yellow "!"),
|
||||
ppLayout = \l -> case l of
|
||||
"Tall" -> "[]="
|
||||
"Magnifier Tall" -> "[]+"
|
||||
"Magnifier (off) Tall" -> "[]="
|
||||
"Magnifier Mirror Tall" -> "+[]"
|
||||
"Magnifier (off) Mirror Tall" -> "=[]"
|
||||
"Full" -> "[ ]"
|
||||
"ThreeCol" -> "|||"
|
||||
_ -> l,
|
||||
ppTitle = shorten 80,
|
||||
ppTitleSanitize = xmobarStrip,
|
||||
ppOrder = \[ws, l, _, wins] -> [ws, l, wins],
|
||||
ppExtras = [logTitles formatFocused formatUnfocused]
|
||||
}
|
||||
where
|
||||
brackitify = wrap "[" "]"
|
||||
formatFocused = secondaryColor . brackitify . ppWindow
|
||||
formatUnfocused = tertiaryColor . ppWindow
|
||||
|
||||
ppWindow = xmobarRaw . (\w -> if null w then "Untitled" else w) . shorten 16
|
||||
|
||||
primaryColor = xmobarColor "#000000" ""
|
||||
secondaryColor = xmobarColor "#333333" ""
|
||||
tertiaryColor = xmobarColor "#555555" ""
|
||||
yellow = xmobarColor "#ff0" ""
|
||||
red = xmobarColor "#ff5555" ""
|
||||
|
||||
-- Shift to workspace and view workspace
|
||||
shiftAndView id = doF (W.view id) <> doF (W.shift id)
|
||||
|
||||
-- manageHook
|
||||
myManageHook =
|
||||
composeAll
|
||||
[ className =? "Zathura" --> doShift "pdf",
|
||||
className =? "firefox" --> shiftAndView "www",
|
||||
className =? "Anki" --> shiftAndView "etc",
|
||||
className =? "Obsidian" --> shiftAndView "etc",
|
||||
className =? "Launcher" --> doRectFloat (W.RationalRect 0.05 0.4 0.9 0.5),
|
||||
className =? "Calculator" --> doCenterFloat,
|
||||
className =? "feh" --> doCenterFloat,
|
||||
className =? "albert" --> hasBorder False,
|
||||
className =? "Xournalpp" --> doRectFloat (W.RationalRect 0.5 0.5 0.5 0.5)
|
||||
]
|
||||
|
||||
-- layoutHook
|
||||
myLayoutHook =
|
||||
smartBorders $
|
||||
-- Column layouts
|
||||
threeCol
|
||||
||| threeColMid
|
||||
-- Tiled layouts
|
||||
-- Note: magnifier is off by default
|
||||
-- (controllable usingarrow keys)
|
||||
||| magnifiercz magnificationFactorH tiled
|
||||
||| magnifiercz magnificationFactorV (Mirror tiled)
|
||||
-- Single window / monocle layout
|
||||
||| Full
|
||||
where
|
||||
magnificationFactorV = 1.384
|
||||
magnificationFactorH = 1.621
|
||||
|
@ -50,121 +104,100 @@ myLayout = smartBorders $
|
|||
ratio = 1 / 2
|
||||
delta = 4 / 100
|
||||
|
||||
myStartupHook = do
|
||||
addScreenCorners [ (SCUpperRight, nextWS)
|
||||
, (SCUpperLeft, prevWS)
|
||||
]
|
||||
|
||||
myManageHook = composeAll
|
||||
[ className =? "Zathura" --> doShift "ε"
|
||||
, className =? "Launcher" --> doRectFloat (W.RationalRect 0.05 0.4 0.9 0.5)
|
||||
]
|
||||
|
||||
myConfig = def
|
||||
{
|
||||
terminal = "alacritty"
|
||||
|
||||
myConfig =
|
||||
def
|
||||
{ terminal = "alacritty",
|
||||
-- Use Win key instead of Alt
|
||||
, modMask = mod4Mask
|
||||
, workspaces = ["α", "β", "γ", "δ", "ε", "ζ", "η"]
|
||||
|
||||
modMask = mod4Mask,
|
||||
-- , workspaces = ["α", "β", "γ", "δ", "ε", "ζ", "η"]
|
||||
workspaces =
|
||||
[ "sh",
|
||||
"www",
|
||||
"dev",
|
||||
-- "nix",
|
||||
"pdf",
|
||||
"etc"
|
||||
],
|
||||
-- Styling
|
||||
, focusedBorderColor = "#888"
|
||||
, normalBorderColor = "#000"
|
||||
, borderWidth = 2
|
||||
|
||||
focusedBorderColor = "#888",
|
||||
normalBorderColor = "#000",
|
||||
borderWidth = 2,
|
||||
-- Hooks
|
||||
, startupHook = myStartupHook
|
||||
, manageHook = myManageHook <+> manageHook def
|
||||
, layoutHook = screenCornerLayoutHook $ avoidStruts myLayout
|
||||
, handleEventHook = handleEventHook def <> Hacks.windowedFullscreenFixEventHook <+> screenCornerEventHook
|
||||
} `additionalKeysP` myKeysP
|
||||
manageHook = myManageHook <+> manageHook def,
|
||||
layoutHook = avoidStruts myLayoutHook,
|
||||
handleEventHook = handleEventHook def <> Hacks.windowedFullscreenFixEventHook
|
||||
}
|
||||
`additionalKeysP` myKeysP
|
||||
`removeKeysP` myRemoveKeysP
|
||||
|
||||
-- Keybindings to be added/overridden
|
||||
myKeysP = [
|
||||
-- Fit floating windows back to layout
|
||||
("M-S-<Space>", withFocused $ windows . W.sink)
|
||||
|
||||
-- Use rofi to launch programs
|
||||
, ("M-p", spawn "launcher")
|
||||
|
||||
myKeysP =
|
||||
[ -- Fit floating windows back to layout
|
||||
("M-S-<Space>", withFocused $ windows . W.sink),
|
||||
-- Launchers
|
||||
("M-S-p", spawn "alacritty --class Launcher,Launcher"),
|
||||
("M-p", spawn "albert toggle"),
|
||||
-- Map insert key to paste from clipboard
|
||||
, ("<Insert>", pasteSelection)
|
||||
|
||||
("<Insert>", pasteSelection),
|
||||
-- Map print screen to take a screenshot with flameshot
|
||||
, ("<Print>", spawn "flameshot gui")
|
||||
|
||||
("<Print>", spawn "flameshot gui"),
|
||||
-- Map audio keys to control volume
|
||||
, ("<XF86AudioRaiseVolume>", spawn "pactl set-sink-volume @DEFAULT_SINK@ +5%")
|
||||
, ("<XF86AudioLowerVolume>", spawn "pactl set-sink-volume @DEFAULT_SINK@ -5%")
|
||||
, ("<XF86AudioMute>", spawn "pactl set-sink-mute @DEFAULT_SINK@ toggle")
|
||||
|
||||
("<XF86AudioRaiseVolume>", spawn "pactl set-sink-volume @DEFAULT_SINK@ +5%"),
|
||||
("<XF86AudioLowerVolume>", spawn "pactl set-sink-volume @DEFAULT_SINK@ -5%"),
|
||||
("<XF86AudioMute>", spawn "pactl set-sink-mute @DEFAULT_SINK@ toggle"),
|
||||
-- Map brightness keys to control brightness with brightnessctl
|
||||
, ("<XF86MonBrightnessUp>", spawn "brightnessctl set 20+")
|
||||
, ("<XF86MonBrightnessDown>", spawn "brightnessctl set 20-")
|
||||
|
||||
("<XF86MonBrightnessUp>", spawn "brightnessctl set 20+"),
|
||||
("<XF86MonBrightnessDown>", spawn "brightnessctl set 20-"),
|
||||
-- Map brightness keys + shift to adjust redshift temperature
|
||||
, ("S-<XF86MonBrightnessUp>", spawn "echo $(($(cat /tmp/temperature) + 50)) > /tmp/temperature && redshift -O $(cat /tmp/temperature) -P && notify < /tmp/temperature -h string:x-canonical-private-synchronous:anything")
|
||||
, ("S-<XF86MonBrightnessDown>", spawn "echo $(($(cat /tmp/temperature) - 50)) > /tmp/temperature && redshift -O $(cat /tmp/temperature) -P && notify < /tmp/temperature -h string:x-canonical-private-synchronous:anything")
|
||||
|
||||
("S-<XF86MonBrightnessUp>", spawn "echo $(($(cat /tmp/temperature) + 50)) > /tmp/temperature && redshift -O $(cat /tmp/temperature) -P && notify < /tmp/temperature -h string:x-canonical-private-synchronous:anything"),
|
||||
("S-<XF86MonBrightnessDown>", spawn "echo $(($(cat /tmp/temperature) - 50)) > /tmp/temperature && redshift -O $(cat /tmp/temperature) -P && notify < /tmp/temperature -h string:x-canonical-private-synchronous:anything"),
|
||||
-- Reset redshift temperature
|
||||
, ("M-S-<XF86MonBrightnessUp>", spawn "echo 3000 > /tmp/temperature && redshift -x")
|
||||
, ("M-S-<XF86MonBrightnessDown>", spawn "echo 3000 > /tmp/temperature && redshift -x")
|
||||
|
||||
("M-S-<XF86MonBrightnessUp>", spawn "echo 3000 > /tmp/temperature && redshift -x"),
|
||||
("M-S-<XF86MonBrightnessDown>", spawn "echo 3000 > /tmp/temperature && redshift -x"),
|
||||
-- Use power down key to suspend
|
||||
, ("<XF86PowerOff>", spawn "systemctl suspend")
|
||||
|
||||
("<XF86PowerOff>", spawn "systemctl suspend"),
|
||||
-- FIXME: Spawn firefox in fullscreen, but not in kiosk mode
|
||||
, ("M-S-b", spawn "firefox --fullscreen")
|
||||
|
||||
("M-S-b", spawn "firefox --fullscreen"),
|
||||
-- Magnify window using arrow keys
|
||||
, ("M-=", sendMessage MagnifyMore >> sendMessage Mag.ToggleOn)
|
||||
, ("M--", sendMessage MagnifyLess >> sendMessage Mag.ToggleOn)
|
||||
("M-=", sendMessage MagnifyMore >> sendMessage Mag.ToggleOn),
|
||||
("M--", sendMessage MagnifyLess >> sendMessage Mag.ToggleOn),
|
||||
-- Reset magnification
|
||||
, ("M-S-=", sendMessage Mag.ToggleOff)
|
||||
|
||||
, ("M-t", sendMessage $ JumpToLayout "Tall")
|
||||
, ("M-f", sendMessage $ JumpToLayout "Full")
|
||||
, ("M-S-\\", sendMessage $ JumpToLayout "ThreeCol")
|
||||
|
||||
("M-S-=", sendMessage Mag.ToggleOff),
|
||||
("<XF86Calculator>", spawn "alacritty --class 'Calculator' -e ipython -i /home/h/.bin/calc.py"),
|
||||
-- playerctl ncspot using arrow keys
|
||||
("M-<Right>", spawn "playerctl next"),
|
||||
("M-<Left>", spawn "playerctl previous"),
|
||||
("M-<Up>", spawn "playerctl play"),
|
||||
("M-<Down>", spawn "playerctl pause"),
|
||||
-- Use a,s,d,f,g to switch to workspaces
|
||||
("M-a", windows $ W.greedyView "sh"),
|
||||
("M-s", windows $ W.greedyView "www"),
|
||||
("M-d", windows $ W.greedyView "dev"),
|
||||
("M-f", windows $ W.greedyView "pdf"),
|
||||
("M-g", windows $ W.greedyView "etc"),
|
||||
-- Use shift + a,s,d,f,g to move window to workspace
|
||||
("M-S-a", windows $ W.shift "sh"),
|
||||
("M-S-s", windows $ W.shift "www"),
|
||||
("M-S-d", windows $ W.shift "dev"),
|
||||
("M-S-f", windows $ W.shift "pdf"),
|
||||
("M-S-g", windows $ W.shift "etc")
|
||||
]
|
||||
|
||||
-- Keybindings to be removed
|
||||
myRemoveKeysP = [ "M-t" ]
|
||||
|
||||
myXmobarPP :: PP
|
||||
myXmobarPP = def
|
||||
{ ppSep = tertiaryColor " | "
|
||||
, ppTitleSanitize = xmobarStrip
|
||||
, ppCurrent = brackitify
|
||||
, ppHidden = secondaryColor . wrap " " ""
|
||||
, ppHiddenNoWindows = secondaryColor . wrap " " ""
|
||||
, ppUrgent = red . wrap (yellow "!") (yellow "!")
|
||||
, ppLayout = \l -> case l of "Tall" -> "[]="
|
||||
"Magnifier Tall" -> "[]+"
|
||||
"Magnifier Mirror Tall" -> "+[]"
|
||||
"Full" -> "[ ]"
|
||||
"ThreeCol" -> "|||"
|
||||
_ -> l
|
||||
, ppTitle = shorten 80
|
||||
, ppOrder = \[ws, l, _, wins] -> [ws, l, wins]
|
||||
, ppExtras = [logTitles formatFocused formatUnfocused]
|
||||
}
|
||||
where
|
||||
|
||||
brackitify = wrap "[" "]"
|
||||
formatFocused = primaryColor . brackitify . ppWindow
|
||||
formatUnfocused = secondaryColor . brackitify . ppWindow
|
||||
|
||||
ppWindow = xmobarRaw . (\w -> if null w then "Untitled" else w) . shorten 30
|
||||
|
||||
primaryColor = xmobarColor "#eeeeee" ""
|
||||
secondaryColor = xmobarColor "#888888" ""
|
||||
tertiaryColor = xmobarColor "#555555" ""
|
||||
white = xmobarColor "#ffffff" ""
|
||||
yellow = xmobarColor "#ff0" ""
|
||||
red = xmobarColor "#ff5555" ""
|
||||
myRemoveKeysP =
|
||||
[ -- Remove 1,2,3,4,5 bindings for workspaces
|
||||
"M-1",
|
||||
"M-2",
|
||||
"M-3",
|
||||
"M-4",
|
||||
"M-5",
|
||||
-- Remove shift + 1,2,3,4,5 bindings for workspaces
|
||||
"M-S-1",
|
||||
"M-S-2",
|
||||
"M-S-3",
|
||||
"M-S-4",
|
||||
"M-S-5"
|
||||
]
|
||||
|
||||
main :: IO ()
|
||||
main = do xmonad $ docks $ ewmh $ withEasySB (statusBarProp "xmobar" (pure myXmobarPP)) defToggleStrutsKey myConfig
|
||||
|
|
Loading…
Reference in New Issue