From 3e208d20934bedd8cd7769f23f35cfae9d8e7d0d Mon Sep 17 00:00:00 2001 From: Seth Flynn Date: Fri, 14 Feb 2025 01:18:47 -0500 Subject: seth: simplify module structure Moving to mixins generally reduces the boilerplate in all configurations, and less custom "stuff" These are then enabled by the regular options in programs.nix for example Many of the other options (like desktops) also had little use in being abstracted as there's no situation where I'd *not* want them to be applied when said desktop is in use --- users/seth/mixins/bash.nix | 33 +++++++++++ users/seth/mixins/budgie.nix | 22 ++++++++ users/seth/mixins/catppuccin.nix | 14 +++++ users/seth/mixins/chromium.nix | 20 +++++++ users/seth/mixins/default.nix | 23 ++++++++ users/seth/mixins/firefox/arkenfox.nix | 69 +++++++++++++++++++++++ users/seth/mixins/firefox/default.nix | 56 ++++++++++++++++++ users/seth/mixins/fish.nix | 55 ++++++++++++++++++ users/seth/mixins/gh.nix | 25 +++++++++ users/seth/mixins/ghostty.nix | 10 ++++ users/seth/mixins/git.nix | 37 ++++++++++++ users/seth/mixins/gnome.nix | 69 +++++++++++++++++++++++ users/seth/mixins/gpg.nix | 22 ++++++++ users/seth/mixins/mangohud.nix | 14 +++++ users/seth/mixins/niri.nix | 56 ++++++++++++++++++ users/seth/mixins/nu.nix | 45 +++++++++++++++ users/seth/mixins/plasma.nix | 24 ++++++++ users/seth/mixins/spotifyd.nix | 12 ++++ users/seth/mixins/ssh.nix | 67 ++++++++++++++++++++++ users/seth/mixins/vim.nix | 42 ++++++++++++++ users/seth/mixins/zsh.nix | 100 +++++++++++++++++++++++++++++++++ 21 files changed, 815 insertions(+) create mode 100644 users/seth/mixins/bash.nix create mode 100644 users/seth/mixins/budgie.nix create mode 100644 users/seth/mixins/catppuccin.nix create mode 100644 users/seth/mixins/chromium.nix create mode 100644 users/seth/mixins/default.nix create mode 100644 users/seth/mixins/firefox/arkenfox.nix create mode 100644 users/seth/mixins/firefox/default.nix create mode 100644 users/seth/mixins/fish.nix create mode 100644 users/seth/mixins/gh.nix create mode 100644 users/seth/mixins/ghostty.nix create mode 100644 users/seth/mixins/git.nix create mode 100644 users/seth/mixins/gnome.nix create mode 100644 users/seth/mixins/gpg.nix create mode 100644 users/seth/mixins/mangohud.nix create mode 100644 users/seth/mixins/niri.nix create mode 100644 users/seth/mixins/nu.nix create mode 100644 users/seth/mixins/plasma.nix create mode 100644 users/seth/mixins/spotifyd.nix create mode 100644 users/seth/mixins/ssh.nix create mode 100644 users/seth/mixins/vim.nix create mode 100644 users/seth/mixins/zsh.nix (limited to 'users/seth/mixins') diff --git a/users/seth/mixins/bash.nix b/users/seth/mixins/bash.nix new file mode 100644 index 0000000..b278d05 --- /dev/null +++ b/users/seth/mixins/bash.nix @@ -0,0 +1,33 @@ +{ config, lib, ... }: + +{ + config = lib.mkMerge [ + { + programs.bash = { + historyFile = "${config.xdg.stateHome}/bash/history"; + historyFileSize = 1000; + historySize = 100; + + shellOptions = [ + "cdspell" + "checkjobs" + "checkwinsize" + "dirspell" + "globstar" + "histappend" + "no_empty_cmd_completion" + ]; + }; + } + + # TODO: find out if i need this anymore with standalone HM + (lib.mkIf config.seth.standalone.enable { + programs.bash = { + bashrcExtra = '' + nixfile=${config.home.homeDirectory}/.nix-profile/etc/profile.d/nix.sh + [ -e "$nixfile" ] && source "$nixfile" + ''; + }; + }) + ]; +} diff --git a/users/seth/mixins/budgie.nix b/users/seth/mixins/budgie.nix new file mode 100644 index 0000000..c0b1709 --- /dev/null +++ b/users/seth/mixins/budgie.nix @@ -0,0 +1,22 @@ +{ lib, osConfig, ... }: + +let + enable = osConfig.services.xserver.desktopManager.budgie.enable or false; +in + +{ + config = lib.mkIf enable { + dconf = { + enable = true; + settings = { + "com.solus-project.budgie-panel:Budgie" = { + pinned-launchers = [ + "firefox.desktop" + "nemo.desktop" + "discord-canary.desktop" + ]; + }; + }; + }; + }; +} diff --git a/users/seth/mixins/catppuccin.nix b/users/seth/mixins/catppuccin.nix new file mode 100644 index 0000000..b719c28 --- /dev/null +++ b/users/seth/mixins/catppuccin.nix @@ -0,0 +1,14 @@ +{ inputs, ... }: + +{ + imports = [ + inputs.catppuccin.homeManagerModules.catppuccin + ]; + + catppuccin = { + accent = "mauve"; + flavor = "mocha"; + + chromium.enable = false; + }; +} diff --git a/users/seth/mixins/chromium.nix b/users/seth/mixins/chromium.nix new file mode 100644 index 0000000..e744eb3 --- /dev/null +++ b/users/seth/mixins/chromium.nix @@ -0,0 +1,20 @@ +{ pkgs, ... }: + +{ + programs.chromium = { + dictionaries = [ pkgs.hunspellDictsChromium.en_US ]; + + extensions = [ + # uBlock Origin Lite + { id = "ddkjiahejlhfcafbddmgiahcphecmpfh"; } + # Bitwarden + { id = "nngceckbapebfimnlniiiahkandclblb"; } + # Floccus Bookmark Sync + { id = "fnaicdffflnofjppbagibeoednhnbjhg"; } + # Tabby Cat + { id = "mefhakmgclhhfbdadeojlkbllmecialg"; } + # Startpage + { id = "fgmjlmbojbkmdpofahffgcpkhkngfpef"; } + ]; + }; +} diff --git a/users/seth/mixins/default.nix b/users/seth/mixins/default.nix new file mode 100644 index 0000000..e898b0e --- /dev/null +++ b/users/seth/mixins/default.nix @@ -0,0 +1,23 @@ +{ + imports = [ + ./bash.nix + ./budgie.nix + ./catppuccin.nix + ./chromium.nix + ./firefox + ./fish.nix + ./gh.nix + ./ghostty.nix + ./git.nix + ./gnome.nix + ./gpg.nix + ./mangohud.nix + ./niri.nix + ./nu.nix + ./plasma.nix + ./spotifyd.nix + ./ssh.nix + ./vim.nix + ./zsh.nix + ]; +} diff --git a/users/seth/mixins/firefox/arkenfox.nix b/users/seth/mixins/firefox/arkenfox.nix new file mode 100644 index 0000000..cfb2a0d --- /dev/null +++ b/users/seth/mixins/firefox/arkenfox.nix @@ -0,0 +1,69 @@ +{ + lib, + inputs, + ... +}: + +{ + imports = [ inputs.arkenfox.hmModules.arkenfox ]; + + programs.firefox = { + arkenfox = { + enable = true; + version = "128.0"; + }; + + profiles.arkenfox.arkenfox = + let + enableSections = + sections: + lib.genAttrs sections (_: { + enable = true; + }); + in + lib.recursiveUpdate + { + enable = true; + + # enable safe browsing + "0400"."0403"."browser.safebrowsing.downloads.remote.enabled".value = true; + + # fix hulu + "1200"."1201"."security.ssl.require_safe_negotiation".value = false; + + "2600"."2651"."browser.download.useDownloadDir" = { + enable = true; + value = true; + }; + + # disable rfp letterboxing + "4500"."4504"."privacy.resistFingerprinting.letterboxing".value = false; + + "5000" = { + "5003"."signon.rememberSignons".enable = true; + # enable search autocomplete + "5021"."keyword.enabled".value = true; + }; + } + (enableSections [ + "0100" + "0200" + "0300" + "0400" + "0600" + "0700" + "0800" + "0900" + "1000" + "1200" + "1600" + "1700" + "2000" + "2400" + "2600" + "2700" + "2800" + "4500" + ]); + }; +} diff --git a/users/seth/mixins/firefox/default.nix b/users/seth/mixins/firefox/default.nix new file mode 100644 index 0000000..7d5fb7e --- /dev/null +++ b/users/seth/mixins/firefox/default.nix @@ -0,0 +1,56 @@ +{ + config, + lib, + pkgs, + inputs, + ... +}: + +let + inherit (pkgs.stdenv.hostPlatform) isLinux; +in + +{ + imports = [ + inputs.getchpkgs.nixosModules.firefox-addons + # Requires `github:dwarfmaster/arkenfox-nixos` + # ./arkenfox.nix + ]; + + config = lib.mkMerge [ + { + programs.firefox = { + addons = [ + # uBlock Origin + "uBlock0@raymondhill.net" + # Bitwarden + "{446900e4-71c2-419f-a6a7-df9c091e268b}" + # Floccus + "floccus@handmadeideas.org" + ]; + + profiles.arkenfox = { + isDefault = true; + + settings = { + # disable firefox accounts & pocket + "extensions.pocket.enabled" = false; + "identity.fxaccounts.enabled" = false; + + # hw accel + "media.ffmpeg.vaapi.enabled" = true; + + # widevine drm + "media.gmp-widevinecdm.enabled" = true; + }; + }; + }; + } + + (lib.mkIf (config.programs.firefox.enable && isLinux) { + home.sessionVariables = { + MOZ_ENABLE_WAYLAND = "1"; + }; + }) + ]; +} diff --git a/users/seth/mixins/fish.nix b/users/seth/mixins/fish.nix new file mode 100644 index 0000000..e02c736 --- /dev/null +++ b/users/seth/mixins/fish.nix @@ -0,0 +1,55 @@ +{ + config, + lib, + pkgs, + ... +}: + +{ + config = lib.mkMerge [ + { + programs.fish = { + functions = { + last_history_item.body = "echo $history[1]"; + }; + + interactiveShellInit = '' + set --global hydro_symbol_prompt ">" + + set --global hydro_color_duration $fish_color_end + set --global hydro_color_error $fish_color_error + set --global hydro_color_git cba6f7 + set --global hydro_color_prompt $fish_color_cwd + set --global hydro_color_pwd $fish_color_user + ''; + + plugins = [ + { + name = "hydro"; + inherit (pkgs.fishPlugins.hydro) src; + } + ]; + + shellAbbrs = { + nixgc = "sudo nix-collect-garbage -d && nix-collect-garbage -d"; + "!!" = { + position = "anywhere"; + function = "last_history_item"; + }; + }; + }; + } + + # TODO: Do i still need this weird sourcing? + (lib.mkIf config.seth.standalone.enable { + programs.fish = { + interactiveShellInit = '' + set -l nixfile ${config.home.homeDirectory}/.nix-profile/etc/profile.d/nix.fish + if test -e $nixfile + source $nixfile + end + ''; + }; + }) + ]; +} diff --git a/users/seth/mixins/gh.nix b/users/seth/mixins/gh.nix new file mode 100644 index 0000000..f0ee96b --- /dev/null +++ b/users/seth/mixins/gh.nix @@ -0,0 +1,25 @@ +{ + config, + lib, + ... +}: + +{ + programs.gh = { + enable = lib.mkDefault config.programs.git.enable; + + settings = { + git_protocol = "https"; + editor = "nvim"; + prompt = "enabled"; + }; + + gitCredentialHelper = { + enable = true; + hosts = [ + "https://github.com" + "https://github.example.com" + ]; + }; + }; +} diff --git a/users/seth/mixins/ghostty.nix b/users/seth/mixins/ghostty.nix new file mode 100644 index 0000000..aa2a1b8 --- /dev/null +++ b/users/seth/mixins/ghostty.nix @@ -0,0 +1,10 @@ +{ + programs.ghostty = { + enableBashIntegration = true; + enableFishIntegration = true; + + settings = { + bold-is-bright = true; + }; + }; +} diff --git a/users/seth/mixins/git.nix b/users/seth/mixins/git.nix new file mode 100644 index 0000000..9746425 --- /dev/null +++ b/users/seth/mixins/git.nix @@ -0,0 +1,37 @@ +{ + config, + lib, + pkgs, + inputs, + ... +}: + +{ + imports = [ inputs.getchpkgs.homeModules.riff ]; + + config = lib.mkMerge [ + { + programs.git = { + riff.enable = true; + + extraConfig = { + init = { + defaultBranch = "main"; + }; + }; + + signing = { + key = "D31BD0D494BBEE86"; + signByDefault = true; + }; + + userEmail = "getchoo@tuta.io"; + userName = "Seth Flynn"; + }; + } + + (lib.mkIf config.programs.git.enable { + home.packages = [ pkgs.git-branchless ]; + }) + ]; +} diff --git a/users/seth/mixins/gnome.nix b/users/seth/mixins/gnome.nix new file mode 100644 index 0000000..2214718 --- /dev/null +++ b/users/seth/mixins/gnome.nix @@ -0,0 +1,69 @@ +{ + lib, + pkgs, + osConfig, + ... +}: + +let + enable = osConfig.services.xserver.desktopManager.gnome.enable or false; +in + +{ + config = lib.mkIf enable { + dconf = { + enable = true; + settings = { + "org/gnome/shell" = { + disable-user-extensions = false; + + enabled-extensions = [ "caffeine@patapon.info" ]; + + favorite-apps = [ + "chromium-browser.desktop" + "org.gnome.Nautilus.desktop" + "discord-canary.desktop" + ]; + }; + + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + document-font-name = "Noto Sans 11"; + font-antialiasing = "rgba"; + font-name = "Noto Sans 11"; + monospace-font-name = "Hack Nerd Font 10"; + }; + + "org/gnome/desktop/peripherals/mouse" = { + accel-profile = "flat"; + }; + + "org/gnome/desktop/wm/preferences" = { + titlebar-font = "Noto Sans Bold 11"; + }; + + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = { + name = "ptyxis"; + command = "ptyxis"; + binding = "t"; + }; + }; + }; + + home.packages = [ + # Torrent client + pkgs.fragments + + # Keep my screen awake + pkgs.gnomeExtensions.caffeine + + # Terminal emulator + pkgs.ptyxis + + # Mastodon client + pkgs.tuba + ]; + + seth.adw-gtk3.enable = true; + }; +} diff --git a/users/seth/mixins/gpg.nix b/users/seth/mixins/gpg.nix new file mode 100644 index 0000000..eb36cdc --- /dev/null +++ b/users/seth/mixins/gpg.nix @@ -0,0 +1,22 @@ +{ + config, + lib, + pkgs, + osConfig, + ... +}: + +let + inherit (pkgs.stdenv.hostPlatform) isLinux; +in + +{ + config = lib.mkMerge [ + (lib.mkIf isLinux { + services.gpg-agent = { + enable = lib.mkDefault config.programs.gpg.enable; + pinentryPackage = osConfig.programs.gnupg.agent.pinentryPackage or pkgs.pinentry-curses; + }; + }) + ]; +} diff --git a/users/seth/mixins/mangohud.nix b/users/seth/mixins/mangohud.nix new file mode 100644 index 0000000..2ad6c70 --- /dev/null +++ b/users/seth/mixins/mangohud.nix @@ -0,0 +1,14 @@ +{ + programs.mangohud = { + settings = { + cpu_stats = true; + cpu_temp = true; + gpu_stats = true; + gpu_temp = true; + fps = true; + frametime = true; + media_player = true; + media_player_name = "spotify"; + }; + }; +} diff --git a/users/seth/mixins/niri.nix b/users/seth/mixins/niri.nix new file mode 100644 index 0000000..22411dd --- /dev/null +++ b/users/seth/mixins/niri.nix @@ -0,0 +1,56 @@ +{ + lib, + pkgs, + osConfig, + ... +}: + +let + enable = osConfig.programs.niri.enable or false; +in + +{ + config = lib.mkIf enable { + # Set dark theme for Flatpak apps + # https://github.com/YaLTeR/niri/wiki/Important-Software#portals + dconf = { + enable = true; + settings = { + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + }; + }; + }; + + home.packages = [ + # Torrent client + pkgs.fragments + + # Mastodon client + pkgs.tuba + + # the funni (I need it for native Wayland support) + pkgs.vesktop + + # TODO: Figure out how to export $DISPLAY from this + # so I don't need the above + pkgs.xwayland-satellite + ]; + + # Enable some things from the NixOS module here to + # apply Catppuccin themes + programs = { + alacritty.enable = true; + fuzzel.enable = true; + mako.enable = true; + ncspot.enable = true; # Official Spotify has ugly CSD + swaylock.enable = true; + yazi.enable = true; + zellij.enable = true; + }; + + seth = { + adw-gtk3.enable = true; + }; + }; +} diff --git a/users/seth/mixins/nu.nix b/users/seth/mixins/nu.nix new file mode 100644 index 0000000..ad25ce6 --- /dev/null +++ b/users/seth/mixins/nu.nix @@ -0,0 +1,45 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + theme = "catppuccin-${config.catppuccin.flavor}"; +in + +{ + config = lib.mkMerge [ + { + programs.nushell = { + configFile.text = '' + def "nixgc" [] { + sudo nix-collect-garbage -d; nix-collect-garbage -d + } + ''; + + envFile.text = '' + use ${pkgs.nu_scripts}/share/nu_scripts/themes/nu-themes/${theme}.nu + $env.config.color_config = (${theme}) + ''; + + inherit (config.home) shellAliases; + }; + } + + (lib.mkIf config.programs.nushell.enable { + programs = { + # Wrap it with bash + bash.initExtra = lib.mkAfter '' + if [[ $(ps --no-header --pid=$PPID --format=comm) != "nu" && -z ''${BASH_EXECUTION_STRING} ]]; then + exec ${lib.getExe config.programs.nushell.package} + fi + ''; + + # builtin `ls` is good here! + eza.enable = lib.mkForce false; + }; + }) + ]; +} diff --git a/users/seth/mixins/plasma.nix b/users/seth/mixins/plasma.nix new file mode 100644 index 0000000..fe9d69f --- /dev/null +++ b/users/seth/mixins/plasma.nix @@ -0,0 +1,24 @@ +{ + lib, + pkgs, + osConfig, + ... +}: + +let + enable = osConfig.services.desktopManager.plasma6.enable or false; +in + +{ + config = lib.mkIf enable { + home.packages = [ + # Matrix client + # TODO: Use after it drops libolm + # pkgs.kdePackages.neochat + # Mastodon client + pkgs.kdePackages.tokodon + # Torrent client + pkgs.qbittorrent + ]; + }; +} diff --git a/users/seth/mixins/spotifyd.nix b/users/seth/mixins/spotifyd.nix new file mode 100644 index 0000000..e2b0972 --- /dev/null +++ b/users/seth/mixins/spotifyd.nix @@ -0,0 +1,12 @@ +{ + services.spotifyd = { + settings = { + # Implicitly use zeroconf + global = { + autoplay = true; + backend = "pulseaudio"; + bitrate = 320; + }; + }; + }; +} diff --git a/users/seth/mixins/ssh.nix b/users/seth/mixins/ssh.nix new file mode 100644 index 0000000..3ae26b2 --- /dev/null +++ b/users/seth/mixins/ssh.nix @@ -0,0 +1,67 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + inherit (pkgs.stdenv.hostPlatform) isLinux; +in + +{ + config = lib.mkMerge [ + { + programs.ssh = { + package = pkgs.openssh; + + matchBlocks = + let + sshDir = "${config.home.homeDirectory}/.ssh"; + in + { + # git forges + "codeberg.org" = { + identityFile = "${sshDir}/codeberg"; + user = "git"; + }; + + "github.com" = { + identityFile = "${sshDir}/github"; + user = "git"; + }; + + # linux packaging + "aur.archlinux.org" = { + identityFile = "${sshDir}/aur"; + user = "aur"; + }; + + "pagure.io" = { + identityFile = "${sshDir}/copr"; + user = "git"; + }; + + # macstadium m1 + "mini.scrumplex.net" = { + identityFile = "${sshDir}/macstadium"; + user = "bob-the-builder"; + }; + + # router + "192.168.1.1" = { + identityFile = "${sshDir}/openwrt"; + user = "root"; + }; + + # servers + "atlas".user = "atlas"; + }; + }; + } + + (lib.mkIf config.programs.ssh.enable { + services.ssh-agent.enable = lib.mkDefault isLinux; + }) + ]; +} diff --git a/users/seth/mixins/vim.nix b/users/seth/mixins/vim.nix new file mode 100644 index 0000000..e3269fc --- /dev/null +++ b/users/seth/mixins/vim.nix @@ -0,0 +1,42 @@ +{ + config, + pkgs, + ... +}: + +let + inherit (config.xdg) configHome dataHome stateHome; +in + +{ + programs.vim = { + packageConfigurable = pkgs.vim; + + settings = { + expandtab = false; + shiftwidth = 2; + tabstop = 2; + }; + + extraConfig = '' + " https://wiki.archlinux.org/title/XDG_Base_Directory + set runtimepath^=${configHome}/vim + set runtimepath+=${dataHome}/vim + set runtimepath+=${configHome}/vim/after + + set packpath^=${dataHome}/vim,${configHome}/vim + set packpath+=${configHome}/vim/after,${dataHome}/vim/after + set packpath^=${dataHome}/vim,${configHome}/vim + set packpath+=${configHome}/vim/after,${dataHome}/vim/after + + let g:netrw_home = "${dataHome}/vim" + call mkdir("${dataHome}/vim/spell", 'p') + + set backupdir=${stateHome}/vim/backup | call mkdir(&backupdir, 'p') + set directory=${stateHome}/vim/swap | call mkdir(&directory, 'p') + set undodir=${stateHome}/vim/undo | call mkdir(&undodir, 'p') + set viewdir=${stateHome}/vim/view | call mkdir(&viewdir, 'p') + set viminfofile=${stateHome}/vim/viminfo + ''; + }; +} diff --git a/users/seth/mixins/zsh.nix b/users/seth/mixins/zsh.nix new file mode 100644 index 0000000..87b04cb --- /dev/null +++ b/users/seth/mixins/zsh.nix @@ -0,0 +1,100 @@ +{ + config, + pkgs, + ... +}: + +{ + programs.zsh = { + defaultKeymap = "emacs"; + dotDir = ".config/zsh"; + + history = { + expireDuplicatesFirst = true; + path = "${config.xdg.stateHome}/zsh/zsh_history"; + save = 1000; + size = 100; + }; + + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + + plugins = [ + { + name = "nix-zsh-completions"; + src = pkgs.nix-zsh-completions; + file = "share/zsh/plugins/nix/nix-zsh-completions.plugin.zsh"; + } + + { + name = "powerlevel10k"; + src = pkgs.zsh-powerlevel10k; + file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; + } + + { + name = "zsh-autopair"; + src = pkgs.zsh-autopair; + file = "share/zsh/zsh-autopair/autopair.zsh"; + } + + { + name = "zsh-completions"; + src = pkgs.zsh-completions; + file = "share/zsh-completions/zsh-completions.plugin.zsh"; + } + ]; + + completionInit = '' + autoload -Uz bashcompinit compinit + local zdump="${config.xdg.cacheHome}/zsh/zdump" + bashcompinit + compinit -d "$zdump" + if [[ ! "$zdump.zwc" -nt "$zdump" ]] + then + zcompile "$zdump" + fi + unset zdump + ''; + + initExtra = '' + if [[ -r "$XDG_CACHE_HOME/p10k-instant-prompt-*.zsh" ]]; then + source "$XDG_CACHE_HOME/p10k-instant-prompt-*.zsh" + fi + autoload -Uz promptinit colors + promptinit + colors + + zmodload zsh/zutil + zmodload zsh/complist + zstyle ":completion::*" group-name "" + zstyle ":completion:*" menu "select" + zstyle ":completion:*" squeeze-slashes "true" + zstyle ":completion::*" use-cache "true" + zstyle ":completion::*" cache-path "$zdump" + + unsetopt beep + unsetopt hist_beep + unsetopt ignore_braces + unsetopt list_beep + setopt always_to_end + setopt prompt_subst + setopt share_history + + # clear backbuffer with ctrl-l + function clear-screen-and-scrollback() { + echoti civis >"$TTY" + printf '%b' '\e[H\e[2J' >"$TTY" + zle .reset-prompt + zle -R + printf '%b' '\e[3J' >"$TTY" + echoti cnorm >"$TTY" + } + + zle -N clear-screen-and-scrollback + bindkey '^L' clear-screen-and-scrollback + + [[ ! -f ~/.config/zsh/.p10k.zsh ]] || source ~/.config/zsh/.p10k.zsh + ''; + }; +} -- cgit v1.2.3