Rework home dir for better support
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
home.file.".ansible.cfg".text = ''
|
||||
[defaults]
|
||||
forks=10
|
||||
host_key_checking=False
|
||||
# Also available: profile_roles
|
||||
callback_enabled=timer,profile_tasks
|
||||
stdout_callback=yaml
|
||||
nocows=1
|
||||
cow_selection=tux
|
||||
collections_path=~/src
|
||||
|
||||
[ssh_connection]
|
||||
pipelining=True
|
||||
ssh_args = -o ControlMaster=auto -o ControlPersist=600s -o IdentitiesOnly=yes -o GSSAPIAuthentication=no -o StrictHostKeyChecking=no
|
||||
control_path=%(directory)s/%%h-%%r
|
||||
control_path_dir=/tmp
|
||||
|
||||
[callback_profile_tasks]
|
||||
sort_order=descending
|
||||
|
||||
[galaxy]
|
||||
role_skeleton_ignore = ^.git$,^.*/.git_keep$,\..*.swp
|
||||
role_skeleton = ~/src/ansible_collections/meta_ansible_templates/role
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
programs.bash = {
|
||||
enable = true;
|
||||
shellAliases = {
|
||||
acp = "rsync --progress -ah";
|
||||
agbuild = "ansible-galaxy collection build";
|
||||
apub = "ansible-galaxy collection publish --api-key \${GALAXY_API_KEY}";
|
||||
calc = "bc";
|
||||
d = "deactivate";
|
||||
devroles = "cd ~/src/ansible_collections/devroles";
|
||||
gohome = "ssh greg@dns.greg-hellings.gmail.com.beta.tailscale.net -D localhost:10080";
|
||||
ll = "ls -l";
|
||||
molcol = "molecule -c ../../tests/molecule.yml";
|
||||
packaging = "cd ~/src/packaging";
|
||||
vdown = "vagrant destroy";
|
||||
vhalt = "vagrant halt";
|
||||
vos = "vagrant up --provision --provider openstack";
|
||||
vprov = "vagrant provision";
|
||||
vssh = "vagrant ssh";
|
||||
vup = "vagrant up --provision --provider libvirt";
|
||||
yaml2js = "python -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=4)";
|
||||
};
|
||||
sessionVariables = {
|
||||
ANSIBLE_COLLECTIONS_PATH="\${HOME}/src/";
|
||||
CLICOLOR = "1";
|
||||
EDITOR = "${pkgs.vim}/bin/vim";
|
||||
GIT_SSL_NO_VERIFY = "True";
|
||||
LSCOLORS = "ExGxBxDxCxEgEdxbxgxcxd";
|
||||
MAVEN_OPTS = " -Dmaven.wagon.http.ssl.insecure=true ";
|
||||
OS_CLOUD = "default";
|
||||
SWORD_PATH = "\${HOME}/.sword";
|
||||
TIMEFORMAT = "%3Uu %3Ss %3lR %P%%";
|
||||
};
|
||||
profileExtra = ''
|
||||
if [ -e /etc/profile ]; then
|
||||
. /etc/profile
|
||||
fi
|
||||
'';
|
||||
bashrcExtra = ''
|
||||
function swordtag {
|
||||
if [ x"$1" == "x" ]; then
|
||||
echo "Please provide tag version"
|
||||
return
|
||||
fi
|
||||
svn cp http://crosswire.org/svn/sword/branches/sword-1-8-x/ http://crosswire.org/svn/sword/tags/sword-$1/
|
||||
}
|
||||
|
||||
function newdock {
|
||||
if [ x"$1" == "x" -o x"$2" == "x" ]; then
|
||||
echo "expected arguments [name] [source]"
|
||||
return
|
||||
fi
|
||||
podman run -P --privileged=true -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v "$(pwd):/dmnt" -t -i --name="$1" "$2" /bin/bash
|
||||
}
|
||||
|
||||
function rundock {
|
||||
podman start -a -i "$1"
|
||||
}
|
||||
|
||||
function ac {
|
||||
source ~/venv/''${1}/bin/activate
|
||||
}
|
||||
|
||||
function py2env {
|
||||
/usr/bin/virtualenv -p /usr/bin/python2 "''${HOME}/venv/''${1}"
|
||||
"''${HOME}/venv/''${1}/bin/pip" install -U pip
|
||||
}
|
||||
|
||||
function py3env {
|
||||
VENV_NAME="''${1}"
|
||||
#PYVERSION="$(python3 -c "import sys;print(sys.version[:sys.version.find('.',2)])")"
|
||||
#SITE_PACKAGES_PATH="/usr/lib64/python''${PYVERSION}/site-packages/"
|
||||
#VENV_SITE_PACKAGES="''${HOME}/venv/''${VENV_NAME}/lib64/python''${PYVERSION}/site-packages/"
|
||||
# Create the virtualenv and update pip to latest
|
||||
/usr/bin/python3 -m venv --clear "''${HOME}/venv/''${VENV_NAME}" --system-site-packages
|
||||
"''${HOME}/venv/''${1}/bin/python3" -m pip install -U pip
|
||||
# Link SELinux into the environment if necessary
|
||||
#if [ -d "''${SITE_PACKAGES_PATH}" ]; then
|
||||
# ln -s "''${SITE_PACKAGES_PATH}/selinux" "''${VENV_SITE_PACKAGES}"
|
||||
# ln -s ''${SITE_PACKAGES_PATH}/_selinux*.so "''${VENV_SITE_PACKAGES}"
|
||||
#else
|
||||
# echo "ERROR: LibSELinux not found for Python ''${PYVERSION}. Install system package to enable."
|
||||
#fi
|
||||
}
|
||||
|
||||
function unknown_host {
|
||||
sed -i -e ''${1}d ~/.ssh/known_hosts
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./ansible.nix
|
||||
./bash.nix
|
||||
./direnv.nix
|
||||
./git.nix
|
||||
./ssh.nix
|
||||
./vim.nix
|
||||
./xonsh.nix
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
programs.git = {
|
||||
enable = true;
|
||||
userName = "Greg Hellings";
|
||||
userEmail = "greg.hellings@gmail.com";
|
||||
aliases = {
|
||||
st = "status";
|
||||
ci = "commit";
|
||||
co = "checkout";
|
||||
ups = "push -u origin HEAD";
|
||||
amend = "commit --amend";
|
||||
};
|
||||
ignores = [
|
||||
".*.swp" ".*.swo" ".*.swn" # vim
|
||||
".idea" # IntelliJ
|
||||
".DS_Store" # Macs
|
||||
"Thumbs.db" # Windows
|
||||
".tox" # Tox temp directory
|
||||
".eclipse" # These next two are created by VSCodium plugins
|
||||
".bazelproject"
|
||||
];
|
||||
extraConfig = {
|
||||
init.defaultBranch = "main";
|
||||
push.default = "upstream";
|
||||
pull.rebase = "false";
|
||||
tag.sort = "version:refname";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{ lib, ... }:
|
||||
|
||||
{
|
||||
# Workaround to set the config value to user read-only
|
||||
# This allows things like SSH in distrobox to read the config file just fine
|
||||
home.file.".ssh/config" = {
|
||||
target = ".ssh/config_source";
|
||||
onChange = ''cat ~/.ssh/config_source > ~/.ssh/config && chmod 600 ~/.ssh/config'';
|
||||
};
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
serverAliveInterval = 60;
|
||||
|
||||
includes = ["config.local"];
|
||||
|
||||
matchBlocks =
|
||||
let
|
||||
nas = { user = "admin"; };
|
||||
owned = { user = "greg"; };
|
||||
in {
|
||||
inherit nas;
|
||||
|
||||
"*" = {
|
||||
dynamicForwards = [ {
|
||||
port = 10240;
|
||||
} ];
|
||||
};
|
||||
|
||||
"10.42.1.4" = lib.hm.dag.entryBefore ["10.42.*"] nas;
|
||||
"nas.thehellings.lan" = nas;
|
||||
"nas.greg-hellings.gmail.com.beta.tailscale.net" = nas;
|
||||
chronicles = nas;
|
||||
"chronicles.thehellings.lan" = lib.hm.dag.entryBefore [ "*.thehellings.lan"] nas;
|
||||
|
||||
gh = { user = "git"; hostname = "github.com"; };
|
||||
"src" = {
|
||||
user = "gitlab";
|
||||
hostname = "git.thehellings.lan";
|
||||
};
|
||||
|
||||
"*.thehellings.lan" = owned;
|
||||
"10.42.*" = owned;
|
||||
|
||||
"host.crosswire.org crosswire" = {
|
||||
hostname = "host.crosswire.org";
|
||||
user = "ghellings";
|
||||
};
|
||||
|
||||
fedpeople = {
|
||||
hostname = "fedorapeople.org";
|
||||
user = "greghellings";
|
||||
};
|
||||
|
||||
"src.fedoraproject.org pkgs.fedoraproject.org" = {
|
||||
user = "greghellings";
|
||||
};
|
||||
|
||||
"127.*".extraOptions = {
|
||||
PubkeyAcceptedAlgorithms = "+ssh-rsa";
|
||||
HostkeyAlgorithms = "+ssh-rsa";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
let
|
||||
vim-stabs = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "vim-stabs";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "Thyrum";
|
||||
repo = "vim-stabs";
|
||||
rev = "4654d4e000680e1f608b40f155af08873446ed63";
|
||||
sha256 = "0hi1c5zv38hwxbyrf11fz97r728jgbppz4is7fwzwhfrzhwbw0ga";
|
||||
};
|
||||
};
|
||||
|
||||
vim-xonsh = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "vim-xonsh";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "meatballs";
|
||||
repo = "vim-xonsh";
|
||||
rev = "2028aac";
|
||||
sha256 = "sha256-0+dqtlz8LeyOoSiS12rv8aLdzOMj31PuYAyDYWnpNzw=";
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
ansible-language-server
|
||||
pyright
|
||||
];
|
||||
|
||||
programs.nixvim = {
|
||||
enable = true;
|
||||
colorschemes.gruvbox.enable = true;
|
||||
globals = {
|
||||
indent_guides_enable_on_vim_startup = 1;
|
||||
nix_recommended_style = 0;
|
||||
};
|
||||
opts = {
|
||||
background = "dark";
|
||||
backup = false;
|
||||
copyindent = true;
|
||||
cursorline = true;
|
||||
expandtab = false;
|
||||
hidden = true;
|
||||
hlsearch = true;
|
||||
ignorecase = true;
|
||||
lazyredraw = true;
|
||||
list = true;
|
||||
listchars = "tab:→ ,extends:→,precedes:←,trail:·,eol:¬";
|
||||
mouse = "a";
|
||||
number = true;
|
||||
preserveindent = true;
|
||||
relativenumber = true;
|
||||
shiftwidth = 4;
|
||||
showcmd = true;
|
||||
showmatch = true;
|
||||
signcolumn = "yes";
|
||||
smartcase = true;
|
||||
softtabstop = 4;
|
||||
tabstop = 4;
|
||||
# Setting for CtrlP
|
||||
wildignore = "*.swp,*.pyc,*.class,.tox";
|
||||
wrap = false;
|
||||
writebackup = false;
|
||||
};
|
||||
keymaps = let
|
||||
winMove = key: { mode = "n"; key = "<C-${key}>"; action = "<C-w>${key}<C-w><CR>"; };
|
||||
in [ {
|
||||
mode = "n";
|
||||
key = "<C-e>";
|
||||
action = "<Esc>:BufExplorer<CR>";
|
||||
} {
|
||||
mode = "n";
|
||||
key = "<C-t>";
|
||||
action = "<Esc>:NERDTreeToggle<CR>";
|
||||
}
|
||||
(winMove "h")
|
||||
(winMove "j")
|
||||
(winMove "k")
|
||||
(winMove "l")
|
||||
];
|
||||
plugins = {
|
||||
airline.enable = true;
|
||||
cmp.enable = true;
|
||||
direnv.enable = true;
|
||||
gitgutter.enable = true;
|
||||
fugitive.enable = true;
|
||||
fzf-lua = {
|
||||
enable = true;
|
||||
iconsEnabled = true;
|
||||
keymaps = {
|
||||
"<C-o>" = {
|
||||
action = "files";
|
||||
settings = {
|
||||
previewers.cat.cmd = "${pkgs.coreutils}/bin/cat";
|
||||
winopts.height = 0.5;
|
||||
};
|
||||
};
|
||||
"<C-p>" = {
|
||||
action = "git_files";
|
||||
settings = {
|
||||
previewers.cat.cmd = "${pkgs.coreutils}/bin/cat";
|
||||
winopts.height = 0.5;
|
||||
};
|
||||
};
|
||||
};
|
||||
profile = "fzf-vim";
|
||||
};
|
||||
notify.enable = true;
|
||||
};
|
||||
extraConfigLua = builtins.replaceStrings [ "@git@" ] [ "${pkgs.git}/bin/git" ] (builtins.readFile ./vim/extra.lua);
|
||||
extraConfigVim = builtins.readFile ./vim/extra.vimrc;
|
||||
extraPlugins = with pkgs.vimPlugins; [
|
||||
bufexplorer
|
||||
nerdtree
|
||||
nvim-web-devicons # Be sure to install Hack Nerd Font and set it to your term default: https://gist.github.com/matthewjberger/7dd7e079f282f8138a9dc3b045ebefa0
|
||||
packer-nvim
|
||||
|
||||
context-vim
|
||||
vim-flake8
|
||||
vim-indent-guides
|
||||
vim-xonsh
|
||||
];
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
-- ======================================================================
|
||||
--
|
||||
-- automatic commands
|
||||
--
|
||||
-- ======================================================================
|
||||
local api = vim.api
|
||||
local all = {"n", "v", "i"}
|
||||
|
||||
-- Highlights bad whitespace
|
||||
--api.nvim_create_autocmd("ColorScheme", { command = "highlight ExtraWhitespace ctermbg=red guibg=red" })
|
||||
--api.nvim_create_autocmd("BufWinEnter", { command = "match ExtraWhitespace /\s\+$/" })
|
||||
--api.nvim_create_autocmd("InsertEnter", { command = "match ExtraWhitespace /\s\+\%#\@<!$/" })
|
||||
--api.nvim_create_autocmd("InsertLeave", { command = "match ExtraWhitespace /\s\+$/" })
|
||||
vim.fn.matchadd('errorMsg', [[\s\+$]])
|
||||
api.nvim_create_autocmd("BufWinLeave", { command = "call clearmatches()" })
|
||||
-- Automatically source .vimrc when we write that file
|
||||
-- This is probably no longer valid since we're writing init.lua, but we'll keep it for the sake
|
||||
-- of posterity at the moment
|
||||
api.nvim_create_autocmd("BufWritePost", {
|
||||
pattern = ".vimrc",
|
||||
command = "source $MYVIMRC"
|
||||
})
|
||||
-- Toggles absolute line numbers on/off when a window has focus or not
|
||||
numbertoggle = api.nvim_create_augroup("numbertoggle", { clear = true })
|
||||
api.nvim_create_autocmd({ "BufEnter", "FocusGained", "InsertLeave" }, {
|
||||
command = "set relativenumber",
|
||||
group = numbertoggle
|
||||
})
|
||||
api.nvim_create_autocmd({ "BufLeave", "FocusLost", "InsertEnter" }, {
|
||||
command = "set norelativenumber",
|
||||
group = numbertoggle
|
||||
})
|
||||
-- Set file highlighting to Ruby for Vagrantfiles
|
||||
api.nvim_create_autocmd({ "BufRead", "BufNewFile"}, {
|
||||
pattern = "Vagrantfile*",
|
||||
command = "set filetype=ruby"
|
||||
})
|
||||
@@ -0,0 +1,35 @@
|
||||
function! s:MkNonExDir(file, buf)
|
||||
if empty(getbufvar(a:buf, '&buftype')) && a:file!~#'\v^\w+\:\/'
|
||||
let dir=fnamemodify(a:file, ':h')
|
||||
if !isdirectory(dir)
|
||||
call mkdir(dir, 'p')
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
augroup BWCCreateDir
|
||||
autocmd!
|
||||
autocmd BufWritePre * :call s:MkNonExDir(expand('<afile>'), +expand('<abuf>'))
|
||||
augroup END
|
||||
|
||||
function! Indenting(indent, what, cols)
|
||||
let spccol = repeat(' ', a:cols)
|
||||
let result = substitute(a:indent, spccol, '\t', 'g')
|
||||
let result = substitute(result, ' \+\ze\t', ''', 'g')
|
||||
if a:what == 1
|
||||
let result = substitute(result, '\t', spccol, 'g')
|
||||
endif
|
||||
return result
|
||||
endfunction
|
||||
|
||||
function! IndentConvert(line1, line2, what, cols)
|
||||
let savepos = getpos('.')
|
||||
let cols = empty(a:cols) ? &tabstop : a:cols
|
||||
execute a:line1 . ',' . a:line2 . 's/^\s\+/\=Indenting(submatch(0), a:what, cols)/e'
|
||||
call histdel('search', -1)
|
||||
call setpos('.', savepos)
|
||||
endfunction
|
||||
command! -nargs=? -range=% Space2Tab call IndentConvert(<line1>,<line2>,0,<q-args>)
|
||||
command! -nargs=? -range=% Tab2Space call IndentConvert(<line1>,<line2>,1,<q-args>)
|
||||
command! -nargs=? -range=% RetabIndent call IndentConvert(<line1>,<line2>,&et,<q-args>)
|
||||
|
||||
noremap <expr> <C-p> (fugitive#Head() != '' ? ':GFiles --exclude-standard --others --cached' : ':Files')."\<cr>"
|
||||
@@ -0,0 +1,88 @@
|
||||
-- ======================================================================
|
||||
--
|
||||
-- nvim-cmp configuration
|
||||
--
|
||||
-- ======================================================================
|
||||
local cmp = require'cmp'
|
||||
|
||||
cmp.setup({
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
vim.fn["vsnip#anonymous"](args.body)
|
||||
end,
|
||||
},
|
||||
window = {
|
||||
-- completion = cmp.config.window.bordered(),
|
||||
-- documentation = cmp.config.window.bordered(),
|
||||
},
|
||||
mapping = cmp.mapping.preset.insert({
|
||||
['<C-b>'] = cmp.mapping.scroll_docs(-4),
|
||||
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
||||
['<C-space>'] = cmp.mapping.complete(),
|
||||
['<C-e>'] = cmp.mapping.abort(),
|
||||
['<CR>'] = cmp.mapping.confirm({ select = true }),
|
||||
}),
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'nvim_lspconfig' },
|
||||
{ name = 'vsnip' },
|
||||
},{
|
||||
{ name = 'buffer' }
|
||||
})
|
||||
})
|
||||
|
||||
cmp.setup.filetype('gitcommit', {
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'git' }
|
||||
},{
|
||||
{ name = 'buffer' }
|
||||
})
|
||||
})
|
||||
|
||||
cmp.setup.cmdline({ '/', '?' }, {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = { { name = 'buffer' } }
|
||||
})
|
||||
|
||||
cmp.setup.cmdline(':', {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'path' }
|
||||
},{
|
||||
{ name = 'cmdline' }
|
||||
})
|
||||
})
|
||||
|
||||
local capabilities = require('cmp_nvim_lsp').default_capabilities()
|
||||
local lspconfig = require('lspconfig')
|
||||
-- Add each LSP that you have configured here
|
||||
--require('lspconfig')['<LANGUAGE_SERVER_HERE>'].setup {
|
||||
-- capabilities = capabilities
|
||||
--}
|
||||
--lspconfig.pyright.setup { capabilities = capabilities }
|
||||
lspconfig.ansiblels.setup { capabilities = capabilities }
|
||||
--lspconfig.jedi_language_server.setup { capabilities }
|
||||
|
||||
-- ======================================================================
|
||||
--
|
||||
-- Plugin configurations
|
||||
--
|
||||
-- ======================================================================
|
||||
-- Set filetype to the way I want it
|
||||
-- Settings for CtrlP
|
||||
vim.opt.wildignore="*.swp,*.pyc,*.class,.tox"
|
||||
-- Settings for NerdTree
|
||||
vim.g.NERDTreeIgnore = {'\\.pyc$', '\\.o$', '\\.class$'}
|
||||
-- indent guides
|
||||
vim.g.indent_guides_enable_on_vim_startup = 1
|
||||
-- Tell syntastic to use yamllint
|
||||
vim.g.syntastic_yaml_checkers = {'yamllint'}
|
||||
vim.g.syntastic_yaml_yamllint_args = {}
|
||||
vim.g.syntastic_shell = "${pkgs.bash}/bin/bash"
|
||||
-- Shortcuts for resolving git diff conflicts
|
||||
vim.g.diffget_local_map = "gl"
|
||||
vim.g.diffget_upstream_map = "gu"
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- User functions to just make life easier
|
||||
-- ============================================================================
|
||||
@@ -0,0 +1,220 @@
|
||||
set background=dark
|
||||
set copyindent
|
||||
set noexpandtab
|
||||
set hidden
|
||||
set ignorecase
|
||||
set mouse="a"
|
||||
set number
|
||||
set relativenumber
|
||||
set shiftwidth=4
|
||||
set smartcase
|
||||
set tabstop=4
|
||||
|
||||
syntax enable
|
||||
set preserveindent
|
||||
set softtabstop=0
|
||||
set nowrap
|
||||
set showcmd
|
||||
set cursorline
|
||||
set lazyredraw
|
||||
set showmatch
|
||||
set hlsearch
|
||||
|
||||
set nobackup
|
||||
set nowritebackup
|
||||
set signcolumn=yes
|
||||
" Milliseconds between updates
|
||||
set updatetime=300
|
||||
" Shows non-printing characters
|
||||
set listchars=tab:→\ ,extends:→,precedes:←,trail:·,eol:¬
|
||||
set list
|
||||
|
||||
" nvim-cmp configuration
|
||||
"
|
||||
lua <<EOF
|
||||
local cmp = require'cmp'
|
||||
|
||||
cmp.setup({
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
vim.fn["vsnip#anonymous"](args.body)
|
||||
end,
|
||||
},
|
||||
window = {
|
||||
-- completion = cmp.config.window.bordered(),
|
||||
-- documentation = cmp.config.window.bordered(),
|
||||
},
|
||||
mapping = cmp.mapping.preset.insert({
|
||||
['<C-b>'] = cmp.mapping.scroll_docs(-4),
|
||||
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
||||
['<C-space>'] = cmp.mapping.complete(),
|
||||
['<C-e>'] = cmp.mapping.abort(),
|
||||
['<CR>'] = cmp.mapping.confirm({ select = true }),
|
||||
}),
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'nvim_lspconfig' },
|
||||
{ name = 'vsnip' },
|
||||
},{
|
||||
{ name = 'buffer' }
|
||||
})
|
||||
})
|
||||
|
||||
cmp.setup.filetype('gitcommit', {
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'git' }
|
||||
},{
|
||||
{ name = 'buffer' }
|
||||
})
|
||||
})
|
||||
|
||||
cmp.setup.cmdline({ '/', '?' }, {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = { { name = 'buffer' } }
|
||||
})
|
||||
|
||||
cmp.setup.cmdline(':', {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'path' }
|
||||
},{
|
||||
{ name = 'cmdline' }
|
||||
})
|
||||
})
|
||||
|
||||
local capabilities = require('cmp_nvim_lsp').default_capabilities()
|
||||
local lspconfig = require('lspconfig')
|
||||
-- Add each LSP that you have configured here
|
||||
--require('lspconfig')['<LANGUAGE_SERVER_HERE>'].setup {
|
||||
-- capabilities = capabilities
|
||||
--}
|
||||
--lspconfig.pyright.setup { capabilities = capabilities }
|
||||
lspconfig.ansiblels.setup { capabilities = capabilities }
|
||||
lspconfig.jedi_language_server.setup { capabilities = capabilities }
|
||||
EOF
|
||||
" Set filetype to the way I want it
|
||||
let g:nix_recommended_style = 0
|
||||
|
||||
" Highlights bad whitespace
|
||||
autocmd ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red
|
||||
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
|
||||
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
|
||||
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
|
||||
autocmd BufWinLeave * call clearmatches()
|
||||
|
||||
" Settings for CtrlP
|
||||
set wildignore+=*.swp,*.pyc,*.class,.tox
|
||||
" Settings for NerdTree
|
||||
let NERDTreeIgnore = ['\.pyc$', '\.o$', '\.class$']
|
||||
" indent guides
|
||||
let g:indent_guides_enable_on_vim_startup = 1
|
||||
autocmd! BufWritePost .vimrc source $MYVIMRC
|
||||
" Tell syntastic to use yamllint
|
||||
let g:syntastic_yaml_checkers = ['yamllint']
|
||||
let g:syntastic_yaml_yamllint_args = []
|
||||
let g:syntastic_shell = "${pkgs.bash}/bin/bash"
|
||||
" Shortcuts for resolving git diff conflicts
|
||||
let g:diffget_local_map = 'gl'
|
||||
let g:diffget_upstream_map = 'gu'
|
||||
|
||||
" Key mappings
|
||||
map <F2> <Esc>\be
|
||||
imap <F2> <Esc>\be
|
||||
map <F4> <Esc>:NERDTreeToggle<Cr>
|
||||
silent !git rev-parse --is-inside-work-tree
|
||||
if v:shell_error == 0
|
||||
map <C-p> :GFiles --cached --others --exclude-standard<CR>
|
||||
map <C-o> :GFiles?
|
||||
else
|
||||
map <C-p> :Files<CR>
|
||||
endif
|
||||
map <F6> <Esc>:Files<Cr>
|
||||
" Allows navigating splits
|
||||
map <C-j> <C-w>j<C-w><Cr>
|
||||
map <C-k> <C-w>k<C-w><Cr>
|
||||
map <C-h> <C-w>h<C-w><Cr>
|
||||
map <C-l> <C-w>l<C-w><Cr>
|
||||
|
||||
colorscheme gruvbox
|
||||
|
||||
" ============================================================================
|
||||
" User functions to just make life easier
|
||||
" ============================================================================
|
||||
" Toggle absolute line numbers when we don't have focus, and hybrid when
|
||||
" we do have it
|
||||
augroup numbertoggle
|
||||
autocmd!
|
||||
autocmd BufEnter,FocusGained,InsertLeave * set relativenumber
|
||||
autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber
|
||||
augroup END
|
||||
" syntax highlighting for Vagrantfiles
|
||||
augroup vagrant
|
||||
au!
|
||||
au BufRead,BufNewFile Vagrantfile set filetype=ruby
|
||||
augroup END
|
||||
" Creates the directory for a file if it doesn't already exist.
|
||||
function! s:MkNonExDir(file, buf)
|
||||
if empty(getbufvar(a:buf, '&buftype')) && a:file!~#'\v^\w+\:\/'
|
||||
let dir=fnamemodify(a:file, ':h')
|
||||
if !isdirectory(dir)
|
||||
call mkdir(dir, 'p')
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
augroup BWCCreateDir
|
||||
autocmd!
|
||||
autocmd BufWritePre * :call s:MkNonExDir(expand('<afile>'), +expand('<abuf>'))
|
||||
augroup END
|
||||
|
||||
" Return indent (all whitespace at start of a line), converted from
|
||||
" tabs to spaces if what = 1, or from spaces to tabs otherwise.
|
||||
" When converting to tabs, result has no redundant spaces.
|
||||
function! Indenting(indent, what, cols)
|
||||
let spccol = repeat(' ', a:cols)
|
||||
let result = substitute(a:indent, spccol, '\t', 'g')
|
||||
let result = substitute(result, ' \+\ze\t', ''', 'g')
|
||||
if a:what == 1
|
||||
let result = substitute(result, '\t', spccol, 'g')
|
||||
endif
|
||||
return result
|
||||
endfunction
|
||||
|
||||
" Convert whitespace used for indenting (before first non-whitespace).
|
||||
" what = 0 (convert spaces to tabs), or 1 (convert tabs to spaces).
|
||||
" cols = string with number of columns per tab, or empty to use 'tabstop'.
|
||||
" The cursor position is restored, but the cursor will be in a different
|
||||
" column when the number of characters in the indent of the line is changed.
|
||||
function! IndentConvert(line1, line2, what, cols)
|
||||
let savepos = getpos('.')
|
||||
let cols = empty(a:cols) ? &tabstop : a:cols
|
||||
execute a:line1 . ',' . a:line2 . 's/^\s\+/\=Indenting(submatch(0), a:what, cols)/e'
|
||||
call histdel('search', -1)
|
||||
call setpos('.', savepos)
|
||||
endfunction
|
||||
command! -nargs=? -range=% Space2Tab call IndentConvert(<line1>,<line2>,0,<q-args>)
|
||||
command! -nargs=? -range=% Tab2Space call IndentConvert(<line1>,<line2>,1,<q-args>)
|
||||
command! -nargs=? -range=% RetabIndent call IndentConvert(<line1>,<line2>,&et,<q-args>)
|
||||
|
||||
|
||||
"""""""""
|
||||
""" Unused, but kept in case I end up on a system where I can't use my preferred plugins
|
||||
"""""""""
|
||||
|
||||
|
||||
|
||||
" Base of search is ordered as
|
||||
" r - searching up from here to the nearest marker (.git, .hg, .svn, etc)
|
||||
" a - dir of current file, unless that's a subdirectory of CWD
|
||||
" c - dir of current file
|
||||
let g:ctrlp_working_path_mode = 'arc'
|
||||
let g:ctrlp_switch_buffer = 0
|
||||
let g:ctrlp_cmd = 'CtrlPMixed'
|
||||
let g:ctrlp_show_hidden = 1
|
||||
let g:ctrlp_user_command = {
|
||||
\'types': {
|
||||
\1: ['.git', '${pkgs.git}/bin/git ls-files --cached --exclude-standard --others' ],
|
||||
\},
|
||||
\'fallback': '${pkgs.findutils}/bin/find . -type f | ${pkgs.gnugrep}/bin/grep -v -e "\.tox/" -e "\.git/"',
|
||||
\}
|
||||
" let g:ctrpl_match_func = { 'match': 'pymatcher#PyMatch' }
|
||||
" map <F6> <Esc>:CtrlP<Cr>
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
{ pkgs, config, lib, ... }:
|
||||
|
||||
{
|
||||
programs.xonsh = {
|
||||
enable = true;
|
||||
|
||||
sessionVariables = {
|
||||
CLICOLOR = 1;
|
||||
EDITOR = "${pkgs.vim}/bin/vim";
|
||||
# vte_new_tab_cwd causes new Terminal tabs to open in the
|
||||
# same CWD as the current tab
|
||||
LESS_TERMCAP_mb = "\\033[01;31m"; # begin blinking
|
||||
LESS_TERMCAP_md = "\\033[01;31m"; # begin bold
|
||||
LESS_TERMCAP_me = "\\033[0m"; # end mode
|
||||
LESS_TERMCAP_so = "\\033[01;44;36m"; # begin standout-mode (bottom of screen)
|
||||
LESS_TERMCAP_se = "\\033[0m"; # end standout-mode
|
||||
LESS_TERMCAP_us = "\\033[00;36m"; # begin underline
|
||||
LESS_TERMCAP_ue = "\\033[0m"; # end underline
|
||||
LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN = "1";
|
||||
LSCOLORS = "ExGxBxDxCxEgEdxbxgxcxd";
|
||||
MAVEN_OPTS = " -Dmaven.wagon.http.ssl.insecure=true";
|
||||
OS_CLOUD = "default";
|
||||
PROMPT = "{vte_new_tab_cwd}{env_name}{BOLD_GREEN}{user}@{hostname}{BOLD_BLUE} {short_cwd}{branch_color}{curr_branch: {}}{RESET} {BOLD_BLUE}{prompt_end}{RESET} ";
|
||||
SWORD_PATH = "${config.home.homeDirectory}/.sword/";
|
||||
TIMEFORMAT = "%3Uu %3Ss %3lR %P%%";
|
||||
# Tells vox where to find virtualenvs
|
||||
VIRTUALENV_HOME = "${config.home.homeDirectory}/venv/";
|
||||
|
||||
COMPASS_SKIP_ORIGIN_CHECK = "True";
|
||||
|
||||
GOPATH = "${config.home.homeDirectory}/src/go";
|
||||
GOBIN = "${config.home.homeDirectory}/src/bin";
|
||||
};
|
||||
|
||||
aliases = {
|
||||
ac = "vox activate";
|
||||
|
||||
cavg = "compass workspace exec bazel run src/go/compass.com/tools/circleci_results_cache/avg_duration/cmd/avg_duration:avg_duration";
|
||||
cbazel = "compass workspace exec bazel";
|
||||
cblack = "compass workspace run src/python3/uc/tools:run_black --";
|
||||
cbuild = "compass workspace build";
|
||||
cci = "compass workspace run src/python3/uc/tools:circleci-checks";
|
||||
ccover = "compass workspace cover --extra-cmd-args=\"--test_output=errors\"";
|
||||
cexec = "compass workspace exec";
|
||||
cgh = "$GH_CONFIG_DIR=\"${config.home.homeDirectory}/.config/gh/compass\" gh";
|
||||
cpip = "compass workspace run src/python3/uc/tools:run_pip_compile";
|
||||
crun = "compass workspace run";
|
||||
ctest = "compass workspace test --extra-cmd-args=\"--test_output=errors\"";
|
||||
cylint = "compass workspace run src/python3/uc/tools:run_yaml_lint";
|
||||
gazelle = "compass workspace exec bazel run :gazelle";
|
||||
|
||||
cleanup = "sudo nix-collect-garbage --delete-older-than 30d && nix store optimise";
|
||||
d = "vox deactivate";
|
||||
dirflake = "nix flake new -t github:nix-community/nix-direnv";
|
||||
gh-personal = "$GH_CONFIG_DIR=\"${config.home.homeDirectory}/.config/gh/personal\" gh";
|
||||
gl-nging = "sudo nixos-container run gitlab -- systemctl restart nginx";
|
||||
ls = "ls --color";
|
||||
ll = "ls -l --color";
|
||||
molcol = "molecule -c ../../tests/molecule.yml";
|
||||
nixup = "nix flake lock --update-input";
|
||||
pa = "cd ~/src/packaging";
|
||||
tf = "terraform";
|
||||
tsup = "sudo tailscale up";
|
||||
tspub = "sudo tailscale up --exit-node=linode";
|
||||
tshome = "sudo tailscale up --exit-node=2maccabees";
|
||||
tsclear = "sudo tailscale up --exit-node=''";
|
||||
vdown = "vagrant destroy";
|
||||
vhalt = "vagrant halt";
|
||||
vos = "vagrant up --provision --provider openstack";
|
||||
vprov = "vagrant provision";
|
||||
vup = "vagrant up --provision --provider libvirt";
|
||||
vssh = "vagrant ssh";
|
||||
};
|
||||
|
||||
configHeader = builtins.readFile ./xonsh_header.xsh;
|
||||
configFooter = (builtins.readFile ./xonsh_footer.xsh) + (builtins.concatStringsSep "\n" [
|
||||
"with open('${pkgs.stdenv.cc}/nix-support/dynamic-linker', 'r') as fp:"
|
||||
" $NIX_LD = fp.read().strip()"
|
||||
]);
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
# vim: set ft=python :
|
||||
|
||||
from tempfile import NamedTemporaryFile
|
||||
|
||||
def bw_unlock():
|
||||
"""Unlocks the BitWarden CLI and adds the resulting session code to the
|
||||
current environment variables. Also returns the code for them."""
|
||||
if "BW_SESSION" in ${...}:
|
||||
return $BW_SESSION
|
||||
result = $(bw unlock)
|
||||
while "BW_SESSION" not in result:
|
||||
result = $(bw unlock)
|
||||
lines = result.split("\n")
|
||||
l = [k for k in lines if 'BW_SESSION="' in k][0]
|
||||
left, right = l.split("=", 1)
|
||||
token = right[1:-1]
|
||||
$BW_SESSION = token
|
||||
return token
|
||||
|
||||
def vpn(con, bwname):
|
||||
bw_unlock()
|
||||
base=$(bw get password @(bwname))
|
||||
secret=$(bw get totp @(bwname))
|
||||
#echo vpn.secrets.password:${base}$(oathtool -b -d "${digits}" -s "${period}" --totp "${secret}") > "${f}"
|
||||
|
||||
with NamedTemporaryFile(delete_on_close=False) as fp:
|
||||
secret = f"vpn.secrets.password:{base}{secret}"
|
||||
fp.write(secret.encode("utf-8"))
|
||||
fp.close()
|
||||
nmcli c up @(con) passwd-file @(fp.name)
|
||||
|
||||
def _unlock(args):
|
||||
bw_unlock()
|
||||
|
||||
def _ivr(args):
|
||||
vpn("350Main", "IVR Technology")
|
||||
|
||||
def _glrestart(args):
|
||||
sudo nixos-container run gitlab -- systemctl restart gitlab
|
||||
sudo nixos-container run gitlab -- systemctl restart nginx
|
||||
|
||||
def _cfetch(args):
|
||||
bw_unlock()
|
||||
$CIRCLECI_CLI_TOKEN=$(bw get password CircleCI)
|
||||
compass workspace exec bazel run src/go/compass.com/tools/circleci_results_cache/fetch/cmd/fetch:fetch
|
||||
|
||||
def _rebuild(args):
|
||||
system = uname()
|
||||
if system.sysname == 'Darwin':
|
||||
darwin-rebuild --flake ~/.config/darwin switch
|
||||
else:
|
||||
sudo nixos-rebuild switch
|
||||
|
||||
def _yaml2json(args, stdin=None, stdout=None):
|
||||
import sys, yaml, json
|
||||
from yaml import CLoader
|
||||
json.dump(yaml.load(stdin, Loader=CLoader), stdout, indent=4)
|
||||
|
||||
def _py2env(args):
|
||||
vox new @(args[0]) -p /usr/bin/python2
|
||||
|
||||
def _py3env(args):
|
||||
vox new @(args[0])
|
||||
|
||||
def _rundock(args):
|
||||
if Path('/usr/bin/podman').exists():
|
||||
e = 'podman'
|
||||
else:
|
||||
e = 'docker'
|
||||
@(e) exec -ti @(args[0]) /bin/bash
|
||||
|
||||
def _pip_extras(args):
|
||||
import importlib_metadata
|
||||
print(importlib_metadata.metadata(args[0]).get_all('Provides-Extra'))
|
||||
|
||||
# Container stuff
|
||||
def _newdock(args):
|
||||
if Path('/usr/bin/podman').exists():
|
||||
e = 'podman'
|
||||
else:
|
||||
e = 'docker'
|
||||
@(e) run -P --privileged=true -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v @(getcwd()):/dmnt -v /etc/pki:/etc/pki:ro -d --name @(args[1]) @(args[0]) /sbin/init
|
||||
rundock @(args[1])
|
||||
|
||||
def _unknown_host(args):
|
||||
sed -i -e @(args[0])d ~/.ssh/known_hosts
|
||||
|
||||
def _bake(args):
|
||||
from pathlib import Path
|
||||
templates = Path("~/.copier-templates/").expanduser()
|
||||
if not templates.exists():
|
||||
git clone src:greg/copier-templates.git ~/.copier-templates
|
||||
copier copy @(str(templates / args[0])) .
|
||||
|
||||
aliases['glrestart'] = _glrestart
|
||||
aliases['bake'] = _bake
|
||||
aliases['unlock'] = _unlock
|
||||
aliases['cfetch'] = _cfetch
|
||||
aliases['ivr'] = _ivr
|
||||
aliases['newdock'] = _newdock
|
||||
aliases['pip_extras'] = _pip_extras
|
||||
aliases['py2env'] = _py2env
|
||||
aliases['py3env'] = _py3env
|
||||
aliases['rebuild'] = _rebuild
|
||||
aliases['rundock'] = _rundock
|
||||
aliases['unknown_host'] = _unknown_host
|
||||
aliases['yaml2json'] = _yaml2json
|
||||
###
|
||||
#
|
||||
# Other random nice-to-have things
|
||||
#
|
||||
###
|
||||
|
||||
# Does virtualenv support
|
||||
xontrib load vox
|
||||
# Faster coreutils
|
||||
xontrib load coreutils
|
||||
|
||||
# Allows identifying JSON as if it was Python by adding some new builtins to the language
|
||||
import builtins
|
||||
builtins.true = True
|
||||
builtins.false = False
|
||||
builtins.null = None
|
||||
@@ -0,0 +1,28 @@
|
||||
# vim: set ft=python:
|
||||
from os import getcwd, uname
|
||||
from pathlib import Path
|
||||
from sys import platform
|
||||
|
||||
|
||||
#if uname().sysname == 'Darwin' and ('__NIX_DARWIN_SET_ENVIRONMENT_DONE' not in ${...} or not $__NIX_DARWIN_SET_ENVIRONMENT_DONE):
|
||||
# source-bash /etc/bashrc
|
||||
|
||||
# set -e == $RAISE_SUBPROC_ERROR = True
|
||||
# set -x == trace on; $XONSH_TRACE_SUBPROC = True
|
||||
# $? == _.rtn
|
||||
|
||||
xontrib load direnv
|
||||
xontrib load coreutils
|
||||
|
||||
# Insert to the front, because when we spawn xonsh in tmux we have raw python3
|
||||
# paths added before these. That ends up screwing with finding the python3 version
|
||||
# with all of our dependencies that we want
|
||||
$PATH.insert(0, Path("~/.nix-profile/bin").expanduser())
|
||||
$PATH.insert(0, Path("~/src/bin").expanduser())
|
||||
$PATH.insert(0, Path("~/.local/bin").expanduser())
|
||||
|
||||
if platform == "darwin":
|
||||
$PATH.append(Path("/opt/homebrew/bin/"))
|
||||
$PATH.append(Path("/run/current-system/sw/bin"))
|
||||
$PATH.append(Path("/nix/var/nix/profiles/default/bin"))
|
||||
$PATH.append(Path("/usr/local/bin"))
|
||||
Reference in New Issue
Block a user