{ 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 = "17lr4pc2fjcgvx0p4vpkwx3mg9jadb4lygbwri0blmnkqql8xlh3"; 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"; }; }; vim-nix = pkgs.vimUtils.buildVimPlugin { name = "vim-nix"; src = pkgs.fetchFromGitHub { owner = "LnL7"; repo = "vim-nix"; rev = "d733cb96707a2a6bdc6102b6d89f947688e0e959"; sha256 = "12k2gwm8b1n02361gpjhsldql99yd7qsh80a3lbwc5c5gz5j8jsb"; }; }; in { home.packages = with pkgs; [ git-plan htop jq keybase lastpass-cli lorri nnn tree ripgrep zsh-autosuggestions zsh-history-substring-search zsh-syntax-highlighting ]; programs.direnv = { enable = true; stdlib = readFile ./direnv/direnvrc; }; 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 = readFile ./zsh/zshrc; oh-my-zsh = { enable = true; theme = "typewritten"; custom = "$HOME/.oh-my-zsh/custom"; plugins = [ "vi-mode" "git" "z" ]; }; }; programs.kakoune = { enable = true; config = { numberLines = { enable = true; highlightCursor = true; relative = true; }; }; plugins = with pkgs.kakounePlugins; [ kak-prelude kak-fzf kak-auto-pairs kak-ansi ]; extraConfig = '' colorscheme tomorrow-night set -add global autoinfo normal # FZF settings map global normal ': fzf-mode' ''; }; programs.neovim = { enable = true; vimAlias = true; plugins = with pkgs.vimPlugins; [ vim-sensible vim-startify papercolor-theme vim-elixir alchemist-vim vim-nix vim-javascript vim-json vim-jsx-pretty vim-commentary vim-airline { plugin = rainbow; config = '' 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-signify vim-indent-guides vim-surround fugitive { plugin = easymotion; config = '' map / (easymotion-sn) omap / (easymotion-tn) map n (easymotion-next) map N (easymotion-prev) let g:EasyMotion_landing_highlight = 0 ''; } vinegar undotree { plugin = vim-test; config = '' nmap t :TestNearest nmap T :TestFile nmap a :TestSuite nmap l :TestLast nmap g :TestVisit let test#strategy = "neovim" ''; } fzf-vim fzfWrapper { plugin = nvim-compe; config = '' set completeopt=menuone,noselect let g:compe = {} let g:compe.enabled = v:true let g:compe.autocomplete = v:true let g:compe.debug = v:false let g:compe.min_length = 1 let g:compe.preselect = 'enable' let g:compe.throttle_time = 80 let g:compe.source_timeout = 200 let g:compe.resolve_timeout = 800 let g:compe.incomplete_delay = 400 let g:compe.max_abbr_width = 100 let g:compe.max_kind_width = 100 let g:compe.max_menu_width = 100 let g:compe.documentation = v:true let g:compe.source = {} let g:compe.source.path = v:true let g:compe.source.buffer = v:true let g:compe.source.calc = v:true let g:compe.source.nvim_lsp = v:true let g:compe.source.nvim_lua = v:true let g:compe.source.vsnip = v:true let g:compe.source.ultisnips = v:true let g:compe.source.luasnip = v:true let g:compe.source.emoji = v:true ''; } vim-goyo { plugin = nvim-lspconfig; config = '' lua << EOF ${readFile ( pkgs.substituteAll { src = ./vim/nvim-lspconfig.lua; # since both of these are used for actually configuring the system, # we'll probably always want them around. lua_ls = pkgs.sumneko-lua-language-server; rnix_lsp = pkgs.rnix-lsp; } ) } EOF ''; } ]; extraConfig = readFile ./vim/init.vim; }; 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; }; }