From 8bbc550865140bb2c6a83faf3c5b97a4166a57fb Mon Sep 17 00:00:00 2001 From: DannyDannyDanny Date: Thu, 3 Jul 2025 12:11:04 +0000 Subject: [PATCH] merge fish and neovim from wsl branch --- nixos/fish.nix | 73 ++++++++++++++++++++++++++++++++++++++++ nixos/neovim.nix | 86 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+) create mode 100644 nixos/fish.nix create mode 100644 nixos/neovim.nix diff --git a/nixos/fish.nix b/nixos/fish.nix new file mode 100644 index 0000000..bb8c104 --- /dev/null +++ b/nixos/fish.nix @@ -0,0 +1,73 @@ +{ config, pkgs, ... }: + +{ + programs.fish = { + enable = true; + shellAliases = { + theme = "bash ~/dotfiles/bashscripts/wsl_theme.sh"; + }; + interactiveShellInit = '' + fish_vi_key_bindings + set fish_greeting 🐟: (set_color yellow; date +%T; set_color green; date --iso-8601; set_color normal) + + # name: Default + # author: Lily Ballard + # edits: DannyDannyDanny + # ref: stackoverflow.com/a/61262358/5684214 + + function fish_prompt --description 'Write out the prompt' + set -l last_pipestatus $pipestatus + set -lx __fish_last_status $status # Export for __fish_print_pipestatus. + set -l normal (set_color normal) + set -q fish_color_status + or set -g fish_color_status red + + # Color the prompt differently when we're root + set -l color_cwd $fish_color_cwd + set -l suffix '>' + if functions -q fish_is_root_user; and fish_is_root_user + if set -q fish_color_cwd_root + set color_cwd $fish_color_cwd_root + end + set suffix '#' + end + + # Write pipestatus + # If the status was carried over (if no command is issued or if `set` leaves the status untouched), don't bold it. + set -l bold_flag --bold + set -q __fish_prompt_status_generation; or set -g __fish_prompt_status_generation $status_generation + if test $__fish_prompt_status_generation = $status_generation + set bold_flag + end + set __fish_prompt_status_generation $status_generation + set -l status_color (set_color $fish_color_status) + set -l statusb_color (set_color $bold_flag $fish_color_status) + set -l prompt_status (__fish_print_pipestatus "[" "]" "|" "$status_color" "$statusb_color" $last_pipestatus) + set -l nix_shell_info ( + if test -n "$IN_NIX_SHELL" + echo -n "🐚 " + end + ) + + echo -n -s (prompt_login)' ' (set_color $color_cwd) (prompt_pwd) $normal (fish_vcs_prompt) $normal " "$prompt_status $nix_shell_info $suffix " " + end + + ''; + }; + + programs.bash = { + interactiveShellInit = '' + # the first arguement in the if statement check that the parent process is not a fish shell. + # this allows spawning a bash shell inside a fish shell without the inner-most bash shell launching a fish shell + # however this also means that nix-shell starts a bash shell unless you use `nix-shell [args] --run fish` + # or run `fish` as the first command when entering nix-shell + + if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] + then + shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" + exec ${pkgs.fish}/bin/fish $LOGIN_OPTION + fi + ''; + }; +} + diff --git a/nixos/neovim.nix b/nixos/neovim.nix new file mode 100644 index 0000000..37af03c --- /dev/null +++ b/nixos/neovim.nix @@ -0,0 +1,86 @@ +{ config, pkgs, ... }: + +{ + programs.neovim = { + enable = true; + defaultEditor = true; + # package = pkgs.neovim; + configure = { + customRC = '' + set title + set go=a + set mouse=a + set nohlsearch + let mapleader="," + + lua << EOF + local config_file = os.getenv("HOME")..'/.local/share/nvim_color_scheme' + local f=io.open(config_file, "r") + if f~=nil then + local system_theme = f:read() + -- f:close() + io.close(f) + if system_theme == 'dark' then + vim.cmd("set bg=dark") + elseif system_theme == 'light' then + vim.cmd("set bg=light") + else + print('warning: expected value "light" or "dark"') + print(' got:', system_theme) + print(' expected path:', file) + end + else + print('warning: nvim color scheme not found') + print(' expected path:', file) + end + EOF + + colorscheme gruvbox + + " relative line numbering when leaving insert mode + set relativenumber + autocmd InsertEnter * :set number norelativenumber + autocmd InsertLeave * :set nonumber relativenumber + + " netrw (dir listing) settings + let g:netrw_liststyle = 3 + let g:netrw_banner = 0 + let g:netrw_browse_split = 3 + let g:netrw_winsize = 25 " % of page + + set listchars=tab:→\ ,space:·,nbsp:␣,trail:•,eol:¶,precedes:«,extends:» + set clipboard+=unnamedplus + + " Replace-all is aliased to S. + nnoremap S :%s//g + + " save file with ,w + map w :w + + " spellcheck + set spell spelllang=en_us + setlocal spell! spelllang=en_us + ''; + # vimPlugins inspired from Alexnortung + # https://discourse.nixos.org/t/neovim-no-longer-uses-config-or-plugins/13399/4 + packages.nix = with pkgs.vimPlugins; { + start = [ + vim-surround # shortcuts for setting () {} etc. + vim-gitgutter # git diff in sign column + # vim-airline # nice and light status bar # doesn't work nicely with tmux + # coc-nvim coc-git coc-highlight coc-python coc-rls coc-vetur coc-vimtex coc-yaml coc-html coc-json # auto completion + vim-nix # nix highlight + vimtex # latex stuff + fzf-vim # fuzzy finder through vim + nerdtree # file structure inside nvim + rainbow # color parenthesis + gruvbox-nvim # theme + goyo-vim # write prose + limelight-vim # prose paragraph highlighter + ]; + opt = []; + }; + }; + }; +} +