dotfiles/nix/home.nix

363 lines
9.5 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ config, lib, pkgs, ... }:
with lib;
let
git-plan = pkgs.rustPlatform.buildRustPackage rec {
name = "git-plan";
version = "1";
src = pkgs.fetchFromGitLab {
owner = "haaksmash";
repo = "git-plan";
rev = "518dcf15f3a46605f18569dd69b3b63d763e9439";
sha256 = "06gh3v35bdr0qsp459183br4hpmwm36d2r9fjyx9j5jfpzggqg51";
};
cargoSha256 = "1aqjgfpqsasy9qvw08ill7ig6k9n9rdkwxlg1z5g61z7cmi1p3i4";
nativeBuildInputs = [ pkgs.pkgconfig ];
buildInputs = [ pkgs.openssl ] ++ (if pkgs.stdenv.isDarwin then [ pkgs.libiconv pkgs.darwin.apple_sdk.frameworks.Security ] else []);
};
vim-goyo = pkgs.vimUtils.buildVimPlugin {
name = "vim-goyo";
src = pkgs.fetchFromGitHub {
owner = "junegunn";
repo = "goyo.vim";
rev = "6b6ed2734084fdbb6315357ddcaecf9c8e6f143d";
sha256 = "1ywlz1hn54kxyp5q0angriaarimq7ys7m6sk6l4x8jr1g2yh0afz";
};
};
in {
home.packages = with pkgs; [
git-plan
htop
jq
keybase
lastpass-cli
lorri
nox
tree
ranger
ripgrep
vlc
zsh-autosuggestions
zsh-history-substring-search
zsh-syntax-highlighting
] ++ (if pkgs.stdenv.isDarwin then [
skhd # keyboard shortcut daemon for macOS
] else [
calibre
slack
]);
programs.direnv = {
enable = true;
stdlib = ''
layout_postgres() {
export PGDATA="$(direnv_layout_dir)/tmp/pgdata"
export PGHOST="$PGDATA"
if [[ ! -d "$PGDATA" ]]; then
initdb --locale=$LANG
cat <<EOF >>"$PGDATA/postgresql.conf"
listen_addresses = 'localhost'
unix_socket_directories = '$PGHOST'
EOF
echo "CREATE DATABASE $USER;" | postgres --single -E postgres
fi
}
layout_go() {
export GOPATH="$(direnv_layout_dir)/tmp/golibs"
if [[ ! -d "$GOPATH" ]]; then
mkdir -p $GOPATH
fi
export PATH="$GOPATH/bin:$PATH"
}
'';
};
programs.git = {
enable = true;
userName = "Haak Saxberg";
userEmail = "haak.erling@gmail.com";
ignores = [
".idea/"
".direnv/"
".git-plans/"
".envrc"
".tools-info"
"*~"
"*.swp"
".yardoc/"
"doc/"
];
};
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
source $HOME/.config/zsh/local.zsh
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
bindkey -M viins 'jj' vi-cmd-mode
# utility for storing functions under a new name
save_function() {
local ORIG_FUNC=$(declare -f $1)
local NEWNAME_FUNC="$2''${ORIG_FUNC#$1}"
eval "$NEWNAME_FUNC"
}
# Override an oh-my-zsh/lib/git.sh function so that old repositories
# don't slow the shell down
save_function git_prompt_status old_git_prompt_status
function git_prompt_status() {
if [[ "$(command git config --get oh-my-zsh.hide-prompt-status 2>/dev/null)" != "1" ]]; then
old_git_prompt_status
fi
}
eval "$(direnv hook zsh)"
'');
shellAliases = {
n = "neuron new";
ns = "neuron search -a";
};
oh-my-zsh = {
enable = true;
theme = "typewritten";
custom = "$HOME/.oh-my-zsh/custom";
plugins = [
"vi-mode"
"git"
"z"
];
};
};
programs.neovim = {
enable = true;
vimAlias = true;
withPython = true;
plugins = with pkgs.vimPlugins; [
vim-sensible
vim-startify
alchemist-vim
vimtex
vim-elixir
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
vim-goyo
];
extraConfig = ''
filetype plugin indent on
" ALE
let g:ale_fix_on_save = 1
let g:ale_elixir_credo_strict = 1
let g:ale_fixers = {
\ 'elm': ['elm-format', 'format'],
\ 'javascript': ['prettier'],
\ 'javascript.jsx': ['prettier'],
\ 'javascriptreact': ['prettier'],
\ 'typescriptreact': ['prettier'],
\ 'ruby': [],
\ 'rust': ['rustfmt'],
\ 'elixir': ['mix_format']
\}
" 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
" LanguageClient-neovim
let g:LanguageClient_serverCommands = {
\ 'elm': ['elm-language-server', '--stdio'],
\ 'javascript': ['flow', 'lsp'],
\ 'javascript.jsx': ['flow', 'lsp'],
\ 'javascriptreact': ['flow', 'lsp'],
\ 'rust': ['rustup', 'run', 'stable', 'rls'],
\ }
let g:LanguageClient_rootMarkers = {
\ 'elm': ['elm.json'],
\ 'typescriptreact': ['tsconfig.json'],
\ }
let g:LanguageClient_loggingFile = expand('~/.local/share/nvim/LanguageClient.log')
nnoremap <leader>t :call LanguageClient_textDocument_hover()<CR>
nnoremap <leader>y :call LanguageClient_textDocument_definition()<CR>
" 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>
""" Esperanto digraphs (for use with ctrl-k)
:digraph Cx 264
:digraph cx 265
:digraph Gx 284
:digraph gx 285
:digraph Hx 292
:digraph hx 293
:digraph Jx 308
:digraph jx 309
:digraph Sx 348
:digraph sx 349
:digraph Ux 364
:digraph ux 365
""" 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;
};
secureSocket = false;
};
programs.fzf = {
enable = true;
enableZshIntegration = true;
defaultCommand = "rg --no-ignore --follow --files --hidden --smart-case --glob \\\"!.git/*\\\"";
};
services.lorri.enable = !pkgs.stdenv.isDarwin;
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
home.file.".tmux.conf" = {
source = ./tmux/tmux.conf;
};
home.file.".oh-my-zsh/custom/themes/typewritten.zsh-theme" = {
source = ./zsh/typewritten.zsh-theme;
};
}