From 1192cef3ed1761d5fad3c002d2baa5a2593b81b6 Mon Sep 17 00:00:00 2001 From: blake Date: Mon, 3 Nov 2025 20:03:21 -0600 Subject: [PATCH] break core out to own config --- users/blake/dots/core/btop/default.nix | 20 +++ users/blake/dots/core/default.nix | 25 ++++ users/blake/dots/core/git/default.nix | 30 ++++ users/blake/dots/core/gpg/default.nix | 30 ++++ users/blake/dots/core/lf/ctpv_config | 5 + users/blake/dots/core/lf/default.nix | 32 ++++ users/blake/dots/core/lf/lfrc | 114 ++++++++++++++ users/blake/dots/core/nvf/default.nix | 196 +++++++++++++++++++++++++ users/blake/dots/core/ssh/default.nix | 52 +++++++ users/blake/dots/core/xdg/default.nix | 51 +++++++ users/blake/dots/core/zsh/default.nix | 156 ++++++++++++++++++++ users/blake/hosts/yveltal.nix | 1 - 12 files changed, 711 insertions(+), 1 deletion(-) create mode 100644 users/blake/dots/core/btop/default.nix create mode 100644 users/blake/dots/core/default.nix create mode 100644 users/blake/dots/core/git/default.nix create mode 100644 users/blake/dots/core/gpg/default.nix create mode 100644 users/blake/dots/core/lf/ctpv_config create mode 100644 users/blake/dots/core/lf/default.nix create mode 100644 users/blake/dots/core/lf/lfrc create mode 100644 users/blake/dots/core/nvf/default.nix create mode 100644 users/blake/dots/core/ssh/default.nix create mode 100644 users/blake/dots/core/xdg/default.nix create mode 100644 users/blake/dots/core/zsh/default.nix diff --git a/users/blake/dots/core/btop/default.nix b/users/blake/dots/core/btop/default.nix new file mode 100644 index 0000000..912de7a --- /dev/null +++ b/users/blake/dots/core/btop/default.nix @@ -0,0 +1,20 @@ +{ + pkgs, + lib, + config, + ... +}: let + program = "btop"; + cfg = config.dots.${program}; + #sec = sops.secrets; +in { + options.dots.${program} = { + enable = lib.mkEnableOption "enables ${program}"; + }; + + config = lib.mkIf cfg.enable { + programs.${program} = { + enable = true; + }; + }; +} diff --git a/users/blake/dots/core/default.nix b/users/blake/dots/core/default.nix new file mode 100644 index 0000000..a935880 --- /dev/null +++ b/users/blake/dots/core/default.nix @@ -0,0 +1,25 @@ +{ + pkgs, + lib, + config, + ... +}: { + imports = [ + ./librewolf + ./firefox + ./kitty + ./dunst + ./btop + ./waybar + ./stylix + ./hypr + ./tofi + ./nvf + ./lf + ./zsh + ./ssh + ./gpg + ./git + ./xdg + ]; +} diff --git a/users/blake/dots/core/git/default.nix b/users/blake/dots/core/git/default.nix new file mode 100644 index 0000000..916160d --- /dev/null +++ b/users/blake/dots/core/git/default.nix @@ -0,0 +1,30 @@ +{ + pkgs, + config, + lib, + inputs, + ... +}: let + program = "git"; + cfg = config.dots.${program}; + #sec = sops.secrets; +in { + options.dots.${program} = { + enable = lib.mkEnableOption "enables ${program}"; + }; + + config = lib.mkIf cfg.enable { + # configure git + programs.${program} = { + enable = true; + userName = "blake"; + userEmail = "me@blakedheld.xyz"; + extraConfig = { + init.defaultBranch = "trunk"; + core.editor = "nvim"; + pull.rebase = true; + push.autoSetupRemote = true; + }; + }; + }; +} diff --git a/users/blake/dots/core/gpg/default.nix b/users/blake/dots/core/gpg/default.nix new file mode 100644 index 0000000..b14b096 --- /dev/null +++ b/users/blake/dots/core/gpg/default.nix @@ -0,0 +1,30 @@ +{ + pkgs, + lib, + config, + ... +}: let + program = "gpg"; + cfg = config.dots.${program}; + #sec = sops.secrets; +in { + options.dots.${program} = { + enable = lib.mkEnableOption "enables ${program}"; + }; + + config = lib.mkIf cfg.enable { + programs.${program} = { + enable = true; + }; + services.gpg-agent = { + enable = true; + enableSshSupport = true; + pinentry.package = pkgs.pinentry-qt; + pinentry.program = "pinentry-qt"; + }; + # install pinentry programs conditionaly based on os + home.packages = + lib.optional pkgs.stdenv.isDarwin pkgs.pinentry_mac + ++ lib.optional pkgs.stdenv.isLinux pkgs.pinentry-qt; + }; +} diff --git a/users/blake/dots/core/lf/ctpv_config b/users/blake/dots/core/lf/ctpv_config new file mode 100644 index 0000000..a13432b --- /dev/null +++ b/users/blake/dots/core/lf/ctpv_config @@ -0,0 +1,5 @@ +# general +set forcekitty +set chafasixel + + diff --git a/users/blake/dots/core/lf/default.nix b/users/blake/dots/core/lf/default.nix new file mode 100644 index 0000000..9ee9032 --- /dev/null +++ b/users/blake/dots/core/lf/default.nix @@ -0,0 +1,32 @@ +{ + pkgs, + lib, + config, + ... +}: let + program = "lf"; + cfg = config.dots.${program}; + #sec = sops.secrets; +in { + options.dots.${program} = { + enable = lib.mkEnableOption "enables ${program}"; + }; + + config = lib.mkIf cfg.enable { + # just using the normal lfrc + programs.${program} = { + enable = false; + }; + + # install it to userspace + home.packages = with pkgs; [lf ctpv trashy]; + + # link configs + xdg.configFile."lf/lfrc" = { + source = config.lib.file.mkOutOfStoreSymlink "/home/blake/.nix/users/blake/dots/lf/lfrc"; + }; + xdg.configFile."ctpv/config" = { + source = config.lib.file.mkOutOfStoreSymlink "/home/blake/.nix/users/blake/dots/lf/ctpv_config"; + }; + }; +} diff --git a/users/blake/dots/core/lf/lfrc b/users/blake/dots/core/lf/lfrc new file mode 100644 index 0000000..57d2f25 --- /dev/null +++ b/users/blake/dots/core/lf/lfrc @@ -0,0 +1,114 @@ +# blake's lf config + +# --- folder specific --- + +# timesheets show recent first +setlocal ~/documents/holocron/work/nhc/timesheets/2024/ reverse + +# --- options --- + +# file previews +set previewer ctpv +set cleaner ctpvclear +&ctpv -s $id +&ctpvquit $id + +# mouse +set mouse true + +# search +set ignorecase true + +# --- mappings --- + +# shortcuts +map gb cd /holocron +map gn cd ~/.nix + +# navigation +map [ half-up +map ] half-down + +# files & archives +map ad mkdir +map af mkfile +map ab mkbak +map ae extract +map aa archive + +# trash +map gt cd ~/.local/share/Trash/files +map trash +map $trash restore + +# --- functions --- + +# extract any archive +cmd extract %{{ + set -f + case $f in + *.tar.bz|*.tar.bz2|*.tbz|*.tbz2) tar xjvf $f;; + *.tar.gz|*.tgz) tar xzvf $f;; + *.tar.xz|*.txz) tar xJvf $f;; + *.zip) unzip $f;; + *.rar) unrar x $f;; + *.7z) 7z x $f;; + esac +}} + +cmd archive %{{ + echo "enter archive name: " ; read archive_name + if [ -z "$archive_name" ]; then + echo "No archive name provided." + exit 1 + fi + + IFS="$(printf '\n\t')" + file_list=() + + for x in $fx; do + file_list+=("$x") + done + + case "$archive_name" in + *.tar.bz|*.tar.bz2|*.tbz|*.tbz2) tar cjf "$archive_name" "${file_list[@]}" ;; + *.tar.gz|*.tgz) tar czf "$archive_name" "${file_list[@]}" ;; + *.tar.xz|*.txz) tar cJf "$archive_name" "${file_list[@]}" ;; + *.zip) zip -r "$archive_name" "${file_list[@]}" ;; + *.rar) rar a "$archive_name" "${file_list[@]}" ;; + *.7z) 7z a "$archive_name" "${file_list[@]}" ;; + *) echo "Unsupported archive format" ;; + esac + +}} + +# move files to trash +cmd trash %IFS="$(printf '\n\t')"; trash put $fx + +# make a directory +cmd mkdir %{{ + echo "enter directory name: " ; read dir + if [ -n "$dir" ]; then + mkdir -p "$dir" && echo "'$dir' created." + else + echo "no dir name provided" + fi +}} + +# make a file +cmd mkfile %{{ + echo "enter file name: " ; read file + if [ -n "$file" ]; then + touch "$file" && echo "'$file' created." + else + echo "no file name provided" + fi +}} + +# make backup +cmd mkbak %{{ + for x in $fx; do + cp -r $x $x.bak + done + +}} diff --git a/users/blake/dots/core/nvf/default.nix b/users/blake/dots/core/nvf/default.nix new file mode 100644 index 0000000..c537736 --- /dev/null +++ b/users/blake/dots/core/nvf/default.nix @@ -0,0 +1,196 @@ +{ + pkgs, + config, + lib, + inputs, + ... +}: let + program = "nvf"; + cfg = config.dots.${program}; + #sec = sops.secrets; +in { + options.dots.${program} = { + enable = lib.mkEnableOption "enables ${program}"; + }; + + imports = [ + inputs.nvf.homeManagerModules.default + ]; + + config = lib.mkIf cfg.enable { + programs.${program} = { + enable = true; + settings = { + vim = { + globals = { + mapleader = " "; + maplocalleader = " "; + }; + + vimAlias = true; + + lsp.enable = true; + statusline.lualine.enable = true; + telescope.enable = true; + autocomplete.nvim-cmp.enable = true; + autopairs.nvim-autopairs.enable = true; + + keymaps = [ + # visual line movement (insert mode) + { + key = ""; + mode = ["i"]; + action = "gk"; + desc = "Visual Line Up (Insert)"; + } + { + key = ""; + mode = ["i"]; + action = "gj"; + desc = "Visual Line Down (Insert)"; + } + + # visual line movement (normal/visual) + { + key = ""; + mode = [ + "n" + "v" + ]; + action = "g"; + desc = "Visual Line Up"; + } + { + key = ""; + mode = [ + "n" + "v" + ]; + action = "g"; + desc = "Visual Line Down"; + } + + # lsp + #{ key = "gd"; mode = [ "n" ]; action = "lua vim.lsp.buf.definition()"; desc = "Go to definition"; } + #{ key = "K"; mode = [ "n" ]; action = "lua vim.lsp.buf.hover()"; desc = "Hover info"; } + #{ key = "f"; mode = [ "n" ]; action = "lua vim.lsp.buf.format({ async = true })"; desc = "Format buffer"; } + + { + key = "gd"; + mode = ["n"]; + silent = true; + action = "lua vim.lsp.buf.definition()"; + desc = "Go to definition"; + } + # Hover info + { + key = "K"; + mode = ["n"]; + silent = true; + action = "lua vim.lsp.buf.hover()"; + desc = "Hover info"; + } + # Format buffer (Alejandra for Nix) + { + key = "F"; + mode = ["n"]; + silent = true; + action = "lua vim.lsp.buf.format({ async = true })"; + desc = "Format buffer"; + } + # Code actions / quickfix + { + key = "a"; + mode = ["n"]; + silent = true; + action = "lua vim.lsp.buf.code_action()"; + desc = "Code action"; + } + # Rename symbol + { + key = "r"; + mode = ["n"]; + silent = true; + action = "lua vim.lsp.buf.rename()"; + desc = "Rename symbol"; + } + # Diagnostics + { + key = "e"; + mode = ["n"]; + silent = true; + action = "lua vim.diagnostic.open_float()"; + desc = "Show diagnostic"; + } + { + key = "[d"; + mode = ["n"]; + silent = true; + action = "lua vim.diagnostic.goto_prev()"; + desc = "Previous diagnostic"; + } + { + key = "]d"; + mode = ["n"]; + silent = true; + action = "lua vim.diagnostic.goto_next()"; + desc = "Next diagnostic"; + } + ]; + + options = { + clipboard = "unnamedplus"; + + # line numbers + number = true; + numberwidth = 2; + relativenumber = true; + + # tabs and indentation + tabstop = 2; + shiftwidth = 2; + softtabstop = -1; + expandtab = true; + smarttab = true; + autoindent = true; + + # search + ignorecase = true; + smartcase = true; + + # files and backups + backup = false; + writebackup = false; + undofile = true; + swapfile = true; + + # wrapping + wrap = true; + linebreak = true; + breakindent = true; + + termguicolors = true; + autoread = true; + }; + + languages = { + enableTreesitter = true; + + nix = { + enable = true; + format = { + enable = true; + type = "alejandra"; + #type = "nixfmt"; + }; + }; + + markdown.enable = true; + rust.enable = true; + lua.enable = true; + }; + }; + }; + }; + }; +} diff --git a/users/blake/dots/core/ssh/default.nix b/users/blake/dots/core/ssh/default.nix new file mode 100644 index 0000000..16be66e --- /dev/null +++ b/users/blake/dots/core/ssh/default.nix @@ -0,0 +1,52 @@ +{ + pkgs, + lib, + config, + ... +}: let + program = "ssh"; + cfg = config.dots.${program}; + #sec = sops.secrets; +in { + options.dots.${program} = { + enable = lib.mkEnableOption "enables ${program}"; + }; + + config = lib.mkIf cfg.enable { + programs.ssh = { + enable = true; + #enableDefaultConfig = false; + matchBlocks = { + "git.blakedheld.xyz" = { + user = "gitea"; + identityFile = "~/.ssh/id_snowbelle"; + }; + "git.snowbelle.lan" = { + user = "gitea"; + identityFile = "~/.ssh/id_snowbelle"; + }; + "bebe" = { + hostname = "10.10.0.1"; + user = "root"; + identityFile = "~/.ssh/id_snowbelle"; + }; + }; + }; + + # import sshkeys from keyring + #home.file.".ssh/id_snowbelle".source = config.lib.file.mkOutOfStoreSymlink /home/blake/.nix/.keyring/ssh/id_snowbelle; + #home.file.".ssh/id_snowbelle.pub".source = config.lib.file.mkOutOfStoreSymlink /home/blake/.nix/.keyring/ssh/id_snowbelle.pub; + + # manage secrets with sops + sops.secrets = { + "id_snowbelle" = { + mode = "0600"; + path = "/home/blake/.ssh/id_snowbelle"; + }; + "id_snowbelle.pub" = { + mode = "644"; + path = "/home/blake/.ssh/id_snowbelle.pub"; + }; + }; + }; +} diff --git a/users/blake/dots/core/xdg/default.nix b/users/blake/dots/core/xdg/default.nix new file mode 100644 index 0000000..48a3818 --- /dev/null +++ b/users/blake/dots/core/xdg/default.nix @@ -0,0 +1,51 @@ +{ + pkgs, + lib, + config, + ... +}: let + program = "xdg"; + cfg = config.dots.${program}; + #sec = sops.secrets; +in { + options.dots.${program} = { + enable = lib.mkEnableOption "enables ${program}"; + }; + + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [xdg-ninja]; + + xdg = + if pkgs.system == "x86_64-darwin" + then {} + else { + enable = true; + configHome = "/home/blake/.config"; + cacheHome = "/home/blake/.cache"; + dataHome = "/home/blake/.local/share"; + stateHome = "/home/blake/.local/state"; + + userDirs = { + enable = true; + # writes ~/.config/user-dirs.dirs + desktop = "/home/blake/desktop"; + download = "/home/blake/downloads"; + documents = "/home/blake/documents"; + pictures = "/home/blake/pictures"; + videos = "/home/blake/videos"; + music = "/home/blake/music"; + publicShare = "/home/blake/public"; + templates = "/home/blake/templates"; + }; + }; + + # misc env variables to get things out of ~ (<3 xdg-ninja) + home.sessionVariables = + if pkgs.system == "x86_64-darwin" + then {} + else { + GOPATH = "$XDG_DATA_HOME/go"; + _JAVA_OPTIONS = ''-Djava.util.prefs.userRoot="$XDG_CONFIG_HOME"/java''; + }; + }; +} diff --git a/users/blake/dots/core/zsh/default.nix b/users/blake/dots/core/zsh/default.nix new file mode 100644 index 0000000..b3fc5a5 --- /dev/null +++ b/users/blake/dots/core/zsh/default.nix @@ -0,0 +1,156 @@ +{ + pkgs, + lib, + config, + ... +}: let + program = "zsh"; + cfg = config.dots.${program}; + #sec = sops.secrets; +in { + options.dots.${program} = { + enable = lib.mkEnableOption "enables ${program}"; + }; + + config = lib.mkIf cfg.enable { + # export some defaults + home.sessionVariables = { + EDITOR = "nvim"; + PAGER = "less"; + }; + + programs.${program} = { + enable = true; + dotDir = ".config/zsh"; + autocd = true; + enableCompletion = true; + + autosuggestion = { + enable = true; + highlight = "underline"; + }; + + history = { + size = 10000; + save = 10000; + share = true; + append = true; + extended = true; + path = "$XDG_STATE_HOME/zsh/history"; + }; + + shellAliases = { + # --- zsh --- + cfz = "nvim $HOME/.config/zsh/.zshrc"; + src = "source $HOME/.config/zsh/.zshrc"; + + # --- config editing --- + cfh = "nvim $HOME/.config/hypr/hyprland.conf"; + cfl = "nvim $HOME/.config/lf/lfrc"; + + # --- navigation --- + ls = "ls --color=auto --group-directories-first"; + ll = "ls -lh --color=auto --group-directories-first"; + la = "ls -Alh --color=auto --group-directories-first"; + ".." = "cd .."; + "..." = "cd ../.."; + fs = "du -h | sort -h"; + ds = "du -hs"; + + # --- shortcuts --- + vswap = "cd ~/.local/state/nvim/swap"; + rswap = "rm ~/.local/state/nvim/swap/*"; + v = "nvim"; + sv = "sudo nvim"; + vim = "nvim"; + + # --- safety --- + cp = "cp -iv"; + mv = "mv -iv"; + rm = "rm -Iv"; + + # --- colors --- + grep = "grep --color=auto"; + fgrep = "fgrep --color=auto"; + egrep = "egrep --color=auto"; + + # --- scripts --- + rebuild = "sh ~/.nix/bin/rebuild.sh"; + perms = "sudo sh ~/.nix/bin/perms.sh"; + bb = "sudo sh ~/.nix/bin/lf_borg.sh"; + + # --- git --- + status = "git status"; + add = "git add"; + commit = "git commit -am"; + push = "git push"; + pull = "git pull"; + dotfiles = "/usr/bin/git --git-dir=$HOME/.dotfiles --work-tree=$HOME"; + dtf = "/usr/bin/git --git-dir=$HOME/.dotfiles --work-tree=$HOME"; + sec = "sops ~/.nix/secrets/secrets.yaml"; + + # --- systemd --- + stat = "sudo systemctl status"; + restart = "sudo systemctl restart"; + start = "sudo systemctl start"; + stop = "sudo systemctl stop"; + jou = "sudo journalctl -xeu"; + live = "sudo journalctl -o short-iso -n 50 -fu"; + + # --- system --- + peace = "systemctl poweroff"; + love = "systemctl reboot"; + lock = "loginctl lock-session"; + }; + + initContent = '' + + # the prompt + PS1='%F{0}%K{126}%B[%n@%m]%b%k%f:%F{015}%B[%~]%b%f%F{015}%S$%s%f ' + + # lf changes working dir on exit + alias lf='lfcd' + lfcd () {cd "$(command lf -print-last-dir "$@")"} + + ''; + + syntaxHighlighting = { + enable = true; + highlighters = ["main" "brackets" "pattern" "regexp" "cursor" "root"]; + styles = { + "default" = "none"; + "unknown-token" = "fg=red"; + "reserved-word" = "fg=red"; + "alias" = "fg=cyan,underline"; + "suffix-alias" = "fg=cyan,underline"; + "builtin" = "fg=cyan"; + "function" = "fg=cyan"; + "command" = "fg=cyan,bold"; + "path" = "fg=cyan,underline"; + "precommand" = "fg=cyan,underline"; + "commandseparator" = "fg=white"; + "globbing" = "fg=white"; + "history-expansion" = "fg=white"; + "hashed-command" = "fg=magenta"; + "single-hyphen-option" = "fg=blue"; + "double-hyphen-option" = "fg=blue"; + "back-quoted-argument" = "fg=yellow"; + "single-quoted-argument" = "fg=white"; + "double-quoted-argument" = "fg=white"; + "dollar-double-quoted-argument" = "fg=blue"; + "back-double-quoted-argument" = "fg=blue"; + }; + }; + + # zplug = { + # enable = true; + # zplugHome = "$XDG_STATE_HOME/zsh/zplug"; + # plugins = [ + # {name = "zsh-users/zsh-syntax-highlighting";} + # ]; + # }; + }; + # rid the world of ~/.zshenv + #home.file.".zshenv".enable = false; + }; +} diff --git a/users/blake/hosts/yveltal.nix b/users/blake/hosts/yveltal.nix index 0f7b352..c3f3ec5 100644 --- a/users/blake/hosts/yveltal.nix +++ b/users/blake/hosts/yveltal.nix @@ -15,7 +15,6 @@ lf.enable = true; kitty.enable = true; librewolf.enable = true; - firefox.enable = true; stylix.enable = true; waybar.enable = true; dunst.enable = true;