{ lib, pkgs, config, ... }: let cfg = config._users.${username}.home; username = "timmy"; email = "tjk@tjkeller.xyz"; fullname = "Tim Keller"; home = "/home/${username}"; userDirs = { desktop = "${home}"; download = "${home}/dls"; documents = "${home}/docs"; pictures = "${home}/pics"; # Set these as null so they're not created music = null; publicShare = null; templates = null; videos = null; #projects = "${home}/docs/src" }; in { options._users.${username}.home = { enable = lib.mkEnableOption "configure home for user ${username}"; #neovim = { # enableLSP = lib.mkEnableOption "whether to enable lsp"; #}; }; config = lib.mkIf cfg.enable { # Setup home-manager home = { username = username; homeDirectory = home; stateVersion = "24.05"; }; # Setup userdirs xdg.userDirs = { enable = true; createDirectories = true; } // userDirs; # Setup git programs.git = { enable = true; settings = { user = { name = fullname; email = email; }; merge.tool = "nvimdiff"; mergetool.nvimdiff = { cmd = ''nvim -d "$LOCAL" "$MERGED" "$REMOTE"''; prompt = false; }; # Unfortunately, this doesn't work for some reason #url = { # "ssh://git@publicgit/".insteadOf = "https://git.tjkeller.xyz/"; #}; }; }; # Setup gtk bookmarks gtk.gtk3.bookmarks = ( lib.mapAttrsToList (name: dir: lib.mkIf (dir != null) "file://${dir} ${lib.toUpper (lib.substring 0 1 name)}${lib.substring 1 (-1) name}" # Make first letter upper case ) userDirs ); # Setup neovim programs._neovim = { enable = true; package = pkgs.unstable.neovim; viAlias = true; vimAlias = true; plugins = { lsp = { enable = lib.mkDefault true; languageServers.packages = with pkgs; [ python313Packages.python-lsp-server svelte-language-server tailwindcss-language-server typescript-language-server vscode-langservers-extracted ]; }; treesitter = let allTSParserPackages = builtins.filter lib.isDerivation (builtins.attrValues pkgs.vimPlugins.nvim-treesitter-parsers); in { enable = lib.mkDefault true; parsers.packages = allTSParserPackages; }; packages.start = with pkgs.vimPlugins; [ autoclose-nvim blink-cmp gruvbox-nvim minitab-nvim nvim-colorizer-lua nvim-ts-autotag # depends on treesitter pkgs.unstable.vimPlugins.rainbow-delimiters-nvim # depends on treesitter snacks-nvim ]; }; extraPackages = with pkgs; [ gcc # Treesitter requires a C compiler unzip # For zip, xlsx, etc. files ]; }; }; }