From c3e9c4e745fff62f548a34236a4d668313d62d98 Mon Sep 17 00:00:00 2001 From: Loic Nageleisen Date: Fri, 18 Oct 2024 20:11:01 +0200 Subject: [PATCH 1/3] Migrate to nix flake --- .gitignore | 1 + default.nix | 10 +++++++ flake.lock | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 23 ++++++++++++++++ shell.nix | 20 +++++++------- 5 files changed, 120 insertions(+), 10 deletions(-) create mode 100644 default.nix create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.gitignore b/.gitignore index ee6025e..cd6f847 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ /plugged/* /autoload/plug.vim.old /.envrc +/.direnv /localvim diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..f620865 --- /dev/null +++ b/default.nix @@ -0,0 +1,10 @@ +(import + ( + let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in + fetchTarball { + url = lock.nodes.flake-compat.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; + sha256 = lock.nodes.flake-compat.locked.narHash; + } + ) + { src = ./.; } +).defaultNix diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..121b684 --- /dev/null +++ b/flake.lock @@ -0,0 +1,76 @@ +{ + "nodes": { + "flake-compat": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1729097500, + "narHash": "sha256-NMxk91m62pA97pbHqYDNhTgzr24MzKf5D+ZCDlmHXmw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "764efd34fe199a705d62d0738452076e8276dd98", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "master", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..270b3f2 --- /dev/null +++ b/flake.nix @@ -0,0 +1,23 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/master"; + flake-utils.url = "github:numtide/flake-utils"; + flake-compat.url = "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"; + }; + + outputs = { self, nixpkgs, flake-utils, flake-compat }: + flake-utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in { + devShell = pkgs.mkShell { + buildInputs = with pkgs; [ + vim + neovim + vim-language-server + vim-vint + ]; + }; + } + ); +} diff --git a/shell.nix b/shell.nix index fc73348..942ce01 100644 --- a/shell.nix +++ b/shell.nix @@ -1,10 +1,10 @@ -{ pkgs ? import(fetchTarball("https://github.com/NixOS/nixpkgs/archive/d51f8579f03a76718d643dd184ae964e6f0dd751.tar.gz")) {} }: - -pkgs.mkShell { - nativeBuildInputs = with pkgs; [ - vim - neovim - vim-language-server - vim-vint - ]; -} +(import + ( + let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in + fetchTarball { + url = lock.nodes.flake-compat.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; + sha256 = lock.nodes.flake-compat.locked.narHash; + } + ) + { src = ./.; } +).shellNix From daec0e9249708df46dc8c049053bf545c31c6f58 Mon Sep 17 00:00:00 2001 From: Loic Nageleisen Date: Fri, 18 Oct 2024 20:11:44 +0200 Subject: [PATCH 2/3] Adapt to dark/light mode --- plugged.vim | 3 +++ vimrc | 46 ++++++++++++++++++++++++++++++++-------------- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/plugged.vim b/plugged.vim index 138bc07..d03ef05 100644 --- a/plugged.vim +++ b/plugged.vim @@ -18,6 +18,9 @@ Plug 'olivertaylor/vacme' Plug 'pbrisbin/vim-colors-off' Plug 'ikaros/smpl-vim' +" Detect dark/light mode +Plug 'vimpostor/vim-lumen' + " External tool integration Plug 'tpope/vim-bundler' " bundler + gem-ctags Plug 'tpope/vim-fugitive' " git diff --git a/vimrc b/vimrc index fa2c5e3..273f4bc 100644 --- a/vimrc +++ b/vimrc @@ -41,23 +41,23 @@ let g:airline_symbols.linenr = '' let g:airline_symbols.branch = '⎇' let g:airline_symbols.whitespace = '' -" Terminal behavior and appearance -if !has('gui_running') - set showtabline=1 "automatic tab bar - set mouse=n "mouse support - if has("mouse_sgr") - set ttymouse=sgr - end - "set background=light +function! DetectMode() + if has('macunix') && $TERM_PROGRAM == 'Apple_Terminal' + let s:mode = system('defaults read -g AppleInterfaceStyle') + if v:shell_error + set background=light + else + set background=dark + endif + endif +endfunction - if $SSH_CLIENT - colorscheme smpl - else - if &background == 'light' +function! ApplyMode() + " set theme + if &background ==# 'light' colorscheme nofrils-light else - "colorscheme nofrils-dark - colorscheme nofrils-light + colorscheme nofrils-dark endif "use terminal background @@ -72,9 +72,27 @@ if !has('gui_running') hi statement ctermbg=none hi LineNr ctermbg=none endif +endfunction + +" Terminal behavior and appearance +if !has('gui_running') + set showtabline=1 "automatic tab bar + set mouse=n "mouse support + if has("mouse_sgr") + set ttymouse=sgr + end + + if $SSH_CLIENT + colorscheme smpl + else + call DetectMode() + call ApplyMode() endif endif +au User LumenLight call ApplyMode() +au User LumenDark call ApplyMode() + " Appearance tweaks hi VertSplit cterm=NONE gui=NONE set fillchars+=vert:│ From 8171a831b0b64663aab72d9cdcd91d1cd0b9f7ae Mon Sep 17 00:00:00 2001 From: Loic Nageleisen Date: Fri, 18 Oct 2024 20:19:58 +0200 Subject: [PATCH 3/3] Pass vint --- vimrc | 60 ++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/vimrc b/vimrc index 273f4bc..6f161ee 100644 --- a/vimrc +++ b/vimrc @@ -17,17 +17,21 @@ let g:netrw_dirhistmax = 0 set clipboard^=unnamed " Terminal title -if has('macunix') && $TERM_PROGRAM == 'Apple_Terminal' +if has('macunix') && $TERM_PROGRAM ==# 'Apple_Terminal' set title set t_ts=]6; set t_fs= - if !exists("autocmd_terminal_title") + if !exists('autocmd_terminal_title') let autocmd_terminal_title = 1 - autocmd BufEnter,BufRead * let &titlestring = "file://" . hostname() . expand("%:p") + augroup TermTitle + autocmd BufEnter,BufRead * let &titlestring = "file://" . hostname() . expand("%:p") + augroup END endif else set title - autocmd BufEnter,BufRead * let &titlestring = expand("%:p") + augroup TermTitle + autocmd BufEnter,BufRead * let &titlestring = expand("%:p") + augroup END endif " Airline @@ -42,7 +46,7 @@ let g:airline_symbols.branch = '⎇' let g:airline_symbols.whitespace = '' function! DetectMode() - if has('macunix') && $TERM_PROGRAM == 'Apple_Terminal' + if has('macunix') && $TERM_PROGRAM ==# 'Apple_Terminal' let s:mode = system('defaults read -g AppleInterfaceStyle') if v:shell_error set background=light @@ -78,7 +82,7 @@ endfunction if !has('gui_running') set showtabline=1 "automatic tab bar set mouse=n "mouse support - if has("mouse_sgr") + if has('mouse_sgr') set ttymouse=sgr end @@ -90,8 +94,10 @@ if !has('gui_running') endif endif -au User LumenLight call ApplyMode() -au User LumenDark call ApplyMode() +augroup Lumen + autocmd User LumenLight call ApplyMode() + autocmd User LumenDark call ApplyMode() +augroup END " Appearance tweaks hi VertSplit cterm=NONE gui=NONE @@ -104,7 +110,7 @@ let g:ale_virtualtext_cursor = 0 let g:ale_ruby_rubocop_executable = 'bundle' let g:ale_ruby_steep_executable = 'bundle' let g:ale_ruby_standardrb_executable = 'bundle' -let g:go_fmt_command = "goimports" +let g:go_fmt_command = 'goimports' "let g:ale_linters = {'ruby': ['standardrb']} "let g:ale_fixers = { 'python': ['black'], 'ruby': ['standardrb'] } "let g:ale_fix_on_save = 1 @@ -144,14 +150,14 @@ set hlsearch "highlight search matches set showmatch "highlight both matching parentheses " Swap and undo files -set dir=~/.vim/tmp/swap//,/var/tmp//,/tmp//,. +set directory=~/.vim/tmp/swap//,/var/tmp//,/tmp//,. "set undodir=~/.vim/tmp/undo//,. " Buffer management -set swb=usetab "make :sb go to tabs too +set switchbuf=usetab "make :sb go to tabs too " SuperTab options -let g:SuperTabDefaultCompletionType = "context" +let g:SuperTabDefaultCompletionType = 'context' " Complete options (disable preview scratch window) set completeopt=menu,menuone,longest " Limit popup menu height @@ -203,7 +209,7 @@ xmap ga (EasyAlign) nmap ga (EasyAlign) " organ -if ! exists("g:organ_loaded") +if ! exists('g:organ_loaded') let g:organ_config = {} let g:organ_config.speedkeys = 1 endif @@ -216,10 +222,10 @@ let g:EditorConfig_exclude_patterns = ['fugitive://.\*'] " Restore last known cursor position function! ResCur() - if &filetype == 'netrw' + if &filetype ==# 'netrw' return 0 endif - if line("'\"") <= line("$") + if line("'\"") <= line('$') normal! g`" return 1 endif @@ -230,7 +236,7 @@ if has('macunix') function! OpenURLUnderCursor() let s:uri = matchstr(getline('.'), '[a-z]*:\/\/[^ >,;()]*') let s:uri = shellescape(s:uri, 1) - if s:uri != '' + if s:uri !=# '' silent exec "!open '".s:uri."'" :redraw! endif @@ -239,12 +245,12 @@ if has('macunix') endif " Unfold at cursor position -if has("folding") +if has('folding') function! UnfoldCur() if !&foldenable return endif - let cl = line(".") + let cl = line('.') if cl <= 1 return endif @@ -252,7 +258,7 @@ if has("folding") let uf = foldlevel(cl - 1) let min = (cf > uf ? uf : cf) if min - execute "normal!" min . "zo" + execute 'normal!' min . 'zo' return 1 endif endfunction @@ -261,7 +267,7 @@ endif " Restore last known cursor position on open augroup resCur autocmd! - if has("folding") + if has('folding') autocmd BufWinEnter * if ResCur() | call UnfoldCur() | endif else autocmd BufWinEnter * call ResCur() @@ -287,7 +293,7 @@ endfunction function! ShellcheckSet(buffer) let l:shell = ShellcheckDetect(a:buffer) - if l:shell == 'bash' + if l:shell ==# 'bash' call setbufvar(a:buffer, 'is_bash', 1) else call setbufvar(a:buffer, 'is_bash', 0) @@ -328,7 +334,7 @@ endfunction map fs :call FormatSort() " Go tools path -let g:go_bin_path = expand('$HOME') . "/.local/libexec/go/bin" +let g:go_bin_path = expand('$HOME') . '/.local/libexec/go/bin' if expand('%:t') =~? 'rfc\d\+' || expand('%:t') =~? 'draft-.*-\d\{2,}' setfiletype rfc @@ -338,7 +344,7 @@ endif map s :mksession! " Restore session if Session.vim exists "function! RestoreSession() -" if argc() == 0 && filereadable("Session.vim") "vim called without arguments +" if argc() == 0 && filereadable('Session.vim') "vim called without arguments " "let answer = confirm('foo?', '&Yes\nNo', 1) " execute 'source Session.vim' " end @@ -349,9 +355,9 @@ map s :mksession! source $VIMRUNTIME/macros/matchit.vim function! UpdateTags() - execute ":silent !ctags -R ." - execute ":redraw!" - echohl StatusLine | echo "tags updated" | echohl None + execute ':silent !ctags -R .' + execute ':redraw!' + echohl StatusLine | echo 'tags updated' | echohl None endfunction nnoremap :call UpdateTags() @@ -369,7 +375,7 @@ function! LocalInit() if filereadable(s:local_config_file) if index(s:local_config_allowed, s:local_config_file) < 0 - echo "local config file disallowed: " . s:local_config_file + echo 'local config file disallowed: ' . s:local_config_file else call LocalLoad() endif