Compare commits

...

4 commits

Author SHA1 Message Date
9f5bca4a62
sh: Move gopath to cache
Moved the location of the gopath environment variable to point to the
user's cache to it can be cleaned more easily when cleaning cache and
also does not litter the project directory.
2023-01-31 10:15:10 +01:00
989886a936
nvim: Replace slime et al with magma
So far, my repl integration consisted of vim-slime and vim-ipython-cell.
I am basically purely working in the python repl for now and while the
two plugins (together with tmux) *worked* they didn't work well enough
that I used them in an extensive way. Just as often as I could make use
of their productivity enhacements, I had to wrangle with the plugins
themselves to get what I wanted out of them.

Hence the switch to magma. It integrates more deeply into python, and
neovim both - showing cell outputs in floating windows and so on.

It does not, on its own, recognize e.g. jupyter cells or quarto code
cells, so I have set up some simple key binds to improve
inter-operability between those. Especially [r and ]r to jump between
quarto cells and <localleader>R to execute the contents of the cell the
cursor is currently in may be of interest. They are fairly crude and
probably have edge cases where they will not work but until then they
provide an easy quality of life improvement.

Lastly, I silently added a plugin for markdown previews (that also
scrolls with the editing cursor). I don't foresee myself using it *too*
often but it might come handy for smaller articles and writing. It can
be invoked with <localleader>mp - a binding which I will no doubt also
have to overhaul at some point.
2023-01-31 10:06:55 +01:00
d4bbf7b573
sh: Greatly simplify ssh agent configuration
Whereas before there was a giant script (which worked well enough)
looking for and activating necessary ssh agents, all of it has been
replaced with a single invocation of the gpg-agent - which I have turned
into an ssh-enabled agent through its configuration file.

That means, first: I can massively simplify the looking for ssh agents
and since I am using fixed credentials (private keys supplied through
ssh host configurations) for most servers anyway it should not disrupt
my workflow and, second: I can use my private gpg key to log in to
servers if I set it up correctly.
2023-01-31 10:02:44 +01:00
953fdaaf1e
iosevka: Fix font naming scheme update
New versions of Iosevka seem to not be callable simply through 'Iosevka'
as before but require the full 'Iosevka Nerd Font' terminus for my case
of having the archlinux nerdfont package for the font installed.

This commit fixes wrong fonts in wayland and the wezterm terminal as
well as a longer running issue in mpv so they all correctly display
Iosevka.
2023-01-19 18:29:34 +01:00
7 changed files with 56 additions and 273 deletions

View file

@ -11,7 +11,7 @@
</alias>
<alias>
<family>monospace</family>
<prefer><family>Iosevka</family></prefer>
<prefer><family>Iosevka Nerd Font</family></prefer>
</alias>
<alias>
<family>fantasy</family>

View file

@ -35,8 +35,8 @@ screenshot-tag-colorspace=yes
osc=no
osd-bar=no
osd-font='Iosevka Mono'
osd-font-size=16
osd-font='Iosevka Nerd Font'
osd-font-size=15
### Subtitles

View file

