Separate system from home-manager again
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
|
||||
callback_result_format=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
|
||||
./xonsh.nix
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv.enable = true;
|
||||
stdlib = ''
|
||||
layout_poetry() {
|
||||
if [[ ! -f pyproject.toml ]]; then
|
||||
echo "No pyproject.toml found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
venv="$(dirname "$(poetry run which python)")"
|
||||
export VIRTUAL_ENV="$(echo "$venv" | rev | cut -d'/' -f2- | rev)"
|
||||
export POETRY_ACTIVE=1
|
||||
PATH_add "$venv"
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
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 = {
|
||||
branch.sort = "-committerdate";
|
||||
column.ui = "auto";
|
||||
commit.verbose = "true";
|
||||
diff = {
|
||||
algorithm = "histogram";
|
||||
colorMoved = "plain";
|
||||
mnemonicPrefix = "true";
|
||||
renames = "true";
|
||||
};
|
||||
init.defaultBranch = "main";
|
||||
push.default = "upstream";
|
||||
pull.rebase = "false";
|
||||
rebase = {
|
||||
autoSquash = "true";
|
||||
updateRefs = "true";
|
||||
};
|
||||
rerere = {
|
||||
autoupdate = "true";
|
||||
enabled = "true";
|
||||
};
|
||||
tag.sort = "version:refname";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
{ 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";
|
||||
};
|
||||
srcpub = {
|
||||
user = "gitlab";
|
||||
hostname = "src.thehellings.com";
|
||||
port = 2222;
|
||||
};
|
||||
ivr = {
|
||||
user = "git";
|
||||
hostname = "gitlab.com";
|
||||
};
|
||||
|
||||
"ivr.thehellings.lan" = lib.hm.dag.entryBefore [ "ivr" ] {
|
||||
user = "gregory.hellings";
|
||||
};
|
||||
|
||||
"*.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,157 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
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>";
|
||||
action = "<Esc>:Neotree toggle<CR>";
|
||||
}
|
||||
{
|
||||
mode = "n";
|
||||
key = "<C-g>";
|
||||
action = "<Esc>:Git<CR>";
|
||||
}
|
||||
(winMove "h")
|
||||
(winMove "j")
|
||||
(winMove "k")
|
||||
(winMove "l")
|
||||
];
|
||||
plugins = {
|
||||
airline.enable = true;
|
||||
cmp = {
|
||||
enable = true;
|
||||
autoEnableSources = true;
|
||||
settings = {
|
||||
sources = [
|
||||
{ name = "nvim_lsp"; }
|
||||
{
|
||||
name = "buffer";
|
||||
group_index = 2;
|
||||
}
|
||||
{
|
||||
name = "path";
|
||||
gruop_index = 3;
|
||||
}
|
||||
];
|
||||
mapping = {
|
||||
"<C-Space>" = "cmp.mapping.complete()";
|
||||
"<CR>" = "cmp.mapping.confirm({ select = true })";
|
||||
"<C-f>" = "cmp.mapping.select_next_item()";
|
||||
"<C-b>" = "cmp.mapping.select_prev_item()";
|
||||
"<C-c>" = "cmp.mapping.abort()";
|
||||
};
|
||||
};
|
||||
};
|
||||
direnv.enable = true;
|
||||
gitgutter.enable = true;
|
||||
fugitive.enable = true;
|
||||
fzf-lua = {
|
||||
enable = 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";
|
||||
};
|
||||
lsp = {
|
||||
enable = true;
|
||||
servers = {
|
||||
ansiblels.enable = true;
|
||||
cmake.enable = true;
|
||||
gopls.enable = true;
|
||||
html.enable = true;
|
||||
nixd.enable = true;
|
||||
pylsp.enable = true;
|
||||
pyright.enable = true;
|
||||
rust_analyzer = {
|
||||
# No need to have these installed on every one of my systems
|
||||
installCargo = false;
|
||||
installRustc = false;
|
||||
enable = true;
|
||||
};
|
||||
terraformls.enable = true;
|
||||
};
|
||||
};
|
||||
neo-tree.enable = true;
|
||||
notify.enable = true;
|
||||
remote-nvim.enable = true;
|
||||
web-devicons.enable = true;
|
||||
};
|
||||
userCommands = {
|
||||
Ggr = {
|
||||
command = "Ggrep! <q-args> | cw | redraw!";
|
||||
nargs = "+";
|
||||
};
|
||||
};
|
||||
extraConfigLua = builtins.replaceStrings [ "@git@" ] [ "${pkgs.git}/bin/git" ] (
|
||||
builtins.readFile ./extra.lua
|
||||
);
|
||||
extraConfigVim = builtins.readFile ./extra.vimrc;
|
||||
extraPlugins = with pkgs.vimPlugins; [
|
||||
bufexplorer
|
||||
|
||||
context-vim
|
||||
vim-indent-guides
|
||||
];
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
# The Hack font is used in the Fugitive sidebars
|
||||
fonts.fontconfig.enable = true;
|
||||
home.packages = with pkgs.nerd-fonts; [ hack ];
|
||||
|
||||
programs.nixvim = (import ./config.nix { inherit config pkgs lib; }) // {
|
||||
enable = 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,96 @@
|
||||
{ pkgs, config, ... }:
|
||||
|
||||
{
|
||||
# Programs that are used in the settings file
|
||||
home.packages = with pkgs; [
|
||||
copier
|
||||
git
|
||||
gnused
|
||||
nix-output-monitor
|
||||
nvd
|
||||
];
|
||||
|
||||
programs.xonsh = {
|
||||
enable = true;
|
||||
|
||||
sessionVariables = {
|
||||
# This is for pushing builds to my local S3 cache
|
||||
AWS_SHARED_CREDENTIALS_FILE = "/run/agenix/cache-credentials";
|
||||
CLICOLOR = 1;
|
||||
EDITOR = "nvim";
|
||||
# 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/";
|
||||
XONSH_COLOR_STYLE = "default";
|
||||
|
||||
GOPATH = "${config.home.homeDirectory}/src/go";
|
||||
GOBIN = "${config.home.homeDirectory}/src/bin";
|
||||
};
|
||||
|
||||
aliases = {
|
||||
# Python related ones
|
||||
ac = "vox activate";
|
||||
d = "vox deactivate";
|
||||
s = "nix run \".#runserver\"";
|
||||
|
||||
# Nix related ones
|
||||
deploy = "nixos-rebuild switch --use-remote-sudo --use-substitutes --target-host";
|
||||
gl-nging = "sudo nixos-container run gitlab -- systemctl restart nginx";
|
||||
nb = "nix build -L";
|
||||
nixdu = "sudo nix-store --gc --print-roots | egrep -v r\"^(/nix/var|/run/\\w+-system|\\{memory|/proc)\"";
|
||||
nixtest = "nixpkgs-review rev HEAD";
|
||||
nixup = "nix flake lock --update-input";
|
||||
nixcopy = "nix copy --to \"s3://binary-cache/?profile=default&endpoint=nas.home%3A9000&scheme=http\"";
|
||||
stable = "nix flake lock --update-input nixstable --update-input hm --update-input nixvimstable";
|
||||
unstable = "nix flake lock --update-input nixunstable --update-input hmunstable --update-input nixvimunstable --update-input nurpkgs --update-input vsext --update-input wsl";
|
||||
updateScript = "nix-shell maintainers/scripts/update.nix --argstr package";
|
||||
|
||||
# General
|
||||
gh-personal = "$GH_CONFIG_DIR=\"${config.home.homeDirectory}/.config/gh/personal\" gh";
|
||||
k = "kubectl";
|
||||
kn = "kubectl get nodes -o wide";
|
||||
kp = "kubectl get pods -o wide";
|
||||
ls = "ls --color";
|
||||
ll = "ls -l --color";
|
||||
win = "sudo virsh start win10";
|
||||
z = "zeditor .";
|
||||
|
||||
# Tailscale related ones
|
||||
tsup = "sudo tailscale up";
|
||||
tspub = "sudo tailscale up --exit-node=linode";
|
||||
tshome = "sudo tailscale up --exit-node=2maccabees";
|
||||
tsclear = "sudo tailscale up --exit-node=''";
|
||||
|
||||
# Vagrant related
|
||||
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,131 @@
|
||||
# vim: set ft=xonsh :
|
||||
|
||||
from tempfile import NamedTemporaryFile, TemporaryDirectory
|
||||
|
||||
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 --raw)
|
||||
while result.returncode != 0:
|
||||
result = !(bw unlock --raw)
|
||||
$BW_SESSION = result.output.strip()
|
||||
return token
|
||||
|
||||
def vpn(con, bwname):
|
||||
nmcli c down @(con)
|
||||
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()
|
||||
aliases['unlock'] = _unlock
|
||||
|
||||
def _ivr(args):
|
||||
vpn("350Main", "IVR Technology")
|
||||
aliases['ivr'] = _ivr
|
||||
|
||||
def _ivr2(args):
|
||||
vpn("gregory_hellings@ra.ivrtechnology.com", "IVR Technology")
|
||||
aliases['ivr2'] = _ivr2
|
||||
|
||||
def _glrestart(args):
|
||||
sudo nixos-container run gitlab -- systemctl restart gitlab
|
||||
sudo nixos-container run gitlab -- systemctl restart nginx
|
||||
aliases['glrestart'] = _glrestart
|
||||
|
||||
def _aws_creds(args):
|
||||
$AWS_ACCESS_KEY_ID=$(bw get username "AWS Access Key")
|
||||
$AWS_SECRET_ACCESS_KEY=$(bw get password "AWS Access Key")
|
||||
aliases['aws_creds'] = _aws_creds
|
||||
|
||||
def _rebuild(args):
|
||||
system = uname()
|
||||
hostname = system.nodename
|
||||
if system.sysname == 'Darwin':
|
||||
sudo darwin-rebuild switch
|
||||
else:
|
||||
with TemporaryDirectory() as td:
|
||||
pushd @(td)
|
||||
nom build f"/etc/nixos#nixosConfigurations.{hostname}.config.system.build.toplevel"
|
||||
if g`result`:
|
||||
nvd diff /run/current-system result
|
||||
sudo nixos-rebuild switch
|
||||
popd
|
||||
aliases['rebuild'] = _rebuild
|
||||
|
||||
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)
|
||||
aliases['yaml2json'] = _yaml2json
|
||||
|
||||
def _py2env(args):
|
||||
vox new @(args[0]) -p /usr/bin/python2
|
||||
aliases['py2env'] = _py2env
|
||||
|
||||
def _py3env(args):
|
||||
vox new @(args[0])
|
||||
aliases['py3env'] = _py3env
|
||||
|
||||
def _rundock(args):
|
||||
if Path('/usr/bin/podman').exists():
|
||||
e = 'podman'
|
||||
else:
|
||||
e = 'docker'
|
||||
@(e) exec -ti @(args[0]) /bin/bash
|
||||
aliases['rundock'] = _rundock
|
||||
|
||||
def _pip_extras(args):
|
||||
import importlib_metadata
|
||||
print(importlib_metadata.metadata(args[0]).get_all('Provides-Extra'))
|
||||
aliases['pip_extras'] = _pip_extras
|
||||
|
||||
# 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])
|
||||
aliases['newdock'] = _newdock
|
||||
|
||||
def _unknown_host(args):
|
||||
sed -i -e @(args[0])d ~/.ssh/known_hosts
|
||||
aliases['unknown_host'] = _unknown_host
|
||||
|
||||
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['bake'] = _bake
|
||||
|
||||
def _cleanup(args):
|
||||
sudo nix profile wipe-history --profile ~/.local/state/nix/profiles/home-manager --older-than '30d'
|
||||
sudo nix-collect-garbage --delete-older-than 30d
|
||||
sudo nix store optimise
|
||||
aliases['cleanup'] = _cleanup
|
||||
|
||||
###
|
||||
#
|
||||
# Other random nice-to-have things
|
||||
#
|
||||
###
|
||||
|
||||
# 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,35 @@
|
||||
# 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
|
||||
|
||||
|
||||
# Does virtualenv support
|
||||
xontrib load vox
|
||||
# Faster coreutils
|
||||
xontrib load coreutils
|
||||
xontrib load direnv
|
||||
xontrib load coreutils
|
||||
xontrib load xonsh-apipenv
|
||||
$APIPENV="1"
|
||||
|
||||
# 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