Home
Random
Log in
Settings
About the NixOS Wiki
NixOS Wiki
Search
Export translations
Translate
Settings
Group
Accelerated Video Playback
Appimage
Applications
Category:Community
Category:Desktop environment
Category:Hardware
Category:Server
Category:Software
Creating a NixOS live CD
Disko
Doas
Docker
FAQ
Firefox
Flakes
Hardware/System76/galp5
Honk
Hugo
Hydra
Install NixOS on Amazon EC2
Kitty
Konqueror
MediaWiki:Sidebar
Mihomo
Neovim
Nitrokey
Nix (language)
Nix (package manager)
Nix ecosystem
NixOS
NixOS as a desktop
NixOS Installation Guide
NixOS on ARM
NixOS on ARM/UEFI
NixOS Wiki
NixOS Wiki/documentation topics
NixOS Wiki/get in touch
NixOS Wiki/getting started
NixOS Wiki/setting up
NixOS Wiki/special pages
NixOS Wiki/welcome
NixOS Wiki:News
Nixpkgs
Packaging/Icons
Plymouth
Secure Boot
Smartmontools
Starship
Steam
Sudo
Systemd/Hardening
Systemd/logind
Systemd/timers
Systemd/User Services
Terms and Definitions in Nix Project
Vim
VR
Language
aa - Qafár af
aae - Arbërisht
ab - аԥсшәа
abs - bahasa ambon
ace - Acèh
acf - Kwéyòl Sent Lisi
acm - عراقي
ady - адыгабзэ
ady-cyrl - адыгабзэ
aeb - تونسي / Tûnsî
aeb-arab - تونسي
aeb-latn - Tûnsî
af - Afrikaans
aln - Gegë
alt - алтай тил
am - አማርኛ
ami - Pangcah
an - aragonés
ang - Ænglisc
ann - Obolo
anp - अंगिका
apc - شامي
ar - العربية
arc - ܐܪܡܝܐ
arn - mapudungun
arq - جازايرية
ary - الدارجة
arz - مصرى
as - অসমীয়া
ase - American sign language
ast - asturianu
atj - Atikamekw
av - авар
avk - Kotava
awa - अवधी
ay - Aymar aru
az - azərbaycanca
azb - تۆرکجه
ba - башҡортса
ban - Basa Bali
ban-bali - ᬩᬲᬩᬮᬶ
bar - Boarisch
bbc - Batak Toba
bbc-latn - Batak Toba
bcc - جهلسری بلوچی
bci - wawle
bcl - Bikol Central
bdr - Bajau Sama
be - беларуская
be-tarask - беларуская (тарашкевіца)
bew - Betawi
bg - български
bgc - हरियाणवी
bgn - روچ کپتین بلوچی
bh - भोजपुरी
bho - भोजपुरी
bi - Bislama
bjn - Banjar
blk - ပအိုဝ်ႏဘာႏသာႏ
bm - bamanankan
bn - বাংলা
bo - བོད་ཡིག
bpy - বিষ্ণুপ্রিয়া মণিপুরী
bqi - بختیاری
br - brezhoneg
brh - Bráhuí
bs - bosanski
btm - Batak Mandailing
bto - Iriga Bicolano
bug - Basa Ugi
bxr - буряад
ca - català
cbk-zam - Chavacano de Zamboanga
ccp - 𑄌𑄋𑄴𑄟𑄳𑄦
cdo - 閩東語 / Mìng-dĕ̤ng-ngṳ̄
ce - нохчийн
ceb - Cebuano
ch - Chamoru
chn - chinuk wawa
cho - Chahta anumpa
chr - ᏣᎳᎩ
chy - Tsetsêhestâhese
ckb - کوردی
co - corsu
cps - Capiceño
cpx - 莆仙語 / Pó-sing-gṳ̂
cpx-hans - 莆仙语(简体)
cpx-hant - 莆仙語(繁體)
cpx-latn - Pó-sing-gṳ̂ (Báⁿ-uā-ci̍)
cr - Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ
crh - qırımtatarca
crh-cyrl - къырымтатарджа (Кирилл)
crh-latn - qırımtatarca (Latin)
crh-ro - tatarşa
cs - čeština
csb - kaszëbsczi
cu - словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ
cv - чӑвашла
cy - Cymraeg
da - dansk
dag - dagbanli
de - Deutsch
de-at - Österreichisches Deutsch
de-ch - Schweizer Hochdeutsch
de-formal - Deutsch (Sie-Form)
dga - Dagaare
din - Thuɔŋjäŋ
diq - Zazaki
dsb - dolnoserbski
dtp - Kadazandusun
dty - डोटेली
dua - Duálá
dv - ދިވެހިބަސް
dz - ཇོང་ཁ
ee - eʋegbe
efi - Efịk
egl - Emiliàn
el - Ελληνικά
eml - emiliàn e rumagnòl
en - English
en-ca - Canadian English
en-gb - British English
eo - Esperanto
es - español
es-419 - español de América Latina
es-formal - español (formal)
et - eesti
eu - euskara
ext - estremeñu
fa - فارسی
fat - mfantse
ff - Fulfulde
fi - suomi
fit - meänkieli
fj - Na Vosa Vakaviti
fo - føroyskt
fon - fɔ̀ngbè
fr - français
frc - français cadien
frp - arpetan
frr - Nordfriisk
fur - furlan
fy - Frysk
ga - Gaeilge
gaa - Ga
gag - Gagauz
gan - 贛語
gan-hans - 赣语(简体)
gan-hant - 贛語(繁體)
gcf - kréyòl Gwadloup
gcr - kriyòl gwiyannen
gd - Gàidhlig
gl - galego
gld - на̄ни
glk - گیلکی
gn - Avañe'ẽ
gom - गोंयची कोंकणी / Gõychi Konknni
gom-deva - गोंयची कोंकणी
gom-latn - Gõychi Konknni
gor - Bahasa Hulontalo
got - 𐌲𐌿𐍄𐌹𐍃𐌺
gpe - Ghanaian Pidgin
grc - Ἀρχαία ἑλληνικὴ
gsw - Alemannisch
gu - ગુજરાતી
guc - wayuunaiki
gur - farefare
guw - gungbe
gv - Gaelg
ha - Hausa
hak - 客家語 / Hak-kâ-ngî
hak-hans - 客家语(简体)
hak-hant - 客家語(繁體)
hak-latn - Hak-kâ-ngî (Pha̍k-fa-sṳ)
haw - Hawaiʻi
he - עברית
hi - हिन्दी
hif - Fiji Hindi
hif-latn - Fiji Hindi
hil - Ilonggo
hno - ہندکو
ho - Hiri Motu
hr - hrvatski
hrx - Hunsrik
hsb - hornjoserbsce
hsn - 湘語
ht - Kreyòl ayisyen
hu - magyar
hu-formal - magyar (formal)
hy - հայերեն
hyw - Արեւմտահայերէն
hz - Otsiherero
ia - interlingua
iba - Jaku Iban
ibb - ibibio
id - Bahasa Indonesia
ie - Interlingue
ig - Igbo
igl - Igala
ii - ꆇꉙ
ik - Iñupiatun
ike-cans - ᐃᓄᒃᑎᑐᑦ
ike-latn - inuktitut
ilo - Ilokano
inh - гӀалгӀай
io - Ido
is - íslenska
isv-cyrl - меджусловјанскы
isv-latn - medžuslovjansky
it - italiano
iu - ᐃᓄᒃᑎᑐᑦ / inuktitut
ja - 日本語
jam - Patois
jbo - la .lojban.
jut - jysk
jv - Jawa
ka - ქართული
kaa - Qaraqalpaqsha
kab - Taqbaylit
kai - Karai-karai
kbd - адыгэбзэ
kbd-cyrl - адыгэбзэ
kbp - Kabɩyɛ
kcg - Tyap
kea - kabuverdianu
kg - Kongo
kge - Kumoring
khw - کھوار
ki - Gĩkũyũ
kiu - Kırmancki
kj - Kwanyama
kjh - хакас
kjp - ဖၠုံလိက်
kk - қазақша
kk-arab - قازاقشا (تٴوتە)
kk-cn - قازاقشا (جۇنگو)
kk-cyrl - қазақша (кирил)
kk-kz - қазақша (Қазақстан)
kk-latn - qazaqşa (latın)
kk-tr - qazaqşa (Türkïya)
kl - kalaallisut
km - ភាសាខ្មែរ
kn - ಕನ್ನಡ
knc - Yerwa Kanuri
ko - 한국어
ko-kp - 조선말
koi - перем коми
kr - kanuri
krc - къарачай-малкъар
kri - Krio
krj - Kinaray-a
krl - karjal
ks - कॉशुर / کٲشُر
ks-arab - کٲشُر
ks-deva - कॉशुर
ksh - Ripoarisch
ksw - စှီၤ
ku - kurdî
ku-arab - کوردی (عەرەبی)
ku-latn - kurdî (latînî)
kum - къумукъ
kus - Kʋsaal
kv - коми
kw - kernowek
ky - кыргызча
la - Latina
lad - Ladino
lb - Lëtzebuergesch
lbe - лакку
lez - лезги
lfn - Lingua Franca Nova
lg - Luganda
li - Limburgs
lij - Ligure
liv - Līvõ kēļ
lki - لەکی
lld - Ladin
lmo - lombard
ln - lingála
lo - ລາວ
loz - Silozi
lrc - لۊری شومالی
lt - lietuvių
ltg - latgaļu
lua - ciluba
lus - Mizo ţawng
luz - لئری دوٙمینی
lv - latviešu
lzh - 文言
lzz - Lazuri
mad - Madhurâ
mag - मगही
mai - मैथिली
map-bms - Basa Banyumasan
mdf - мокшень
mg - Malagasy
mh - Ebon
mhr - олык марий
mi - Māori
min - Minangkabau
mk - македонски
ml - മലയാളം
mn - монгол
mnc - manju gisun
mnc-latn - manju gisun
mnc-mong - ᠮᠠᠨᠵᡠ ᡤᡳᠰᡠᠨ
mni - ꯃꯤꯇꯩ ꯂꯣꯟ
mnw - ဘာသာမန်
mo - молдовеняскэ
mos - moore
mr - मराठी
mrh - Mara
mrj - кырык мары
ms - Bahasa Melayu
ms-arab - بهاس ملايو
mt - Malti
mui - Baso Palembang
mus - Mvskoke
mwl - Mirandés
my - မြန်မာဘာသာ
myv - эрзянь
mzn - مازِرونی
na - Dorerin Naoero
nah - Nāhuatl
nan - 閩南語 / Bân-lâm-gú
nan-hant - 閩南語(傳統漢字)
nan-latn-pehoeji - Bân-lâm-gú (Pe̍h-ōe-jī)
nan-latn-tailo - Bân-lâm-gú (Tâi-lô)
nap - Napulitano
nb - norsk bokmål
nds - Plattdüütsch
nds-nl - Nedersaksies
ne - नेपाली
new - नेपाल भाषा
ng - Oshiwambo
nia - Li Niha
nit - కొలామి
niu - Niuē
nl - Nederlands
nl-informal - Nederlands (informeel)
nmz - nawdm
nn - norsk nynorsk
no - norsk
nod - ᨣᩤᩴᨾᩮᩬᩥᨦ
nog - ногайша
nov - Novial
nqo - ߒߞߏ
nr - isiNdebele seSewula
nrm - Nouormand
nso - Sesotho sa Leboa
nup - Nupe
nv - Diné bizaad
ny - Chi-Chewa
nyn - runyankore
nyo - Orunyoro
nys - Nyunga
oc - occitan
ojb - Ojibwemowin
olo - livvinkarjala
om - Oromoo
or - ଓଡ଼ିଆ
os - ирон
pa - ਪੰਜਾਬੀ
pag - Pangasinan
pam - Kapampangan
pap - Papiamentu
pcd - Picard
pcm - Naijá
pdc - Deitsch
pdt - Plautdietsch
pfl - Pälzisch
pi - पालि
pih - Norfuk / Pitkern
pl - polski
pms - Piemontèis
pnb - پنجابی
pnt - Ποντιακά
prg - prūsiskan
ps - پښتو
pt - português
pt-br - português do Brasil
pwn - pinayuanan
qu - Runa Simi
qug - Runa shimi
rgn - Rumagnôl
rif - Tarifit
rki - ရခိုင်
rm - rumantsch
rmc - romaňi čhib
rmy - romani čhib
rn - ikirundi
ro - română
roa-tara - tarandíne
rsk - руски
ru - русский
rue - русиньскый
rup - armãneashti
ruq - Vlăheşte
ruq-cyrl - Влахесте
ruq-latn - Vlăheşte
rut - мыхаӀбишды
rw - Ikinyarwanda
ryu - うちなーぐち
sa - संस्कृतम्
sah - саха тыла
sat - ᱥᱟᱱᱛᱟᱲᱤ
sc - sardu
scn - sicilianu
sco - Scots
sd - سنڌي
sdc - Sassaresu
sdh - کوردی خوارگ
se - davvisámegiella
se-fi - davvisámegiella (Suoma bealde)
se-no - davvisámegiella (Norgga bealde)
se-se - davvisámegiella (Ruoŧa bealde)
sei - Cmique Itom
ses - Koyraboro Senni
sg - Sängö
sgs - žemaitėška
sh - srpskohrvatski / српскохрватски
sh-cyrl - српскохрватски (ћирилица)
sh-latn - srpskohrvatski (latinica)
shi - Taclḥit
shi-latn - Taclḥit
shi-tfng - ⵜⴰⵛⵍⵃⵉⵜ
shn - ၽႃႇသႃႇတႆး
shy - tacawit
shy-latn - tacawit
si - සිංහල
simple - Simple English
sjd - кӣллт са̄мь кӣлл
sje - bidumsámegiella
sk - slovenčina
skr - سرائیکی
skr-arab - سرائیکی
sl - slovenščina
sli - Schläsch
sm - Gagana Samoa
sma - åarjelsaemien
smn - anarâškielâ
sms - nuõrttsääʹmǩiõll
sn - chiShona
so - Soomaaliga
sq - shqip
sr - српски / srpski
sr-ec - српски (ћирилица)
sr-el - srpski (latinica)
srn - Sranantongo
sro - sardu campidanesu
ss - SiSwati
st - Sesotho
stq - Seeltersk
sty - себертатар
su - Sunda
sv - svenska
sw - Kiswahili
syl - ꠍꠤꠟꠐꠤ
szl - ślůnski
szy - Sakizaya
ta - தமிழ்
tay - Tayal
tcy - ತುಳು
tdd - ᥖᥭᥰ ᥖᥬᥲ ᥑᥨᥒᥰ
te - తెలుగు
tet - tetun
tg - тоҷикӣ
tg-cyrl - тоҷикӣ
tg-latn - tojikī
th - ไทย
ti - ትግርኛ
tig - ትግሬ
tk - Türkmençe
tl - Tagalog
tly - tolışi
tly-cyrl - толыши
tn - Setswana
to - lea faka-Tonga
tok - toki pona
tpi - Tok Pisin
tr - Türkçe
tru - Ṫuroyo
trv - Seediq
ts - Xitsonga
tt - татарча / tatarça
tt-cyrl - татарча
tt-latn - tatarça
ttj - Orutooro
tum - chiTumbuka
tw - Twi
ty - reo tahiti
tyv - тыва дыл
tzm - ⵜⴰⵎⴰⵣⵉⵖⵜ
udm - удмурт
ug - ئۇيغۇرچە / Uyghurche
ug-arab - ئۇيغۇرچە
ug-latn - Uyghurche
uk - українська
ur - اردو
uz - oʻzbekcha / ўзбекча
uz-cyrl - ўзбекча
uz-latn - oʻzbekcha
ve - Tshivenda
vec - vèneto
vep - vepsän kel’
vi - Tiếng Việt
vls - West-Vlams
vmf - Mainfränkisch
vmw - emakhuwa
vo - Volapük
vot - Vaďďa
vro - võro
wa - walon
wal - wolaytta
war - Winaray
wls - Fakaʻuvea
wo - Wolof
wuu - 吴语
wuu-hans - 吴语(简体)
wuu-hant - 吳語(正體)
xal - хальмг
xh - isiXhosa
xmf - მარგალური
xsy - saisiyat
yi - ייִדיש
yo - Yorùbá
yrl - Nhẽẽgatú
yue - 粵語
yue-hans - 粵语(简体)
yue-hant - 粵語(繁體)
za - Vahcuengh
zea - Zeêuws
zgh - ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ
zgh-latn - tamaziɣt tanawayt
zh - 中文
zh-cn - 中文(中国大陆)
zh-hans - 中文(简体)
zh-hant - 中文(繁體)
zh-hk - 中文(香港)
zh-mo - 中文(澳門)
zh-my - 中文(马来西亚)
zh-sg - 中文(新加坡)
zh-tw - 中文(臺灣)
zu - isiZulu
Format
Export for off-line translation
Export in native format
Export in CSV format
Fetch
<languages/> <div lang="en" dir="ltr" class="mw-content-ltr"> [https://www.vim.org/ Vim] (vi improved) is a highly configurable modal text editor program for the terminal. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> == Installation == </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Basic Install === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> On unstable: </div> <syntaxhighlight lang="nix> programs.vim.enable = true; </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> or </div> <syntaxhighlight lang="nix> programs.vim = { enable = true; package = pkgs.vim_configurable; }; </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> On 24.05 or older: </div> <syntaxhighlight lang="nix> environment.systemPackages = with pkgs; [ vim ]; </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> or </div> <syntaxhighlight lang="nix> environment.systemPackages = with pkgs; [ vim_configurable ]; </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> === Using Home Manager === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Vim can easily be set up using [[Special:MyLanguage/Home Manager|Home Manager]]. Here's a minimal example: </div> <syntaxhighlight lang="nix> programs.vim = { enable = true; plugins = with pkgs.vimPlugins; [ vim-airline ]; settings = { ignorecase = true; }; extraConfig = '' set mouse=a ''; }; </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> See [https://github.com/rycee/home-manager/blob/master/modules/programs/vim.nix] for the full set of options. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Vim Spell Files === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> You can configure home-manager to install spelling files into your user directory by packaging individual spell files. Here' an example for neovim and French: </div> <syntaxHighlight lang="nix"> let nvim-spell-fr-utf8-dictionary = builtins.fetchurl { url = "http://ftp.vim.org/vim/runtime/spell/fr.utf-8.spl"; sha256 = "abfb9702b98d887c175ace58f1ab39733dc08d03b674d914f56344ef86e63b61"; }; nvim-spell-fr-utf8-suggestions = builtins.fetchurl { url = "http://ftp.vim.org/vim/runtime/spell/fr.utf-8.sug"; sha256 = "0294bc32b42c90bbb286a89e23ca3773b7ef50eff1ab523b1513d6a25c6b3f58"; }; nvim-spell-fr-latin1-dictionary = builtins.fetchurl { url = "http://ftp.vim.org/vim/runtime/spell/fr.latin1.spl"; sha256 = "086ccda0891594c93eab143aa83ffbbd25d013c1b82866bbb48bb1cb788cc2ff"; }; nvim-spell-fr-latin1-suggestions = builtins.fetchurl { url = "http://ftp.vim.org/vim/runtime/spell/fr.latin1.sug"; sha256 = "5cb2c97901b9ca81bf765532099c0329e2223c139baa764058822debd2e0d22a"; }; in { xdg.configFile."nvim/spell/fr.utf-8.spl".source = nvim-spell-fr-utf8-dictionary; xdg.configFile."nvim/spell/fr.utf-8.sug".source = nvim-spell-fr-utf8-suggestions; xdg.configFile."nvim/spell/fr.latin1.spl".source = nvim-spell-fr-latin1-dictionary; xdg.configFile."nvim/spell/fr.latin1.sug".source = nvim-spell-fr-latin1-suggestions; } </syntaxHighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== NeoVim with Coc for Python ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> For NeoVim use this home manager config: https://github.com/NixOS/nixpkgs/issues/98166#issuecomment-725319238 </div> <div lang="en" dir="ltr" class="mw-content-ltr"> == System wide vim/nvim configuration == </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If you want a system wide "baseline" configuration for vim/nvim here are two examples:. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> On unstable: </div> <syntaxHighlight lang="nix"> { pkgs, ... }: { programs.vim = { enable = true; defaultEditor = true; package = (pkgs.vim_configurable.override { }).customize{ name = "vim"; <div lang="en" dir="ltr" class="mw-content-ltr"> # Install plugins for example for syntax highlighting of nix files </div> vimrcConfig.packages.myplugins = with pkgs.vimPlugins; { start = [ vim-nix vim-lastplace ]; opt = []; }; vimrcConfig.customRC = '' <div lang="en" dir="ltr" class="mw-content-ltr"> " your custom vimrc </div> set nocompatible set backspace=indent,eol,start <div lang="en" dir="ltr" class="mw-content-ltr"> " Turn on syntax highlighting by default </div> syntax on " ... ''; }; }; } </syntaxHighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> On 24.05 or older: </div> <syntaxHighlight lang="nix"> { pkgs, ... }: { environment.variables = { EDITOR = "vim"; environment.systemPackages = with pkgs; [ ((vim_configurable.override { }).customize{ name = "vim"; <div lang="en" dir="ltr" class="mw-content-ltr"> # Install plugins for example for syntax highlighting of nix files </div> vimrcConfig.packages.myplugins = with pkgs.vimPlugins; { start = [ vim-nix vim-lastplace ]; opt = []; }; vimrcConfig.customRC = '' <div lang="en" dir="ltr" class="mw-content-ltr"> " your custom vimrc </div> set nocompatible set backspace=indent,eol,start <div lang="en" dir="ltr" class="mw-content-ltr"> " Turn on syntax highlighting by default </div> syntax on " ... ''; } )]; } </syntaxHighlight> <syntaxHighlight lang="nix"> { pkgs, ... }: { programs.neovim = { enable = true; defaultEditor = true; vimAlias = true; configure = { customRC = '' <div lang="en" dir="ltr" class="mw-content-ltr"> " your custom vimrc </div> set nocompatible set backspace=indent,eol,start " ... ''; packages.myPlugins = with pkgs.vimPlugins; { start = [ vim-lastplace vim-nix ]; opt = []; }; }; }; } </syntaxHighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> import these in your <code>configuration.nix</code> and </div> <syntaxHighlight lang="nix"> { imports = [ ./vim.nix ]; # ... } </syntaxHighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> == Custom setup without using Home Manager == </div> <div lang="en" dir="ltr" class="mw-content-ltr"> {{note|To get a general overview about how to set up your vim in nix, refer to [https://www.mpscholten.de/nixos/2016/04/11/setting-up-vim-on-nixos.html mpscholten's blog] }} </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Vim plugins can be installed with the help of nix. You can omit using vim plugin managers and do everything in your <code>.nixpkgs/config</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A lot of documentation about package management and configuration of vim in nix is stored at [https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/vim-utils.nix] in nixpkgs. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Customizations === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Both vim and neovim can be further configured to include your favorite plugins and additional libraries. To list all available vim plugins, run <code>nix search nixpkgs#vimPlugins</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Add the following code to your <code>~/.nixpkgs/config.nix</code>: </div> <syntaxHighlight lang="nix"> { packageOverrides = pkgs: with pkgs; { myVim = vim_configurable.customize { name = "vim-with-plugins"; <div lang="en" dir="ltr" class="mw-content-ltr"> # add here code from the example section </div> }; myNeovim = neovim.override { configure = { customRC = '' <div lang="en" dir="ltr" class="mw-content-ltr"> # here your custom configuration goes! </div> ''; packages.myVimPackage = with pkgs.vimPlugins; { <div lang="en" dir="ltr" class="mw-content-ltr"> # see examples below how to use custom packages </div> start = [ ]; opt = [ ]; }; }; }; }; } </syntaxHighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> After that you can install your special grafted `myVim` or `myNeovim` packages. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Examples === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Apply custom vimrc configuration ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> NB: you ''must'' use <code>vimrcConfig.customRC</code> rather than installing a <code>~/.vimrc</code> by hand, since the customized Vim will silently ignore any vimrc in your home directory. </div> <syntaxHighlight lang="nix"> vim_configurable.customize { name = "vim-with-plugins"; <div lang="en" dir="ltr" class="mw-content-ltr"> # add custom .vimrc lines like this: </div> vimrcConfig.customRC = '' set hidden set colorcolumn=80 ''; } </syntaxHighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> If you need to run code before plugins are added, you can use <code>vimrcConfig.beforePlugins</code> (be sure to include <code>set nocompatible</code> if you override [https://github.com/NixOS/nixpkgs/blob/c3df8057dad986bf7f3928de1b5233fadb52bb15/pkgs/misc/vim-plugins/vim-utils.nix#L264-L267 the default value]). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Using vim's builtin packaging capability === </div> <syntaxHighlight lang="nix"> vim_configurable.customize { vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; { <div lang="en" dir="ltr" class="mw-content-ltr"> # loaded on launch </div> start = [ YouCompleteMe fugitive ]; <div lang="en" dir="ltr" class="mw-content-ltr"> # manually loadable by calling `:packadd $plugin-name` </div> opt = [ phpCompletion elm-vim ]; <div lang="en" dir="ltr" class="mw-content-ltr"> # To automatically load a plugin when opening a filetype, add vimrc lines like: </div> # autocmd FileType php :packadd phpCompletion } }; </syntaxHighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> Note that dynamically loading with opt may be buggy and the workaround is to use [https://vi.stackexchange.com/a/20818/30821 start instead]. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Using Pathogen as manager === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> There is a pathogen implementation as well, but its startup is slower and [VAM] has more features. </div> <syntaxhighlight lang="nix"> vimrcConfig.pathogen.knownPlugins = vimPlugins; # optional vimrcConfig.pathogen.pluginNames = [ "vim-addon-nix" "youcompleteme" ]; </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> === Using Vim-Plug as manager === </div> <syntaxhighlight lang="nix"> vimrcConfig.plug.plugins = with pkgs.vimPlugins; [vim-addon-nix youcompleteme]; </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> === Adding new plugins === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> As per the instructions found in https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * First run <code>./update.py</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * Commit the changes with the commit message "vimPlugins: Update". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * Add your plugin to ./vim-plugin-names (please try to maintain the list alphabetically sorted). You can customize the branch by appending for example <code>@main</code> to an entry (search the file for examples) </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * Run <code>./update.py</code> once again to generate the plugin's nix expression. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * Commit your changes one more time, this time with the message formated as such: "vimPlugins.[plugin-name]: init at [version]". </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * If you need to add additional code/patches to the generated code, add those lines to <code>pkgs/misc/vim-plugins/vim2nix/additional-nix-code</code> and rerun <code>./update.py</code>. They will be included in the generated code. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Notes Regarding Plugins ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> For additional info, you may wish to look at [https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md documentation on the nixpkgs repository]. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Add a new custom plugin to the users packages === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Sometimes you do not want to change upstream plugins, for this you can use <code>vimUtils.buildVimPlugin</code> to create your own: </div> <syntaxHighlight lang="nix"> let vim-better-whitespace = pkgs.vimUtils.buildVimPlugin { name = "vim-better-whitespace"; src = pkgs.fetchFromGitHub { owner = "ntpeters"; repo = "vim-better-whitespace"; rev = "984c8da518799a6bfb8214e1acdcfd10f5f1eed7"; sha256 = "10l01a8xaivz6n01x6hzfx7gd0igd0wcf9ril0sllqzbq7yx2bbk"; }; }; in { users.users.<yourNickname>.packages = [ (pkgs.vim_configurable.customize { vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; { start = [ vim-better-whitespace ]; }; }) ]; }; </syntaxHighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Using flake ==== </div> <code>configuration.nix</code>: <syntaxHighlight lang="nix"> { inputs, ... }: { nixpkgs = { overlays = [ (self: super: let winresizer-vim = super.vimUtils.buildVimPlugin { name = "winresizer-vim"; src = inputs.winresizer-vim; }; in { vimPlugins = super.vimPlugins // { inherit winresizer-vim; }; } ) ]; }; </syntaxHighlight> <code>flake.nix</code>: <syntaxHighlight lang="nix"> { inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-22.05"; winresizer-vim = { url = "github:simeji/winresizer"; flake = false; }; }; outputs = inputs@{ nixpkgs, ... }: { nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; specialArgs = { inherit inputs; }; modules = [ ./configuration.nix ./hardware-configuration.nix { nix.registry.nixpkgs.flake = nixpkgs; } ]; }; }; } </syntaxHighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> Then we can update the package with <code>nix flake lock --update-input winresizer-vim</code>, or update all inputs in flake.nix with <code>nix flake update</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Vim as a Python IDE === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> The following snippet will make a full featured python IDE. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Using language client ==== </div> <syntaxHighlight lang="nix"> vim_configurable.customize { vimrcConfig = { customRC = '' let g:LanguageClient_serverCommands = { \ 'python': ['pyls'] \ } nnoremap <F5> :call LanguageClient_contextMenu()<CR> nnoremap <silent> gh :call LanguageClient_textDocument_hover()<CR> nnoremap <silent> gd :call LanguageClient_textDocument_definition()<CR> nnoremap <silent> gr :call LanguageClient_textDocument_references()<CR> nnoremap <silent> gs :call LanguageClient_textDocument_documentSymbol()<CR> nnoremap <silent> <F2> :call LanguageClient_textDocument_rename()<CR> nnoremap <silent> gf :call LanguageClient_textDocument_formatting()<CR> ''; packages.myVimPackage = with pkgs.vimPlugins; { start = [ LanguageClient-neovim ]; } }; </syntaxHighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> Then put the following expression in <code>environment.systemPackages</code> or in the home-manager package list, to install python-language-server: </div> <syntaxHighlight lang="nix"> (python3.withPackages(ps: [ ps.python-language-server <div lang="en" dir="ltr" class="mw-content-ltr"> # the following plugins are optional, they provide type checking, import sorting and code formatting </div> ps.pyls-mypy ps.pyls-isort ps.pyls-black ])) </syntaxHighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> === Real life examples === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * [https://github.com/jagajaga/my_configs/blob/master/.nixpkgs/common.nix Jagajaga’s config] </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * [https://github.com/andrewrk/dotfiles/blob/master/.nixpkgs/config.nix andrewrk's config] </div> <div lang="en" dir="ltr" class="mw-content-ltr"> * [https://github.com/wagnerf42/nixos-config/blob/master/config/my_vim.nix wagnerf42's config (good for rust language)] </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === YouCompleteMe === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Currently the youcompleteme plugin uses [https://github.com/NixOS/nixpkgs/blob/8e7b1f2ac2e261d5a644fef860a0d050ea227c06/pkgs/misc/vim-plugins/default.nix#L695 unwrapped clang on linux]. This causes it to not find <code>stdlib.h</code>. There is a [https://github.com/andrewrk/genesis/blob/5f49cd9a8c2b61b9859a22102bc3f732add9461a/.ycm_extra_conf.py workaround] you can put in your <code>.ycm_extra_conf.py</code> file, which works by executing the C/C++ compiler and getting it to output the list of search paths - which includes the search path to find <code>stdlib.h</code>. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A better alternative to youcompleteme for C/C++ is to use [https://github.com/cquery-project/cquery/ cquery] in combination with the [https://github.com/autozimu/LanguageClient-neovim LanguageClient-neovim]. It will also find in c header files when used in a nix-shell if you install cquery from nixpkgs as it uses a custom [https://github.com/NixOS/nixpkgs/commit/04f3b76dcec21f2fcba6b1b0afbb3ed224165050#diff-11cdfc0385b9e017089c1ac09c5b838e shell wrapper] </div> <div lang="en" dir="ltr" class="mw-content-ltr"> == Python 3 support for vim == </div> <div lang="en" dir="ltr" class="mw-content-ltr"> If you have defined your vim configuration in a `./my_vim.nix` file you can install vim with the python 3 support instead of python2 by overriding the python version like the following: </div> <syntaxHighlight lang="nix"> (pkgs.callPackage ./my_vim.nix { vim_configurable = vim_configurable.override { python = python3; }; }) </syntaxHighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> == gvim and gview == </div> <div lang="en" dir="ltr" class="mw-content-ltr"> <code>gvim</code> and <code>gview</code> may be installed using the <code>[https://search.nixos.org/packages/?query=vimHugeX vimHugeX]</code> attribute name (package name <code>[https://search.nixos.org/packages/?query=vim_configurable vim_configurable]</code>). </div> <syntaxhighlight lang=bash> $ nix-env -iA nixos.vimHugeX </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> If you are using <code>vim_configurable.customize</code>, you can enable <code>wrapGui</code> to make <code>gvim</code> available, though this won't give you <code>gview</code>: </div> <syntaxhighlight lang=nix> vim_configured = pkgs.vim_configurable.customize { name = "vim"; wrapGui = true; }; </syntaxhighlight> [[Category:Applications]] [[Category:Text Editor{{#translation:}}]]