@ -178,12 +178,13 @@ vim.g.nv_fzf_binds = {
map.n.nore['<leader>n'] = ':NV<cr>'
map.n.nore['<leader>N'] = ':NV!<cr>'
-- Mostly dealing with Prose writing from here on out
-- Format current Paragraph (esp useful in prose writing)
map.n.nore.silent['<localleader>q'] = 'gqap'
map.x.nore.silent['<localleader>q'] = 'gq'
map.n.nore.silent['<localleader>Q'] = 'vapJgqap'
map.n.silent['<localleader>mp'] = '<Plug>MarkdownPreviewToggle'
-- FORMAT code with
-- PLUGIN: formatter.nvim
map.n.nore.silent['<localleader>f'] = ':FormatLock<cr>'
@ -248,21 +249,22 @@ map.n.nore['<leader>ww'] = [[:lua require 'zettelkasten'.index_open()<cr> ]]
-- create a lazygit window, set up in toggleterm settings
map.n.nore['<leader>G'] = ':Lazygit<cr>'
-- PLUGIN: slime and ipython-cell
-- send line / region, not adhering to cells
map.n['<leader>cs'] = '<Plug>SlimeLineSend'
map.x['<leader>cs'] = '<Plug>SlimeRegionSend'
-- send complete script to repl / benchmark execution
map.n.nore['<leader>cr'] = ':IPythonCellRun<cr>'
map.n.nore['<leader>cR'] = ':IPythonCellRunTime<cr>'
-- send current cell / send and go to next
map.n.nore['<leader>cc'] = ':IPythonCellExecuteCellVerbose<cr>'
map.n.nore['<leader>C'] = ':IPythonCellExecuteCellVerboseJump<cr>'
-- clear ipython repl
map.n.nore['<leader>cl'] = ':IPythonCellClear<cr>'
-- jump to previous/ next cell
map.n.nore[']c'] = ':IPythonCellNextCell<cr>'
map.n.nore['[c'] = ':IPythonCellPrevCell<cr>'
-- PLUGIN: magma-nvim
-- Operate jupyter notebooks from within vim
map.n.nore.silent['<localleader>rr'] = ':MagmaEvaluateLine<cr>'
map.n.nore.silent['<localleader>R'] = '?^```{<cr>jV/```<cr>k:<C-u>MagmaEvaluateVisual<cr>'
map.x.nore.silent['<localleader>r'] = ':<C-u>MagmaEvaluateVisual<cr>'
map.n.nore.expr.silent['<localleader>r'] = "nvim_exec('MagmaEvaluateOperator', v:true)"
map.n.nore.silent['<localleader>re'] = ':MagmaReevaluateCell<cr>'
map.n.nore.silent['<localleader>ro'] = ':MagmaShowOutput<cr>'
map.n.nore.silent['<localleader>rq'] = ':noautocmd :MagmaEnterOutput<cr>'
map.n.nore.silent['<localleader>rc'] = ':MagmaDelete<cr>'
map.n.nore.silent['<localleader>rd'] = ':MagmaInterrupt<cr>'
map.n.nore.silent['<localleader>rO'] = ':lua vim.g.magma_automatically_open_output = not(vim.g.magma_automatically_open_output)<cr>'
-- jump to beginning of previous/ next cell code
map.n.nore[']r'] = '/^```{<cr>}:nohl<cr>'
map.n.nore['[r'] = '?^```n<cr>}:nohl<cr>'
-- insert cell header above/below
map.n.nore['<leader>cO'] = ':IPythonCellInsertAbove<cr>a'
map.n.nore['<leader>co'] = ':IPythonCellInsertBelow<cr>a'

View file

@ -115,6 +115,10 @@ require("packer").startup(function()
use { 'folke/zen-mode.nvim', config = require('zen-mode').setup() } -- provide distraction free writing
use 'folke/twilight.nvim' -- provide even distraction free-er writing (lowlight paragraphs)
use 'alok/notational-fzf-vim' -- quickly search through the wiki
use({
"iamcco/markdown-preview.nvim", -- generate an auto-updating html preview for md files
run = function() vim.fn["mkdp#util#install"]() end
})
-- languages
use { 'euclidianAce/BetterLua.vim', ft = 'lua' } -- better syntax highlighting for lua
@ -122,28 +126,14 @@ require("packer").startup(function()
-- REPL work
use {
'jpalardy/vim-slime', -- send arbitrary code chunks to REPLs
'WhiteBlackGoose/magma-nvim-goose',
run = ":UpdateRemotePlugins",
config = function()
vim.g.slime_target = 'tmux'
vim.g.slime_paste_file = vim.fn.tempname()
vim.g.slime_default_config = {
socket_name = "default",
target_pane = "{last}"
}
vim.g.slime_python_ipython = 1
vim.g.slime_no_mappings = 1
end
}
use {
'hanschen/vim-ipython-cell', -- send code 'cells' to REPL
ft = "python",
config = function()
vim.g.ipython_cell_highlight_cells_ft = {'python'}
vim.g.ipython_cell_insert_tag = "## Cell"
vim.g.magma_image_provider = "kitty"
vim.g.magma_automatically_open_output = false
end
}
--
-- nvim plugs
use {
'echasnovski/mini.nvim',

View file

@ -1,214 +1,5 @@
#!/bin/bash
#!/usr/bin/env bash
## Integration at the Bottom
# Copyright (C) 2011 by Wayne Walker <wwalker@solid-constructs.com>
#
# Released under one of the versions of the MIT License.
#
# Copyright (C) 2011 by Wayne Walker <wwalker@solid-constructs.com>
#
# 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.
_LIVE_AGENT_LIST=""
declare -a _LIVE_AGENT_SOCK_LIST
_LIVE_AGENT_SOCK_LIST=()
_debug_print() {
if [[ $_DEBUG -gt 0 ]]; then
printf "%s\n" "$1"
fi
}
find_all_ssh_agent_sockets() {
_SSH_AGENT_SOCKETS=$(find /tmp/ -type s -name agent.\* 2>/dev/null | grep '/tmp/ssh-.*/agent.*')
_debug_print "$_SSH_AGENT_SOCKETS"
}
find_all_gpg_agent_sockets() {
_GPG_AGENT_SOCKETS=$(find /tmp/ -type s -name S.gpg-agent.ssh 2>/dev/null | grep '/tmp/gpg-.*/S.gpg-agent.ssh')
_debug_print "$_GPG_AGENT_SOCKETS"
}
find_all_gnome_keyring_agent_sockets() {
_GNOME_KEYRING_AGENT_SOCKETS=$(find /tmp/ -type s -name "ssh" 2>/dev/null | grep '/tmp/keyring-.*/ssh$')
_debug_print "$_GNOME_KEYRING_AGENT_SOCKETS"
}
find_all_osx_keychain_agent_sockets() {
[[ -n "$TMPDIR" ]] || TMPDIR=/tmp
_OSX_KEYCHAIN_AGENT_SOCKETS=$(find $TMPDIR/ -type s -regex '.*/ssh-.*/agent..*$' 2>/dev/null)
_debug_print "$_OSX_KEYCHAIN_AGENT_SOCKETS"
}
test_agent_socket() {
local SOCKET=$1
SSH_AUTH_SOCK=$SOCKET ssh-add -l 2>/dev/null >/dev/null
result=$?
_debug_print $result
if [[ $result -eq 0 ]]; then
# contactible and has keys loaded
_KEY_COUNT=$(SSH_AUTH_SOCK=$SOCKET ssh-add -l | wc -l | tr -d ' ')
fi
if [[ $result -eq 1 ]]; then
# contactible butno keys loaded
_KEY_COUNT=0
fi
if [ $result -eq 0 ] || [ $result -eq 1 ]; then
if [[ -n "$_LIVE_AGENT_LIST" ]]; then
_LIVE_AGENT_LIST="${_LIVE_AGENT_LIST} ${SOCKET}:$_KEY_COUNT"
else
_LIVE_AGENT_LIST="${SOCKET}:$_KEY_COUNT"
fi
return 0
fi
return 1
}
find_live_gnome_keyring_agents() {
for i in $_GNOME_KEYRING_AGENT_SOCKETS; do
test_agent_socket "$i"
done
}
find_live_osx_keychain_agents() {
for i in $_OSX_KEYCHAIN_AGENT_SOCKETS; do
test_agent_socket "$i"
done
}
find_live_gpg_agents() {
for i in $_GPG_AGENT_SOCKETS; do
test_agent_socket "$i"
done
}
find_live_ssh_agents() {
for i in $_SSH_AGENT_SOCKETS; do
test_agent_socket "$i"
done
}
function fingerprints() {
local file="$1"
while read -r l; do
[[ -n $l && ${l###} == "$l" ]] && ssh-keygen -l -f /dev/stdin <<<"$l"
done <"$file"
}
find_all_agent_sockets() {
_SHOW_IDENTITY=0
if [ "$1" = "-i" ]; then
_SHOW_IDENTITY=1
fi
_LIVE_AGENT_LIST=
find_all_ssh_agent_sockets
find_all_gpg_agent_sockets
find_all_gnome_keyring_agent_sockets
find_all_osx_keychain_agent_sockets
find_live_ssh_agents
find_live_gpg_agents
find_live_gnome_keyring_agents
find_live_osx_keychain_agents
_debug_print "$_LIVE_AGENT_LIST"
_LIVE_AGENT_LIST=$(echo "$_LIVE_AGENT_LIST" | tr ' ' '\n' | sort -n -t: -k 2 -k 1 | uniq)
_LIVE_AGENT_SOCK_LIST=()
_debug_print "SORTED: $_LIVE_AGENT_LIST"
if [[ $_SHOW_IDENTITY -gt 0 ]]; then
i=0
for a in $_LIVE_AGENT_LIST; do
sock=${a/:*/}
_LIVE_AGENT_SOCK_LIST[$i]=$sock
# technically we could have multiple keys forwarded
# But I haven't seen anyone do it
akeys=$(SSH_AUTH_SOCK=$sock ssh-add -l)
fingerprint=$(echo "${akeys}" | awk '{print $2}')
if [ -e ~/.ssh/authorized_keys ]; then
authorized_entry=$(fingerprints ~/.ssh/authorized_keys | grep "$fingerprint")
fi
comment=$(echo "${authorized_entry}" | awk '{print $3,$4,$5,$6,$7}')
printf "export SSH_AUTH_SOCK=%s \t#%i) \t%s\n" "$sock" $((i + 1)) "$comment"
i=$((i + 1))
done
else
printf "%s\n" "$_LIVE_AGENT_LIST" | sed -e 's/ /\n/g' | sort -n -t: -k 2 -k 1
fi
}
set_ssh_agent_socket() {
if [ "$1" = "-c" ] || [ "$1" = "--choose" ]; then
find_all_agent_sockets -i
if [ -z "$_LIVE_AGENT_LIST" ]; then
echo "No agents found"
return 1
fi
echo -n "Choose (1-${#_LIVE_AGENT_SOCK_LIST[@]})? "
read -r choice
if [ -n "$choice" ]; then
n=$((choice - 1))
if [ -z "${_LIVE_AGENT_SOCK_LIST[$n]}" ]; then
echo "Invalid choice"
return 1
fi
echo "Setting export SSH_AUTH_SOCK=${_LIVE_AGENT_SOCK_LIST[$n]}"
export SSH_AUTH_SOCK=${_LIVE_AGENT_SOCK_LIST[$n]}
fi
else
# Choose the first available
SOCK=$(find_all_agent_sockets | tail -n 1 | awk -F: '{print $1}')
if [ -z "$SOCK" ]; then
return 1
fi
export SSH_AUTH_SOCK=$SOCK
fi
# set agent pid
if [ -n "$SSH_AUTH_SOCK" ]; then
export SSH_AGENT_PID=$(($(echo "$SSH_AUTH_SOCK" | cut -d. -f2) + 1))
fi
return 0
}
ssh-find-agent() {
if [ "$1" = "-c" ] || [ "$1" = "--choose" ]; then
set_ssh_agent_socket -c
return $?
elif [ "$1" = "-a" ] || [ "$1" = "--auto" ]; then
set_ssh_agent_socket
return $?
else
find_all_agent_sockets -i
return 0
fi
}
# Automatically add ssh-agent to any new ssh connection
ssh-find-agent -a
if [ -z "$SSH_AUTH_SOCK" ]; then
eval "$(ssh-agent)" >/dev/null
ssh-add -l >/dev/null || alias ssh='ssh-add -l >/dev/null || ssh-add && unalias ssh; ssh'
fi
SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
export SSH_AUTH_SOCK
gpgconf --launch gpg-agent

View file

@ -39,7 +39,7 @@ export FILEREADER="zathura"
export FILEMANAGER="vifm"
## gopath
export GOPATH="$HOME/projects/gopath/"
export GOPATH="$HOME/.cache/gopath"
export PATH="$PATH:$GOPATH/bin"
## LANG LOCALE UTF-8

View file

@ -64,12 +64,12 @@ return {
tab_bar_at_bottom = true,
window_padding = { left = 0, right = 0, top = 0, bottom = 0 },
color_scheme = "Nord (base16)",
color_scheme = "Railscasts (base16)",
-- default_prog = {"nu"},
scrollback_lines = 10000,
font = wezterm.font('Iosevka'),
font = wezterm.font('Iosevka Nerd Font'),
line_height = 1.0,
leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 1500 },