From 953fdaaf1ec5a202e5a619e03c21c3ef481dde74 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Thu, 19 Jan 2023 18:28:20 +0100 Subject: [PATCH 1/4] 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. --- desktop/.config/fontconfig/fonts.conf | 2 +- multimedia/.config/mpv/mpv.conf | 4 ++-- terminal/.config/wezterm/wezterm.lua | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/desktop/.config/fontconfig/fonts.conf b/desktop/.config/fontconfig/fonts.conf index 97c38de..3dc933d 100644 --- a/desktop/.config/fontconfig/fonts.conf +++ b/desktop/.config/fontconfig/fonts.conf @@ -11,7 +11,7 @@ monospace - Iosevka + Iosevka Nerd Font fantasy diff --git a/multimedia/.config/mpv/mpv.conf b/multimedia/.config/mpv/mpv.conf index 2bb8cf4..d928d32 100644 --- a/multimedia/.config/mpv/mpv.conf +++ b/multimedia/.config/mpv/mpv.conf @@ -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 diff --git a/terminal/.config/wezterm/wezterm.lua b/terminal/.config/wezterm/wezterm.lua index 24905df..525036c 100644 --- a/terminal/.config/wezterm/wezterm.lua +++ b/terminal/.config/wezterm/wezterm.lua @@ -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 }, From d4bbf7b573d0abb2ab7b5c8bc964d1abdf847b8d Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Tue, 31 Jan 2023 10:02:44 +0100 Subject: [PATCH 2/4] 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. --- .../sh/alias.d/ssh-agent-autoconfiguration.sh | 217 +----------------- 1 file changed, 4 insertions(+), 213 deletions(-) diff --git a/sh/.config/sh/alias.d/ssh-agent-autoconfiguration.sh b/sh/.config/sh/alias.d/ssh-agent-autoconfiguration.sh index 65ce649..934497e 100644 --- a/sh/.config/sh/alias.d/ssh-agent-autoconfiguration.sh +++ b/sh/.config/sh/alias.d/ssh-agent-autoconfiguration.sh @@ -1,214 +1,5 @@ -#!/bin/bash +#!/usr/bin/env bash -## Integration at the Bottom - -# Copyright (C) 2011 by Wayne Walker -# -# Released under one of the versions of the MIT License. -# -# Copyright (C) 2011 by Wayne Walker -# -# 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 From 989886a936dd51bf158cf4243b86db66685d8c38 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Tue, 31 Jan 2023 10:06:55 +0100 Subject: [PATCH 3/4] 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 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 mp - a binding which I will no doubt also have to overhaul at some point. --- nvim/.config/nvim/lua/maps.lua | 34 ++++++++-------- nvim/.config/nvim/lua/plugins.lua | 66 +++++++++++++------------------ 2 files changed, 46 insertions(+), 54 deletions(-) diff --git a/nvim/.config/nvim/lua/maps.lua b/nvim/.config/nvim/lua/maps.lua index 5b43433..06d0b24 100644 --- a/nvim/.config/nvim/lua/maps.lua +++ b/nvim/.config/nvim/lua/maps.lua @@ -178,12 +178,13 @@ vim.g.nv_fzf_binds = { map.n.nore['n'] = ':NV' map.n.nore['N'] = ':NV!' --- Mostly dealing with Prose writing from here on out -- Format current Paragraph (esp useful in prose writing) map.n.nore.silent['q'] = 'gqap' map.x.nore.silent['q'] = 'gq' map.n.nore.silent['Q'] = 'vapJgqap' +map.n.silent['mp'] = 'MarkdownPreviewToggle' + -- FORMAT code with -- PLUGIN: formatter.nvim map.n.nore.silent['f'] = ':FormatLock' @@ -248,21 +249,22 @@ map.n.nore['ww'] = [[:lua require 'zettelkasten'.index_open() ]] -- create a lazygit window, set up in toggleterm settings map.n.nore['G'] = ':Lazygit' --- PLUGIN: slime and ipython-cell --- send line / region, not adhering to cells -map.n['cs'] = 'SlimeLineSend' -map.x['cs'] = 'SlimeRegionSend' --- send complete script to repl / benchmark execution -map.n.nore['cr'] = ':IPythonCellRun' -map.n.nore['cR'] = ':IPythonCellRunTime' --- send current cell / send and go to next -map.n.nore['cc'] = ':IPythonCellExecuteCellVerbose' -map.n.nore['C'] = ':IPythonCellExecuteCellVerboseJump' --- clear ipython repl -map.n.nore['cl'] = ':IPythonCellClear' --- jump to previous/ next cell -map.n.nore[']c'] = ':IPythonCellNextCell' -map.n.nore['[c'] = ':IPythonCellPrevCell' +-- PLUGIN: magma-nvim +-- Operate jupyter notebooks from within vim +map.n.nore.silent['rr'] = ':MagmaEvaluateLine' +map.n.nore.silent['R'] = '?^```{jV/```k:MagmaEvaluateVisual' +map.x.nore.silent['r'] = ':MagmaEvaluateVisual' +map.n.nore.expr.silent['r'] = "nvim_exec('MagmaEvaluateOperator', v:true)" +map.n.nore.silent['re'] = ':MagmaReevaluateCell' +map.n.nore.silent['ro'] = ':MagmaShowOutput' +map.n.nore.silent['rq'] = ':noautocmd :MagmaEnterOutput' +map.n.nore.silent['rc'] = ':MagmaDelete' +map.n.nore.silent['rd'] = ':MagmaInterrupt' + +map.n.nore.silent['rO'] = ':lua vim.g.magma_automatically_open_output = not(vim.g.magma_automatically_open_output)' +-- jump to beginning of previous/ next cell code +map.n.nore[']r'] = '/^```{}:nohl' +map.n.nore['[r'] = '?^```n}:nohl' -- insert cell header above/below map.n.nore['cO'] = ':IPythonCellInsertAbovea' map.n.nore['co'] = ':IPythonCellInsertBelowa' diff --git a/nvim/.config/nvim/lua/plugins.lua b/nvim/.config/nvim/lua/plugins.lua index 868ce6e..028aa7d 100644 --- a/nvim/.config/nvim/lua/plugins.lua +++ b/nvim/.config/nvim/lua/plugins.lua @@ -1,7 +1,7 @@ local ensure_packer = function() local fn = vim.fn local install_path = fn.stdpath('data') .. - '/site/pack/packer/start/packer.nvim' + '/site/pack/packer/start/packer.nvim' if fn.empty(fn.glob(install_path)) > 0 then fn.system({ 'git', 'clone', '--depth', '1', @@ -16,11 +16,11 @@ end local packer_bootstrap = ensure_packer() -- Compile on plugin edits -vim.api.nvim_create_autocmd({"BufWritePost"}, { +vim.api.nvim_create_autocmd({ "BufWritePost" }, { pattern = "plugins.lua", command = "PackerCompile", desc = "Compile plugins after editing plugin list", - group = vim.api.nvim_create_augroup('compilepackages', {clear = true}) + group = vim.api.nvim_create_augroup('compilepackages', { clear = true }) }) local use = require("packer").use @@ -42,7 +42,7 @@ require("packer").startup(function() use 'vifm/vifm.vim' -- integrate file manager use { 'lewis6991/gitsigns.nvim', -- show vcs changes on left-hand gutter - requires = {'nvim-lua/plenary.nvim'}, + requires = { 'nvim-lua/plenary.nvim' }, tag = 'release', config = function() require('plug._gitsigns') end, event = "BufRead" @@ -98,52 +98,42 @@ require("packer").startup(function() -- statusline use { 'nvim-lualine/lualine.nvim', - requires = {'kyazdani42/nvim-web-devicons', opt = true}, + requires = { 'kyazdani42/nvim-web-devicons', opt = true }, config = function() require('plug._lualine') end } -- writing - use {'vim-pandoc/vim-pandoc-syntax'} - use {'vim-pandoc/vim-pandoc'} - use {'vim-pandoc/vim-criticmarkup'} + use { 'vim-pandoc/vim-pandoc-syntax' } + use { 'vim-pandoc/vim-pandoc' } + use { 'vim-pandoc/vim-criticmarkup' } use { "quarto-dev/quarto-vim", - requires = {{"vim-pandoc/vim-pandoc-syntax"}}, - ft = {"quarto"} + requires = { { "vim-pandoc/vim-pandoc-syntax" } }, + ft = { "quarto" } } use 'micarmst/vim-spellsync' -- personal dict improvements for git sync - use {'folke/zen-mode.nvim', config = require('zen-mode').setup()} -- provide distraction free writing + 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 + use { 'euclidianAce/BetterLua.vim', ft = 'lua' } -- better syntax highlighting for lua use 'aliou/bats.vim' -- enable syntax for bats shell-code testing library -- 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', @@ -173,19 +163,19 @@ require("packer").startup(function() use { "nvim-telescope/telescope.nvim", requires = { - {"nvim-lua/popup.nvim"}, {"nvim-lua/plenary.nvim"}, - {"nvim-telescope/telescope-fzf-native.nvim", run = 'make'} + { "nvim-lua/popup.nvim" }, { "nvim-lua/plenary.nvim" }, + { "nvim-telescope/telescope-fzf-native.nvim", run = 'make' } }, config = function() require('plug._telescope') end } use { 'protex/better-digraphs.nvim', - requires = {{"nvim-telescope/telescope.nvim"}} + requires = { { "nvim-telescope/telescope.nvim" } } } -- snippeting - use {"hrsh7th/vim-vsnip", event = "InsertEnter"} -- snippet engine - use {"rafamadriz/friendly-snippets", event = "InsertEnter"} -- many snippets + use { "hrsh7th/vim-vsnip", event = "InsertEnter" } -- snippet engine + use { "rafamadriz/friendly-snippets", event = "InsertEnter" } -- many snippets -- treesitter use { @@ -198,7 +188,7 @@ require("packer").startup(function() use { 'RRethy/nvim-treesitter-textsubjects', -- allows using . and ; to target treesitter branches config = function() - require'nvim-treesitter.configs'.setup { + require 'nvim-treesitter.configs'.setup { textsubjects = { enable = true, keymaps = { @@ -225,7 +215,7 @@ require("packer").startup(function() use 'ray-x/lsp_signature.nvim' use { 'ray-x/navigator.lua', - requires = {'ray-x/guihua.lua', run = 'cd lua/fzy && make'}, + requires = { 'ray-x/guihua.lua', run = 'cd lua/fzy && make' }, config = function() require('plug._lsp') end } -- and completion @@ -241,7 +231,7 @@ require("packer").startup(function() } use { 'aspeddro/cmp-pandoc.nvim', - requires = {'nvim-lua/plenary.nvim', 'jbyuki/nabla.nvim'} + requires = { 'nvim-lua/plenary.nvim', 'jbyuki/nabla.nvim' } } require('plug._cmp') From 9f5bca4a62263fad0616c4a0da22f4931d5f5cad Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Tue, 31 Jan 2023 10:15:10 +0100 Subject: [PATCH 4/4] 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. --- sh/.config/sh/env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/.config/sh/env b/sh/.config/sh/env index 0bebb0e..0d65e9e 100644 --- a/sh/.config/sh/env +++ b/sh/.config/sh/env @@ -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