{ config, pkgs, lib, ... }: let name = "Jip J. Dekker"; user = "dekker1"; email = "jip@dekker.one"; in { # Shared shell configuration zsh.enable = true; zsh.autocd = false; zsh.plugins = [ { name = "powerlevel10k"; src = pkgs.zsh-powerlevel10k; file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; } { name = "powerlevel10k-config"; src = lib.cleanSource ./config; file = "p10k.zsh"; } ]; zsh.initExtraFirst = '' if [[ -f /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh ]]; then . /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh . /nix/var/nix/profiles/default/etc/profile.d/nix.sh fi # Define variables for directories export PATH=$HOME/.pnpm-packages/bin:$HOME/.pnpm-packages:$PATH export PATH=$HOME/.npm-packages/bin:$HOME/bin:$PATH export PATH=$HOME/.local/share/bin:$PATH export PNPM_HOME=~/.pnpm-packages # Remove history data we don't want to see export HISTIGNORE="pwd:ls:cd" # Emacs is my editor export ALTERNATE_EDITOR="" export EDITOR="emacsclient -t" export VISUAL="emacsclient -c -a emacs" e() { emacsclient -t "$@" } # nix shortcuts shell() { nix-shell '' -A "$1" } # Use difftastic, syntax-aware diffing alias diff=difft # Always color ls and group directories alias ls='ls --color=auto' ''; git = { enable = true; ignores = [ "*.swp" ]; userName = name; userEmail = email; lfs = { enable = true; }; extraConfig = { init.defaultBranch = "main"; core = { editor = "vim"; autocrlf = "input"; }; pull.rebase = true; rebase.autoStash = true; }; }; vim = { enable = true; plugins = with pkgs.vimPlugins; [ vim-airline vim-airline-themes vim-startify vim-tmux-navigator ]; settings = { ignorecase = true; }; extraConfig = '' "" General set number set history=1000 set nocompatible set modelines=0 set encoding=utf-8 set scrolloff=3 set showmode set showcmd set hidden set wildmenu set wildmode=list:longest set cursorline set ttyfast set nowrap set ruler set backspace=indent,eol,start set laststatus=2 set clipboard=autoselect " Dir stuff set nobackup set nowritebackup set noswapfile set backupdir=~/.config/vim/backups set directory=~/.config/vim/swap " Relative line numbers for easy movement set relativenumber set rnu "" Whitespace rules set tabstop=8 set shiftwidth=2 set softtabstop=2 set expandtab "" Searching set incsearch set gdefault "" Statusbar set nocompatible " Disable vi-compatibility set laststatus=2 " Always show the statusline let g:airline_theme='bubblegum' let g:airline_powerline_fonts = 1 "" Local keys and such let mapleader="," let maplocalleader=" " "" Change cursor on mode :autocmd InsertEnter * set cul :autocmd InsertLeave * set nocul "" File-type highlighting and configuration syntax on filetype on filetype plugin on filetype indent on "" Paste from clipboard nnoremap , "+gP "" Copy from clipboard xnoremap . "+y "" Move cursor by display lines when wrapping nnoremap j gj nnoremap k gk "" Map leader-q to quit out of window nnoremap q :q "" Move around split nnoremap h nnoremap j nnoremap k nnoremap l "" Easier to yank entire line nnoremap Y y$ "" Move buffers nnoremap :bnext nnoremap :bprev "" Like a boss, sudo AFTER opening the file to write cmap w!! w !sudo tee % >/dev/null let g:startify_lists = [ \ { 'type': 'dir', 'header': [' Current Directory '. getcwd()] }, \ { 'type': 'sessions', 'header': [' Sessions'] }, \ { 'type': 'bookmarks', 'header': [' Bookmarks'] } \ ] let g:startify_bookmarks = [ \ '~/.local/share/src', \ ] let g:airline_theme='bubblegum' let g:airline_powerline_fonts = 1 ''; }; alacritty = { enable = true; settings = { cursor = { style = "Block"; }; window = { opacity = 1.0; padding = { x = 24; y = 24; }; }; font = { normal = { family = "MesloLGS NF"; style = "Regular"; }; size = lib.mkMerge [ (lib.mkIf pkgs.stdenv.hostPlatform.isLinux 10) (lib.mkIf pkgs.stdenv.hostPlatform.isDarwin 14) ]; }; dynamic_padding = true; decorations = "full"; title = "Terminal"; class = { instance = "Alacritty"; general = "Alacritty"; }; colors = { primary = { background = "0x1f2528"; foreground = "0xc0c5ce"; }; normal = { black = "0x1f2528"; red = "0xec5f67"; green = "0x99c794"; yellow = "0xfac863"; blue = "0x6699cc"; magenta = "0xc594c5"; cyan = "0x5fb3b3"; white = "0xc0c5ce"; }; bright = { black = "0x65737e"; red = "0xec5f67"; green = "0x99c794"; yellow = "0xfac863"; blue = "0x6699cc"; magenta = "0xc594c5"; cyan = "0x5fb3b3"; white = "0xd8dee9"; }; }; }; }; ssh = { enable = true; extraConfig = lib.mkMerge [ '' Host github.com Hostname github.com IdentitiesOnly yes '' (lib.mkIf pkgs.stdenv.hostPlatform.isLinux '' IdentityFile /home/${user}/.ssh/id_github '') (lib.mkIf pkgs.stdenv.hostPlatform.isDarwin '' IdentityFile /Users/${user}/.ssh/id_github '') ]; }; tmux = { enable = true; plugins = with pkgs.tmuxPlugins; [ vim-tmux-navigator sensible yank prefix-highlight { plugin = power-theme; extraConfig = '' set -g @tmux_power_theme 'gold' ''; } { plugin = resurrect; # Used by tmux-continuum # Use XDG data directory # https://github.com/tmux-plugins/tmux-resurrect/issues/348 extraConfig = '' set -g @resurrect-dir '$HOME/.cache/tmux/resurrect' set -g @resurrect-capture-pane-contents 'on' set -g @resurrect-pane-contents-area 'visible' ''; } { plugin = continuum; extraConfig = '' set -g @continuum-restore 'on' set -g @continuum-save-interval '5' # minutes ''; } ]; terminal = "screen-256color"; prefix = "C-x"; escapeTime = 10; historyLimit = 50000; extraConfig = '' # Remove Vim mode delays set -g focus-events on # Enable full mouse support set -g mouse on # ----------------------------------------------------------------------------- # Key bindings # ----------------------------------------------------------------------------- # Unbind default keys unbind C-b unbind '"' unbind % # Split panes, vertical or horizontal bind-key x split-window -v bind-key v split-window -h # Move around panes with vim-like bindings (h,j,k,l) bind-key -n M-k select-pane -U bind-key -n M-h select-pane -L bind-key -n M-j select-pane -D bind-key -n M-l select-pane -R # Smart pane switching with awareness of Vim splits. # This is copy paste from https://github.com/christoomey/vim-tmux-navigator is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'" bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L' bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D' bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U' bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R' tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")' if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \ "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'" if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \ "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'" bind-key -T copy-mode-vi 'C-h' select-pane -L bind-key -T copy-mode-vi 'C-j' select-pane -D bind-key -T copy-mode-vi 'C-k' select-pane -U bind-key -T copy-mode-vi 'C-l' select-pane -R bind-key -T copy-mode-vi 'C-\' select-pane -l ''; }; }