diff --git a/common/hellcooling/0001-web-build-local-extensions-as-well.patch b/common/hellcooling/0001-web-build-local-extensions-as-well.patch index d325d8a..e85a53b 100644 --- a/common/hellcooling/0001-web-build-local-extensions-as-well.patch +++ b/common/hellcooling/0001-web-build-local-extensions-as-well.patch @@ -1,17 +1,17 @@ -From 2f2ed36df2c55ca60c7074cf80f97cdc6d53f83e Mon Sep 17 00:00:00 2001 +From 8295005701c85955551b7493922b41085843fbe6 Mon Sep 17 00:00:00 2001 From: Alyxia Sother -Date: Mon, 22 May 2023 10:14:07 +0200 +Date: Sat, 23 Sep 2023 11:16:37 +0200 Subject: [PATCH] web: build local extensions as well --- - web/buildExtension.js | 35 +++++++++++++++++++++++++++++++++++ - 1 file changed, 35 insertions(+) + web/buildExtension.js | 44 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 44 insertions(+) diff --git a/web/buildExtension.js b/web/buildExtension.js -index 206408c..4984ab2 100644 +index 206408c..8ed3312 100644 --- a/web/buildExtension.js +++ b/web/buildExtension.js -@@ -1,7 +1,37 @@ +@@ -1,7 +1,46 @@ +const fs = require("fs"); +const os = require("os"); +const path = require("path"); @@ -19,10 +19,19 @@ index 206408c..4984ab2 100644 process.env.BUILD_TYPE = "extension"; const config = require("./webpack.config.js"); -+const PATH_TO_EXTS = path.join( -+ os.homedir(), -+ "Library/ApplicationSupport/hh3/ext" -+); ++const platform = os.platform(); ++let dataDir; ++switch (platform) { ++ case "linux": ++ dataDir = path.join(os.homedir(), ".config/hh3"); ++ break; ++ case "darwin": ++ dataDir = path.join(os.homedir(), "Library/ApplicationSupport/hh3"); ++ break; ++} ++if (!dataDir) throw new Error("No dataDir could be inferred! Aborting!"); ++ ++const PATH_TO_EXTS = path.join(dataDir, "ext"); +const HH_EXT_DIR = path.join(__dirname, "../ext"); +let exts = fs.readdirSync(PATH_TO_EXTS); +exts = exts.filter((e) => e !== ".git"); @@ -49,7 +58,7 @@ index 206408c..4984ab2 100644 webpack.webpack(config, (err, stats) => { if (!stats?.compilation) { console.log(err); -@@ -21,5 +51,10 @@ webpack.webpack(config, (err, stats) => { +@@ -21,5 +60,10 @@ webpack.webpack(config, (err, stats) => { }) ); } @@ -61,5 +70,5 @@ index 206408c..4984ab2 100644 } }); -- -2.37.1 (Apple Git-137.1) +2.42.0 diff --git a/common/hellcooling/build-local-exts.diff b/common/hellcooling/build-local-exts.diff index daf5283..d408c60 100644 --- a/common/hellcooling/build-local-exts.diff +++ b/common/hellcooling/build-local-exts.diff @@ -1,8 +1,8 @@ diff --git a/web/buildExtension.js b/web/buildExtension.js -index 206408c..4984ab2 100644 +index 206408c..8ed3312 100644 --- a/web/buildExtension.js +++ b/web/buildExtension.js -@@ -1,7 +1,37 @@ +@@ -1,7 +1,46 @@ +const fs = require("fs"); +const os = require("os"); +const path = require("path"); @@ -10,10 +10,19 @@ index 206408c..4984ab2 100644 process.env.BUILD_TYPE = "extension"; const config = require("./webpack.config.js"); -+const PATH_TO_EXTS = path.join( -+ os.homedir(), -+ "Library/ApplicationSupport/hh3/ext" -+); ++const platform = os.platform(); ++let dataDir; ++switch (platform) { ++ case "linux": ++ dataDir = path.join(os.homedir(), ".config/hh3"); ++ break; ++ case "darwin": ++ dataDir = path.join(os.homedir(), "Library/ApplicationSupport/hh3"); ++ break; ++} ++if (!dataDir) throw new Error("No dataDir could be inferred! Aborting!"); ++ ++const PATH_TO_EXTS = path.join(dataDir, "ext"); +const HH_EXT_DIR = path.join(__dirname, "../ext"); +let exts = fs.readdirSync(PATH_TO_EXTS); +exts = exts.filter((e) => e !== ".git"); @@ -40,7 +49,7 @@ index 206408c..4984ab2 100644 webpack.webpack(config, (err, stats) => { if (!stats?.compilation) { console.log(err); -@@ -21,5 +51,10 @@ webpack.webpack(config, (err, stats) => { +@@ -21,5 +60,10 @@ webpack.webpack(config, (err, stats) => { }) ); } diff --git a/common/hellcooling/config/.eslintrc.yml b/common/hellcooling/config/.eslintrc.yml index c4e2fde..74618cc 100644 --- a/common/hellcooling/config/.eslintrc.yml +++ b/common/hellcooling/config/.eslintrc.yml @@ -25,6 +25,7 @@ overrides: extends: - eslint-config-dmitmel/presets/typescript-addon parserOptions: + ecmaVersion: 2020 project: 'tsconfig.json' sourceType: module rules: diff --git a/common/hellcooling/config/discord-pc-ptb.json b/common/hellcooling/config/discord-pc-ptb.json index ee9ac43..a5153c4 100644 Binary files a/common/hellcooling/config/discord-pc-ptb.json and b/common/hellcooling/config/discord-pc-ptb.json differ diff --git a/common/hellcooling/config/ext/brokenCondom/host.js b/common/hellcooling/config/ext/brokenCondom/host.js new file mode 100644 index 0000000..d8dbe68 Binary files /dev/null and b/common/hellcooling/config/ext/brokenCondom/host.js differ diff --git a/common/hellcooling/config/ext/brokenCondom/web.js b/common/hellcooling/config/ext/brokenCondom/web.js new file mode 100644 index 0000000..7f4d496 Binary files /dev/null and b/common/hellcooling/config/ext/brokenCondom/web.js differ diff --git a/common/hellcooling/config/ext/emojiBlacklist.ts b/common/hellcooling/config/ext/emojiBlacklist.ts index 475cdb7..32bd1eb 100644 Binary files a/common/hellcooling/config/ext/emojiBlacklist.ts and b/common/hellcooling/config/ext/emojiBlacklist.ts differ diff --git a/common/hellcooling/config/ext/noInlineLinks.ts b/common/hellcooling/config/ext/noInlineLinks.ts new file mode 100644 index 0000000..cda9313 Binary files /dev/null and b/common/hellcooling/config/ext/noInlineLinks.ts differ diff --git a/common/hellcooling/config/ext/removeChannelIcons.ts b/common/hellcooling/config/ext/removeChannelIcons.ts index 991d106..96ed12f 100644 Binary files a/common/hellcooling/config/ext/removeChannelIcons.ts and b/common/hellcooling/config/ext/removeChannelIcons.ts differ diff --git a/common/hellcooling/config/ext/topaz/node.js b/common/hellcooling/config/ext/topaz/node.js new file mode 100644 index 0000000..b76a6db Binary files /dev/null and b/common/hellcooling/config/ext/topaz/node.js differ diff --git a/common/hellcooling/config/ext/topaz/package.json b/common/hellcooling/config/ext/topaz/package.json new file mode 100644 index 0000000..1ee103b Binary files /dev/null and b/common/hellcooling/config/ext/topaz/package.json differ diff --git a/common/hellcooling/config/ext/topaz/pnpm-lock.yaml b/common/hellcooling/config/ext/topaz/pnpm-lock.yaml new file mode 100644 index 0000000..cc317f6 Binary files /dev/null and b/common/hellcooling/config/ext/topaz/pnpm-lock.yaml differ diff --git a/common/hellcooling/config/ext/topaz/web.js b/common/hellcooling/config/ext/topaz/web.js new file mode 100644 index 0000000..83c0e02 Binary files /dev/null and b/common/hellcooling/config/ext/topaz/web.js differ diff --git a/common/hellcooling/config/ext/topaz/webpackModules/index.tsx b/common/hellcooling/config/ext/topaz/webpackModules/index.tsx new file mode 100644 index 0000000..3543980 Binary files /dev/null and b/common/hellcooling/config/ext/topaz/webpackModules/index.tsx differ diff --git a/common/hellcooling/config/ext/topaz/webpackModules/tabSettings.jsx b/common/hellcooling/config/ext/topaz/webpackModules/tabSettings.jsx new file mode 100644 index 0000000..1aa2b8a Binary files /dev/null and b/common/hellcooling/config/ext/topaz/webpackModules/tabSettings.jsx differ diff --git a/common/hellcooling/config/ext/topaz/webpackModules/tabSnippets.jsx b/common/hellcooling/config/ext/topaz/webpackModules/tabSnippets.jsx new file mode 100644 index 0000000..d892229 Binary files /dev/null and b/common/hellcooling/config/ext/topaz/webpackModules/tabSnippets.jsx differ diff --git a/common/hellcooling/config/global.d.ts b/common/hellcooling/config/global.d.ts index c4570d8..7e2582e 100644 --- a/common/hellcooling/config/global.d.ts +++ b/common/hellcooling/config/global.d.ts @@ -1,7 +1,14 @@ export {}; +import { EventEmitter } from 'events'; declare global { const hh: { + emitter: EventEmitter; constants: Record & { categories: Record }; + // TODO: Maybe turn this into something that, based on the moduleName, can + // fetch an ext's actual config type and return that instead. + getModuleOptions: (moduleName: string) => Record; }; + + const wreq: (module: string) => any; } diff --git a/dmitmel-dotfiles b/dmitmel-dotfiles index fb8942c..971208f 160000 --- a/dmitmel-dotfiles +++ b/dmitmel-dotfiles @@ -1 +1 @@ -Subproject commit fb8942c077d9f5974f02040e7369f29ef2a3b762 +Subproject commit 971208fe9c71044e35d2d2ef0360a499966517a0 diff --git a/nix/flake.lock b/nix/flake.lock index 312819d..a2a550a 100644 --- a/nix/flake.lock +++ b/nix/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1687691275, - "narHash": "sha256-VVywT8ubStvDPF5TscDBokT3T0l3zsOzCW056noh5zc=", + "lastModified": 1704277720, + "narHash": "sha256-meAKNgmh3goankLGWqqpw73pm9IvXjEENJloF0coskE=", "owner": "lnl7", "repo": "nix-darwin", - "rev": "25ae710ba3cd448c5d5678788d37f3d149378bc0", + "rev": "0dd382b70c351f528561f71a0a7df82c9d2be9a4", "type": "github" }, "original": { @@ -23,11 +23,11 @@ "dotfiles": { "flake": false, "locked": { - "lastModified": 1687268328, - "narHash": "sha256-TS4xL8LIZHApLsLZmhgfk9mUDkTwbFUIyZ6Hze4Uyvc=", + "lastModified": 1702297498, + "narHash": "sha256-wBeX8mOuPwXzHmPSTwcafa3ioV1r1biBaM4Pz9TQezw=", "ref": "refs/heads/master", - "rev": "e7576c13c466b618ba2cd26b0ae67dd91389633b", - "revCount": 393, + "rev": "be29a97b84dbb54e125dac19df3478464b7f76ca", + "revCount": 456, "submodules": true, "type": "git", "url": "https://github.com/keanuplayz/dotfiles" @@ -45,11 +45,11 @@ ] }, "locked": { - "lastModified": 1687647567, - "narHash": "sha256-Ua90LZYJO7/7KW/KK/AqijhIekd+wxPwbVKXuBYzJeQ=", + "lastModified": 1702195668, + "narHash": "sha256-Lxmjez0nfNBptdqV5GsXKm7Bb7swjGsrxiLxWJu0tL8=", "owner": "nix-community", "repo": "home-manager", - "rev": "6ca1e16eb3016c94b7ac16699e1d4158bd4e39a4", + "rev": "33110fb3c7fe6a94b98b641866a5eddb64b7c23f", "type": "github" }, "original": { @@ -61,11 +61,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1687762512, - "narHash": "sha256-2SqEYe/aFyUWDTD3DNzSUt718OspYg7pZpLk+tG9tCw=", + "lastModified": 1705033721, + "narHash": "sha256-K5eJHmL1/kev6WuqyqqbS1cdNnSidIZ3jeqJ7GbrYnQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a5173c3819f44726a6aed01ec0bca6221b162a1c", + "rev": "a1982c92d8980a0114372973cbdfe0a307f1bdea", "type": "github" }, "original": { diff --git a/nix/hosts/alymac/default.nix b/nix/hosts/alymac/default.nix index 7d8cee9..eba5c28 100644 --- a/nix/hosts/alymac/default.nix +++ b/nix/hosts/alymac/default.nix @@ -1,4 +1,4 @@ -{ pkgs, specialArgs, lib, dotfiles, ... }: +{ pkgs, lib, dotfiles, ... }: with lib; let @@ -30,7 +30,6 @@ let jq kubectl kubelogin-oidc - lua-language-server mosh nixpkgs-fmt pandoc @@ -38,6 +37,7 @@ let sops stylua texlive.combined.scheme-small + typst vim wget @@ -51,12 +51,17 @@ let languages = [ crystal - deno - dotnet-sdk + dhall + dhall-json + dhall-lsp-server go jdk + kotlin + kotlin-language-server + lua-language-server nil nodejs_20 + python2 ruby_3_1 sbcl shards @@ -65,7 +70,6 @@ let programs = [ rectangle - slack tailscale ]; @@ -77,7 +81,13 @@ let nerdfonts ]; - everything = system ++ base ++ languages ++ programs ++ multimedia ++ fonts; + python = with python311Packages; [ + colorama + psutil + distro + ]; + + everything = system ++ base ++ languages ++ programs ++ multimedia ++ fonts ++ python; }; # Old solution kept for posterity {{{ @@ -140,6 +150,9 @@ in # Absolutely proprietary. nixpkgs.config.allowUnfree = true; + nixpkgs.config.permittedInsecurePackages = [ + "python-2.7.18.6" + ]; # Make sure the nix daemon always runs services.nix-daemon.enable = true; @@ -151,6 +164,9 @@ in # you'll need to enable this so nix-darwin creates a zshrc sourcing needed environment changes programs.zsh.enable = true; + # tailscaled isn't automatically registered as a service that should run on installation. + services.tailscale.enable = true; + # Make sure to set the correct values, or everything will break! (in reality, # it will just not build) users.users.alyxia = { @@ -195,14 +211,20 @@ in "drud/ddev" "homebrew/cask" "homebrew/cask-versions" + "int128/kubelogin" ]; # Please do not the brew. brews = [ + "bear" "composer" "croc" "ddev" + "dotnet" + "gradle" + "kubelogin" "mkcert" + "nss" "pinentry-mac" "pkg-config" "sdl2" @@ -230,21 +252,30 @@ in "discord-ptb" "docker" "firefox" + "firefox-developer-edition" "goland" "google-chrome" "intellij-idea" "itch" "iterm2" + "lens" "obs" + "orbstack" "phpstorm" "plexamp" "raycast" "rider" + "rubymine" "sequel-ace" "shottr" + "slack" "spotify" + "steam" + "texifier" "thunderbird" + "transmit" "visual-studio-code" + "wine-stable" ]; }; } diff --git a/nix/hosts/alymac/git.nix b/nix/hosts/alymac/git.nix index 136be7e..a429f70 100644 --- a/nix/hosts/alymac/git.nix +++ b/nix/hosts/alymac/git.nix @@ -12,6 +12,10 @@ signByDefault = true; }; + ignores = [ + ".DS_Store" + ]; + delta = { enable = true; options = { diff --git a/nix/hosts/alymac/nvim.nix b/nix/hosts/alymac/nvim.nix index 12e2b5e..5b07d7f 100644 --- a/nix/hosts/alymac/nvim.nix +++ b/nix/hosts/alymac/nvim.nix @@ -17,13 +17,20 @@ filetypes = [ "nix" ]; rootPatterns = [ "flake.nix" ]; "settings.nil" = { - "formatting.command" = ["nixpkgs-fmt"]; + "formatting.command" = [ "nixpkgs-fmt" ]; }; }; "go.goPlsOptions" = { completion = true; completeUnimported = true; }; + rescript = { + enable = true; + command = "rescript-language-server"; + args = [ "--node-ipc" ]; + filetypes = [ "rescript" ]; + rootPatterns = [ "rescript.json" "bsconfig.json" ]; + }; }; }; }; diff --git a/nix/hosts/alymac/zsh.nix b/nix/hosts/alymac/zsh.nix index b60dc27..1a6343f 100644 --- a/nix/hosts/alymac/zsh.nix +++ b/nix/hosts/alymac/zsh.nix @@ -13,6 +13,15 @@ export PATH="$PATH:$HOME/.npm-packages/bin" export FRENYARD_SCALE=2.40 export RETHINK_API="https://rethink.alyxia.dev" + export KUBECONFIG="$HOME/.kube/config.yaml" + + function violent-update() { + # + sudo -v; while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null & + cd "$HOME/.dotfiles/nix"; + sudo nix-channel --update && nix-channel --update; + sudo nix-env -u; + } ''; }; } diff --git a/nvim-new/README.md b/nvim-new/README.md new file mode 100644 index 0000000..4a21c60 --- /dev/null +++ b/nvim-new/README.md @@ -0,0 +1 @@ +# WIP!!! diff --git a/nvim-new/init.lua b/nvim-new/init.lua new file mode 100644 index 0000000..3a9f920 --- /dev/null +++ b/nvim-new/init.lua @@ -0,0 +1,12 @@ +local init_modules = { +-- "aly.plugins", + "aly.options" +} + +for _, module in ipairs(init_modules) do + local ok, err = pcall(require, module) + if not ok then + error("Error loading " .. module .. "\n\n" .. err) + end +end + diff --git a/nvim-new/lua/aly/options.lua b/nvim-new/lua/aly/options.lua new file mode 100644 index 0000000..34c9efd --- /dev/null +++ b/nvim-new/lua/aly/options.lua @@ -0,0 +1,12 @@ +print("yes") + +local options = { + termguicolors = true, -- how do I even use the editor without this? +} + +for o, _ in pairs(options) do + vim.opt[o] = _ +end + +vim.cmd("filetype plugin indent on") +vim.cmd("syntax enable") diff --git a/nvim-new/lua/aly/plugins.lua b/nvim-new/lua/aly/plugins.lua new file mode 100644 index 0000000..eac2579 --- /dev/null +++ b/nvim-new/lua/aly/plugins.lua @@ -0,0 +1,68 @@ +return { + -- the colorscheme should be available when starting Neovim + { + "folke/tokyonight.nvim", + lazy = false, -- make sure we load this during startup if it is your main colorscheme + priority = 1000, -- make sure to load this before all the other start plugins + config = function() + -- load the colorscheme here + vim.cmd([[colorscheme tokyonight]]) + end, + }, + { + "neovim/nvim-lspconfig", + event = { "BufReadPre", "BufNewFile" }, + dependencies = { + { "folke/neoconf.nvim", cmd = "Neoconf", config = false, dependencies = { "nvim-lspconfig" } }, + { "folke/neodev.nvim", opts = {} }, + "williamboman/mason.nvim", + "williamboman/mason-lspconfig.nvim", + { "j-hui/fidget.nvim", tag = "legacy", opts = {} }, + "hrsh7th/cmp-nvim-lsp", + }, + config = function() end, + opts = { + servers = { + lua_ls = {} + } + } + }, + { + "hrsh7th/nvim-cmp", + event = "InsertEnter", + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + "L3MON4D3/LuaSnip", + "saadparwaiz1/cmp_luasnip", + }, + opts = function() + local cmp = require("cmp") + return { + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "luasnip" }, + { name = "buffer" }, + { name = "path" }, + }), + } + end + }, + { + "windwp/nvim-autopairs", + dependencies = { "hrsh7th/nvim-cmp" }, + config = function() + require("nvim-autopairs").setup {} + local cmp_autopairs = require("nvim-autopairs.completion.cmp") + local cmp = require("cmp") + cmp.event:on( + 'confirm_done', + cmp_autopairs.on_confirm_done() + ) + end, + }, + + { "nvim-tree/nvim-web-devicons", lazy = true }, + { "stevearc/dressing.nvim", event = "VeryLazy" }, +} diff --git a/nvim/dotfiles/plugins-list.vim b/nvim/dotfiles/plugins-list.vim index 3ada9cc..259f3e4 100644 --- a/nvim/dotfiles/plugins-list.vim +++ b/nvim/dotfiles/plugins-list.vim @@ -46,6 +46,7 @@ let s:plug = funcref('dotfiles#plugman#register') call s:plug('tpope/vim-projectionist') call s:plug('tpope/vim-dispatch') " }}} + call s:plug('rescript-lang/vim-rescript') " }}} " coc {{{ @@ -54,6 +55,10 @@ let s:plug = funcref('dotfiles#plugman#register') endif " }}} +" mini.nvim {{{ + call s:plug('echasnovski/mini.pairs') +" }}} + " Misc {{{ if has('nvim') call s:plug('andweeb/presence.nvim') diff --git a/nvim/init.vim b/nvim/init.vim index ec3f835..d16d87e 100644 --- a/nvim/init.vim +++ b/nvim/init.vim @@ -5,6 +5,15 @@ let &runtimepath = g:k_nvim_dotfiles_dir.','.&runtimepath.','.g:k_nvim_dotfiles_ let g:vim_ide = 1 let g:dotfiles_rainbow_indent_opacity = 0.5 +" Inhibited plugins {{{ + " I'd love to use dotfiles#plugman#inhibit in my plugins-list.vim but by that + " point it is already too late. + let g:dotfiles#plugman#inhibited_plugins = {} + + " Does not do its job properly anymore, I'm afraid. + let g:dotfiles#plugman#inhibited_plugins["delimitMate"] = 1 +" }}} + source :p:h/../dmitmel-dotfiles/nvim/init.vim if has('nvim') diff --git a/nvim/plugin/keybinds.vim b/nvim/plugin/keybinds.vim index 1dc5e02..d6dbc8d 100644 --- a/nvim/plugin/keybinds.vim +++ b/nvim/plugin/keybinds.vim @@ -9,7 +9,7 @@ nnoremap :NERDTreeToggle nmap (coc-codeaction-line) xmap (coc-codeaction-selected) - inoremap coc#pum#visible() ? coc#_select_confirm() : "\" + inoremap coc#pum#visible() ? coc#pum#confirm() : "\" inoremap \ coc#pum#visible() ? coc#pum#next(1): diff --git a/nvim/plugin/mini-nvim.lua b/nvim/plugin/mini-nvim.lua new file mode 100644 index 0000000..8fe7575 --- /dev/null +++ b/nvim/plugin/mini-nvim.lua @@ -0,0 +1,6 @@ +local ok, mini_pairs = pcall(require, "mini.pairs") +if not ok then + return +end + +mini_pairs.setup() diff --git a/zsh/aliases.zsh b/zsh/aliases.zsh index eb53de2..f765f91 100644 --- a/zsh/aliases.zsh +++ b/zsh/aliases.zsh @@ -1,6 +1,7 @@ alias welcome="welcome --extra-logos-dir $K_ZSH_DOTFILES/../script-resources/welcome/logos" alias markdown2htmldoc="$K_ZSH_DOTFILES/../scripts/markdown2htmldoc" alias mediawiki-preview="$K_ZSH_DOTFILES/../scripts/mediawiki-preview" +alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail' if (( _is_macos )); then if command_exists exa; then diff --git a/zsh/plugins.zsh b/zsh/plugins.zsh index 4f8d46f..4cf6a55 100755 --- a/zsh/plugins.zsh +++ b/zsh/plugins.zsh @@ -43,4 +43,9 @@ _plugin project 'https://git.sr.ht/~keanucode/scripts/blob/master/project/projec _plugin keybase-compl 'https://raw.githubusercontent.com/fnoris/keybase-zsh-completion/master/_keybase' from=url \ after_load='plugin-cfg-path fpath prepend ""' + + if command_exists pnpm-shell-completion; then + _plugin pnpm-compl "https://raw.githubusercontent.com/g-plane/pnpm-shell-completion/main/pnpm-shell-completion.plugin.zsh" from=url \ + after_load='plugin-cfg-path fpath prepend ""' + fi # }}}