dotfiles
1

Configure Feed

Select the types of activity you want to include in your feed.

Add current dotfiles

Delete all the fish cruft

Add fish config

Add cosmic config

Juan Nunez-Iglesias (Jun 20, 2026, 3:28 PM +0200) 9bf3adb7 515390b2

+525
+144
bash/bashrc
··· 1 + # ~/.bashrc: executed by bash(1) for non-login shells. 2 + # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) 3 + # for examples 4 + 5 + # If not running interactively, don't do anything 6 + case $- in 7 + *i*) ;; 8 + *) return;; 9 + esac 10 + 11 + # don't put duplicate lines or lines starting with space in the history. 12 + # See bash(1) for more options 13 + HISTCONTROL=ignoreboth 14 + 15 + # append to the history file, don't overwrite it 16 + shopt -s histappend 17 + 18 + # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) 19 + HISTSIZE=10000 20 + HISTFILESIZE=20000 21 + 22 + # enable searching through history with already-typed string (Matlab style) 23 + bind '"\e[A": history-search-backward' 24 + bind '"\e[B": history-search-forward' 25 + 26 + # check the window size after each command and, if necessary, 27 + # update the values of LINES and COLUMNS. 28 + shopt -s checkwinsize 29 + 30 + # If set, the pattern "**" used in a pathname expansion context will 31 + # match all files and zero or more directories and subdirectories. 32 + #shopt -s globstar 33 + 34 + # make less more friendly for non-text input files, see lesspipe(1) 35 + [ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" 36 + 37 + # set variable identifying the chroot you work in (used in the prompt below) 38 + if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then 39 + debian_chroot=$(cat /etc/debian_chroot) 40 + fi 41 + 42 + # set a fancy prompt (non-color, unless we know we "want" color) 43 + case "$TERM" in 44 + xterm-color|*-256color) color_prompt=yes;; 45 + esac 46 + 47 + # uncomment for a colored prompt, if the terminal has the capability; turned 48 + # off by default to not distract the user: the focus in a terminal window 49 + # should be on the output of commands, not on the prompt 50 + #force_color_prompt=yes 51 + 52 + if [ -n "$force_color_prompt" ]; then 53 + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then 54 + # We have color support; assume it's compliant with Ecma-48 55 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such 56 + # a case would tend to support setf rather than setaf.) 57 + color_prompt=yes 58 + else 59 + color_prompt= 60 + fi 61 + fi 62 + 63 + if [ "$color_prompt" = yes ]; then 64 + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' 65 + else 66 + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' 67 + fi 68 + unset color_prompt force_color_prompt 69 + 70 + # If this is an xterm set the title to user@host:dir 71 + case "$TERM" in 72 + xterm*|rxvt*) 73 + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" 74 + ;; 75 + *) 76 + ;; 77 + esac 78 + 79 + # enable color support of ls and also add handy aliases 80 + if [ -x /usr/bin/dircolors ]; then 81 + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" 82 + alias ls='ls --color=auto' 83 + #alias dir='dir --color=auto' 84 + #alias vdir='vdir --color=auto' 85 + 86 + alias grep='grep --color=auto' 87 + alias fgrep='fgrep --color=auto' 88 + alias egrep='egrep --color=auto' 89 + fi 90 + 91 + # colored GCC warnings and errors 92 + #export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' 93 + 94 + # some more ls aliases 95 + alias ll='ls -alF' 96 + alias la='ls -A' 97 + alias l='ls -CF' 98 + 99 + # Add an "alert" alias for long running commands. Use like so: 100 + # sleep 10; alert 101 + alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' 102 + 103 + # Alias definitions. 104 + # You may want to put all your additions into a separate file like 105 + # ~/.bash_aliases, instead of adding them here directly. 106 + # See /usr/share/doc/bash-doc/examples in the bash-doc package. 107 + 108 + if [ -f ~/.bash_aliases ]; then 109 + . ~/.bash_aliases 110 + fi 111 + 112 + # enable programmable completion features (you don't need to enable 113 + # this, if it's already enabled in /etc/bash.bashrc and /etc/profile 114 + # sources /etc/bash.bashrc). 115 + if ! shopt -oq posix; then 116 + if [ -f /usr/share/bash-completion/bash_completion ]; then 117 + . /usr/share/bash-completion/bash_completion 118 + elif [ -f /etc/bash_completion ]; then 119 + . /etc/bash_completion 120 + fi 121 + fi 122 + 123 + export PATH=${PATH}:/home/jni/.cargo/bin 124 + 125 + # >>> mamba initialize >>> 126 + # !! Contents within this block are managed by 'micromamba shell init' !! 127 + export MAMBA_EXE='/home/jni/.local/bin/micromamba'; 128 + export MAMBA_ROOT_PREFIX='/home/jni/micromamba'; 129 + __mamba_setup="$("$MAMBA_EXE" shell hook --shell bash --root-prefix "$MAMBA_ROOT_PREFIX" 2> /dev/null)" 130 + if [ $? -eq 0 ]; then 131 + eval "$__mamba_setup" 132 + else 133 + alias micromamba="$MAMBA_EXE" # Fallback on help from micromamba activate 134 + fi 135 + unset __mamba_setup 136 + # <<< mamba initialize <<< 137 + 138 + 139 + alias mu=micromamba 140 + 141 + mu activate all 142 + 143 + 144 + export FJ_HOST=codeberg.org
+37
cosmic/custom-shortcuts
··· 1 + { 2 + ( 3 + modifiers: [ 4 + Super, 5 + ], 6 + key: "space", 7 + ): System(Launcher), 8 + ( 9 + modifiers: [ 10 + Super, 11 + ], 12 + key: "t", 13 + ): Disable, 14 + ( 15 + modifiers: [ 16 + Super, 17 + ], 18 + key: "e", 19 + ): Resizing(Outwards), 20 + ( 21 + modifiers: [ 22 + Super, 23 + ], 24 + key: "u", 25 + ): Resizing(Inwards), 26 + ( 27 + modifiers: [ 28 + Super, 29 + ], 30 + ): Disable, 31 + ( 32 + modifiers: [ 33 + Super, 34 + ], 35 + key: "Return", 36 + ): System(Terminal), 37 + }
+1
cosmic/system-actions
··· 1 + { Terminal: "/usr/bin/ghostty" }
+9
cosmic/xkb_config
··· 1 + ( 2 + rules: "", 3 + model: "", 4 + layout: "us,us", 5 + variant: "dvorak,", 6 + options: Some("lv3:ralt_switch,compose:prsc,caps:escape,altwin:swap_lalt_lwin"), 7 + repeat_delay: 600, 8 + repeat_rate: 25, 9 + )
+31
fish/config.fish
··· 1 + if status is-interactive 2 + # Commands to run in interactive sessions can go here 3 + end 4 + 5 + # Turn off syntax highlighting 6 + for color in fish_color_command fish_color_comment fish_color_end \ 7 + fish_color_escape fish_color_match fish_color_operator \ 8 + fish_color_param fish_color_quote \ 9 + fish_pager_color_description fish_pager_color_prefix 10 + set $color normal 11 + end 12 + 13 + set fish_color_autosuggestion white 14 + set fish_color_error red 15 + 16 + set fish_pager_color_progress white 17 + 18 + # >>> mamba initialize >>> 19 + # !! Contents within this block are managed by 'micromamba shell init' !! 20 + set -gx MAMBA_EXE "/home/jni/.local/bin/micromamba" 21 + set -gx MAMBA_ROOT_PREFIX "/home/jni/micromamba" 22 + $MAMBA_EXE shell hook --shell fish --root-prefix $MAMBA_ROOT_PREFIX | source 23 + # <<< mamba initialize <<< 24 + micromamba activate all 25 + 26 + alias mu micromamba 27 + 28 + alias pbcopy wl-copy 29 + alias pbpaste wl-paste 30 + 31 + fish_add_path /home/jni/.local/bin
+4
fish/fish_plugins
··· 1 + jorgebucaran/fisher 2 + vitallium/tokyonight-fish 3 + patrickf1/fzf.fish 4 + ilancosman/tide
+17
ghostty/config.ghostty
··· 1 + font-family = BlexMono Nerd Font Mono 2 + font-size = 11 3 + 4 + keybind = super+t=new_tab 5 + keybind = ctrl+shift+t=new_tab 6 + keybind = super+n=new_window 7 + keybind = ctrl+shift+n=new_window 8 + keybind = ctrl+page_down=previous_tab 9 + keybind = super+page_down=previous_tab 10 + keybind = ctrl+page_up=next_tab 11 + keybind = super+page_up=next_tab 12 + keybind = super+c=copy_to_clipboard 13 + keybind = super+v=paste_from_clipboard 14 + 15 + background = #000000 16 + 17 + background-opacity = 0.92
+17
git/gitconfig
··· 1 + [credential "https://github.com"] 2 + helper = 3 + helper = !/usr/bin/gh auth git-credential 4 + [credential "https://gist.github.com"] 5 + helper = 6 + helper = !/usr/bin/gh auth git-credential 7 + [user] 8 + email = jni@fastmail.com 9 + name = Juan Nunez-Iglesias 10 + [core] 11 + editor = vim 12 + [init] 13 + defaultBranch = main 14 + [credential] 15 + helper = libsecret 16 + [url "git@codeberg.org:"] 17 + insteadOf = https://codeberg.org/
+258
nvim/init.lua
··· 1 + -- bootstrap lazy.nvim (plugin manager) 2 + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" 3 + if not vim.loop.fs_stat(lazypath) then 4 + vim.fn.system({ 5 + "git", "clone", "--filter=blob:none", 6 + "https://github.com/folke/lazy.nvim.git", 7 + "--branch=stable", lazypath, 8 + }) 9 + end 10 + vim.opt.rtp:prepend(lazypath) 11 + 12 + -- plugins 13 + require("lazy").setup({ 14 + { 15 + "nvim-telescope/telescope.nvim", 16 + dependencies = { "nvim-lua/plenary.nvim" }, 17 + }, 18 + { 19 + "j-hui/fidget.nvim", 20 + opts = {}, 21 + }, 22 + { 23 + "toppair/peek.nvim", 24 + event = { "VeryLazy" }, 25 + build = "deno task --quiet build:fast", 26 + config = function() 27 + require("peek").setup({ 28 + app = "webview", 29 + update_on_change = true, 30 + }) 31 + vim.api.nvim_create_user_command("Peek", require("peek").open, {}) 32 + vim.api.nvim_create_user_command("PeekClose", require("peek").close, {}) 33 + end, 34 + }, 35 + }) 36 + 37 + -- Basedpyright config using native vim.lsp.config: 38 + vim.lsp.config('basedpyright', { 39 + cmd = { 'basedpyright-langserver', '--stdio' }, 40 + filetypes = { 'python' }, 41 + root_markers = { 'pyproject.toml', 'setup.py', 'setup.cfg', '.git' }, 42 + settings = { 43 + basedpyright = { 44 + typeCheckingMode = 'recommended', 45 + }, 46 + }, 47 + }) 48 + vim.lsp.enable('basedpyright') 49 + 50 + vim.api.nvim_create_autocmd("LspAttach", { 51 + callback = function(args) 52 + local bufnr = args.buf 53 + 54 + -- gd: open definition in new Ghostty window 55 + vim.keymap.set('n', 'gd', function() 56 + local clients = vim.lsp.get_clients({ bufnr = bufnr }) 57 + if #clients == 0 then 58 + print("No LSP client attached") 59 + return 60 + end 61 + local encoding = clients[1].offset_encoding or 'utf-16' 62 + 63 + local params = vim.lsp.util.make_position_params(0, encoding) 64 + vim.lsp.buf_request(bufnr, 'textDocument/definition', params, function(_, result) 65 + if not result or vim.tbl_isempty(result) then 66 + print("No definition found") 67 + return 68 + end 69 + local location = result[1] 70 + local uri = location.uri or location.targetUri 71 + local range = location.range or location.targetSelectionRange 72 + local filepath = vim.uri_to_fname(uri) 73 + local line = range.start.line 74 + local col = range.start.character 75 + vim.fn.jobstart({ 76 + 'ghostty', '-e', 'nvim', 77 + string.format('+call cursor(%d,%d)', line, col), 78 + filepath 79 + }) 80 + end) 81 + end, { buffer = bufnr, desc = "Go to definition (new window)" }) 82 + 83 + -- gD: go to definition in same window 84 + vim.keymap.set('n', 'gD', vim.lsp.buf.definition, 85 + { buffer = bufnr, desc = "Go to definition (same window)" }) 86 + 87 + vim.keymap.set('n', 'K', vim.lsp.buf.hover, { buffer = bufnr }) 88 + vim.keymap.set('n', 'gr', vim.lsp.buf.references, { buffer = bufnr }) 89 + vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, { buffer = bufnr }) 90 + end, 91 + }) 92 + 93 + -- open references in a new window 94 + vim.api.nvim_create_autocmd("FileType", { 95 + pattern = "qf", 96 + callback = function(args) 97 + vim.keymap.set('n', '<CR>', function() 98 + local qf_idx = vim.fn.line('.') 99 + local qf_item = vim.fn.getqflist()[qf_idx] 100 + if not qf_item then return end 101 + 102 + local filepath = vim.fn.bufname(qf_item.bufnr) 103 + local line = qf_item.lnum 104 + local col = qf_item.col 105 + 106 + vim.cmd('cclose') 107 + vim.fn.jobstart({ 108 + 'ghostty', '-e', 'nvim', 109 + string.format('+call cursor(%d,%d)', line, col), 110 + filepath 111 + }) 112 + end, { buffer = args.buf, desc = "Open reference in new window", nowait = true }) 113 + end, 114 + }) 115 + 116 + vim.keymap.set('n', 'gr', function() 117 + local clients = vim.lsp.get_clients({ bufnr = bufnr }) 118 + if #clients == 0 then 119 + require("fidget").notify("No LSP client attached", vim.log.levels.WARN) 120 + return 121 + end 122 + local encoding = clients[1].offset_encoding or 'utf-16' 123 + local params = vim.lsp.util.make_position_params(0, encoding) 124 + params.context = { includeDeclaration = true } 125 + 126 + require("fidget").notify("Searching for references...") 127 + 128 + vim.lsp.buf_request(bufnr, 'textDocument/references', params, function(_, result) 129 + if not result or vim.tbl_isempty(result) then 130 + require("fidget").notify("No references found", vim.log.levels.WARN) 131 + return 132 + end 133 + local items = vim.lsp.util.locations_to_items(result, encoding) 134 + vim.fn.setqflist({}, ' ', { title = 'References', items = items }) 135 + vim.cmd('copen') 136 + end) 137 + end, { buffer = bufnr, desc = "Find references (new window on select)" }) 138 + 139 + -- ================== CONFIG ================= -- 140 + 141 + -- automatically spell check markdown and Qmd files 142 + vim.api.nvim_create_autocmd({ 'BufNewFile', 'BufRead' }, { 143 + pattern = { '*.md', '*.markdown', '*.qmd' }, 144 + callback = function() 145 + vim.opt_local.spell = true 146 + vim.opt_local.spelllang = { 'en_gb', 'es' } -- adjust to taste 147 + end, 148 + }) 149 + 150 + -- wrap long lines and show wrapping with underscores 151 + vim.opt.linebreak = true 152 + vim.opt.showbreak = '______' 153 + 154 + vim.opt.tabstop = 4 155 + vim.opt.shiftwidth = 4 156 + vim.opt.expandtab = true 157 + vim.opt.autoindent = true 158 + 159 + -- formatoptions: start from default and remove 't' 160 + -- (don't auto-wrap text while typing) 161 + vim.opt.formatoptions:remove('t') 162 + vim.opt.textwidth = 79 163 + 164 + 165 + -- ignore case while searching, unless variable case in search string 166 + vim.opt.ignorecase = true 167 + vim.opt.smartcase = true 168 + vim.opt.incsearch = true 169 + 170 + -- h/l/~/cursor keys wrap across line boundaries 171 + vim.opt.whichwrap = 'h,l,~,[,]' 172 + 173 + -- % matches <> as well as () [] {} 174 + vim.opt.matchpairs:append('<:>') 175 + 176 + -- g- as alias for g; (jump to older change position) 177 + vim.keymap.set('n', 'g-', 'g;') 178 + 179 + -- gl as alias for opening diagnostic float 180 + vim.keymap.set( 181 + 'n', 'gl', vim.diagnostic.open_float, 182 + { desc = "Show diagnostic message" } 183 + ) 184 + -- diagnostics config 185 + vim.diagnostic.config({ 186 + severity_sort = true, -- errors before warnings in lists 187 + signs = false, -- don't use gutters 188 + underline = { 189 + severity = { min = vim.diagnostic.severity.WARN }, 190 + }, 191 + virtual_text = { 192 + severity = { min = vim.diagnostic.severity.ERROR }, 193 + }, 194 + }) 195 + 196 + -- Use the terminal's background color instead of neovim's 197 + vim.api.nvim_set_hl(0, "Normal", { bg = "none" }) 198 + vim.api.nvim_create_autocmd("ColorScheme", { 199 + callback = function() 200 + vim.api.nvim_set_hl(0, "Normal", { bg = "none" }) -- or "#000000" 201 + end, 202 + }) 203 + 204 + -- Force distinct underline colors regardless of colorscheme 205 + vim.api.nvim_create_autocmd("ColorScheme", { 206 + callback = function() 207 + vim.api.nvim_set_hl(0, "DiagnosticUnderlineError", { undercurl = true, sp = "#d16969" }) 208 + vim.api.nvim_set_hl(0, "DiagnosticUnderlineWarn", { undercurl = true, sp = "#d7ba7d" }) 209 + vim.api.nvim_set_hl(0, "DiagnosticUnderlineInfo", { undercurl = true, sp = "#888888" }) 210 + vim.api.nvim_set_hl(0, "DiagnosticUnderlineHint", { undercurl = true, sp = "#888888" }) 211 + end, 212 + }) 213 + 214 + -- jump to last position on reopen 215 + vim.api.nvim_create_autocmd('BufReadPost', { 216 + callback = function() 217 + local mark = vim.api.nvim_buf_get_mark(0, '"') 218 + local line_count = vim.api.nvim_buf_line_count(0) 219 + if mark[1] > 1 and mark[1] <= line_count then 220 + vim.api.nvim_win_set_cursor(0, mark) 221 + end 222 + end, 223 + }) 224 + 225 + -- highlight trailing whitespace 226 + vim.cmd([[ 227 + highlight ExtraWhitespace ctermbg=darkgreen guibg=lightgreen 228 + match ExtraWhitespace /\s\+$/ 229 + ]]) 230 + 231 + vim.api.nvim_create_autocmd('BufWinEnter', { 232 + callback = function() vim.cmd('match ExtraWhitespace /\\s\\+$/') end, 233 + }) 234 + vim.api.nvim_create_autocmd('InsertEnter', { 235 + callback = function() vim.cmd('match ExtraWhitespace /\\s\\+\\%#\\@<!$/') end, 236 + }) 237 + vim.api.nvim_create_autocmd('InsertLeave', { 238 + callback = function() vim.cmd('match ExtraWhitespace /\\s\\+$/') end, 239 + }) 240 + vim.api.nvim_create_autocmd('BufWinLeave', { 241 + callback = function() vim.fn.clearmatches() end, 242 + }) 243 + 244 + -- don't override terminal background colour 245 + vim.opt.background = 'dark' 246 + vim.api.nvim_create_autocmd("ColorScheme", { 247 + callback = function() 248 + vim.api.nvim_set_hl(0, "Normal", { bg = "none" }) 249 + vim.api.nvim_set_hl(0, "NormalFloat", { bg = "none" }) 250 + end, 251 + }) 252 + 253 + -- use the system clipboard when yanking 254 + vim.keymap.set({"n", "x"}, "y", '"+y', { desc = "Yank to system clipboard" }) 255 + vim.keymap.set({"n", "x"}, "Y", '"+y$', { desc = "Yank to end of line (system clipboard)" }) 256 + 257 + -- don't use a dedicated line for the command line 258 + vim.opt.cmdheight = 0
+7
nvim/lazy-lock.json
··· 1 + { 2 + "fidget.nvim": { "branch": "main", "commit": "82404b196e73a00b1727a91903beef5ddc319d22" }, 3 + "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, 4 + "peek.nvim": { "branch": "master", "commit": "5820d937d5414baea5f586dc2a3d912a74636e5b" }, 5 + "plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" }, 6 + "telescope.nvim": { "branch": "master", "commit": "9377230aa5305d9e9aca4ed8dadf1070fb4aa9fc" } 7 + }