Skip to content

Instantly share code, notes, and snippets.

@pete-murphy
Created August 7, 2022 18:05
Show Gist options
  • Select an option

  • Save pete-murphy/678c69abd1b769172e15483423595246 to your computer and use it in GitHub Desktop.

Select an option

Save pete-murphy/678c69abd1b769172e15483423595246 to your computer and use it in GitHub Desktop.
{ config, pkgs, lib, ... }:
let
zsh-plugins = {
nix-shell = (fetchGit {
url = "https://github.com/chisui/zsh-nix-shell.git";
rev = "69e90b9bccecd84734948fb03087c2454a8522f6";
});
nix-zsh-completions = (fetchGit {
url = "https://github.com/spwhitt/nix-zsh-completions.git";
rev = "d9f48b9be5d7ef8b0cfb43e08f9dd820d9e125ac";
});
zsh-vi-mode = (fetchGit {
url = "https://github.com/jeffreytse/zsh-vi-mode.git";
rev = "18727a0cabed4acbf72e8e1cc1457e8d647fee16";
});
};
pursPkgs = import (pkgs.fetchFromGitHub {
owner = "justinwoo";
repo = "easy-purescript-nix";
rev = "42c4be14167e0936c68f24684207edfed7f4d711";
sha256 = "1j3izs2sw6db55kpm0xrwzpipcccqx5c13cvjm7h6m196frac62h";
}) { inherit pkgs; };
m1MacHsBuildTools =
pkgs.haskellPackages.override {
overrides = self: super:
let
workaround140774 = hpkg: with pkgs.haskell.lib;
overrideCabal hpkg (drv: {
enableSeparateBinOutput = false;
});
in
{
ghcid = workaround140774 super.ghcid;
ormolu = workaround140774 super.ormolu;
};
};
in {
imports = [ <home-manager/nix-darwin> ];
services.nix-daemon.enable = true;
# List packages installed in system profile. To search by name, run:
# $ nix-env -qaP | grep wget
# environment.systemPackages =
# [ pkgs.vim
# pkgs.zsh
# ];
environment.shells = [ pkgs.zsh pkgs.bash ];
environment.loginShell = "${pkgs.zsh}/bin/zsh -l";
# Use a custom configuration.nix location.
# $ darwin-rebuild switch -I darwin-config=$HOME/.config/nixpkgs/darwin/configuration.nix
# environment.darwinConfig = "$HOME/.config/nixpkgs/darwin/configuration.nix";
# Auto upgrade nix package and the daemon service.
# services.nix-daemon.enable = true;
# nix.package = pkgs.nix;
system.keyboard = {
enableKeyMapping = true;
remapCapsLockToEscape = true;
};
environment.variables = {
EDITOR = "vi";
};
users.users.pete = {
name = "pete";
home = "/Users/pete";
};
home-manager.users.pete = { pkgs, ... }: {
home.file = {
".zsh/custom/plugins/nix-shell".source = zsh-plugins.nix-shell;
".zsh/custom/plugins/nix-zsh-completions".source = zsh-plugins.nix-zsh-completions;
".zsh/custom/plugins/zsh-vi-mode".source = zsh-plugins.zsh-vi-mode;
};
home.packages = [
pkgs.bat
pkgs.bottom
pkgs.cacert
pkgs.coreutils
pkgs.delta
pkgs.dhall
pkgs.dhall-lsp-server
pkgs.du-dust
pkgs.exa
pkgs.fd
pkgs.ffmpeg
pkgs.fira-code
pkgs.gnumake
pkgs.hyperfine
pkgs.imagemagick
pkgs.jq
pkgs.llvmPackages_12.llvm
pkgs.nerdfonts
# pkgs.nixFlakes
pkgs.nix-prefetch-git
pkgs.nodejs
pkgs.pass
pkgs.postgresql
pkgs.ripgrep
pkgs.rustup
pkgs.sd
# pkgs.telnet
pkgs.texlive.combined.scheme-full
pkgs.tree
# pkgs.unison-ucm
# pkgs.vlc
pkgs.yarn
pkgs.zoxide
# pkgs.haskellPackages.ghcid
# pkgs.haskellPackages.ormolu
pkgs.haskellPackages.pandoc
# pkgs.haskellPackages.ghcup # use ghcup to manage ghc/stack/cabal
m1MacHsBuildTools.ghcid
m1MacHsBuildTools.ormolu
m1MacHsBuildTools.stack
pursPkgs.pscid
pursPkgs.purs
# pursPkgs.purty
pursPkgs.purs-tidy
pursPkgs.spago
pursPkgs.zephyr
];
programs.zsh = {
enable = true;
enableCompletion = true;
autocd = true;
history = {
size = 500000;
ignoreSpace = true;
ignoreDups = true;
};
oh-my-zsh = {
enable = true;
custom = "$HOME/.zsh/custom/";
plugins = [
"git"
"nix-zsh-completions"
"nix-shell"
# "zsh-vi-mode" <- Doesn't play well with fzf
];
};
shellAliases = {
ls = "exa";
};
initExtraBeforeCompInit = ''
eval "$(zoxide init zsh)"
'';
initExtra = ''
# Edit line in vim with ctrl-e:
export EDITOR=nvim
autoload edit-command-line; zle -N edit-command-line
bindkey '^e' edit-command-line
'';
envExtra = ''
export XDG_CONFIG_HOME=$HOME/.config
export GPG_TTY=$(tty)
export PATH="$PATH:$HOME/.ghcup/bin:$HOME/.cargo/bin"
'';
};
programs.neovim = {
enable = true;
viAlias = true;
vimAlias = true;
plugins = with pkgs.vimPlugins; [
ReplaceWithRegister
coc-nvim
coc-explorer
ctrlp-vim
fzf-vim
fzfWrapper
vim-airline
vim-airline-themes
vim-colorschemes
vim-commentary
vim-cool
vim-nix
vim-polyglot
vim-surround
];
extraConfig = ''
set expandtab
" Set internal encoding of vim, not needed on neovim, since coc.nvim using some
" unicode characters in the file autoload/float.vim
set encoding=utf-8
" TextEdit might fail if hidden is not set.
set hidden
" Some servers have issues with backup files, see #649.
set nobackup
set nowritebackup
" Give more space for displaying messages.
set cmdheight=2
" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable
" delays and poor user experience.
set updatetime=300
" Don't pass messages to |ins-completion-menu|.
set shortmess+=c
" Always show the signcolumn, otherwise it would shift the text each time
" diagnostics appear/become resolved.
if has("nvim-0.5.0") || has("patch-8.1.1564")
" Recently vim can merge signcolumn and number column into one
set signcolumn=number
else
set signcolumn=yes
endif
" Use tab for trigger completion with characters ahead and navigate.
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
" other plugin before putting this into your config.
inoremap <silent><expr> <TAB>
\ pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ coc#refresh()
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
" Use <c-space> to trigger completion.
if has('nvim')
inoremap <silent><expr> <c-space> coc#refresh()
else
inoremap <silent><expr> <c-@> coc#refresh()
endif
" Make <CR> auto-select the first completion item and notify coc.nvim to
" format on enter, <cr> could be remapped by other vim plugin
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
" Use `[g` and `]g` to navigate diagnostics
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
nmap <silent> [g <Plug>(coc-diagnostic-prev)
nmap <silent> ]g <Plug>(coc-diagnostic-next)
" GoTo code navigation.
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)
" Use K to show documentation in preview window.
nnoremap <silent> K :call <SID>show_documentation()<CR>
function! s:show_documentation()
if (index(['vim','help'], &filetype) >= 0)
execute 'h '.expand('<cword>')
elseif (coc#rpc#ready())
call CocActionAsync('doHover')
else
execute '!' . &keywordprg . " " . expand('<cword>')
endif
endfunction
" Highlight the symbol and its references when holding the cursor.
autocmd CursorHold * silent call CocActionAsync('highlight')
" Symbol renaming.
nmap <leader>rn <Plug>(coc-rename)
" Formatting selected code.
xmap <leader>f <Plug>(coc-format-selected)
nmap <leader>f <Plug>(coc-format-selected)
augroup mygroup
autocmd!
" Setup formatexpr specified filetype(s).
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
" Update signature help on jump placeholder.
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
augroup end
" Applying codeAction to the selected region.
" Example: `<leader>aap` for current paragraph
xmap <leader>a <Plug>(coc-codeaction-selected)
nmap <leader>a <Plug>(coc-codeaction-selected)
" Remap keys for applying codeAction to the current buffer.
nmap <leader>ac <Plug>(coc-codeaction)
" Apply AutoFix to problem on the current line.
nmap <leader>qf <Plug>(coc-fix-current)
" Run the Code Lens action on the current line.
nmap <leader>cl <Plug>(coc-codelens-action)
" Map function and class text objects
" NOTE: Requires 'textDocument.documentSymbol' support from the language server.
xmap if <Plug>(coc-funcobj-i)
omap if <Plug>(coc-funcobj-i)
xmap af <Plug>(coc-funcobj-a)
omap af <Plug>(coc-funcobj-a)
xmap ic <Plug>(coc-classobj-i)
omap ic <Plug>(coc-classobj-i)
xmap ac <Plug>(coc-classobj-a)
omap ac <Plug>(coc-classobj-a)
" Remap <C-f> and <C-b> for scroll float windows/popups.
if has('nvim-0.4.0') || has('patch-8.2.0750')
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
endif
" Use CTRL-S for selections ranges.
" Requires 'textDocument/selectionRange' support of language server.
nmap <silent> <C-s> <Plug>(coc-range-select)
xmap <silent> <C-s> <Plug>(coc-range-select)
" Add `:Format` command to format current buffer.
command! -nargs=0 Format :call CocActionAsync('format')
" Add `:Fold` command to fold current buffer.
command! -nargs=? Fold :call CocAction('fold', <f-args>)
" Add `:OR` command for organize imports of the current buffer.
command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport')
" Add (Neo)Vim's native statusline support.
" NOTE: Please see `:h coc-status` for integrations with external plugins that
" provide custom statusline: lightline.vim, vim-airline.
set statusline^=%{coc#status()}%{get(b:,'coc_current_function',\'\')}
" Mappings for CoCList
" Show all diagnostics.
nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr>
" Manage extensions.
nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr>
" Show commands.
nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr>
" Find symbol of current document.
nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr>
" Search workspace symbols.
nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr>
" Do default action for next item.
nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR>
" Do default action for previous item.
nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR>
" Resume latest coc list.
nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>
'';
};
programs.starship = {
enable = true;
enableZshIntegration = true;
settings = {
java.disabled = true;
scala.disabled = true;
format = lib.concatStrings [
"$username"
"$hostname"
"$localip"
"$directory"
"$git_branch"
"$git_commit"
"$git_state"
"$git_metrics"
"$git_status"
"$nix_shell"
"$aws"
"$cmd_duration"
"$line_break"
"$character"
];
};
};
programs.tmux = {
enable = true;
escapeTime = 0;
keyMode = "vi";
historyLimit = 5000;
shell = "${pkgs.zsh}/bin/zsh";
shortcut = "a";
terminal = "screen-256color";
extraConfig = ''
# For the italics
# set -g default-terminal "tmux-256color"
# set -as terminal-overrides ',xterm*:sitm=\E[3m'
# Changes cursor to horizontal bar in insert mode
set -g -a terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q'
# No delay switching modes in vim
set -sg escape-time 0
# No delay for repeating commands (ie, arrows for switching panes)
set-option -g repeat-time 0
# Theme for status bar
set -g status-position bottom
set -g status-justify left
set -g status-left-length 30
set -g status-left ""
set -g status-right ""
set -g status-style fg=colour12,bg=colour18,dim
setw -g window-status-current-style fg=colour1,bg=colour19,bold
setw -g window-status-current-format ' #I#[fg=colour249]:#[fg=colour255]#W#[fg=colour249]#F '
# Mouse on
# set -g mouse on
# Copying to clipboard
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'
setw -g window-status-style fg=colour20,bg=colour18,none
setw -g window-status-format ' #I#[fg=colour237]:#[fg=colour250]#W#[fg=colour244]#F '
# Open new panes in current path
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
# Vi bindings for switching panes
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
'';
};
programs.fzf = {
enable = true;
enableZshIntegration = true;
defaultCommand = "${pkgs.ripgrep}/bin/rg --files";
};
programs.git = {
enable = true;
userName = "Peter Murphy";
userEmail = "26548438+ptrfrncsmrph@users.noreply.github.com";
extraConfig = {
core.editor = "code --wait --reuse-window";
init.defaultBranch = "main";
};
delta.enable = true;
ignores = [
"*~"
".*.swn"
".*.swp"
".*.swo"
];
};
};
# Create /etc/bashrc that loads the nix-darwin environment.
programs.zsh.enable = true; # default shell on catalina
# users.users.peter = {
# shell = "${pkgs.zsh}/bin/zsh";
# };
programs.bash.enable = false;
# Used for backwards compatibility, please read the changelog before changing.
# $ darwin-rebuild changelog
system.stateVersion = 4;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment