diff --git a/.dotter/global.toml b/.dotter/global.toml index bac0777..dfa8dea 100644 --- a/.dotter/global.toml +++ b/.dotter/global.toml @@ -6,3 +6,5 @@ ideavim = "~/.ideavimrc" astrovim = "~/.config/nvim/lua/user/" vimrc = "~/.vimrc" halig = "~/.config/halig" +k9smocha = "~/.config/k9s/skin.yml" +sshconfig = "~/.ssh/config" diff --git a/fish/conf.d/kubectl.fish b/fish/conf.d/kubectl.fish new file mode 100644 index 0000000..4e6ca7c --- /dev/null +++ b/fish/conf.d/kubectl.fish @@ -0,0 +1,191 @@ + +# Copyright 2016 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# fish completion for kubectl -*- shell-script -*- + +function __kubectl_debug + set -l file "$BASH_COMP_DEBUG_FILE" + if test -n "$file" + echo "$argv" >> $file + end +end + +function __kubectl_perform_completion + __kubectl_debug "Starting __kubectl_perform_completion" + + # Extract all args except the last one + set -l args (commandline -opc) + # Extract the last arg and escape it in case it is a space + set -l lastArg (string escape -- (commandline -ct)) + + __kubectl_debug "args: $args" + __kubectl_debug "last arg: $lastArg" + + # Disable ActiveHelp which is not supported for fish shell + set -l requestComp "KUBECTL_ACTIVE_HELP=0 $args[1] __complete $args[2..-1] $lastArg" + + __kubectl_debug "Calling $requestComp" + set -l results (eval $requestComp 2> /dev/null) + + # Some programs may output extra empty lines after the directive. + # Let's ignore them or else it will break completion. + # Ref: https://github.com/spf13/cobra/issues/1279 + for line in $results[-1..1] + if test (string trim -- $line) = "" + # Found an empty line, remove it + set results $results[1..-2] + else + # Found non-empty line, we have our proper output + break + end + end + + set -l comps $results[1..-2] + set -l directiveLine $results[-1] + + # For Fish, when completing a flag with an = (e.g., -n=) + # completions must be prefixed with the flag + set -l flagPrefix (string match -r -- '-.*=' "$lastArg") + + __kubectl_debug "Comps: $comps" + __kubectl_debug "DirectiveLine: $directiveLine" + __kubectl_debug "flagPrefix: $flagPrefix" + + for comp in $comps + printf "%s%s\n" "$flagPrefix" "$comp" + end + + printf "%s\n" "$directiveLine" +end + +# This function does two things: +# - Obtain the completions and store them in the global __kubectl_comp_results +# - Return false if file completion should be performed +function __kubectl_prepare_completions + __kubectl_debug "" + __kubectl_debug "========= starting completion logic ==========" + + # Start fresh + set --erase __kubectl_comp_results + + set -l results (__kubectl_perform_completion) + __kubectl_debug "Completion results: $results" + + if test -z "$results" + __kubectl_debug "No completion, probably due to a failure" + # Might as well do file completion, in case it helps + return 1 + end + + set -l directive (string sub --start 2 $results[-1]) + set --global __kubectl_comp_results $results[1..-2] + + __kubectl_debug "Completions are: $__kubectl_comp_results" + __kubectl_debug "Directive is: $directive" + + set -l shellCompDirectiveError 1 + set -l shellCompDirectiveNoSpace 2 + set -l shellCompDirectiveNoFileComp 4 + set -l shellCompDirectiveFilterFileExt 8 + set -l shellCompDirectiveFilterDirs 16 + + if test -z "$directive" + set directive 0 + end + + set -l compErr (math (math --scale 0 $directive / $shellCompDirectiveError) % 2) + if test $compErr -eq 1 + __kubectl_debug "Received error directive: aborting." + # Might as well do file completion, in case it helps + return 1 + end + + set -l filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) % 2) + set -l dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) % 2) + if test $filefilter -eq 1; or test $dirfilter -eq 1 + __kubectl_debug "File extension filtering or directory filtering not supported" + # Do full file completion instead + return 1 + end + + set -l nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) % 2) + set -l nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) % 2) + + __kubectl_debug "nospace: $nospace, nofiles: $nofiles" + + # If we want to prevent a space, or if file completion is NOT disabled, + # we need to count the number of valid completions. + # To do so, we will filter on prefix as the completions we have received + # may not already be filtered so as to allow fish to match on different + # criteria than the prefix. + if test $nospace -ne 0; or test $nofiles -eq 0 + set -l prefix (commandline -t | string escape --style=regex) + __kubectl_debug "prefix: $prefix" + + set -l completions (string match -r -- "^$prefix.*" $__kubectl_comp_results) + set --global __kubectl_comp_results $completions + __kubectl_debug "Filtered completions are: $__kubectl_comp_results" + + # Important not to quote the variable for count to work + set -l numComps (count $__kubectl_comp_results) + __kubectl_debug "numComps: $numComps" + + if test $numComps -eq 1; and test $nospace -ne 0 + # We must first split on \t to get rid of the descriptions to be + # able to check what the actual completion will be. + # We don't need descriptions anyway since there is only a single + # real completion which the shell will expand immediately. + set -l split (string split --max 1 \t $__kubectl_comp_results[1]) + + # Fish won't add a space if the completion ends with any + # of the following characters: @=/:., + set -l lastChar (string sub -s -1 -- $split) + if not string match -r -q "[@=/:.,]" -- "$lastChar" + # In other cases, to support the "nospace" directive we trick the shell + # by outputting an extra, longer completion. + __kubectl_debug "Adding second completion to perform nospace directive" + set --global __kubectl_comp_results $split[1] $split[1]. + __kubectl_debug "Completions are now: $__kubectl_comp_results" + end + end + + if test $numComps -eq 0; and test $nofiles -eq 0 + # To be consistent with bash and zsh, we only trigger file + # completion when there are no other completions + __kubectl_debug "Requesting file completion" + return 1 + end + end + + return 0 +end + +# Since Fish completions are only loaded once the user triggers them, we trigger them ourselves +# so we can properly delete any completions provided by another script. +# Only do this if the program can be found, or else fish may print some errors; besides, +# the existing completions will only be loaded if the program can be found. +if type -q "kubectl" + # The space after the program name is essential to trigger completion for the program + # and not completion of the program name itself. + # Also, we use '> /dev/null 2>&1' since '&>' is not supported in older versions of fish. + complete --do-complete "kubectl " > /dev/null 2>&1 +end + +# Remove any pre-existing completions for the program since we will be handling all of them. +complete -c kubectl -e + +# The call to __kubectl_prepare_completions will setup __kubectl_comp_results +# which provides the program's completion choices. +complete -c kubectl -n '__kubectl_prepare_completions' -f -a '$__kubectl_comp_results' + diff --git a/fish/conf.d/paths.fish b/fish/conf.d/paths.fish index cd6d06d..e8381f0 100644 --- a/fish/conf.d/paths.fish +++ b/fish/conf.d/paths.fish @@ -5,3 +5,6 @@ set -gx PATH $ANDROID_HOME/emulator $PATH set -gx PATH $ANDROID_HOME/tools $PATH set -gx PATH $ANDROID_HOME/tools/bin $PATH set -gx PATH $ANDROID_HOME/platform-tools $PATH +set -gx PATH /usr/local/texlive/2023/bin/x86_64-linux $PATH +set -gx MANPATH /usr/local/texlive/2023/texmf-dist/doc/man $MANPATH +set -gx INFOPATH /usr/local/texlive/2023/texmf-dist/doc/info $INFOPATH diff --git a/k9smocha b/k9smocha new file mode 100644 index 0000000..1d3d4d1 --- /dev/null +++ b/k9smocha @@ -0,0 +1,159 @@ +# https://github.com/catppuccin/k9s +base: &base "#1e1e2e" +blue: &blue "#89b4fa" +crust: &crust "#11111b" +flamingo: &flamingo "#f2cdcd" +green: &green "#a6e3a1" +lavender: &lavender "#b4befe" +mantle: &mantle "#181825" +maroon: &maroon "#eba0ac" +mauve: &mauve "#cba6f7" +overlay0: &overlay0 "#6c7086" +overlay1: &overlay1 "#7f849c" +overlay2: &overlay2 "#9399b2" +peach: &peach "#fab387" +pink: &pink "#f5c2e7" +red: &red "#f38ba8" +rosewater: &rosewater "#f5e0dc" +sapphire: &sapphire "#74c7ec" +sky: &sky "#89dceb" +subtext0: &subtext0 "#a6adc8" +subtext1: &subtext1 "#bac2de" +surface0: &surface0 "#313244" +surface1: &surface1 "#45475a" +surface2: &surface2 "#585b70" +teal: &teal "#94e2d5" +text: &text "#cdd6f4" +yellow: &yellow "#f9e2af" + +# Skin... +k9s: + # General K9s styles + body: + fgColor: *text + bgColor: *base + logoColor: *mauve + + # Command prompt styles + prompt: + fgColor: *text + bgColor: *mantle + suggestColor: *blue + + # ClusterInfoView styles. + info: + fgColor: *peach + sectionColor: *text + + # Dialog styles. + dialog: + fgColor: *yellow + bgColor: *overlay2 + buttonFgColor: *base + buttonBgColor: *overlay1 + buttonFocusFgColor: *base + buttonFocusBgColor: *pink + labelFgColor: *rosewater + fieldFgColor: *text + + frame: + # Borders styles. + border: + fgColor: *mauve + focusColor: *lavender + + # MenuView attributes and styles + menu: + fgColor: *text + keyColor: *blue + # Used for favorite namespaces + numKeyColor: *maroon + + # CrumbView attributes for history navigation. + crumbs: + fgColor: *base + bgColor: *maroon + activeColor: *flamingo + + # Resource status and update styles + status: + newColor: *blue + modifyColor: *lavender + addColor: *green + pendingColor: *peach + errorColor: *red + highlightColor: *sky + killColor: *mauve + completedColor: *overlay0 + + # Border title styles. + title: + fgColor: *teal + bgColor: *base + highlightColor: *pink + counterColor: *yellow + filterColor: *green + + views: + # Charts skins... + charts: + bgColor: *base + chartBgColor: *base + dialBgColor: *base + defaultDialColors: + - *green + - *red + defaultChartColors: + - *green + - *red + resourceColors: + cpu: + - *mauve + - *blue + mem: + - *yellow + - *peach + + # TableView attributes. + table: + fgColor: *text #Doesn't Work + bgColor: *base + cursorFgColor: *surface0 # Doesn't Work + cursorBgColor: *surface1 # should be rosewater + markColor: *rosewater # Doesn't Work + # Header row styles. + header: + fgColor: *yellow + bgColor: *base + sorterColor: *sky + + # Xray view attributes. + xray: + fgColor: *text #Doesn't Work + bgColor: *base + # Need to set this to a dark color since color text can't be changed + # Ideally this would be rosewater + cursorColor: *surface1 + cursorTextColor: *base #Doesn't Work + graphicColor: *pink + + # YAML info styles. + yaml: + keyColor: *blue + colonColor: *subtext0 + valueColor: *text + + # Logs styles. + logs: + fgColor: *text + bgColor: *base + indicator: + fgColor: *lavender + bgColor: *base + + help: + fgColor: *text + bgColor: *base + sectionColor: *green + keyColor: *blue + numKeyColor: *maroon diff --git a/sshconfig b/sshconfig new file mode 100644 index 0000000..b85c54a --- /dev/null +++ b/sshconfig @@ -0,0 +1,74 @@ +Host fuku.ramiel + HostName ramiel.fuku + User catalin + IdentityFile ~/.ssh/id_ed25519 + IdentitiesOnly yes + +Host fuku.containers.root + HostName containers.fuku + User root + IdentityFile ~/.ssh/id_ed25519 + +Host fuku.containers + HostName containers.fuku + User bullseye + IdentityFile ~/.ssh/id_ed25519 + +Host fuku.sandalphon + HostName sandalphon.fuku + User pi + IdentityFile ~/.ssh/id_ed25519 + IdentitiesOnly yes + +Host fuku.zeruel + HostName zeruel.fuku + User pi + IdentityFile ~/.ssh/id_ed25519 + IdentitiesOnly yes + +Host fuku.dns + HostName dns.fuku + User root + IdentityFile ~/.ssh/id_ed25519 + IdentitiesOnly yes + +Host fuku.cloud + HostName cloud.fuku + User root + IdentityFile ~/.ssh/id_ed25519 + IdentitiesOnly yes + +Host fuku.pg9 + HostName postgres.fuku + IdentityFile ~/.ssh/id_ed25519 + User root + +Host fuku.pg15 + HostName postgres15.fuku + IdentityFile ~/.ssh/id_ed25519 + User root + +Host fuku.smough + HostName smough.fuku + IdentityFile ~/.ssh/id_ed25519 + User root + +Host fuku.gitea + HostName gitea.fuku + IdentityFile ~/.ssh/id_ed25519 + User root + +Host fuku.nginx + HostName nginx.fuku + IdentityFile ~/.ssh/id_ed25519 + User root + +Host fuku.mail + HostName mail.fukurokuju.dev + IdentityFile ~/.ssh/id_ed25519 + User root + +Host fuku.k3s + HostName k3s.fuku + User catalin +