From a839cb0d876a1b8c1cca32f335e4aa8690d613cb Mon Sep 17 00:00:00 2001 From: jim kolpack Date: Mon, 3 Aug 2026 21:41:22 -0400 Subject: [PATCH] Add mc config, lazygit/nerd-font installers, fzf/zoxide bash integration - New mc package: seasons-winter16M skin (fixes washed-out file colors under the old default skin), arrow-key panel navigation, and Backspace bound as an alt key for CdParent (Double Commander-style parent-dir navigation). - setup.sh: install_lazygit and install_nerd_font helpers, since neither ships as an apt/PPA package on this distro anymore. - bash/.bashrc.omb: wire up fzf key-bindings and zoxide, drop the now- redundant bashmarks plugin, enable globstar, and widen history. --- bash/.bashrc.omb | 21 +- kitty/.config/kitty/kitty.conf | 5 + mc/.config/mc/ini | 144 ++++++++++ mc/.config/mc/mc.keymap | 497 +++++++++++++++++++++++++++++++++ setup.sh | 75 +++++ 5 files changed, 741 insertions(+), 1 deletion(-) create mode 100644 mc/.config/mc/ini create mode 100644 mc/.config/mc/mc.keymap diff --git a/bash/.bashrc.omb b/bash/.bashrc.omb index 6c4a378..75be015 100644 --- a/bash/.bashrc.omb +++ b/bash/.bashrc.omb @@ -17,7 +17,6 @@ if [ -d "$HOME/.oh-my-bash" ]; then plugins=( git - bashmarks ) source "$OSH/oh-my-bash.sh" @@ -26,6 +25,26 @@ fi # PATH export PATH="$HOME/.local/bin:$PATH" +# History +HISTSIZE=100000 +HISTFILESIZE=200000 +HISTTIMEFORMAT="%F %T " + +# Recursive globbing with ** +shopt -s globstar + +# fzf — fuzzy Ctrl+R history / Ctrl+T file search +if command -v fzf &>/dev/null; then + for f in /usr/share/doc/fzf/examples/key-bindings.bash /usr/share/fzf/key-bindings.bash; do + [ -f "$f" ] && source "$f" && break + done +fi + +# zoxide — frecency-based `cd` replacement (use `z `) +if command -v zoxide &>/dev/null; then + eval "$(zoxide init bash)" +fi + # Color support if [ -x /usr/bin/dircolors ]; then test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" diff --git a/kitty/.config/kitty/kitty.conf b/kitty/.config/kitty/kitty.conf index 74e2831..328a067 100644 --- a/kitty/.config/kitty/kitty.conf +++ b/kitty/.config/kitty/kitty.conf @@ -496,6 +496,11 @@ visual_bell_duration 0.3 #: }}} +font_family MesloLGS Nerd Font Mono + +#: Needed for oh-my-bash's agnoster theme (powerline glyphs). Installed +#: via setup.sh's install_nerd_font step. + #: Window layout {{{ # remember_window_size yes diff --git a/mc/.config/mc/ini b/mc/.config/mc/ini new file mode 100644 index 0000000..d72e5f0 --- /dev/null +++ b/mc/.config/mc/ini @@ -0,0 +1,144 @@ +[Midnight-Commander] +verbose=true +shell_patterns=true +auto_save_setup=true +preallocate_space=false +auto_menu=false +use_internal_view=true +use_internal_edit=false +clear_before_exec=true +confirm_delete=true +confirm_overwrite=true +confirm_execute=false +confirm_history_cleanup=true +confirm_exit=false +confirm_directory_hotlist_delete=false +confirm_view_dir=false +safe_delete=false +safe_overwrite=false +use_8th_bit_as_meta=false +mouse_move_pages_viewer=true +mouse_close_dialog=false +fast_refresh=false +drop_menus=false +wrap_mode=true +old_esc_mode=true +cd_symlinks=true +show_all_if_ambiguous=false +use_file_to_guess_type=true +alternate_plus_minus=false +only_leading_plus_minus=true +show_output_starts_shell=false +xtree_mode=false +file_op_compute_totals=true +classic_progressbar=true +use_netrc=true +ftpfs_always_use_proxy=false +ftpfs_use_passive_connections=true +ftpfs_use_passive_connections_over_proxy=false +ftpfs_use_unix_list_options=true +ftpfs_first_cd_then_ls=true +ignore_ftp_chattr_errors=true +editor_fill_tabs_with_spaces=false +editor_return_does_auto_indent=false +editor_backspace_through_tabs=false +editor_fake_half_tabs=true +editor_option_save_position=true +editor_option_auto_para_formatting=false +editor_option_typewriter_wrap=false +editor_edit_confirm_save=true +editor_syntax_highlighting=true +editor_persistent_selections=true +editor_drop_selection_on_copy=true +editor_cursor_beyond_eol=false +editor_cursor_after_inserted_block=false +editor_visible_tabs=true +editor_visible_spaces=true +editor_line_state=false +editor_simple_statusbar=false +editor_check_new_line=false +editor_show_right_margin=false +editor_group_undo=true +editor_state_full_filename=true +editor_ask_filename_before_edit=false +nice_rotating_dash=true +shadows=true +mcview_remember_file_position=false +auto_fill_mkdir_name=true +copymove_persistent_attr=true +pause_after_run=1 +mouse_repeat_rate=100 +double_click_speed=250 +old_esc_mode_timeout=1000000 +max_dirt_limit=10 +num_history_items_recorded=60 +vfs_timeout=60 +ftpfs_directory_timeout=900 +ftpfs_retry_seconds=30 +fish_directory_timeout=900 +editor_tab_spacing=8 +editor_word_wrap_line_length=72 +editor_option_save_mode=0 +editor_backup_extension=~ +editor_filesize_threshold=64M +editor_stop_format_chars=-+*\\,.;:&> +mcview_eof= +skin=modarin256-defbg + +[Layout] +output_lines=0 +left_panel_size=53 +top_panel_size=0 +message_visible=true +keybar_visible=true +xterm_title=true +command_prompt=true +menubar_visible=true +free_space=true +horizontal_split=false +vertical_equal=true +horizontal_equal=true + +[Misc] +timeformat_recent=%b %e %H:%M +timeformat_old=%b %e %Y +ftp_proxy_host=gate +ftpfs_password=anonymous@ +display_codepage=UTF-8 +source_codepage=Other_8_bit +autodetect_codeset= +spell_language=en +clipboard_store= +clipboard_paste= + +[Colors] +base_color= +xterm-kitty= +color_terminals= + +[Panels] +show_mini_info=true +kilobyte_si=false +mix_all_files=false +show_backups=true +show_dot_files=true +fast_reload=false +fast_reload_msg_shown=false +mark_moves_down=true +reverse_files_only=true +auto_save_setup_panels=false +navigate_with_arrows=true +panel_scroll_pages=true +panel_scroll_center=false +mouse_move_pages=true +filetype_mode=true +permission_mode=false +torben_fj_mode=false +quick_search_mode=2 +select_flags=6 + +[Panelize] +Find *.orig after patching=find . -name \\*.orig -print +Find SUID and SGID programs=find . \\( \\( -perm -04000 -a -perm /011 \\) -o \\( -perm -02000 -a -perm /01 \\) \\) -print +Find rejects after patching=find . -name \\*.rej -print +Modified git files=git ls-files --modified diff --git a/mc/.config/mc/mc.keymap b/mc/.config/mc/mc.keymap new file mode 100644 index 0000000..84b7714 --- /dev/null +++ b/mc/.config/mc/mc.keymap @@ -0,0 +1,497 @@ +[filemanager] +ChangePanel = tab; ctrl-i +Help = f1 +UserMenu = f2 +View = f3 +# ViewFile = +Edit = f4 +# EditForceInternal = +Copy = f5 +Move = f6 +MakeDir = f7 +Delete = f8 +Menu = f9 +Quit = f10 +MenuLastSelected = f19 +QuitQuiet = f20 +Find = alt-question +CdQuick = alt-c +HotList = ctrl-backslash +Reread = ctrl-r +DirSize = ctrl-space +Suspend = ctrl-z +Swap = ctrl-u +History = alt-h +# PanelListing = +# SetupListingFormat = +ShowHidden = alt-dot +SplitVertHoriz = alt-comma +SplitEqual = alt-equal +SplitMore = alt-shift-right +SplitLess = alt-shift-left +Shell = ctrl-o +PutCurrentPath = alt-a +PutOtherPath = alt-shift-a +PutCurrentSelected = alt-enter; ctrl-enter +PutCurrentFullSelected = ctrl-shift-enter +ViewFiltered = alt-exclamation +Select = kpplus +Unselect = kpminus +SelectInvert = kpasterisk +ScreenList = alt-prime +# OptionsLayout = +# OptionsAppearance = +# OptionsPanel = +# OptionsConfirm = +# OptionsDisplayBits = +# OptionsVfs = +# LearnKeys = +# SaveSetup = +# EditExtensionsFile = +# EditFileHighlightFile = +# Filter = +# ConnectFish = +# ConnectFtp = +# ConnectSmb = +# Undelete = +EditorViewerHistory = alt-shift-e +ExtendedKeyMap = ctrl-x + +[filemanager:xmap] +ChangeMode = c +ChangeOwn = o +ChangeAttributes = e +CompareDirs = d +CompareFiles = ctrl-d +HotListAdd = h +LinkSymbolicEdit = ctrl-s +Link = l +LinkSymbolic = s +LinkSymbolicRelative = v +PanelInfo = i +PanelQuickView = q +ExternalPanelize = exclamation +VfsList = a +Jobs = j +PutCurrentPath = p +PutOtherPath = ctrl-p +PutCurrentTagged = t +PutOtherTagged = ctrl-t +PutCurrentLink = r +PutOtherLink = ctrl-r + +[panel] +CycleListingFormat = alt-t +Search = ctrl-s; alt-s +Mark = insert; ctrl-t +MarkUp = shift-up +MarkDown = shift-down +# MarkLeft = +# MarkRight = +Down = down; ctrl-n +Up = up; ctrl-p +Left = left +Right = right +PageUp = pgup; alt-v +PageDown = pgdn; ctrl-v +Enter = enter +PanelOtherCd = alt-o +PanelOtherCdLink = alt-l +ViewRaw = f13 +EditNew = f14 +CopySingle = f15 +MoveSingle = f16 +DeleteSingle = f18 +# SelectExt = +Select = alt-plus +Unselect = alt-minus +SelectInvert = alt-asterisk +CdChild = ctrl-pgdn +CdParent = ctrl-pgup; backspace +# CdParentSmart = +# Panelize = +History = alt-shift-h +HistoryNext = alt-u +HistoryPrev = alt-y +BottomOnScreen = alt-j +MiddleOnScreen = alt-r +TopOnScreen = alt-g +PanelOtherSync = alt-i +SelectCodepage = alt-e +Top = alt-lt; home; a1 +Bottom = alt-gt; end; c1 +# Sort = +# SortPrev = +# SortNext = +# SortReverse = +# SortByName = +# SortByExt = +# SortBySize = +# SortByMTime = +# ScrollLeft = +# ScrollRight = + +[dialog] +Ok = enter +Cancel = f10; esc; ctrl-g +Up = left; up +#Left = left; up +Down = right; down +#Right = right; down +Help = f1 +Suspend = ctrl-z +Refresh = ctrl-l +ScreenList = alt-prime +ScreenNext = alt-rbrace +ScreenPrev = alt-lbrace + +[menu] +Help = f1 +Left = left; ctrl-b +Right = right; ctrl-f +Up = up; ctrl-p +Down = down; ctrl-n +Home = home; alt-lt; ctr-a +End = end; alt-gt ctrl-e +Enter = enter +Quit = F10; esc; ctrl-g + +[input] +Home = ctrl-a; alt-lt; home; a1 +End = ctrl-e; alt-gt; end; c1 +Left = left; alt-left; ctrl-b +Right = right; alt-right; ctrl-f +WordLeft = ctrl-left; alt-b +WordRight = ctrl-right; alt-f +Backspace = backspace; ctrl-h +Delete = delete; ctrl-d +DeleteToWordBegin = alt-backspace +DeleteToWordEnd = alt-d +# Mark = +Remove = ctrl-w +# Cut = +Store = alt-w +# Paste = +Yank = ctrl-y +DeleteToEnd = ctrl-k +HistoryPrev = alt-p; ctrl-down +HistoryNext = alt-n; ctrl-up +History = alt-h +Complete = alt-tab +# Clear = +MarkLeft = shift-left +MarkRight = shift-right +MarkToWordBegin = ctrl-shift-left +MarkToWordEnd = ctrl-shift-right +MarkToHome = shift-home +MarkToEnd = shift-end + +[listbox] +Up = up; ctrl-p +Down = down; ctrl-n +Top = home; alt-lt; a1 +Bottom = end; alt-gt; c1 +PageUp = pgup; alt-v +PageDown = pgdn; ctrl-v +Delete = delete; d +Clear = shift-delete; shift-d +View = f3 +Edit = f4 +Enter = enter + +[radio] +Up = up; ctrl-p +Down = down; ctrl-n +Top = home; alt-lt; a1 +Bottom = end; alt-gt; c1 +Select = space + +[tree] +Help = f1 +Reread = f2; ctrl-r +Forget = f3 +ToggleNavigation = f4 +Copy = f5 +Move = f6 +Up = up; ctrl-p +Down = down; ctrl-n +Left = left +Right = right +Top = home; alt-lt; a1 +Bottom = end; alt-gt; c1 +PageUp = pgup; alt-v +PageDown = pgdn; ctrl-v +Enter = enter +Search = ctrl-s; alt-s +Delete = f8; delete + +[help] +Help = f1 +Index = f2; c +Back = f3; left; l +Quit = f10; esc +Up = up; ctrl-p +Down = down; ctrl-n +PageDown = f; space; pgdn; ctrl-v +PageUp = b; pgup; alt-v; backspace +HalfPageDown = d +HalfPageUp = u +Top = home; ctrl-home; ctrl-pgup; a1; alt-lt; g +Bottom = end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g +Enter = right; enter +LinkNext = tab +LinkPrev = alt-tab +NodeNext = n +NodePrev = p + +[chattr] +Up = up; left; ctrl-p +Down = down; right; ctrl-n +Top = home; alt-lt; a1 +Bottom = end; alt-gt; c1 +PageUp = pgup; alt-v +PageDown = pgdn; ctrl-v +Mark = t; shift-t +MarkAndDown = insert + +[editor] +Store = ctrl-insert +Paste = shift-insert +Cut = shift-delete +Up = up +Down = down +Left = left +Right = right +WordLeft = ctrl-left; ctrl-z +WordRight = ctrl-right; ctrl-x +Enter = enter +Return = shift-enter; ctrl-enter; ctrl-shift-enter +BackSpace = backspace; ctrl-h +Delete = delete; ctrl-d +PageUp = pgup +PageDown = pgdn +Home = home +End = end +Tab = tab; shift-tab; ctrl-tab; ctrl-shift-tab +Undo = ctrl-u +Redo = alt-r +Top = ctrl-home; alt-lt +Bottom = ctrl-end; alt-gt +ScrollUp = ctrl-up +ScrollDown = ctrl-down +TopOnScreen = ctrl-pgup +BottomOnScreen = ctrl-pgdn +DeleteToWordBegin = alt-backspace +DeleteToWordEnd = alt-d +DeleteLine = ctrl-y +DeleteToEnd = ctrl-k +# DeleteToHome = +# ParagraphUp = +# ParagraphDown = +Save = f2 +# EditFile = +EditNew = ctrl-n +SaveAs = f12; ctrl-f2 +# Close = +History = alt-shift-e +Mark = f3 +Copy = f5 +Move = f6 +Remove = f8 +# MarkLine = +# MarkWord = +# MarkAll = +# Unmark = +Search = f7 +SearchContinue = f17 +# BlockShiftLeft = +# BlockShiftRight = +MarkPageUp = shift-pgup +MarkPageDown = shift-pgdn +MarkLeft = shift-left +MarkRight = shift-right +MarkToWordBegin = ctrl-shift-left +MarkToWordEnd = ctrl-shift-right +MarkUp = shift-up +MarkDown = shift-down +MarkToHome = shift-home +MarkToEnd = shift-end +MarkToFileBegin = ctrl-shift-home +MarkToFileEnd = ctrl-shift-end +MarkToPageBegin = ctrl-shift-pgup +MarkToPageEnd = ctrl-shift-pgdn +MarkScrollUp = ctrl-shift-up +MarkScrollDown = ctrl-shift-down +# MarkParagraphUp = +# MarkParagraphDown = +MarkColumnPageUp = alt-pgup +MarkColumnPageDown = alt-pgdn +MarkColumnLeft = alt-left +MarkColumnRight = alt-right +MarkColumnUp = alt-up +MarkColumnDown = alt-down +# MarkColumnScrollUp = +# MarkColumnScrollDown = +# MarkColumnParagraphUp = +# MarkColumnParagraphDown = +BlockSave = ctrl-f +MarkColumn = f13 +Replace = f4 +ReplaceContinue = f14 +Complete = alt-tab +InsertFile = f15 +Quit = f10; esc +InsertOverwrite = insert +Help = f1 +# Date = +Refresh = ctrl-l +Goto = alt-l +Sort = alt-t +Mail = alt-m +ParagraphFormat = alt-p +MatchBracket = alt-b +ExternalCommand = alt-u +UserMenu = f11 +Menu = f9 +Bookmark = alt-k +BookmarkFlush = alt-o +BookmarkNext = alt-j +BookmarkPrev = alt-i +# History = +Shell = ctrl-o +InsertLiteral = ctrl-q +# MacroStartRecord = +# MacroStopRecord = +MacroStartStopRecord = ctrl-r +# MacroDelete = +ShowNumbers = alt-n +ShowTabTws = alt-underline +SyntaxOnOff = ctrl-s +# SyntaxChoose = +# ShowMargin = +Find = alt-enter +FilePrev = alt-minus +FileNext = alt-plus +# RepeatStartStopRecord = +SelectCodepage = alt-e +# Options = +# OptionsSaveMode = +# SpellCheck = +SpellCheckCurrentWord = ctrl-p +# SpellCheckSelectLang = +# LearnKeys = +# WindowMove = +# WindowResize = +# WindowFullscreen = +# WindowList = +# WindowNext = +# WindowPrev = +# ExtendedKeyMap = + +[viewer] +Help = f1 +WrapMode = f2 +Quit = f3; f10; q; esc +HexMode = f4 +Goto = f5 +Search = f7 +SearchForward = slash +SearchBackward = question +SearchContinue = f17; n +SearchForwardContinue = ctrl-s +SearchBackwardContinue = ctrl-r +SearchOppositeContinue = shift-n +MagicMode = f8 +NroffMode = f9 +Home = ctrl-a +End = ctrl-e +Left = h; left +Right = l; right +LeftQuick = ctrl-left +RightQuick = ctrl-right +Up = k; y; insert; up; ctrl-p +Down = j; e; delete; down; enter; ctrl-n +PageDown = f; space; pgdn; ctrl-v +PageUp = b; pgup; alt-v; backspace +HalfPageDown = d +HalfPageUp = u +Top = home; ctrl-home; ctrl-pgup; a1; alt-lt; g +Bottom = end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g +BookmarkGoto = m +Bookmark = r +FileNext = ctrl-f +FilePrev = ctrl-b +SelectCodepage = alt-e +Shell = ctrl-o +Ruler = alt-r +History = alt-shift-e + +[viewer:hex] +Help = f1 +HexEditMode = f2 +Quit = f3; f10; q; esc +HexMode = f4 +Goto = f5 +Save = f6 +Search = f7 +SearchForward = slash +SearchBackward = question +SearchContinue = f17; n +SearchForwardContinue = ctrl-s +SearchBackwardContinue = ctrl-r +SearchOppositeContinue = shift-n +MagicMode = f8 +NroffMode = f9 +ToggleNavigation = tab +Home = ctrl-a; home +End = ctrl-e; end +Left = b; left +Right = f; right +Up = k; y; up +Down = j; delete; down +PageDown = pgdn; ctrl-v +PageUp = pgup; alt-v +Top = ctrl-home; ctrl-pgup; a1; alt-lt; g +Bottom = ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g +History = alt-shift-e + +[diffviewer] +ShowSymbols = alt-s; s +ShowNumbers = alt-n; l +SplitFull = f +SplitEqual = equal +SplitMore = gt +SplitLess = lt +Tab2 = 2 +Tab3 = 3 +Tab4 = 4 +Tab8 = 8 +Swap = ctrl-u +Redo = ctrl-r +HunkNext = n; enter; space +HunkPrev = p; backspace +Goto = g; shift-g +Save = f2 +Edit = f4 +EditOther = f14 +Merge = f5 +MergeOther = f15 +Search = f7 +SearchContinue = f17 +Options = f9 +Top = ctrl-home +Bottom = ctrl-end +Down = down +Up = up +LeftQuick = ctrl-left +RightQuick = ctrl-right +Left = left +Right = right +PageDown = pgdn +PageUp = pgup +Home = home +End = end +Help = f1 +Quit = f10; q; shift-q; esc +Shell = ctrl-o +SelectCodepage = alt-e diff --git a/setup.sh b/setup.sh index 432f242..5ee1dba 100755 --- a/setup.sh +++ b/setup.sh @@ -11,6 +11,72 @@ stow_pkg() { stow -v -d "$DOTFILES_DIR" -t "$HOME" "$pkg" } +install_nerd_font() { + local font_dir="$HOME/.local/share/fonts" + + if fc-list 2>/dev/null | grep -qi "MesloLGS Nerd Font"; then + echo "OK: MesloLGS Nerd Font already installed" + return + fi + + if ! command -v curl &>/dev/null || ! command -v unzip &>/dev/null; then + echo "SKIP: MesloLGS Nerd Font (curl and/or unzip not available)" + return + fi + + echo "Installing MesloLGS Nerd Font..." + local tmp_zip + tmp_zip="$(mktemp --suffix=.zip)" + if curl -fsSL -o "$tmp_zip" \ + "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.zip"; then + mkdir -p "$font_dir" + unzip -oq "$tmp_zip" -d "$font_dir" "*.ttf" + fc-cache -f "$font_dir" >/dev/null + echo "ADDED: MesloLGS Nerd Font to $font_dir" + else + echo "WARNING: failed to download Nerd Font, skipping" + fi + rm -f "$tmp_zip" +} + +install_lazygit() { + local bin_dir="$HOME/.local/bin" + + if command -v lazygit &>/dev/null; then + echo "OK: lazygit already installed" + return + fi + + if ! command -v curl &>/dev/null || ! command -v tar &>/dev/null; then + echo "SKIP: lazygit (curl and/or tar not available)" + return + fi + + echo "Installing lazygit..." + local version + version="$(curl -fsSL https://api.github.com/repos/jesseduffield/lazygit/releases/latest \ + | grep -Po '"tag_name": "v\K[^"]*')" + + if [ -z "$version" ]; then + echo "WARNING: could not determine latest lazygit version, skipping" + return + fi + + local tmp_tar + tmp_tar="$(mktemp --suffix=.tar.gz)" + if curl -fsSL -o "$tmp_tar" \ + "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${version}_Linux_x86_64.tar.gz"; then + mkdir -p "$bin_dir" + tar -xzf "$tmp_tar" -C "$(dirname "$tmp_tar")" lazygit + install -m 755 "$(dirname "$tmp_tar")/lazygit" "$bin_dir/lazygit" + rm -f "$(dirname "$tmp_tar")/lazygit" + echo "ADDED: lazygit $version to $bin_dir" + else + echo "WARNING: failed to download lazygit, skipping" + fi + rm -f "$tmp_tar" +} + ensure_sourced() { local file="$1" local bashrc="$HOME/.bashrc" @@ -44,10 +110,12 @@ fi # bash — stow dotfiles, then ensure ~/.bashrc sources them stow_pkg bash ensure_sourced "$HOME/.bashrc.omb" +install_lazygit # kitty if command -v kitty &>/dev/null; then stow_pkg kitty + install_nerd_font else echo "SKIP: kitty (not installed)" fi @@ -59,4 +127,11 @@ else echo "SKIP: fastfetch (not installed)" fi +# mc +if command -v mc &>/dev/null; then + stow_pkg mc +else + echo "SKIP: mc (not installed)" +fi + echo "Done!"