{ pkgs, cornelis, cornelis-vim, agda, ... }: let username = "rachel"; homeDir = "/home/${username}"; SAX2NF = import ../shared/sax2nf.nix { inherit pkgs; }; hpkgs = pkgs.haskellPackages; hls_wrapper = pkgs.writeScript "hls" '' export PATH="${hpkgs.haskell-language-server}/bin:$PATH" exec ${hpkgs.haskell-language-server}/bin/haskell-language-server-wrapper "$@" ''; in { home = { username = username; homeDirectory = homeDir; packages = with pkgs; [ unzip zip xz gzip bzip2 p7zip usbutils pciutils nettools nmap arp-scan julia-bin (python3.withPackages (ps: with ps; [ ipython matplotlib numpy scipy ])) hpkgs.ghc firefox gnupg agda discord dig xxd zoom-us slack imagemagick ffmpeg sl cowsay lolcat fortune banner yt-dlp libreoffice protonmail-bridge pass protonvpn-cli protonvpn-gui thunderbird tidal-hifi signal-desktop transmission-gtk xclip clinfo glxinfo vulkan-tools obs-studio file gimp SAX2NF twemoji-color-font bat steam steam-run rmapi lutris texlive.combined.scheme-full cornelis zulip rink sage typst ttyper idris2 ]; stateVersion = "23.05"; }; xdg.userDirs = { enable = true; createDirectories = true; desktop = "${homeDir}"; documents = "${homeDir}/doc"; download = "${homeDir}/dwn"; music = "${homeDir}/music"; pictures = "${homeDir}/img"; publicShare = "${homeDir}/srv"; templates = "${homeDir}/doc/templates"; videos = "${homeDir}/vid"; }; programs = { bash = { enable = true; enableCompletion = true; historyFile = "/dev/null"; sessionVariables = { PS1 ="\\033[1m\\u\\033[0m@\\033[1m\\h\\033[0m: \\w\nλ "; BROWSER = "firefox"; XINITRC = "${homeDir}/bin/xinitrc"; XAUTHORITY = "${homeDir}/.local/share/Xauthority"; PASH_KEYID = "3E4A909C8FEF6E3783699C79DFC26EF8EDAD6D71"; QT_AUTO_SCREEN_FACTOR = 1; PATH = "${homeDir}/bin:$PATH"; }; shellAliases = { x = "startx"; rm = "rm -i"; cal = "cal -m"; }; initExtra = '' source ~/.profile set -o vi ''; }; mpv = { enable = true; config = { hwdec = "auto-safe"; vo = "gpu"; profile = "gpu-hq"; }; }; rofi = { enable = true; theme = "gruvbox-dark-soft"; }; git = { enable = true; userName = "Rachel Lambda Samuelsson"; userEmail = "depsterr@protonmail.com"; extraConfig = { init.defaultBranch = "master"; }; }; neovim = { defaultEditor = true; enable = true; vimAlias = true; extraLuaConfig = '' require('tmux').setup({ copy_sync = { redirect_to_clipboard = true } }); require('Comment').setup() require('nvim-surround').setup() local lspcfg = require('lspconfig') lspcfg.typst_lsp.setup({ cmd = { '${pkgs.typst-lsp}/bin/typst-lsp' }, }) lspcfg.hls.setup({ cmd = { '${hls_wrapper}', 'lsp' }, }) lspcfg.pyright.setup({ cmd = { '${pkgs.nodePackages.pyright}/bin/pyright-langserver', '--stdio' }, }) vim.api.nvim_create_autocmd('LspAttach', { callback = function(args) local opts = { buffer = args.buf } vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) vim.keymap.set('n', 'r', vim.lsp.buf.rename, opts) vim.keymap.set('n', 'a', vim.lsp.buf.code_action, opts) vim.keymap.set('i', '', vim.lsp.omnifunc, opts) end, }) vim.api.nvim_create_autocmd({ "BufNew" , "TextChanged" , "TextChangedI" , "TextChangedP" , "TextChangedT" }, { callback = function(args) vim.diagnostic.disable(args.buf) end }) vim.api.nvim_create_autocmd({"BufWrite"}, { callback = function(args) vim.diagnostic.enable(args.buf) end }) ''; extraConfig = '' set rnu nu set ts=2 sw=2 expandtab set clipboard=unnamedplus set laststatus=3 noshowmode set signcolumn=no set linebreak let g:cornelis_use_global_binary = 1 let g:lightline = { 'colorscheme': 'gruvbox' } colorscheme gruvbox hi Normal guibg=NONE ctermbg=NONE let maplocalleader="!" runtime agda-input.vim inoremap nnoremap j gj nnoremap k gk nnoremap gj j nnoremap gk k au BufRead,BufNewFile *.agda call AgdaFiletype() au BufRead,BufNewFile *.lagda.* call AgdaFiletype() function! AgdaFiletype() nnoremap :CornelisLoad nnoremap :CornelisRefine nnoremap :CornelisMakeCase nnoremap , :CornelisTypeContext nnoremap . :CornelisTypeContextInfer nnoremap :CornelisTypeInfer nnoremap :CornelisSolve nnoremap :CornelisAuto nnoremap gd :CornelisGoToDefinition nnoremap :CornelisPrevGoal nnoremap :CornelisNextGoal nnoremap :CornelisIgnoreAbstract nnoremap :CornelisGive endfunction ''; plugins = with pkgs.vimPlugins; [ nvim-surround comment-nvim vimtex gruvbox-nvim lightline-vim lightline-gruvbox-vim tmux-nvim cornelis-vim nvim-lspconfig idris2-vim ]; }; tmux = { enable = true; clock24 = true; escapeTime = 0; keyMode = "vi"; mouse = false; shortcut = "a"; extraConfig = '' bind h split -hb -c '#{pane_current_path}' bind j split -v -c '#{pane_current_path}' bind k split -vb -c '#{pane_current_path}' bind l split -h -c '#{pane_current_path}' is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?\.?(view|n?vim?x?)(-wrapped)?(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' 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 -n 'M-h' if-shell "$is_vim" 'send-keys M-h' 'resize-pane -L 1' bind -n 'M-j' if-shell "$is_vim" 'send-keys M-j' 'resize-pane -D 1' bind -n 'M-k' if-shell "$is_vim" 'send-keys M-k' 'resize-pane -U 1' bind -n 'M-l' if-shell "$is_vim" 'send-keys M-l' 'resize-pane -R 1' bind-key -T copy-mode-vi M-h resize-pane -L 1 bind-key -T copy-mode-vi M-j resize-pane -D 1 bind-key -T copy-mode-vi M-k resize-pane -U 1 bind-key -T copy-mode-vi M-l resize-pane -R 1 set -g pane-border-style bg=default set -g pane-border-style fg="#1D1F21" set -g pane-active-border-style bg=default set -g pane-active-border-style fg="#333333" set-option -g status on set-option -g status-style bg=default set-option -g status-style fg="#ef7627" set-option -g status-interval 2 set-option -g status-justify "centre" set-option -g status-right " λ " set -g status-interval 1 set-window-option -g window-status-separator "-" set-window-option -g window-status-current-format " #[fg=#b55690 bold]!![ #{b:pane_current_path}/ ] #{b:window_index} $ #{b:pane_current_command}!! " set-window-option -g window-status-format " #{b:window_index} [ #{b:pane_current_path}/ ] #{b:pane_current_command} " ''; }; hyfetch = { enable = true; settings = { preset = "lesbian"; mode = "rgb"; color_align = { mode = "horizontal"; }; }; }; direnv = { enable = true; nix-direnv.enable = true; }; alacritty = { enable = true; settings = { window = { padding.x = 5; padding.y = 5; decoration = "none"; }; dynamic_title = false; mouse_hide_when_typing = true; draw_bold_text_with_bright_colors = false; scrolling.history = 0; font = { normal.family = "SAX2 Nerd Font"; size = 11; }; colors = { background = "#1d1f21"; foreground = "#c5c8c6"; }; shell.program = let tmux-menu = pkgs.writeScript "tmux-menu" '' s="$(tmux ls 2>/dev/null)" [ "$s" ] && s="$s " c=$(${pkgs.fzf}/bin/fzf -1 <<-EOF ''${s}New Session Raw Shell EOF ) || exit case "$c" in "New Session") read -p "Name? " -r n ${pkgs.tmux}/bin/tmux new -s "$n" ;; "Raw Shell") ${pkgs.bash}/bin/bash --login ;; *) ${pkgs.tmux}/bin/tmux attach-session -t "''${c%%:*}" ;; esac ''; in "${tmux-menu}"; }; }; ssh = { enable = true; matchBlocks = { remarkable = { hostname = "10.11.99.1"; user = "root"; }; lazarus = { hostname = "rachel.cafe"; user = "deppy"; }; }; }; }; }