From 22b6712c240fea0643cfc01acfce1fda1f125b8a Mon Sep 17 00:00:00 2001 From: Grace Yoder Date: Thu, 3 Sep 2026 15:36:32 -0400 Subject: nix init --- home/base.nix | 16 ++ home/cs_purdue.nix | 12 ++ home/ghostty.nix | 35 ++++ home/helix.nix | 580 +++++++++++++++++++++++++++++++++++++++++++++++++++++ home/langs.nix | 20 ++ home/packages.nix | 13 ++ home/pkgs_mac.nix | 8 + home/shell.nix | 461 ++++++++++++++++++++++++++++++++++++++++++ home/tmux.nix | 48 +++++ home/typst.nix | 20 ++ home/vcs.nix | 33 +++ home/vim.nix | 15 ++ 12 files changed, 1261 insertions(+) create mode 100644 home/base.nix create mode 100644 home/cs_purdue.nix create mode 100644 home/ghostty.nix create mode 100644 home/helix.nix create mode 100644 home/langs.nix create mode 100644 home/packages.nix create mode 100644 home/pkgs_mac.nix create mode 100644 home/shell.nix create mode 100644 home/tmux.nix create mode 100644 home/typst.nix create mode 100644 home/vcs.nix create mode 100644 home/vim.nix (limited to 'home') diff --git a/home/base.nix b/home/base.nix new file mode 100644 index 0000000..03e1ff3 --- /dev/null +++ b/home/base.nix @@ -0,0 +1,16 @@ +{ config, ... }: + +{ + home = { + stateVersion = "26.05"; + + sessionVariables = { + XDG_CONFIG_HOME = "${config.home.homeDirectory}/.config"; + EDITOR = "nvim"; + VISUAL = "nvim"; + }; + }; + + xdg.enable = true; + programs.home-manager.enable = true; +} diff --git a/home/cs_purdue.nix b/home/cs_purdue.nix new file mode 100644 index 0000000..b74df52 --- /dev/null +++ b/home/cs_purdue.nix @@ -0,0 +1,12 @@ +{ ... }: + +{ + home.sessionVariables = { + CS_CLASS = "cortex"; + CS_SERVER = "xinuserver"; + }; + + home.sessionPath = [ + "/p/xinu/bin" + ]; +} diff --git a/home/ghostty.nix b/home/ghostty.nix new file mode 100644 index 0000000..b954f42 --- /dev/null +++ b/home/ghostty.nix @@ -0,0 +1,35 @@ +{ pkgs, ... }: + +{ + programs.ghostty = { + enable = true; + + package = pkgs.ghostty-bin; + enableFishIntegration = true; + + settings = { + clipboard-read = "allow"; + clipboard-write = "allow"; + copy-on-select = true; + theme = "Rose Pine"; + font-family = "ComicCode Nerd Font SemiBold"; + font-style-italic = "ComicCode Nerd Font Light"; + macos-option-as-alt = "left"; + macos-icon = "blueprint"; + font-feature = [ + "-calt" + "-liga" + "-dlig" + ]; + cursor-click-to-move = true; + keybind = [ + "global:cmd+grave_accent=toggle_quick_terminal" + # "alt+i=inspector:toggle" + "super+t=unbind" + ]; + quick-terminal-position = "center"; + quick-terminal-animation-duration = 0.1; + }; + }; + +} diff --git a/home/helix.nix b/home/helix.nix new file mode 100644 index 0000000..1fe17fb --- /dev/null +++ b/home/helix.nix @@ -0,0 +1,580 @@ +{ pkgs, ... }: + +let + wRoots = + roots: + roots + ++ [ + ".jj" + ".git" + ]; + +in +{ + home.packages = [ + pkgs.nerd-fonts.symbols-only + ]; + + xdg.configFile."helix/ignore".text = '' + .git/ + node_modules/ + build/ + ''; + + programs.helix = { + enable = true; + package = pkgs.helix; + defaultEditor = false; + settings = { + theme = "grace_rose_pine"; + editor = { + clipboard-provider = "termcode"; + bufferline = "multiple"; + color-modes = true; + default-yank-register = "+"; + cursorline = true; + cursorcolumn = true; + continue-comments = false; + line-number = "relative"; + text-width = 100; + soft-wrap = { + enable = true; + max-indent-retain = 40; + wrap-at-text-width = true; + wrap-indicator = " "; + }; + indent-guides = { + render = true; + character = "┆"; + }; + lsp = { + display-messages = true; + }; + + file-picker = { + hidden = false; + ignore = true; + git-ignore = true; + git-global = true; + git-exclude = true; + }; + + statusline = { + left = [ + "mode" + "separator" + "spinner" + "version-control" + "file-name" + "read-only-indicator" + "file-modification-indicator" + ]; + center = [ ]; + right = [ + "diagnostics" + "workspace-diagnostics" + "selections" + "position-percentage" + "position" + "file-type" + ]; + separator = ""; + mode = { + normal = "  NOR "; + insert = "  INS "; + select = "  SEL "; + }; + + }; + }; + keys.normal = { + "C-w" = "no_op"; + "C-r" = ":reload"; + y = "yank_to_clipboard"; + p = "paste_clipboard_after"; + P = "paste_clipboard_before"; + space = { + t = ":new"; + v = "vsplit"; + }; + }; + keys.select = { + "C-w" = "no_op"; + }; + }; + + languages = { + language-server = { + nixd = { + command = "${pkgs.nixd}/bin/nixd"; + }; + nil = { + command = "${pkgs.nil}/bin/nil"; + }; + luals = { + command = "${pkgs.lua-language-server}/bin/lua-language-server"; + }; + + pyright = { + command = "${pkgs.pyright}/bin/pyright-langserver"; + args = [ "--stdio" ]; + config = { + python.analysis = { + autoSearchPaths = true; + useLibraryCodeForTypes = true; + diagnosticMode = "openFilesOnly"; + }; + }; + }; + + ruff = { + command = "${pkgs.ruff}/bin/ruff"; + args = [ "server" ]; + }; + + clangd = { + command = "${pkgs.clang-tools}/bin/clangd"; + args = [ + "--background-index" + "--offset-encoding=utf-8" + "--query-driver=/Users/scie/.platformio/packages/toolchain-xtensa-esp32/**" + "--query-driver=/Users/scie/.platformio/packages/framework-arduinoststm32/**" + ]; + }; + + tailwindcss = { + command = "${pkgs.tailwindcss-language-server}/bin/tailwindcss-language-server"; + args = [ "--stdio" ]; + }; + + zls.command = "${pkgs.zls}/bin/zls"; + gopls.command = "${pkgs.gopls}/bin/gopls"; + + tinymist = { + command = "${pkgs.tinymist}/bin/tinymist"; + config.tinymist.formatterMode = "typstyle"; + }; + + rust-analyzer = { + command = "${pkgs.rust-analyzer}/bin/rust-analyzer"; + config."rust-analyzer" = { + check.command = "clippy"; + diagnostics.enable = true; + }; + }; + + gdscript = { + command = "${pkgs.netcat}/bin/nc"; + args = [ + "127.0.0.1" + "6005" + ]; + }; + + # csharp-ls = { + # command = "${pkgs.csharp-ls}/bin/csharp-ls"; + # config.AutomaticWorkspaceInit = true; + # }; + + asm-lsp.command = "${pkgs.asm-lsp}/bin/asm-lsp"; + + codebook = { + command = "${pkgs.codebook}/bin/codebook-lsp"; + args = [ "serve" ]; + }; + + json = { + command = "${pkgs.vscode-langservers-extracted}/bin/vscode-json-language-server"; + args = [ "--stdio" ]; + config.provideFormatter = true; + }; + + eslint = { + command = "${pkgs.vscode-langservers-extracted}/bin/vscode-eslint-language-server"; + args = [ "--stdio" ]; + }; + + css = { + command = "${pkgs.vscode-langservers-extracted}/bin/vscode-css-language-server"; + args = [ "--stdio" ]; + }; + + html = { + command = "${pkgs.vscode-langservers-extracted}/bin/vscode-html-language-server"; + args = [ "--stdio" ]; + config = { + provideFormatter = true; + embeddedLanguages = { + css = true; + javascript = true; + }; + configurationSection = [ + "html" + "css" + "javascript" + ]; + }; + }; + + fish = { + command = "${pkgs.fish-lsp}/bin/fish-lsp"; + args = [ "start" ]; + }; + + astro = { + command = "${pkgs.astro-language-server}/bin/astro-ls"; + args = [ "--stdio" ]; + config.typescript.tsdk = "./node_modules/typescript/lib"; + }; + }; + + language = [ + { + name = "nix"; + scope = "source.nix"; + file-types = [ "nix" ]; + language-servers = [ + "nixd" + "nil" + "codebook" + ]; + formatter.command = "${pkgs.nixfmt}/bin/nixfmt"; + auto-format = true; + roots = wRoots [ ]; + } + { + name = "lua"; + scope = "source.lua"; + file-types = [ "lua" ]; + language-servers = [ + "luals" + "codebook" + ]; + roots = wRoots [ + ".luarc.json" + ".luarc.jsonc" + ]; + } + { + name = "python"; + scope = "source.python"; + file-types = [ + "py" + "pyi" + ]; + language-servers = [ + "pyright" + "ruff" + "codebook" + ]; + roots = wRoots [ + "pyproject.toml" + "setup.py" + "setup.cfg" + "requirements.txt" + "Pipfile" + "pyrightconfig.json" + ]; + } + { + name = "c"; + scope = "source.c"; + file-types = [ + "c" + "h" + "arduino" + ]; + language-servers = [ + "clangd" + "codebook" + ]; + roots = wRoots [ + ".clangd" + ".clang-tidy" + ".clang-format" + "compile_commands.json" + "compile_flags.txt" + "configure.ac" + ]; + } + { + name = "cpp"; + scope = "source.cpp"; + file-types = [ + "cc" + "hh" + "cxx" + "hpp" + "cpp" + "hxx" + "proto" + ]; + language-servers = [ + "clangd" + "codebook" + ]; + roots = wRoots [ + ".clangd" + ".clang-tidy" + ".clang-format" + "compile_commands.json" + "compile_flags.txt" + "configure.ac" + ]; + } + { + name = "zig"; + scope = "source.zig"; + file-types = [ "zig" ]; + language-servers = [ + "zls" + "codebook" + ]; + roots = wRoots [ + "zls.json" + "build.zig" + ]; + } + { + name = "go"; + scope = "source.go"; + file-types = [ + "go" + "gomod" + "gowork" + "gotmpl" + ]; + language-servers = [ + "gopls" + "codebook" + ]; + roots = wRoots [ + "go.work" + "go.mod" + ]; + } + { + name = "typst"; + scope = "source.typst"; + file-types = [ "typ" ]; + language-servers = [ + "tinymist" + "codebook" + ]; + roots = wRoots [ ]; + text-width = 80; + soft-wrap = { + enable = true; + max-indent-retain = 40; + wrap-at-text-width = true; + wrap-indicator = " "; + }; + } + { + name = "markdown"; + language-servers = [ "codebook" ]; + roots = wRoots [ ]; + text-width = 80; + soft-wrap = { + enable = true; + max-indent-retain = 40; + wrap-at-text-width = true; + wrap-indicator = " "; + }; + } + { + name = "rust"; + scope = "source.rust"; + file-types = [ "rs" ]; + language-servers = [ + "rust-analyzer" + "codebook" + ]; + roots = wRoots [ + "Cargo.toml" + "Cargo.lock" + ]; + } + { + name = "gdscript"; + scope = "source.gdscript"; + file-types = [ "gd" ]; + language-servers = [ "gdscript" ]; + roots = wRoots [ + "project.godot" + ]; + } + { + name = "c-sharp"; + scope = "source.cs"; + file-types = [ "cs" ]; + language-servers = [ "csharp-ls" ]; + roots = wRoots [ ]; + } + { + name = "asm"; + scope = "source.asm"; + file-types = [ + "s" + "S" + "asm" + ]; + language-servers = [ "asm-lsp" ]; + roots = wRoots [ + ".asm-lsp.toml" + ]; + } + { + name = "json"; + scope = "source.json"; + file-types = [ + "json" + "jsonc" + ]; + language-servers = [ + "json" + "codebook" + ]; + roots = wRoots [ ]; + } + { + name = "javascript"; + scope = "source.js"; + file-types = [ + "js" + "jsx" + "mjs" + "cjs" + ]; + language-servers = [ + "eslint" + "tailwindcss" + "codebook" + ]; + roots = wRoots [ + "package.json" + ]; + } + { + name = "typescript"; + scope = "source.ts"; + file-types = [ + "ts" + "tsx" + "mts" + "cts" + ]; + language-servers = [ + "eslint" + "tailwindcss" + "codebook" + ]; + roots = wRoots [ + "package.json" + "tsconfig.json" + ]; + } + { + name = "html"; + scope = "source.html"; + file-types = [ "html" ]; + language-servers = [ + "html" + "tailwindcss" + "codebook" + ]; + roots = wRoots [ + "package.json" + ]; + } + { + name = "css"; + scope = "source.css"; + file-types = [ + "css" + "scss" + "less" + ]; + language-servers = [ + "css" + "tailwindcss" + "codebook" + ]; + roots = wRoots [ + "package.json" + ]; + } + { + name = "astro"; + scope = "source.astro"; + file-types = [ "astro" ]; + language-servers = [ + "astro" + "eslint" + "tailwindcss" + ]; + roots = wRoots [ + "package.json" + "tsconfig.json" + "jsconfig.json" + ]; + } + { + name = "fish"; + scope = "source.fish"; + file-types = [ "fish" ]; + language-servers = [ "fish" ]; + roots = wRoots [ + "config.fish" + ]; + } + ]; + }; + + themes.grace_rose_pine = { + inherits = "rose_pine_moon"; + + "ui.statusline" = { + fg = "text"; + bg = "surface"; + }; + "ui.statusline.inactive" = { + fg = "muted"; + bg = "base"; + }; + "ui.statusline.normal" = { + fg = "base"; + bg = "pine"; + modifiers = [ "bold" ]; + }; + "ui.statusline.insert" = { + fg = "base"; + bg = "pine"; + modifiers = [ "bold" ]; + }; + "ui.statusline.select" = { + fg = "base"; + bg = "pine"; + modifiers = [ "bold" ]; + }; + "ui.statusline.separator" = { + fg = "pine"; + bg = "surface"; + }; + "ui.bufferline" = { + fg = "subtle"; + bg = "base"; + }; + "ui.bufferline.active" = { + fg = "base"; + bg = "rose"; + modifiers = [ "bold" ]; + }; + "ui.bufferline.background" = { + bg = "base"; + }; + }; + + }; + +} diff --git a/home/langs.nix b/home/langs.nix new file mode 100644 index 0000000..1a25791 --- /dev/null +++ b/home/langs.nix @@ -0,0 +1,20 @@ +{ pkgs, ... }: + +{ + home.packages = with pkgs; [ + go + rustup + llvm + nodejs_22 + typst + zig + python313 + + # Build and language-specific tooling. + cmake + gnumake + just + uv + platformio-core + ]; +} diff --git a/home/packages.nix b/home/packages.nix new file mode 100644 index 0000000..83c65e1 --- /dev/null +++ b/home/packages.nix @@ -0,0 +1,13 @@ +{ pkgs, ... }: + +{ + home.packages = with pkgs; [ + neovim + tree-sitter + + sqlite + podman + + # kicad + ]; +} diff --git a/home/pkgs_mac.nix b/home/pkgs_mac.nix new file mode 100644 index 0000000..08d63e4 --- /dev/null +++ b/home/pkgs_mac.nix @@ -0,0 +1,8 @@ +{ pkgs, ... }: + +{ + home.packages = with pkgs; [ + utm + vesktop + ]; +} diff --git a/home/shell.nix b/home/shell.nix new file mode 100644 index 0000000..9788b58 --- /dev/null +++ b/home/shell.nix @@ -0,0 +1,461 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + dots = toString ./..; +in +{ + home.packages = with pkgs; [ + pfetch-rs + sesh + ripgrep + dust + tree + btop + curl + fd + uutils-coreutils + wget + jq + yq + yj + most + asciinema + bash + openssh + openssl + ]; + + xdg.configFile."fish/themes/rose_pine.theme".source = + config.lib.file.mkOutOfStoreSymlink "${dots}/fish/rose_pine.theme"; + + programs.fish = { + enable = true; + + shellAliases = { + setupidf = "source /opt/esp/esp-idf/export.fish"; + pysource = "source .venv/bin/activate.fish"; + tcl = "clear && clear"; + tclear = "clear && clear"; + }; + + functions = { + ask = { + description = "Ask for input and respond with input"; + body = '' + read -s -P "Enter Input: " response + echo $response + ''; + }; + + loadenv = '' + argparse h/help print printb U/unload -- $argv + or return 1 + + if set -q _flag_help + echo "Usage: loadenv [OPTIONS] [FILE]" + echo "" + echo "Export keys and values from a dotenv file." + echo "" + echo "Options:" + echo " --help, -h Show this help message" + echo " --print Print env keys (export preview)" + echo " --printb Print keys with surrounding brackets" + echo " --unload, -U Unexport all keys defined in the dotenv file" + echo "" + echo "Arguments:" + echo " FILE Path to dotenv file (default: .env)" + return 0 + end + + if test (count $argv) -gt 1 + echo "Too many arguments. Only one argument is allowed. Use --help for more information." + return 1 + end + + set -l dotenv_file ".env" + if test (count $argv) -eq 1 + set dotenv_file $argv[1] + end + + if not test -f $dotenv_file + echo "Error: File '$dotenv_file' not found in the current directory." + return 1 + end + + set -l mode load + if set -q _flag_print + set mode print + else if set -q _flag_printb + set mode printb + else if set -q _flag_unload + set mode unload + end + + set lineNumber 0 + + for line in (cat $dotenv_file) + set lineNumber (math $lineNumber + 1) + + if string match -qr '^\s*$|^\s*#' $line + continue + end + + if not string match -qr '^[A-Za-z_][A-Za-z0-9_]*=' $line + echo "Error: invalid declaration (line $lineNumber): $line" + return 1 + end + + set -l key (string split -m 1 '=' $line)[1] + set -l after_equals_sign (string split -m 1 '=' $line)[2] + + set -l value + set -l double_quoted_value_regex '^"(.*)"\s*(?:#.*)*$' + set -l single_quoted_value_regex '^\'(.*)\'\s*(?:#.*)*$' + set -l plain_value_regex '^([^\'"\s]*)\s*(?:#.*)*$' + if string match -qgr $double_quoted_value_regex $after_equals_sign + set value (string match -gr $double_quoted_value_regex $after_equals_sign) + else if string match -qgr $single_quoted_value_regex $after_equals_sign + set value (string match -gr $single_quoted_value_regex $after_equals_sign) + else if string match -qgr $plain_value_regex $after_equals_sign + set value (string match -gr $plain_value_regex $after_equals_sign) + else + echo "Error: invalid value (line $lineNumber): $line" + return 1 + end + + switch $mode + case print + echo "$key=$value" + case printb + echo "[$key=$value]" + case load + set -gx $key $value + case unload + set -e $key + end + end + ''; + + # Broken :/ + nix = { + wraps = "nix"; + body = '' + if test (count $argv) -gt 0; and test "$argv[1]" = shell + set -lx STARSHIP_NIX_SHELL shell + end + + command nix $argv + ''; + }; + }; + + interactiveShellInit = '' + set -g fish_greeting "" + fish_vi_key_bindings + fish_config theme choose rose_pine + pfetch + ''; + }; + + programs.fzf = { + enable = true; + enableFishIntegration = true; + }; + + programs.zoxide = { + enable = true; + enableFishIntegration = true; + }; + + programs.starship = { + enable = true; + enableFishIntegration = true; + extraPackages = [ + pkgs.jj-starship + ]; + + settings = { + format = lib.concatStrings [ + "$hostname" + "$username" + "$directory" + "$git_branch" + "$git_status" + "\${custom.jj}" + "\${custom.git_status}" + "$fill" + "\${env_var.NIX_SHELL}" + "$c" + "$elixir" + "$elm" + "$golang" + "$haskell" + "$java" + "$julia" + "$nodejs" + "$nim" + "$rust" + "$scala" + "$conda" + "$python" + "$time" + "\n" + "[❯](fg:iris) " + ]; + + palette = "rose-pine"; + + palettes = { + rose-pine = { + overlay = "#26233a"; + love = "#eb6f92"; + gold = "#f6c177"; + rose = "#ebbcba"; + pine = "#31748f"; + foam = "#9ccfd8"; + iris = "#c4a7e7"; + }; + }; + + directory = { + format = "[](fg:overlay)[ $path ]($style)[](fg:overlay) "; + style = "bg:overlay fg:pine"; + truncation_length = 3; + truncation_symbol = "…/"; + + substitutions = { + Documents = "󰈙"; + Downloads = " "; + Music = " "; + Pictures = " "; + }; + }; + + fill = { + style = "fg:overlay"; + symbol = " "; + }; + + git_branch = { + disabled = true; + format = "[](fg:overlay)[ $symbol $branch ]($style)[](fg:overlay) "; + style = "bg:overlay fg:foam"; + symbol = ""; + }; + + git_status = { + disabled = true; + style = "bg:overlay fg:love"; + format = "[](fg:overlay)([$all_status$ahead_behind]($style))[](fg:overlay) "; + + up_to_date = "[ ✓ ](bg:overlay fg:iris)"; + + untracked = ''[?\($count\)](bg:overlay fg:gold)''; + + stashed = ''[\$](bg:overlay fg:iris)''; + + modified = ''[!\($count\)](bg:overlay fg:gold)''; + + renamed = ''[»\($count\)](bg:overlay fg:iris)''; + + deleted = ''[✘\($count\)](style)''; + + staged = ''[++\($count\)](bg:overlay fg:gold)''; + + ahead = ''[⇡\(''${count}\)](bg:overlay fg:foam)''; + + diverged = ''⇕[\[](bg:overlay fg:iris)[⇡\(''${ahead_count}\)](bg:overlay fg:foam)[⇣\(''${behind_count}\)](bg:overlay fg:rose)[\]](bg:overlay fg:iris)''; + + behind = ''[⇣\(''${count}\)](bg:overlay fg:rose)''; + }; + + custom = { + jj = { + command = '' + jj-starship --git-symbol "" --no-git-status | sed "s/\x1b\[0m//g" + ''; + + when = "jj-starship detect"; + + shell = [ + "sh" + ]; + + format = "[](fg:overlay)[[ $output ](bg:overlay)]($style)[](fg:overlay) "; + + style = "bg:overlay fg:rose"; + + unsafe_no_escape = true; + }; + + git_status = { + command = '' + git status --porcelain | awk ' + /^[MARC ][MD]/ || /^[MARC][MARC ]/ { modified++ } + /^\?\?/ { untracked++ } + /^[D ]D/ || /^D/ { deleted++ } + END { + if (modified + untracked + deleted == 0) { + printf "\033[38;2;196;167;231m✓" + } else { + if (modified) printf "\033[38;2;246;193;119m%d ", modified + if (untracked) printf "\033[38;2;246;193;119m%d ", untracked + if (deleted) printf "\033[38;2;235;111;146m󰆴%d ", deleted + } + } + ' + + unpushed=$(git rev-list @{u}..HEAD 2>/dev/null | wc -l | tr -d ' ') + + if [ -n "$unpushed" ] && [ "$unpushed" -gt 0 ]; then + printf "\033[38;2;137;220;235m⇡%d " "$unpushed" + fi + ''; + + when = "git rev-parse --is-inside-work-tree 2>/dev/null && ! jj root 2>/dev/null"; + + shell = [ + "sh" + ]; + + format = "[](fg:overlay)[[ $output ](bg:overlay)]($style)[](fg:overlay) "; + + style = "bg:overlay fg:love"; + + unsafe_no_escape = true; + }; + }; + + time = { + disabled = false; + format = " [](fg:overlay)[ $time 󰴈 ]($style)[](fg:overlay)"; + style = "bg:overlay fg:rose"; + time_format = "%I:%M%P"; + use_12hr = true; + }; + + hostname = { + disabled = false; + ssh_only = false; + trim_at = ""; + format = "[](fg:overlay)[ 󰠧 $hostname$ssh_symbol ]($style)[](fg:overlay) "; + style = "bg:overlay fg:rose"; + ssh_symbol = " "; + }; + + username = { + disabled = false; + format = "[](fg:overlay)[ 󰧱 $user ]($style)[](fg:overlay) "; + show_always = true; + style_root = "bg:overlay fg:iris"; + style_user = "bg:overlay fg:iris"; + }; + + env_var.NIX_SHELL = { + variable = "STARSHIP_NIX_SHELL"; + symbol = " "; + format = "[](fg:overlay)[ $symbol$env_value ]($style)[](fg:overlay) "; + style = "bg:overlay fg:foam"; + }; + + # Languages + + c = { + style = "bg:overlay fg:pine"; + format = " [](fg:overlay)[ $symbol$version ]($style)[](fg:overlay)"; + disabled = false; + symbol = " "; + }; + + elixir = { + style = "bg:overlay fg:pine"; + format = " [](fg:overlay)[ $symbol$version ]($style)[](fg:overlay)"; + disabled = false; + symbol = " "; + }; + + elm = { + style = "bg:overlay fg:pine"; + format = " [](fg:overlay)[ $symbol$version ]($style)[](fg:overlay)"; + disabled = false; + symbol = " "; + }; + + golang = { + style = "bg:overlay fg:pine"; + format = " [](fg:overlay)[ $symbol$version ]($style)[](fg:overlay)"; + disabled = false; + symbol = " "; + }; + + haskell = { + style = "bg:overlay fg:pine"; + format = " [](fg:overlay)[ $symbol$version ]($style)[](fg:overlay)"; + disabled = false; + symbol = " "; + }; + + java = { + style = "bg:overlay fg:pine"; + format = " [](fg:overlay)[ $symbol$version ]($style)[](fg:overlay)"; + disabled = false; + symbol = " "; + }; + + julia = { + style = "bg:overlay fg:pine"; + format = " [](fg:overlay)[ $symbol$version ]($style)[](fg:overlay)"; + disabled = false; + symbol = " "; + }; + + nodejs = { + style = "bg:overlay fg:pine"; + format = " [](fg:overlay)[ $symbol$version ]($style)[](fg:overlay)"; + disabled = false; + symbol = "󰎙 "; + }; + + nim = { + style = "bg:overlay fg:pine"; + format = " [](fg:overlay)[ $symbol$version ]($style)[](fg:overlay)"; + disabled = false; + symbol = "󰆥 "; + }; + + rust = { + style = "bg:overlay fg:pine"; + format = " [](fg:overlay)[ $symbol$version ]($style)[](fg:overlay)"; + disabled = false; + symbol = " "; + }; + + scala = { + style = "bg:overlay fg:pine"; + format = " [](fg:overlay)[ $symbol$version ]($style)[](fg:overlay)"; + disabled = false; + symbol = " "; + }; + + python = { + style = "bg:overlay fg:pine"; + format = " [](fg:overlay)[ $symbol$version ]($style)[](fg:overlay)"; + disabled = false; + symbol = " "; + }; + + conda = { + style = "bg:overlay fg:pine"; + format = " [](fg:overlay)[ $symbol$environment ]($style)[](fg:overlay)"; + disabled = false; + symbol = "🅒 "; + }; + }; + }; + +} diff --git a/home/tmux.nix b/home/tmux.nix new file mode 100644 index 0000000..3c3a5d1 --- /dev/null +++ b/home/tmux.nix @@ -0,0 +1,48 @@ +{ pkgs, ... }: + +{ + programs.tmux = { + enable = true; + mouse = true; + keyMode = "vi"; + baseIndex = 1; + prefix = "C-\\"; + terminal = "xterm-ghostty"; + plugins = with pkgs.tmuxPlugins; [ + sensible + yank + resurrect + continuum + { + plugin = rose-pine; + extraConfig = '' + set -g @rose_pine_variant 'main' + set -g @rose_pine_left_separator ' > ' + set -g @rose_pine_right_separator '  ' + set -g @rose_pine_field_separator ' | ' + set -g @rose_pine_window_separator ':' + set -g @rose_pine_window_status_separator '  ' + ''; + } + ]; + extraConfig = '' + set -g status-position top + set -g set-clipboard on + set -g set-titles on + set -g set-titles-string "#{session_name}" + setw -g pane-base-index 1 + set -g allow-passthrough all + set -as terminal-features ",xterm-ghostty:hyperlinks" + set -ga terminal-overrides ",xterm-ghostty:Tc" + + bind v split-window -h -c "#{pane_current_path}" + bind b split-window -v -c "#{pane_current_path}" + bind c new-window -c "#{pane_current_path}" + bind -n M-h select-pane -L + bind -n M-j select-pane -D + bind -n M-k select-pane -U + bind -n M-l select-pane -R + ''; + }; + +} diff --git a/home/typst.nix b/home/typst.nix new file mode 100644 index 0000000..761bdf9 --- /dev/null +++ b/home/typst.nix @@ -0,0 +1,20 @@ +{ config, pkgs, ... }: + +let + dots = toString ./..; +in +{ + fonts.fontconfig.enable = true; + + home.packages = with pkgs; [ + montserrat + fira-math + corefonts + ]; + + home.sessionVariables.TYPST_FONT_PATHS = + "${config.home.profileDirectory}/share/fonts"; + + home.file."Library/Application Support/typst/packages/local/grace-personal-template/0.1.0".source = + config.lib.file.mkOutOfStoreSymlink "${dots}/typst"; +} diff --git a/home/vcs.nix b/home/vcs.nix new file mode 100644 index 0000000..4778311 --- /dev/null +++ b/home/vcs.nix @@ -0,0 +1,33 @@ +{ ... }: + +{ + programs = { + git = { + enable = true; + ignores = [ ".DS_Store" ]; + }; + + jujutsu = { + enable = true; + settings = { + user = { + name = "Grace Yoder"; + email = "grace_yoder@outlook.com"; + }; + signing = { + sign-all = true; + backend = "ssh"; + key = "~/.ssh/id_ed25519"; + }; + remotes.origin.auto-track-bookmarks = "*"; + remotes.github.auto-track-bookmarks = "*"; + aliases.tug = [ + "bookmark" + "advance" + ]; + }; + }; + + gh.enable = true; + }; +} diff --git a/home/vim.nix b/home/vim.nix new file mode 100644 index 0000000..c8c882c --- /dev/null +++ b/home/vim.nix @@ -0,0 +1,15 @@ +{ config, ... }: + +let + dots = toString ./..; +in +{ + xdg.configFile."nvim".source = + config.lib.file.mkOutOfStoreSymlink "${dots}/vim/.config/nvim"; + + home.file.".vim".source = + config.lib.file.mkOutOfStoreSymlink "${dots}/vim/.vim"; + + home.file.".vimrc".source = + config.lib.file.mkOutOfStoreSymlink "${dots}/vim/.vimrc"; +} -- cgit v1.3.1