dotfiles/nix/home.nix

278 lines
6.8 KiB
Nix
Raw Normal View History

{ config, lib, pkgs, ... }:
with lib;
let
git-plan = pkgs.buildGoPackage rec {
name = "git-plan";
version = "0";
goPackagePath = "gitlab.com/haaksmash/git-plan";
src = pkgs.fetchFromGitLab {
owner = "haaksmash";
repo = "git-plan";
2019-08-24 13:27:18 -07:00
rev = "89909ff0f5b59fa2b8104abb03198675e5ccc068";
sha256 = "1viahx5cls59g08ni767qf0zmsimdz1wi6k4723ckkcn0hcwn3mv";
};
goDeps = ./git-plan.nix;
};
in {
home.packages = with pkgs; [
2019-03-02 23:45:02 -08:00
direnv
git-plan
htop
2019-08-24 02:38:08 -07:00
jq
2019-03-07 13:25:21 -08:00
keybase
lastpass-cli
nox
2019-07-23 21:25:25 -07:00
tree
2019-03-02 23:45:02 -08:00
ranger
ripgrep
zsh-autosuggestions
zsh-history-substring-search
2019-03-02 23:45:02 -08:00
zsh-syntax-highlighting
];
programs.direnv = {
enable = true;
stdlib = ''
layout_postgres() {
export PGDATA="$(direnv_layout_dir)/tmp/pgdata"
export PGHOST="$PGDATA"
if [[ ! -d "$PGDATA" ]]; then
initdb --locale=$LANG
2019-07-23 21:25:54 -07:00
cat <<EOF >>"$PGDATA/postgresql.conf"
listen_addresses = 'localhost'
unix_socket_directories = '$PGHOST'
EOF
echo "CREATE DATABASE $USER;" | postgres --single -E postgres
fi
}
2019-08-24 02:38:26 -07:00
layout_go() {
export GOPATH="$(direnv_layout_dir)/tmp/golibs"
if [[ ! -d "$GOPATH" ]]; then
mkdir -p $GOPATH
fi
export PATH="$GOPATH/bin:$PATH"
}
'';
};
programs.command-not-found.enable = true;
programs.git = {
enable = true;
userName = "Haak Saxberg";
userEmail = "haak.erling@gmail.com";
2019-03-02 23:43:44 -08:00
ignores = [
".idea/"
2019-03-07 10:22:46 -08:00
".direnv/"
".envrc"
2019-03-02 23:43:44 -08:00
".tools-info"
"*~"
"*.swp"
];
};
programs.zsh = {
enable = true;
enableCompletion = true;
defaultKeymap = "viins";
initExtra = mkForce (''
export LOCALE_ARCHIVE="/usr/lib/locale/locale-archive"
export NIX_PATH=$HOME/.nix-defexpr/channels:$NIX_PATH
export EDITOR=vim
source $HOME/.nix-profile/etc/profile.d/nix.sh
source $HOME/.nix-profile/share/fzf/key-bindings.zsh
source $HOME/.nix-profile/share/fzf/completion.zsh
source $HOME/.nix-profile/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source $HOME/.nix-profile/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
2019-03-02 19:27:49 -08:00
source $HOME/.config/zsh/local.zsh
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
2019-03-02 23:43:44 -08:00
bindkey -M viins 'jj' vi-cmd-mode
eval "$(direnv hook zsh)"
'');
oh-my-zsh = {
enable = true;
theme = "bureau";
plugins = [
"vi-mode"
"git"
"z"
"nix-shell"
"tmuxinator"
];
};
};
programs.neovim = {
enable = true;
vimAlias = true;
2019-03-02 19:27:49 -08:00
withPython = true;
plugins = with pkgs.vimPlugins; [
vim-sensible
vim-startify
vim-javascript
vim-ruby
vim-nix
vim-elixir
alchemist-vim
haskell-vim
vim-markdown
vimtex
vim-airline
rainbow
vim-signify
vim-indent-guides
vim-surround
fugitive
easymotion
tagbar
vinegar
undotree
vim-test
ale
fzf-vim
fzfWrapper
LanguageClient-neovim
deoplete-nvim
papercolor-theme
];
extraConfig = ''
filetype plugin indent on
" ALE
let g:ale_fix_on_save = 1
" Easymotion
map / <Plug>(easymotion-sn)
omap / <Plug>(easymotion-tn)
map n <Plug>(easymotion-next)
map N <Plug>(easymotion-prev)
let g:EasyMotion_landing_highlight = 0
" Rainbow parentheses
let g:rainbow_conf = {
\ 'guifgs': ['RoyalBlue3', 'SeaGreen3', 'DarkOrchid3', 'firebrick3', 'RoyalBlue3', 'SeaGreen3', 'DarkOrchid3', 'firebrick3', 'RoyalBlue3', 'DarkOrchid3', 'firebrick3', 'RoyalBlue3', 'SeaGreen3', 'DarkOrchid3', 'firebrick3'],
\ 'ctermfgs': ['red', 'brown', 'blue', 'gray', 'green', 'magenta', 'cyan', 'darkred', 'brown', 'darkblue', 'gray', 'darkgreen', 'darkmagenta', 'darkcyan', 'red'],
\ 'parentheses': ['start=/(/ end=/)/ fold', 'start=/\[/ end=/\]/ fold', 'start=/{/ end=/}/ fold']
\}
let g:rainbow_active = 1
" Vim-Test
nmap <silent> <leader>t :TestNearest<CR>
nmap <silent> <leader>T :TestFile<CR>
nmap <silent> <leader>a :TestSuite<CR>
nmap <silent> <leader>l :TestLast<CR>
nmap <silent> <leader>g :TestVisit<CR>
let test#strategy = "neovim"
" Deoplete
let g:deoplete#enable_at_startup = 1
" Indent guides
let g:indent_guides_enable_on_vim_startup = 1
let g:indent_guides_start_level = 2
" let netrw look like NERDTree
let g:netrw_liststyle = 3
let mapleader=","
set nobackup
set noswapfile
set pastetoggle=<F2>
set nowrap
set background=dark
colorscheme PaperColor
set nocompatible
set number relativenumber
set numberwidth=1
set cursorline
set cursorcolumn
set ruler
set list
set listchars=tab:>-,trail:-,extends:>,precedes:<,nbsp:+,eol:$
set matchpairs+=<:>
set ts=2
set shiftwidth=2
set expandtab
" Open new split panes to right and bottom, which feels more natural
set splitbelow
set splitright
""" Searching and Patterns
set ignorecase
set smartcase
set smarttab
set hlsearch
" Add the g flag to search/replace by default
set gdefault
"recalculate the trailing whitespace warning when idle, and after saving
autocmd cursorhold,bufwritepost * unlet! b:statusline_trailing_space_warning
" strip trailing whitespace
autocmd BufWritePre * :%s/\s\+$//e
""" Handy remaps
noremap ; :
inoremap jj <Esc>
map <silent> <leader>V :source ~/.config/nvim/init.vim<CR>:filetype detect<CR>:exe ":echo 'vimrc reloaded'"<CR>
map \q :q<CR>
map \w :w<CR>
noremap Q <nop>
""" Terminal mode remaps
tnoremap <Esc> <C-\><C-n>
nnoremap <leader>o :below 10sp term://$SHELL<cr>i
" Quicker window movement
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-h> <C-w>h
nnoremap <C-l> <C-w>l
" Dont reset cursor to start of line when moving around.
set nostartofline
" minimal number of lines to keep above/below cursorline
set scrolloff=10
" Local overrides?
if filereadable($HOME . "/.vimrc.local")
source ~/.vimrc.local
endif
'';
};
programs.tmux = {
enable = true;
tmuxinator = {
enable = true;
};
};
programs.fzf = {
enable = true;
enableZshIntegration = true;
defaultCommand = "rg --no-ignore --follow --files --hidden --smart-case --glob \\\"!.git/*\\\"";
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
home.file.".tmux.conf" = {
source = ./tmux/tmux.conf;
};
}