From fd9b0ecef4142a62b45404700ba1cff488f84a73 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Thu, 23 May 2024 13:31:11 +0200 Subject: refactor(modules/home): Setup as "normal" NixOS module --- modules/home/conf/alacritty/default.nix | 30 + modules/home/conf/alacritty/toml/base.toml | 16 + modules/home/conf/alacritty/toml/bell.toml | 7 + modules/home/conf/alacritty/toml/colorscheme.toml | 79 ++ modules/home/conf/alacritty/toml/cursor.toml | 11 + modules/home/conf/alacritty/toml/env.toml | 3 + modules/home/conf/alacritty/toml/font.toml | 15 + modules/home/conf/alacritty/toml/hints.toml | 25 + .../conf/alacritty/toml/keyboard_bindings.toml | 297 ++++++++ modules/home/conf/alacritty/toml/mouse.toml | 2 + .../home/conf/alacritty/toml/mouse_bindings.toml | 3 + modules/home/conf/alacritty/toml/scrolling.toml | 3 + modules/home/conf/alacritty/toml/selection.toml | 3 + modules/home/conf/alacritty/toml/window.toml | 18 + modules/home/conf/alacritty/yaml/base.yml | 17 + modules/home/conf/alacritty/yaml/bell.yml | 42 ++ modules/home/conf/alacritty/yaml/colors.yml | 147 ++++ modules/home/conf/alacritty/yaml/colorscheme.yml | 31 + modules/home/conf/alacritty/yaml/cursor.yml | 43 ++ modules/home/conf/alacritty/yaml/debug.yml | 29 + modules/home/conf/alacritty/yaml/env.yml | 11 + modules/home/conf/alacritty/yaml/font.yml | 73 ++ modules/home/conf/alacritty/yaml/hints.yml | 77 ++ modules/home/conf/alacritty/yaml/key_bindings.yml | 382 ++++++++++ modules/home/conf/alacritty/yaml/mouse.yml | 11 + .../home/conf/alacritty/yaml/mouse_bindings.yml | 32 + modules/home/conf/alacritty/yaml/scrolling.yml | 7 + modules/home/conf/alacritty/yaml/selection.yml | 7 + modules/home/conf/alacritty/yaml/shell.yml | 13 + modules/home/conf/alacritty/yaml/window.yml | 89 +++ modules/home/conf/btop/default.nix | 5 + modules/home/conf/dconf/default.nix | 9 + modules/home/conf/default.nix | 47 ++ modules/home/conf/direnv/default.nix | 6 + .../home/conf/firefox/config/bookmarks/default.nix | 31 + modules/home/conf/firefox/config/bookmarks/lib.nix | 49 ++ .../home/conf/firefox/config/chrome/userChrome.css | 41 ++ .../conf/firefox/config/extensions/extensions.json | 50 ++ .../extensions/native_messaging_hosts/default.nix | 15 + .../home/conf/firefox/config/policies/default.nix | 146 ++++ modules/home/conf/firefox/config/prefs/default.nix | 21 + modules/home/conf/firefox/config/prefs/override.js | 202 ++++++ .../conf/firefox/config/search/engines/default.nix | 84 +++ .../config/search/engines/logos/arch_linux.svg | 1 + .../firefox/config/search/engines/logos/brave.svg | 25 + .../config/search/engines/logos/google_scholar.ico | Bin 0 -> 3871 bytes .../config/search/engines/logos/rust_std.svg | 47 ++ .../config/search/engines/logos/rust_tokio.png | Bin 0 -> 3551 bytes .../config/search/engines/logos/wikipedia.svg | 1 + modules/home/conf/firefox/default.nix | 134 ++++ modules/home/conf/firefox/package.nix | 30 + modules/home/conf/firefox/scripts/default.nix | 29 + .../home/conf/firefox/scripts/extract_cookies.sh | 77 ++ modules/home/conf/firefox/scripts/unzip_mozlz4.py | 44 ++ .../home/conf/firefox/scripts/update_extensions.sh | 18 + modules/home/conf/gammastep/default.nix | 29 + modules/home/conf/git/default.nix | 181 +++++ modules/home/conf/git/git_ignore.git | 4 + modules/home/conf/git/git_template.git | 66 ++ modules/home/conf/git/scripts/commit.sh | 18 + modules/home/conf/gpg/default.nix | 67 ++ modules/home/conf/gpg/keys/key_1.asc | 25 + modules/home/conf/gpg/keys/key_2.asc | 794 +++++++++++++++++++++ modules/home/conf/gtk/default.nix | 58 ++ modules/home/conf/himalaya/default.nix | 8 + modules/home/conf/hyfetch/default.nix | 20 + modules/home/conf/iamb/config.json | 9 + modules/home/conf/iamb/default.nix | 3 + modules/home/conf/keepassxc/default.nix | 7 + modules/home/conf/keepassxc/keepassxc.ini | 58 ++ modules/home/conf/latexindent/default.nix | 8 + modules/home/conf/latexindent/indentconfig.yaml | 2 + modules/home/conf/latexindent/mysettings.yaml | 672 +++++++++++++++++ modules/home/conf/less/command.less | 126 ++++ modules/home/conf/less/default.nix | 17 + modules/home/conf/less/env.less | 2 + modules/home/conf/less/line-edit.less | 29 + modules/home/conf/lf/colors | 190 +++++ modules/home/conf/lf/commands/default.nix | 227 ++++++ modules/home/conf/lf/commands/scripts/archive.sh | 77 ++ .../home/conf/lf/commands/scripts/broot_jump.sh | 25 + modules/home/conf/lf/commands/scripts/chmod.sh | 24 + .../home/conf/lf/commands/scripts/clear_trash.sh | 8 + modules/home/conf/lf/commands/scripts/cow_cp.sh | 105 +++ modules/home/conf/lf/commands/scripts/dl_file.sh | 43 ++ modules/home/conf/lf/commands/scripts/dragon.sh | 20 + .../conf/lf/commands/scripts/dragon_individual.sh | 20 + .../home/conf/lf/commands/scripts/dragon_stay.sh | 20 + modules/home/conf/lf/commands/scripts/execute.sh | 19 + .../home/conf/lf/commands/scripts/follow_link.sh | 19 + modules/home/conf/lf/commands/scripts/fzf_jump.sh | 24 + .../conf/lf/commands/scripts/go_project_root.sh | 22 + modules/home/conf/lf/commands/scripts/mk_dir.sh | 32 + modules/home/conf/lf/commands/scripts/mk_file.sh | 32 + .../conf/lf/commands/scripts/mk_file_and_edit.sh | 33 + modules/home/conf/lf/commands/scripts/mk_ln.sh | 45 ++ .../conf/lf/commands/scripts/mk_scr_default.sh | 38 + .../home/conf/lf/commands/scripts/mk_scr_temp.sh | 38 + .../home/conf/lf/commands/scripts/restore_trash.sh | 16 + .../conf/lf/commands/scripts/set_wall_paper.sh | 19 + .../home/conf/lf/commands/scripts/stripspace.sh | 40 ++ modules/home/conf/lf/commands/scripts/trash.sh | 37 + modules/home/conf/lf/commands/scripts/unarchive.sh | 36 + modules/home/conf/lf/commands/scripts/view_file.sh | 26 + modules/home/conf/lf/default.nix | 59 ++ modules/home/conf/lf/icons | 360 ++++++++++ modules/home/conf/lf/keybindings/default.nix | 94 +++ modules/home/conf/mail/accounts/benedikt.nix | 48 ++ modules/home/conf/mail/accounts/soispha.nix | 49 ++ modules/home/conf/mail/default.nix | 15 + modules/home/conf/mako/default.nix | 44 ++ modules/home/conf/mbsync/default.nix | 17 + modules/home/conf/mpd/default.nix | 43 ++ modules/home/conf/mpd/mpdconf.example | 418 +++++++++++ modules/home/conf/mpv/default.nix | 10 + modules/home/conf/mumble/Mumble.conf | 67 ++ modules/home/conf/mumble/default.nix | 3 + modules/home/conf/neomutt/default.nix | 168 +++++ modules/home/conf/nheko/default.nix | 13 + modules/home/conf/nix-index/default.nix | 14 + modules/home/conf/npm/.npmrc | 6 + modules/home/conf/npm/default.nix | 7 + modules/home/conf/nvim/autocmds/default.nix | 124 ++++ modules/home/conf/nvim/clipboard/default.nix | 7 + modules/home/conf/nvim/default.nix | 55 ++ modules/home/conf/nvim/files/default.nix | 9 + modules/home/conf/nvim/files/ftplugin/tex.lua | 57 ++ modules/home/conf/nvim/mappings/default.nix | 286 ++++++++ modules/home/conf/nvim/options/default.nix | 105 +++ .../home/conf/nvim/plgs/colorscheme/default.nix | 17 + .../plgs/colorscheme/lua/mk_todos_readable.lua | 16 + .../conf/nvim/plgs/colorscheme/lua/nightfox.lua | 44 ++ .../home/conf/nvim/plgs/comment-nvim/default.nix | 41 ++ modules/home/conf/nvim/plgs/debugprint/default.nix | 74 ++ .../conf/nvim/plgs/debugprint/lua/debugprint.lua | 3 + modules/home/conf/nvim/plgs/default.nix | 33 + modules/home/conf/nvim/plgs/femaco/default.nix | 24 + modules/home/conf/nvim/plgs/femaco/lua/femaco.lua | 50 ++ .../home/conf/nvim/plgs/flatten-nvim/default.nix | 20 + .../nvim/plgs/flatten-nvim/lua/flatten-nvim.lua | 106 +++ .../home/conf/nvim/plgs/goto-preview/default.nix | 52 ++ .../nvim/plgs/goto-preview/lua/goto-preview.lua | 21 + modules/home/conf/nvim/plgs/harpoon/default.nix | 100 +++ modules/home/conf/nvim/plgs/leap/default.nix | 59 ++ modules/home/conf/nvim/plgs/lf-nvim/default.nix | 18 + .../home/conf/nvim/plgs/lf-nvim/lua/lf-nvim.lua | 43 ++ .../conf/nvim/plgs/lsp-progress-nvim/default.nix | 50 ++ .../lsp-progress-nvim/lua/lsp-progress-nvim.lua | 150 ++++ modules/home/conf/nvim/plgs/lsp/default.nix | 29 + .../home/conf/nvim/plgs/lsp/keymaps/default.nix | 72 ++ .../home/conf/nvim/plgs/lsp/servers/default.nix | 15 + .../conf/nvim/plgs/lsp/servers/servers/bashls.nix | 5 + .../conf/nvim/plgs/lsp/servers/servers/ccls.nix | 5 + .../conf/nvim/plgs/lsp/servers/servers/ltex.nix | 39 + .../conf/nvim/plgs/lsp/servers/servers/lua-ls.nix | 8 + .../conf/nvim/plgs/lsp/servers/servers/nil_ls.nix | 10 + .../nvim/plgs/lsp/servers/servers/openscad.nix | 17 + .../conf/nvim/plgs/lsp/servers/servers/pylyzer.nix | 12 + .../plgs/lsp/servers/servers/quick-lint-js.nix | 15 + .../nvim/plgs/lsp/servers/servers/ruff-lsp.nix | 10 + .../plgs/lsp/servers/servers/rust-analyzer.nix | 14 + .../conf/nvim/plgs/lsp/servers/servers/texlab.nix | 7 + modules/home/conf/nvim/plgs/lspkind/default.nix | 6 + modules/home/conf/nvim/plgs/ltex_extra/default.nix | 9 + .../conf/nvim/plgs/ltex_extra/lua/ltex_extra.lua | 16 + modules/home/conf/nvim/plgs/lualine/default.nix | 114 +++ modules/home/conf/nvim/plgs/luasnip/default.nix | 20 + .../home/conf/nvim/plgs/luasnip/lua/luasnip.lua | 7 + .../conf/nvim/plgs/luasnip/lua/snippets/all.lua | 182 +++++ .../nvim/plgs/luasnip/lua/snippets/html/html.lua | 108 +++ .../plgs/luasnip/lua/snippets/tex/delimiter.lua | 34 + .../nvim/plgs/luasnip/lua/snippets/tex/greek.lua | 37 + modules/home/conf/nvim/plgs/neorg/default.nix | 56 ++ modules/home/conf/nvim/plgs/nvim-cmp/default.nix | 54 ++ modules/home/conf/nvim/plgs/nvim-lint/default.nix | 15 + .../conf/nvim/plgs/nvim-lint/lua/nvim-lint.lua | 20 + .../home/conf/nvim/plgs/raw_plugins/default.nix | 11 + modules/home/conf/nvim/plgs/telescope/default.nix | 10 + .../conf/nvim/plgs/telescope/defaults/default.nix | 30 + .../plgs/telescope/extensions/bibtex/default.nix | 17 + .../nvim/plgs/telescope/extensions/default.nix | 9 + .../plgs/telescope/extensions/frecency/default.nix | 23 + .../telescope/extensions/fzy-native/default.nix | 5 + .../plgs/telescope/extensions/rooter/default.nix | 7 + .../telescope/extensions/rooter/lua/rooter.lua | 84 +++ .../plgs/telescope/extensions/symbols/default.nix | 55 ++ .../conf/nvim/plgs/telescope/keymaps/default.nix | 10 + .../home/conf/nvim/plgs/todo-comments/default.nix | 49 ++ modules/home/conf/nvim/plgs/treesitter/default.nix | 56 ++ modules/home/conf/nvim/plgs/vim-tex/default.nix | 57 ++ modules/home/conf/nvim/plgs/which-key/default.nix | 5 + modules/home/conf/prusa_slicer/default.nix | 3 + modules/home/conf/prusa_slicer/prusa_slicer.ini | 65 ++ modules/home/conf/python/default.nix | 6 + modules/home/conf/python/pythonrc.py | 33 + modules/home/conf/rclone/default.nix | 7 + modules/home/conf/rclone/rclone.conf | 10 + modules/home/conf/rofi/default.nix | 10 + modules/home/conf/rofi/nord-twoLines.rasi | 101 +++ modules/home/conf/ssh/default.nix | 16 + modules/home/conf/starship/default.nix | 119 +++ modules/home/conf/swayidle/config | 5 + modules/home/conf/swayidle/default.nix | 29 + modules/home/conf/swaylock/GTDcanonical.png | Bin 0 -> 34659 bytes modules/home/conf/swaylock/commands.jpg | Bin 0 -> 629695 bytes modules/home/conf/swaylock/default.nix | 10 + modules/home/conf/swaylock/gnu.png | Bin 0 -> 327518 bytes modules/home/conf/taskwarrior/default.nix | 125 ++++ modules/home/conf/taskwarrior/firefox/default.nix | 32 + modules/home/conf/taskwarrior/hooks/default.nix | 112 +++ .../hooks/scripts/on-add_enforce-policies.sh | 41 ++ .../hooks/scripts/on-add_sync-git-repo.sh | 42 ++ .../hooks/scripts/on-modify_sync-git-repo.sh | 43 ++ .../hooks/scripts/on-modify_track-timewarrior.py | 94 +++ .../scripts/on-modify_track-total-active-time.py | 148 ++++ modules/home/conf/taskwarrior/nord.theme | 100 +++ modules/home/conf/taskwarrior/projects/default.nix | 115 +++ modules/home/conf/timewarrior/default.nix | 22 + modules/home/conf/timewarrior/nord.theme | 25 + modules/home/conf/tridactyl/config.vim | 47 ++ modules/home/conf/tridactyl/default.nix | 3 + modules/home/conf/unison/default.nix | 184 +++++ modules/home/conf/xdg/default.nix | 63 ++ modules/home/conf/xdg/url_handler.sh | 18 + modules/home/conf/xdg/xdg_vars.nix | 26 + modules/home/conf/yambar/config/config.yml | 243 +++++++ modules/home/conf/yambar/config/laptop.yml | 243 +++++++ modules/home/conf/yambar/default.nix | 52 ++ modules/home/conf/yambar/scripts/disk.sh | 21 + modules/home/conf/yambar/scripts/mpd_song_name.sh | 21 + modules/home/conf/yambar/scripts/network.sh | 47 ++ modules/home/conf/yambar/scripts/sound-volume.sh | 20 + modules/home/conf/ytcc/default.nix | 11 + modules/home/conf/ytcc/ytcc.conf | 37 + modules/home/conf/zsh/config/command_not_found.sh | 64 ++ .../conf/zsh/config/command_not_found_insult.sh | 298 ++++++++ modules/home/conf/zsh/config/custom_cursor.zsh | 42 ++ modules/home/conf/zsh/config/zsh-init.zsh | 42 ++ modules/home/conf/zsh/default.nix | 101 +++ modules/home/default.nix | 94 +-- modules/home/files/default.nix | 6 + modules/home/files/manifest_json/default.nix | 16 + .../home/files/manifest_json/profile/manifest.json | 4 + modules/home/files/wallpaper/abstract-nord.png | Bin 0 -> 140219 bytes modules/home/files/wallpaper/default.nix | 14 + modules/home/impermanence/default.nix | 29 + modules/home/soispha/conf/alacritty/default.nix | 30 - modules/home/soispha/conf/alacritty/toml/base.toml | 16 - modules/home/soispha/conf/alacritty/toml/bell.toml | 7 - .../soispha/conf/alacritty/toml/colorscheme.toml | 79 -- .../home/soispha/conf/alacritty/toml/cursor.toml | 11 - modules/home/soispha/conf/alacritty/toml/env.toml | 3 - modules/home/soispha/conf/alacritty/toml/font.toml | 15 - .../home/soispha/conf/alacritty/toml/hints.toml | 25 - .../conf/alacritty/toml/keyboard_bindings.toml | 297 -------- .../home/soispha/conf/alacritty/toml/mouse.toml | 2 - .../conf/alacritty/toml/mouse_bindings.toml | 3 - .../soispha/conf/alacritty/toml/scrolling.toml | 3 - .../soispha/conf/alacritty/toml/selection.toml | 3 - .../home/soispha/conf/alacritty/toml/window.toml | 18 - modules/home/soispha/conf/alacritty/yaml/base.yml | 17 - modules/home/soispha/conf/alacritty/yaml/bell.yml | 42 -- .../home/soispha/conf/alacritty/yaml/colors.yml | 147 ---- .../soispha/conf/alacritty/yaml/colorscheme.yml | 31 - .../home/soispha/conf/alacritty/yaml/cursor.yml | 43 -- modules/home/soispha/conf/alacritty/yaml/debug.yml | 29 - modules/home/soispha/conf/alacritty/yaml/env.yml | 11 - modules/home/soispha/conf/alacritty/yaml/font.yml | 73 -- modules/home/soispha/conf/alacritty/yaml/hints.yml | 77 -- .../soispha/conf/alacritty/yaml/key_bindings.yml | 382 ---------- modules/home/soispha/conf/alacritty/yaml/mouse.yml | 11 - .../soispha/conf/alacritty/yaml/mouse_bindings.yml | 32 - .../home/soispha/conf/alacritty/yaml/scrolling.yml | 7 - .../home/soispha/conf/alacritty/yaml/selection.yml | 7 - modules/home/soispha/conf/alacritty/yaml/shell.yml | 13 - .../home/soispha/conf/alacritty/yaml/window.yml | 89 --- modules/home/soispha/conf/btop/default.nix | 5 - modules/home/soispha/conf/dconf/default.nix | 9 - modules/home/soispha/conf/default.nix | 47 -- modules/home/soispha/conf/direnv/default.nix | 6 - .../conf/firefox/config/bookmarks/default.nix | 31 - .../soispha/conf/firefox/config/bookmarks/lib.nix | 49 -- .../conf/firefox/config/chrome/userChrome.css | 41 -- .../conf/firefox/config/extensions/extensions.json | 50 -- .../extensions/native_messaging_hosts/default.nix | 15 - .../conf/firefox/config/policies/default.nix | 146 ---- .../soispha/conf/firefox/config/prefs/default.nix | 21 - .../soispha/conf/firefox/config/prefs/override.js | 202 ------ .../conf/firefox/config/search/engines/default.nix | 84 --- .../config/search/engines/logos/arch_linux.svg | 1 - .../firefox/config/search/engines/logos/brave.svg | 25 - .../config/search/engines/logos/google_scholar.ico | Bin 3871 -> 0 bytes .../config/search/engines/logos/rust_std.svg | 47 -- .../config/search/engines/logos/rust_tokio.png | Bin 3551 -> 0 bytes .../config/search/engines/logos/wikipedia.svg | 1 - modules/home/soispha/conf/firefox/default.nix | 134 ---- modules/home/soispha/conf/firefox/package.nix | 30 - .../home/soispha/conf/firefox/scripts/default.nix | 29 - .../conf/firefox/scripts/extract_cookies.sh | 77 -- .../soispha/conf/firefox/scripts/unzip_mozlz4.py | 44 -- .../conf/firefox/scripts/update_extensions.sh | 18 - modules/home/soispha/conf/gammastep/default.nix | 29 - modules/home/soispha/conf/git/default.nix | 181 ----- modules/home/soispha/conf/git/git_ignore.git | 4 - modules/home/soispha/conf/git/git_template.git | 66 -- modules/home/soispha/conf/git/scripts/commit.sh | 18 - modules/home/soispha/conf/gpg/default.nix | 67 -- modules/home/soispha/conf/gpg/keys/key_1.asc | 25 - modules/home/soispha/conf/gpg/keys/key_2.asc | 794 --------------------- modules/home/soispha/conf/gtk/default.nix | 58 -- modules/home/soispha/conf/himalaya/default.nix | 8 - modules/home/soispha/conf/hyfetch/default.nix | 20 - modules/home/soispha/conf/iamb/config.json | 9 - modules/home/soispha/conf/iamb/default.nix | 3 - modules/home/soispha/conf/keepassxc/default.nix | 7 - modules/home/soispha/conf/keepassxc/keepassxc.ini | 58 -- modules/home/soispha/conf/latexindent/default.nix | 8 - .../soispha/conf/latexindent/indentconfig.yaml | 2 - .../home/soispha/conf/latexindent/mysettings.yaml | 672 ----------------- modules/home/soispha/conf/less/command.less | 126 ---- modules/home/soispha/conf/less/default.nix | 17 - modules/home/soispha/conf/less/env.less | 2 - modules/home/soispha/conf/less/line-edit.less | 29 - modules/home/soispha/conf/lf/colors | 190 ----- modules/home/soispha/conf/lf/commands/default.nix | 227 ------ .../soispha/conf/lf/commands/scripts/archive.sh | 77 -- .../soispha/conf/lf/commands/scripts/broot_jump.sh | 25 - .../home/soispha/conf/lf/commands/scripts/chmod.sh | 24 - .../conf/lf/commands/scripts/clear_trash.sh | 8 - .../soispha/conf/lf/commands/scripts/cow_cp.sh | 105 --- .../soispha/conf/lf/commands/scripts/dl_file.sh | 43 -- .../soispha/conf/lf/commands/scripts/dragon.sh | 20 - .../conf/lf/commands/scripts/dragon_individual.sh | 20 - .../conf/lf/commands/scripts/dragon_stay.sh | 20 - .../soispha/conf/lf/commands/scripts/execute.sh | 19 - .../conf/lf/commands/scripts/follow_link.sh | 19 - .../soispha/conf/lf/commands/scripts/fzf_jump.sh | 24 - .../conf/lf/commands/scripts/go_project_root.sh | 22 - .../soispha/conf/lf/commands/scripts/mk_dir.sh | 32 - .../soispha/conf/lf/commands/scripts/mk_file.sh | 32 - .../conf/lf/commands/scripts/mk_file_and_edit.sh | 33 - .../home/soispha/conf/lf/commands/scripts/mk_ln.sh | 45 -- .../conf/lf/commands/scripts/mk_scr_default.sh | 38 - .../conf/lf/commands/scripts/mk_scr_temp.sh | 38 - .../conf/lf/commands/scripts/restore_trash.sh | 16 - .../conf/lf/commands/scripts/set_wall_paper.sh | 19 - .../soispha/conf/lf/commands/scripts/stripspace.sh | 40 -- .../home/soispha/conf/lf/commands/scripts/trash.sh | 37 - .../soispha/conf/lf/commands/scripts/unarchive.sh | 36 - .../soispha/conf/lf/commands/scripts/view_file.sh | 26 - modules/home/soispha/conf/lf/default.nix | 59 -- modules/home/soispha/conf/lf/icons | 360 ---------- .../home/soispha/conf/lf/keybindings/default.nix | 94 --- .../home/soispha/conf/mail/accounts/benedikt.nix | 48 -- .../home/soispha/conf/mail/accounts/soispha.nix | 49 -- modules/home/soispha/conf/mail/default.nix | 15 - modules/home/soispha/conf/mako/default.nix | 44 -- modules/home/soispha/conf/mbsync/default.nix | 17 - modules/home/soispha/conf/mpd/default.nix | 43 -- modules/home/soispha/conf/mpd/mpdconf.example | 418 ----------- modules/home/soispha/conf/mpv/default.nix | 10 - modules/home/soispha/conf/mumble/Mumble.conf | 67 -- modules/home/soispha/conf/mumble/default.nix | 3 - modules/home/soispha/conf/neomutt/default.nix | 168 ----- modules/home/soispha/conf/nheko/default.nix | 13 - modules/home/soispha/conf/nix-index/default.nix | 14 - modules/home/soispha/conf/npm/.npmrc | 6 - modules/home/soispha/conf/npm/default.nix | 7 - .../home/soispha/conf/nvim/autocmds/default.nix | 124 ---- .../home/soispha/conf/nvim/clipboard/default.nix | 7 - modules/home/soispha/conf/nvim/default.nix | 55 -- modules/home/soispha/conf/nvim/files/default.nix | 9 - .../home/soispha/conf/nvim/files/ftplugin/tex.lua | 57 -- .../home/soispha/conf/nvim/mappings/default.nix | 286 -------- modules/home/soispha/conf/nvim/options/default.nix | 105 --- .../soispha/conf/nvim/plgs/colorscheme/default.nix | 17 - .../plgs/colorscheme/lua/mk_todos_readable.lua | 16 - .../conf/nvim/plgs/colorscheme/lua/nightfox.lua | 44 -- .../conf/nvim/plgs/comment-nvim/default.nix | 41 -- .../soispha/conf/nvim/plgs/debugprint/default.nix | 74 -- .../conf/nvim/plgs/debugprint/lua/debugprint.lua | 3 - modules/home/soispha/conf/nvim/plgs/default.nix | 33 - .../home/soispha/conf/nvim/plgs/femaco/default.nix | 24 - .../soispha/conf/nvim/plgs/femaco/lua/femaco.lua | 50 -- .../conf/nvim/plgs/flatten-nvim/default.nix | 20 - .../nvim/plgs/flatten-nvim/lua/flatten-nvim.lua | 106 --- .../conf/nvim/plgs/goto-preview/default.nix | 52 -- .../nvim/plgs/goto-preview/lua/goto-preview.lua | 21 - .../soispha/conf/nvim/plgs/harpoon/default.nix | 100 --- .../home/soispha/conf/nvim/plgs/leap/default.nix | 59 -- .../soispha/conf/nvim/plgs/lf-nvim/default.nix | 18 - .../soispha/conf/nvim/plgs/lf-nvim/lua/lf-nvim.lua | 43 -- .../conf/nvim/plgs/lsp-progress-nvim/default.nix | 50 -- .../lsp-progress-nvim/lua/lsp-progress-nvim.lua | 150 ---- .../home/soispha/conf/nvim/plgs/lsp/default.nix | 29 - .../soispha/conf/nvim/plgs/lsp/keymaps/default.nix | 72 -- .../soispha/conf/nvim/plgs/lsp/servers/default.nix | 15 - .../conf/nvim/plgs/lsp/servers/servers/bashls.nix | 5 - .../conf/nvim/plgs/lsp/servers/servers/ccls.nix | 5 - .../conf/nvim/plgs/lsp/servers/servers/ltex.nix | 39 - .../conf/nvim/plgs/lsp/servers/servers/lua-ls.nix | 8 - .../conf/nvim/plgs/lsp/servers/servers/nil_ls.nix | 10 - .../nvim/plgs/lsp/servers/servers/openscad.nix | 17 - .../conf/nvim/plgs/lsp/servers/servers/pylyzer.nix | 12 - .../plgs/lsp/servers/servers/quick-lint-js.nix | 15 - .../nvim/plgs/lsp/servers/servers/ruff-lsp.nix | 10 - .../plgs/lsp/servers/servers/rust-analyzer.nix | 14 - .../conf/nvim/plgs/lsp/servers/servers/texlab.nix | 7 - .../soispha/conf/nvim/plgs/lspkind/default.nix | 6 - .../soispha/conf/nvim/plgs/ltex_extra/default.nix | 9 - .../conf/nvim/plgs/ltex_extra/lua/ltex_extra.lua | 16 - .../soispha/conf/nvim/plgs/lualine/default.nix | 114 --- .../soispha/conf/nvim/plgs/luasnip/default.nix | 20 - .../soispha/conf/nvim/plgs/luasnip/lua/luasnip.lua | 7 - .../conf/nvim/plgs/luasnip/lua/snippets/all.lua | 182 ----- .../nvim/plgs/luasnip/lua/snippets/html/html.lua | 108 --- .../plgs/luasnip/lua/snippets/tex/delimiter.lua | 34 - .../nvim/plgs/luasnip/lua/snippets/tex/greek.lua | 37 - .../home/soispha/conf/nvim/plgs/neorg/default.nix | 56 -- .../soispha/conf/nvim/plgs/nvim-cmp/default.nix | 54 -- .../soispha/conf/nvim/plgs/nvim-lint/default.nix | 15 - .../conf/nvim/plgs/nvim-lint/lua/nvim-lint.lua | 20 - .../soispha/conf/nvim/plgs/raw_plugins/default.nix | 11 - .../soispha/conf/nvim/plgs/telescope/default.nix | 10 - .../conf/nvim/plgs/telescope/defaults/default.nix | 30 - .../plgs/telescope/extensions/bibtex/default.nix | 17 - .../nvim/plgs/telescope/extensions/default.nix | 9 - .../plgs/telescope/extensions/frecency/default.nix | 23 - .../telescope/extensions/fzy-native/default.nix | 5 - .../plgs/telescope/extensions/rooter/default.nix | 7 - .../telescope/extensions/rooter/lua/rooter.lua | 84 --- .../plgs/telescope/extensions/symbols/default.nix | 55 -- .../conf/nvim/plgs/telescope/keymaps/default.nix | 10 - .../conf/nvim/plgs/todo-comments/default.nix | 49 -- .../soispha/conf/nvim/plgs/treesitter/default.nix | 55 -- .../soispha/conf/nvim/plgs/vim-tex/default.nix | 57 -- .../soispha/conf/nvim/plgs/which-key/default.nix | 5 - modules/home/soispha/conf/prusa_slicer/default.nix | 3 - .../soispha/conf/prusa_slicer/prusa_slicer.ini | 65 -- modules/home/soispha/conf/python/default.nix | 6 - modules/home/soispha/conf/python/pythonrc.py | 33 - modules/home/soispha/conf/rclone/default.nix | 7 - modules/home/soispha/conf/rclone/rclone.conf | 10 - modules/home/soispha/conf/rofi/default.nix | 10 - modules/home/soispha/conf/rofi/nord-twoLines.rasi | 101 --- modules/home/soispha/conf/ssh/default.nix | 16 - modules/home/soispha/conf/starship/default.nix | 119 --- modules/home/soispha/conf/swayidle/config | 5 - modules/home/soispha/conf/swayidle/default.nix | 29 - .../home/soispha/conf/swaylock/GTDcanonical.png | Bin 34659 -> 0 bytes modules/home/soispha/conf/swaylock/commands.jpg | Bin 629695 -> 0 bytes modules/home/soispha/conf/swaylock/default.nix | 10 - modules/home/soispha/conf/swaylock/gnu.png | Bin 327518 -> 0 bytes modules/home/soispha/conf/taskwarrior/default.nix | 125 ---- .../soispha/conf/taskwarrior/firefox/default.nix | 32 - .../soispha/conf/taskwarrior/hooks/default.nix | 112 --- .../hooks/scripts/on-add_enforce-policies.sh | 41 -- .../hooks/scripts/on-add_sync-git-repo.sh | 42 -- .../hooks/scripts/on-modify_sync-git-repo.sh | 43 -- .../hooks/scripts/on-modify_track-timewarrior.py | 94 --- .../scripts/on-modify_track-total-active-time.py | 148 ---- modules/home/soispha/conf/taskwarrior/nord.theme | 100 --- .../soispha/conf/taskwarrior/projects/default.nix | 115 --- modules/home/soispha/conf/timewarrior/default.nix | 22 - modules/home/soispha/conf/timewarrior/nord.theme | 25 - modules/home/soispha/conf/tridactyl/config.vim | 47 -- modules/home/soispha/conf/tridactyl/default.nix | 3 - modules/home/soispha/conf/unison/default.nix | 184 ----- modules/home/soispha/conf/xdg/default.nix | 63 -- modules/home/soispha/conf/xdg/url_handler.sh | 18 - modules/home/soispha/conf/xdg/xdg_vars.nix | 26 - modules/home/soispha/conf/yambar/config/config.yml | 243 ------- modules/home/soispha/conf/yambar/config/laptop.yml | 243 ------- modules/home/soispha/conf/yambar/default.nix | 52 -- modules/home/soispha/conf/yambar/scripts/disk.sh | 21 - .../soispha/conf/yambar/scripts/mpd_song_name.sh | 21 - .../home/soispha/conf/yambar/scripts/network.sh | 47 -- .../soispha/conf/yambar/scripts/sound-volume.sh | 20 - modules/home/soispha/conf/ytcc/default.nix | 11 - modules/home/soispha/conf/ytcc/ytcc.conf | 37 - .../soispha/conf/zsh/config/command_not_found.sh | 64 -- .../conf/zsh/config/command_not_found_insult.sh | 298 -------- .../home/soispha/conf/zsh/config/custom_cursor.zsh | 42 -- modules/home/soispha/conf/zsh/config/zsh-init.zsh | 42 -- modules/home/soispha/conf/zsh/default.nix | 101 --- modules/home/soispha/default.nix | 60 -- modules/home/soispha/files/default.nix | 6 - .../home/soispha/files/manifest_json/default.nix | 16 - .../files/manifest_json/profile/manifest.json | 4 - .../home/soispha/files/wallpaper/abstract-nord.png | Bin 140219 -> 0 bytes modules/home/soispha/files/wallpaper/default.nix | 14 - modules/home/soispha/impermanence/default.nix | 29 - modules/home/soispha/pkgs/default.nix | 167 ----- modules/home/soispha/wms/default.nix | 7 - modules/home/soispha/wms/plasma/default.nix | 5 - modules/home/soispha/wms/river/default.nix | 76 -- modules/home/soispha/wms/river/init.sh | 80 --- modules/home/soispha/wms/river/res/keys.ron | 58 -- modules/home/soispha/wms/river/res/moonlander.ron | 64 -- modules/home/soispha/wms/sway/default.nix | 16 - modules/home/wms/default.nix | 7 + modules/home/wms/plasma/default.nix | 5 + modules/home/wms/river/default.nix | 76 ++ modules/home/wms/river/init.sh | 80 +++ modules/home/wms/river/res/keys.ron | 58 ++ modules/home/wms/river/res/moonlander.ron | 64 ++ modules/home/wms/sway/default.nix | 16 + 507 files changed, 13760 insertions(+), 13974 deletions(-) create mode 100644 modules/home/conf/alacritty/default.nix create mode 100644 modules/home/conf/alacritty/toml/base.toml create mode 100644 modules/home/conf/alacritty/toml/bell.toml create mode 100644 modules/home/conf/alacritty/toml/colorscheme.toml create mode 100644 modules/home/conf/alacritty/toml/cursor.toml create mode 100644 modules/home/conf/alacritty/toml/env.toml create mode 100644 modules/home/conf/alacritty/toml/font.toml create mode 100644 modules/home/conf/alacritty/toml/hints.toml create mode 100644 modules/home/conf/alacritty/toml/keyboard_bindings.toml create mode 100644 modules/home/conf/alacritty/toml/mouse.toml create mode 100644 modules/home/conf/alacritty/toml/mouse_bindings.toml create mode 100644 modules/home/conf/alacritty/toml/scrolling.toml create mode 100644 modules/home/conf/alacritty/toml/selection.toml create mode 100644 modules/home/conf/alacritty/toml/window.toml create mode 100644 modules/home/conf/alacritty/yaml/base.yml create mode 100644 modules/home/conf/alacritty/yaml/bell.yml create mode 100644 modules/home/conf/alacritty/yaml/colors.yml create mode 100644 modules/home/conf/alacritty/yaml/colorscheme.yml create mode 100644 modules/home/conf/alacritty/yaml/cursor.yml create mode 100644 modules/home/conf/alacritty/yaml/debug.yml create mode 100644 modules/home/conf/alacritty/yaml/env.yml create mode 100644 modules/home/conf/alacritty/yaml/font.yml create mode 100644 modules/home/conf/alacritty/yaml/hints.yml create mode 100644 modules/home/conf/alacritty/yaml/key_bindings.yml create mode 100644 modules/home/conf/alacritty/yaml/mouse.yml create mode 100644 modules/home/conf/alacritty/yaml/mouse_bindings.yml create mode 100644 modules/home/conf/alacritty/yaml/scrolling.yml create mode 100644 modules/home/conf/alacritty/yaml/selection.yml create mode 100644 modules/home/conf/alacritty/yaml/shell.yml create mode 100644 modules/home/conf/alacritty/yaml/window.yml create mode 100644 modules/home/conf/btop/default.nix create mode 100644 modules/home/conf/dconf/default.nix create mode 100644 modules/home/conf/default.nix create mode 100644 modules/home/conf/direnv/default.nix create mode 100644 modules/home/conf/firefox/config/bookmarks/default.nix create mode 100644 modules/home/conf/firefox/config/bookmarks/lib.nix create mode 100644 modules/home/conf/firefox/config/chrome/userChrome.css create mode 100644 modules/home/conf/firefox/config/extensions/extensions.json create mode 100644 modules/home/conf/firefox/config/extensions/native_messaging_hosts/default.nix create mode 100644 modules/home/conf/firefox/config/policies/default.nix create mode 100644 modules/home/conf/firefox/config/prefs/default.nix create mode 100644 modules/home/conf/firefox/config/prefs/override.js create mode 100644 modules/home/conf/firefox/config/search/engines/default.nix create mode 100644 modules/home/conf/firefox/config/search/engines/logos/arch_linux.svg create mode 100644 modules/home/conf/firefox/config/search/engines/logos/brave.svg create mode 100644 modules/home/conf/firefox/config/search/engines/logos/google_scholar.ico create mode 100644 modules/home/conf/firefox/config/search/engines/logos/rust_std.svg create mode 100644 modules/home/conf/firefox/config/search/engines/logos/rust_tokio.png create mode 100644 modules/home/conf/firefox/config/search/engines/logos/wikipedia.svg create mode 100644 modules/home/conf/firefox/default.nix create mode 100644 modules/home/conf/firefox/package.nix create mode 100644 modules/home/conf/firefox/scripts/default.nix create mode 100755 modules/home/conf/firefox/scripts/extract_cookies.sh create mode 100755 modules/home/conf/firefox/scripts/unzip_mozlz4.py create mode 100755 modules/home/conf/firefox/scripts/update_extensions.sh create mode 100644 modules/home/conf/gammastep/default.nix create mode 100644 modules/home/conf/git/default.nix create mode 100644 modules/home/conf/git/git_ignore.git create mode 100644 modules/home/conf/git/git_template.git create mode 100755 modules/home/conf/git/scripts/commit.sh create mode 100644 modules/home/conf/gpg/default.nix create mode 100644 modules/home/conf/gpg/keys/key_1.asc create mode 100644 modules/home/conf/gpg/keys/key_2.asc create mode 100644 modules/home/conf/gtk/default.nix create mode 100644 modules/home/conf/himalaya/default.nix create mode 100644 modules/home/conf/hyfetch/default.nix create mode 100644 modules/home/conf/iamb/config.json create mode 100644 modules/home/conf/iamb/default.nix create mode 100644 modules/home/conf/keepassxc/default.nix create mode 100644 modules/home/conf/keepassxc/keepassxc.ini create mode 100644 modules/home/conf/latexindent/default.nix create mode 100644 modules/home/conf/latexindent/indentconfig.yaml create mode 100644 modules/home/conf/latexindent/mysettings.yaml create mode 100644 modules/home/conf/less/command.less create mode 100644 modules/home/conf/less/default.nix create mode 100644 modules/home/conf/less/env.less create mode 100644 modules/home/conf/less/line-edit.less create mode 100644 modules/home/conf/lf/colors create mode 100644 modules/home/conf/lf/commands/default.nix create mode 100755 modules/home/conf/lf/commands/scripts/archive.sh create mode 100755 modules/home/conf/lf/commands/scripts/broot_jump.sh create mode 100755 modules/home/conf/lf/commands/scripts/chmod.sh create mode 100755 modules/home/conf/lf/commands/scripts/clear_trash.sh create mode 100755 modules/home/conf/lf/commands/scripts/cow_cp.sh create mode 100755 modules/home/conf/lf/commands/scripts/dl_file.sh create mode 100755 modules/home/conf/lf/commands/scripts/dragon.sh create mode 100755 modules/home/conf/lf/commands/scripts/dragon_individual.sh create mode 100755 modules/home/conf/lf/commands/scripts/dragon_stay.sh create mode 100755 modules/home/conf/lf/commands/scripts/execute.sh create mode 100755 modules/home/conf/lf/commands/scripts/follow_link.sh create mode 100755 modules/home/conf/lf/commands/scripts/fzf_jump.sh create mode 100755 modules/home/conf/lf/commands/scripts/go_project_root.sh create mode 100755 modules/home/conf/lf/commands/scripts/mk_dir.sh create mode 100755 modules/home/conf/lf/commands/scripts/mk_file.sh create mode 100755 modules/home/conf/lf/commands/scripts/mk_file_and_edit.sh create mode 100755 modules/home/conf/lf/commands/scripts/mk_ln.sh create mode 100755 modules/home/conf/lf/commands/scripts/mk_scr_default.sh create mode 100755 modules/home/conf/lf/commands/scripts/mk_scr_temp.sh create mode 100755 modules/home/conf/lf/commands/scripts/restore_trash.sh create mode 100755 modules/home/conf/lf/commands/scripts/set_wall_paper.sh create mode 100755 modules/home/conf/lf/commands/scripts/stripspace.sh create mode 100755 modules/home/conf/lf/commands/scripts/trash.sh create mode 100755 modules/home/conf/lf/commands/scripts/unarchive.sh create mode 100755 modules/home/conf/lf/commands/scripts/view_file.sh create mode 100644 modules/home/conf/lf/default.nix create mode 100644 modules/home/conf/lf/icons create mode 100644 modules/home/conf/lf/keybindings/default.nix create mode 100644 modules/home/conf/mail/accounts/benedikt.nix create mode 100644 modules/home/conf/mail/accounts/soispha.nix create mode 100644 modules/home/conf/mail/default.nix create mode 100644 modules/home/conf/mako/default.nix create mode 100644 modules/home/conf/mbsync/default.nix create mode 100644 modules/home/conf/mpd/default.nix create mode 100644 modules/home/conf/mpd/mpdconf.example create mode 100644 modules/home/conf/mpv/default.nix create mode 100644 modules/home/conf/mumble/Mumble.conf create mode 100644 modules/home/conf/mumble/default.nix create mode 100644 modules/home/conf/neomutt/default.nix create mode 100644 modules/home/conf/nheko/default.nix create mode 100644 modules/home/conf/nix-index/default.nix create mode 100644 modules/home/conf/npm/.npmrc create mode 100644 modules/home/conf/npm/default.nix create mode 100644 modules/home/conf/nvim/autocmds/default.nix create mode 100644 modules/home/conf/nvim/clipboard/default.nix create mode 100644 modules/home/conf/nvim/default.nix create mode 100644 modules/home/conf/nvim/files/default.nix create mode 100644 modules/home/conf/nvim/files/ftplugin/tex.lua create mode 100644 modules/home/conf/nvim/mappings/default.nix create mode 100644 modules/home/conf/nvim/options/default.nix create mode 100644 modules/home/conf/nvim/plgs/colorscheme/default.nix create mode 100644 modules/home/conf/nvim/plgs/colorscheme/lua/mk_todos_readable.lua create mode 100644 modules/home/conf/nvim/plgs/colorscheme/lua/nightfox.lua create mode 100644 modules/home/conf/nvim/plgs/comment-nvim/default.nix create mode 100644 modules/home/conf/nvim/plgs/debugprint/default.nix create mode 100644 modules/home/conf/nvim/plgs/debugprint/lua/debugprint.lua create mode 100644 modules/home/conf/nvim/plgs/default.nix create mode 100644 modules/home/conf/nvim/plgs/femaco/default.nix create mode 100644 modules/home/conf/nvim/plgs/femaco/lua/femaco.lua create mode 100644 modules/home/conf/nvim/plgs/flatten-nvim/default.nix create mode 100644 modules/home/conf/nvim/plgs/flatten-nvim/lua/flatten-nvim.lua create mode 100644 modules/home/conf/nvim/plgs/goto-preview/default.nix create mode 100644 modules/home/conf/nvim/plgs/goto-preview/lua/goto-preview.lua create mode 100644 modules/home/conf/nvim/plgs/harpoon/default.nix create mode 100644 modules/home/conf/nvim/plgs/leap/default.nix create mode 100644 modules/home/conf/nvim/plgs/lf-nvim/default.nix create mode 100644 modules/home/conf/nvim/plgs/lf-nvim/lua/lf-nvim.lua create mode 100644 modules/home/conf/nvim/plgs/lsp-progress-nvim/default.nix create mode 100644 modules/home/conf/nvim/plgs/lsp-progress-nvim/lua/lsp-progress-nvim.lua create mode 100644 modules/home/conf/nvim/plgs/lsp/default.nix create mode 100644 modules/home/conf/nvim/plgs/lsp/keymaps/default.nix create mode 100644 modules/home/conf/nvim/plgs/lsp/servers/default.nix create mode 100644 modules/home/conf/nvim/plgs/lsp/servers/servers/bashls.nix create mode 100644 modules/home/conf/nvim/plgs/lsp/servers/servers/ccls.nix create mode 100644 modules/home/conf/nvim/plgs/lsp/servers/servers/ltex.nix create mode 100644 modules/home/conf/nvim/plgs/lsp/servers/servers/lua-ls.nix create mode 100644 modules/home/conf/nvim/plgs/lsp/servers/servers/nil_ls.nix create mode 100644 modules/home/conf/nvim/plgs/lsp/servers/servers/openscad.nix create mode 100644 modules/home/conf/nvim/plgs/lsp/servers/servers/pylyzer.nix create mode 100644 modules/home/conf/nvim/plgs/lsp/servers/servers/quick-lint-js.nix create mode 100644 modules/home/conf/nvim/plgs/lsp/servers/servers/ruff-lsp.nix create mode 100644 modules/home/conf/nvim/plgs/lsp/servers/servers/rust-analyzer.nix create mode 100644 modules/home/conf/nvim/plgs/lsp/servers/servers/texlab.nix create mode 100644 modules/home/conf/nvim/plgs/lspkind/default.nix create mode 100644 modules/home/conf/nvim/plgs/ltex_extra/default.nix create mode 100644 modules/home/conf/nvim/plgs/ltex_extra/lua/ltex_extra.lua create mode 100644 modules/home/conf/nvim/plgs/lualine/default.nix create mode 100644 modules/home/conf/nvim/plgs/luasnip/default.nix create mode 100644 modules/home/conf/nvim/plgs/luasnip/lua/luasnip.lua create mode 100644 modules/home/conf/nvim/plgs/luasnip/lua/snippets/all.lua create mode 100644 modules/home/conf/nvim/plgs/luasnip/lua/snippets/html/html.lua create mode 100644 modules/home/conf/nvim/plgs/luasnip/lua/snippets/tex/delimiter.lua create mode 100644 modules/home/conf/nvim/plgs/luasnip/lua/snippets/tex/greek.lua create mode 100644 modules/home/conf/nvim/plgs/neorg/default.nix create mode 100644 modules/home/conf/nvim/plgs/nvim-cmp/default.nix create mode 100644 modules/home/conf/nvim/plgs/nvim-lint/default.nix create mode 100644 modules/home/conf/nvim/plgs/nvim-lint/lua/nvim-lint.lua create mode 100644 modules/home/conf/nvim/plgs/raw_plugins/default.nix create mode 100644 modules/home/conf/nvim/plgs/telescope/default.nix create mode 100644 modules/home/conf/nvim/plgs/telescope/defaults/default.nix create mode 100644 modules/home/conf/nvim/plgs/telescope/extensions/bibtex/default.nix create mode 100644 modules/home/conf/nvim/plgs/telescope/extensions/default.nix create mode 100644 modules/home/conf/nvim/plgs/telescope/extensions/frecency/default.nix create mode 100644 modules/home/conf/nvim/plgs/telescope/extensions/fzy-native/default.nix create mode 100644 modules/home/conf/nvim/plgs/telescope/extensions/rooter/default.nix create mode 100644 modules/home/conf/nvim/plgs/telescope/extensions/rooter/lua/rooter.lua create mode 100644 modules/home/conf/nvim/plgs/telescope/extensions/symbols/default.nix create mode 100644 modules/home/conf/nvim/plgs/telescope/keymaps/default.nix create mode 100644 modules/home/conf/nvim/plgs/todo-comments/default.nix create mode 100644 modules/home/conf/nvim/plgs/treesitter/default.nix create mode 100644 modules/home/conf/nvim/plgs/vim-tex/default.nix create mode 100644 modules/home/conf/nvim/plgs/which-key/default.nix create mode 100644 modules/home/conf/prusa_slicer/default.nix create mode 100644 modules/home/conf/prusa_slicer/prusa_slicer.ini create mode 100644 modules/home/conf/python/default.nix create mode 100644 modules/home/conf/python/pythonrc.py create mode 100644 modules/home/conf/rclone/default.nix create mode 100644 modules/home/conf/rclone/rclone.conf create mode 100644 modules/home/conf/rofi/default.nix create mode 100644 modules/home/conf/rofi/nord-twoLines.rasi create mode 100644 modules/home/conf/ssh/default.nix create mode 100644 modules/home/conf/starship/default.nix create mode 100644 modules/home/conf/swayidle/config create mode 100644 modules/home/conf/swayidle/default.nix create mode 100644 modules/home/conf/swaylock/GTDcanonical.png create mode 100644 modules/home/conf/swaylock/commands.jpg create mode 100644 modules/home/conf/swaylock/default.nix create mode 100644 modules/home/conf/swaylock/gnu.png create mode 100644 modules/home/conf/taskwarrior/default.nix create mode 100644 modules/home/conf/taskwarrior/firefox/default.nix create mode 100644 modules/home/conf/taskwarrior/hooks/default.nix create mode 100755 modules/home/conf/taskwarrior/hooks/scripts/on-add_enforce-policies.sh create mode 100755 modules/home/conf/taskwarrior/hooks/scripts/on-add_sync-git-repo.sh create mode 100755 modules/home/conf/taskwarrior/hooks/scripts/on-modify_sync-git-repo.sh create mode 100755 modules/home/conf/taskwarrior/hooks/scripts/on-modify_track-timewarrior.py create mode 100755 modules/home/conf/taskwarrior/hooks/scripts/on-modify_track-total-active-time.py create mode 100644 modules/home/conf/taskwarrior/nord.theme create mode 100644 modules/home/conf/taskwarrior/projects/default.nix create mode 100644 modules/home/conf/timewarrior/default.nix create mode 100644 modules/home/conf/timewarrior/nord.theme create mode 100644 modules/home/conf/tridactyl/config.vim create mode 100644 modules/home/conf/tridactyl/default.nix create mode 100644 modules/home/conf/unison/default.nix create mode 100644 modules/home/conf/xdg/default.nix create mode 100755 modules/home/conf/xdg/url_handler.sh create mode 100644 modules/home/conf/xdg/xdg_vars.nix create mode 100644 modules/home/conf/yambar/config/config.yml create mode 100644 modules/home/conf/yambar/config/laptop.yml create mode 100644 modules/home/conf/yambar/default.nix create mode 100755 modules/home/conf/yambar/scripts/disk.sh create mode 100755 modules/home/conf/yambar/scripts/mpd_song_name.sh create mode 100755 modules/home/conf/yambar/scripts/network.sh create mode 100755 modules/home/conf/yambar/scripts/sound-volume.sh create mode 100644 modules/home/conf/ytcc/default.nix create mode 100644 modules/home/conf/ytcc/ytcc.conf create mode 100644 modules/home/conf/zsh/config/command_not_found.sh create mode 100644 modules/home/conf/zsh/config/command_not_found_insult.sh create mode 100644 modules/home/conf/zsh/config/custom_cursor.zsh create mode 100644 modules/home/conf/zsh/config/zsh-init.zsh create mode 100644 modules/home/conf/zsh/default.nix create mode 100644 modules/home/files/default.nix create mode 100644 modules/home/files/manifest_json/default.nix create mode 100644 modules/home/files/manifest_json/profile/manifest.json create mode 100644 modules/home/files/wallpaper/abstract-nord.png create mode 100644 modules/home/files/wallpaper/default.nix create mode 100644 modules/home/impermanence/default.nix delete mode 100644 modules/home/soispha/conf/alacritty/default.nix delete mode 100644 modules/home/soispha/conf/alacritty/toml/base.toml delete mode 100644 modules/home/soispha/conf/alacritty/toml/bell.toml delete mode 100644 modules/home/soispha/conf/alacritty/toml/colorscheme.toml delete mode 100644 modules/home/soispha/conf/alacritty/toml/cursor.toml delete mode 100644 modules/home/soispha/conf/alacritty/toml/env.toml delete mode 100644 modules/home/soispha/conf/alacritty/toml/font.toml delete mode 100644 modules/home/soispha/conf/alacritty/toml/hints.toml delete mode 100644 modules/home/soispha/conf/alacritty/toml/keyboard_bindings.toml delete mode 100644 modules/home/soispha/conf/alacritty/toml/mouse.toml delete mode 100644 modules/home/soispha/conf/alacritty/toml/mouse_bindings.toml delete mode 100644 modules/home/soispha/conf/alacritty/toml/scrolling.toml delete mode 100644 modules/home/soispha/conf/alacritty/toml/selection.toml delete mode 100644 modules/home/soispha/conf/alacritty/toml/window.toml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/base.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/bell.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/colors.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/colorscheme.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/cursor.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/debug.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/env.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/font.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/hints.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/key_bindings.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/mouse.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/mouse_bindings.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/scrolling.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/selection.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/shell.yml delete mode 100644 modules/home/soispha/conf/alacritty/yaml/window.yml delete mode 100644 modules/home/soispha/conf/btop/default.nix delete mode 100644 modules/home/soispha/conf/dconf/default.nix delete mode 100644 modules/home/soispha/conf/default.nix delete mode 100644 modules/home/soispha/conf/direnv/default.nix delete mode 100644 modules/home/soispha/conf/firefox/config/bookmarks/default.nix delete mode 100644 modules/home/soispha/conf/firefox/config/bookmarks/lib.nix delete mode 100644 modules/home/soispha/conf/firefox/config/chrome/userChrome.css delete mode 100644 modules/home/soispha/conf/firefox/config/extensions/extensions.json delete mode 100644 modules/home/soispha/conf/firefox/config/extensions/native_messaging_hosts/default.nix delete mode 100644 modules/home/soispha/conf/firefox/config/policies/default.nix delete mode 100644 modules/home/soispha/conf/firefox/config/prefs/default.nix delete mode 100644 modules/home/soispha/conf/firefox/config/prefs/override.js delete mode 100644 modules/home/soispha/conf/firefox/config/search/engines/default.nix delete mode 100644 modules/home/soispha/conf/firefox/config/search/engines/logos/arch_linux.svg delete mode 100644 modules/home/soispha/conf/firefox/config/search/engines/logos/brave.svg delete mode 100644 modules/home/soispha/conf/firefox/config/search/engines/logos/google_scholar.ico delete mode 100644 modules/home/soispha/conf/firefox/config/search/engines/logos/rust_std.svg delete mode 100644 modules/home/soispha/conf/firefox/config/search/engines/logos/rust_tokio.png delete mode 100644 modules/home/soispha/conf/firefox/config/search/engines/logos/wikipedia.svg delete mode 100644 modules/home/soispha/conf/firefox/default.nix delete mode 100644 modules/home/soispha/conf/firefox/package.nix delete mode 100644 modules/home/soispha/conf/firefox/scripts/default.nix delete mode 100755 modules/home/soispha/conf/firefox/scripts/extract_cookies.sh delete mode 100755 modules/home/soispha/conf/firefox/scripts/unzip_mozlz4.py delete mode 100755 modules/home/soispha/conf/firefox/scripts/update_extensions.sh delete mode 100644 modules/home/soispha/conf/gammastep/default.nix delete mode 100644 modules/home/soispha/conf/git/default.nix delete mode 100644 modules/home/soispha/conf/git/git_ignore.git delete mode 100644 modules/home/soispha/conf/git/git_template.git delete mode 100755 modules/home/soispha/conf/git/scripts/commit.sh delete mode 100644 modules/home/soispha/conf/gpg/default.nix delete mode 100644 modules/home/soispha/conf/gpg/keys/key_1.asc delete mode 100644 modules/home/soispha/conf/gpg/keys/key_2.asc delete mode 100644 modules/home/soispha/conf/gtk/default.nix delete mode 100644 modules/home/soispha/conf/himalaya/default.nix delete mode 100644 modules/home/soispha/conf/hyfetch/default.nix delete mode 100644 modules/home/soispha/conf/iamb/config.json delete mode 100644 modules/home/soispha/conf/iamb/default.nix delete mode 100644 modules/home/soispha/conf/keepassxc/default.nix delete mode 100644 modules/home/soispha/conf/keepassxc/keepassxc.ini delete mode 100644 modules/home/soispha/conf/latexindent/default.nix delete mode 100644 modules/home/soispha/conf/latexindent/indentconfig.yaml delete mode 100644 modules/home/soispha/conf/latexindent/mysettings.yaml delete mode 100644 modules/home/soispha/conf/less/command.less delete mode 100644 modules/home/soispha/conf/less/default.nix delete mode 100644 modules/home/soispha/conf/less/env.less delete mode 100644 modules/home/soispha/conf/less/line-edit.less delete mode 100644 modules/home/soispha/conf/lf/colors delete mode 100644 modules/home/soispha/conf/lf/commands/default.nix delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/archive.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/broot_jump.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/chmod.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/clear_trash.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/cow_cp.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/dl_file.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/dragon.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/dragon_individual.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/dragon_stay.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/execute.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/follow_link.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/fzf_jump.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/go_project_root.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/mk_dir.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/mk_file.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/mk_file_and_edit.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/mk_ln.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/mk_scr_default.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/mk_scr_temp.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/restore_trash.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/set_wall_paper.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/stripspace.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/trash.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/unarchive.sh delete mode 100755 modules/home/soispha/conf/lf/commands/scripts/view_file.sh delete mode 100644 modules/home/soispha/conf/lf/default.nix delete mode 100644 modules/home/soispha/conf/lf/icons delete mode 100644 modules/home/soispha/conf/lf/keybindings/default.nix delete mode 100644 modules/home/soispha/conf/mail/accounts/benedikt.nix delete mode 100644 modules/home/soispha/conf/mail/accounts/soispha.nix delete mode 100644 modules/home/soispha/conf/mail/default.nix delete mode 100644 modules/home/soispha/conf/mako/default.nix delete mode 100644 modules/home/soispha/conf/mbsync/default.nix delete mode 100644 modules/home/soispha/conf/mpd/default.nix delete mode 100644 modules/home/soispha/conf/mpd/mpdconf.example delete mode 100644 modules/home/soispha/conf/mpv/default.nix delete mode 100644 modules/home/soispha/conf/mumble/Mumble.conf delete mode 100644 modules/home/soispha/conf/mumble/default.nix delete mode 100644 modules/home/soispha/conf/neomutt/default.nix delete mode 100644 modules/home/soispha/conf/nheko/default.nix delete mode 100644 modules/home/soispha/conf/nix-index/default.nix delete mode 100644 modules/home/soispha/conf/npm/.npmrc delete mode 100644 modules/home/soispha/conf/npm/default.nix delete mode 100644 modules/home/soispha/conf/nvim/autocmds/default.nix delete mode 100644 modules/home/soispha/conf/nvim/clipboard/default.nix delete mode 100644 modules/home/soispha/conf/nvim/default.nix delete mode 100644 modules/home/soispha/conf/nvim/files/default.nix delete mode 100644 modules/home/soispha/conf/nvim/files/ftplugin/tex.lua delete mode 100644 modules/home/soispha/conf/nvim/mappings/default.nix delete mode 100644 modules/home/soispha/conf/nvim/options/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/colorscheme/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/colorscheme/lua/mk_todos_readable.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/colorscheme/lua/nightfox.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/comment-nvim/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/debugprint/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/debugprint/lua/debugprint.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/femaco/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/femaco/lua/femaco.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/flatten-nvim/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/flatten-nvim/lua/flatten-nvim.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/goto-preview/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/goto-preview/lua/goto-preview.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/harpoon/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/leap/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lf-nvim/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lf-nvim/lua/lf-nvim.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp-progress-nvim/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp-progress-nvim/lua/lsp-progress-nvim.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/keymaps/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/servers/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/bashls.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/ccls.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/ltex.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/lua-ls.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/nil_ls.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/openscad.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/pylyzer.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/quick-lint-js.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/ruff-lsp.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/rust-analyzer.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/texlab.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/lspkind/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/ltex_extra/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/ltex_extra/lua/ltex_extra.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/lualine/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/luasnip/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/luasnip/lua/luasnip.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/all.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/html/html.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/tex/delimiter.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/tex/greek.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/neorg/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/nvim-cmp/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/nvim-lint/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/nvim-lint/lua/nvim-lint.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/raw_plugins/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/telescope/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/telescope/defaults/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/telescope/extensions/bibtex/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/telescope/extensions/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/telescope/extensions/frecency/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/telescope/extensions/fzy-native/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/telescope/extensions/rooter/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/telescope/extensions/rooter/lua/rooter.lua delete mode 100644 modules/home/soispha/conf/nvim/plgs/telescope/extensions/symbols/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/telescope/keymaps/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/todo-comments/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/treesitter/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/vim-tex/default.nix delete mode 100644 modules/home/soispha/conf/nvim/plgs/which-key/default.nix delete mode 100644 modules/home/soispha/conf/prusa_slicer/default.nix delete mode 100644 modules/home/soispha/conf/prusa_slicer/prusa_slicer.ini delete mode 100644 modules/home/soispha/conf/python/default.nix delete mode 100644 modules/home/soispha/conf/python/pythonrc.py delete mode 100644 modules/home/soispha/conf/rclone/default.nix delete mode 100644 modules/home/soispha/conf/rclone/rclone.conf delete mode 100644 modules/home/soispha/conf/rofi/default.nix delete mode 100644 modules/home/soispha/conf/rofi/nord-twoLines.rasi delete mode 100644 modules/home/soispha/conf/ssh/default.nix delete mode 100644 modules/home/soispha/conf/starship/default.nix delete mode 100644 modules/home/soispha/conf/swayidle/config delete mode 100644 modules/home/soispha/conf/swayidle/default.nix delete mode 100644 modules/home/soispha/conf/swaylock/GTDcanonical.png delete mode 100644 modules/home/soispha/conf/swaylock/commands.jpg delete mode 100644 modules/home/soispha/conf/swaylock/default.nix delete mode 100644 modules/home/soispha/conf/swaylock/gnu.png delete mode 100644 modules/home/soispha/conf/taskwarrior/default.nix delete mode 100644 modules/home/soispha/conf/taskwarrior/firefox/default.nix delete mode 100644 modules/home/soispha/conf/taskwarrior/hooks/default.nix delete mode 100755 modules/home/soispha/conf/taskwarrior/hooks/scripts/on-add_enforce-policies.sh delete mode 100755 modules/home/soispha/conf/taskwarrior/hooks/scripts/on-add_sync-git-repo.sh delete mode 100755 modules/home/soispha/conf/taskwarrior/hooks/scripts/on-modify_sync-git-repo.sh delete mode 100755 modules/home/soispha/conf/taskwarrior/hooks/scripts/on-modify_track-timewarrior.py delete mode 100755 modules/home/soispha/conf/taskwarrior/hooks/scripts/on-modify_track-total-active-time.py delete mode 100644 modules/home/soispha/conf/taskwarrior/nord.theme delete mode 100644 modules/home/soispha/conf/taskwarrior/projects/default.nix delete mode 100644 modules/home/soispha/conf/timewarrior/default.nix delete mode 100644 modules/home/soispha/conf/timewarrior/nord.theme delete mode 100644 modules/home/soispha/conf/tridactyl/config.vim delete mode 100644 modules/home/soispha/conf/tridactyl/default.nix delete mode 100644 modules/home/soispha/conf/unison/default.nix delete mode 100644 modules/home/soispha/conf/xdg/default.nix delete mode 100755 modules/home/soispha/conf/xdg/url_handler.sh delete mode 100644 modules/home/soispha/conf/xdg/xdg_vars.nix delete mode 100644 modules/home/soispha/conf/yambar/config/config.yml delete mode 100644 modules/home/soispha/conf/yambar/config/laptop.yml delete mode 100644 modules/home/soispha/conf/yambar/default.nix delete mode 100755 modules/home/soispha/conf/yambar/scripts/disk.sh delete mode 100755 modules/home/soispha/conf/yambar/scripts/mpd_song_name.sh delete mode 100755 modules/home/soispha/conf/yambar/scripts/network.sh delete mode 100755 modules/home/soispha/conf/yambar/scripts/sound-volume.sh delete mode 100644 modules/home/soispha/conf/ytcc/default.nix delete mode 100644 modules/home/soispha/conf/ytcc/ytcc.conf delete mode 100644 modules/home/soispha/conf/zsh/config/command_not_found.sh delete mode 100644 modules/home/soispha/conf/zsh/config/command_not_found_insult.sh delete mode 100644 modules/home/soispha/conf/zsh/config/custom_cursor.zsh delete mode 100644 modules/home/soispha/conf/zsh/config/zsh-init.zsh delete mode 100644 modules/home/soispha/conf/zsh/default.nix delete mode 100644 modules/home/soispha/default.nix delete mode 100644 modules/home/soispha/files/default.nix delete mode 100644 modules/home/soispha/files/manifest_json/default.nix delete mode 100644 modules/home/soispha/files/manifest_json/profile/manifest.json delete mode 100644 modules/home/soispha/files/wallpaper/abstract-nord.png delete mode 100644 modules/home/soispha/files/wallpaper/default.nix delete mode 100644 modules/home/soispha/impermanence/default.nix delete mode 100644 modules/home/soispha/pkgs/default.nix delete mode 100644 modules/home/soispha/wms/default.nix delete mode 100644 modules/home/soispha/wms/plasma/default.nix delete mode 100644 modules/home/soispha/wms/river/default.nix delete mode 100755 modules/home/soispha/wms/river/init.sh delete mode 100644 modules/home/soispha/wms/river/res/keys.ron delete mode 100644 modules/home/soispha/wms/river/res/moonlander.ron delete mode 100644 modules/home/soispha/wms/sway/default.nix create mode 100644 modules/home/wms/default.nix create mode 100644 modules/home/wms/plasma/default.nix create mode 100644 modules/home/wms/river/default.nix create mode 100755 modules/home/wms/river/init.sh create mode 100644 modules/home/wms/river/res/keys.ron create mode 100644 modules/home/wms/river/res/moonlander.ron create mode 100644 modules/home/wms/sway/default.nix (limited to 'modules/home') diff --git a/modules/home/conf/alacritty/default.nix b/modules/home/conf/alacritty/default.nix new file mode 100644 index 00000000..c1cf5e44 --- /dev/null +++ b/modules/home/conf/alacritty/default.nix @@ -0,0 +1,30 @@ +{lib, ...}: let + config_file = '' + ${lib.strings.fileContents ./toml/base.toml} + ${lib.strings.fileContents ./toml/bell.toml} + ${lib.strings.fileContents ./toml/colorscheme.toml} + ${lib.strings.fileContents ./toml/cursor.toml} + ${lib.strings.fileContents ./toml/env.toml} + ${lib.strings.fileContents ./toml/font.toml} + ${lib.strings.fileContents ./toml/hints.toml} + ${lib.strings.fileContents ./toml/keyboard_bindings.toml} + ${lib.strings.fileContents ./toml/mouse.toml} + ${lib.strings.fileContents ./toml/mouse_bindings.toml} + ${lib.strings.fileContents ./toml/scrolling.toml} + ${lib.strings.fileContents ./toml/selection.toml} + ${lib.strings.fileContents ./toml/window.toml} + ''; +in { + home.sessionVariables = { + # This is **not** the TERM variable but a special one to signify my favorite terminal. + TERMINAL = "alacritty"; + + # These two here should be set by alacritty at start-up + # TERM = "alacritty"; + # COLORTERM = "truecolor"; + }; + programs.alacritty = { + enable = true; + }; + xdg.configFile."alacritty/alacritty.toml".text = config_file; +} diff --git a/modules/home/conf/alacritty/toml/base.toml b/modules/home/conf/alacritty/toml/base.toml new file mode 100644 index 00000000..93c9942f --- /dev/null +++ b/modules/home/conf/alacritty/toml/base.toml @@ -0,0 +1,16 @@ +# Configuration for Alacritty, the GPU enhanced terminal emulator. + +# If `true`, bold text is drawn using the bright color variants. +#draw_bold_text_with_bright_colors: true # TODO: + +# Live config reload (changes require restart) +live_config_reload = true + +# Startup directory +# +# Directory the shell is started in. If this is unset, or `None`, the working +# directory of the parent process will be used. +#working_directory: None + +# Offer IPC using `alacritty msg` (unix only) +ipc_socket = true diff --git a/modules/home/conf/alacritty/toml/bell.toml b/modules/home/conf/alacritty/toml/bell.toml new file mode 100644 index 00000000..912d08e3 --- /dev/null +++ b/modules/home/conf/alacritty/toml/bell.toml @@ -0,0 +1,7 @@ +# Bell +# +# The bell is rung every time the BEL control character is received. +[bell] +# Duration of the visual bell flash in milliseconds. A `duration` of `0` will +# disable the visual bell animation. +duration = 0 diff --git a/modules/home/conf/alacritty/toml/colorscheme.toml b/modules/home/conf/alacritty/toml/colorscheme.toml new file mode 100644 index 00000000..f98a5b91 --- /dev/null +++ b/modules/home/conf/alacritty/toml/colorscheme.toml @@ -0,0 +1,79 @@ +# Nightfox Alacritty Colors +## name: carbonfox +## upstream: https://github.com/edeneast/nightfox.nvim/raw/main/extra/carbonfox/alacritty.toml + +[colors.primary] +background = "#161616" +foreground = "#f2f4f8" +dim_foreground = "#b6b8bb" +bright_foreground = "#f9fbff" + +[colors.cursor] +text = "#f2f4f8" +cursor = "#b6b8bb" + +[colors.vi_mode_cursor] +text = "#f2f4f8" +cursor = "#33b1ff" + +[colors.search.matches] +foreground = "#f2f4f8" +background = "#525253" + +[colors.search.focused_match] +foreground = "#f2f4f8" +background = "#3ddbd9" + +[colors.footer_bar] +foreground = "#f2f4f8" +background = "#353535" + +[colors.hints.start] +foreground = "#f2f4f8" +background = "#3ddbd9" + +[colors.hints.end] +foreground = "#f2f4f8" +background = "#353535" + +[colors.selection] +text = "#f2f4f8" +background = "#2a2a2a" + +[colors.normal] +black = "#282828" +red = "#ee5396" +green = "#25be6a" +yellow = "#08bdba" +blue = "#78a9ff" +magenta = "#be95ff" +cyan = "#33b1ff" +white = "#dfdfe0" + +[colors.bright] +black = "#484848" +red = "#f16da6" +green = "#46c880" +yellow = "#2dc7c4" +blue = "#8cb6ff" +magenta = "#c8a5ff" +cyan = "#52bdff" +white = "#e4e4e5" + +[colors.dim] +black = "#222222" +red = "#ca4780" +green = "#1fa25a" +yellow = "#07a19e" +blue = "#6690d9" +magenta = "#a27fd9" +cyan = "#2b96d9" +white = "#bebebe" + +[[colors.indexed_colors]] +index = 16 +color = "#3ddbd9" + +[[colors.indexed_colors]] +index = 17 +color = "#ff7eb6" diff --git a/modules/home/conf/alacritty/toml/cursor.toml b/modules/home/conf/alacritty/toml/cursor.toml new file mode 100644 index 00000000..d9cb93f4 --- /dev/null +++ b/modules/home/conf/alacritty/toml/cursor.toml @@ -0,0 +1,11 @@ +[cursor] +blink_interval = 750 +blink_timeout = 5 +thickness = 0.15 +unfocused_hollow = true +vi_mode_style = "None" + +# Cursor style +[cursor.style] +blinking = "On" +shape = "Beam" diff --git a/modules/home/conf/alacritty/toml/env.toml b/modules/home/conf/alacritty/toml/env.toml new file mode 100644 index 00000000..fdd4e5d1 --- /dev/null +++ b/modules/home/conf/alacritty/toml/env.toml @@ -0,0 +1,3 @@ +[env] +TERM = "alacritty" +COLORTERM = "truecolor" diff --git a/modules/home/conf/alacritty/toml/font.toml b/modules/home/conf/alacritty/toml/font.toml new file mode 100644 index 00000000..dd18a6fb --- /dev/null +++ b/modules/home/conf/alacritty/toml/font.toml @@ -0,0 +1,15 @@ +[font] +builtin_box_drawing = true +size = 12.0 + +[font.glyph_offset] +x = -1 +y = -1 + +[font.normal] +family = "SauceCodePro Nerd Font Mono" +style = "Regular" + +[font.offset] +x = -1 +y = -1 diff --git a/modules/home/conf/alacritty/toml/hints.toml b/modules/home/conf/alacritty/toml/hints.toml new file mode 100644 index 00000000..af01dc3e --- /dev/null +++ b/modules/home/conf/alacritty/toml/hints.toml @@ -0,0 +1,25 @@ +[hints] +alphabet = "jfkdls;ahgurieowpq" + +[[hints.enabled]] +command = "xdg-open" # On Linux/BSD +hyperlinks = true +post_processing = true +persist = false +mouse.enabled = true +binding = { key = "U", mods = "Control|Shift" } +regex = "(ipfs:|ipns:|magnet:|mailto:|gemini://|gopher://|https://|http://|news:|file:|git://|ssh:|ftp://)[^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+" + + +[[hints.enabled]] +action = "Paste" +post_processing = false +binding = { key = "T", mods = "Control|Shift" } +regex = '''([^ '"`=:\[\(]*/)([^/: '"`\)\]]*)''' + + +[[hints.enabled]] +action = "Paste" +post_processing = false +binding = { key = "H", mods = "Control|Shift" } +regex = '([a-z0-9]{7})\s' diff --git a/modules/home/conf/alacritty/toml/keyboard_bindings.toml b/modules/home/conf/alacritty/toml/keyboard_bindings.toml new file mode 100644 index 00000000..8e0b1e13 --- /dev/null +++ b/modules/home/conf/alacritty/toml/keyboard_bindings.toml @@ -0,0 +1,297 @@ +[[keyboard.bindings]] +action = "Paste" +key = "P" +mods = "Control" + +[[keyboard.bindings]] +action = "Paste" +key = "Insert" +mods = "Shift" + +[[keyboard.bindings]] +chars = "gc" +key = "Slash" +mods = "Control" + +[[keyboard.bindings]] +action = "Copy" +key = "Y" +mods = "Control" + +[[keyboard.bindings]] +action = "ResetFontSize" +key = "Key0" +mods = "Control" + +[[keyboard.bindings]] +action = "IncreaseFontSize" +key = "Equals" +mods = "Control" + +[[keyboard.bindings]] +action = "IncreaseFontSize" +key = "Plus" +mods = "Control" + +[[keyboard.bindings]] +action = "DecreaseFontSize" +key = "Minus" +mods = "Control" + +[[keyboard.bindings]] +action = "ToggleViMode" +key = "Space" +mods = "Control" + +[[keyboard.bindings]] +action = "ScrollToBottom" +key = "Space" +mode = "Vi" +mods = "Control" + +[[keyboard.bindings]] +action = "ScrollToBottom" +key = "I" +mode = "Vi" + +[[keyboard.bindings]] +action = "ToggleViMode" +key = "I" +mode = "Vi" + +[[keyboard.bindings]] +action = "ScrollToBottom" +key = "C" +mode = "Vi" +mods = "Control" + +[[keyboard.bindings]] +action = "ToggleViMode" +key = "C" +mode = "Vi" +mods = "Control" + +[[keyboard.bindings]] +action = "ClearSelection" +key = "Escape" +mode = "Vi" + +[[keyboard.bindings]] +action = "ScrollLineUp" +key = "Y" +mode = "Vi" +mods = "Control" + +[[keyboard.bindings]] +action = "ScrollLineDown" +key = "E" +mode = "Vi" +mods = "Control" + +[[keyboard.bindings]] +action = "ScrollToTop" +key = "G" +mode = "Vi" + +[[keyboard.bindings]] +action = "ScrollToBottom" +key = "G" +mode = "Vi" +mods = "Shift" + +[[keyboard.bindings]] +action = "ScrollPageUp" +key = "B" +mode = "Vi" +mods = "Control" + +[[keyboard.bindings]] +action = "ScrollPageDown" +key = "F" +mode = "Vi" +mods = "Control" + +[[keyboard.bindings]] +action = "ScrollHalfPageUp" +key = "U" +mode = "Vi" +mods = "Control" + +[[keyboard.bindings]] +action = "ScrollHalfPageDown" +key = "D" +mode = "Vi" +mods = "Control" + +[[keyboard.bindings]] +action = "Copy" +key = "Y" +mode = "Vi" + +[[keyboard.bindings]] +action = "ClearSelection" +key = "Y" +mode = "Vi" + +[[keyboard.bindings]] +action = "ToggleNormalSelection" +key = "V" +mode = "Vi" + +[[keyboard.bindings]] +action = "ToggleLineSelection" +key = "V" +mode = "Vi" +mods = "Shift" + +[[keyboard.bindings]] +action = "ToggleBlockSelection" +key = "V" +mode = "Vi" +mods = "Control" + +[[keyboard.bindings]] +action = "ToggleSemanticSelection" +key = "V" +mode = "Vi" +mods = "Alt" + +[[keyboard.bindings]] +action = "Open" +key = "Return" +mode = "Vi" + +[[keyboard.bindings]] +action = "Up" +key = "K" +mode = "Vi" + +[[keyboard.bindings]] +action = "Down" +key = "J" +mode = "Vi" + +[[keyboard.bindings]] +action = "Left" +key = "H" +mode = "Vi" + +[[keyboard.bindings]] +action = "Right" +key = "L" +mode = "Vi" + +[[keyboard.bindings]] +action = "Up" +key = "Up" +mode = "Vi" + +[[keyboard.bindings]] +action = "Down" +key = "Down" +mode = "Vi" + +[[keyboard.bindings]] +action = "Left" +key = "Left" +mode = "Vi" + +[[keyboard.bindings]] +action = "Right" +key = "Right" +mode = "Vi" + +[[keyboard.bindings]] +action = "First" +key = "Key0" +mode = "Vi" + +[[keyboard.bindings]] +action = "Last" +key = "Key4" +mode = "Vi" + +[[keyboard.bindings]] +action = "FirstOccupied" +key = "Key6" +mode = "Vi" +mods = "Shift" + +[[keyboard.bindings]] +action = "High" +key = "H" +mode = "Vi" +mods = "Shift" + +[[keyboard.bindings]] +action = "Middle" +key = "M" +mode = "Vi" +mods = "Shift" + +[[keyboard.bindings]] +action = "Low" +key = "L" +mode = "Vi" +mods = "Shift" + +[[keyboard.bindings]] +action = "SemanticLeft" +key = "B" +mode = "Vi" + +[[keyboard.bindings]] +action = "SemanticRight" +key = "W" +mode = "Vi" + +[[keyboard.bindings]] +action = "SemanticRightEnd" +key = "E" +mode = "Vi" + +[[keyboard.bindings]] +action = "WordLeft" +key = "B" +mode = "Vi" +mods = "Shift" + +[[keyboard.bindings]] +action = "WordRight" +key = "W" +mode = "Vi" +mods = "Shift" + +[[keyboard.bindings]] +action = "WordRightEnd" +key = "E" +mode = "Vi" +mods = "Shift" + +[[keyboard.bindings]] +action = "Bracket" +key = "Key5" +mode = "Vi" +mods = "Shift" + +[[keyboard.bindings]] +action = "SearchForward" +key = "Slash" +mode = "Vi" + +[[keyboard.bindings]] +action = "SearchBackward" +key = "Slash" +mode = "Vi" +mods = "Shift" + +[[keyboard.bindings]] +action = "SearchNext" +key = "N" +mode = "Vi" + +[[keyboard.bindings]] +action = "SearchPrevious" +key = "N" +mode = "Vi" +mods = "Shift" diff --git a/modules/home/conf/alacritty/toml/mouse.toml b/modules/home/conf/alacritty/toml/mouse.toml new file mode 100644 index 00000000..eba68edf --- /dev/null +++ b/modules/home/conf/alacritty/toml/mouse.toml @@ -0,0 +1,2 @@ +[mouse] +hide_when_typing = false diff --git a/modules/home/conf/alacritty/toml/mouse_bindings.toml b/modules/home/conf/alacritty/toml/mouse_bindings.toml new file mode 100644 index 00000000..1b281748 --- /dev/null +++ b/modules/home/conf/alacritty/toml/mouse_bindings.toml @@ -0,0 +1,3 @@ +[[mouse.bindings]] +action = "Copy" +mouse = "Middle" diff --git a/modules/home/conf/alacritty/toml/scrolling.toml b/modules/home/conf/alacritty/toml/scrolling.toml new file mode 100644 index 00000000..ed7c22cf --- /dev/null +++ b/modules/home/conf/alacritty/toml/scrolling.toml @@ -0,0 +1,3 @@ +[scrolling] +history = 10000 +multiplier = 3 diff --git a/modules/home/conf/alacritty/toml/selection.toml b/modules/home/conf/alacritty/toml/selection.toml new file mode 100644 index 00000000..60ea0495 --- /dev/null +++ b/modules/home/conf/alacritty/toml/selection.toml @@ -0,0 +1,3 @@ +[selection] +save_to_clipboard = false +semantic_escape_chars = ",│`|:\"' ()[]{}<>\t" diff --git a/modules/home/conf/alacritty/toml/window.toml b/modules/home/conf/alacritty/toml/window.toml new file mode 100644 index 00000000..123b5b7a --- /dev/null +++ b/modules/home/conf/alacritty/toml/window.toml @@ -0,0 +1,18 @@ +[window] +decorations = "none" +decorations_theme_variant = "None" +dynamic_title = true +opacity = 0.9 +startup_mode = "Windowed" +title = "Alacritty" +[window.class] +general = "Alacritty" +instance = "Alacritty" + +[window.dimensions] +columns = 0 +lines = 0 + +[window.padding] +x = 5 +y = 5 diff --git a/modules/home/conf/alacritty/yaml/base.yml b/modules/home/conf/alacritty/yaml/base.yml new file mode 100644 index 00000000..0791a60f --- /dev/null +++ b/modules/home/conf/alacritty/yaml/base.yml @@ -0,0 +1,17 @@ +--- +# Configuration for Alacritty, the GPU enhanced terminal emulator. + +# If `true`, bold text is drawn using the bright color variants. +#draw_bold_text_with_bright_colors: true # TODO: + +# Live config reload (changes require restart) +live_config_reload: true + +# Startup directory +# +# Directory the shell is started in. If this is unset, or `None`, the working +# directory of the parent process will be used. +#working_directory: None + +# Offer IPC using `alacritty msg` (unix only) +ipc_socket: true diff --git a/modules/home/conf/alacritty/yaml/bell.yml b/modules/home/conf/alacritty/yaml/bell.yml new file mode 100644 index 00000000..bd071aeb --- /dev/null +++ b/modules/home/conf/alacritty/yaml/bell.yml @@ -0,0 +1,42 @@ +# Bell +# +# The bell is rung every time the BEL control character is received. +bell: + # Visual Bell Animation + # + # Animation effect for flashing the screen when the visual bell is rung. + # + # Values for `animation`: + # - Ease + # - EaseOut + # - EaseOutSine + # - EaseOutQuad + # - EaseOutCubic + # - EaseOutQuart + # - EaseOutQuint + # - EaseOutExpo + # - EaseOutCirc + # - Linear + #animation: EaseOutExpo + + # Duration of the visual bell flash in milliseconds. A `duration` of `0` will + # disable the visual bell animation. + duration: 0 + + # Visual bell animation color. + #color: '#ffffff' + + # Bell Command + # + # This program is executed whenever the bell is rung. + # + # When set to `command: None`, no command will be executed. + # + # Example: + # command: + # program: notify-send + # args: ["Hello, World!"] + # + # command: + # program: notify-send + # args: ["The bell in alacritty was rung!"] diff --git a/modules/home/conf/alacritty/yaml/colors.yml b/modules/home/conf/alacritty/yaml/colors.yml new file mode 100644 index 00000000..899c660a --- /dev/null +++ b/modules/home/conf/alacritty/yaml/colors.yml @@ -0,0 +1,147 @@ +# Colors (Tomorrow Night) +colors: + # Default colors + primary: + background: '#191919' + foreground: '#d8dee9' + + # Bright and dim foreground colors + # + # The dimmed foreground color is calculated automatically if it is not + # present. If the bright foreground color is not set, or + # `draw_bold_text_with_bright_colors` is `false`, the normal foreground + # color will be used. + #dim_foreground: '#828482' + #bright_foreground: '#eaeaea' + + # Cursor colors + # + # Colors which should be used to draw the terminal cursor. + # + # Allowed values are CellForeground/CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + cursor: + text: '#191919' + cursor: '#d8dee9' + + # Vi mode cursor colors + # + # Colors for the cursor when the vi mode is active. + # + # Allowed values are CellForeground/CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + vi_mode_cursor: + text: CellBackground + cursor: CellForeground + + # Search colors + # + # Colors used for the search bar and match highlighting. + search: + # Allowed values are CellForeground/CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + matches: + foreground: '#000000' + background: '#ffffff' + focused_match: + foreground: '#ffffff' + background: '#000000' + + # Keyboard hints + hints: + # First character in the hint label + # + # Allowed values are CellForeground/CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + start: + foreground: '#1d1f21' + background: '#e9ff5e' + + # All characters after the first one in the hint label + # + # Allowed values are CellForeground/CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + end: + foreground: '#e9ff5e' + background: '#1d1f21' + + # Line indicator + # + # Color used for the indicator displaying the position in history during + # search and vi mode. + # + # By default, these will use the opposing primary color. + #line_indicator: + # foreground: None + # background: None + + # Footer bar + # + # Color used for the footer bar on the bottom, used by search regex input, + # hyperlink URI preview, etc. + # + footer_bar: + background: '#c5c8c6' + foreground: '#1d1f21' + + # Selection colors + # + # Colors which should be used to draw the selection area. + # + # Allowed values are CellForeground/CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + selection: + text: '#191919' + background: '#d8dee9' + + # Normal colors + normal: + black: '#191919' + red: '#b02626' + green: '#40a62f' + yellow: '#f2e635' + blue: '#314ad0' + magenta: '#b30ad0' + cyan: '#32d0fc' + white: '#acadb1' + + # Bright colors + bright: + black: '#36393d' + red: '#ce2727' + green: '#47c930' + yellow: '#fff138' + blue: '#2e4bea' + magenta: '#cc15ed' + cyan: '#54d9ff' + white: '#dbdbdb' + + # Dim colors + # + # If the dim colors are not set, they will be calculated automatically based + # on the `normal` colors. + dim: + black: '#676f78' + red: '#b55454' + green: '#78a670' + yellow: '#faf380' + blue: '#707fd0' + magenta: '#c583d0' + cyan: '#8adaf1' + white: '#e0e3e7' + # Indexed Colors + # + # The indexed colors include all colors from 16 to 256. + # When these are not set, they're filled with sensible defaults. + # + # Example: + # `- { index: 16, color: '#ff00ff' }` + # + #indexed_colors: [] + + # Transparent cell backgrounds + # + # Whether or not `window.opacity` applies to all cell backgrounds or only to + # the default background. When set to `true` all cells will be transparent + # regardless of their background color. + #transparent_background_colors: false # TODO: diff --git a/modules/home/conf/alacritty/yaml/colorscheme.yml b/modules/home/conf/alacritty/yaml/colorscheme.yml new file mode 100644 index 00000000..4e0abfae --- /dev/null +++ b/modules/home/conf/alacritty/yaml/colorscheme.yml @@ -0,0 +1,31 @@ +# Nightfox Alacritty Colors +# Style: carbonfox +# Upstream: https://github.com/edeneast/nightfox.nvim/raw/main/extra/carbonfox/nightfox_alacritty.yml +colors: + # Default colors + primary: + background: '0x161616' + foreground: '0xf2f4f8' + # Normal colors + normal: + black: '0x282828' + red: '0xee5396' + green: '0x25be6a' + yellow: '0x08bdba' + blue: '0x78a9ff' + magenta: '0xbe95ff' + cyan: '0x33b1ff' + white: '0xdfdfe0' + # Bright colors + bright: + black: '0x484848' + red: '0xf16da6' + green: '0x46c880' + yellow: '0x2dc7c4' + blue: '0x8cb6ff' + magenta: '0xc8a5ff' + cyan: '0x52bdff' + white: '0xe4e4e5' + indexed_colors: + - { index: 16, color: '0x3ddbd9' } + - { index: 17, color: '0xff7eb6' } diff --git a/modules/home/conf/alacritty/yaml/cursor.yml b/modules/home/conf/alacritty/yaml/cursor.yml new file mode 100644 index 00000000..ef700ebc --- /dev/null +++ b/modules/home/conf/alacritty/yaml/cursor.yml @@ -0,0 +1,43 @@ +cursor: + # Cursor style + style: + # Cursor shape + # + # Values for `shape`: + # - ▇ Block + # - _ Underline + # - | Beam + shape: Beam + + # Cursor blinking state + # + # Values for `blinking`: + # - Never: Prevent the cursor from ever blinking + # - Off: Disable blinking by default + # - On: Enable blinking by default + # - Always: Force the cursor to always blink + blinking: On + + # Vi mode cursor style + # + # If the vi mode cursor style is `None` or not specified, it will fall back to + # the style of the active value of the normal cursor. + # + # See `cursor.style` for available options. + vi_mode_style: None + + # Cursor blinking interval in milliseconds. + blink_interval: 750 + + # Time after which cursor stops blinking, in seconds. + # + # Specifying '0' will disable timeout for blinking. + blink_timeout: 5 + + # If this is `true`, the cursor will be rendered as a hollow box when the + # window is not focused. + unfocused_hollow: true + + # Thickness of the cursor relative to the cell width as floating point number + # from `0.0` to `1.0`. + thickness: 0.15 diff --git a/modules/home/conf/alacritty/yaml/debug.yml b/modules/home/conf/alacritty/yaml/debug.yml new file mode 100644 index 00000000..2c391da2 --- /dev/null +++ b/modules/home/conf/alacritty/yaml/debug.yml @@ -0,0 +1,29 @@ +#debug: + # Display the time it takes to redraw each frame. + #render_timer: false + + # Keep the log file after quitting Alacritty. + #persistent_logging: false + + # Log level + # + # Values for `log_level`: + # - Off + # - Error + # - Warn + # - Info + # - Debug + # - Trace + #log_level: Warn + + # Renderer override. + # - glsl3 + # - gles2 + # - gles2_pure + #renderer: None + + # Print all received window events. + #print_events: false + + # Highlight window damage information. + #highlight_damage: false diff --git a/modules/home/conf/alacritty/yaml/env.yml b/modules/home/conf/alacritty/yaml/env.yml new file mode 100644 index 00000000..ee7528b7 --- /dev/null +++ b/modules/home/conf/alacritty/yaml/env.yml @@ -0,0 +1,11 @@ +# Any items in the `env` entry below will be added as +# environment variables. Some entries may override variables +# set by alacritty itself. +env: + # TERM variable + # + # This value is used to set the `$TERM` environment variable for + # each instance of Alacritty. If it is not present, alacritty will + # check the local terminfo database and use `alacritty` if it is + # available, otherwise `xterm-256color` is used. + TERM: alacritty diff --git a/modules/home/conf/alacritty/yaml/font.yml b/modules/home/conf/alacritty/yaml/font.yml new file mode 100644 index 00000000..a3fd3b1d --- /dev/null +++ b/modules/home/conf/alacritty/yaml/font.yml @@ -0,0 +1,73 @@ +# Font configuration +font: + # Normal (roman) font face + normal: + # Font family + # + # Default: + # - (macOS) Menlo + # - (Linux/BSD) monospace + # - (Windows) Consolas + # family: Source Code Pro + # family: SauceCodePro Nerd Font + family: SauceCodePro Nerd Font Mono + + # The `style` can be specified to pick a specific face. + style: Regular + + # Bold font face + #bold: + # Font family + # + # If the bold family is not specified, it will fall back to the + # value specified for the normal font. + # family: Source Code Pro + + # The `style` can be specified to pick a specific face. + #style: Bold + + # Italic font face + #italic: + # Font family + # + # If the italic family is not specified, it will fall back to the + # value specified for the normal font. + # family: Source Code Pro + + # The `style` can be specified to pick a specific face. + #style: Italic + + # Bold italic font face + #bold_italic: + # Font family + # + # If the bold italic family is not specified, it will fall back to the + # value specified for the normal font. + # family: Source Code Pro + + # The `style` can be specified to pick a specific face. + #style: Bold Italic + + # Point size + size: 12.0 + + # Offset is the extra space around each character. `offset.y` can be thought + # of as modifying the line spacing, and `offset.x` as modifying the letter + # spacing. + offset: + x: -1 + y: -1 + + # Glyph offset determines the locations of the glyphs within their cells with + # the default being at the bottom. Increasing `x` moves the glyph to the + # right, increasing `y` moves the glyph upward. + glyph_offset: + x: -1 + y: -1 + + # Use built-in font for box drawing characters. + # + # If `true`, Alacritty will use a custom built-in font for box drawing + # characters (Unicode points 2500 - 259f). + # + builtin_box_drawing: true # TODO: diff --git a/modules/home/conf/alacritty/yaml/hints.yml b/modules/home/conf/alacritty/yaml/hints.yml new file mode 100644 index 00000000..8c35548b --- /dev/null +++ b/modules/home/conf/alacritty/yaml/hints.yml @@ -0,0 +1,77 @@ +# Hints +# +# Terminal hints can be used to find text or hyperlink in the visible part of +# the terminal and pipe it to other applications. +hints: + # Keys used for the hint labels. + alphabet: "jfkdls;ahgurieowpq" + + # List with all available hints + # + # Each hint must have any of `regex` or `hyperlinks` field and either an + # `action` or a `command` field. The fields `mouse`, `binding` and + # `post_processing` are optional. + # + # The `hyperlinks` option will cause OSC 8 escape sequence hyperlinks to be + # highlighted. + # + # The fields `command`, `binding.key`, `binding.mods`, `binding.mode` and + # `mouse.mods` accept the same values as they do in the `key_bindings` section. + # + # The `mouse.enabled` field controls if the hint should be underlined while + # the mouse with all `mouse.mods` keys held or the vi mode cursor is above it. + # + # If the `post_processing` field is set to `true`, heuristics will be used to + # shorten the match if there are characters likely not to be part of the hint + # (e.g. a trailing `.`). This is most useful for URIs and applies only to + # `regex` matches. + # + # Values for `action`: + # - Copy + # Copy the hint's text to the clipboard. + # - Paste + # Paste the hint's text to the terminal or search. + # - Select + # Select the hint's text. + # - MoveViModeCursor + # Move the vi mode cursor to the beginning of the hint. + enabled: + - regex: "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\ + [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+" + hyperlinks: true + command: xdg-open + post_processing: true + mouse: + enabled: true + mods: None + binding: + key: U + mods: Control|Shift + + - regex: "([^ '\"`=:\\[\\(]*/)([^/: '\"`\\)\\]]*)" + action: Paste + post_procesing: false + binding: + key: T + mods: Control|Shift + + - regex: "([a-z0-9]{7})\\s" + action: Paste + post_procesing: false + binding: + key: H + mods: Control|Shift + + # multi regex for different purposes: + # 2. UUIDs + # 3. hex (for example signatures) + # 4. IP addresses +# - regex: "([[:alnum:]_$%&+=/@-]+)\ +#|([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\ +#|([0-9a-f]{12,128})\ +#|([[:digit:]]{1,3}.[[:digit:]]{1,3}.[[:digit:]]{1,3}.[[:digit:]]{1,3})" +# action: Copy +# post_processing: false +# binding: +# key: U +# mods: Control|Shift diff --git a/modules/home/conf/alacritty/yaml/key_bindings.yml b/modules/home/conf/alacritty/yaml/key_bindings.yml new file mode 100644 index 00000000..c8be747e --- /dev/null +++ b/modules/home/conf/alacritty/yaml/key_bindings.yml @@ -0,0 +1,382 @@ +# Key bindings +# +# Key bindings are specified as a list of objects. For example, this is the +# default paste binding: +# +# `- { key: V, mods: Control|Shift, action: Paste }` +# +# Each key binding will specify a: +# +# - `key`: Identifier of the key pressed +# +# - A-Z +# - F1-F24 +# - Key0-Key9 +# +# A full list with available key codes can be found here: +# https://docs.rs/winit/*/winit/event/enum.VirtualKeyCode.html#variants +# +# Instead of using the name of the keys, the `key` field also supports using +# the scancode of the desired key. Scancodes have to be specified as a +# decimal number. This command will allow you to display the hex scancodes +# for certain keys: +# +# `showkey --scancodes`. +# +# Then exactly one of: +# +# - `chars`: Send a byte sequence to the running application +# +# The `chars` field writes the specified string to the terminal. This makes +# it possible to pass escape sequences. To find escape codes for bindings +# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside +# of tmux. Note that applications use terminfo to map escape sequences back +# to keys. It is therefore required to update the terminfo when changing an +# escape sequence. +# +# - `action`: Execute a predefined action +# +# - ToggleViMode +# - SearchForward +# Start searching toward the right of the search origin. +# - SearchBackward +# Start searching toward the left of the search origin. +# - Copy +# - Paste +# - IncreaseFontSize +# - DecreaseFontSize +# - ResetFontSize +# - ScrollPageUp +# - ScrollPageDown +# - ScrollHalfPageUp +# - ScrollHalfPageDown +# - ScrollLineUp +# - ScrollLineDown +# - ScrollToTop +# - ScrollToBottom +# - ClearHistory +# Remove the terminal's scrollback history. +# - Hide +# Hide the Alacritty window. +# - Minimize +# Minimize the Alacritty window. +# - Quit +# Quit Alacritty. +# - ToggleFullscreen +# - ToggleMaximized +# - SpawnNewInstance +# Spawn a new instance of Alacritty. +# - CreateNewWindow +# Create a new Alacritty window from the current process. +# - ClearLogNotice +# Clear Alacritty's UI warning and error notice. +# - ClearSelection +# Remove the active selection. +# - ReceiveChar +# - None +# +# - Vi mode exclusive actions: +# +# - Open +# Perform the action of the first matching hint under the vi mode cursor +# with `mouse.enabled` set to `true`. +# - ToggleNormalSelection +# - ToggleLineSelection +# - ToggleBlockSelection +# - ToggleSemanticSelection +# Toggle semantic selection based on `selection.semantic_escape_chars`. +# - CenterAroundViCursor +# Center view around vi mode cursor +# +# - Vi mode exclusive cursor motion actions: +# +# - Up +# One line up. +# - Down +# One line down. +# - Left +# One character left. +# - Right +# One character right. +# - First +# First column, or beginning of the line when already at the first column. +# - Last +# Last column, or beginning of the line when already at the last column. +# - FirstOccupied +# First non-empty cell in this terminal row, or first non-empty cell of +# the line when already at the first cell of the row. +# - High +# Top of the screen. +# - Middle +# Center of the screen. +# - Low +# Bottom of the screen. +# - SemanticLeft +# Start of the previous semantically separated word. +# - SemanticRight +# Start of the next semantically separated word. +# - SemanticLeftEnd +# End of the previous semantically separated word. +# - SemanticRightEnd +# End of the next semantically separated word. +# - WordLeft +# Start of the previous whitespace separated word. +# - WordRight +# Start of the next whitespace separated word. +# - WordLeftEnd +# End of the previous whitespace separated word. +# - WordRightEnd +# End of the next whitespace separated word. +# - Bracket +# Character matching the bracket at the cursor's location. +# - SearchNext +# Beginning of the next match. +# - SearchPrevious +# Beginning of the previous match. +# - SearchStart +# Start of the match to the left of the vi mode cursor. +# - SearchEnd +# End of the match to the right of the vi mode cursor. +# +# - Search mode exclusive actions: +# - SearchFocusNext +# Move the focus to the next search match. +# - SearchFocusPrevious +# Move the focus to the previous search match. +# - SearchConfirm +# - SearchCancel +# - SearchClear +# Reset the search regex. +# - SearchDeleteWord +# Delete the last word in the search regex. +# - SearchHistoryPrevious +# Go to the previous regex in the search history. +# - SearchHistoryNext +# Go to the next regex in the search history. +# +# - macOS exclusive actions: +# - ToggleSimpleFullscreen +# Enter fullscreen without occupying another space. +# +# - Linux/BSD exclusive actions: +# +# - CopySelection +# Copy from the selection buffer. +# - PasteSelection +# Paste from the selection buffer. +# +# - `command`: Fork and execute a specified command plus arguments +# +# The `command` field must be a map containing a `program` string and an +# `args` array of command line parameter strings. For example: +# `{ program: "alacritty", args: ["-e", "vttest"] }` +# +# And optionally: +# +# - `mods`: Key modifiers to filter binding actions +# +# - Command +# - Control +# - Option +# - Super +# - Shift +# - Alt +# +# Multiple `mods` can be combined using `|` like this: +# `mods: Control|Shift`. +# Whitespace and capitalization are relevant and must match the example. +# +# - `mode`: Indicate a binding for only specific terminal reported modes +# +# This is mainly used to send applications the correct escape sequences +# when in different modes. +# +# - AppCursor +# - AppKeypad +# - Search +# - Alt +# - Vi +# +# A `~` operator can be used before a mode to apply the binding whenever +# the mode is *not* active, e.g. `~Alt`. +# +# Bindings are always filled by default, but will be replaced when a new +# binding with the same triggers is defined. To unset a default binding, it can +# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for +# a no-op if you do not wish to receive input characters for that binding. +# +# If the same trigger is assigned to multiple actions, all of them are executed +# in the order they were defined in. +key_bindings: +# +# + - { key: P, mods: Control, action: Paste } + - { key: Insert, mods: Shift, action: Paste } + - { key: Slash, mods: Control, chars: "gc" } + - { key: Y, mods: Control, action: Copy } + - { key: Key0, mods: Control, action: ResetFontSize } + - { key: Equals, mods: Control, action: IncreaseFontSize } + - { key: Plus, mods: Control, action: IncreaseFontSize } + - { key: Minus, mods: Control, action: DecreaseFontSize } + + # Vi Mode + - { key: Space, mods: Control, action: ToggleViMode } + - { key: Space, mods: Control, mode: Vi, action: ScrollToBottom } + - { key: I, mode: Vi, action: ScrollToBottom } + - { key: I, mode: Vi, action: ToggleViMode } + - { key: C, mods: Control, mode: Vi, action: ScrollToBottom } + - { key: C, mods: Control, mode: Vi, action: ToggleViMode } + - { key: Escape, mode: Vi, action: ClearSelection } + - { key: Y, mods: Control, mode: Vi, action: ScrollLineUp } + - { key: E, mods: Control, mode: Vi, action: ScrollLineDown } + - { key: G, mode: Vi, action: ScrollToTop } + - { key: G, mods: Shift, mode: Vi, action: ScrollToBottom } + - { key: B, mods: Control, mode: Vi, action: ScrollPageUp } + - { key: F, mods: Control, mode: Vi, action: ScrollPageDown } + - { key: U, mods: Control, mode: Vi, action: ScrollHalfPageUp } + - { key: D, mods: Control, mode: Vi, action: ScrollHalfPageDown } + - { key: Y, mode: Vi, action: Copy } + - { key: Y, mode: Vi, action: ClearSelection } + - { key: V, mode: Vi, action: ToggleNormalSelection } + - { key: V, mods: Shift, mode: Vi, action: ToggleLineSelection } + - { key: V, mods: Control, mode: Vi, action: ToggleBlockSelection } + - { key: V, mods: Alt, mode: Vi, action: ToggleSemanticSelection } + - { key: Return, mode: Vi, action: Open } + - { key: K, mode: Vi, action: Up } + - { key: J, mode: Vi, action: Down } + - { key: H, mode: Vi, action: Left } + - { key: L, mode: Vi, action: Right } + - { key: Up, mode: Vi, action: Up } + - { key: Down, mode: Vi, action: Down } + - { key: Left, mode: Vi, action: Left } + - { key: Right, mode: Vi, action: Right } + - { key: Key0, mode: Vi, action: First } + - { key: Key4, mode: Vi, action: Last } + - { key: Key6, mods: Shift, mode: Vi, action: FirstOccupied } + - { key: H, mods: Shift, mode: Vi, action: High } + - { key: M, mods: Shift, mode: Vi, action: Middle } + - { key: L, mods: Shift, mode: Vi, action: Low } + - { key: B, mode: Vi, action: SemanticLeft } + - { key: W, mode: Vi, action: SemanticRight } + - { key: E, mode: Vi, action: SemanticRightEnd } + - { key: B, mods: Shift, mode: Vi, action: WordLeft } + - { key: W, mods: Shift, mode: Vi, action: WordRight } + - { key: E, mods: Shift, mode: Vi, action: WordRightEnd } + - { key: Key5, mods: Shift, mode: Vi, action: Bracket } + - { key: Slash, mode: Vi, action: SearchForward } + - { key: Slash, mods: Shift, mode: Vi, action: SearchBackward } + - { key: N, mode: Vi, action: SearchNext } + - { key: N, mods: Shift, mode: Vi, action: SearchPrevious } +# +# +# + #- { key: Paste, action: Paste } + #- { key: Copy, action: Copy } + #- { key: L, mods: Control, action: ClearLogNotice } + #- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" } + #- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp } + #- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown } + #- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop } + #- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom } + + # Vi Mode + #- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode } + #- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom } + #- { key: Escape, mode: Vi|~Search, action: ClearSelection } + #- { key: I, mode: Vi|~Search, action: ToggleViMode } + #- { key: I, mode: Vi|~Search, action: ScrollToBottom } + #- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode } + #- { key: Y, mods: Control, mode: Vi|~Search, action: ScrollLineUp } + #- { key: E, mods: Control, mode: Vi|~Search, action: ScrollLineDown } + #- { key: G, mode: Vi|~Search, action: ScrollToTop } + #- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom } + #- { key: B, mods: Control, mode: Vi|~Search, action: ScrollPageUp } + #- { key: F, mods: Control, mode: Vi|~Search, action: ScrollPageDown } + #- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp } + #- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown } + #- { key: Y, mode: Vi|~Search, action: Copy } + #- { key: Y, mode: Vi|~Search, action: ClearSelection } + #- { key: Copy, mode: Vi|~Search, action: ClearSelection } + #- { key: V, mode: Vi|~Search, action: ToggleNormalSelection } + #- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection } + #- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection } + #- { key: V, mods: Alt, mode: Vi|~Search, action: ToggleSemanticSelection } + #- { key: Return, mode: Vi|~Search, action: Open } + #- { key: Z, mode: Vi|~Search, action: CenterAroundViCursor } + #- { key: K, mode: Vi|~Search, action: Up } + #- { key: J, mode: Vi|~Search, action: Down } + #- { key: H, mode: Vi|~Search, action: Left } + #- { key: L, mode: Vi|~Search, action: Right } + #- { key: Up, mode: Vi|~Search, action: Up } + #- { key: Down, mode: Vi|~Search, action: Down } + #- { key: Left, mode: Vi|~Search, action: Left } + #- { key: Right, mode: Vi|~Search, action: Right } + #- { key: Key0, mode: Vi|~Search, action: First } + #- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last } + #- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied } + #- { key: H, mods: Shift, mode: Vi|~Search, action: High } + #- { key: M, mods: Shift, mode: Vi|~Search, action: Middle } + #- { key: L, mods: Shift, mode: Vi|~Search, action: Low } + #- { key: B, mode: Vi|~Search, action: SemanticLeft } + #- { key: W, mode: Vi|~Search, action: SemanticRight } + #- { key: E, mode: Vi|~Search, action: SemanticRightEnd } + #- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft } + #- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight } + #- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd } + #- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket } + #- { key: Slash, mode: Vi|~Search, action: SearchForward } + #- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward } + #- { key: N, mode: Vi|~Search, action: SearchNext } + #- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious } + + # Search Mode + #- { key: Return, mode: Search|Vi, action: SearchConfirm } + #- { key: Escape, mode: Search, action: SearchCancel } + #- { key: C, mods: Control, mode: Search, action: SearchCancel } + #- { key: U, mods: Control, mode: Search, action: SearchClear } + #- { key: W, mods: Control, mode: Search, action: SearchDeleteWord } + #- { key: P, mods: Control, mode: Search, action: SearchHistoryPrevious } + #- { key: N, mods: Control, mode: Search, action: SearchHistoryNext } + #- { key: Up, mode: Search, action: SearchHistoryPrevious } + #- { key: Down, mode: Search, action: SearchHistoryNext } + #- { key: Return, mode: Search|~Vi, action: SearchFocusNext } + #- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious } + + # (Windows, Linux, and BSD only) + #- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste } + #- { key: C, mods: Control|Shift, action: Copy } + #- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward } + #- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward } + #- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection } + #- { key: Insert, mods: Shift, action: PasteSelection } + #- { key: Key0, mods: Control, action: ResetFontSize } + #- { key: Equals, mods: Control, action: IncreaseFontSize } + #- { key: Plus, mods: Control, action: IncreaseFontSize } + #- { key: NumpadAdd, mods: Control, action: IncreaseFontSize } + #- { key: Minus, mods: Control, action: DecreaseFontSize } + #- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize } + + # (Windows only) + #- { key: Return, mods: Alt, action: ToggleFullscreen } + + # (macOS only) + #- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" } + #- { key: K, mods: Command, mode: ~Vi|~Search, action: ClearHistory } + #- { key: Key0, mods: Command, action: ResetFontSize } + #- { key: Equals, mods: Command, action: IncreaseFontSize } + #- { key: Plus, mods: Command, action: IncreaseFontSize } + #- { key: NumpadAdd, mods: Command, action: IncreaseFontSize } + #- { key: Minus, mods: Command, action: DecreaseFontSize } + #- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize } + #- { key: V, mods: Command, action: Paste } + #- { key: C, mods: Command, action: Copy } + #- { key: C, mods: Command, mode: Vi|~Search, action: ClearSelection } + #- { key: H, mods: Command, action: Hide } + #- { key: H, mods: Command|Alt, action: HideOtherApplications } + #- { key: M, mods: Command, action: Minimize } + #- { key: Q, mods: Command, action: Quit } + #- { key: W, mods: Command, action: Quit } + #- { key: N, mods: Command, action: CreateNewWindow } + #- { key: F, mods: Command|Control, action: ToggleFullscreen } + #- { key: F, mods: Command, mode: ~Search, action: SearchForward } + #- { key: B, mods: Command, mode: ~Search, action: SearchBackward } diff --git a/modules/home/conf/alacritty/yaml/mouse.yml b/modules/home/conf/alacritty/yaml/mouse.yml new file mode 100644 index 00000000..4bdb408b --- /dev/null +++ b/modules/home/conf/alacritty/yaml/mouse.yml @@ -0,0 +1,11 @@ +mouse: + # Click settings + # + # The `double_click` and `triple_click` settings control the time + # alacritty should wait for accepting multiple clicks as one double + # or triple click. + double_click: { threshold: 300 } + triple_click: { threshold: 300 } + + # If this is `true`, the cursor is temporarily hidden when typing. + hide_when_typing: false diff --git a/modules/home/conf/alacritty/yaml/mouse_bindings.yml b/modules/home/conf/alacritty/yaml/mouse_bindings.yml new file mode 100644 index 00000000..ab244d21 --- /dev/null +++ b/modules/home/conf/alacritty/yaml/mouse_bindings.yml @@ -0,0 +1,32 @@ +# Mouse bindings +# +# Mouse bindings are specified as a list of objects, much like the key +# bindings further below. +# +# To trigger mouse bindings when an application running within Alacritty +# captures the mouse, the `Shift` modifier is automatically added as a +# requirement. +# +# Each mouse binding will specify a: +# +# - `mouse`: +# +# - Middle +# - Left +# - Right +# - Numeric identifier such as `5` +# +# - `action` (see key bindings for actions not exclusive to mouse mode) +# +# - Mouse exclusive actions: +# +# - ExpandSelection +# Expand the selection to the current mouse cursor location. +# +# And optionally: +# +# - `mods` (see key bindings) +mouse_bindings: +# - { mouse: Right, action: ExpandSelection } +# - { mouse: Right, mods: Control, action: ExpandSelection } + - { mouse: Middle, action: Copy } diff --git a/modules/home/conf/alacritty/yaml/scrolling.yml b/modules/home/conf/alacritty/yaml/scrolling.yml new file mode 100644 index 00000000..50365627 --- /dev/null +++ b/modules/home/conf/alacritty/yaml/scrolling.yml @@ -0,0 +1,7 @@ +scrolling: + # Maximum number of lines in the scrollback buffer. + # Specifying '0' will disable scrolling. + history: 10000 + + # Scrolling distance multiplier. + multiplier: 3 diff --git a/modules/home/conf/alacritty/yaml/selection.yml b/modules/home/conf/alacritty/yaml/selection.yml new file mode 100644 index 00000000..5e5bd544 --- /dev/null +++ b/modules/home/conf/alacritty/yaml/selection.yml @@ -0,0 +1,7 @@ +selection: + # This string contains all characters that are used as separators for + # "semantic words" in Alacritty. + semantic_escape_chars: ",│`|:\"' ()[]{}<>\t" + + # When set to `true`, selected text will be copied to the primary clipboard. + save_to_clipboard: false diff --git a/modules/home/conf/alacritty/yaml/shell.yml b/modules/home/conf/alacritty/yaml/shell.yml new file mode 100644 index 00000000..04844dd0 --- /dev/null +++ b/modules/home/conf/alacritty/yaml/shell.yml @@ -0,0 +1,13 @@ +# Shell +# +# You can set `shell.program` to the path of your favorite shell, e.g. +# `/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the +# shell. +# +# Default: +# - (Linux/BSD/macOS) `$SHELL` or the user's login shell, if `$SHELL` is unset +# - (Windows) powershell +#shell: +# program: /bin/bash +# args: +# - --login diff --git a/modules/home/conf/alacritty/yaml/window.yml b/modules/home/conf/alacritty/yaml/window.yml new file mode 100644 index 00000000..7b89b6ed --- /dev/null +++ b/modules/home/conf/alacritty/yaml/window.yml @@ -0,0 +1,89 @@ +window: + # Window dimensions (changes require restart) + # + # Number of lines/columns (not pixels) in the terminal. Both lines and columns + # must be non-zero for this to take effect. The number of columns must be at + # least `2`, while using a value of `0` for columns and lines will fall back + # to the window manager's recommended size + dimensions: + columns: 0 + lines: 0 + + # Window position (changes require restart) + # + # Specified in number of pixels. + # If the position is not set, the window manager will handle the placement. + #position: + # x: 0 + # y: 0 + + # Window padding (changes require restart) + # + # Blank space added around the window in pixels. This padding is scaled + # by DPI and the specified value is always added at both opposing sides. + padding: + x: 5 + y: 5 + + # Spread additional padding evenly around the terminal content. + #dynamic_padding: false + + # Window decorations + # + # Values for `decorations`: + # - full: Borders and title bar + # - none: Neither borders nor title bar + # + # Values for `decorations` (macOS only): + # - transparent: Title bar, transparent background and title bar buttons + # - buttonless: Title bar, transparent background and no title bar buttons + decorations: none + + # Background opacity + # + # Window opacity as a floating point number from `0.0` to `1.0`. + # The value `0.0` is completely transparent and `1.0` is opaque. + opacity: 0.9 + + # Startup Mode (changes require restart) + # + # Values for `startup_mode`: + # - Windowed + # - Maximized + # - Fullscreen + # + # Values for `startup_mode` (macOS only): + # - SimpleFullscreen + startup_mode: Windowed + + # Window title + title: Alacritty + + # Allow terminal applications to change Alacritty's window title. + dynamic_title: true + + # Window class (Linux/BSD only): + class: + # Application instance name + instance: Alacritty + # General application class + general: Alacritty + + # Decorations theme variant + # + # Override the variant of the System theme/GTK theme/Wayland client side + # decorations. Commonly supported values are `Dark`, `Light`, and `None` for + # auto pick-up. Set this to `None` to use the default theme variant. + decorations_theme_variant: None + + # Resize increments + # + # Prefer resizing window by discrete steps equal to cell dimensions. + #resize_increments: false + + # Make `Option` key behave as `Alt` (macOS only): + # - OnlyLeft + # - OnlyRight + # - Both + # - None (default) + #option_as_alt: None diff --git a/modules/home/conf/btop/default.nix b/modules/home/conf/btop/default.nix new file mode 100644 index 00000000..06b56ea7 --- /dev/null +++ b/modules/home/conf/btop/default.nix @@ -0,0 +1,5 @@ +{config, ...}: { + programs.btop = { + enable = true; + }; +} diff --git a/modules/home/conf/dconf/default.nix b/modules/home/conf/dconf/default.nix new file mode 100644 index 00000000..dc439e1e --- /dev/null +++ b/modules/home/conf/dconf/default.nix @@ -0,0 +1,9 @@ +{...}: { + # Also see: https://github.com/gvolpe/dconf2nix + dconf.settings = { + "org/gnome/desktop/wm/preferences" = { + # hide gtk buttons in titelbar + button-layout = ""; + }; + }; +} diff --git a/modules/home/conf/default.nix b/modules/home/conf/default.nix new file mode 100644 index 00000000..b58e3153 --- /dev/null +++ b/modules/home/conf/default.nix @@ -0,0 +1,47 @@ +{...}: { + imports = [ + ./alacritty + ./btop + ./dconf + ./direnv + ./firefox + ./gammastep + ./git + ./gpg + ./gtk + ./himalaya + ./hyfetch + ./iamb + ./keepassxc + ./latexindent + ./less + ./lf + ./mail + ./mako + ./mbsync + ./mpd + ./mpv + ./mumble + ./neomutt + ./nheko + ./nix-index + ./npm + ./nvim + ./prusa_slicer + ./python + ./rclone + ./rofi + ./ssh + ./starship + ./swayidle + ./swaylock + ./taskwarrior + ./timewarrior + ./tridactyl + ./unison + ./xdg + ./yambar + ./ytcc + ./zsh + ]; +} diff --git a/modules/home/conf/direnv/default.nix b/modules/home/conf/direnv/default.nix new file mode 100644 index 00000000..3a7b8add --- /dev/null +++ b/modules/home/conf/direnv/default.nix @@ -0,0 +1,6 @@ +{...}: { + programs.direnv = { + enable = true; + nix-direnv.enable = true; + }; +} diff --git a/modules/home/conf/firefox/config/bookmarks/default.nix b/modules/home/conf/firefox/config/bookmarks/default.nix new file mode 100644 index 00000000..c612bf4d --- /dev/null +++ b/modules/home/conf/firefox/config/bookmarks/default.nix @@ -0,0 +1,31 @@ +{ + lib, + pkgs, + ... +}: let + bookmarks = [ + { + name = "Feed - Piped"; + url = "https://piped.video/feed"; + } + + { + name = "DeepL Translate"; + url = "https://www.deepl.com/translator"; + } + + { + name = "Nix lib"; + url = "https://teu5us.github.io/nix-lib.html"; + } + + { + name = "Nixpkgs manual"; + url = "https://ryantm.github.io/nixpkgs/"; + } + ]; + + mkBookmarksFile = (import ./lib.nix) {inherit lib pkgs;}; + bookmarks_file = mkBookmarksFile bookmarks; +in + bookmarks_file diff --git a/modules/home/conf/firefox/config/bookmarks/lib.nix b/modules/home/conf/firefox/config/bookmarks/lib.nix new file mode 100644 index 00000000..d1d89dd2 --- /dev/null +++ b/modules/home/conf/firefox/config/bookmarks/lib.nix @@ -0,0 +1,49 @@ +{ + lib, + pkgs, +}: bookmarks: let + indent = level: + lib.concatStringsSep "" (map (lib.const " ") (lib.range 1 level)); + + bookmarkToHTML = indentLevel: bookmark: '' + ${indent indentLevel}
${lib.escapeXML bookmark.name}''; + + directoryToHTML = indentLevel: directory: '' + ${indent indentLevel}
${ + if directory.toolbar + then ''

Bookmarks Toolbar'' + else "

${lib.escapeXML directory.name}" + }

+ ${indent indentLevel}

+ ${allItemsToHTML (indentLevel + 1) directory.bookmarks} + ${indent indentLevel}

''; + + itemToHTMLOrRecurse = indentLevel: item: + if item ? "url" + then bookmarkToHTML indentLevel item + else directoryToHTML indentLevel item; + + allItemsToHTML = indentLevel: bookmarks: + lib.concatStringsSep "\n" + (map (itemToHTMLOrRecurse indentLevel) bookmarks); + + bookmarkEntries = allItemsToHTML 1 bookmarks; +in + pkgs.writeText "firefox-bookmarks.html" '' + + + + Bookmarks +

Bookmarks Menu

+ +

+

Bookmarks Toolbar

+

+ ${bookmarkEntries} +

+

+ '' diff --git a/modules/home/conf/firefox/config/chrome/userChrome.css b/modules/home/conf/firefox/config/chrome/userChrome.css new file mode 100644 index 00000000..0b3aff77 --- /dev/null +++ b/modules/home/conf/firefox/config/chrome/userChrome.css @@ -0,0 +1,41 @@ +/* thickness of tab when you have too many open tabs */ +.tabbrowser-tab:not([pinned="true"]) { + min-width: 10px !important; + min-height: 10px !important; +} + +/* tab height +#TabsToolbar .tabbrowser-tabs { +min-height: 10px !important; +} +*/ + +/* +.tabbrowser-tab {min-width: 016px !important;} +.tabbrowser-tab {clip-width: 016px !important;} +*/ + +/* the + button that opens new tabs */ +#TabsToolbar .tabs-newtab-button { + margin-left: 10px !important; + height: Auto !important; +} + +#main-window[privatebrowsingmode="temporary"] #navigator-toolbox { + background-color: #c40944 !important; +} + +/* close button inside a tab */ +.tab-close-button * { + width: 10px !important; + height: 10px !important; +} + +/* bookmark toolbar */ +#personal-bookmarks .bookmark-item > .toolbarbutton-text { + font-size: 10pt !important; +} +#personal-bookmarks .bookmark-item > .toolbarbutton-icon { + height: 12px !important; + width: 12px !important; +} diff --git a/modules/home/conf/firefox/config/extensions/extensions.json b/modules/home/conf/firefox/config/extensions/extensions.json new file mode 100644 index 00000000..ee48b100 --- /dev/null +++ b/modules/home/conf/firefox/config/extensions/extensions.json @@ -0,0 +1,50 @@ +{ + "darkreader": { + "addonId": "addon@darkreader.org", + "default_area": "navbar", + "pname": "darkreader", + "sha256": "sha256:d418b40fc2cb69cfffabf6cc291f2cc5ca4c9d6a99e46562b44f4e2c0148374c", + "url": "https://addons.mozilla.org/firefox/downloads/file/4278339/darkreader-4.9.84.xpi", + "version": "4.9.84" + }, + "keepassxc-browser": { + "addonId": "keepassxc-browser@keepassxc.org", + "default_area": "navbar", + "pname": "keepassxc-browser", + "sha256": "sha256:f153b29f6a05f7cb1fc83952f75f55e803573229800df737fa831d1f877c943e", + "url": "https://addons.mozilla.org/firefox/downloads/file/4257616/keepassxc_browser-1.9.0.3.xpi", + "version": "1.9.0.3" + }, + "torproject-snowflake": { + "addonId": "{b11bea1f-a888-4332-8d8a-cec2be7d24b9}", + "default_area": "navbar", + "pname": "torproject-snowflake", + "sha256": "sha256:3cc8974834ecc2a3e5a5b26eb6aa2634187f4b7386694d50bec2b9f825ab87af", + "url": "https://addons.mozilla.org/firefox/downloads/file/4270088/torproject_snowflake-0.8.1.xpi", + "version": "0.8.1" + }, + "tridactyl-vim": { + "addonId": "tridactyl.vim@cmcaine.co.uk", + "default_area": "menupanel", + "pname": "tridactyl-vim", + "sha256": "sha256:ab63fe1554471c280f234409393172fc58e1bb2ca527f4329d983b028073e19c", + "url": "https://addons.mozilla.org/firefox/downloads/file/4261352/tridactyl_vim-1.24.1.xpi", + "version": "1.24.1" + }, + "ublock-origin": { + "addonId": "uBlock0@raymondhill.net", + "default_area": "menupanel", + "pname": "ublock-origin", + "sha256": "sha256:9928e79a52cecf7cfa231fdb0699c7d7a427660d94eb10d711ed5a2f10d2eb89", + "url": "https://addons.mozilla.org/firefox/downloads/file/4261710/ublock_origin-1.57.2.xpi", + "version": "1.57.2" + }, + "vhack-libredirect": { + "addonId": "vhack-libredirect@addons.vhack.eu", + "default_area": "navbar", + "pname": "vhack-libredirect", + "sha256": "sha256:7d40f924808202161a03863a6775f469674c344b4079ff77e3f8c149aa41323d", + "url": "https://addons.mozilla.org/firefox/downloads/file/4186145/vhack_libredirect-2.8.3.xpi", + "version": "2.8.3" + } +} diff --git a/modules/home/conf/firefox/config/extensions/native_messaging_hosts/default.nix b/modules/home/conf/firefox/config/extensions/native_messaging_hosts/default.nix new file mode 100644 index 00000000..9aaa1682 --- /dev/null +++ b/modules/home/conf/firefox/config/extensions/native_messaging_hosts/default.nix @@ -0,0 +1,15 @@ +{pkgs, ...}: +/* +++ lib.optional (cfg.enableBrowserpass or false) (lib.getBin browserpass) +++ lib.optional (cfg.enableBukubrow or false) bukubrow +++ lib.optional (cfg.enableTridactylNative or false) tridactyl-native +++ lib.optional (cfg.enableGnomeExtensions or false) gnome-browser-connector +++ lib.optional (cfg.enableUgetIntegrator or false) uget-integrator +++ lib.optional (cfg.enablePlasmaBrowserIntegration or false) plasma5Packages.plasma-browser-integration +++ lib.optional (cfg.enableFXCastBridge or false) fx-cast-bridge +++ lib.optional (cfg.enableKeePassXC or false) keepassxc +*/ +with pkgs; [ + tridactyl-native + keepassxc +] diff --git a/modules/home/conf/firefox/config/policies/default.nix b/modules/home/conf/firefox/config/policies/default.nix new file mode 100644 index 00000000..02c740f6 --- /dev/null +++ b/modules/home/conf/firefox/config/policies/default.nix @@ -0,0 +1,146 @@ +{ + config, + extensions, + ... +}: let + locals = [ + "en-CA" + "de" + "sv-SE" + ]; + mkAllowedExtension = extension: { + name = extension.addonId; + value = { + installation_mode = "normal_installed"; + updates_disabled = true; + inherit (extension) default_area; + install_url = "file://${builtins.fetchurl { + inherit + (extension) + url + sha256 + ; + }}"; + }; + }; + allowedExtensions = + builtins.listToAttrs + (builtins.map mkAllowedExtension (builtins.attrValues + extensions)); + + mkBlockedExtension = id: { + name = id; + value = { + install_mode = "blocked"; + }; + }; + blockedExtensions = builtins.listToAttrs (builtins.map mkBlockedExtension [ + # these are the default search engines + "addons-search-detection@mozilla.com" + "amazon@search.mozilla.org" + "bing@search.mozilla.org" + "ddg@search.mozilla.org" + "google@search.mozilla.org" + "wikipedia@search.mozilla.org" + ]); + + language_packs = builtins.listToAttrs (builtins.map + ( + lang: { + name = "langpack-${lang}@firefox.mozilla.org"; + value = { + installation_mode = "normal_installed"; + updates_disabled = true; + install_url = "https://releases.mozilla.org/pub/firefox/releases/${config.soispha.firefox.package_version}/linux-x86_64/xpi/${lang}.xpi"; + }; + } + ) + locals); +in { + # NOTE: See https://mozilla.github.io/policy-templates for documentation <2023-10-21> + policies = { + # NixOS manages this already + DisableAppUpdate = true; + + DisableFirefoxAccounts = true; + DisableFirefoxScreenshots = true; + + # KeepassXC does this for me + DisableMasterPasswordCreation = true; + + # I use a self-hosted services for that + DisablePocket = true; + + # I don't want to lose my data + DisableProfileRefresh = true; + + DisableDeveloperTools = false; + + DisplayBookmarksToolbar = "newtab"; + DisplayMenuBar = "default-off"; + + DNSOverHTTPS = { + Enabled = true; + Locked = false; + }; + # The concept of a "default browser" does not apply to my NixOS config + DontCheckDefaultBrowser = true; + + EnableTrackingProtection = { + Value = true; + Locked = false; + Cryptomining = true; + Fingerprinting = true; + EmailTracking = true; + }; + + EncryptedMediaExtensions = { + # I want a _free_ config (and I can always just run another browser) + Enabled = false; + Locked = true; + }; + + ExtensionSettings = + { + "*" = { + # Blocking the extension install here, also blocks the 'about:debugging' page + + # blocked_install_message = '' + # You can't install a extension manually, + # please specify it in your NixOS configuration + # ''; + installation_mode = "allowed"; + }; + } + // allowedExtensions + // blockedExtensions + // language_packs; + + ExtensionUpdate = false; + + # TODO: Add handlers for the default file types <2023-10-21> + # Handlers = { + # }; + + HardwareAcceleration = true; + + # Blocking the extension install here, also blocks the 'about:debugging' page + # InstallAddonsPermission = { + # Allowed = []; + # Default = false; + # }; + + # KeepassXC and such things + OfferToSaveLogins = false; + PasswordManagerEnabled = false; + + PDFjs = { + Enabled = true; + # Don't honor documents right to be un-copy-able + EnablePermissions = false; + }; + + SearchBar = "unified"; + RequestedLocales = locals; + }; +} diff --git a/modules/home/conf/firefox/config/prefs/default.nix b/modules/home/conf/firefox/config/prefs/default.nix new file mode 100644 index 00000000..80c6d274 --- /dev/null +++ b/modules/home/conf/firefox/config/prefs/default.nix @@ -0,0 +1,21 @@ +{ + pkgs, + config, + user_js, + bookmarks, + ... +}: let + user_js_override = pkgs.writeText "user.override.js" (builtins.readFile ./override.js); +in + pkgs.runCommand "user.js" {} '' + mkdir $out; + cat "${user_js}/user.js" > $out/user.js; + cat "${user_js_override}" >> $out/user.js; + + cat << EOF >> $out/user.js; + // My bookmarks + user_pref("browser.bookmarks.file", "${toString bookmarks}"); + user_pref("browser.startup.homepage", "file:///home/dt/home.html"); // 0103 // TODO: add this from a flake + user_pref("browser.download.dir", "${config.xdg.userDirs.download}"); + EOF + '' diff --git a/modules/home/conf/firefox/config/prefs/override.js b/modules/home/conf/firefox/config/prefs/override.js new file mode 100644 index 00000000..bf874b33 --- /dev/null +++ b/modules/home/conf/firefox/config/prefs/override.js @@ -0,0 +1,202 @@ +/* + 0100: STARTUP + 0200: GEOLOCATION / LANGUAGE / LOCALE + 0300: QUIETER FOX + 0400: SAFE BROWSING + 0600: BLOCK IMPLICIT OUTBOUND + 0700: DNS / DoH / PROXY / SOCKS / IPv6 + 0800: LOCATION BAR / SEARCH BAR / SUGGESTIONS / HISTORY / FORMS + 0900: PASSWORDS + 1000: DISK AVOIDANCE + 1200: HTTPS (SSL/TLS / OCSP / CERTS / HPKP) + 1400: FONTS + 1600: HEADERS / REFERERS + 1700: CONTAINERS + 2000: PLUGINS / MEDIA / WEBRTC + 2400: DOM (DOCUMENT OBJECT MODEL) + 2600: MISCELLANEOUS + 2700: ETP (ENHANCED TRACKING PROTECTION) + 2800: SHUTDOWN & SANITIZING + 4500: RFP (RESIST FINGERPRINTING) + 5000: OPTIONAL OPSEC + 5500: OPTIONAL HARDENING + 6000: DON'T TOUCH + 7000: DON'T BOTHER + 8000: DON'T BOTHER: FINGERPRINTING + 9000: NON-PROJECT RELATED + 9999: DEPRECATED / REMOVED / LEGACY / RENAMED +*/ + + +// restore session +user_pref("browser.startup.page", 3); // 0102 + +user_pref("browser.newtabpage.enabled", true); // 0104 + +// disable the geoservice, TODO: don't know if I want this +//user_pref("geo.provider.use_geoclue", false); // 0202 + +// TODO: is this something useful? +user_pref("datareporting.policy.dataSubmissionEnabled", true); // 0330 + +// enable health reports +user_pref("datareporting.healthreport.uploadEnabled", true); // 0331 + +// Do I want to opt-out? +user_pref("toolkit.telemetry.coverage.opt-out", false); // 0333 + +// enables studies +user_pref("app.shield.optoutstudies.enabled", true); // 0340 + +// I guess that browsing protection is useful +user_pref("browser.safebrowsing.downloads.remote.enabled", true); // 0403 + +// TODO: does this (-> set to false) make things slower? +user_pref("network.prefetch-next", true); // 0601 + +// enable ipv6 because the rest of the system uses it +user_pref("network.dns.disableIPv6", false); // 0701 + +// TRR only +user_pref("network.trr.mode", 3); // 0710 + +// I trust my search engine +user_pref("keyword.enabled", true); // 801 +user_pref("browser.search.suggest.enabled", true); // 0804 +user_pref("browser.urlbar.suggest.searches", true); // 0804 +// TODO: no idea what this does, enabling it +user_pref("browser.urlbar.showSearchTerms.enabled", true); // 9004 + +// prefetch urls, if the get auto completed +user_pref("browser.urlbar.speculativeConnect.enabled", true); // 0805 + +// Disable autoScrolling (clicking with the mouse wheel) +user_pref("general.autoScroll", false); + +// add new tabs after the current one +user_pref("browser.tabs.insertAfterCurrent", true); + +// TODO: I might want to enable this +//user_pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false); // 0807 + +// TODO: enable form and search history? +//user_pref("browser.formfill.enable", false); // 0810 + +// disk cache should help performance +user_pref("browser.cache.disk.enable", true); // 1001 + +// store extra session data (form content, cookies and POST data) 0: everywhere +user_pref("browser.sessionstore.privacy_level", 0); // 1003 + +// Disable unsafe passive content (images) on https sites +user_pref("security.mixed_content.block_display_content", true); // 1241 + +// Disable the eme banner +user_pref("browser.eme.ui.enabled", false); // 2022 + +// Don't delete my precious temp files +user_pref("browser.helperApps.deleteTempFileOnExit", false); // 2603 + +// Download to the download dir +user_pref("browser.download.useDownloadDir", true); // 2651 + +// Open the download panel +user_pref("browser.download.alwaysOpenPanel", true); // 2652 + +// Block after custom ruleset +user_pref("browser.contentblocking.category", "custom"); // 2701 + +// set the custom settings // 7016 +user_pref("network.cookie.cookieBehavior", 1); +user_pref("network.http.referer.disallowCrossSiteRelaxingDefault", true); +user_pref("network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation", true); +user_pref("privacy.partition.network_state.ocsp_cache", true); +user_pref("privacy.query_stripping.enabled", true); +user_pref("privacy.trackingprotection.enabled", true); +user_pref("privacy.trackingprotection.socialtracking.enabled", true); +user_pref("privacy.trackingprotection.cryptomining.enabled", true); +user_pref("privacy.trackingprotection.fingerprinting.enabled", true); + + +// I might want to change that, when it hinders session restore +//user_pref("privacy.partition.always_partition_third_party_non_cookie_storage.exempt_sessionstorage", false); // 2720 + +// I like my history very much! +user_pref("privacy.sanitize.sanitizeOnShutdown", false); // 2810 + +// The downsides (light theme + potential breakages): +//user_pref("privacy.resistFingerprinting", true); // 4501 +user_pref("privacy.resistFingerprinting.letterboxing", false); // 4504 + +// I would like to keep my gl, even in the web +user_pref("webgl.disabled", false); // 4520 + +// I like my service workers and am using a service using them. +user_pref("dom.serviceWorkers.enabled", true); // 7017 + +// I've got a password manager already +user_pref("signon.rememberSignons", false); // 5003 + +// Do not track header +user_pref("privacy.donottrackheader.enabled", true); // 7015 + +// Allow my custom css +user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); + +// might improve performance TODO: +user_pref("gfx.webrender.all", true); + +// disable updates (pretty pointless with nix) +user_pref("extensions.update.autoUpdateDefault", false); +user_pref("extensions.update.enabled", false); +user_pref("app.update.channel", "default"); + +user_pref("browser.ctrlTab.recentlyUsedOrder", false); + +user_pref("browser.download.useDownloadDir", true); +user_pref("browser.download.folderList", 2); // TODO: +user_pref("browser.download.viewableInternally.typeWasRegistered.svg", true); +user_pref("browser.download.viewableInternally.typeWasRegistered.webp", true); +user_pref("browser.download.viewableInternally.typeWasRegistered.xml", true); + +// TODO: what does this do? +user_pref("browser.search.widget.inNavBar", true); + +user_pref("browser.shell.checkDefaultBrowser", false); +user_pref("browser.tabs.loadInBackground", true); +user_pref("browser.urlbar.placeholderName", "Brave"); + +// Set the tabs and bookmarks +user_pref("browser.tabs.inTitlebar", 1); +user_pref("browser.toolbars.bookmarks.visibility", "always"); +user_pref("browser.places.importBookmarksHTML", true); + +// Theme +user_pref("extensions.activeThemeID", "firefox-alpenglow@mozilla.org"); +user_pref("extensions.extensions.activeThemeID", "firefox-alpenglow@mozilla.org"); + +// highlight all entries when searching +user_pref("findbar.highlightAll", true); + +// Set the default position for the developer toolbox +user_pref("devtools,toolbox.host", "right"); +user_pref("devtools,toolsidebar-width.inspector", 700); + +// Don't bother me with translations +user_pref("browser.translations.automaticallyPopup", true); +user_pref("browser.translations.neverTranslateLanguages", "de"); + +// Put all downloads into the downloads directory +user_pref("browser.download.start_downloads_in_tmp_dir", false); + +// TODO: +//user_pref("extensions.webcompat.enable_picture_in_picture_overrides", true); +//user_pref("extensions.webcompat.enable_shims", true); +//user_pref("extensions.webcompat.perform_injections", true); +//user_pref("extensions.webcompat.perform_ua_overrides", true); + +// onlykey / copied from a yubikey config +//user_pref("security.webauth.u2f", true); +//user_pref("security.webauth.webauthn", true); +//user_pref("security.webauth.webauthn_enable_softtoken", true); +//user_pref("security.webauth.webauthn_enable_usbtoken", true); diff --git a/modules/home/conf/firefox/config/search/engines/default.nix b/modules/home/conf/firefox/config/search/engines/default.nix new file mode 100644 index 00000000..a47c77df --- /dev/null +++ b/modules/home/conf/firefox/config/search/engines/default.nix @@ -0,0 +1,84 @@ +{pkgs, ...}: { + # DEFAULT + "Brave Search" = { + urls = [{template = "https://search.brave.com/search?q={searchTerms}";}]; + icon = ./logos/brave.svg; + definedAliases = ["@bs"]; + }; + + # NIX + "Nix Packages" = { + urls = [{template = "https://search.nixos.org/packages?type=packages&query={searchTerms}";}]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["@np"]; + }; + + "NixOS Options" = { + urls = [{template = "https://search.nixos.org/options?type=options&query={searchTerms}";}]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["@no"]; + }; + "HomeManager Options" = { + urls = [{template = "https://home-manager-options.extranix.com/?query={searchTerms}&release=master";}]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["@nh"]; + }; + + "Nixpkgs issues" = { + urls = [{template = "https://github.com/NixOS/nixpkgs/issues?q=is%3Aissue+is%3Aopen+{searchTerms}";}]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["@ni"]; + }; + "Nixpkgs pull requests" = { + urls = [{template = "https://github.com/NixOS/nixpkgs/pulls?q=is%3Apr+is%3Aopen+{searchTerms}";}]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["@nr"]; + }; + + "Nixpkgs pull requests tracker" = { + urls = [{template = "https://nixpk.gs/pr-tracker.html?pr={searchTerms}";}]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["@nt"]; + }; + "NixOS Wiki" = { + urls = [{template = "https://wiki.nixos.org/w/index.php?search={searchTerms}";}]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["@nw"]; + }; + + # RUST + "Rust std" = { + urls = [{template = "https://doc.rust-lang.org/std/?search={searchTerms}";}]; + icon = ./logos/rust_std.svg; + definedAliases = ["@rs"]; + }; + "Rust tokio" = { + urls = [{template = "https://docs.rs/tokio/latest/tokio/index.html?search={searchTerms}";}]; + icon = ./logos/rust_tokio.png; + definedAliases = ["@rt"]; + }; + + # OTHER + "Google Scholar" = { + urls = [{template = "https://scholar.google.com/scholar?hl=en&q={searchTerms}";}]; + icon = ./logos/google_scholar.ico; + definedAliases = ["@gs"]; + }; + "Wikipedia" = { + urls = [{template = "https://en.wikipedia.org/wiki/{searchTerms}";}]; + icon = ./logos/wikipedia.svg; + definedAliases = ["@wp"]; + }; + "Arch Wiki" = { + urls = [{template = "https://wiki.archlinux.org/index.php?search={searchTerms}";}]; + icon = ./logos/arch_linux.svg; + definedAliases = ["@aw"]; + }; + + "Wikipedia (en)".metaData.hidden = true; + "DuckDuckGo".metaData.hidden = true; + "Bing".metaData.hidden = true; + "Google".metaData.hidden = true; + "Amazon.de".metaData.hidden = true; + "eBay".metaData.hidden = true; +} diff --git a/modules/home/conf/firefox/config/search/engines/logos/arch_linux.svg b/modules/home/conf/firefox/config/search/engines/logos/arch_linux.svg new file mode 100644 index 00000000..949b5c5f --- /dev/null +++ b/modules/home/conf/firefox/config/search/engines/logos/arch_linux.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/home/conf/firefox/config/search/engines/logos/brave.svg b/modules/home/conf/firefox/config/search/engines/logos/brave.svg new file mode 100644 index 00000000..09dd2e42 --- /dev/null +++ b/modules/home/conf/firefox/config/search/engines/logos/brave.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/home/conf/firefox/config/search/engines/logos/google_scholar.ico b/modules/home/conf/firefox/config/search/engines/logos/google_scholar.ico new file mode 100644 index 00000000..85d0c664 Binary files /dev/null and b/modules/home/conf/firefox/config/search/engines/logos/google_scholar.ico differ diff --git a/modules/home/conf/firefox/config/search/engines/logos/rust_std.svg b/modules/home/conf/firefox/config/search/engines/logos/rust_std.svg new file mode 100644 index 00000000..0091b5a8 --- /dev/null +++ b/modules/home/conf/firefox/config/search/engines/logos/rust_std.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/home/conf/firefox/config/search/engines/logos/rust_tokio.png b/modules/home/conf/firefox/config/search/engines/logos/rust_tokio.png new file mode 100644 index 00000000..f1de55ff Binary files /dev/null and b/modules/home/conf/firefox/config/search/engines/logos/rust_tokio.png differ diff --git a/modules/home/conf/firefox/config/search/engines/logos/wikipedia.svg b/modules/home/conf/firefox/config/search/engines/logos/wikipedia.svg new file mode 100644 index 00000000..dc32f984 --- /dev/null +++ b/modules/home/conf/firefox/config/search/engines/logos/wikipedia.svg @@ -0,0 +1 @@ +]>Wikipedia logo version 2 \ No newline at end of file diff --git a/modules/home/conf/firefox/default.nix b/modules/home/conf/firefox/default.nix new file mode 100644 index 00000000..f2ccfc99 --- /dev/null +++ b/modules/home/conf/firefox/default.nix @@ -0,0 +1,134 @@ +{ + config, + pkgs, + lib, + user_js, + ... +}: let + extensions = + builtins.fromJSON (builtins.readFile ./config/extensions/extensions.json); + + userChrome = builtins.readFile ./config/chrome/userChrome.css; + bookmarks = (import ./config/bookmarks/default.nix) { + inherit + pkgs + lib + ; + }; + engines = (import ./config/search/engines) {inherit pkgs;}; + + native_messaging_hosts = (import ./config/extensions/native_messaging_hosts/default.nix) {inherit pkgs;}; + + policies = (import ./config/policies) {inherit config extensions;}; + + search = { + default = "Brave Search"; + privateDefault = "Brave Search"; + force = true; + order = [ + # DEFAULT + "Brave Search" + + # NIX + "Nix Packages" + "Nix Options" + "Nixpkgs issues" + "Homemanager Options" + "NixOS Wiki" + "Nixpkgs Pull Request Tracker" + + # RUST + "Rust std" + "Rust tokio" + + # OTHER + "Google Scholar" + "Wikipedia" + "Arch Wiki" + ]; + + inherit engines; + }; + + prefConfig = builtins.readFile "${ + (import ./config/prefs) {inherit pkgs lib config bookmarks user_js;} + }/user.js"; + + # Package {{{ + package = import ./package.nix { + inherit config lib pkgs; + extraPolicies = policies; + extraNativeMessagingHosts = native_messaging_hosts; + }; + # }}} + + # Profiles {{{ + profiles = { + "default" = { + inherit search userChrome; + isDefault = true; + id = 0; + name = "default"; + extraConfig = prefConfig; + }; + }; + + taskwarriorProfiles = import ../taskwarrior/firefox { + inherit + config + lib + # options + + prefConfig + search + userChrome + ; + profile_size = builtins.length (builtins.attrNames profiles); + }; + # }}} +in { + options.soispha.firefox = { + package = lib.mkOption { + type = lib.types.package; + default = pkgs.firefox; + description = "Firefox package to use."; + defaultText = lib.literalExpression "pkgs.firefox"; + relatedPackages = [ + "firefox" + "firefox-beta-bin" + "firefox-bin" + "firefox-devedition-bin" + "firefox-esr" + ]; + }; + package_version = lib.mkOption { + type = lib.types.str; + default = pkgs.firefox.version; + description = "Firefox version to use"; + }; + }; + + config = { + soispha.firefox.package = package; + soispha.firefox.package_version = pkgs.firefox.version; + home.sessionVariables = { + # improve touch input & make scrolling smother + MOZ_USE_XINPUT2 = "1"; + + # improve wayland support + MOZ_ENABLE_WAYLAND = 1; + + # tell gtk to use portals + GTK_USE_PORTAL = 1; + + BROWSER = "firefox"; + }; + programs.firefox = { + enable = true; + inherit (config.soispha.firefox) package; + profiles = + profiles + // taskwarriorProfiles; + }; + }; +} diff --git a/modules/home/conf/firefox/package.nix b/modules/home/conf/firefox/package.nix new file mode 100644 index 00000000..f7e4319b --- /dev/null +++ b/modules/home/conf/firefox/package.nix @@ -0,0 +1,30 @@ +# taken from the NixOS Firefox module: https://github.com/NixOS/nixpkgs/blob/7c9cc5a6e5d38010801741ac830a3f8fd667a7a0/nixos/modules/programs/firefox.nix +{ + config, + lib, + pkgs, + # options + autoConfig ? "", + extraNativeMessagingHosts ? [], + wrapperConfig ? {}, + extraPolicies ? {}, + base_package ? pkgs.firefox, +}: let + pkg = base_package.override (old: { + extraPrefsFiles = + (old.extraPrefsFiles or []) + ++ [ + (pkgs.writeText "autoConfig.js" autoConfig) + ]; + nativeMessagingHosts = old.nativeMessagingHosts or [] ++ extraNativeMessagingHosts; + cfg = (old.cfg or {}) // wrapperConfig; + extraPoliciesFiles = + (old.extraPoliciesFiles or []) + ++ [ + ( + pkgs.writeText "policies.json" (builtins.toJSON extraPolicies) + ) + ]; + }); +in + pkg diff --git a/modules/home/conf/firefox/scripts/default.nix b/modules/home/conf/firefox/scripts/default.nix new file mode 100644 index 00000000..1127662b --- /dev/null +++ b/modules/home/conf/firefox/scripts/default.nix @@ -0,0 +1,29 @@ +{ + pkgs, + sysLib, + ... +}: let + unzip_mozlz4 = pkgs.stdenv.mkDerivation { + name = "unzip_mozlz4"; + propagatedBuildInputs = [ + (pkgs.python3.withPackages (pythonPackages: + with pythonPackages; [ + lz4 + ])) + ]; + dontUnpack = true; + installPhase = "install -Dm755 ${./unzip_mozlz4.py} $out/bin/unzip_mozlz4"; + }; + extract_cookies = sysLib.writeShellScript { + name = "extract_cookies"; + src = ./extract_cookies.sh; + dependencies = with pkgs; [ + bash + sqlite + mktemp + coreutils + ]; + }; +in { + inherit unzip_mozlz4 extract_cookies; +} diff --git a/modules/home/conf/firefox/scripts/extract_cookies.sh b/modules/home/conf/firefox/scripts/extract_cookies.sh new file mode 100755 index 00000000..e3d50d43 --- /dev/null +++ b/modules/home/conf/firefox/scripts/extract_cookies.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +# copied from https://superuser.com/a/1239036 +# extract_cookies.sh: +# +# Convert from Firefox's cookies.sqlite format to Netscape cookies, +# which can then be used by wget and curl. (Why don't wget and curl +# just use libsqlite if it's installed? Mysteries abound.) +# +# Note: This script reads directly from the standard cookie jar file, +# which means cookies which are kept only in memory ("session cookies") +# will not be extracted. You will need an extension to do that. + +# USAGE: +# +# $ extract_cookies.sh > /tmp/cookies.txt +# or +# $ extract_cookies.sh ~/.mozilla/firefox/*default*/cookies.sqlite > /tmp/cookies.txt + +# USING WITH WGET: +# $ wget --load-cookies=/tmp/cookies.txt http://example.com + +# USING WITH CURL: +# $ curl --cookie /tmp/cookies.txt http://example.com + +# Note: If you do not specify an SQLite filename, this script will +# intelligently find it for you. +# +# A) Usually it will check all profiles under ~/.mozilla/firefox/ and +# use the cookies.sqlite that was updated most recently. +# +# B) If you've redirected stdin (with < or |) , then that will be used. + +# HISTORY: I believe this is circa 2010 from: +# http://slacy.com/blog/2010/02/using-cookies-sqlite-in-wget-or-curl/ +# However, that site is down now. + +# Cleaned up by Hackerb9 (2017) to be more robust and require less typing. + +cleanup() { + rm -f "$TMPFILE" + exit 0 +} +trap cleanup EXIT INT QUIT TERM + +if [ "$#" -ge 1 ]; then + SQLFILE="$1" +else + SQLFILE="$HOME/.mozilla/firefox/default/cookies.sqlite" +fi + +if ! [ -r "$SQLFILE" ]; then + echo "Error. File $SQLFILE is not readable." >&2 + exit 1 +fi + +# We have to copy cookies.sqlite, because FireFox has a lock on it +TMPFILE=$(mktemp /tmp/cookies.sqlite.XXXXXXXXXX) +cat "$SQLFILE" >>"$TMPFILE" + +# This is the format of the sqlite database: +# CREATE TABLE moz_cookies (id INTEGER PRIMARY KEY, name TEXT, value TEXT, host TEXT, path TEXT,expiry INTEGER, lastAccessed INTEGER, isSecure INTEGER, isHttpOnly INTEGER); + +echo "# Netscape HTTP Cookie File" +sqlite3 -separator $'\t' "$TMPFILE" < ") diff --git a/modules/home/conf/firefox/scripts/update_extensions.sh b/modules/home/conf/firefox/scripts/update_extensions.sh new file mode 100755 index 00000000..86bd843c --- /dev/null +++ b/modules/home/conf/firefox/scripts/update_extensions.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +tmp=$(mktemp) +cat <"$tmp" + darkreader:navbar + keepassxc-browser:navbar + vhack-libredirect:navbar + torproject-snowflake:navbar + tridactyl-vim:menupanel + ublock-origin:menupanel +EOF + +# The bin is provided in the devshell; +# The cat execution should be unquoted; +# shellcheck disable=SC2046 +generate_extensions $(cat "$tmp") >"$(dirname "$0")"/../config/extensions/extensions.json + +rm "$tmp" diff --git a/modules/home/conf/gammastep/default.nix b/modules/home/conf/gammastep/default.nix new file mode 100644 index 00000000..1ae0550b --- /dev/null +++ b/modules/home/conf/gammastep/default.nix @@ -0,0 +1,29 @@ +{ + lib, + nixosConfig, + ... +}: let + temp = + if nixosConfig.soispha.laptop.enable + then 3000 + else 1300; +in { + services.gammastep = { + enable = true; + settings = { + general = { + temp-day = lib.mkForce temp; + temp-night = lib.mkForce temp; + gamma = "0.8:0.8:0.8"; + fade = 0; + adjustment-method = "wayland"; + location-provider = "manual"; + }; + + manual = { + lat = 48.1; + lon = 11.6; + }; + }; + }; +} diff --git a/modules/home/conf/git/default.nix b/modules/home/conf/git/default.nix new file mode 100644 index 00000000..e896b317 --- /dev/null +++ b/modules/home/conf/git/default.nix @@ -0,0 +1,181 @@ +{ + nixosConfig, + lib, + config, + sysLib, + pkgs, + ... +}: let + gitIgnoreFile = ./git_ignore.git; + gitTemplateFile = ./git_template.git; + commit = sysLib.writeShellScript { + name = "commit"; + src = ./scripts/commit.sh; + keepPath = true; + dependencies = with pkgs; [ + git + gnused + ]; + }; +in { + programs.git = { + enable = true; + #package = pkgs.gitAndTools.gitFull; # TODO: for git send-email support + aliases = { + cm = "!${commit}/bin/commit"; + cmr = "commit --file .git/COMMIT_EDITMSG --edit --verbose"; + + st = "status"; + sts = "status --short --branch"; + + ds = "diff --staged"; + di = "diff"; + rs = "restore --staged"; + + ## Logging: + ls = "log --max-count=10 --color --format=format:'%C(bold red)%h%C(reset) %C(dim bold blue)%s%C(reset) %C(dim white)[%aN] %C(bold red)<%G?>%C(reset)%C(auto)%d%C(reset)'"; + + # https://stackoverflow.com/a/61487052 + lg = "lg1"; + lg1 = "lg1-specific --all"; + lg2 = "lg2-specific --all"; + lg3 = "lg3-specific --all"; + + lg1-specific = "log --graph --abbrev-commit --decorate \ + --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold cyan) [%G?]%C(reset)%C(auto)%d%C(reset)'"; + + lg2-specific = "log --graph --abbrev-commit --decorate \ + --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'"; + + lg3-specific = "log --graph --abbrev-commit --decorate \ + --format=format:'%C(bold blue)%h%C(reset)\ + - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)\ + %C(bold cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)\ + %C(bold red)(signature: %G? by %GS, trust: %GT)%C(reset)%n\ + '' %C(white)%s%C(reset)%n''\ + %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)\ + %C(bold white)- trailers: %(trailers) %C(reset)'"; + + # hard reset with commit before (use reflog to recover) + # git wipe [] + wipe = lib.strings.concatStringsSep " " [ + "!git" + "add" + "--all" + "&&" + "git" + "commit" + "--quiet" + "--message='WIPE-SAVEPOINT'" + "--no-gpg-sign" + "&&" + "git reset \${1:-HEAD~} --hard" + "&&" + "git clean -fd" + ]; + branches = lib.strings.concatStringsSep " " [ + "!git" + "for-each-ref" + "--sort=-committerdate" + "--color=always" + "--format='${ + lib.strings.concatStringsSep "|" [ + "%(color:blue)%(authordate:relative)" + "%(color:red)%(authorname)" + "%(color:green)%(color:bold)%(refname:short)" + ] + }'" + "refs/remotes" + "|" + "column -ts'|' -o ' '" + ]; + tags = "tag --list"; + remotes = "remote --verbose"; + day = "!git log --stat --since '1 day ago' --author $(git config user.email)"; + unpush = "push --force-with-lease origin HEAD~1:${config.programs.git.extraConfig.init.defaultBranch}"; + wip = "!git add . && git commit --amend && git push --force-with-lease"; + }; + extraConfig = { + core = { + excludesFile = "${gitIgnoreFile}"; + }; + rebase = { + autoStash = true; + autoSquash = true; + }; + init = { + defaultBranch = "prime"; + }; + user = { + name = "Benedikt Peetz"; + email = "benedikt.peetz@b-peetz.de"; + # signingKey = "[is down below]"; + }; + help = { + autocorrect = 5; + }; + push = { + gpgSign = "if-asked"; + }; + commit = { + template = "${gitTemplateFile}"; + }; + diff = { + colorMoved = "default"; + # Usually leads to better results + algorithm = "patience"; + bin = { + textconv = "hexdump -v -C"; + }; + }; + # Makes it a bit more readable + blame = { + coloring = "repeatedLines"; + markIgnoredLines = true; + markUnblamables = true; + }; + merge = { + conflictstyle = "zdiff3"; + }; + url = { + "git@codeberg.org:" = { + insteadOf = "@cb:"; + }; + "https://codeberg.org/" = { + insteadOf = "cb://"; + }; + + "git@github.com:" = { + insteadOf = "@gh:"; + }; + "https://github.com/" = { + insteadOf = "gh://"; + }; + + "git@gitlab.com:" = { + insteadOf = "@gl:"; + }; + "https://gitlab.com/" = { + insteadOf = "gl://"; + }; + }; + }; + delta = { + enable = true; + options = { + decorations = { + commit-decoration-style = "bold yellow box ul"; + file-decoration-style = "none"; + file-style = "bold yellow ul"; + }; + keep-plus-minus-markers = true; + features = "decorations"; + whitespace-error-style = "22 reverse"; + }; + }; + signing = { + key = "8321ED3A8DB999A51F3BF80FF2682914EA42DE26"; + signByDefault = true; + }; + }; +} diff --git a/modules/home/conf/git/git_ignore.git b/modules/home/conf/git/git_ignore.git new file mode 100644 index 00000000..8f29815e --- /dev/null +++ b/modules/home/conf/git/git_ignore.git @@ -0,0 +1,4 @@ +# default nvim Session file name +Session.vim + +# vim: ft=gitignore diff --git a/modules/home/conf/git/git_template.git b/modules/home/conf/git/git_template.git new file mode 100644 index 00000000..6af39119 --- /dev/null +++ b/modules/home/conf/git/git_template.git @@ -0,0 +1,66 @@ + +# Title: Summary, imperative, start upper case, don't end with a period +# If applied, this commit will + +# Body: Explain *what* and *why* (not *how*). + + +# BREAKING CHANGE: +# Fixes: # +# Refs: # +# Co-authored-by: + + + +# Convention Commits (https://www.conventionalcommits.org/en/v1.0.0/ or https://github.com/angular/angular/blob/85b4941be137a2fcdc664dc870e408dd72ad7de7/CONTRIBUTING.md#commit): +# feat: [Features] -> MINOR version bump +# A new feature +# +# fix: [Bug Fixes] -> PATCH version bump +# A bug fix +# +# append '!' after the type/scope: [Breaking Change] -> MAJOR version bump +# A breaking API change +# +# docs: [Documentation] +# Documentation only changes +# +# style: [Styles] +# Changes that do not affect the meaning of the code +# (white-space, formatting, missing semi-colons, etc) +# +# refactor: [Code Refactoring] +# A code change that neither fixes a bug nor adds a feature +# +# perf: [Performance Improvements] -> PATCH version bump +# A code change that improves performance +# +# test: [Tests] +# Adding missing tests or correcting existing tests +# +# build: [Builds] -> PATCH version bump +# Changes that affect the build system or external dependencies +# (example scopes: gulp, broccoli, npm) +# +# ci: [Continuous Integrations] +# Changes to our CI configuration files and scripts +# (example scopes: Travis, Circle, BrowserStack, SauceLabs) +# +# chore: [Chores] +# Other changes that don't modify src or test files +# +# reverts: [Reverts] +# Reverts a previous commit + +# How to Write a Git Commit Message: +# [https://chris.beams.io/posts/git-commit/] -> https://cbea.ms/git-commit/ +# +# 1. Separate subject from body with a blank line +# 2. Limit the subject line to 50 characters +# 3. Capitalize the subject line +# 4. Do not end the subject line with a period +# 5. Use the imperative mood in the subject line +# 6. Wrap the body at 72 characters +# 7. Use the body to explain *what* and *why* vs. *how* +# +# vim: ft=gitcommit diff --git a/modules/home/conf/git/scripts/commit.sh b/modules/home/conf/git/scripts/commit.sh new file mode 100755 index 00000000..2204e4d6 --- /dev/null +++ b/modules/home/conf/git/scripts/commit.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +ROOT="$(git rev-parse --show-toplevel)" + +# Take first line from previous commit +if [ -f "$ROOT/.git/COMMIT_EDITMSG" ]; then + sed '1s/\(.*\)\((.*)\)\?\(:.*\)/\1\2: /;1p;d' "$ROOT/.git/COMMIT_EDITMSG" >"$ROOT/.git/COMMIT_TEMPLATE" +else + printf "\n" >"$ROOT/.git/COMMIT_TEMPLATE" +fi +sed '1d' "$(git config commit.template)" >>"$ROOT/.git/COMMIT_TEMPLATE" + +git commit --template "$ROOT/.git/COMMIT_TEMPLATE" --verbose "$@" + +# vim: ft=sh diff --git a/modules/home/conf/gpg/default.nix b/modules/home/conf/gpg/default.nix new file mode 100644 index 00000000..1acdf628 --- /dev/null +++ b/modules/home/conf/gpg/default.nix @@ -0,0 +1,67 @@ +{ + config, + pkgs, + lib, + ... +}: { + programs.gpg = { + enable = true; + homedir = "${config.xdg.dataHome}/gnupg"; + mutableKeys = true; + mutableTrust = true; + + settings = { + default-key = "Benedikt Peetz "; + # TODO: add more + }; + + publicKeys = [ + { + source = ./keys/key_1.asc; + trust = "ultimate"; + } + { + source = ./keys/key_2.asc; + trust = "full"; + } + ]; + }; + services = { + gpg-agent = { + enable = true; + enableZshIntegration = true; + enableScDaemon = true; # smartcards and such things + + # Cache the key passwords + defaultCacheTtl = 60 * 50; + defaultCacheTtlSsh = 60 * 50; + maxCacheTtl = 60 * 50; + maxCacheTtlSsh = 60 * 50; + + pinentryPackage = pkgs.pinentry-curses; + # pinentryPackage = pkgs.pinentry-tty; + + enableSshSupport = true; + sshKeys = let + removeSpace = str: builtins.replaceStrings [" "] [""] str; + in [ + (removeSpace "8321 ED3A 8DB9 99A5 1F3B F80F F268 2914 EA42 DE26") + ]; + }; + }; + + programs.zsh.initExtraFirst = lib.mkBefore '' + export GPG_TTY=$(tty) + + # Magic copied from the gpg-agent manual + unset SSH_AGENT_PID + if [ "''${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then + export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" + fi + + + # Ensure that get gpg agent is started (necessary because ssh does not start it + # automatically and has it's tty updated) + gpg-connect-agent /bye + ''; +} diff --git a/modules/home/conf/gpg/keys/key_1.asc b/modules/home/conf/gpg/keys/key_1.asc new file mode 100644 index 00000000..c83c3151 --- /dev/null +++ b/modules/home/conf/gpg/keys/key_1.asc @@ -0,0 +1,25 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: Benedikt Peetz + +mDMEZkCPnhYJKwYBBAHaRw8BAQdAA2ve8cO5iCx0Ehd8+9zhXrzzAlpo7DI5ltNM +vLQIHVK0KkJlbmVkaWt0IFBlZXR6IDxiZW5lZGlrdC5wZWV0ekBiLXBlZXR6LmRl +PoiZBBMWCgBBFiEEgyHtOo25maUfO/gP8mgpFOpC3iYFAmZAj54CGwEFCRLMAwAF +CwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQ8mgpFOpC3iYTYwD/UGnlFls7 +ynY52EAiea6Fa+ktXZQKnVjKYO4AYmUdIRMA/iY+fnhm7OgB1SSv0ssjqpeIFSwu +qTL4lz735Pn+UNEKuDMEZkCP8xYJKwYBBAHaRw8BAQdAk5J9kVCFByKW5Wk8Oobn +Ydy/sh+05irq/xjQjtDQG8eI9QQYFgoAJhYhBIMh7TqNuZmlHzv4D/JoKRTqQt4m +BQJmQI/zAhsCBQkDwmcAAIEJEPJoKRTqQt4mdiAEGRYKAB0WIQTeYpC3k+aybU6a +T722E5vLB86UbQUCZkCP8wAKCRC2E5vLB86UbaN2AQCbINgO9vljxk4T/s4N1+t4 +Zp5skgghUn4vTQXGIs2NugD9HwhSazuUHo3gJFyhAowPCtKlCbdOEmrs4qQFHU9h +0gPKdgEAtxZorpsQtrQjTHaOH0Ee5Hx+i10iP3npybzieFzvhQcA/R8L0jr8SJ6F +HP6sEpAAdQ2qp9dqB71KISBtN1JbEagNuDMEZkCQPhYJKwYBBAHaRw8BAQdAwThl +Vr4ihl/pPdTTwkb3eLpAgAnhqabuaQHM7XglKTOIfgQYFgoAJhYhBIMh7TqNuZml +Hzv4D/JoKRTqQt4mBQJmQJA+AhsgBQkDwmcAAAoJEPJoKRTqQt4mO88A/2gXjwaq +A9KN37jKb05zpsvTjOR5J9UOLsWUfye5zl6FAQCArUmXDApaOmB6FRUZqb93xiXQ +6m5T5OoMcpURC6IyBrg4BGZAkGoSCisGAQQBl1UBBQEBB0BIk7HOtw7Z+BV1Oyst +bl3PPAVuMtMJUD1CeYOMzA+1PwMBCAeIfgQYFgoAJhYhBIMh7TqNuZmlHzv4D/Jo +KRTqQt4mBQJmQJBqAhsMBQkDwmcAAAoJEPJoKRTqQt4mg+kBAMTgMMLo/IzGPVhX +8gSTGpM3fDQchgFfOMyjIDfWN0zDAQDiY6RCXavD7uVfg/949r9TQHo0Vvem63GH +9Y7Vp2vzCA== +=IM58 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/modules/home/conf/gpg/keys/key_2.asc b/modules/home/conf/gpg/keys/key_2.asc new file mode 100644 index 00000000..47188da7 --- /dev/null +++ b/modules/home/conf/gpg/keys/key_2.asc @@ -0,0 +1,794 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: 2FEA 7BDB 9171 70A7 B8E7 2001 DF18 78E6 D9C3 B27F +Comment: Silas +Comment: Silas +Comment: Silas +Comment: Silas + +mQGNBGEeXg8BDADF5M9eh/otTBDnbLqy8kxEHhlLRsv4wF0qCW8fGWlclAFpz5A9 +9t0Klt0AkB2EK/2EKWmm7J2DD9lq7nlvJurWXZWmcDzRWV6VWO4KftvKnasBR7kQ +3T09ga/jVgLmjGU8qKW2175MLuj+hRNwlc8TiTHrl9b+1hC5dvV6HwIJtvVbpBzj +ZmFGKBCPdA/8j/keq9kBJTJjb6YED+jAJJAHeZ7XyDeCi46MwTR09wLXIrlZenGO +wljtu+Ar+SN5droeeMN1edw9y2YnRg4zQ0lOtC7ylbV6a205B2QxSanMpaEZPX0C +Y48KZqto1Xs1skHrf3PHmRkGDbMil8yhsBlVDZOmKiMjTTEJs4nsM9llJvz0kaiw +Gu1HgMfuKxgwXZ+7qonQ9Td4Mg20hyfaHC8djwP8IEym5NOfLbkifeUL7owe+5fc +HCd3I6bnvHAtfQN2YV/VZN1rSXykrd6YjnqDYhxxlhHnObFnFYJD1M2KIBUwlLSG +BK25hH/eAvBcYq0AEQEAAbQUU2lsYXMgPHNpbHNAc2lscy5saT6JAxgEEwEIAYIC +GwMFCQlmAYAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4ACGQEWIQQv6nvbkXFw +p7jnIAHfGHjm2cOyfwUCZEFu1T4UgAAAAAAQACVwcm9vZkBhcmlhZG5lLmlkaHR0 +cHM6Ly9jb2RlYmVyZy5vcmcvc2lscy9naXRlYV9wcm9vZpkUgAAAAAAQAIBwcm9v +ZkBhcmlhZG5lLmlkbWF0cml4OnUvQHNpbHM6c2lscy5saT9vcmcua2V5b3hpZGUu +cj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9 +JGRqVWtvd3Y3bDR5RmNYTGF1eWlCWXNocENodU1rRDgtbUctN1lfVl9TN0EvFIAA +AAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQ0FIAA +AAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZlL0BkYXNs +aQAKCRDfGHjm2cOyf7ixDAC42r59qDyhO7aN0I775O6DZk2KO9YFNhZ/4wmFoPUV +eE15OwgrghX5rQWwt2xbQoC5vt1DOKsfRqdybdRo6PI8urm20/QTxmC+0yNE7yfZ +iEHHgTbdns4DtGpA8nRAdGSKEAGYd8HVMy6ANucVS4aNH04L+294/LSpG2GhMAHK +drsKWZfy51eyaFeVlZ4+Iskl/KD/vkyOeStzmtzKxlyIC66At9bIaqCGmC7u4ClJ +oFaOuXUXvvDvski7Nk//eQnlMP/kUfbR02tws7QcZ+DE8PU82maCBfXn1EWgpnMN +uZ3/91iTiJC70kmer8a/yqe5EFUQuvZrPB49Y0bAvyh7jJpxlMK1Fsq1cI5pa3Al +RFDDS3VpTP4kt80UbssQK5YKc1WvwTJGp+X/7zUwNbfPr/iA24Lj8KcykKywFmTu ++ucC1eETPphckL8Rbd5wYUAE4+JLID4pUDE/pfTggS1hA9G/IgKBNMdDB/MyJuOP +J18VXSZk9yBiWEaHruqBu56JAxIEEwEIAXwCGwMFCQlmAYAFCwkIBwICIgIGFQoJ +CAsCBBYCAwECHgcCF4ACGQEWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCZEFtVjgU +gAAAAAAQAB9wcm9vZkBhcmlhZG5lLmlkaHR0cHM6Ly9jb2RlYmVyZy5vcmcvc2ls +cy9wcm9vZpkUgAAAAAAQAIBwcm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQHNpbHM6 +c2lscy5saT9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJp +eC5vcmcmb3JnLmtleW94aWRlLmU9JGRqVWtvd3Y3bDR5RmNYTGF1eWlCWXNocENo +dU1rRDgtbUctN1lfVl9TN0EvFIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5z +OnNpbHMubGk/dHlwZT1UWFQ0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0 +cHM6Ly90cm9ldC5jYWZlL0BkYXNsaQAKCRDfGHjm2cOyf1tOC/wIxixV1NRNoYF3 +WMRAF5sloJYD8cM5TeNlkenqkWoGEze+WcswzY1ALfT0GMQpDuWQMI6yYzru8MDn +1ERMHbqgYhAVSPhQXaMJ8jiJVMq04Yjb2uys7c98vsXjoGy9zv9QaYtIFdocrUJV +dL5t+j2wQYK74uXnO+/EARLwJoIeQpq8AwwocxCJ/0nu5VllgOIyut92UHpmNBEl +qestgU/TRAjeT2m/ezyLI3U2Idy+rzP31A0U0RXOZ3cNUDrDYeeQQ0SrWhf9/4ym +wUczJyQLc5cMHSjZ4K7ib8u+1g/B6pLdiLtKHrxqFduPK8cnSAcKF5UP9CE6E7ab +5oNMmSqMDl4ZAmxn28jcvyGEei4oPDTZeYMZdxoOrIaoYw0G2BOq1pqms2nJlSVk +T1aiBW9g6u5b2kbuP9k5YAkB2XLAGWBuz7OXH0ZBmQ4vJaJRD+s3do5USnyVhJGP +CccaTVs2p12ljwawmKtJzmCcHq8RbV0CW2uBxNShbWchNnZrcbyJAtkEEwEIAUMC +GwMFCQlmAYAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4ACGQEWIQQv6nvbkXFw +p7jnIAHfGHjm2cOyfwUCYs8QWDQUgAAAAAASABlwcm9vZkBtZXRhY29kZS5iaXpo +dHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpLxSAAAAAABIAFHByb29mQG1ldGFjb2Rl +LmJpemRuczpzaWxzLmxpP3R5cGU9VFhUmRSAAAAAABAAgHByb29mQGFyaWFkbmUu +aWRtYXRyaXg6dS9Ac2lsczpzaWxzLmxpP29yZy5rZXlveGlkZS5yPSFkQmZRWnhD +b0dWbVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kZGpVa293djds +NHlGY1hMYXV5aUJZc2hwQ2h1TWtEOC1tRy03WV9WX1M3QQAKCRDfGHjm2cOyfzkw +DACj77EpB21XUgzceBilA62zIKXNZMhr1aefibe84aZQh8h8ABREtSQSIHAwBXxO +qlG30bt2fFO0oB8UEIrHG+ahlNfHxbHJZT7xlkuWHRXfV9yHC5vuOUbWLIxJWJzV +xVN7s4VCBYyrfCcLnNbaRv3BiLE7as7ayC8rLcPSr8QicasAEXSr4k4nEH5BkIUX +KtvpW1BW0vEUIshFc2QRYS9gaC9KioojLvmM+IFtHdJ9TQMds6n2zSKG5tR1/fB/ +SZ82g3imLt9bAEG2K70w572CgY1P/2ClB/hkR2rO/OazAyIdKmzuL0ZJTdgKoFbB +A5d7RFCOi8YQhv+26CchNhNhJKcQMhc0ctHrdLEL8x2+dJX8KA1CXQZV6OrVEL2R +96ETrOpJsToseaRvQoanAOXbx/zoATzhBaRIeotXacOytXXEmOwp9wSKIlrNYkDT +rboPyelwgSQiLvlLUnqTNnq1YbUtkPT1Ka5NsmjUwvsTRQzfcnR1fTWWEqPWN1iA +ebqJA3IEEwEIAdwCGwMFCQlmAYAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AC +GQEWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCYs8F+ZkUgAAAAAAQAIBwcm9vZkBh +cmlhZG5lLmlkbWF0cml4OnUvQHNpbHM6c2lscy5saT9vcmcua2V5b3hpZGUucj0h +ZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JGRq +VWtvd3Y3bDR5RmNYTGF1eWlCWXNocENodU1rRDgtbUctN1lfVl9TN0GYFIAAAAAA +EAB/cHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9vcmcua2V5 +b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94 +aWRlLmU9JGhLOV90RzB1N2FxVXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQxd3hFMmpN +VDgvFIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1U +WFQ0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZl +L0BkYXNsaQAKCRDfGHjm2cOyfwt2C/wMjQNxEE+M03T4SkI2vRlmTmWWcOZiJHsm +SkmAgvo05wMc9LUnTEfWdOpsqTfI1Ud972kuL7g9bqWQnMPq3FGYZHpHRP2rsCw5 +yPwTgjENh50sH6w1yclfvardtca7VrkTHiWqmmEzBrjEeMQMkQRLCCmvWB3d1+60 +qdKL+/ucAdLnNeyMpNWqAuZ4f5XIwHutKqQJWJlQ9NZN03OcaS/oaHHn95xXzXba +rCa7hdwRrAEYpMbYjjjfHhbQLauEhIV5JuatDD6w+vv8NUHBIJ5sXvIak6EHeWEe +UDBsu+LgRiBXJA9orE4oExdIF5LpJvGjZqEh80HFUd+3sBb/9HzaLLFrr2zSYwWJ +WGcb+Ho/ZYl4VC9rXpJfz5kyLzWVGqyDcHLIid7G0rDicBErFG2o8ppxXm8+ekRp +yodwaqHbUp62mhnSoObYJKpVJZoqwQZTVIeGnwAYpcE94e8TjK54DziyZ5ZZ9q2n +4tf/ZPu3Dt+L+tvPlF1VRMLjCCp2e7KJAtgEEwEIAUICGwMFCQlmAYAFCwkIBwIC +IgIGFQoJCAsCBBYCAwECHgcCF4ACGQEWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUC +Ys8EiDQUgAAAAAASABlwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNh +ZmUvQGRhc2xpLxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxp +P3R5cGU9VFhUmBSAAAAAABAAf3Byb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9AbGk6 +ZmZmLmNoYXQ/b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRy +aXgub3JnJm9yZy5rZXlveGlkZS5lPSRoSzlfdEcwdTdhcVV3Zkh2d3NLd2VDWFdY +Nm5pLV9JOWs0MXd4RTJqTVQ4AAoJEN8YeObZw7J/vAwL/2WvNAlqoRAr6vT/t+gm +O3AoiUzEBZXLgq5aibdbpZENjPiSfZZWzfkIpOeGQSCoDluHLnVrlcQegCAvUiBS +qbwN32X77yOggG29hAGZBxBXvJ/rj63m0B0v60Cfcgetlf6cEO6PPdsZD6VaY/cL +pO6dVHRhD4r53in7XhyzhMhW6PljY2FTFZ2rdZEliQZAD90M2hn+LCXx8rsh3SqZ +RKT88jhfcBXA20vHgagzzdXyaeo4wbWplroz+3nLz3oQDfLLWnihAhAbIHg9AE/4 +dXFljjCF45SjU+8gHpHkHfwWtwLYucOZ5mr4RUVy8hiPyz/1fLxNKkDOvg42tDAB +dIwt7CpFxHfn63GjsRRmNyZoIQhoDKX0BCuHF+Qsr5jIHd1o1o9HpjHicdZV+uV6 +RQedsgbfCHJPZKdXSyxI/SF9jDlXCvG2aTzTXk2vQ7PCZKsFjVFJA7U87zmr0ZsJ +i5axNn+v8JA2hT1xxd0wkVWwg4f3kR4cr6AhK3EFVNTtTIkB2gQTAQgARAIbAwUJ +CWYBgAULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgBYhBC/qe9uRcXCnuOcgAd8Y +eObZw7J/BQJizwJUAhkBAAoJEN8YeObZw7J/o7sL/1iaIT4y0FypOhzzUqJzOBP2 +kabeq4iOS99w2wHEiM6xzXoGuRy+lEXZMb94VVUNhJDayTf11OZgAyAJdt9OAyBK +UsFf1AbVJw0YY+384bjbId/oTqngqKIkBH9bpDIfSX5riXqD5SmhwRuuRPHuO+ZT +aM3tdDnSjW4brEub3aHsHPNbBM39u0Q9JGPpd4GhXnmK1iYCQU5ZRErgpxqPtAOX +h9/eIIa5Tv+KbPzwBJ3od27dbuo/Y3OwxfwSuSKieK+xvDHyxzD429tEh+uMP4W/ +2b4GbksC0Z6nNM7FBa2Vq/vKOa6yTGE7bgkudr3tWa5N+x/towX6crgB+5DAByBR +on967FLER6i4Ok9V1hBnvrjXGLgJeNkoxMxiK3UH0ijY9laHO9fd8v4RoHubHxjV +YXJNUm6EUvRPXskpNw5X24dQ3muuLpOVX657Z609ar6jEQgXjeuyqUL4TwXorDZs +4HU1Mj42iFUD9HdIcMqW+/zpKGxEJWFjlg2z1/uX9Ih1BBAWCgAdFiEElgb8dJ/O +FjYHI9StpelAEMOmQq0FAmTEI7oACgkQpelAEMOmQq2x6AD/WrvWuFlewmBNqoLa +AMQb3Hk3Ls3GZdYkpNhuTqSZbs0BAOPNAm00QHD1QQeOsZkuExxgPoMDtdW27qD5 +vfVP7xQCtBNTaWxhcyA8bGlAZW52cy5uZXQ+iQMVBBMBCAF/AhsDBQkJZgGABQsJ +CAcCAiICBhUKCQgLAgQWAgMBAh4HAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8F +AmRBbtU+FIAAAAAAEAAlcHJvb2ZAYXJpYWRuZS5pZGh0dHBzOi8vY29kZWJlcmcu +b3JnL3NpbHMvZ2l0ZWFfcHJvb2aZFIAAAAAAEACAcHJvb2ZAYXJpYWRuZS5pZG1h +dHJpeDp1L0BzaWxzOnNpbHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1Zt +U1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlkZS5lPSRkalVrb3d2N2w0eUZj +WExhdXlpQllzaHBDaHVNa0Q4LW1HLTdZX1ZfUzdBNBSAAAAAABIAGXByb29mQG1l +dGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGkvFIAAAAAAEgAUcHJv +b2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQACgkQ3xh45tnDsn9K +9AwAlqvwQNhFakWY7i5XmrdzcBj5nHKoxYkCpVEwwEVy/B7LV6h+ZoXadtQzqn3l +BdoSchkIYcZT4xDV/b00bCD9APpu6+Eom3CcBlcxIthoEe6ZKXEImounCS69wkVA +8ItZlSlhyxTRSQzgmAI5qApw/Kh+AmpsEK8W2kY2tpV7fR/cXZ5/pNoU907T0U5f +bpnEgdZFeNUw+RayCELUZnZ1wgl33yADV9WV+nn4N/t1/xEfAFsv5GuNoCrc/BAu +jyaoVS8ULkmioYyUmFHDAwn/SXAIMOL5LNc/4xMt1CkYkRXiEQW+l2UWrGF5hhIY +R6ofOeUgxiw+iDM2vA0G65+OUCTRpkrHFl5d777LFiHEWKKlBKM0of1Cr+roXrPi +uYwDjuC4WYEtcvKG1bimI6MRwoUmjW8yg8E40jidZYOuOVi8HVteg+HeCRW7qmwX +VR1QI+Fp2eRj0DSeh+wwtaFxMHcTRe10UFkJ244HOihydEqFUfPOvwTzuXtZjO5Z +CHQPiQMPBBMBCAF5AhsDBQkJZgGABQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheA +FiEEL+p725FxcKe45yAB3xh45tnDsn8FAmRBbVY4FIAAAAAAEAAfcHJvb2ZAYXJp +YWRuZS5pZGh0dHBzOi8vY29kZWJlcmcub3JnL3NpbHMvcHJvb2aZFIAAAAAAEACA +cHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxzOnNpbHMubGk/b3JnLmtleW94 +aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlk +ZS5lPSRkalVrb3d2N2w0eUZjWExhdXlpQllzaHBDaHVNa0Q4LW1HLTdZX1ZfUzdB +NBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2FmZS9A +ZGFzbGkvFIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlw +ZT1UWFQACgkQ3xh45tnDsn8fMgwAhHfRuMb9ayKGl0Kb6by648KHe6NOHKLTrLm8 +5w/cIBrW2s42rSZdybeVNA+AnrtBvRD/yQ7idji5FS0nYac4lbZ+oLNCUc9sSvZW +DgWsXaYs5ujpR1ftYd8A0AytsBvrGczPrclMV5HjuE11kilYXMwNqiOX0hXZ3ewx +O6d3KAYLIgajVH7SOgnexYs5Up7QO6osrFqRwokCd/Yx2usEap7jDajjeXQTNdwX +e5RvKmYND3jYv0hood7IvSWeJHhZ5DIRQ9FpOt6PxiBzrEx8YRF1KbtniMTwf8fB +Dl6eAo89I3WjT8CwQryeQ+9a+15WPQyLddEci1Vj7Etbmk6NfMmaUnm+OOOyeDz1 +0JYxPt4H32GYg/gGDZ7FxKG3gXHeCO2VptiS/VxCw4+EkVt0EYqWk51JGBNkOOL/ +8SMRFNNOah6xKR7hdPLmS69MqNvJGR/R0uJd3B4cF0ynLYFZRTJ2WH6nox0oXihB +TsZxnPulkr20RdS2yXRfhfiouE2XiQLWBBMBCAFAAhsDBQkJZgGABQsJCAcCAiIC +BhUKCQgLAgQWAgMBAh4HAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmLPEFwv +FIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQ0 +FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZlL0Bk +YXNsaZkUgAAAAAAQAIBwcm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQHNpbHM6c2ls +cy5saT9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5v +cmcmb3JnLmtleW94aWRlLmU9JGRqVWtvd3Y3bDR5RmNYTGF1eWlCWXNocENodU1r +RDgtbUctN1lfVl9TN0EACgkQ3xh45tnDsn/wMgwAjNJsV6KyVmL5GtytbvmEPHDH +s4Z8yS0BZF7wJr2u9QGQxjO/pthpGCnb2PNKUfLcXxXTUO9EZD8x9jV+WqaV8gL8 +h1zW0fWWpWL6hxwloAenmJCwydjjbWnpf5I8IUkJoliarNvy3f2dYwurus/G8Y1P +YoMHxQBGLojM2XRj97DxuVgTTpbCkTeNyot8PX9BMGcBAdzccExW6NZ07kpgILfx +hlVUNr/R/kRijf+kxG1WclKtKmzti9xjB8/00NgKUNnIyl9DC6vkZBsudIOCsopa +cu1c4bpVLtL0HhZfXfAaiHV/GmGpa9Sdv3PlP3N0UGPMNMNAET+6TUMzPYeXT9tC +0ppHKbIOqOx4qeHQMmXGv5YRTt4+x/HQleVL7vDOOasJu+YcFYaxfX8LVjJstTKh +bxR1PDHA3Rhvt6zulgHh6OE0seNTuMXzvKwUG2SBbRrmJtzQ7k+C4bKPolidPGfY +Jd5v/gzlRky4Hyoiqlg3Mu1smZxYqdA8rw1+wjaXiQNvBBMBCAHZAhsDBQkJZgGA +BQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAFiEEL+p725FxcKe45yAB3xh45tnD +sn8FAmLPBfmZFIAAAAAAEACAcHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxz +OnNpbHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRy +aXgub3JnJm9yZy5rZXlveGlkZS5lPSRkalVrb3d2N2w0eUZjWExhdXlpQllzaHBD +aHVNa0Q4LW1HLTdZX1ZfUzdBNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0 +dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGmYFIAAAAAAEAB/cHJvb2ZAYXJpYWRuZS5p +ZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29H +Vm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JGhLOV90RzB1N2Fx +VXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQxd3hFMmpNVDgvFIAAAAAAEgAUcHJvb2ZA +bWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQACgkQ3xh45tnDsn9tmAv+ +N2M+eK83AcE4EYbQiAmDlP6PJAzRiryYErTRO64bhq06JXPz7QvIVbsML6kou2hg +j51E4721EKS2essVlRqYf/5d6IKBjakEbgk3ta8jkc+jSSP7ARAjCWU5Qzjttucq +6Fs+uaQ8Xwdb9SamL6MmR9TSifVPxFm8n14jj4JUuXlpZWj++TprgDzz9hbq5ijE +LKYOaenSK8/OR6fzXgAF4+3tRwZRiNzf3Ui+cUtF+gP2b9GH8R7L+7bkMJ2MYkT6 +i7LShScXOt5htTva3lZ1ekFCzNhPOd+ubvDRfnJ+Jqmk9KaK/unb7c9N5vr1Ures +QFPIk1pIMy3PayWHgzbYmKmjEDpGiBy3ShKVMu9Fwx6uPiD16eHvc8VisuWNlDlI +lRK23lZKVJ27RdfIh892b5Ywn07J8CC5XSNl7M3cCsnXR6P/8/es9eLAyjip7QIe +pHW608TIsKtiGBXTamt2lIcrFZ5wCs9HUfhuBopxU5OzxuI4Jq74oG611n63bo0u +iQLVBBMBCAE/AhsDBQkJZgGABQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAFiEE +L+p725FxcKe45yAB3xh45tnDsn8FAmLPBBIvFIAAAAAAEgAUcHJvb2ZAbWV0YWNv +ZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFSYFIAAAAAAEAB/cHJvb2ZAYXJpYWRu +ZS5pZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9vcmcua2V5b3hpZGUucj0hZEJmUVp4 +Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JGhLOV90RzB1 +N2FxVXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQxd3hFMmpNVDg0FIAAAAAAEgAZcHJv +b2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZlL0BkYXNsaQAKCRDfGHjm +2cOyf7KOC/9/5NPmpyBKBr0ZcHP42VIS/88luyWf9qHttfw8dhhKuHIbqff3HwPo +BMmpWp6WOLtamoAAAUVkrzs2UtFGBs0W8iECOax8Qr5IU3qKSj9IFK5umt2NkTMP +6IFZ4UDWqZWZaH+2cWRdS/SgUJh3zxGIWJYkp2oV4yQQqKm/ZBRFC+ek2sI1bpoL +qf1xesOtBsorKFPKaJEG+0uEsogxczukpTq474bocRhFWNhQ7skNKVLcwo3uxmot +rxXPxj69RbIxhSPsQGYeq3+k/rEkptxng145iY11zalvizXzODVbjvjXWaewq+RT +n401oW3TchjTq8j+2e+ZcWyQAuFW6HrfpSMdUPDx30LXPhUcN6ba48KXdM5Lxovy +dGMixs94uPzYAQbGPK6LRRywXvMsEBtf+hihxzldDiuR8STTmtP+6YWsCiUOHu4C +QcLFXbH+5SBwUH0GRkqj9oZQr8rOsQjVfFnnyt/1v0qO39/46WOMeL265K/Ra6tQ +O36bn4SUD9OJA1wEEwEIAcYCGwMFCQlmAYAFCwkIBwICIgIGFQoJCAsCBBYCAwEC +HgcCF4AWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCYs8CzTQUgAAAAAASABlwcm9v +ZkBtZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpmBSAAAAAABAA +f3Byb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9AbGk6ZmZmLmNoYXQ/b3JnLmtleW94 +aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlk +ZS5lPSRoSzlfdEcwdTdhcVV3Zkh2d3NLd2VDWFdYNm5pLV9JOWs0MXd4RTJqTVQ4 +LxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5cGU9VFhU +hhSAAAAAABAAbXByb29mQGFyaWFkbmUuaWR4bXBwOnMuc2lsYXNAZGlzcm9vdC5v +cmc/b21lbW8tc2lkLTQ1MjE0OTk1NT1lZDhlYzA1ZDNiMGZjOTc3YjY3MTIwZDVj +MTdlMmMyYjNmMDk4NmJlYzc4OGI3MGE4YjhkMzQ2Nzc4YjhkODMzAAoJEN8YeObZ +w7J/SD4L/iUm43LYEZVG6G0RzfZxpP2L2JwHZCuMQGO364lmV5or0ZtQQERimXF3 +e+xCgqvx3Yb4nL6W0tVi75DFLJOBSnOshFnKXms/ufY065en9hiMBS+BmK6PlrO8 +6iwiefFMvSAlkmDp8KVqhOAB5P/i27C3Vd5uhLqRM1EEoWbgCxlOpaOnwBwNq+V/ +kiSaZ5o2HrDDGh+9ecpkEouel1H1qp+EvEL5BgreSLFG5OWDY0SNA6A4l5adM0u9 +PC/15DdCDRmJWcRUcb1Kqa19tuZezb3oPrVHVI75LhzKlf3eklDpDfrF8kgJGhvs +hcaeFWifyFu73aloYivM3ZY8uMUz628MPBJ5n1ud1RkORYSbbfDsDqwekAWsBq7i +WS1oymWMo6F/95DKFeJCzv2GMpZfWBLFvFH8/c7v+7LgboiwoTenlnZdAYaQMFsi +mXfG4+M/iAI177aPPRuU+1Yc4XKG3UeIUVmZkw8oYzrfNaIGdGeMXiZ/O39Eoasx +/a0NIxTLBokDowQTAQgCDQIbAwUJCWYBgAULCQgHAgIiAgYVCgkICwIEFgIDAQIe +BwIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/BQJidalDMRSAAAAAABAAGHByb29m +QGFyaWFkbmUuaWR4bXBwOnMuc2lsYXNAZGlzcm9vdC5vcmebFIAAAAAAEACCcHJv +b2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxzOmMuc2lscy5saT9vcmcua2V5b3hp +ZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRl +LmU9JDFMUjhPTzQwYkw2NDA3aWZmMDBKOGc5b2QzWnk0bzMtREFjNk5melREU0Ev +FIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFSY +FIAAAAAAEAB/cHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9v +cmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3Jn +LmtleW94aWRlLmU9JGhLOV90RzB1N2FxVXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQx +d3hFMmpNVDg0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9l +dC5jYWZlL0BkYXNsaQAKCRDfGHjm2cOyf1ZtC/9QQRWfVfBJwVV96P/bxqkQTlNU +HZNzAJ3NLmY9VmwQ65Y6g6feVMPle+f6QGR1qg/7BfWre6ZgaIcp9wfQKwV8D2a/ +9EzdwLbE+XAy5NTdIaXriqUdE4A2Wj1ga3HqnO11JYOAcZS2I71ieQkYgiQnp1RK +JZYXuJHXoi//fd6ZbrZxyM9lneKovac1qqb8nFM85E27H4kJ5k7kC9jdDzqeRliH +Dbz7rubFWYsUrEER7uM8+V/fs+GNWsg/5YoEHIrrtmBjq1LCpu++r/Jtlp3/ik+d +uRC/Z5Z2nypkrtq91p1gMBUkDqu5cTPywIZV5YNO4jaN+AdEJk1pB4plTJNa70vW +9mSEHPgomcwjXRrO7jsJAaei1bkKgSY9fC6glvAmlNt4lzlKiOBzPmyxoq6GFv1J +TGnd8kpkBEi+Xcenu1DmUCHcrq/2sFj9UtnonG71+Euhqmdqbx7jSSuilDyaULSC +KZFixzL/s+YO0P8O4XbiOTNzdq9bCJwNDxvt8TmJA/gEEwEIAmICGwMFCQlmAYAF +CwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AWIQQv6nvbkXFwp7jnIAHfGHjm2cOy +fwUCYnWhUYYUgAAAAAAQAG1wcm9vZkBhcmlhZG5lLmlkeG1wcDpzLnNpbGFzQGRp +c3Jvb3Qub3JnP29tZW1vLXNpZC00NTIxNDk5NTU9ZWQ4ZWMwNWQzYjBmYzk3N2I2 +NzEyMGQ1YzE3ZTJjMmIzZjA5ODZiZWM3ODhiNzBhOGI4ZDM0Njc3OGI4ZDgzM5sU +gAAAAAAQAIJwcm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQHNpbHM6Yy5zaWxzLmxp +P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dWbVNUdWpmaXY6bWF0cml4Lm9yZyZv +cmcua2V5b3hpZGUuZT0kMUxSOE9PNDBiTDY0MDdpZmYwMEo4ZzlvZDNaeTRvMy1E +QWM2TmZ6VERTQS8UgAAAAAASABRwcm9vZkBtZXRhY29kZS5iaXpkbnM6c2lscy5s +aT90eXBlPVRYVJgUgAAAAAAQAH9wcm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQGxp +OmZmZi5jaGF0P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dWbVNUdWpmaXY6bWF0 +cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kaEs5X3RHMHU3YXFVd2ZIdndzS3dlQ1hX +WDZuaS1fSTlrNDF3eEUyak1UODQUgAAAAAASABlwcm9vZkBtZXRhY29kZS5iaXpo +dHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpAAoJEN8YeObZw7J/1wML/AlJqYj6jMvV +VWF0YYLcL2zzogi7bvpIjKDOPYIKSMI1mKGYvz9M7CagsY/B/7FYX5ZaAwHV65xM +j9bm7IUwtB7krxUs1MGRnN/lyAMdphyuC6k1RptMmYoAEQwLizg8rbiq0fq97o/P +UVTWKpVzYart6g3Bfbm+Bya93IW2Wmx6hsKWxKT3Kvcrxb0Kj41aHtrbXe9N028P +6/ujKzRpq+CaNvIAcArVwMRqIFYLKYMH0aQPjVqhRIW6b3hcZmza+ZmAc5bPcUSH +zemvnPLKjlQVb0xiozG8EYTLU0z16NX1jwQao7HZyvTZSMj5ExDbqEPYH08apHEz +JjiyoFHsCvWIWpt2kvE4TG9xdGhgTf6PnEF6RCVsMDK8aQSqDQImDG1XHZImrHDY +4Dr6Adgk5PRkU8fEQLpJZBTWaH8HGtM+7F+nIFf2M9p28PZGSkIvKJaLDrT+eGoC +4WA9IByrzvukOEr2dUM0EIuiTeArBDN7AZXkeC4+SAWpxfpNhJxyRYkDcQQTAQgB +2wIbAwUJCWYBgAULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgBYhBC/qe9uRcXCn +uOcgAd8YeObZw7J/BQJidX+UNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0 +dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGmYFIAAAAAAEAB/cHJvb2ZAYXJpYWRuZS5p +ZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29H +Vm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JGhLOV90RzB1N2Fx +VXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQxd3hFMmpNVDgvFIAAAAAAEgAUcHJvb2ZA +bWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFSbFIAAAAAAEACCcHJvb2ZA +YXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxzOmMuc2lscy5saT9vcmcua2V5b3hpZGUu +cj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9 +JDFMUjhPTzQwYkw2NDA3aWZmMDBKOGc5b2QzWnk0bzMtREFjNk5melREU0EACgkQ +3xh45tnDsn880AwAmlIzYs0RqDgofVK2qomwiufi/ClVpI/QTIfrUf3L+XznXeC5 +Pj4882XPLd+023pafdf+ih9Q7TIwyBdxuQVZniZb1/WYT0LfYjOtOPImUpeuySUD +FAOrxSHNTQ7pCT+2sX/Bz5uK3JMMgh2hKHwJdWab+44ragMPo6htxVMhOViIo5Xy +E/J55TuqrSezDjnQingBZQYBbibHOG6gleGunHVelvtYadNsWjrMBhTvTigueUUn +HVC59uyyuhLLfdHrK9nKA8l5lYnvod7qNJOYq7mQnOd2l63rm5T9YuS418p2ci+l +SzHhhugm1PWHlmGqdVtbBNm/v3iSggK7Lzd0Bnrb59lcP0fDRiQBGzUIeM+mxnV8 +Sd+v5RPGnmYJXu0A3YdwvdLJ1YubejYZjMynTMnZmzltHA/g/iKgdWoR7Z3/LjRs +j2j5mIEpwGlRmsGb4ZEHSWAXJs7ZtjzSrVbYwCZ33pxtrnuRAaHaJCFdVmMIG5mC +2I/fxzcJPF6OLeV7iQHXBBMBCABBFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmJ1 +bRMCGwMFCQlmAYAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQ3xh45tnD +sn9YjgwAnpzuJiD/WqVpx72l8kvuGc50IEZVaLl/DiGHG0P02F8DrNjtDNpn42ZH +2Oi2vEr9w+WcAZp5uL7PI7x4qN8CVfKxAhFuOhZYL29Fe0mTYW7UDJF/kpU0PRTN +4hmz3Hi/dTnKwa0+nY57KF/sIpnocrnDXMF44zqohezR80abym8EHMZFomYyWLOo +wpxz9q3ld/+sjl4zD0uUkECilU1TQD508WO85fpXle2hOGvSWi8bRSlNfjNg9+/7 +PCrV1z8JN5VAAvGviEMpnAsTSPbGmSNJxcNKD3NveYag87/tKBROEd1VWELT9ReM +/jRzVFbbF+YNPIf3YIabOpGAJl0axffetVyTlzlHjX0jnvtHLi7nwDAJvVQB70wo +fVTIR+8J9LOwaEMmzS9ghqDT+aeXmrk4Kuet9stpQjGFJSJZ1dD+83Amu1Ip+BRE +eBv3EMrEz93CMQCYGzOR/XezAda8OlblTWcyyIdGS31CwCHxThz7VHRcBSni4hZZ +q0Rmceq8iHUEEBYKAB0WIQSWBvx0n84WNgcj1K2l6UAQw6ZCrQUCZMQjvAAKCRCl +6UAQw6ZCre3AAQCtEovfpCXUjiTypjnzCpke9rHIBnAVODTm93AAZ3BS1wEA98iA +skdHe9liLwLn9lA1BB3TRqZ6kjWMulKtp7U8zwy0G1NpbGFzIDxzLnNpbGFzQGRp +c3Jvb3Qub3JnPokDEgQTAQgBfAIbAwUJCWYBgAULCQgHAgYVCgkICwIEFgIDAQIe +AQIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/BQJkQW7VPhSAAAAAABAAJXByb29m +QGFyaWFkbmUuaWRodHRwczovL2NvZGViZXJnLm9yZy9zaWxzL2dpdGVhX3Byb29m +mRSAAAAAABAAgHByb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9Ac2lsczpzaWxzLmxp +P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dWbVNUdWpmaXY6bWF0cml4Lm9yZyZv +cmcua2V5b3hpZGUuZT0kZGpVa293djdsNHlGY1hMYXV5aUJZc2hwQ2h1TWtEOC1t +Ry03WV9WX1M3QS8UgAAAAAASABRwcm9vZkBtZXRhY29kZS5iaXpkbnM6c2lscy5s +aT90eXBlPVRYVDQUgAAAAAASABlwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL3Ry +b2V0LmNhZmUvQGRhc2xpAAoJEN8YeObZw7J/AaIL/0TLONGoB6BBR0/ET3Zh11Uo ++3ED8S5MOqdk27GTlah/s03RFnETyKBSHVoyqW/oIAQl88QRrdAzuak3OpZuoxRX +Ras7mVh8Yv71QnVmvex+MmH0MPfWEP73qKdSMefatKJopVR9g0fhSeWGImmR1E4Q +37f2ORzx2he/0obcwVtWRPupZhQ5iVsseRTQOPmgt82+LV7/dQPbOGw9oa9fizcG +7ZtI4hkJn8SSNzRwt3xy/I/rF37RAQbwqxVI+EZ9bkjbssAy3QBRVtp8vJZABrcM +F7VCtLKrWiofW88LW7KnVgSVUcIZ/omXCOOia/Q5jdVMKEAHxvS5rKz9EgH4b9t+ +94gFa4yp2CUXWlzZldyyOf6OWjYdTMMPLQmmghhsIu91aIK4DM8MEg7fsgDm+X8F +bRG597KjJRrFCxcrEpqn4RjiWa+une15A6FNjMfs4UAxUyz8xakjog5aoEu8JvDp +LipXM7/sO7p7zxDZU9dAypgsC2XiUQDqOW5hKwd224kDDAQTAQgBdgIbAwUJCWYB +gAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/ +BQJkQW1WOBSAAAAAABAAH3Byb29mQGFyaWFkbmUuaWRodHRwczovL2NvZGViZXJn +Lm9yZy9zaWxzL3Byb29mmRSAAAAAABAAgHByb29mQGFyaWFkbmUuaWRtYXRyaXg6 +dS9Ac2lsczpzaWxzLmxpP29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dWbVNUdWpm +aXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kZGpVa293djdsNHlGY1hMYXV5 +aUJZc2hwQ2h1TWtEOC1tRy03WV9WX1M3QS8UgAAAAAASABRwcm9vZkBtZXRhY29k +ZS5iaXpkbnM6c2lscy5saT90eXBlPVRYVDQUgAAAAAASABlwcm9vZkBtZXRhY29k +ZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpAAoJEN8YeObZw7J/dTcL/3Qx +g/pZ6syoO8y4U34wGExBFQRKknpZURr5DXyethMlKh+x/CVZ/NUZFhlzs37e71fq +rw0Yexcgro8676x6Tq/LX982MGO95sceeHz3hiiqw93LgZLw4KdcIg3JLL2VwywK +Ls5JIPxjF/zXa2++QV9euPrvWD6PI0fZIFghVD93S4Qfl9XpJyJ6IEC04OKf7klv +/8FqFqKuRBPPsLXPH3VckC3VrcsNUPppD3ZUHdpQRn31IOkDWC5t2z0w5kJutSSZ +1HD/u/04lElPAL1SDBk7bYzwMs+TkJ7oRgZTCwA3e8Ikfzrt032WRO6PAtX4cxeZ +/OtkuokSmSGhtXF9lo64qCOkwfw0uJIgTFV9k2FIB4WpjdaYs0rCaCpyKSp3Yg6a +GLq6pRuNbtfaY8kjUAfDOp9+NBgocAojoqd2nK+/wroo81fps5bM3N0V1qNgsTQL +c3Ar1nK4aPdxBLwHtg99/S3hJA3j/yG+gQXr+3ewH2xcS821QTLXpmd00mP+kIkC +0wQTAQgBPQIbAwUJCWYBgAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBC/qe9uR +cXCnuOcgAd8YeObZw7J/BQJizxBbNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJp +emh0dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGkvFIAAAAAAEgAUcHJvb2ZAbWV0YWNv +ZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFSZFIAAAAAAEACAcHJvb2ZAYXJpYWRu +ZS5pZG1hdHJpeDp1L0BzaWxzOnNpbHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFa +eENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlkZS5lPSRkalVrb3d2 +N2w0eUZjWExhdXlpQllzaHBDaHVNa0Q4LW1HLTdZX1ZfUzdBAAoJEN8YeObZw7J/ +l0MMALLTO4OycZTBEuhm66itGT8Az8xzj1y/A30DUBA1QoQ2vtcaFXeZe/pP/qUq +wlXmgWgpIUu8vKvY0OzNq0lt/WPGazdYdDFZJARcig+vmVMRPasNqU/pi5QPkpjj +as9EtwnHrn8Fh+lklw4Cty0FIcCjPVv43y80k9fZt4MyF1cktG0VUO6ASC7ahHW4 +MEQYqB6D9IehQdMLOEDAazVadanSXMAScN0Pnkxvd1FoS/Jubk6lLMMwul3Oihyy +nZJQtM9GgP1l4p1xpBO3AoK2xPvAaqCKuMIKFY51mK5+/rxU3xsZMyRJQWzy2p+s +m0RV/libGmG5bGH1S+UTd3BcR747JO4C9QkhXfhAagsA6iz0z2mXNxhaGhuKKv0o +orLU//ubYfJaMLR2sWRehkuWVlhAMHZ0yF+kFW5Wb/qOAm5tf8ILX2XjbrU03MIY +v7KMAY++6dB2SYJZTtOBDIjKmCyZisYFwszttb740gL1KsAxM6xsHpIOfUaljZu8 +WSV6hokDbAQTAQgB1gIbAwUJCWYBgAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYh +BC/qe9uRcXCnuOcgAd8YeObZw7J/BQJizwX5mRSAAAAAABAAgHByb29mQGFyaWFk +bmUuaWRtYXRyaXg6dS9Ac2lsczpzaWxzLmxpP29yZy5rZXlveGlkZS5yPSFkQmZR +WnhDb0dWbVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kZGpVa293 +djdsNHlGY1hMYXV5aUJZc2hwQ2h1TWtEOC1tRy03WV9WX1M3QZgUgAAAAAAQAH9w +cm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQGxpOmZmZi5jaGF0P29yZy5rZXlveGlk +ZS5yPSFkQmZRWnhDb0dWbVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUu +ZT0kaEs5X3RHMHU3YXFVd2ZIdndzS3dlQ1hXWDZuaS1fSTlrNDF3eEUyak1UOC8U +gAAAAAASABRwcm9vZkBtZXRhY29kZS5iaXpkbnM6c2lscy5saT90eXBlPVRYVDQU +gAAAAAASABlwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRh +c2xpAAoJEN8YeObZw7J/DUEL/ilBrutKMPEdU6QwtayjwfE1nBwhRxK6LNZaNe5t +EpH1YUS+Kg21gdVFhkSD34UNwpdqE2TdeRe1cLrm18+QDgRzaM+nkQzZmYSTFEa/ +q5IVudDqrdNAimYyJsUBDRVErBOKPDlIrcsZ9FYYwXDsv3fANBhGlMLC1ahQECu6 +bP5Y7Lx+GaAvfywoGAqZkqUmfOAvYvb2pCFQSZxc9TNua6iisyVgiuvNXt/GnrEG ++lLBRlPfG+MdXpYOTkxi9xuszbvAaD6Ec3TKj66fp0tFQrwGtmuGyJcKxv3pcA7T +Jcv8rtaAAqYQQ8G3U2GPIfche1ty3Q8ECSj9faKw9gqJO3WNpyiryB/2Ig37No+4 +3zzdCrHE0NsHDGwTBDRAx1L8rxWBZtLvTKquQntDmXj+M/xLb8nZ+x9JZcVf+3QE +o2q7uOaeqcOeJWOTLEdhjR4ETumxPTAvyszgEzwPH5foZBQXUJbXeoIonqm4ywPg +rsIfyXbsoOIFOqiwph+M7ET684kC0gQTAQgBPAIbAwUJCWYBgAULCQgHAgYVCgkI +CwIEFgIDAQIeAQIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/BQJizwQSNBSAAAAA +ABIAGXByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGkv +FIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFSY +FIAAAAAAEAB/cHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9v +cmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3Jn +LmtleW94aWRlLmU9JGhLOV90RzB1N2FxVXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQx +d3hFMmpNVDgACgkQ3xh45tnDsn/oSQv+PhwDVpYgAviMduLMZ8wLMNUYHsGXTwpJ +olCmnc/aMpB9GBM7FdniI2JiAP1Ln45QjABG0TEOrf+/FkSDVcYEz021VRpq3rPs +q2y5PpVc2PA0Y7pE6kpNE2hvd8jHJDFVzyukJInNiLXSbWk1aNes0yYACcXLKnrz +mkBllEaEsVohsfIzQVKWCypZHQbm1WOhTsh87jRWxA0bs7ryK0jPfx4oxOFqB8M2 +LkM84hODNrnoXyoLIMcJpT9gsWuoVVzWhwQzHg26ihXO8IDabIcoszJIZ2z2DBW2 +wTKqFMTMN6ak09OrTbI+g5Xy5rBaCHyCLHstXZt0i5iCNkwQQG3BgYA7m1eIjqKG +ykWQ42ACq8SJWp8L1eslaJVGrJSClCSgd8rpIqcXZLSqNwdlE6NxtQpn0cUrJihg +7X+oRbSFzHUno/ktn08P1gn9EE7vogLHMRMD27VOD172NyTu3iivEVnYcpFGfiRV +k0PGIwna+/DFJNuG7agUJs2Fv9IFgufpiQNZBBMBCAHDAhsDBQkJZgGABQsJCAcC +BhUKCQgLAgQWAgMBAh4BAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmLPAsqY +FIAAAAAAEAB/cHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9v +cmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3Jn +LmtleW94aWRlLmU9JGhLOV90RzB1N2FxVXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQx +d3hFMmpNVDgvFIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/ +dHlwZT1UWFQ0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9l +dC5jYWZlL0BkYXNsaYYUgAAAAAAQAG1wcm9vZkBhcmlhZG5lLmlkeG1wcDpzLnNp +bGFzQGRpc3Jvb3Qub3JnP29tZW1vLXNpZC00NTIxNDk5NTU9ZWQ4ZWMwNWQzYjBm +Yzk3N2I2NzEyMGQ1YzE3ZTJjMmIzZjA5ODZiZWM3ODhiNzBhOGI4ZDM0Njc3OGI4 +ZDgzMwAKCRDfGHjm2cOyf+tmC/49Gj5whhg6NM7gjkzGrkdG2gFe4CYeGrqxh5sr +VGo6iFbLug+fVF4N5ThBT/weTyVTCwZ99E+vKGK6JmrizMlgis0kUB/ne7N+Gn15 +THmqXPv5KwiNqUAjRfE0OluYQ6RKe6irvRuJlYqdM82RL/z1BLhvHSUIRFJFeBNn +QWe92EdpsC4AhxKbIsIqy9KeS9CQkyP3K/FIf9tpxT1ne/xNfY0bMqWGMKouC0zQ +43FbdBmCt5qNpT+Hfgd2uVu2SZqXTBQlhnqlHiySzOtb2eP+pEMbMB2ms6YBzE7U +gnGeny8RtpIkkIROIpy+pZObX65SbZLCFwbebqmIRCLDZLxJ6mB63WW3A8Jzvt49 +fvlnd/o9e7h/GB1xgWQP3ko8FIhJ2kBEl6ErotxdQCRvjqPE1qGDmYrt6w+DOZmP +G3/jd+E1/fUca16zm1HCdn5yDzOrhoeKnJzokSjQtcuMXJ+bLRGwGlj00ZYkEWUE +sncVNw41PPC92Zh26EogFgGNqFKJA6AEEwEIAgoCGwMFCQlmAYAFCwkIBwIGFQoJ +CAsCBBYCAwECHgECF4AWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCYnWpQzEUgAAA +AAAQABhwcm9vZkBhcmlhZG5lLmlkeG1wcDpzLnNpbGFzQGRpc3Jvb3Qub3JnmxSA +AAAAABAAgnByb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9Ac2lsczpjLnNpbHMubGk/ +b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9y +Zy5rZXlveGlkZS5lPSQxTFI4T080MGJMNjQwN2lmZjAwSjhnOW9kM1p5NG8zLURB +YzZOZnpURFNBNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vdHJv +ZXQuY2FmZS9AZGFzbGkvFIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNp +bHMubGk/dHlwZT1UWFSYFIAAAAAAEAB/cHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1 +L0BsaTpmZmYuY2hhdD9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2 +Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JGhLOV90RzB1N2FxVXdmSHZ3c0t3 +ZUNYV1g2bmktX0k5azQxd3hFMmpNVDgACgkQ3xh45tnDsn8T/AwAkA2/2uLfZCQE +jBZWKTJmZXO7XYSsaABcZPZYyjeUkwdRzFqX61cFD2i3R8kZ7UAablHunDYQmkRe +5S0Enq7GgxEE+qQXFyFJprPpI09gedkigsF4mGrGKooG0Kf19PH2yrZ6klERmmuE +mqbkeJUxh0iBM4snISbzFbRnUtMWS5hXbiojggqQMen7Ht3YF8Sv/Q/MkGfZBMUR +XmwVWeDSeTXqPqcB1QloxFeDvFxNYNcq0NdhgUHFTDfSHJT/IF6bIuG+yALqgLAb +GBvAFf9PcyHw0HhD/wcXjLYPRBFdi80yQhoKC0tdOwFsJLv2zHYf68nKIiKvdTJQ +6hz8tpy23L/usYR/3zzAk0xsPGubHKiSio2tKU/dgBK8QElt2krhzxI1DtIDBHhk +FmFV9L4vlhXLmrXt8seubOpecDK97YQ4k5nfB3kGqxARTcbeihIPeibTZznPWPax +EEoYue0OHh5hIiyTQpnrTVp1Y/Q1F90MdWWxi64UiGYrcYJpCdCciQP1BBMBCAJf +AhsDBQkJZgGABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEEL+p725FxcKe45yAB +3xh45tnDsn8FAmJ1oT+GFIAAAAAAEABtcHJvb2ZAYXJpYWRuZS5pZHhtcHA6cy5z +aWxhc0BkaXNyb290Lm9yZz9vbWVtby1zaWQtNDUyMTQ5OTU1PWVkOGVjMDVkM2Iw +ZmM5NzdiNjcxMjBkNWMxN2UyYzJiM2YwOTg2YmVjNzg4YjcwYThiOGQzNDY3Nzhi +OGQ4MzObFIAAAAAAEACCcHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxzOmMu +c2lscy5saT9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJp +eC5vcmcmb3JnLmtleW94aWRlLmU9JDFMUjhPTzQwYkw2NDA3aWZmMDBKOGc5b2Qz +Wnk0bzMtREFjNk5melREU0E0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0 +cHM6Ly90cm9ldC5jYWZlL0BkYXNsaS8UgAAAAAASABRwcm9vZkBtZXRhY29kZS5i +aXpkbnM6c2lscy5saT90eXBlPVRYVJgUgAAAAAAQAH9wcm9vZkBhcmlhZG5lLmlk +bWF0cml4OnUvQGxpOmZmZi5jaGF0P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dW +bVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kaEs5X3RHMHU3YXFV +d2ZIdndzS3dlQ1hXWDZuaS1fSTlrNDF3eEUyak1UOAAKCRDfGHjm2cOyf11LC/43 +AUh1YO7yDyoMCoGgqxdcXhZ+nneT+JKw6vCPvJdCjRv45XIDmQaQ7wgiNtl/I5kN +RtIbFZ24/u6NWfv6oXxE3egTSoy7qTct7Faw8gFSsvy9zshHH/g4sg4qgRU2nFYF +XiObqvoxU5xq2sdSNR3abqJUJQ0KinHPa59wZkKcvn5F5ZT/+6WjUueTr+jmVVoe +zOU2jhSvr14J6lsne4WRnLqXco/0VeS0vjMbBRX/MYI0mQ4w/8YyrUTMUMAZQVLQ +1oO7V34y1a8jBqeEwnSm09JW8N8VLII6rJh3qUVDrWzLB7LQ6NRkXrHjRjjLSLcU ++mKKPaai4DGZjX7ruQ4GT1+zbP9vvmfsFTnfM0HQTd0GSFFQ/XTBiaadKiX2N75v +ANL1slDWr09vvW5HosE1Tuma9U+SRR6DoVnIIFy7q8uJqQavsSK5sdbhk47W71s4 +IAVTy3u40xawor2cn8N8i6q6mfOJQOqULaRlP6uzVFJn3JEwFHuKHvgIpGf3nd6J +A24EEwEIAdgCGwMFCQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQQv6nvb +kXFwp7jnIAHfGHjm2cOyfwUCYnVqlJgUgAAAAAAQAH9wcm9vZkBhcmlhZG5lLmlk +bWF0cml4OnUvQGxpOmZmZi5jaGF0P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dW +bVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kaEs5X3RHMHU3YXFV +d2ZIdndzS3dlQ1hXWDZuaS1fSTlrNDF3eEUyak1UOC8UgAAAAAASABRwcm9vZkBt +ZXRhY29kZS5iaXpkbnM6c2lscy5saT90eXBlPVRYVDQUgAAAAAASABlwcm9vZkBt +ZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpmxSAAAAAABAAgnBy +b29mQGFyaWFkbmUuaWRtYXRyaXg6dS9Ac2lsczpjLnNpbHMubGk/b3JnLmtleW94 +aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlk +ZS5lPSQxTFI4T080MGJMNjQwN2lmZjAwSjhnOW9kM1p5NG8zLURBYzZOZnpURFNB +AAoJEN8YeObZw7J/Kb8L/Rhva+cHBUgeLWD7iSueBrV49scAVQMWSGF3uVjT9LPz +hFH9BIiHAO7LXRAffoHoqVdi5YHVMXZ7AK51cg3nvstdfJT49YjIt6dbgrjQsT2J +kWMbf34kIpc358wD/fWBfXPCHgtxUVMN/TY3Qb7R77u9EyH6CZ7kLtGNRCf0XSyC +IhkvOCswJamCBk+GfJPx+y2F9KC3VqqEUQUPZiM8vzmKwZRdUlKcXoJIgKz6k+fu +c9Fw+IBZq8ZFKrGYMcV+i3IxzhUAgpREm0AoE1Qjl1iGyOkJ+g2htpv80EdRMEiX +UqdDa+5dkcP9wRUaPvFC+RfP8AW9pzbvXj+WXh4k098sjJFMM6bQHCI7LgMS4lhK +9ltCy1Yf5mh5ZjNxYDk288Lqtw8bXVpwUAXk65BAXceP6wvxmG6r0olZzS8kivPL +JTUZPXkEi8nEHIUXO9weoi5jIM2QvoeM5mb5cE2YCbwmjwIANZNs4ICdps3dMOhB +Oo+r+YJ2Sf9xCfkZsCdoqIkC1QQTAQgBPwIbAwUJCWYBgAULCQgHAgYVCgkICwIE +FgIDAQIeAQIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/BQJht3+AmxSAAAAAABAA +gnByb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9Ac2lsczpjLnNpbHMubGk/b3JnLmtl +eW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlv +eGlkZS5lPSQxTFI4T080MGJMNjQwN2lmZjAwSjhnOW9kM1p5NG8zLURBYzZOZnpU +RFNBNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2Fm +ZS9AZGFzbGkvFIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/ +dHlwZT1UWFQACgkQ3xh45tnDsn9PzAv/WJERGb3uRMKyh5dlhsg6+LttnkjHLcK+ +hQd758VrCirHOTTg9U3Pr/PIPclRfEfk0q5YIcfm6tl5Du0CBYcQkQesZKaLy9KU +WOq2QCvNy2SqNwcpDtKogap/H82892mFtRO5+Lap7G08cXmSjJNMN83h9w5iGI4g +ghPZFEr9lGmz4ichUEXqr+VkJ2lIT5hdeBZitoIqB0/547BRec/dApkv/+Hd06sZ +xynZDXsdQXqNBzpYgdDm25p8kq95CFnht0rBBCfhwG22kSUtI8VMPow/PJVRDRKn +GLlMhhy+x/LFoGZQHDXXApbv0RB+93vbBccm2FpkKwGpdA4DcgChIsRiDL/ZnAPi +mPe2exaTKv6UkVFbPbj0s1K/au8msRnr2oLzTkUVWv5OdkBInj4ntNiJCZKBnCdH +UPwsChLVIz1gcyh0OHIGdUGY9VExcFgYBuEgzVsX/FFb5APlfiPa+OXc7/0g9hDc +o2jDxcgrCEGhU1U1TyGk1PCwQxCS9SlmiQI5BBMBCACjAhsDBQkJZgGABQsJCAcC +BhUKCQgLAgQWAgMBAh4BAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmG3fkYv +FIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQ0 +FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZlL0Bk +YXNsaQAKCRDfGHjm2cOyf+eXC/0TmlkUhH996p6/33ybxk1Wx3dL4qtD1IMhGTcj +bTUfPjbOWRV9mqYONTAA9Kg8cNzhAwwXaEEztCVTFX7/Hqt6fpPc3tTwFFfgQO6C +cRaMgbUhSHg0gN4MatbY12mWrMJNVScI0XLNXRmP6Ow8G8RzpYl1XdLPYoWbmL7e +iCk3yO8WiFkpFpDkO/im7AKI3m3XLOwEGn424P4qW6P4LmRC8XV40qIDZzrh2Dxq +XMui+hVLN41xYkaZcI5Y0LRW227hkqMFypkh3Dpaimz0QosnwtgQlm/+J8zMHDyj +k2oLYpEJNaGlAGdEbDbQ9piB44ZbB1jHoIsFZSAAydr5uV2ClCN/jLr/YhtWsebr +yArofcC0gF2caUhr/Vlnh1WRNncn/BVdQ5a06yJ8zqJUz+oXHANVfJU+N11PZRHz +tmogWXmeALm4H2UIZmBfgorb056TxIhGOP2Rr6yykKLGLVmazAiPkLFiWJjS47H9 +1s4aMZVn7qhaHhFt18JvHezXciaJAtUEEwEIAT8CGwMFCQlmAYAFCwkIBwIGFQoJ +CAsCBBYCAwECHgECF4AWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCYR6NhTQUgAAA +AAASABlwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xp +LxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5cGU9VFhU +mxSAAAAAABIAgHByb29mQG1ldGFjb2RlLmJpem1hdHJpeDp1L0BzaWxzOnNpbHMu +bGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3Jn +Jm9yZy5rZXlveGlkZS5lPSRsSU1YUkUzMXJlaG1iNWc1N2dRYmc4SjNya05aSkw1 +RXNlWjhuUWw1V3BzAAoJEN8YeObZw7J/+GML/0aPvBgFFBXd7LKR/Hyf0WQ1eUUL +/pkELt/AQRGwOaAEyUnfmKtqTI+qVeD7UNpcDHdjwchBmkfG5W/N8Caavow7jCdu +0px+BA5WWO7snDW3HOzFKIRgDtajtljX69Z9Wh9aYsO7sYapSMCsmIx7h4SxOxSK +oh6nZOaN98dzx9PcyjbSneToGyYDb+5nzTiYWiaE8LQAVkdZeFAdSN4UDenVXd2R +cLozZVQjYwhk+fVDzlcj9HoieEKpSEpUp+dWZJob7H4z9AVLieYwzkfFmApG9XaJ +wZPx8u06c82q+3ZHXd0HLd/cQFCSL558pmhp8HhnDMrYipRoJ3tX7SqXXrhi3gA9 +1K89I3xhmpiz9dq2B/Qdv8Ml+D9qQNIpBWqns2zWkWharqNmWTxmAsTPY2rEMm0c +81dWXZ61Lra69A9XXUQg52xRNS1AKF8C0lMehSdBu2a8+HlZHADhCjLRaljxvhUK +vqTaL7/f5a6fN6D0wvPOXgYP5+u7Jv8NnLfO74kCoAQTAQgBCgIbAwUJCWYBgAUL +CQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/BQJh +HolFmxSAAAAAABIAgHByb29mQG1ldGFjb2RlLmJpem1hdHJpeDp1L0BzaWxzOnNp +bHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgu +b3JnJm9yZy5rZXlveGlkZS5lPSRsSU1YUkUzMXJlaG1iNWc1N2dRYmc4SjNya05a +Skw1RXNlWjhuUWw1V3BzLxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpz +aWxzLmxpP3R5cGU9VFhUAAoJEN8YeObZw7J/+RkL/10AHiebFztglUSi0/2auWZ9 +4SCX/n6sgwtcUD0SOLUEQjkXlhgGQJy3UfS6VCgNl0fkfkf5E29g9tY4rQS0dL1D +3PNChFsiF6b9XymIqrCz5Kvgt+6RjC1uFTl32yhsmbwL61E3mn9e1nlXZcpv2T2i +xLeU71kNRQR3+lkvJdbu2Fli750n6AS0iMboeLTzLZHK9Ai0CZqZ84O8lvEBCSNL +WCg8OoLfsvTs8XiAiBvY+Bagc5AKrM5tLwdrm1eiVNtHOZNZ/EXEfYMQ23uh02Li +znd+HZMo9URKB9mbtZilBl2O3qorQyhs9lQNwUgrATXxJMUnrXmFy73LLAqT6MX3 +iLPMiA3Da1FHGxVKhcHu0PuWd3vyOqnDUQ7DEg1z8X4NtMOszvMCBH5I+pe7kDQt +jsiGIDaFl0v0bWOqIfq+d4hDSC3o/cAnNRLnsU5GYhI+YESRb80qBD+UKBvvm2eD +MXNo1/weVq29g0k7Ozt6y5EAvrTMcQeve1qXcQDe/4kCBAQTAQgAbgIbAwUJCWYB +gAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/ +BQJhHmJSLxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5 +cGU9VFhUAAoJEN8YeObZw7J/QVEL/3YUztd5V/JQPHyAezqTD8mEVNu4bkLd1E6U +kwFb5e5wvcNndKPRhdL8JFtHGo/vnrglkpoY7KqLPKq2z7NCQbsR5YT5iWIlfCi1 +Duwh207l/wxzohlDuYPe00AFnm/B19eFjFLKI7/dixOkfZhNDXgtz6BRiYG4Dpmq +cnwYR2+xqul0cQ92+6IApVsdNzAyuHXrYyRtVXw1WxG9H3XmzuZl1fNRhpENsc0r +WAclp5F2KD3ZP58zL6N5stKvKGbfEdoAjoZVSjuFR5K3tYHH6gYAccyxuLgYwRhw +5HWkQ4dB8Xv5vV2+v2SQgK39NYufgVX1YBM5O2YXFRBoDc0yCP20PQ4XxbtgdcT6 +rMemuYSEWmFarSwlxHsHMreoSbwxVHrfBySwM4rqoXqyfaTHnVLysF6WNjD7h7d7 +e0rXL70aD9BKwvweQKJBhoCGTkwt3IOEhiPawD59m4EcbXji8YCs570mK2uoc4kp +JjuF1DlS1L1wd/unYaKIinbm34Q+34kB1AQTAQgAPhYhBC/qe9uRcXCnuOcgAd8Y +eObZw7J/BQJhHl4PAhsDBQkJZgGABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJ +EN8YeObZw7J/yzoMAIUUWbESdqwWbIe0e3VviEmrW7kArLRV9AFfVYvnA+OGObOx +FYcDSY2vH6kQetRLlYV19OLM91N0/Oqh/wwlmpzFrLjXkRG+aNu5IKRh4noythO1 +CH2BUo+n/JeodpVb1x06EYeZQVQ2ASche0hzzw4Zx2P0z+6Mg/IbK/YlUonDvTrI +Ioptt8InjXiDUo3D9n5Rzgn2zPf2c6gF79IbBZl0fBN+V/La1O+lOdhT3yajb21b +Hr9SmEdtvs5GT1WSpEpJDtZGf0Y5Kv0UGIrFn5dYJFzcRjHWbuB3bB/STHVVgoAS +ueLV7xDdqbO6d5DsVtvExiBhWI2LAtQXttzRnHIGajuNP2852ooXqVpUa2hu93RV +Uf6XlRBg6hHPnhRZYUr2gaAWH0VKDw1m6eK3SToNVD9GQrA+j8cqhr4fjemZaqqH +U3MIPwUvNTcYtecy9e4AopWmS3nIkJhsdSOIyXIGVHKt2I2qwFTAPOjm1CAy9S4Z +v8lVNVFDxhsM7LNHboh1BBAWCgAdFiEElgb8dJ/OFjYHI9StpelAEMOmQq0FAmTE +I7wACgkQpelAEMOmQq3gGAEA0YkCNt4pTGr86xG10Lcz6Ds6y98GjZrWPpHUZL1m +zxkA/jL5xHj3Z4uzQEzoITj4s0Yh0YzDIpej6J6pC2Tv+SEJtBxTaWxhcyA8c2ls +YXNzY0BzeXN0ZW1saS5vcmc+iQMSBBMBCAF8AhsDBQkJZgGABQsJCAcCBhUKCQgL +AgQWAgMBAh4BAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmRBbtU+FIAAAAAA +EAAlcHJvb2ZAYXJpYWRuZS5pZGh0dHBzOi8vY29kZWJlcmcub3JnL3NpbHMvZ2l0 +ZWFfcHJvb2aZFIAAAAAAEACAcHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxz +OnNpbHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRy +aXgub3JnJm9yZy5rZXlveGlkZS5lPSRkalVrb3d2N2w0eUZjWExhdXlpQllzaHBD +aHVNa0Q4LW1HLTdZX1ZfUzdBLxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRu +czpzaWxzLmxpP3R5cGU9VFhUNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0 +dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGkACgkQ3xh45tnDsn+x4AwApA8PTLYRemnD +rNTFfLXUb7kiW7O/Zi93a1hT1g77NoovpZT0Rfd6Jc93579gK354N27W2P7YflRi +IYxp3ch3WX4NgpxTFvx1HbSa9l+UNvH5TmFJmr3EonDLOtZWpPEPdbq5MJANCAYH +5jT1l/MXD+VnUtyN9aFqFuZR2XLDh1VPDB98TTlwC9GYe/QHouCw+PhqZXii58S5 +SgHlzGx5SHtdVfWl/POzy3tlOHHzkBiHo4VLbIbiB2T2GRvmpPGOCH+d27qUrIZV +eF2jfn0opkxW/1Gl8xhyUHS2b8I7/7Zjfp+UareOmR6ccBUaSwCt45b4fnuq/wgJ +kxD7WoxXkr8rw+H2jQoJTxY1EKUYo4GJBUpjU6VYMGpGWxfZawM/z5hiKav57VuE +5/FXJR/c/fJjjBTFOHC0Z9VPDlpu+SdfWe7m52/MEHawLWL870emTbcyTsPyVI6b +bVoNwKEpDcUkTrZUPW7Q973n00s7hMnb2HmkX6t5sfXmHBMkECitiQMMBBMBCAF2 +AhsDBQkJZgGABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEEL+p725FxcKe45yAB +3xh45tnDsn8FAmRBbVY4FIAAAAAAEAAfcHJvb2ZAYXJpYWRuZS5pZGh0dHBzOi8v +Y29kZWJlcmcub3JnL3NpbHMvcHJvb2aZFIAAAAAAEACAcHJvb2ZAYXJpYWRuZS5p +ZG1hdHJpeDp1L0BzaWxzOnNpbHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENv +R1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlkZS5lPSRkalVrb3d2N2w0 +eUZjWExhdXlpQllzaHBDaHVNa0Q4LW1HLTdZX1ZfUzdBLxSAAAAAABIAFHByb29m +QG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5cGU9VFhUNBSAAAAAABIAGXByb29m +QG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGkACgkQ3xh45tnD +sn/UbAv+ISlXhbvE0MSRdCVz6zG8PwnH2Q0ejFcrwVBroJ+haKq7E+rWNlC+YNra +jZvVYDvlhQmjNB1UU/xBU7DP4PfCeZj8HNHU897aYfS7qhPyXiTdudHEAsmlnA7O +/eyBVBXqjWDAIWNy7/RzmTFIEX345H5HT1RmdHHaMSNnvlN5lp2TOB5qLAgD8q2c +Lq/HgNthePowyS6Tit06BdvoGgCVbBow20Fc10l326/3YuUX7nfJvfPSTr3X1eiH +XGD3DJNvFUONF35jOCIOLGVs0LgsEtnYiRvoUobXEexTTvj2IZq9+tsGszTPKHJU +25erDuJBprO5Lb9BV6orBYEDWiiKpcw1ZtD0SKnsprS+9JpBvz64H5qHgA6fOqcf +WdmubTZHt0JzqqNV/Ye3YMy2bFBuJt+ZWkeIUAEYgLfbv4Cp2z+7OkCeoVBI0ICv +h9HEmEvc2JWUr+Ir2f/jczewHDqRkpl1beFYsjw4yOTyF9W3mkj1ysWVm+9cy//p +WiOr0LUdiQLTBBMBCAE9AhsDBQkJZgGABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheA +FiEEL+p725FxcKe45yAB3xh45tnDsn8FAmLPEFo0FIAAAAAAEgAZcHJvb2ZAbWV0 +YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZlL0BkYXNsaS8UgAAAAAASABRwcm9v +ZkBtZXRhY29kZS5iaXpkbnM6c2lscy5saT90eXBlPVRYVJkUgAAAAAAQAIBwcm9v +ZkBhcmlhZG5lLmlkbWF0cml4OnUvQHNpbHM6c2lscy5saT9vcmcua2V5b3hpZGUu +cj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9 +JGRqVWtvd3Y3bDR5RmNYTGF1eWlCWXNocENodU1rRDgtbUctN1lfVl9TN0EACgkQ +3xh45tnDsn8+rAwAqAwIzZHQYrbu1LlO0xa3+H2mhP54OpKj2c+yaDLFT6rpAjUd +tEn2Bx1TIhKjePvZiHnXk5QgRcuQ7pgynLCEVcrS3Dy9gpGc3wNFGa5xsCyz9E0D +/aRw3weSLqTc69y1290JNqEdAWOQ0BY6D16DRw1OjZfGTlaqs8I/FOt6MHNoURlv +I0ucUkMejdlPWNzjkO8HwCNpu9RQPOyamqAfJCm/M+OFoXx1WtzPQvpioIfw5bBO +uPI77fXrGSk+ydud0gW5xchi5dLIDnfMEWscYpEP7GEEQvpLZj2UQa4WOpfz1k8+ +PqAbMSCT0S8h2wvJqiepjEwmkN47F9IshV3vc22Pyk4vSlPizoly1YjBnVhhBNX7 +keBZUZFqTAruKGNEJ2uQFqNw1A3WaoFJxapaA1SWdems/TSXNuj43F4pvClxQxZr +wQwVA8rOISEMFfS8bkcx5vUfEeJvE/JNfiZBEYmH+XfDZRYeMeUQkZY548LHLUgj +lsqVPexm7qUbfPcKiQNsBBMBCAHWAhsDBQkJZgGABQsJCAcCBhUKCQgLAgQWAgMB +Ah4BAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmLPBfmZFIAAAAAAEACAcHJv +b2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxzOnNpbHMubGk/b3JnLmtleW94aWRl +LnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlkZS5l +PSRkalVrb3d2N2w0eUZjWExhdXlpQllzaHBDaHVNa0Q4LW1HLTdZX1ZfUzdBmBSA +AAAAABAAf3Byb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9AbGk6ZmZmLmNoYXQ/b3Jn +LmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5r +ZXlveGlkZS5lPSRoSzlfdEcwdTdhcVV3Zkh2d3NLd2VDWFdYNm5pLV9JOWs0MXd4 +RTJqTVQ4LxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5 +cGU9VFhUNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQu +Y2FmZS9AZGFzbGkACgkQ3xh45tnDsn9r3Av/R9+c7npoC8Oo8IU++UjzHcfd+Zs+ +YwJc0WU5ZwOW5KCoyAMHmAYXi/ZD/e3atUNwrgZhKMXRNxDIuvdqIq5euBzdTjd7 +wJYKThB44sLVNtE4DWULRAWgAQovpdcSoeg3iZC45LxQlBfgNRBPBCkZs/yF3Zp9 +hrZOSN+krZvanZ0fywJTRKYEUTgejDP3lgXUU8w09Mw5IQ0Xfiy+vGptfziapNGx +BK9Z2tRNOZln+zwXNP+U5wQ7psGgznMM9eEE4+jzEEsgsxoXcsNmChfm4K1ltCLt +72mBs6iEqfBIaAidOX4j8g2Idh1bt/qof8jWaBJwFrVaU4/q+Uex7+7CO3bBrkv6 +rHBrta1D12T3s5xYlbxMLf4H/tqvf3K5PwT/6GXknchXjyoTwtd8DTTWtr9PUARW +/hfjgkx9Epjc+x16u5bM1iU+kmv4HygwMZwMRxpBOjuv3Z7HiamUgsfCYfJUhxIr +JEpUtLTvsiUPNmm05A6BVnpR7tHhsHbU8r/iiQLSBBMBCAE8AhsDBQkJZgGABQsJ +CAcCBhUKCQgLAgQWAgMBAh4BAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmLP +BBE0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZl +L0BkYXNsaS8UgAAAAAASABRwcm9vZkBtZXRhY29kZS5iaXpkbnM6c2lscy5saT90 +eXBlPVRYVJgUgAAAAAAQAH9wcm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQGxpOmZm +Zi5jaGF0P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dWbVNUdWpmaXY6bWF0cml4 +Lm9yZyZvcmcua2V5b3hpZGUuZT0kaEs5X3RHMHU3YXFVd2ZIdndzS3dlQ1hXWDZu +aS1fSTlrNDF3eEUyak1UOAAKCRDfGHjm2cOyf4WGDACS072ObGtwGJhMZElGcqxE +b4H0XIbAZHcuCqA5lFNPgeayozXqMUk/SXiYcqb38yMyHyT1BWVGa4LSHoGwvt15 +u4RwU0SgRisWTCZsstB8T5ePVu7HA0xICx4RBdxhyF14T+Dno9/eqMx5VaAL434O +r1gHwFT96D99hunf0cjHPBpQEGaDAPIXYlqOZ6ExQA4GufFQv9uNSusXpHw/pWrI +LU/CvbrSLsUckbfXQ5BXzo/vRg92nIWVOcq0T9NL8E/5WuQ4aTowoI+lhC703wP3 +lG9WS6Mb2x+4ubahWLwBXbaBvHytOPJdEqJnsilpFFFJRpcNYrznh6sKXqjKSYxJ +mXcRsRsx1H8a/Cl7jQeX8pGo3xmNb3GUjLYaaxdekypbowGM+5GAmwB+GhZ0wEzx +pdYyUaJ5B/nsZrvNzjhujW3oTTrKCH9/p+yg2rsNfzXjnETna7SvQVh9wekP+ieA +cL5RsEIAfP1QNG0b9dHZJWvXSNH7Du/AG1NI64m56BuJA1kEEwEIAcMCGwMFCQlm +AYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQQv6nvbkXFwp7jnIAHfGHjm2cOy +fwUCYs8CwZgUgAAAAAAQAH9wcm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQGxpOmZm +Zi5jaGF0P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dWbVNUdWpmaXY6bWF0cml4 +Lm9yZyZvcmcua2V5b3hpZGUuZT0kaEs5X3RHMHU3YXFVd2ZIdndzS3dlQ1hXWDZu +aS1fSTlrNDF3eEUyak1UOC8UgAAAAAASABRwcm9vZkBtZXRhY29kZS5iaXpkbnM6 +c2lscy5saT90eXBlPVRYVDQUgAAAAAASABlwcm9vZkBtZXRhY29kZS5iaXpodHRw +czovL3Ryb2V0LmNhZmUvQGRhc2xphhSAAAAAABAAbXByb29mQGFyaWFkbmUuaWR4 +bXBwOnMuc2lsYXNAZGlzcm9vdC5vcmc/b21lbW8tc2lkLTQ1MjE0OTk1NT1lZDhl +YzA1ZDNiMGZjOTc3YjY3MTIwZDVjMTdlMmMyYjNmMDk4NmJlYzc4OGI3MGE4Yjhk +MzQ2Nzc4YjhkODMzAAoJEN8YeObZw7J/G6UL/1H/fk89xpj9oz6aVkvaf6xoedu7 +ofxi2LZx8jaI4P6jVz4J45KBJZ2ULQVRJOYw60QhohfjjscxKXJgB6oYYiXlVtlh +GmG/DBJ3l0HFS+aZmg89J49qG3xHyghhDX/ABw9mT21cIygd21vAViwcb1dZSYeF +m3Q8rV+jF5Cm0LvK+7UigXSJbHBUtMQH3ZIQGym+SEP+FCbD9A7KW3SWmZuDUwRa +ZBTCoenGUD8Bx4tSjns7zMvWkwZdxTiiqMAE/jcvzhmBZIWhGpkEY97ns3mihbEd +hjv1baUk4h2T9R9ASJMvmUfKEY4JxLvbxebquSOC+etMKZ/8ySuIH2Afvw1JtJdL +1hIL5czCpbtDlgCaRxHKkfZx0RiEakze6WrRHr2XLh0TSdIKEcIBSt0LTW2uRJqM +GVsxczzBU/G3qZcCWAjorcqma9N2B26viH4RtRtszEuvJZl0EB78GrDVNud6fyuE +aewdBSU1LqFb4K64f+xmQn8fvAXjthSXWySzNIkDowQTAQgCDQIbAwUJCWYBgAUL +CQgHAgYVCgkICwIEFgIDAQIeAQIXgAIZARYhBC/qe9uRcXCnuOcgAd8YeObZw7J/ +BQJidalDMRSAAAAAABAAGHByb29mQGFyaWFkbmUuaWR4bXBwOnMuc2lsYXNAZGlz +cm9vdC5vcmebFIAAAAAAEACCcHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxz +OmMuc2lscy5saT9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1h +dHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JDFMUjhPTzQwYkw2NDA3aWZmMDBKOGc5 +b2QzWnk0bzMtREFjNk5melREU0E0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6 +aHR0cHM6Ly90cm9ldC5jYWZlL0BkYXNsaS8UgAAAAAASABRwcm9vZkBtZXRhY29k +ZS5iaXpkbnM6c2lscy5saT90eXBlPVRYVJgUgAAAAAAQAH9wcm9vZkBhcmlhZG5l +LmlkbWF0cml4OnUvQGxpOmZmZi5jaGF0P29yZy5rZXlveGlkZS5yPSFkQmZRWnhD +b0dWbVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kaEs5X3RHMHU3 +YXFVd2ZIdndzS3dlQ1hXWDZuaS1fSTlrNDF3eEUyak1UOAAKCRDfGHjm2cOyfwq2 +C/9gKXhGmi0Rk//MK72kPuokFn5vuBNcGHZwydU/EcNGOb/AjQkIpTM0Ktx4bp5U +fRwdpYNeOxchHGi1MFjlagfxj9QdmgByxjUVaMWExdputniIXg1GuDB0plr2pGsI +TjLM6K4rSnV1nf/fFIAJkmQZ6AICIQ8VQvgVS9VlZ5LqMRA0rRIzyPtdfoh4I+IT +hFnXbHDp2oXfQhNKTf/MJKV5Rw53AoK8TIEtc5FlxGiDIzj9CoQOyj58/ffiDk4B +eVRezNXpaoCoDKvo6JatIwiR9ONply/mCGfkI2BtyJOsMiqPbK3GUdrFSEPfF1b8 +2r0DU2Ke/qhJF7Abvyx9g7tP2CuaAmcMUB0DIPAwcUxgIIwPIJj7Q8xPI06bGTAk +jJYO62rmqQu8klA6JKcnvM5Vk8IHEYjLsJ2DmYObvRVzTjYaHePMi0e1CUgoYUp1 +UUgo4hJA3bYv7lNrQfLCvhI5Mx4rbLJGW78xpCqg1aj8I4LgrnoHlp+oCAKa0xkt +ds2JA/gEEwEIAmICGwMFCQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4ACGQEW +IQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCYnWhI4YUgAAAAAAQAG1wcm9vZkBhcmlh +ZG5lLmlkeG1wcDpzLnNpbGFzQGRpc3Jvb3Qub3JnP29tZW1vLXNpZC00NTIxNDk5 +NTU9ZWQ4ZWMwNWQzYjBmYzk3N2I2NzEyMGQ1YzE3ZTJjMmIzZjA5ODZiZWM3ODhi +NzBhOGI4ZDM0Njc3OGI4ZDgzM5sUgAAAAAAQAIJwcm9vZkBhcmlhZG5lLmlkbWF0 +cml4OnUvQHNpbHM6Yy5zaWxzLmxpP29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dW +bVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kMUxSOE9PNDBiTDY0 +MDdpZmYwMEo4ZzlvZDNaeTRvMy1EQWM2TmZ6VERTQTQUgAAAAAASABlwcm9vZkBt +ZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpLxSAAAAAABIAFHBy +b29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5cGU9VFhUmBSAAAAAABAAf3By +b29mQGFyaWFkbmUuaWRtYXRyaXg6dS9AbGk6ZmZmLmNoYXQ/b3JnLmtleW94aWRl +LnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlkZS5l +PSRoSzlfdEcwdTdhcVV3Zkh2d3NLd2VDWFdYNm5pLV9JOWs0MXd4RTJqTVQ4AAoJ +EN8YeObZw7J/D4sL/1ZDzzOzfhQ8qOmUje/9BYqOSevipKK+nv32UIy2aiShJnkN +2SD0OMN4xLmyxSJ3ynZuPFcE/J6g9Zyyk2O+BT8xTQ+O5CdV5BLUFLsbMc2y8O7r +8qTnmuZE2FvOyae/M5a4rrCWCKMruijj0Q9PSThYJRd30Y+VSJfck9UkJcELx7vj +s2GLSxAkyMrOAoLfUuqjQYq+GoniWWQrcCTDV+4Amordk0sajNJvuGTYo/1p6/13 +VvYVRmFJdKtHJFWWtb1q0RlO4aanA3LRpGq7Si/auxoqEcH3t3Jsify6nKTljDU+ +CjFo9aJ9W1S5aHQ+OCYyP8FOacX22c5iODX9BXuJeTXaF/TzUSiuMY1SDpFCwxvP +9RslRQBKeycoAvzqTmLcvdwWxa1ZXRvUSKUUApmuPZVJmhD/jnkwM4v8vcqekvLH +N+bPccSRmFGoF+U3unMRsVrP5FUxjOOtn+CyOZR8fjB/1W/eqsZ2tWcMOLTyFZoH +h4NVPTqYOqsduhOAcokDcQQTAQgB2wIbAwUJCWYBgAULCQgHAgYVCgkICwIEFgID +AQIeAQIXgAIZARYhBC/qe9uRcXCnuOcgAd8YeObZw7J/BQJidWpdmBSAAAAAABAA +f3Byb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9AbGk6ZmZmLmNoYXQ/b3JnLmtleW94 +aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlk +ZS5lPSRoSzlfdEcwdTdhcVV3Zkh2d3NLd2VDWFdYNm5pLV9JOWs0MXd4RTJqTVQ4 +LxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5cGU9VFhU +NBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2FmZS9A +ZGFzbGmbFIAAAAAAEACCcHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxzOmMu +c2lscy5saT9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJp +eC5vcmcmb3JnLmtleW94aWRlLmU9JDFMUjhPTzQwYkw2NDA3aWZmMDBKOGc5b2Qz +Wnk0bzMtREFjNk5melREU0EACgkQ3xh45tnDsn8prQwAiRVx0WOeemcAhiYRqDeX +Km1+ms8TpvGqka1i+UuVZ3QY7EDldZ38V9vP93gojgbKYmzpJBWr75EV+UoMMfZs +pvH/3et+RKItAI15PwoKtCCMUycqiJcmLBMlYPhy1wyp+7zE4ltFFIJ6Z7yDpyUH +75xolgsySnEFAinTHJ5ruJbbPyu7hBRJxtFGPVZzSeYjU8ikA1hGbdjYQc8AevQP +ZCyZthiNU7PHRDaRmiP3lJ7325bDx0Emkzaw9zp8vu/JI6EWrws/Ta4hxM9nNWSX +Xv3vdFLsMDAZ8qFlstCPjCZL09ZfD1d70MuGLbRvc7XMPp4ZIp7CZnRQ1FHf/PVJ +R+uqNtYUpqeB8Q7U17oYpU98aTgawbF7x02Ym7i2Vb9aPgKB+hU7nrfMevU90hUH +Mtu7ze7BZlj3otR9B2QT08PqwWP/yUQoQhSwWyxxSRLN/ecedH8fDo5kc6GCMpVi +/heVT9UoSpVb9H/TLlyR9Z3CuXDvXJCAcTP3WW5t6DsjiQLYBBMBCAFCAhsDBQkJ +ZgGABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAhkBFiEEL+p725FxcKe45yAB3xh4 +5tnDsn8FAmG3f3KbFIAAAAAAEACCcHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0Bz +aWxzOmMuc2lscy5saT9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2 +Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JDFMUjhPTzQwYkw2NDA3aWZmMDBK +OGc5b2QzWnk0bzMtREFjNk5melREU0E0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUu +Yml6aHR0cHM6Ly90cm9ldC5jYWZlL0BkYXNsaS8UgAAAAAASABRwcm9vZkBtZXRh +Y29kZS5iaXpkbnM6c2lscy5saT90eXBlPVRYVAAKCRDfGHjm2cOyf74nDACbLYlO +Oc4PL/QMfzrNzne9ofkh2vmHV6MCYPKTrCmGP3Bh+Sl92J2YEa3CyqgbwtzAcMQW +YX1Rttgr8t3IkTYWnGxdgVjEoMvioMQhjOkmcBPEOWhjAFpVUlKHz7vyfl84C5l8 +0OC6m7cwtdEhBZEsHTiT7y+9VscgAuR8Hr/vKmicMkmYrCA8jND9cvE1mVlmE4kb +isFCBaltyS8t8vldewotQeSvc93pd5Wv+RZF4YMIMnzk/RujPQeWNYAk3bjLcN4Y +wTlHU5KfL2HoMfv1/QmrNfgWTXYEmRw2dybwaSIRVZpr5OqXolIRW+xsyZPcjfiG +W/ejuoHLcYps5/kTBD6swERk925GwmTcwTMterA20aEzLTBJ16glPsfs8mlGzJWF +FiqfhqMxasP4kd6puxmVh4oBow8o1GMQEqYZ7SUDoF6c0zQ2nlXppcPw4e6eYRiG +15M7wlSnI4N0tEg67eGq+58Oob7cIkBe32GEmEwMHRE9oWMJK8QtjmITxHuJAjwE +EwEIAKYCGwMFCQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4ACGQEWIQQv6nvb +kXFwp7jnIAHfGHjm2cOyfwUCYbd7AC8UgAAAAAASABRwcm9vZkBtZXRhY29kZS5i +aXpkbnM6c2lscy5saT90eXBlPVRYVDQUgAAAAAASABlwcm9vZkBtZXRhY29kZS5i +aXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpAAoJEN8YeObZw7J/YgEL/iG1xKsu +ZW2apQTlJaYkKbLycjn64kAB3B8sKlQA+yJ53KRXsT3UuAy3OXTEbVL3C9sRZ38H +1MGMXhJBF2P4p8HLWctjXkmdyPUEDPgl/BmnM+8wrj+yjJHRuGPHXsrrehsXNyoX +gMEAqacKrNtB3ATXnq3gd7wIZ9BlGzl34HaRzNbAPrImfa3ipG0vwId9zOM6nHlH ++8j9DJuhnY9IR1jvA88Pq96QmbCRDWolwzaLbcOxqaosQxlzw4F8wSUjOQocX6ya +2JvSO6WjglO/RTRoby7Q/r+7FrBJs3APGNstSZuC+QHS2Dn7cNN/mxg/XjHLGhOX +SNdFuZYGOk1NTvcVLdBh5nuVYAlNoqbwAD83UCaE7g7lobYgxua7b97hI48FKGLL +W8ASEQ+syRjLf6/y5U/grCwZnLTF8JtPAx50WwktjzU4so3+rX4j5tW87rO8Od02 +Q2zVVq7jhYw8cWvKY1DAUulRgUdOVpi51ZzDzy/G41qGeKSI4eRILig5sYkC2AQT +AQgBQgIbAwUJCWYBgAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAIZARYhBC/qe9uR +cXCnuOcgAd8YeObZw7J/BQJhHpHxmxSAAAAAABIAgHByb29mQG1ldGFjb2RlLmJp +em1hdHJpeDp1L0BzaWxzOnNpbHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENv +R1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlkZS5lPSRsSU1YUkUzMXJl +aG1iNWc1N2dRYmc4SjNya05aSkw1RXNlWjhuUWw1V3BzNBSAAAAAABIAGXByb29m +QG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGkvFIAAAAAAEgAU +cHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQACgkQ3xh45tnD +sn8RvwwAj5KJJJey5gWntcEu3smb74+EyKlCG+80lxR4esKDiDqn/4iK411pjbjy +C4+WH4fvfqLuaDzmWNURnWi55XRPzN1tIXohrMUmF2NyyrIDVApeT1xbClC0L4Ub +KXVBYWTcDz7+OvSIgW86sueIRAhKG8VoAtnvjx6vm4mwkzk8S8GOxzCii/iRX7h9 +xXJuwaWZQ+aPvURHxh282BbHPt1DXGHUq9/dvN/XbV1qTo8CG+MNgXQdgpboJpk5 +mSYBTwg7zPwqKi/I+fnKUUfpxUF8ABDrpDikTqAmSOZH/74blRy8rW8a2T9Dq/F+ +x2KpSvqYxvy2bYbH4kQy8G62LuWS7E4xUHyf/PYyxK0BFLZI8jB7pnF8uV3vJhvO +UOO6VuP/kecgYC4UyYZXakHHyitLYjYgO2p2HHJKbYWMGVcPJo9uub7/TThFiJUb +eT6S3Uf6vPRKDUB9tAGl+E8Dszccsgz2f/vpK4lkR3zNWQdER3/k3txkHsgA1mAy +NN/VI0XViQI8BBMBCACmAhsDBQkJZgGABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheA +AhkBFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmEekUkvFIAAAAAAEgAUcHJvb2ZA +bWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQ0FIAAAAAAEgAZcHJvb2ZA +bWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZlL0BkYXNsaQAKCRDfGHjm2cOy +f7WvC/0VcA2uaLpOpHkRQEJXY77z95DJrHzNK9kOHJOgOVTs1AOXuJSRnYdQ7/p2 +Du5NSuopD/xaFdE8dkWtahwXB7pPpACQAiGezPEZHeC8XqdmoI0iWvMdeMyq86Dx +yBNS4g9b+2/y9v9NEvrogp/OGay9s9/nfPoeoIn/TEy7FBlRzz5qw0aiJcFqynuL +olL/neDhPPYF/sFxAteOJzcztZsAxDQ3qNutGBnxMYXWv+EJSAO7Rwp/XnhEdzLX +MwKDuWApiVwRHVRhNlpxXN7Kds93tLnP1BapFg042LQbUSbNMwJ2lYg6UsN8+Obw +0JDtygUMpsjHP62cKnsF5GvKPUba+x2rjlKhGq7On70t7c2zr9KX2T+p4kF+jZpK +PcijqgzW67JiS7Wl9r18c79Hh1nYv3YBFTGCA54yEow4e3w594xkyqPH9VdbESF9 +S/INYQ7FxHEJihNvTnxRbPYEUVvex8aWKv/K5pJ9h5CiibXK6cGTf5HduvJEjAWA +Q/YeLK2JAgwEEwEIAHYCGwMFCQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AC +GQEWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCYR6NfDQUgAAAAAASABlwcm9vZkBt +ZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpAAoJEN8YeObZw7J/ +VmAL/Am5QhixO6JuQb9tZxesVG5e75c+EqWXk9twG4O1q9NKVASTJTt+AhNiTUue +Uoch7i6DWYocLL9kF5l88RM9R8HIwSu013RwTqXx2vIc/bcPLShZpWZu0hi0fIPj +dFxIOKfVROzyYw6bZQodcxRCOJXdzY13JT1m3vkEGhD7DlXeClSdi5p+4epka3aa +dDkdLh+JbaRgRUvzDYBhGAIJmlv9Upbd+le16PaY0Z6RsyksZmB6trD3n0ATwInt +h9UqLsHutQmQawn8Z8QLd5A9USaftBHP1AiFMpQFDmofG+CPlqTpjxoQO5fEBulU +BiETSLS+BVSGZ4N3rXSt4wDh0y980m2t6YScHcT2lz6QaIQlv0HxRM0pQODQrBGz +xP8NZAZb+zDae5QYxDEDW3QHYlojFqzKoCBSBxjeDIVMpUvIySeum7d94Uph4orq +uxugXl6bbFMtvFeJyzmc9OhfMzJp6MPDdJRDo1G9mR+I0b1F3hk6EivO9xaOaZv+ +itzF9IkB1wQTAQgAQQIbAwUJCWYBgAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYh +BC/qe9uRcXCnuOcgAd8YeObZw7J/BQJhHopaAhkBAAoJEN8YeObZw7J/4fAMAJ0C +ew0THGP6WKPIJmnnmVYVHIWqrO2gkZ0DcHAmxN5OW3gZZimkeUiAFUDFhfwkDxCc +TEJvpZw2FnaF/oQQkRWEvOzHUPscKJ5eISFM8uooZQ+oTJUT1I50zmkOpc2YQ7Dj +iRCeSR7M7Azyg01FNqctlSC7i28QB6DG6+kVPBSdm81Pi9d8uJnzRU00NL9OVtpp +IZ5eumiWJjy4DmCmNbxSwGQmTBYgJrfzi9vWZT13LNkTfvIBxso/tq5fKiE2918b +L3G7ZOV0dH189QMCEHIjdBcRNnkPUA1a8qaq1ZxJGTuJLIstKhmP+R2vCaaZ4N3E +AVsuonF6IhJ72ia9860A4NtvZBKYjiMNVJLgJVEMcx0M/0OWAxIs3Fx0xcr7dJGC +kIyvYnAc8HbZFxWLo2hO4RH+HUJhFHxADgEmPhd1k+heyDQyvgWnIo9ii3XdsrL9 +bdCChiu1ngEcErSUYTw1iIfcewZyJB4blg0pkqv0UEU/9dzUcgfnHi9Ym06brIh1 +BBAWCgAdFiEElgb8dJ/OFjYHI9StpelAEMOmQq0FAmTEI70ACgkQpelAEMOmQq0S +UwD+KPZkmFZuYAYdRXYwK289teJpHdU3wzcteSzTmhAcSC8A/1jUnt5vgtfC07L1 +tv8fZdrStGZmLwfscOZujY2JKwoPuQGNBGEgzDkBDAC5hpKWrCXWmumRxDSLwIL9 +ykIpVd443eVtyuVwwwwkMWRnRr66as0DTJx1q5AuI4zZXy9telr8RUgcbWzhzYIE +rAI8bnwEbbxE5hfx1iRUUZty9Y7BLVMIXK2dNEvkXT5PyVwqgU7BlBzpjnJ46Al6 +yijguHVehnIbbIPZlg9qBPtxvJMTATi/OAdOw4bHacZEXUMiG+wOeK07b0/99jBg +oeRWXysIWA/vHNrX6mBKZQk/eJceNgmm8vjtKuA2BDSSl+EVecea9bzMxTTxV5la +91+t3ANVLoPIxAzzProHFgPco1ducPWsL/G1UnJpR11FlXMM1rOmuBj99MximAPL +mmqos6iyrsdm623CaLL4W9MJKl8Ei2Qr5+ie+piM3uAq9D+lZbQbBp141lckZAwZ +5ogHJS3rU+/E2W6SC/EvwCX892/IY1TVYyDT9rGH/aF3R0lUoTcQkzbvmsZ0RKBc +mjM4mFX+UYe7PcF92MQ9ofyOJpzKPqDR1GL6kK0vMqkAEQEAAYkBvAQYAQoADwWC +YSDMOQKbIAWJCVZLngAhCRDfGHjm2cOyfxYhBC/qe9uRcXCnuOcgAd8YeObZw7J/ +78gL/2DbT2r6P2Lw/1HQZMrMMR1JWEODHNh1lMp0OIR3ZmlDWw6i9s3xB4XKUTgV +qWmwt6H597CVlVAw+E7qL92jqigcvMR4EDCuQgkM6hFj5Ah9tTfTJeWUDz/OR4Id +dj2QlXN4Arz9X95bn+VodZcmidfHClMMPoGG7cM2seXU3RgdoFwD3lXGL82pm4C5 +CVVT9r1LrwLsJvAMbSdtdg/+NEriLV2r1m8YE2dyRhVsClz6q+3mbje/ETrOQ8vZ +njlA8u2qYYE7QKniBPdBGIIB5s19TX8XCcvnrgisJeesmHhFNL+3ToZq03d76uhY +4/mUXqdRSlrCQ1O52U7uDEgOiTkuimQsIHt6b6LJ8FVFq3SylbkXyZ5JYAvIGB7V +gZklIwa2mA/12g9PVeFdL4qhOzzIgqypcT5fWBxbLxYCXvG8JehvSWlcOtP7AhSp +3AaA8vcnt5AYIhG2YbZELzpobNxGTxD6p4MUW2N2iSlrpxwsAQljqKNEq/s3RH6R ++a8bkLkBjQRhHl4PAQwA81jSMUgbKYUWXE0T5Md0oTFv7Nr8Bxwf6wqO+za8Us5x +6a9LlteyCLfM6gwLtatd5a5JWIta2THif1JS6Rz8zWspIRsfPHoij72kn/Dt4fFW +cvnJRR8W6NitjvqMzunduKqZJfa6oWYaeDZDPEBdurDRWQs0Ig4DgkJ1zHt+72LO +yW2ix3WnKPsSzKX1ygpGDy0HSXcqtGBJcy0dxOqInnKLwQG+o6WGhbpjyxwy4ALb +dDbLmW5A4ufAONP1fQWzWhr5GGYzImSBL1Ygom+AYfAK3W+ldEC6OxArZ2TTp2Jt +21VEvdFZ57LeG9j63lPY+49zRg21t+rdngj7tCgRxz1P1nz7pFXx75ms9shqk02/ +7E4PT9dQmQdP/WM5ve6Exjl92bF0gZdqRuCvBKI5dGfhdwBHEJR5QS6Zr5wOTJww +WLy/ARiDRveSF9JFgQ7qm8v4qP6idgMWZ+BTsF4y08BYXZIXCGKZnfTU2iUM/qzG +AT9JqzXRjc7hE+aqmQ/pABEBAAGJAbwEGAEIACYWIQQv6nvbkXFwp7jnIAHfGHjm +2cOyfwUCYR5eDwIbDAUJCWYBgAAKCRDfGHjm2cOyf66EC/0QwdVJkYtsWO94kMNV +nqXy52+Qe3WcDi/R33RbmCIm01Kf2ljopgHpoZq8kWJq3Fm0Oyoh0Oxt9neUNzmP +TLOANCK4h7g1ewmmqaaImkt1j4wEeBcYMeC4EAZQFqMxK3gam0HV9c6MDqplmslp +9R1r7wAb2ZOy1aoOt5m+/iAPy1/G0f5DIo4SMsIZ59N0ferNzqvIesD9gzMTc1AQ +/5kqeSCjLY5FaUwcZ2gzNvfgyiOrY3B0SrO/jmoovW96m1QG/4MDTjYrNaLUPfNk +LKvqA3qVesk81Coz4CIzKLs/DWsUY+iZFJtPy+aNDOiXoWMa4x7DhCKzEV81t9nU +43FLf5vrMmkVW2qHZ7Q1acnMUjQRNjypQPFtsFI3EnPaa4luyVR+KmGWXvnF7y6q +nLXdnDeAoUITpHciPJSG9mCz0vJ6g0gGV3CewIkTHkFnAlniG3CzsplRd3Zmh4I9 +6G2YrJDj/bKZ1VKPf+4HeLd6jzpH/a1CprrFsd+17YDWgi8= +=jEmd +-----END PGP PUBLIC KEY BLOCK----- diff --git a/modules/home/conf/gtk/default.nix b/modules/home/conf/gtk/default.nix new file mode 100644 index 00000000..f5411369 --- /dev/null +++ b/modules/home/conf/gtk/default.nix @@ -0,0 +1,58 @@ +{ + config, + lib, + pkgs, + stdenv, + ... +}: { + gtk = { + enable = true; + theme = { + package = pkgs.nordic; + name = "Nordic"; + }; + cursorTheme = { + package = pkgs.nordzy-cursor-theme; + name = "Nordzy-cursors"; + }; + iconTheme = { + package = pkgs.nordzy-icon-theme; + name = "Nordzy-icon"; + }; + font = { + name = "Noto Sans"; + size = 10; + }; + gtk2 = { + configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc"; + # extraConfig = '' + # gtk-enable-animations=1 + # gtk-primary-button-warps-slider=0 + # gtk-toolbar-style=3 + # gtk-menu-images=1 + # gtk-button-images=1 + # + # ''; + }; + gtk3 = { + # extraConfig = '' + # gtk-button-images=true + # gtk-decoration-layout=icon:minimize,maximize,close + # gtk-enable-animations=true + # gtk-menu-images=true + # gtk-primary-button-warps-slider=false + # gtk-toolbar-style=3 + # #gtk-modules=window-decorations-gtk-module:colorreload-gtk-module + # ''; + extraCss = ""; + }; + gtk4 = { + # extraConfig = '' + # gtk-application-prefer-dark-theme=true + # gtk-decoration-layout=icon:minimize,maximize,close + # gtk-enable-animations=true + # gtk-primary-button-warps-slider=false + # ''; + }; + }; +} diff --git a/modules/home/conf/himalaya/default.nix b/modules/home/conf/himalaya/default.nix new file mode 100644 index 00000000..c072693e --- /dev/null +++ b/modules/home/conf/himalaya/default.nix @@ -0,0 +1,8 @@ +{...}: { + programs.himalaya = { + enable = true; + settings = { + # TODO: + }; + }; +} diff --git a/modules/home/conf/hyfetch/default.nix b/modules/home/conf/hyfetch/default.nix new file mode 100644 index 00000000..aec21dbc --- /dev/null +++ b/modules/home/conf/hyfetch/default.nix @@ -0,0 +1,20 @@ +{...}: { + programs.hyfetch = { + enable = true; + settings = { + preset = "rainbow"; + mode = "rgb"; + light_dark = "dark"; + lightness = 0.65; + color_align = { + mode = "horizontal"; + custom_colors = []; + fore_back = null; + }; + backend = "neofetch"; + distro = null; + pride_month_shown = []; + pride_month_disable = false; + }; + }; +} diff --git a/modules/home/conf/iamb/config.json b/modules/home/conf/iamb/config.json new file mode 100644 index 00000000..ca06d543 --- /dev/null +++ b/modules/home/conf/iamb/config.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "soispha": { + "user_id": "@soispha:vhack.eu", + "url": "https://matrix.vhack.eu" + } + }, + "default_profile": "soispha" +} diff --git a/modules/home/conf/iamb/default.nix b/modules/home/conf/iamb/default.nix new file mode 100644 index 00000000..2a93472c --- /dev/null +++ b/modules/home/conf/iamb/default.nix @@ -0,0 +1,3 @@ +{...}: { + xdg.configFile."iamb/config.json".source = ./config.json; +} diff --git a/modules/home/conf/keepassxc/default.nix b/modules/home/conf/keepassxc/default.nix new file mode 100644 index 00000000..3ac82812 --- /dev/null +++ b/modules/home/conf/keepassxc/default.nix @@ -0,0 +1,7 @@ +{ + config, + pkgs, + ... +}: { + xdg.configFile."keepassxc/keepassxc.ini".source = ./keepassxc.ini; +} diff --git a/modules/home/conf/keepassxc/keepassxc.ini b/modules/home/conf/keepassxc/keepassxc.ini new file mode 100644 index 00000000..288a194b --- /dev/null +++ b/modules/home/conf/keepassxc/keepassxc.ini @@ -0,0 +1,58 @@ +[General] +AutoSaveAfterEveryChange=true +BackupBeforeSave=true +BackupFilePathPattern=/home/soispha/.local/share/keepassxc/{DB_FILENAME}.old.kdbx +ConfigVersion=2 +HideWindowOnCopy=false + +[Browser] +CustomProxyLocation= +Enabled=true + +[FdoSecrets] +Enabled=true + +[GUI] +AdvancedSettings=true +ApplicationTheme=dark +CompactMode=false +HidePasswords=true +ShowExpiredEntriesOnDatabaseUnlockOffsetDays=1 +TrayIconAppearance=monochrome-light + +[KeeShare] +Active="" +Own="" +QuietSuccess=true + +[PasswordGenerator] +AdditionalChars= +AdvancedMode=true +Braces=true +Dashes=true +EASCII=true +ExcludedChars= +Length=128 +Logograms=true +LowerCase=true +Math=true +Numbers=true +Punctuation=true +Quotes=true +SpecialChars=true +Type=0 +UpperCase=true +WordCount=4 +WordSeparator="," + +[SSHAgent] +Enabled=true + +[Security] +HidePasswordPreviewPanel=true +IconDownloadFallback=true +LockDatabaseIdle=false +LockDatabaseIdleSeconds=960 +PasswordEmptyPlaceholder=true +PasswordsHidden=true +PasswordsRepeatVisible=true diff --git a/modules/home/conf/latexindent/default.nix b/modules/home/conf/latexindent/default.nix new file mode 100644 index 00000000..0d776e14 --- /dev/null +++ b/modules/home/conf/latexindent/default.nix @@ -0,0 +1,8 @@ +{ + config, + pkgs, + ... +}: { + xdg.configFile."latexindent/indentconfig.yaml".source = ./indentconfig.yaml; + xdg.configFile."latexindent/mysettings.yaml".source = ./mysettings.yaml; +} diff --git a/modules/home/conf/latexindent/indentconfig.yaml b/modules/home/conf/latexindent/indentconfig.yaml new file mode 100644 index 00000000..d67351f3 --- /dev/null +++ b/modules/home/conf/latexindent/indentconfig.yaml @@ -0,0 +1,2 @@ +paths: +- /home/dt/.config/latexindent/mysettings.yaml diff --git a/modules/home/conf/latexindent/mysettings.yaml b/modules/home/conf/latexindent/mysettings.yaml new file mode 100644 index 00000000..9a0f8b2f --- /dev/null +++ b/modules/home/conf/latexindent/mysettings.yaml @@ -0,0 +1,672 @@ +# defaultSettings.yaml for latexindent.pl, version 3.19.1, 2022-12-04 +# a script that aims to +# beautify .tex, .sty, .cls files +# +# (or latexindent.exe if you're on Windows) +# +#--------------------------------------------------------------------------------------- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# See http://www.gnu.org/licenses/. +# +# Chris Hughes, 2017 +# +# For all communication, please visit: https://github.com/cmhughes/latexindent.pl +# +#--------------------------------------------------------------------------------------- +# You should feel encouraged to change anything you like in these settings, but +# it would probably be better to have your own user settings +# files somewhere else - remember that this file may be overwritten +# when you update your tex distribution. Please see the manual linked from: +# +# https://github.com/cmhughes/latexindent.pl +# +# for details of how to create and configure your own settings files. +# +# Please read the manual (linked from above) first to understand what each switch does. +# +#--------------------------------------------------------------------------------------- + +# latexindent can be called to act on a file without using the file's extension, +# e.g, simply +# latexindent myfile +# in which case the choice of file extension is chosen +# according to the choices made in fileExtensionPreference +# Other file extensions can be added. +fileExtensionPreference: + .tex: 1 + .sty: 2 + .cls: 3 + .bib: 4 + +# default file extension of backup file (if -w switch is active) +# for example, if your .tex file is called +# myfile.tex +# and you specify the backupExtension as BACKUP.bak then your +# backup file will be +# myfileBACKUP.bak +backupExtension: .bak + +# only one backup per file: +# - if onlyOneBackUp is 0 then, as a safety measure, +# the number on the extension increments by 1 each time: +# +# myfile.bak0, myfile.bak1, myfile.bak2 +# - if you set onlyOnebackUp to 1, then the backup file will +# be overwritten each time (not recommended until you trust the script) +onlyOneBackUp: 0 + +# some users may want a finite number of backup files, +# say at most 3; in which case, they can change this maxNumberOfBackUps. +# +# If maxNumberOfBackUps is set to 0 (or less) then infinitely +# many backups are possible, unless onlyOneBackUp is switched on +maxNumberOfBackUps: 0 + +# some users may wish to cycle through back up files. +# +# for example, with maxNumberOfBackUps: 4, they may +# wish to delete the oldest back up file, and keep only the most recent. +# +# copy myfile.bak1 to myfile.bak0 +# copy myfile.bak2 to myfile.bak1 +# copy myfile.bak3 to myfile.bak2 +# copy myfile.bak4 to myfile.bak3 +# +# the back up will be written to myfile.bak4 +cycleThroughBackUps: 0 + +# preferences for information displayed in the log file +logFilePreferences: + showEveryYamlRead: 1 + showAmalgamatedSettings: 0 + showDecorationStartCodeBlockTrace: 0 + showDecorationFinishCodeBlockTrace: 0 + endLogFileWith: '--------------' + showGitHubInfoFooter: 1 + Dumper: + Terse: 1 + Indent: 1 + Useqq: 1 + Deparse: 1 + Quotekeys: 0 + Sortkeys: 1 + Pair: " => " + +# verbatim environments specified +# in this field will not be changed at all! +verbatimEnvironments: + verbatim: 1 + lstlisting: 1 + minted: 1 + +# verbatim commands such as \verb! body !, \lstinline$something else$ +verbatimCommands: + verb: 1 + lstinline: 1 + +# no indent blocks (not necessarily verbatim +# environments) which are marked as %\begin{noindent} +# or anything else that you detail in the following +noIndentBlock: + noindent: 1 + cmhtest: 1 + +# \begin{document} and \end{document} are treated differently +# by latexindent within filecontents environments +fileContentsEnvironments: + filecontents: 1 + filecontents*: 1 + +# indent preamble +indentPreamble: 1 + +# assume no preamble in cls, sty, by default +lookForPreamble: + .tex: 1 + .sty: 0 + .cls: 0 + .bib: 0 + +# some preambles can contain \begin and \end statements +# that are not in their 'standard environment block', for example, +# consider the following key = values: +# preheadhook={\begin{mdframed}[style=myframedstyle]}, +# postfoothook=\end{mdframed}, +preambleCommandsBeforeEnvironments: 0 + +# default value of indentation +defaultIndent: " " + +# remove trailing whitespace from all lines +removeTrailingWhitespace: + beforeProcessing: 0 + afterProcessing: 1 + +# name of code blocks that should have their body aligned at ampersand delimiters +lookForAlignDelims: + tabular: + delims: 1 + alignDoubleBackSlash: 1 + spacesBeforeDoubleBackSlash: 1 + multiColumnGrouping: 0 + alignRowsWithoutMaxDelims: 1 + spacesBeforeAmpersand: 1 + spacesAfterAmpersand: 1 + justification: left + alignFinalDoubleBackSlash: 0 + dontMeasure: 0 + delimiterRegEx: '(?]*?>)' + keyEqualsValuesBracesBrackets: + name: '[a-zA-Z@\*0-9_\/.:\#-]+[a-zA-Z@\*0-9_\/.\h\{\}:\#-]*?' + follow: '(?:(?<]+?' + follow: '\h|\R|\{|\[|\$|\)|\(' + UnNamedGroupingBracesBrackets: + follow: '\{|\[|,|&|\)|\(|\$' + arguments: + before: '(?:#\d\h*;?,?\/?)+|\<.*?\>' + between: '_|\^|\*' + trailingComments: + notPreceededBy: '(? goto-end +> goto-end +\ke goto-end +\eG goto-end-buffered += status +ˆG status +:f status +/ forw-search +? back-search +\e/ forw-search * +\e? back-search * +l repeat-search +\el repeat-search-all +L reverse-search +\eL reverse-search-all +& filter +m set-mark +M set-mark-bottom +\em clear-mark +' goto-mark +ˆXˆX goto-mark +E examine +:e examine +ˆXˆV examine +:n next-file +:p prev-file +j next-tag +J prev-tag +:x index-file +:d remove-file +- toggle-option +:t toggle-option t +s toggle-option o + ## Use a long option name by starting the + ## extra string with ONE dash; eg: + ## s toggle-option -log-file\n +_ display-option +| pipe +v visual +! shell +# pshell ++ firstcmd +H help +h help +V version +0 digit +1 digit +2 digit +3 digit +4 digit +5 digit +6 digit +7 digit +8 digit +9 digit +q quit +Q quit +:q quit +:Q quit +ZZ quit + +# Stop processing (and ignore less' default values) +#stop diff --git a/modules/home/conf/less/default.nix b/modules/home/conf/less/default.nix new file mode 100644 index 00000000..f4103080 --- /dev/null +++ b/modules/home/conf/less/default.nix @@ -0,0 +1,17 @@ +{config, ...}: { + home.sessionVariables = { + PAGER = "less"; + MANPAGER = "less --color=d+r --color=u+b"; + + # These are added here because adding them in the lesskey file somehow doesn't work. + LESSHISTSIZE = 10000; + LESSHISTFILE = "${config.xdg.dataHome}/less/history"; + }; + programs.less = { + enable = true; + keys = + builtins.readFile ./command.less + + builtins.readFile ./line-edit.less + + builtins.readFile ./env.less; + }; +} diff --git a/modules/home/conf/less/env.less b/modules/home/conf/less/env.less new file mode 100644 index 00000000..30f7645d --- /dev/null +++ b/modules/home/conf/less/env.less @@ -0,0 +1,2 @@ +#env +LESS = -R --use-color --incsearch --modelines=2 --save-marks --wordwrap --status-line diff --git a/modules/home/conf/less/line-edit.less b/modules/home/conf/less/line-edit.less new file mode 100644 index 00000000..a7e889db --- /dev/null +++ b/modules/home/conf/less/line-edit.less @@ -0,0 +1,29 @@ +#line-edit +\t forw-complete +\17 back-complete +\e\t back-complete +ˆL expand +ˆV literal +ˆA literal +\es right +\kr right +\eh left +\kl left +\eb word-left +\e\kl word-left +\ew word-right +\e\kr word-right +\ei insert +\ex delete +\kx delete +\eX word-delete +\ekx word-delete +\e\b word-backspace +\e0 home +\kh home +\e$ end +\ke end +\en up +\ku up +\et down +ˆG abort diff --git a/modules/home/conf/lf/colors b/modules/home/conf/lf/colors new file mode 100644 index 00000000..a93e01f9 --- /dev/null +++ b/modules/home/conf/lf/colors @@ -0,0 +1,190 @@ +# vim:ft=dircolors +# (This is not a dircolors file but it helps to highlight colors and comments) + +# default values from dircolors +# (entries with a leading # are not implemented in lf) +# #no 00 # NORMAL +# fi 00 # FILE +# #rs 0 # RESET +# di 01;34 # DIR +# ln 01;36 # LINK +# #mh 00 # MULTIHARDLINK +# pi 40;33 # FIFO +# so 01;35 # SOCK +# #do 01;35 # DOOR +# bd 40;33;01 # BLK +# cd 40;33;01 # CHR +# or 40;31;01 # ORPHAN +# #mi 00 # MISSING +# su 37;41 # SETUID +# sg 30;43 # SETGID +# #ca 30;41 # CAPABILITY +# tw 30;42 # STICKY_OTHER_WRITABLE +# ow 34;42 # OTHER_WRITABLE +# st 37;44 # STICKY +# ex 01;32 # EXEC + +# default values from lf (with matching order) +# ln 01;36 # LINK +# or 31;01 # ORPHAN +# tw 01;34 # STICKY_OTHER_WRITABLE +# ow 01;34 # OTHER_WRITABLE +# st 01;34 # STICKY +# di 01;34 # DIR +# pi 33 # FIFO +# so 01;35 # SOCK +# bd 33;01 # BLK +# cd 33;01 # CHR +# su 01;32 # SETUID +# sg 01;32 # SETGID +# ex 01;32 # EXEC +# fi 00 # FILE + + +# file types (with matching order) +ln 01;93 # LINK +or 01;93;106 # ORPHAN +tw 35 # STICKY_OTHER_WRITABLE +ow 35 # OTHER_WRITABLE +st 01;96 # STICKY +di 01;36 # DIR +pi 33 # FIFO +so 01;35 # SOCK +bd 33;01 # BLK +cd 33;01 # CHR +su 01;32 # SETUID +sg 01;32 # SETGID +ex 03;01;95 # EXEC +fi 00 # FILE + +# links to hide +~/.mbsyncrc 01;08;30 +~/.cups 01;08;30 +~/.mozilla 01;08;30 +~/.ssh 01;08;30 +~/.zshenv 01;08;30 + +~/.steampid 01;08;30 +~/.steam 01;08;30 +~/.steampath 01;08;30 + +# nix +~/.nix-profile 01;08;30 +~/.nix-defexpr 01;08;30 + +# archives or compressed (dircolors defaults) +*.tar 01;31 +*.tgz 01;31 +*.arc 01;31 +*.arj 01;31 +*.taz 01;31 +*.lha 01;31 +*.lz4 01;31 +*.lzh 01;31 +*.lzma 01;31 +*.tlz 01;31 +*.txz 01;31 +*.tzo 01;31 +*.t7z 01;31 +*.zip 01;31 +*.z 01;31 +*.dz 01;31 +*.gz 01;31 +*.lrz 01;31 +*.lz 01;31 +*.lzo 01;31 +*.xz 01;31 +*.zst 01;31 +*.tzst 01;31 +*.bz2 01;31 +*.bz 01;31 +*.tbz 01;31 +*.tbz2 01;31 +*.tz 01;31 +*.deb 01;31 +*.rpm 01;31 +*.jar 01;31 +*.war 01;31 +*.ear 01;31 +*.sar 01;31 +*.rar 01;31 +*.alz 01;31 +*.ace 01;31 +*.zoo 01;31 +*.cpio 01;31 +*.7z 01;31 +*.rz 01;31 +*.cab 01;31 +*.wim 01;31 +*.swm 01;31 +*.dwm 01;31 +*.esd 01;31 + +# image formats (dircolors defaults) +*.jpg 01;35 +*.jpeg 01;35 +*.mjpg 01;35 +*.mjpeg 01;35 +*.gif 01;35 +*.bmp 01;35 +*.pbm 01;35 +*.pgm 01;35 +*.ppm 01;35 +*.tga 01;35 +*.xbm 01;35 +*.xpm 01;35 +*.tif 01;35 +*.tiff 01;35 +*.png 01;35 +*.svg 01;35 +*.svgz 01;35 +*.mng 01;35 +*.pcx 01;35 +*.mov 01;35 +*.mpg 01;35 +*.mpeg 01;35 +*.m2v 01;35 +*.mkv 01;35 +*.webm 01;35 +*.ogm 01;35 +*.mp4 01;35 +*.m4v 01;35 +*.mp4v 01;35 +*.vob 01;35 +*.qt 01;35 +*.nuv 01;35 +*.wmv 01;35 +*.asf 01;35 +*.rm 01;35 +*.rmvb 01;35 +*.flc 01;35 +*.avi 01;35 +*.fli 01;35 +*.flv 01;35 +*.gl 01;35 +*.dl 01;35 +*.xcf 01;35 +*.xwd 01;35 +*.yuv 01;35 +*.cgm 01;35 +*.emf 01;35 +*.ogv 01;35 +*.ogx 01;35 + +# audio formats (dircolors defaults) +*.aac 00;36 +*.au 00;36 +*.flac 00;36 +*.m4a 00;36 +*.mid 00;36 +*.midi 00;36 +*.mka 00;36 +*.mp3 00;36 +*.mpc 00;36 +*.ogg 00;36 +*.ra 00;36 +*.wav 00;36 +*.oga 00;36 +*.opus 00;36 +*.spx 00;36 +*.xspf 00;36 diff --git a/modules/home/conf/lf/commands/default.nix b/modules/home/conf/lf/commands/default.nix new file mode 100644 index 00000000..933769ac --- /dev/null +++ b/modules/home/conf/lf/commands/default.nix @@ -0,0 +1,227 @@ +{ + pkgs, + sysLib, + shell_library, + system, + ... +}: let + functionCall = { + name, + dependencies, + replacementStrings, + ... + }: + sysLib.writeShellScript { + inherit name; + src = ./scripts/${name}.sh; + keepPath = true; + dependencies = dependencies ++ (builtins.attrValues {inherit (pkgs) dash coreutils;}); + inherit replacementStrings; + } + + "/bin/${name}"; + + shell = { + name, + dependencies, + replacementStrings ? null, + ... + }: '' + ''${{ + ${functionCall {inherit name dependencies replacementStrings;}} + }} + ''; # closes the lf tui + pipe = { + name, + dependencies, + replacementStrings ? null, + ... + }: '' + %{{ + ${functionCall {inherit name dependencies replacementStrings;}} + }} + ''; # runs the command in the ui/term bar + async = { + name, + dependencies, + replacementStrings ? null, + ... + }: '' + &{{ + ${functionCall {inherit name dependencies replacementStrings;}} + }} + ''; # runs the command in the background + wait = { + name, + dependencies, + replacementStrings ? null, + ... + }: '' + !{{ + ${functionCall {inherit name dependencies replacementStrings;}} + }} + ''; # adds a prompt after the command has run +in { + archive = shell { + name = "archive"; + dependencies = builtins.attrValues { + inherit + (pkgs) + fzf + gnutar + xz + p7zip + zip + ; + }; + }; + broot_jump = shell { + name = "broot_jump"; + dependencies = builtins.attrValues { + inherit (pkgs) broot; + }; + }; + chmod = pipe { + name = "chmod"; + dependencies = []; + }; + clear_trash = shell { + name = "clear_trash"; + dependencies = builtins.attrValues { + inherit + (pkgs) + fzf + trashy + ; + }; + }; + dl_file = pipe { + name = "dl_file"; + dependencies = builtins.attrValues { + inherit + (pkgs) + xdragon + curl + ; + }; + }; + dragon = pipe { + name = "dragon"; + dependencies = builtins.attrValues { + inherit + (pkgs) + xdragon + ; + }; + }; + dragon_individual = pipe { + name = "dragon_individual"; + dependencies = builtins.attrValues { + inherit + (pkgs) + xdragon + ; + }; + }; + dragon_stay = pipe { + name = "dragon_stay"; + dependencies = builtins.attrValues { + inherit + (pkgs) + xdragon + ; + }; + }; + execute = shell { + name = "execute"; + dependencies = []; + }; + follow_link = pipe { + name = "follow_link"; + dependencies = with pkgs; [lf]; + }; + fzf_jump = shell { + name = "fzf_jump"; + dependencies = builtins.attrValues { + inherit (pkgs) fzf lf gnused; + }; + }; + mk_dir = pipe { + name = "mk_dir"; + dependencies = []; + }; + mk_file = shell { + name = "mk_file"; + dependencies = []; + }; + mk_file_and_edit = shell { + name = "mk_file_and_edit"; + dependencies = []; + }; + mk_ln = pipe { + name = "mk_ln"; + dependencies = []; + }; + mk_scr_default = shell { + name = "mk_scr_default"; + dependencies = builtins.attrValues {}; + replacementStrings = { + SHELL_LIBRARY_TEMPLATE = "${shell_library.rawTemplate."${system}"}"; + }; + }; + mk_scr_temp = shell { + name = "mk_scr_temp"; + dependencies = builtins.attrValues {}; + replacementStrings = { + SHELL_LIBRARY_TEMPLATE = "${shell_library.rawTemplate."${system}"}"; + TO_BE_SHELL_LIBRARY_PATH = "%SHELL_LIBRARY_PATH"; # replacement is not recursive + }; + }; + view_file = async { + name = "view_file"; + dependencies = builtins.attrValues {inherit (pkgs) file;}; + }; + go_project_base_directory = async { + name = "go_project_root"; + dependencies = []; + }; + restore_trash = shell { + name = "restore_trash"; + dependencies = builtins.attrValues { + inherit + (pkgs) + fzf + trashy + ; + }; + }; + set_wall_paper = pipe { + name = "set_wall_paper"; + dependencies = []; + }; + stripspace = pipe { + name = "stripspace"; + dependencies = []; + }; + trash = pipe { + name = "trash"; + dependencies = builtins.attrValues { + inherit + (pkgs) + trashy + trash-cli + findutils + ; + }; + }; + unarchive = pipe { + name = "unarchive"; + dependencies = builtins.attrValues { + inherit + (pkgs) + gnutar + unzip + p7zip + ; + }; + }; +} diff --git a/modules/home/conf/lf/commands/scripts/archive.sh b/modules/home/conf/lf/commands/scripts/archive.sh new file mode 100755 index 00000000..25f40534 --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/archive.sh @@ -0,0 +1,77 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# Option '-f' disables pathname expansion which can be useful when $f, $fs, and +# $fx variables contain names with '*' or '?' characters. However, this option +# is used selectively within individual commands as it can be limiting at +# times. +set -f + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" + +archivers="$(tmp echo gzip xz 7z zip)" +archiver="$(awk '{for (i=1; i<=NF; i++) print $i}' "$archivers" | fzf)" + +case "$archiver" in +"gzip") + ext=tar.gz + ;; +"xz") + ext=tar.xz + ;; +"7z") + ext=7z + ;; +"zip") + ext=zip + ;; +esac + +prompt "Archive name: " +name="" +while [ -z "$name" ] || [ -e "$name" ]; do + read -r name_base + name="$name_base.$ext" + if [ -e "$name" ]; then + prompt "Archive already exists, overwrite [y|N]: " + read -r ans + + if [ "$ans" = "y" ]; then + break + else + prompt "Archive name: " + fi + fi +done + +root="$(if [ "$(pwd)" = "/" ]; then pwd; else echo "$(pwd)/"; fi)" + +# fx contains all selected file name separated by a newline +while read -r raw_file; do + file="$(echo "$raw_file" | sed "s|$root||")" + set -- "$@" "$file" +done <"$(tmp echo "$fx")" + +case "$archiver" in +"gzip") + tar --create --gzip -file="$name" "$@" + ;; +"xz") + tar --create --file="$name" "$@" + xz --compress -9 --extreme --threads=0 "$name" + ;; +"7z") + 7z a "$name" "$@" + ;; +"zip") + zip --symlinks -9 -r "$name" "$@" + ;; +esac +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/broot_jump.sh b/modules/home/conf/lf/commands/scripts/broot_jump.sh new file mode 100755 index 00000000..8f40ba01 --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/broot_jump.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +tmp=$(mktmp) +res="$(broot --outcmd "$tmp" && sed 's/cd //' "$tmp")" + +if [ -f "$res" ]; then + cmd="select" +elif [ -d "$res" ]; then + cmd="cd" +fi + +lf -remote "send '$id' '$cmd' '$res'" +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/chmod.sh b/modules/home/conf/lf/commands/scripts/chmod.sh new file mode 100755 index 00000000..9859127b --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/chmod.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +readp "Mode bits: " bits +# shellcheck disable=SC2269 +bits="$bits" + +while read -r file; do + chmod "$bits" "$file" +done <"$(tmp echo "$fx")" + +lf -remote 'send reload' +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/clear_trash.sh b/modules/home/conf/lf/commands/scripts/clear_trash.sh new file mode 100755 index 00000000..9052bb5f --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/clear_trash.sh @@ -0,0 +1,8 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# could also use --force, for instand removal +trash list | fzf --multi | awk '{print $NF}' | xargs trash empty --match=exact +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/cow_cp.sh b/modules/home/conf/lf/commands/scripts/cow_cp.sh new file mode 100755 index 00000000..98675b9e --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/cow_cp.sh @@ -0,0 +1,105 @@ +#!/usr/bin/env bash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +# source: https://github.com/gokcehan/lf/wiki/Tips#use-copy-on-write-when-possible +# +# # FIXME: Add this. The hardest part is in checking, if a file can be reflinked, as fuse and bind mount are hard to +# backtrack <2023-08-29> + +# # This was very helpful for debugging: +# log_file="$HOME/lf-reflink-log-$(date +'%Y-%m-%d_%H-%M-%S')" +# [ -f "$log_file" ] || touch "$log_file" +# exec 1>> $log_file 2>&1 +# set -x + +# In theory, this may fail, +# but I tested it on selection with 10k files - everything worked (bash) +# FIXME: This will very likely fail on dash, when the file number > 255 <2023-08-29> +set -- "$(cat ~/.local/share/lf/files)" + +mode="$1" +shift + +if [ "$mode" = 'copy' ]; then + # Reflink if all items of selection and the destination are on the + # same mount point and it is CoW fs. + # (to make sure reflink never fails in first place, so we don't have to + # clean up) + + src_targets="$(df --output=target -- "$@" | sed '1d' | sort -u)" + + if [ "$(df --output=target -- "$PWD" | tail -n 1)" = \ + "$(echo "$src_targets" | tail -n 1)" ] && + (("$(echo "$src_targets" | wc -l)" == 1)) && + [[ "$(df --output=fstype -- "$PWD" | tail -n 1)" =~ ^(btrfs|xfs|zfs)$ ]]; then + + echo 'selected copy and cp reflink paste' + + start=$(date '+%s') + + # Handle same names in dst + # TODO parallelism, idk - but exit/return/break won't stop the loop from subshell... + for i in "$@"; do + name="${i##*/}" + original="$name" + + count=0 + while [ -w "$PWD/$name" ]; do + count=$((count + 1)) + name="$original.~$count~" + done + + set +e + cp_out="$(cp -rn --reflink=always -- "$i" "$PWD/$name" 2>&1)" + set -e + + if [ -n "$cp_out" ]; then + lf -remote "send $id echoerr $cp_out" + exit 0 + fi + done + + finish=$(($(date '+%s') - start)) + t='' + if ((finish > 2)); then + t="${finish}s" + fi + + # Or just skip a file when names are the same. + # (A LOT faster if you e.g. pasting selection of 10k files) + # cp -rn --reflink=always -- "$@" . + + lf -remote "send clear" + + green=$'\u001b[32m' + reset=$'\u001b[0m' + lf -remote "send $id echo ${green}reflinked!${reset} $t" + else + echo 'selected copy and lf native paste' + lf -remote "send $id paste" + lf -remote "send clear" + fi + +elif [ "$mode" = 'move' ]; then + echo 'selected move and lf native paste' + lf -remote "send $id paste" + lf -remote "send clear" +fi + +# # for debug +# set +x + +lf -remote "send load" + +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/dl_file.sh b/modules/home/conf/lf/commands/scripts/dl_file.sh new file mode 100755 index 00000000..c7e3d8b2 --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/dl_file.sh @@ -0,0 +1,43 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +# Provides the ability to download a file by dropping it into a window + +url="$(dragon -t -x)" + +if [ -n "$url" ]; then + prompt "File Name: " + name="" + while [ -z "$name" ] || [ -e "$name" ]; do + read -r name + if [ -e "$name" ]; then + prompt "File already exists, overwrite [y|N]: " + read -r ans + + if [ "$ans" = "y" ]; then + break + else + prompt "File Name: " + fi + fi + done + + # Download the file with curl + if [ -n "$name" ]; then + curl -o "$name" "$url" || die "curl failed" + fi +else + die "URL is null!" +fi +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/dragon.sh b/modules/home/conf/lf/commands/scripts/dragon.sh new file mode 100755 index 00000000..cf3c3176 --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/dragon.sh @@ -0,0 +1,20 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +while read -r file; do + set -- "$@" "$file" +done <"$(tmp echo "$fx")" + +dragon -a -x "$@" +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/dragon_individual.sh b/modules/home/conf/lf/commands/scripts/dragon_individual.sh new file mode 100755 index 00000000..2465cdfa --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/dragon_individual.sh @@ -0,0 +1,20 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +while read -r file; do + set -- "$@" "$file" +done <"$(tmp echo "$fx")" + +dragon "$@" +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/dragon_stay.sh b/modules/home/conf/lf/commands/scripts/dragon_stay.sh new file mode 100755 index 00000000..066b4c75 --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/dragon_stay.sh @@ -0,0 +1,20 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +while read -r file; do + set -- "$@" "$file" +done <"$(tmp echo "$fx")" + +dragon -a "$@" +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/execute.sh b/modules/home/conf/lf/commands/scripts/execute.sh new file mode 100755 index 00000000..aa97fd7f --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/execute.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +dir="$(realpath "$f")" + +"$dir" + +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/follow_link.sh b/modules/home/conf/lf/commands/scripts/follow_link.sh new file mode 100755 index 00000000..80413990 --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/follow_link.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +dir="$(realpath "$f")" + +lf -remote "send $id cd \"$dir\"" + +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/fzf_jump.sh b/modules/home/conf/lf/commands/scripts/fzf_jump.sh new file mode 100755 index 00000000..ad1633fb --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/fzf_jump.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +res="$(fd . --maxdepth 3 | fzf --header='Jump to location')" + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +if [ -f "$res" ]; then + cmd="select" +elif [ -d "$res" ]; then + cmd="cd" +fi + +lf -remote "send $id $cmd \"$res\"" +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/go_project_root.sh b/modules/home/conf/lf/commands/scripts/go_project_root.sh new file mode 100755 index 00000000..5f7746d3 --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/go_project_root.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +flake_base_dir="$(search_flake_base_dir)" +if [ "$flake_base_dir" ]; then + lf -remote "send $id cd $flake_base_dir" || die "Bug: No base dir ($flake_base_dir)" +else + die "Unable to locate base dir" +fi + +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/mk_dir.sh b/modules/home/conf/lf/commands/scripts/mk_dir.sh new file mode 100755 index 00000000..150f7eed --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/mk_dir.sh @@ -0,0 +1,32 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +prompt "Directory Name: " +name="" +while [ -z "$name" ] || [ -e "$name" ]; do + read -r name + if [ -e "$name" ]; then + prompt "Directory already exists, overwrite [y|N]: " + read -r ans + + if [ "$ans" = "y" ]; then + break + else + prompt "Directory Name: " + fi + fi +done + +mkdir "$name" +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/mk_file.sh b/modules/home/conf/lf/commands/scripts/mk_file.sh new file mode 100755 index 00000000..41d5cf1a --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/mk_file.sh @@ -0,0 +1,32 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +prompt "File name: " +name="" +while [ -z "$name" ] || [ -e "$name" ]; do + read -r name + if [ -e "$name" ]; then + prompt "File already exists, overwrite [y|N]: " + read -r ans + + if [ "$ans" = "y" ]; then + break + else + prompt "File name: " + fi + fi +done + +touch "$name" +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/mk_file_and_edit.sh b/modules/home/conf/lf/commands/scripts/mk_file_and_edit.sh new file mode 100755 index 00000000..19fc51db --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/mk_file_and_edit.sh @@ -0,0 +1,33 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +prompt "File name: " +name="" +while [ -z "$name" ] || [ -e "$name" ]; do + read -r name + if [ -e "$name" ]; then + prompt "File already exists, overwrite [y|N]: " + read -r ans + + if [ "$ans" = "y" ]; then + break + else + prompt "File name: " + fi + fi +done + +touch "$name" +"$EDITOR" "$name" +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/mk_ln.sh b/modules/home/conf/lf/commands/scripts/mk_ln.sh new file mode 100755 index 00000000..7fab8e22 --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/mk_ln.sh @@ -0,0 +1,45 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +while IFS= read -r i; do + set -- "$@" "$i" +done <"$HOME"/.local/share/lf/files + +mode="$1" +shift + +if [ "$#" -eq 0 ]; then + msg "no files to link" + exit 0 +fi + +case "$mode" in +copy) + while [ "$#" -gt 0 ]; do + file="$1" + ans="$(basename "$file")" + + while [ -e "$ans" ]; do + prompt "$ans already exists, new name for link: " + read -r ans + done + + ln --symbolic --relative "$file" "$(pwd)/$ans" + shift + done + ;; +esac +rm ~/.local/share/lf/files +# lf -remote "send clear" +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/mk_scr_default.sh b/modules/home/conf/lf/commands/scripts/mk_scr_default.sh new file mode 100755 index 00000000..47d05080 --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/mk_scr_default.sh @@ -0,0 +1,38 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +prompt "Script name: " +name="" +while [ -z "$name" ] || [ -e "$name" ]; do + read -r name_base + name="$name_base.sh" + if [ -e "$name" ]; then + prompt "Script already exists, overwrite [y|N]: " + read -r ans + + if [ "$ans" = "y" ]; then + break + else + prompt "Script Name: " + fi + fi +done + +script="$(pwd)"/"$name" + +cat "%SHELL_LIBRARY_TEMPLATE" >"$script" +chmod +x "$script" +"$VISUAL" "$script" + +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/mk_scr_temp.sh b/modules/home/conf/lf/commands/scripts/mk_scr_temp.sh new file mode 100755 index 00000000..512b5d0b --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/mk_scr_temp.sh @@ -0,0 +1,38 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +prompt "Script name: " +name="" +while [ -z "$name" ] || [ -e "$name" ]; do + read -r name + if [ -e "$name" ]; then + prompt "Script already exists, overwrite [y|N]: " + read -r ans + + if [ "$ans" = "y" ]; then + break + else + prompt "Script Name: " + fi + fi +done + +script="$(pwd)"/"$name" + +sed 's|%TO_BE_SHELL_LIBRARY_PATH|%SHELL_LIBRARY_PATH|' "%SHELL_LIBRARY_TEMPLATE" >"$script" +sed -i 's|dash|sh|' "$script" +chmod +x "$script" +"$VISUAL" "$script" + +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/restore_trash.sh b/modules/home/conf/lf/commands/scripts/restore_trash.sh new file mode 100755 index 00000000..b4ef492f --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/restore_trash.sh @@ -0,0 +1,16 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +trash list | fzf --multi | awk '{print $NF}' | xargs trash restore --match=exact +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/set_wall_paper.sh b/modules/home/conf/lf/commands/scripts/set_wall_paper.sh new file mode 100755 index 00000000..2e607d33 --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/set_wall_paper.sh @@ -0,0 +1,19 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +die "No yet implemented" # TODO: do what the 'die' says +#sed -i "s,export AWMWALLPAPER='.*',export AWMWALLPAPER='${f}'," ${ZDOTDIR}/.zshenv +#nohub swaybg -i "$f" +#feh --bg-max --no-fehbg "$f" +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/stripspace.sh b/modules/home/conf/lf/commands/scripts/stripspace.sh new file mode 100755 index 00000000..33b1cbcf --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/stripspace.sh @@ -0,0 +1,40 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +files=$(mktmp) +echo "$fx" >"$files" + +awk_source=$(mktmp) +cat <"$awk_source" +BEGIN {FS=" "} +{for (i=1; i != NF + 1; i++) + if (i == NF) { + parts[i]=tolower(\$i); + } else { + parts[i]=tolower(\$i"_"); + } +} +END {for (i in parts) printf parts[i]} +OFT + +while read -r file; do + dirty_name=$(mktmp) + basename "$file" >"$dirty_name" + clean_name=$(awk -f "$awk_source" "$dirty_name") + + [ -e "$clean_name" ] && die "file \"$clean_name\" already exists!" + mv "$(cat "$dirty_name")" "$clean_name" || die "Move failed" + lf -remote 'send reload' +done <"$files" +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/trash.sh b/modules/home/conf/lf/commands/scripts/trash.sh new file mode 100755 index 00000000..f4878c49 --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/trash.sh @@ -0,0 +1,37 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +trash_output=$(mktmp) +expected_error_output=$(mktmp) + +while read -r file; do + set -- "$@" "$file" +done <"$(tmp echo "$fx")" + +# TODO: why are we using trashy at all, when trash-cli can do everything? +# +# try trashy first, through nix because both trashy and trash-cli provide a trash command, which conflicts +nix run nixpkgs#trashy -- put "$@" 2>"$trash_output" + +# FIXME: Find a way, that does not depend on parsing an error message <2023-08-29> +cat <"$expected_error_output" +error: Error during a \`trash\` operation: Unknown { description: "Path: '\"/.Trash-1000\"'. Message: Permission denied (os error 13)" } +EOF + +if [ "$(cat "$expected_error_output")" = "$(cat "$trash_output")" ]; then + warning "Deleting with trash-cli to the /.Trash folder" + # this file could not be trashed because it is on the tempfs volume, trash-cli can do this this + trash-put "$@" +fi +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/unarchive.sh b/modules/home/conf/lf/commands/scripts/unarchive.sh new file mode 100755 index 00000000..d4835f6b --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/unarchive.sh @@ -0,0 +1,36 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" +# shellcheck disable=SC2269 +id="$id" + +# extract the current file with the right command +# (xkcd link: https://xkcd.com/1168/) +set -f + +unarchive() { + case "$1" in + *.tar.bz | *.tar.bz2 | *.tbz | *.tbz2) tar xjvf "$1" ;; + *.tar.gz | *.tgz) tar xzvf "$1" ;; + *.tar.xz | *.txz) tar xJvf "$1" ;; + *.zip) unzip "$1" ;; + *.rar) + die "rar is a unfree format!" + ;; + *.7z) 7z x "$1" ;; + *) die "Unsupported format" ;; + esac +} + +while read -r file; do + unarchive "$file" +done <"$fx" +# vim: ft=sh diff --git a/modules/home/conf/lf/commands/scripts/view_file.sh b/modules/home/conf/lf/commands/scripts/view_file.sh new file mode 100755 index 00000000..6258d755 --- /dev/null +++ b/modules/home/conf/lf/commands/scripts/view_file.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# shellcheck disable=SC2269 +f="$f" +# shellcheck disable=SC2269 +fx="$fx" +# shellcheck disable=SC2269 +fs="$fs" + +mime_type="$(file --mime-type --brief --dereference "$f")" +case "$mime_type" in +application/pdf) + "$READER" "$f" + ;; +image/*) + "$IVIEWER" "$f" + ;; +*) + die "Mime-Type: '$mime_type' not supported" + ;; +esac + +# vim: ft=sh diff --git a/modules/home/conf/lf/default.nix b/modules/home/conf/lf/default.nix new file mode 100644 index 00000000..7b604ed0 --- /dev/null +++ b/modules/home/conf/lf/default.nix @@ -0,0 +1,59 @@ +{ + pkgs, + sysLib, + nixosConfig, + shell_library, + system, + ... +}: let + commands = import ./commands {inherit pkgs sysLib shell_library system;}; + keybindings = import ./keybindings {inherit nixosConfig;}; +in { + xdg.configFile."lf/icons".source = ./icons; + xdg.configFile."lf/colors".source = ./colors; + + # TODO: add the systemd tempfile option here + + programs.lf = { + enable = true; + + inherit commands keybindings; + + previewer = { + keybinding = "i"; + source = "${pkgs.ctpv}/bin/ctpv"; + }; + settings = { + # close the server, after the last client exits + autoquit = true; + + # disable the cusor in the preview pane + cursorpreviewfmt = ""; + + # preview for directories + # dirpreviews = true; + + # count things in directories + dircounts = true; + + drawbox = true; + + # errorfmt = "\\033[1;91m==> ERROR:\\033[0m\\033[1;93m%s\\033[0m"; + errorfmt = "\\033[1;91m%s\\033[0m"; + hidden = true; # show hidden files + icons = true; + ifs = "\\n"; # internal field separator for shell commands + #info = "size"; # show the size of a directory + shell = "sh"; + shellopts = "-eu"; # e: exit on error; u: error for unset variables + }; + # TODO: remove auto quit, if it has been added + extraConfig = '' + &${pkgs.ctpv}/bin/ctpv -s $id + cmd on-quit %${pkgs.ctpv}/bin/ctpv -e $id + set cleaner ${pkgs.ctpv}/bin/ctpvclear + + source ${nixosConfig.age.secrets.lf_cd_paths.path} + ''; + }; +} diff --git a/modules/home/conf/lf/icons b/modules/home/conf/lf/icons new file mode 100644 index 00000000..9047fbfb --- /dev/null +++ b/modules/home/conf/lf/icons @@ -0,0 +1,360 @@ +# vim:ft=conf + +# These examples require Nerd Fonts or a compatible font to be used. +# See https://www.nerdfonts.com for more information. + +# default values from lf (with matching order) +# ln l # LINK +# or l # ORPHAN +# tw t # STICKY_OTHER_WRITABLE +# ow d # OTHER_WRITABLE +# st t # STICKY +# di d # DIR +# pi p # FIFO +# so s # SOCK +# bd b # BLK +# cd c # CHR +# su u # SETUID +# sg g # SETGID +# ex x # EXEC +# fi - # FILE + +# file types (with matching order) +ln  # LINK +or  # ORPHAN +tw t # STICKY_OTHER_WRITABLE +ow  # OTHER_WRITABLE +st t # STICKY +di  # DIR +pi p # FIFO +so s # SOCK +bd b # BLK +cd c # CHR +su u # SETUID +sg g # SETGID +ex  # EXEC +fi  # FILE + +# file extensions (vim-devicons) +*.styl  +*.sass  +*.scss  +*.htm  +*.html  +*.slim  +*.haml  +*.ejs  +*.css  +*.less  +*.md  +*.mdx  +*.markdown  +*.rmd  +*.json  +*.webmanifest  +*.js  +*.mjs  +*.jsx  +*.rb  +*.gemspec  +*.rake  +*.php  +*.py  +*.pyc  +*.pyo  +*.pyd  +*.coffee  +*.mustache  +*.hbs  +*.conf  +*.ini  +*.yml  +*.yaml  +*.toml  +*.bat  +*.mk  +*.jpg  +*.jpeg  +*.bmp  +*.png  +*.webp  +*.gif  +*.ico  +*.twig  +*.cpp  +*.c++  +*.cxx  +*.cc  +*.cp  +*.c  +*.cs 󰌛 +*.h  +*.hh  +*.hpp  +*.hxx  +*.hs  +*.lhs  +*.nix  +*.lua  +*.java  +*.sh  +*.fish  +*.bash  +*.zsh  +*.ksh  +*.csh  +*.awk  +*.ps1  +*.ml λ +*.mli λ +*.diff  +*.db  +*.sql  +*.sqlite  +*.dump  +*.clj  +*.cljc  +*.cljs  +*.edn  +*.scala  +*.go  +*.dart  +*.xul  +*.sln  +*.suo  +*.pl  +*.pm  +*.t  +*.rss  +'*.f#'  +*.fsscript  +*.fsx  +*.fs  +*.fsi  +*.rs  +*.rlib  +*.d  +*.erl  +*.hrl  +*.ex  +*.exs  +*.eex  +*.leex  +*.heex  +*.vim  +*.ai  +*.psd  +*.psb  +*.ts  +*.tsx  +*.jl  +*.pp  +*.vue 󰡄 +*.elm  +*.swift  +*.xcplayground  +*.tex 󰙩 +*.r 󰟔 +*.rproj 󰗆 +*.sol 󰡪 +*.pem 󰌋 + +# file names (vim-devicons) (case-insensitive not supported in lf) +*gruntfile.coffee  +*gruntfile.js  +*gruntfile.ls  +*gulpfile.coffee  +*gulpfile.js  +*gulpfile.ls  +*mix.lock  +*dropbox  +*.ds_store  +*.gitconfig  +*.gitignore  +*.gitattributes  +*.gitlab-ci.yml  +*.bashrc  +*.zshrc  +*.zshenv  +*.zprofile  +*.vimrc  +*.gvimrc  +*_vimrc  +*_gvimrc  +*.bashprofile  +*favicon.ico  +*license  +*node_modules  +*react.jsx  +*procfile  +*dockerfile  +*docker-compose.yml  +*rakefile  +*config.ru  +*gemfile  +*makefile  +*cmakelists.txt  +*robots.txt 󰚩 + +# file names (case-sensitive adaptations) +*Gruntfile.coffee  +*Gruntfile.js  +*Gruntfile.ls  +*Gulpfile.coffee  +*Gulpfile.js  +*Gulpfile.ls  +*Dropbox  +*.DS_Store  +*LICENSE  +*COPYING  +*COPYING.LESSER  +*React.jsx  +*Procfile  +*Dockerfile  +*Docker-compose.yml  +*Rakefile  +*Gemfile  +*Makefile  +*CMakeLists.txt  + +# file patterns (vim-devicons) (patterns not supported in lf) +# .*jquery.*\.js$  +# .*angular.*\.js$  +# .*backbone.*\.js$  +# .*require.*\.js$  +# .*materialize.*\.js$  +# .*materialize.*\.css$  +# .*mootools.*\.js$  +# .*vimrc.*  +# Vagrantfile$  + +# file patterns (file name adaptations) +*jquery.min.js  +*angular.min.js  +*backbone.min.js  +*require.min.js  +*materialize.min.js  +*materialize.min.css  +*mootools.min.js  +*vimrc  +Vagrantfile  + +# archives or compressed (extensions from dircolors defaults) +*.tar  +*.tgz  +*.arc  +*.arj  +*.taz  +*.lha  +*.lz4  +*.lzh  +*.lzma  +*.tlz  +*.txz  +*.tzo  +*.t7z  +*.zip  +*.z  +*.dz  +*.gz  +*.lrz  +*.lz  +*.lzo  +*.xz  +*.zst  +*.tzst  +*.bz2  +*.bz  +*.tbz  +*.tbz2  +*.tz  +*.deb  +*.rpm  +*.jar  +*.war  +*.ear  +*.sar  +*.rar  +*.alz  +*.ace  +*.zoo  +*.cpio  +*.7z  +*.rz  +*.cab  +*.wim  +*.swm  +*.dwm  +*.esd  + +# image formats (extensions from dircolors defaults) +*.jpg  +*.jpeg  +*.mjpg  +*.mjpeg  +*.gif  +*.bmp  +*.pbm  +*.pgm  +*.ppm  +*.tga  +*.xbm  +*.xpm  +*.tif  +*.tiff  +*.png  +*.svg  +*.svgz  +*.mng  +*.pcx  +*.mov  +*.mpg  +*.mpeg  +*.m2v  +*.mkv  +*.webm  +*.ogm  +*.mp4  +*.m4v  +*.mp4v  +*.vob  +*.qt  +*.nuv  +*.wmv  +*.asf  +*.rm  +*.rmvb  +*.flc  +*.avi  +*.fli  +*.flv  +*.gl  +*.dl  +*.xcf  +*.xwd  +*.yuv  +*.cgm  +*.emf  +*.ogv  +*.ogx  + +# audio formats (extensions from dircolors defaults) +*.aac  +*.au  +*.flac  +*.m4a  +*.mid  +*.midi  +*.mka  +*.mp3  +*.mpc  +*.ogg  +*.ra  +*.wav  +*.oga  +*.opus  +*.spx  +*.xspf  + +# other formats +*.pdf  diff --git a/modules/home/conf/lf/keybindings/default.nix b/modules/home/conf/lf/keybindings/default.nix new file mode 100644 index 00000000..b41004dc --- /dev/null +++ b/modules/home/conf/lf/keybindings/default.nix @@ -0,0 +1,94 @@ +{nixosConfig, ...}: { + # Remove some defaults + "'\"'" = null; + ";" = null; + "\"'\"" = null; + c = null; + d = null; + e = null; + j = null; + k = null; + m = null; + f = null; + + # Sorting + kn = ":set sortby natural; set info"; + ks = ":set sortby size; set info size"; + kt = ":set sortby time; set info time"; + ka = ":set sortby atime; set info atime"; + kc = ":set sortby ctime; set info ctime"; + ke = ":set sortby ext; set info"; + + # Searching + l = "search-next"; + L = "search-prev"; + + # File Openers + ee = "\$\$EDITOR \"$f\""; + es = "\$ nvim -S \"$f\""; + u = "view_file"; + cc = "\$sudo -e \"$f\""; + fe = "execute"; + fl = "follow_link"; + + # Archive Mappings + au = "unarchive"; + aa = "archive"; + + # Trash Mappings + dd = "trash"; + jc = "clear_trash"; + jr = "restore_trash"; + + # Dragon Mapping + dr = "dragon"; + ds = "dragon-stay"; + di = "dragon-individual"; + #dm = "mvdragon"; + #dc = "cpdragon"; + dl = "dlfile"; + + cs = "stripspace"; + + # Vim keys + h = "updir"; + t = "down"; + n = "up"; + s = "open"; + + # Basic Functions + "." = "set hidden!"; + DD = "delete"; + p = "paste"; + x = "cut"; + y = "copy"; + "" = "open"; + + mk = "mk_ln"; + mf = "mk_file"; + me = "mk_file_and_edit"; + md = "mk_dir"; + ms = "mk_scr_default"; + mt = "mk_scr_temp"; + + ch = "chmod"; + bg = "set_wall_paper"; + r = ":rename; cmd-end"; + H = "go_project_base_directory"; + R = "reload"; + C = "clear"; + U = "unselect"; + + # Movement + gjr = "cd ~/.local/share/Trash/files"; + gus = "cd /run/user/${builtins.toString nixosConfig.users.users.soispha.uid}"; + + gc = "cd ~/.config"; + gl = "cd ~/.local"; + gE = "cd /etc"; + + "gU." = "cd /usr"; + gUs = " cd /usr/share"; + + gt = "cd /tmp"; +} diff --git a/modules/home/conf/mail/accounts/benedikt.nix b/modules/home/conf/mail/accounts/benedikt.nix new file mode 100644 index 00000000..87ede61b --- /dev/null +++ b/modules/home/conf/mail/accounts/benedikt.nix @@ -0,0 +1,48 @@ +{pkgs}: { + address = "benedikt.peetz@b-peetz.de"; + userName = "benedikt.peetz@b-peetz.de"; + realName = "Benedikt Peetz"; + primary = true; + passwordCommand = "${pkgs.libsecret}/bin/secret-tool lookup account benedikt.peetz@b-peetz.de"; + aliases = [ + "@b-peetz.de" + ]; + folders = {}; + gpg = { + encryptByDefault = true; + key = "9A254A935C25B0419EAE495014D2BC012F572AD7"; + signByDefault = true; + }; + signature = { + # TODO: + }; + neomutt = { + enable = true; + }; + mbsync = { + enable = true; + create = "both"; + }; + # himalaya = { + # enable = true; + # backend = "imap"; + # sender = "smtp"; + # settings = { + # # TODO: + # }; + # }; + smtp = { + host = "server1.vhack.eu"; + port = 465; + }; + imap = { + host = "server1.vhack.eu"; + port = 993; + }; + jmap = { + # TODO: + }; + maildir = { + path = "bpeetz"; + }; +} diff --git a/modules/home/conf/mail/accounts/soispha.nix b/modules/home/conf/mail/accounts/soispha.nix new file mode 100644 index 00000000..012e84d6 --- /dev/null +++ b/modules/home/conf/mail/accounts/soispha.nix @@ -0,0 +1,49 @@ +{pkgs}: { + address = "soispha@vhack.eu"; + userName = "soispha@vhack.eu"; + realName = "Soispha"; + primary = false; + passwordCommand = "${pkgs.libsecret}/bin/secret-tool lookup account soispha@vhack.eu"; + aliases = [ + "admin@vhack.eu" + ]; + folders = { + }; + gpg = { + encryptByDefault = true; + key = "9606FC749FCE16360723D4ADA5E94010C3A642AD"; + signByDefault = true; + }; + signature = { + # TODO: + }; + neomutt = { + enable = true; + }; + mbsync = { + enable = true; + create = "both"; + }; + # himalaya = { + # enable = true; + # backend = "imap"; + # sender = "smtp"; + # settings = { + # # TODO: + # }; + # }; + smtp = { + host = "server1.vhack.eu"; + port = 465; + }; + imap = { + host = "server1.vhack.eu"; + port = 993; + }; + jmap = { + # TODO: + }; + maildir = { + path = "soispha"; + }; +} diff --git a/modules/home/conf/mail/default.nix b/modules/home/conf/mail/default.nix new file mode 100644 index 00000000..0ecbe40a --- /dev/null +++ b/modules/home/conf/mail/default.nix @@ -0,0 +1,15 @@ +{ + config, + pkgs, + ... +}: let + benedikt = import ./accounts/benedikt.nix {inherit pkgs;}; + soispha = import ./accounts/soispha.nix {inherit pkgs;}; + + accounts = {inherit soispha benedikt;}; +in { + accounts.email = { + maildirBasePath = "${config.xdg.dataHome}/maildir"; + inherit accounts; + }; +} diff --git a/modules/home/conf/mako/default.nix b/modules/home/conf/mako/default.nix new file mode 100644 index 00000000..711457f2 --- /dev/null +++ b/modules/home/conf/mako/default.nix @@ -0,0 +1,44 @@ +{ + config, + pkgs, + ... +}: { + services.mako = { + enable = true; + backgroundColor = "#2e3440"; + borderColor = "#88c0d0"; + borderRadius = 25; + borderSize = 2; + defaultTimeout = 5000; + font = "Source Code Pro 10"; + width = 500; + height = 500; + icons = true; + ignoreTimeout = true; + layer = "overlay"; + markup = true; # TODO: + maxIconSize = 64; + sort = "-time"; + extraConfig = '' + [urgency=low] + border-color=#cccccc + + [urgency=normal] + border-color=#d08770 + + [urgency=high] + border-size=3 + border-color=#bf616a + default-timeout=0 + + [urgency=critical] + border-size=4 + border-color=#bf616a + default-timeout=0 + + [category=mpd] + default-timeout=2000 + group-by=category + ''; + }; +} diff --git a/modules/home/conf/mbsync/default.nix b/modules/home/conf/mbsync/default.nix new file mode 100644 index 00000000..ac9808c9 --- /dev/null +++ b/modules/home/conf/mbsync/default.nix @@ -0,0 +1,17 @@ +{ + config, + lib, + ... +}: { + # TODO: I have no clue if both are needed, but it looks neat, right? + programs.mbsync = { + enable = true; + }; + services.mbsync = { + enable = true; + # TODO: enable after isync 1.5 drops + #configFile = "${config.xdg.configHome}/mbsync/mbsync.conf"; + }; + # Disable the timer, and only activate it on neomutt start + systemd.user.timers.mbsync = lib.mkForce {}; +} diff --git a/modules/home/conf/mpd/default.nix b/modules/home/conf/mpd/default.nix new file mode 100644 index 00000000..49844b06 --- /dev/null +++ b/modules/home/conf/mpd/default.nix @@ -0,0 +1,43 @@ +{ + config, + pkgs, + lib, + osConfig, + ... +}: let + dataDir = "${config.xdg.dataHome}/mpd"; + playlistDirectory = "${dataDir}/playlists"; + runtimeDir = "/run/user/${builtins.toString osConfig.users.users.soispha.uid}/mpd"; +in { + home.sessionVariables = { + MPD_HOST = "/run/user/${builtins.toString osConfig.users.users.soispha.uid}/mpd/socket"; + }; + + systemd.user.services.mpd.Service.ExecStartPre = lib.mkForce '' + ${pkgs.coreutils}/bin/mkdir -p "${dataDir}" "${playlistDirectory}" "${runtimeDir}" + ''; + services.mpd = { + enable = true; + inherit dataDir; + musicDirectory = "~/media/music"; + network = { + listenAddress = "${runtimeDir}/socket"; + }; + extraConfig = '' + metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc,comment" + auto_update "yes" + + audio_output { + type "pipewire" + name "pipewire" + } + #database { + # plugin "simple" + # path "~/.local/share/mpd/db + # cache_directory "~/.local/share/mpd/cache" + #} + + filesystem_charset "UTF-8" + ''; + }; +} diff --git a/modules/home/conf/mpd/mpdconf.example b/modules/home/conf/mpd/mpdconf.example new file mode 100644 index 00000000..eaa5e641 --- /dev/null +++ b/modules/home/conf/mpd/mpdconf.example @@ -0,0 +1,418 @@ +# An example configuration file for MPD. +# Read the user manual for documentation: http://www.musicpd.org/doc/user/ + + +# Files and directories ####################################################### +# +# This setting controls the top directory which MPD will search to discover the +# available audio files and add them to the daemon's online database. This +# setting defaults to the XDG directory, otherwise the music directory will be +# be disabled and audio files will only be accepted over ipc socket (using +# file:// protocol) or streaming files over an accepted protocol. +# +#music_directory "~/music" +# +# This setting sets the MPD internal playlist directory. The purpose of this +# directory is storage for playlists created by MPD. The server will use +# playlist files not created by the server but only if they are in the MPD +# format. This setting defaults to playlist saving being disabled. +# +#playlist_directory "~/.mpd/playlists" +# +# This setting sets the location of the MPD database. This file is used to +# load the database at server start up and store the database while the +# server is not up. This setting defaults to disabled which will allow +# MPD to accept files over ipc socket (using file:// protocol) or streaming +# files over an accepted protocol. +# +#db_file "~/.mpd/database" + +# These settings are the locations for the daemon log files for the daemon. +# +# The special value "syslog" makes MPD use the local syslog daemon. This +# setting defaults to logging to syslog. +# +# If you use systemd, do not configure a log_file. With systemd, MPD +# defaults to the systemd journal, which is fine. +# +#log_file "~/.mpd/log" + +# This setting sets the location of the file which stores the process ID +# for use of mpd --kill and some init scripts. This setting is disabled by +# default and the pid file will not be stored. +# +# If you use systemd, do not configure a pid_file. +# +#pid_file "~/.mpd/pid" + +# This setting sets the location of the file which contains information about +# most variables to get MPD back into the same general shape it was in before +# it was brought down. This setting is disabled by default and the server +# state will be reset on server start up. +# +#state_file "~/.mpd/state" +# +# The location of the sticker database. This is a database which +# manages dynamic information attached to songs. +# +#sticker_file "~/.mpd/sticker.sql" +# +############################################################################### + + +# General music daemon options ################################################ +# +# This setting specifies the user that MPD will run as. MPD should never run as +# root and you may use this setting to make MPD change its user ID after +# initialization. This setting is disabled by default and MPD is run as the +# current user. +# +#user "nobody" +# +# This setting specifies the group that MPD will run as. If not specified +# primary group of user specified with "user" setting will be used (if set). +# This is useful if MPD needs to be a member of group such as "audio" to +# have permission to use sound card. +# +#group "nogroup" +# +# This setting sets the address for the daemon to listen on. Careful attention +# should be paid if this is assigned to anything other than the default, any. +# This setting can deny access to control of the daemon. Not effective if +# systemd socket activation is in use. +# +# For network +#bind_to_address "any" +# +# And for Unix Socket +#bind_to_address "~/.mpd/socket" +# +# This setting is the TCP port that is desired for the daemon to get assigned +# to. +# +#port "6600" +# +# Suppress all messages below the given threshold. Use "verbose" for +# troubleshooting. Available setting arguments are "notice", "info", "verbose", +# "warning" and "error". +# +#log_level "notice" +# +# Setting "restore_paused" to "yes" puts MPD into pause mode instead +# of starting playback after startup. +# +#restore_paused "no" +# +# This setting enables MPD to create playlists in a format usable by other +# music players. +# +#save_absolute_paths_in_playlists "no" +# +# This setting defines a list of tag types that will be extracted during the +# audio file discovery process. The complete list of possible values can be +# found in the user manual. +#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" +# +# This example just enables the "comment" tag without disabling all +# the other supported tags: +#metadata_to_use "+comment" +# +# This setting enables automatic update of MPD's database when files in +# music_directory are changed. +# +#auto_update "yes" +# +# Limit the depth of the directories being watched, 0 means only watch +# the music directory itself. There is no limit by default. +# +#auto_update_depth "3" +# +############################################################################### + + +# Symbolic link behavior ###################################################### +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links outside of the configured music_directory. +# +#follow_outside_symlinks "yes" +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links inside of the configured music_directory. +# +#follow_inside_symlinks "yes" +# +############################################################################### + + +# Zeroconf / Avahi Service Discovery ########################################## +# +# If this setting is set to "yes", service information will be published with +# Zeroconf / Avahi. +# +#zeroconf_enabled "yes" +# +# The argument to this setting will be the Zeroconf / Avahi unique name for +# this MPD server on the network. %h will be replaced with the hostname. +# +#zeroconf_name "Music Player @ %h" +# +############################################################################### + + +# Permissions ################################################################# +# +# If this setting is set, MPD will require password authorization. The password +# setting can be specified multiple times for different password profiles. +# +#password "password@read,add,control,admin" +# +# This setting specifies the permissions a user has who has not yet logged in. +# +#default_permissions "read,add,control,admin" +# +############################################################################### + + +# Database ####################################################################### +# +# An example of a database section instead of the old 'db_file' setting. +# It enables mounting other storages into the music directory. +# +#database { +# plugin "simple" +# path "~/.local/share/mpd/db +# cache_directory "~/.local/share/mpd/cache" +#} +# +# An example of database config for a satellite setup +# +#music_directory "nfs://fileserver.local/srv/mp3" +#database { +# plugin "proxy" +# host "other.mpd.host" +# port "6600" +#} + +# Input ####################################################################### +# +input { + plugin "curl" +# proxy "proxy.isp.com:8080" +# proxy_user "user" +# proxy_password "password" +} + +# +############################################################################### + +# Audio Output ################################################################ +# +# MPD supports various audio output types, as well as playing through multiple +# audio outputs at the same time, through multiple audio_output settings +# blocks. Setting this block is optional, though the server will only attempt +# autodetection for one sound card. +# +# An example of an ALSA output: +# +#audio_output { +# type "alsa" +# name "My ALSA Device" +## device "hw:0,0" # optional +## mixer_type "hardware" # optional +## mixer_device "default" # optional +## mixer_control "PCM" # optional +## mixer_index "0" # optional +#} +# +# An example of an OSS output: +# +#audio_output { +# type "oss" +# name "My OSS Device" +## device "/dev/dsp" # optional +## mixer_type "hardware" # optional +## mixer_device "/dev/mixer" # optional +## mixer_control "PCM" # optional +#} +# +# An example of a shout output (for streaming to Icecast): +# +#audio_output { +# type "shout" +# encoder "vorbis" # optional +# name "My Shout Stream" +# host "localhost" +# port "8000" +# mount "/mpd.ogg" +# password "hackme" +# quality "5.0" +# bitrate "128" +# format "44100:16:1" +## protocol "icecast2" # optional +## user "source" # optional +## description "My Stream Description" # optional +## url "http://example.com" # optional +## genre "jazz" # optional +## public "no" # optional +## timeout "2" # optional +## mixer_type "software" # optional +#} +# +# An example of a recorder output: +# +#audio_output { +# type "recorder" +# name "My recorder" +# encoder "vorbis" # optional, vorbis or lame +# path "/var/lib/mpd/recorder/mpd.ogg" +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +#} +# +# An example of a httpd output (built-in HTTP streaming server): +# +#audio_output { +# type "httpd" +# name "My HTTP Stream" +# encoder "vorbis" # optional, vorbis or lame +# port "8000" +# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +# max_clients "0" # optional 0=no limit +#} +# +# An example of a pulseaudio output (streaming to a remote pulseaudio server) +# +#audio_output { +# type "pulse" +# name "My Pulse Output" +## server "remote_server" # optional +## sink "remote_server_sink" # optional +## media_role "media_role" #optional +#} +# +# An example of a winmm output (Windows multimedia API). +# +#audio_output { +# type "winmm" +# name "My WinMM output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +# or +## device "0" # optional +## mixer_type "hardware" # optional +#} +# +# An example of a wasapi output (Windows multimedia API). +# +#audio_output { +# type "wasapi" +# name "My WASAPI output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +# or +## device "0" # optional +## Exclusive mode blocks all other audio source, and get best audio quality without resampling. +## exclusive "no" # optional +## Enumerate all devices in log. +## enumerate "no" # optional +#} +# +# An example of an openal output. +# +#audio_output { +# type "openal" +# name "My OpenAL output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +#} +# +# An example of an sndio output. +# +#audio_output { +# type "sndio" +# name "sndio output" +# mixer_type "hardware" +#} +# +# An example of an OS X output: +# +#audio_output { +# type "osx" +# name "My OS X Device" +## device "Built-in Output" # optional +## channel_map "-1,-1,0,1" # optional +#} +# +## Example "pipe" output: +# +#audio_output { +# type "pipe" +# name "my pipe" +# command "aplay -f cd 2>/dev/null" +## Or if you're want to use AudioCompress +# command "AudioCompress -m | aplay -f cd 2>/dev/null" +## Or to send raw PCM stream through PCM: +# command "nc example.org 8765" +# format "44100:16:2" +#} +# +## An example of a null output (for no audio output): +# +#audio_output { +# type "null" +# name "My Null Output" +# mixer_type "none" # optional +#} +# +############################################################################### + + +# Normalization automatic volume adjustments ################################## +# +# This setting specifies the type of ReplayGain to use. This setting can have +# the argument "off", "album", "track" or "auto". "auto" is a special mode that +# chooses between "track" and "album" depending on the current state of +# random playback. If random playback is enabled then "track" mode is used. +# See for +# more details about ReplayGain. +# This setting is off by default. +# +#replaygain "album" +# +# This setting sets the pre-amp used for files that have ReplayGain tags. By +# default this setting is disabled. +# +#replaygain_preamp "0" +# +# This setting sets the pre-amp used for files that do NOT have ReplayGain tags. +# By default this setting is disabled. +# +#replaygain_missing_preamp "0" +# +# This setting enables or disables ReplayGain limiting. +# MPD calculates actual amplification based on the ReplayGain tags +# and replaygain_preamp / replaygain_missing_preamp setting. +# If replaygain_limit is enabled MPD will never amplify audio signal +# above its original level. If replaygain_limit is disabled such amplification +# might occur. By default this setting is enabled. +# +#replaygain_limit "yes" +# +# This setting enables on-the-fly normalization volume adjustment. This will +# result in the volume of all playing audio to be adjusted so the output has +# equal "loudness". This setting is disabled by default. +# +#volume_normalization "no" +# +############################################################################### + +# Character Encoding ########################################################## +# +# If file or directory names do not display correctly for your locale then you +# may need to modify this setting. +# +#filesystem_charset "UTF-8" +# +############################################################################### diff --git a/modules/home/conf/mpv/default.nix b/modules/home/conf/mpv/default.nix new file mode 100644 index 00000000..6b252a38 --- /dev/null +++ b/modules/home/conf/mpv/default.nix @@ -0,0 +1,10 @@ +{...}: { + programs.mpv = { + enable = true; + bindings = { + q = "quit 0"; + "Ctrl+c" = "quit 1"; + "Shift+q" = "quit-watch-later 1"; + }; + }; +} diff --git a/modules/home/conf/mumble/Mumble.conf b/modules/home/conf/mumble/Mumble.conf new file mode 100644 index 00000000..2d895f41 --- /dev/null +++ b/modules/home/conf/mumble/Mumble.conf @@ -0,0 +1,67 @@ +[General] +databaselocation=/home/soispha/.local/share/Mumble/Mumble/mumble.sqlite +lastupdate=3 + +[audio] +headphone=true +input=PipeWire +loudness=1549 +output=PipeWire +quality=72000 +vadmax=@Variant(\0\0\0\x87?Kw\x97) +vadmin=@Variant(\0\0\0\x87?7\x1e\xd4) + +[messages] +10\log=13 +12\log=13 +14\log=13 +15\log=13 +17\log=13 +18\log=13 +19\log=13 +2\log=13 +20\log=13 +21\log=13 +22\log=13 +23\log=13 +25\log=13 +26\log=13 +27\log=13 +28\log=13 +29\log=13 +30\log=13 +31\log=13 +5\log=13 +6\log=13 +9\log=13 +size=32 + +[messagesounds] +size=31 + +[net] +certificate="@ByteArray(0\x82\tX\x2\x1\x3\x30\x82\t\xe\x6\t*\x86H\x86\xf7\r\x1\a\x1\xa0\x82\b\xff\x4\x82\b\xfb\x30\x82\b\xf7\x30\x82\x3\xad\x6\t*\x86H\x86\xf7\r\x1\a\x1\xa0\x82\x3\x9e\x4\x82\x3\x9a\x30\x82\x3\x96\x30\x82\x3\x92\x6\v*\x86H\x86\xf7\r\x1\f\n\x1\x3\xa0\x82\x3+0\x82\x3'\x6\n*\x86H\x86\xf7\r\x1\t\x16\x1\xa0\x82\x3\x17\x4\x82\x3\x13\x30\x82\x3\xf\x30\x82\x1\xf7\xa0\x3\x2\x1\x2\x2\x1\x1\x30\r\x6\t*\x86H\x86\xf7\r\x1\x1\x5\x5\0\x30\x16\x31\x14\x30\x12\x6\x3U\x4\x3\f\vMumble User0\x1e\x17\r230710132716Z\x17\r430705132716Z0\x16\x31\x14\x30\x12\x6\x3U\x4\x3\f\vMumble User0\x82\x1\"0\r\x6\t*\x86H\x86\xf7\r\x1\x1\x1\x5\0\x3\x82\x1\xf\0\x30\x82\x1\n\x2\x82\x1\x1\0\xb3\x8c\xd2\xdbM\x90\xa6\xc7}\xf4\x6X\xf9O\x16Q\x12\xc7\x1\xca\x88\x9c\x96o\xd1\x11\xc1\xc3\xd1/\xb6\x9d\xcfn\xcd\x84\xd2\x1d\xcc\xfcO\xf9\xa4\"\xaa'2\x6\xee[\x3\xd3vx\x84`i@P|\xb8\xc5I\xa8\xa2\b\xc8\0\xbd\xf1\xcc\x63\xbe\x99Zj&\xa5t\xc5\bOr\xc1\xaen\xc7\n\xd2\xcc\xa1\x30\xb8\xe0\0\xe8\xc5\xb6\x86g\x14\x30S\x9d\x8b\xfb\xacP\x7f+\x93}3\xe3\xcbPJ\x86\xf7^Z\xda\x87Z\xfez\xec\xc0\xf7\xe9\x80\xbc\xe2\re@\xe7\x92\x84\xe5\x97\f\x8c\n\x3\x1c\xd1\xbb\x32\xce\xfe\xb6\x1d\xefUYz\xf\xd7,5\x4G\x1f\t\xf7\x43\f?wx\x1a\x12\xd4.I\xbd\xe4G\xea\x33\x9d\xb1\xb0\x62\x45\xcd\xe0\x8b\xe4\x31\x1a\x8c\xedLEyC\xf0\x9f\x32}c\xc9X\x19[\xf7\xfb\xfc\x39\xe0\xd5\x30\x87\xd0\x82:\xb5\x87j]\x9d\xf8\x1b\x4\xb2P \x5/\xb2H\xfa\x42I\x1dN\xa9\xb7\x9a\x91*\x83\xe\x45\xcf\xbe\t\xb5\x36)\xf7\x7f\x1\x43\x2\x3\x1\0\x1\xa3h0f0\f\x6\x3U\x1d\x13\x1\x1\xff\x4\x2\x30\0\x30\x13\x6\x3U\x1d%\x4\f0\n\x6\b+\x6\x1\x5\x5\a\x3\x2\x30\x1d\x6\x3U\x1d\xe\x4\x16\x4\x14\xb9\x41\x19t\x16\x18~\xe8\v\xa9\x9b\x86i\x86\xeP%\xd7\n\xc9\x30\"\x6\t`\x86H\x1\x86\xf8\x42\x1\r\x4\x15\x16\x13Generated by Mumble0\r\x6\t*\x86H\x86\xf7\r\x1\x1\x5\x5\0\x3\x82\x1\x1\0\x91+\r'hS\xc2\x12k\x13O\xb2\"\x85\xd6w\x96\x8a\x97\x46\xee\x95Q\x8b\x8b\t\x8a\xfcH\xab\x30\x1dxV\xc9\xf5\x80\x42;'o\xf1\xd1\xf2\xfb\x18\xe2+\x8d\x39 \xc3\xe\x44\xa9\t\xe2i\x8a\xa7?#\xcd]0\xf4\x1d\x4\a\xd6\x87\x62\xe2\xd8\x34\xb6\xcf\x89\xf2\v\xf1\x8b\xc6\xf8\x8f\x94H/\xfa`\x9d\xb5\xac\x66H\xef\xf4\tJ\xfeHg]!\xed\n\xaf\xa8nd@y\xe8>A\x10\xc4>\xc3\xf7\xe3\xffW\x90T\x87\x94[\x7fg0+p\xdd\x3\x8d\xdb\x80\f?\xe9\xf9l5\xac)z+4R\xbc\xf3\xe1\x82\xde\xc3u\xb2\xa1s\xe2\xbb\xdcpL#|\f\x7f\x93\x30-\x6\t*\x86H\x86\xf7\r\x1\t\x14\x31 \x1e\x1e\0M\0u\0m\0\x62\0l\0\x65\0 \0I\0\x64\0\x65\0n\0t\0i\0t\0y0\x82\x5\x42\x6\t*\x86H\x86\xf7\r\x1\a\x1\xa0\x82\x5\x33\x4\x82\x5/0\x82\x5+0\x82\x5'\x6\v*\x86H\x86\xf7\r\x1\f\n\x1\x1\xa0\x82\x4\xc0\x30\x82\x4\xbc\x2\x1\0\x30\r\x6\t*\x86H\x86\xf7\r\x1\x1\x1\x5\0\x4\x82\x4\xa6\x30\x82\x4\xa2\x2\x1\0\x2\x82\x1\x1\0\xb3\x8c\xd2\xdbM\x90\xa6\xc7}\xf4\x6X\xf9O\x16Q\x12\xc7\x1\xca\x88\x9c\x96o\xd1\x11\xc1\xc3\xd1/\xb6\x9d\xcfn\xcd\x84\xd2\x1d\xcc\xfcO\xf9\xa4\"\xaa'2\x6\xee[\x3\xd3vx\x84`i@P|\xb8\xc5I\xa8\xa2\b\xc8\0\xbd\xf1\xcc\x63\xbe\x99Zj&\xa5t\xc5\bOr\xc1\xaen\xc7\n\xd2\xcc\xa1\x30\xb8\xe0\0\xe8\xc5\xb6\x86g\x14\x30S\x9d\x8b\xfb\xacP\x7f+\x93}3\xe3\xcbPJ\x86\xf7^Z\xda\x87Z\xfez\xec\xc0\xf7\xe9\x80\xbc\xe2\re@\xe7\x92\x84\xe5\x97\f\x8c\n\x3\x1c\xd1\xbb\x32\xce\xfe\xb6\x1d\xefUYz\xf\xd7,5\x4G\x1f\t\xf7\x43\f?wx\x1a\x12\xd4.I\xbd\xe4G\xea\x33\x9d\xb1\xb0\x62\x45\xcd\xe0\x8b\xe4\x31\x1a\x8c\xedLEyC\xf0\x9f\x32}c\xc9X\x19[\xf7\xfb\xfc\x39\xe0\xd5\x30\x87\xd0\x82:\xb5\x87j]\x9d\xf8\x1b\x4\xb2P \x5/\xb2H\xfa\x42I\x1dN\xa9\xb7\x9a\x91*\x83\xe\x45\xcf\xbe\t\xb5\x36)\xf7\x7f\x1\x43\x2\x3\x1\0\x1\x2\x82\x1\0\x4\xd6\xf2\x66\v\xe0\xae\xc6(\xccw\x91Ub\xfe\xd8\x7f\x97\x92\xa2Imc\x16\xaf}y\x8a\x14,\xe3\x90\xbc\x63!\xb2\aQ\xdbQ\x1f\xbc\xbc\x62\\\xd0\xc2\xa5\xf2-\xcc\xdc\x19\xd0\xe4\xcc\x8ey\xb7\xd1\xac\xcfP\x8du\x94\xa4\x3u\x1b;\xe5\xa2\x61\x12\xd1R\xaaZ\v\xe7\x8d\xf0\xabl\xce\xba\x99\xbd\x95\xdbpkCJr\xfb\xc5P9\x1e\xf\xb1iI9&\xeb\x62\x8a#\xa7\x17\xcbw\x92\xf9\xf7JZ\xa6;F\xb3\xba\xb1H\x89]uU7\x1e\xd7\xf6U`\x8d\xa1\x1aG7\x11\x31\xbf\xf4\xdb\x32\x63\xbf\x3\xad&h\x82\x9b\xe7\x19/\xf6\r\x8c\x89\xc6\xd0\x1d\0\x87\t|\xc0\xf2\x8f\xbb\x87_8{\xf2\xc7\x8a\x34)\xe3\xf1\xcc(\xf4\xee\xeb($\x5\x84\xaf\x1\xaa\xf7\xff\x9b\x15h\x2y\xb3\x91\xba,Oq\xc9$\x81\x11Zg\xc4I3\v\xeay\f\xf0\x33\xc6p\xea\xc6\x9d\xac\xaa\xedp\xa7!\xcbHf5\xa0i\xbdo@\xb8![\x7f\xea\xad\x6\x31p\x81\x61\x2\x81\x81\0\xdc\x8d}{\xc3\x31\xb6(F\xc5\x36\x9b\xba\x66\xb1\xce\r_\x90\xc6\x1f\x87\x37\x84m\xd1\a8\xc0\v9\xe0\x8bm\xaf\x64\xbe\x81\xa8\xe7\xaf\x19\x43,vj\xaf!9rz\x87\"\xca\xbf\xcf\x16\x88\x46t\xbd\x12\xaa;\xf4x_\x1b\xb3\x90\b\xb6\xf6\xec\x1f\x95\x62\xac\xfa\x1b\xae\xa2\xa7oA\x9bhOW\xa8\x44\\\xadz T\xe3\x43\x46\x99\x98\xb4{*\"\xdb\xd9\xc8\xd2\x15\n4\"\x8d\x96$\x17\xfd^\xf7\x84\x93\x7fw{o\0\xe1\x2\x81\x81\0\xd0hNA\xc3\x9e\x93&iq\x1dQ\xb6\xc6\x1c\x32\xf3\xfc c&Y\xe7|\xbeq2P\xe1\xdb\x97\xf8\x9fI(\x98\x9d\xf1\xfe\xb6\xf\x90\xa5\xebi>\x14\x6\xd8.\xf4\xce\x86\x9d*\x87 \xf9X\x4\xdcZ\xf9g\x3\x98H{\xdf\x66\xde\xd6zr\xecG_\x14t\x1dm%P\xe5\xea\x8e\x6\xa2. \xa1\xd7\xd7W]\xdd\x15\x6\xcf+/\x11\vel\xd3\xe8\xc3/\xbc\x1f\xc3n\xd4\xb8\x62j\xf5\xc0\xc0\x89\xe3z\xb8\x36\xd5\xb2\xa3\x2\x81\x80z`W\xdc\x30\x36\x89(W\xfc]\x8c\x93% K\x80\xc8\"\0\x8c\xc5\xee\\ \xc2\xf7\n\xda$`|\xe3`}\r\x9dWV\xa8\0\xc9\xcd\xd2\xc4\f\xe4\x8d%k+\x16\xbc.\n\xf7\x44\x9d\xd6\xfc\x1a\x88\x8a\xdd\x11J\xd9\xc4%\xe6g\xd8\xbc.\xe2\x11/J\x81\x2\x81\x80\x63;W\xf\xbf:1,\x98\x6\x31\x4\xa8wz\x13\xd4\xd2\x97\x5>\xcc\x8e\tz\x90\x61y\xdb\xa0\xf8\xa2|\r\x94\x93\xde\x98\xcc\x44\x19\xf3\x30\xdd\x7fu\xfc\x89)\xc4i\xf2\x30l\x83\x44\x66\x31\xf3t\x15\f\b6\xc1\xa2o\xd8\xf3\x8d\x82\xcb\x32\xf0\xa7\x8ap>G\xef~\xf9\xc6\xa4\x42\xe3\xafJ\xe7\x95\xc8\x1a\x2\xc1\xe9\xc2\x8b\xf1{\x11?\xce\xe8\xd3\x39WI<.\xedo^Y\xd6U\x99\x1e\xfe\xb6\xf1\xb6v'\a\xb1\xac\\\xeb\x2\x81\x80@\x19\xc4\x32&\xcb\xc1\xca\x10K\xdf\x45\xf9\xf\x1d\x85\x39\x65\xdc\x33\x45\xbe\xac\x97~;\xe2m-\xd6\x9b\x82\x1\xbd\x90'W\xf5\xf5\xce\x35\xd7\xb4\xcdidTiP\\-vG+`\xb5u\xb7\x14\x44\xe1\xd9\xd3\r\x81\xb0GL\xe1U\xe3\xf0\xaa\xd1\x8f\xc6\"\xa5S\xb6\xbf\x4\x1a\xc4\xe0|\x8d\xa2+y(-\xad\ty\xd5\xe2g\xd3\x8c\xcdl\x96g3\xfe\x80\xb7|b[\xca\xb2\xbf\x61\xf7\x9c\x65\x30\x61\xa0\x35\xf6W\xb4\xcc\xdd\x34\x31T0#\x6\t*\x86H\x86\xf7\r\x1\t\x15\x31\x16\x4\x14\x9f\xdc\xf9\x38\xc2\x8a\x1c\xfe\x6}\xf6\x64\x62>L#|\f\x7f\x93\x30-\x6\t*\x86H\x86\xf7\r\x1\t\x14\x31 \x1e\x1e\0M\0u\0m\0\x62\0l\0\x65\0 \0I\0\x64\0\x65\0n\0t\0i\0t\0y0A010\r\x6\t`\x86H\x1\x65\x3\x4\x2\x1\x5\0\x4 Fm\xb6/lL\x18\x1b!\xfa+x\xb5\xd9?GrR\xb7\xd3\x90\xc1N)L\x9c\xc7')\xe^\xbe\x4\b\x8b\x2\xb2\xb2\x97\b\x8a\xf6\x2\x2\b\0)" +framesperpacket=1 + +[overlay] +blacklist=@Invalid() +blacklistexclude=@Invalid() +launchers=@Invalid() +launchersexclude=@Invalid() +paths=@Invalid() +pathsexclude=@Invalid() +version=1.4.0 +whitelist=@Invalid() +whitelistexclude=@Invalid() + +[shortcuts] +size=0 + +[ui] +HighContrast=true +connect\geometry="@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\f=\0\0\x1m\0\0\n\0\0\0\0\0\0\0\f=\0\0\x1m\0\0\0\x1\x2\0\0\0\a\x80\0\0\n\0\0\0\0\0\0\0\f=\0\0\x1m)" +connect\header=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x2&\0\0\0\x3\x1\x1\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x3\0\0\x1w\0\0\0\x1\0\0\0\x1\0\0\0S\0\0\0\x1\0\0\0\x3\0\0\0\\\0\0\0\x1\0\0\0\x3\0\0\x3\xe8\0\0\0\0\x64) +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\r\xb9\0\0\x3\xfa\0\0\n\0\0\0\0\0\0\0\f\xde\0\0\x1\xb2\0\0\0\x1\x2\0\0\0\a\x80\0\0\n\0\0\0\0\0\0\0\r\xb9\0\0\x3\xfa) +header=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x2\xb0\0\0\0\x1\x1\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x1\0\0\x2\xb0\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\x64) +server=mumble.vhack.eu +state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\0\0\0\x1\0\0\0\x3\xbd\xfc\x2\0\0\0\x2\xfb\0\0\0\f\0q\0\x64\0w\0L\0o\0g\x1\0\0\0>\0\0\x3\xa0\0\0\0z\0\xff\xff\xff\xfb\0\0\0\xe\0q\0\x64\0w\0\x43\0h\0\x61\0t\x1\0\0\x3\xe2\0\0\0\x19\0\0\0\x19\0\0\0\x19\0\0\x2\xb6\0\0\x3\xbd\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x1a\0q\0t\0I\0\x63\0o\0n\0T\0o\0o\0l\0\x62\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) diff --git a/modules/home/conf/mumble/default.nix b/modules/home/conf/mumble/default.nix new file mode 100644 index 00000000..6fa524dc --- /dev/null +++ b/modules/home/conf/mumble/default.nix @@ -0,0 +1,3 @@ +{...}: { + xdg.configFile."Mumble/Mumble.conf".source = ./Mumble.conf; +} diff --git a/modules/home/conf/neomutt/default.nix b/modules/home/conf/neomutt/default.nix new file mode 100644 index 00000000..e4fbcb39 --- /dev/null +++ b/modules/home/conf/neomutt/default.nix @@ -0,0 +1,168 @@ +{pkgs, ...}: { + programs.neomutt = { + enable = true; + package = pkgs.writeShellScriptBin "neomutt" '' + systemctl --user start mbsync.service; + ${pkgs.neomutt}/bin/neomutt; + ''; + vimKeys = false; # see the modified ones below + checkStatsInterval = 60; + binds = [ + #------------------------------------------------------------ + # Vi Key Bindings (taken from their configuration, modified for dvorak) + #------------------------------------------------------------ + + # Moving around + { + action = "noop"; + key = "g"; + map = ["attach" "browser" "index"]; + } + { + action = "first-entry"; + key = "gg"; + map = ["attach" "browser" "index"]; + } + { + action = "last-entry"; + key = "G"; + map = ["attach" "browser" "index"]; + } + { + action = "noop"; + key = "g"; + map = ["pager"]; + } + { + action = "top"; + key = "gg"; + map = ["pager"]; + } + { + action = "bottom"; + key = "G"; + map = ["pager"]; + } + { + action = "previous-line"; + key = "n"; + map = ["pager"]; + } + { + action = "next-line"; + key = "t"; + map = ["pager"]; + } + + # Scrolling + { + action = "next-page"; + key = "\\CF"; + map = ["attach" "browser" "pager" "index"]; + } + { + action = "previous-page"; + key = "\\CB"; + map = ["attach" "browser" "pager" "index"]; + } + { + action = "half-up"; + key = "\\Cu"; + map = ["attach" "browser" "pager" "index"]; + } + { + action = "half-down"; + key = "\\Cd"; + map = ["attach" "browser" "pager" "index"]; + } + { + action = "next-line"; + key = "\\Ce"; + map = ["browser" "pager"]; + } + { + action = "previous-line"; + key = "\\Cy"; + map = ["browser" "pager"]; + } + { + action = "next-line"; + key = "\\Ce"; + map = ["index"]; + } + { + action = "previous-line"; + key = "\\Cy"; + map = ["index"]; + } + + { + action = "noop"; + key = "d"; + map = ["pager" "index"]; + } + { + action = "delete-message"; + key = "dd"; + map = ["pager" "index"]; + } + + # Mail & Reply + { + # Doesn't work currently + action = "list-reply"; + key = "\\Cm"; + map = ["index"]; + } + + # Threads + { + action = "search-opposite"; + key = "N"; + map = ["browser" "pager" "index"]; + } + { + action = "delete-thread"; + key = "dT"; + map = ["pager" "index"]; + } + { + action = "delete-subthread"; + key = "dt"; + map = ["pager" "index"]; + } + { + action = "next-thread"; + key = "gt"; + map = ["pager" "index"]; + } + { + action = "previous-thread"; + key = "gT"; + map = ["pager" "index"]; + } + { + action = "collapse-thread"; + key = "za"; + map = ["index"]; + } + { + # Missing: folddisable/foldenable + action = "collapse-all"; + key = "zA"; + map = ["index"]; + } + + { + action = "search-next"; + key = "l"; + map = ["index"]; + } + { + action = "limit"; + key = "f"; + map = ["index"]; + } + ]; + }; +} diff --git a/modules/home/conf/nheko/default.nix b/modules/home/conf/nheko/default.nix new file mode 100644 index 00000000..fd147c0b --- /dev/null +++ b/modules/home/conf/nheko/default.nix @@ -0,0 +1,13 @@ +{ + config, + nixosConfig, + lib, + ... +}: { + config = lib.mkIf nixosConfig.soispha.secrets.enable { + xdg.configFile."nheko/nheko.conf".source = config.lib.file.mkOutOfStoreSymlink nixosConfig.age.secrets.nheko.path; + programs.nheko = { + enable = true; + }; + }; +} diff --git a/modules/home/conf/nix-index/default.nix b/modules/home/conf/nix-index/default.nix new file mode 100644 index 00000000..eb8132d9 --- /dev/null +++ b/modules/home/conf/nix-index/default.nix @@ -0,0 +1,14 @@ +{...}: { + programs.nix-index = { + enable = true; + symlinkToCacheHome = true; + + # Handled by myself (and the script is overridden) + enableBashIntegration = false; + enableZshIntegration = false; + enableFishIntegration = false; + }; + programs.nix-index-database = { + comma.enable = false; + }; +} diff --git a/modules/home/conf/npm/.npmrc b/modules/home/conf/npm/.npmrc new file mode 100644 index 00000000..d0d846bd --- /dev/null +++ b/modules/home/conf/npm/.npmrc @@ -0,0 +1,6 @@ +scripts-prepend-node-path=true +node_gyp= +prefix=${XDG_DATA_HOME}/npm +cache=${XDG_CACHE_HOME}/npm +tmp=${XDG_RUNTIME_DIR}/npm +init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js diff --git a/modules/home/conf/npm/default.nix b/modules/home/conf/npm/default.nix new file mode 100644 index 00000000..7b4bb6a1 --- /dev/null +++ b/modules/home/conf/npm/default.nix @@ -0,0 +1,7 @@ +{ + config, + pkgs, + ... +}: { + xdg.configFile."npm/.npmrc".source = ./.npmrc; +} diff --git a/modules/home/conf/nvim/autocmds/default.nix b/modules/home/conf/nvim/autocmds/default.nix new file mode 100644 index 00000000..a8f00bdc --- /dev/null +++ b/modules/home/conf/nvim/autocmds/default.nix @@ -0,0 +1,124 @@ +{config, ...}: { + programs.nixvim = { + autoGroups = { + cursor_off = {clear = true;}; + colorcolumn_toggle = {clear = true;}; + numbertoggle = {clear = true;}; + coloroverride = {clear = true;}; + highlight_on_yank = {clear = true;}; + create_dir = {clear = true;}; + }; + autoCmd = [ + { + # Taken from: https://github.com/jghauser/mkdir.nvim + event = ["BufWritePre"]; + pattern = ["*"]; + callback = { + __raw = '' + function() + -- Get current filename, get full path (:p) and leave only the head (:h) + local dir = vim.fn.expand(':p:h') + + -- This handles URLs using netrw. See ':help netrw-transparent' for details. + if dir:find('%l+://') == 1 then + return + end + + if vim.fn.isdirectory(dir) == 0 then + vim.fn.mkdir(dir, 'p') + end + end + ''; + }; + group = "create_dir"; + desc = "Create the directory of the target file on write"; + } + { + event = ["TextYankPost"]; + pattern = ["*"]; + callback = { + __raw = '' + function() + vim.highlight.on_yank() + end + ''; + }; + group = "highlight_on_yank"; + desc = "Highlight the yanked text"; + } + { + event = ["BufWritePre"]; + pattern = ["*"]; + command = '' + ks | if search("\\s\\+$", 'n') != 0 | :%s/\s\+$// | endif | 's + ''; + desc = '' + Remove trailing whitespace on safe + :%s/\s\+$\| \+\ze\t//g >> For trailing spaces and spaces before tabstops + ''; + } + + { + event = ["WinLeave"]; + pattern = ["*"]; + command = "set nocursorline"; # TODO: possible also nocursorcolumn + group = "cursor_off"; + desc = "Display cursorline and cursorcolumn ONLY in active window."; + } + { + event = ["WinEnter"]; + pattern = ["*"]; + command = "set cursorline"; # TODO: possible also cursorcolumn + group = "cursor_off"; + desc = "Display cursorline and cursorcolumn ONLY in active window."; + } + + { + event = ["InsertEnter"]; + pattern = ["*"]; + command = "set colorcolumn=${config.programs.nixvim.opts.colorcolumn}"; + group = "colorcolumn_toggle"; + desc = "Only activate the colorcolumn when focused"; + } + { + event = ["BufLeave" "FocusLost" "InsertLeave" "WinLeave"]; + pattern = ["*"]; + command = "set colorcolumn=0"; + group = "colorcolumn_toggle"; + desc = "Only activate the colorcolumn when focused"; + } + + { + event = ["BufEnter" "FocusGained" "InsertLeave" "WinEnter"]; + pattern = ["*"]; + command = "if &nu && mode() != \"i\" | set rnu | endif"; + group = "numbertoggle"; + desc = "Change line numbers, when not focused"; + } + { + event = ["BufLeave" "FocusLost" "InsertEnter" "WinLeave"]; + pattern = ["*"]; + command = "if &nu | set nornu | endif"; + group = "numbertoggle"; + desc = "Change line numbers, when not focused"; + } + + { + # Override LineNr + event = ["ColorScheme"]; + pattern = ["*"]; + command = "highlight LineNr ctermfg=DarkGrey guifg=DarkGrey "; + group = "coloroverride"; + desc = "Changes Line number colors"; + } + { + # Override CursorLineNr + event = ["ColorScheme"]; + pattern = ["*"]; + command = "highlight CursorLineNr ctermfg=White guifg=White "; + group = "coloroverride"; + desc = "Changes Line number colors"; + } + ]; + }; +} diff --git a/modules/home/conf/nvim/clipboard/default.nix b/modules/home/conf/nvim/clipboard/default.nix new file mode 100644 index 00000000..0a686190 --- /dev/null +++ b/modules/home/conf/nvim/clipboard/default.nix @@ -0,0 +1,7 @@ +{...}: { + programs.nixvim = { + clipboard.providers = { + wl-copy.enable = true; + }; + }; +} diff --git a/modules/home/conf/nvim/default.nix b/modules/home/conf/nvim/default.nix new file mode 100644 index 00000000..2da80c22 --- /dev/null +++ b/modules/home/conf/nvim/default.nix @@ -0,0 +1,55 @@ +{pkgs, ...}: { + imports = [ + ./autocmds + ./clipboard + ./files + ./mappings + ./options + ./plgs + ]; + home.sessionVariables = { + EDITOR = "nvim"; + VISUAL = "nvim"; + CODEEDITOR = "nvim"; + }; + programs.nixvim = { + enable = true; + + # source: https://www.patorjk.com/software/taag/#p=display&f=ANSI%20Shadow&t=Neovim + extraConfigLuaPre = + /* + FIXME: Update the merge function to support that: <2023-08-29> + + lib.mkBefore + */ + '' + --------------------------------------------------------------------------- + -- + -- ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ + -- ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ + -- ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ + -- ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ + -- ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ + -- ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ + -- + --------------------------------------------------------------------------- + ''; + + extraPackages = with pkgs; [ + /* + These are mostly linters and formatters used for different file types. + Including them here is fine, as they are not necessarily sync able to different people. + */ + # nix + alejandra + statix + + # yaml + yamllint + + # shell + shellcheck + shfmt + ]; + }; +} diff --git a/modules/home/conf/nvim/files/default.nix b/modules/home/conf/nvim/files/default.nix new file mode 100644 index 00000000..68c267b9 --- /dev/null +++ b/modules/home/conf/nvim/files/default.nix @@ -0,0 +1,9 @@ +{lib, ...}: { + programs.nixvim = { + extraFiles = { + "ftplugin/tex.lua" = '' + ${lib.strings.fileContents ./ftplugin/tex.lua} + ''; + }; + }; +} diff --git a/modules/home/conf/nvim/files/ftplugin/tex.lua b/modules/home/conf/nvim/files/ftplugin/tex.lua new file mode 100644 index 00000000..f3fffa86 --- /dev/null +++ b/modules/home/conf/nvim/files/ftplugin/tex.lua @@ -0,0 +1,57 @@ +-- local used = false; +-- vim.keymap.set('n', 't', function() +-- used = not used; +-- if used then +-- require('nvim-treesitter.configs').setup { +-- highlight = { +-- additional_vim_regex_highlighting = { "latex", "markdown" }, +-- }, +-- } +-- else +-- require('nvim-treesitter.configs').setup { +-- highlight = { +-- additional_vim_regex_highlighting = { "" }, +-- }, +-- } +-- end +-- end +-- ); +-- +-- + +-- Set tex specific telescope extension +require("telescope").setup({ + extensions = { + bibtex = { + -- Depth for the *.bib file + depth = 1, + -- Path to global bibliographies (placed outside of the project) + global_files = {}, + -- Define the search keys to use in the picker + search_keys = { "author", "year", "title" }, + -- Template for the formatted citation + citation_format = "{{author}} ({{year}}), {{title}}.", + -- Only use initials for the authors first name + citation_trim_firstname = true, + -- Max number of authors to write in the formatted citation + -- following authors will be replaced by "et al." + citation_max_auth = 2, + -- Wrapping in the preview window is disabled by default + wrap = false, + -- Custom format for citation label + custom_formats = { + { id = "tex_autocite", cite_marker = "\\autocite{%s}" }, + }, + format = "tex_autocite", + -- Use context awareness + context = true, + -- Fallback to global/directory .bib files if context not found + -- This setting has no effect if context = false + context_fallback = true, + }, + }, +}) +require("telescope").load_extension("bibtex") +vim.keymap.set("n", "ib", function() + require("telescope").extensions.bibtex.bibtex() +end, { noremap = true, silent = true, desc = "list bibtex entries in telescope" }) diff --git a/modules/home/conf/nvim/mappings/default.nix b/modules/home/conf/nvim/mappings/default.nix new file mode 100644 index 00000000..2cb174a4 --- /dev/null +++ b/modules/home/conf/nvim/mappings/default.nix @@ -0,0 +1,286 @@ +{lib, ...}: { + programs.nixvim = { + globals = { + mapleader = " "; + maplocalleader = " "; + }; + keymaps = [ + { + mode = ["n" "i"]; + key = ""; + action = "noh"; + options.desc = "Disable the search highlighting and send Escape"; + } + { + key = "hh"; + mode = ["i"]; + action = '' + function() + local cmp = require('cmp'); + local luasnip = require('luasnip'); + + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_locally_jumpable() then + luasnip.expand_or_jump() + end + end + ''; + lua = true; + options.desc = "completion trigger/ forward in completen menu"; + } + { + key = "uu"; + mode = ["i"]; + action = '' + function() + local cmp = require('cmp'); + cmp.confirm() + end + ''; + lua = true; + options.desc = "confirm the selected item"; + } + + # FIXME: Add the below keymappings, when alacritty gets support for the kitty + # keyboard protocol <2023-08-29> + { + # "" + key = "ztn"; + action = "tabnext"; + options.desc = "cycle to the next tab"; + } + { + # "" + key = "ztp"; + action = "tabprevious"; + options.desc = "cycle to the previous tab"; + } + + # yank/ cut to the system clipboard + { + key = "y"; + action = "\"+y"; + options.desc = "yank to the system clipboard"; + } + { + key = "Y"; + action = "\"+Y"; + options.desc = "yank until the end of the line to the system clipboard"; + } + + # Unmap some old keys + #{key = "s"; action = "''";} + #{key = "t"; action = "''";} + { + key = ""; + action = ""; + } + { + key = ""; + action = ""; + } + { + key = ""; + action = ""; + } + { + key = ""; + action = ""; + } + + # Center the cursor vertically when moving to the next word during a search. + { + key = "l"; + action = "nzzzv"; + options.desc = "Center the cursor vertically when moving to the next word during a search."; + } + { + key = "L"; + action = "Nzzzv"; + options.desc = "Center the cursor vertically when moving to the next word during a search."; + } + # remap the other keys to dvorak + { + key = "k"; + action = "t"; + options.desc = "go the the right on char"; + } + { + key = "K"; + action = "T"; + options.desc = "go to the left on char"; + } + { + key = "j"; + action = "k"; + options.desc = "go to the right before the char"; + } + { + key = "J"; + action = "K"; + options.desc = "go to the left before the char"; + } + + # Change Vim-keys + { + key = "h"; + action = ""; + options.desc = "go left"; + } + { + key = "t"; + action = "g"; + options.desc = "go down, with displaylines"; + } + { + key = "n"; + action = "g"; + options.desc = "go up, with displaylines"; + } + { + key = "s"; + action = ""; + options.desc = "go right"; + } + + # Move display lines + { + key = "0"; + action = "g0"; + options.desc = "go to the leftmost character in the screen line"; + } + { + key = "$"; + action = "g$"; + options.desc = "go to the rightmost character in the screen line"; + } + { + mode = ["n"]; + key = ""; + action = "gf"; + options.desc = "open file/url under cursor"; + } + { + mode = ["n"]; + key = ""; + action = ":"; + options.desc = "jump to command line"; + } + + { + mode = ["n"]; + key = "\\f"; + action = "function() require('lf').start() end"; + lua = true; + options.desc = "open lf in a floating window"; + } + + # Splits + { + mode = ["n"]; + key = ""; + action = "p"; + options.desc = "go to previous split"; + } + { + mode = ["n"]; + key = ""; + action = "w"; + options.desc = "go to next split"; + } + { + mode = ["n"]; + key = "-"; + action = "s"; + options.desc = "New horizontal split"; + } + { + mode = ["n"]; + key = "|"; + action = "v"; + options.desc = "New vertical split"; + } + + { + mode = ["n"]; + key = "p"; + action = "\"_dP"; + options.desc = "keep the cut thing in the base register"; + } + { + mode = ["n"]; + key = "c"; + action = "\"_c"; + options.desc = "change without saving to register"; + } + + { + mode = ["n"]; + key = "d"; + action = "\"_d"; + options.desc = "delete without saving to register"; + } + { + key = "dd"; + mode = ["n"]; + action = '' + function() + if vim.api.nvim_get_current_line():match("^%s*$") then + return '"_dd' + else + return "dd" + end + end + ''; + lua = true; + options = { + desc = "Pipe all blank line deletions to the blackhole register"; + expr = true; + silent = true; + }; + } + + { + mode = ["n"]; + key = "s"; + action = ":%s/\\<\\>//gI"; + options.desc = "replace for the word under the cursor"; + } + + { + mode = ["n"]; + key = ""; + action = "mksession! "; + options.desc = "overwrite/create a session"; + } + + { + mode = ["n"]; + key = "X"; + action = "!!$SHELL "; + options.desc = "Read the current line and execute that line in your $SHELL. The resulting output will replace the curent line that was being executed."; + } + { + mode = ["t"]; + key = ""; + action = ""; + options.desc = "Exit terminal mode with "; + } + + # move selected lines in visual mode + { + mode = ["v"]; + key = "T"; + action = ":m '>+1gv=gv"; + options.desc = "move selected lines in visual mode down"; + } + { + mode = ["v"]; + key = "N"; + action = ":m '<-2gv=gv"; + options.desc = "move selected lines in visual mode up"; + } + ]; + }; +} diff --git a/modules/home/conf/nvim/options/default.nix b/modules/home/conf/nvim/options/default.nix new file mode 100644 index 00000000..d22bdd8f --- /dev/null +++ b/modules/home/conf/nvim/options/default.nix @@ -0,0 +1,105 @@ +{nixosConfig, ...}: { + programs.nixvim.opts = { + autoindent = true; # copy indent from previous line + cindent = true; # use c like indenting rules + breakindent = true; # continue indent visually + showbreak = "↳ "; # downwards arrow with tip rightwards(U+21B3, UTF-8: E2 86 B3) + breakindentopt = { + shift = 2; # wrapped line's beginning will be shifted by the given number of + }; + + incsearch = true; # show search results while typing + inccommand = "split"; # line preview of :s results + ignorecase = true; # ignore case when searching + smartcase = true; # if a capital letter is used in search, overwrite ignorecase + showmatch = true; # show matching words during a search. + hlsearch = true; # highlight when searching + + confirm = true; # confirm to save changes before closing modified buffer + colorcolumn = "+1"; # show a +1 before the 'textwidth' + completeopt = ["menuone" "noselect"]; # have a better completion experience + + # https://www.compart.com/en/unicode/U+XXXX (unicode character code) + # stylua: ignore + fillchars = { + fold = "·"; # MIDDLE DOT (U+00B7, UTF-8: C2 B7) + horiz = "━"; # BOX DRAWINGS HEAVY HORIZONTAL (U+2501, UTF-8: E2 94 81) + horizdown = "┳"; # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL (U+2533, UTF-8: E2 94 B3) + horizup = "┻"; # BOX DRAWINGS HEAVY UP AND HORIZONTAL (U+253B, UTF-8: E2 94 BB) + vert = "┃"; # BOX DRAWINGS HEAVY VERTICAL (U+2503, UTF-8: E2 94 83) + vertleft = "┫"; # BOX DRAWINGS HEAVY VERTICAL AND LEFT (U+252B, UTF-8: E2 94 AB) + vertright = "┣"; # BOX DRAWINGS HEAVY VERTICAL AND RIGHT (U+2523, UTF-8: E2 94 A3) + verthoriz = "╋"; # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL (U+254B, UTF-8: E2 95 8B) + }; + listchars = builtins.concatStringsSep "," [ + "nbsp:⦸" # CIRCLED REVERSE SOLIDUS (U+29B8, UTF-8: E2 A6 B8) + "tab:▷┅" # WHITE RIGHT-POINTING TRIANGLE (U+25B7, UTF-8: E2 96 B7) + "extends:»" # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (U+00BB, UTF-8: C2 BB) + "precedes:«" # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (U+00AB, UTF-8: C2 AB) + "trail:•" # BULLET (U+2022, UTF-8: E2 80 A2) + ]; + + # shell-like autocomplete to unambiguous portions + wildmode = builtins.concatStringsSep "," [ + "longest" + "list" + "full" + ]; + + grepformat = "%f:%l:%c:%m"; # the default format for rg in vimgrep mode + grepprg = "rg --vimgrep"; # use rg as grep implementation in `:grep` + + hidden = true; # allows you to hide buffers with unsaved changes without being prompted + + laststatus = 3; # use global statusline # TODO: + + list = true; # show whitespace + + mouse = ""; # disables the mouse + + number = true; # line numbers + relativenumber = true; # relative line numbers + + # vim.opt.shada:append {'%'}; -- store buffers in the shada file and reopen them if nvim has been started without file name argument + + shell = nixosConfig.users.users.soispha.shell.pname; # try to use default shell for the default user as a shell for ":!" + + spell = true; # activate spell checking + spelllang = "en_us,de_de"; # set spell languages + spelloptions = "camel"; # CamelCase check if both camel and case are correct words + + syntax = "ON"; # use syntax highlighting and let nvim figure out which + + shiftwidth = 0; # use tabstop setting as shiftwidth + tabstop = 4; # use 4 spaces in place of a tab + expandtab = true; # expand tabs to spaces + + showtabline = 2; # always show the tabline + + timeoutlen = 500; # wait 500 msec for the next char in an input sequence + ttyfast = true; # let vim know that I am using a fast term + + undofile = true; # use a undofile, to save the undos + undolevels = 10000; # keep nearly all undo things stored + + virtualedit = "block"; # allow the cursor to move beyond actual character in visual block mode + + textwidth = 90; # automatically hard wrap at 90 columns by default + + foldmethod = "marker"; # use markers to specify folds + + termguicolors = true; + cursorline = true; + # vim.opt.cursorcolumn = true; + + scrolloff = 999; # try to keep at least 999 lines above and below the cursor (this effectively keeps the screen centered) + + linebreak = true; # break to long lines, but do only break them at [[::space::]] + + showcmd = true; # show partial command, being typed + showmode = true; # show the mode (Visual, Insert, Command) + + wildmenu = true; # shell completion + wildignore = "*.docx,*.jpg,*.png,*.gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.xlsx"; # ignore binary files + }; +} diff --git a/modules/home/conf/nvim/plgs/colorscheme/default.nix b/modules/home/conf/nvim/plgs/colorscheme/default.nix new file mode 100644 index 00000000..11357f77 --- /dev/null +++ b/modules/home/conf/nvim/plgs/colorscheme/default.nix @@ -0,0 +1,17 @@ +{ + pkgs, + lib, + ... +}: { + programs.nixvim = { + # TODO: package nightfox though a module + extraConfigLuaPost = '' + ${lib.strings.fileContents ./lua/nightfox.lua} + ${lib.strings.fileContents ./lua/mk_todos_readable.lua} + ''; + colorscheme = "carbonfox"; + extraPlugins = [ + pkgs.vimPlugins.nightfox-nvim + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/colorscheme/lua/mk_todos_readable.lua b/modules/home/conf/nvim/plgs/colorscheme/lua/mk_todos_readable.lua new file mode 100644 index 00000000..d02171b5 --- /dev/null +++ b/modules/home/conf/nvim/plgs/colorscheme/lua/mk_todos_readable.lua @@ -0,0 +1,16 @@ +local opts = { bg = "NONE", bold = true } + +---@param hl_group string: The name of the hl group +---@param extra_opts table: Extra options to pass to nvim_set_hl +local set_hl = function(hl_group, extra_opts) + local local_opts = vim.deepcopy(opts) + for k, v in ipairs(extra_opts) do + local_opts[k] = v + end + vim.api.nvim_set_hl(0, hl_group, local_opts) +end + +set_hl("@text.danger", { fg = "red" }) +set_hl("@text.note", { fg = "blue" }) +set_hl("@text.todo", { fg = "green" }) +set_hl("@text.warning", { fg = "yellow" }) diff --git a/modules/home/conf/nvim/plgs/colorscheme/lua/nightfox.lua b/modules/home/conf/nvim/plgs/colorscheme/lua/nightfox.lua new file mode 100644 index 00000000..4c502153 --- /dev/null +++ b/modules/home/conf/nvim/plgs/colorscheme/lua/nightfox.lua @@ -0,0 +1,44 @@ +require("nightfox").setup({ + options = { + -- Compiled file's destination location + compile_path = vim.fn.stdpath("cache") .. "/nightfox", + compile_file_suffix = "_compiled", -- Compiled file suffix + transparent = true, -- Disable setting background + terminal_colors = true, -- Set terminal colors (vim.g.terminal_color_*) used in `:terminal` + dim_inactive = true, -- Non focused panes set to alternative background + module_default = true, -- Default enable value for modules + colorblind = { + enable = true, -- Enable colorblind support + simulate_only = false, -- Only show simulated colorblind colors and not diff shifted + severity = { + protan = 0.3, -- Severity [0,1] for protan (red) + deutan = 0.9, -- Severity [0,1] for deutan (green) + tritan = 0, -- Severity [0,1] for tritan (blue) + }, + }, + styles = { -- Style to be applied to different syntax groups + comments = "italic", -- Value is any valid attr-list value `:help attr-list` + conditionals = "NONE", + constants = "NONE", + functions = "bold", + keywords = "bold", + numbers = "NONE", + operators = "NONE", + strings = "NONE", + types = "NONE", + variables = "NONE", + }, + inverse = { -- Inverse highlight for different types + match_paren = false, + visual = false, + search = false, + }, + modules = { -- List of various plugins and additional options + diagnostic = { enable = true, background = false }, + native_lsp = { enable = true, background = false }, + }, + }, + palettes = {}, + specs = {}, + groups = {}, +}) diff --git a/modules/home/conf/nvim/plgs/comment-nvim/default.nix b/modules/home/conf/nvim/plgs/comment-nvim/default.nix new file mode 100644 index 00000000..2a73b8db --- /dev/null +++ b/modules/home/conf/nvim/plgs/comment-nvim/default.nix @@ -0,0 +1,41 @@ +{...}: { + programs.nixvim = { + plugins.comment = { + enable = true; + settings = { + padding = true; + sticky = true; + mappings = { + basic = false; + extra = false; + }; + }; + }; + keymaps = [ + { + key = "gcc"; + mode = "v"; + action = "(comment_toggle_linewise_visual)"; + options.desc = "toggle the current line in a linewise comment"; + } + { + key = "gbc"; + mode = "v"; + action = "(comment_toggle_blockwise_visual)"; + options.desc = "toggle the current line in a blockwise comment"; + } + { + key = "gcc"; + mode = "n"; + action = "(comment_toggle_linewise_current)"; + options.desc = "toggle the current line in a linewise comment"; + } + { + key = "gbc"; + mode = "n"; + action = "(comment_toggle_blockwise_current)"; + options.desc = "toggle the current line in a blockwise comment"; + } + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/debugprint/default.nix b/modules/home/conf/nvim/plgs/debugprint/default.nix new file mode 100644 index 00000000..b0d72339 --- /dev/null +++ b/modules/home/conf/nvim/plgs/debugprint/default.nix @@ -0,0 +1,74 @@ +{ + pkgs, + lib, + ... +}: { + programs.nixvim = { + # TODO: package debugprint though a module + extraConfigLuaPost = '' + ${lib.strings.fileContents ./lua/debugprint.lua} + ''; + extraPlugins = [ + pkgs.vimExtraPlugins.debugprint-nvim + ]; + + keymaps = [ + { + key = "g?v"; + mode = ["v" "n"]; + action = '' + function() + return require('debugprint').debugprint({variable = true;}); + end + ''; + lua = true; + options.expr = true; + options.desc = '' + 'variable' debug line below the current line + ''; + } + { + key = "g?V"; + mode = ["v" "n"]; + action = '' + function() + return require('debugprint').debugprint({above = true; variable = true;}) ; + end + ''; + lua = true; + options.expr = true; + options.desc = '' + 'variable' debug line above the current line + ''; + } + { + key = "g?p"; + mode = "n"; + action = '' + function() + return require('debugprint').debugprint(); + end + ''; + lua = true; + options.expr = true; + options.desc = '' + 'plain' debug line below the current line + ''; + } + { + key = "g?P"; + mode = "n"; + action = '' + function() + return require('debugprint').debugprint({above = true;}); + end + ''; + lua = true; + options.expr = true; + options.desc = '' + 'plain' debug line above the current line + ''; + } + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/debugprint/lua/debugprint.lua b/modules/home/conf/nvim/plgs/debugprint/lua/debugprint.lua new file mode 100644 index 00000000..da7e1735 --- /dev/null +++ b/modules/home/conf/nvim/plgs/debugprint/lua/debugprint.lua @@ -0,0 +1,3 @@ +require("debugprint").setup({ + create_keymaps = false, +}) diff --git a/modules/home/conf/nvim/plgs/default.nix b/modules/home/conf/nvim/plgs/default.nix new file mode 100644 index 00000000..991bc315 --- /dev/null +++ b/modules/home/conf/nvim/plgs/default.nix @@ -0,0 +1,33 @@ +{...}: { + imports = + [ + # Plugins not yet packaged in nixpkgs + # ./debugprint + ./lf-nvim + # ./lsp-progress-nvim + ] + ++ [ + # Already packaged in nixpkgs + ./colorscheme + ./comment-nvim + ./femaco + ./flatten-nvim + ./goto-preview + ./harpoon + ./leap + ./lsp + ./lspkind + ./ltex_extra + ./lualine + ./luasnip + ./neorg + ./nvim-cmp + ./nvim-lint + ./raw_plugins + ./telescope + ./todo-comments + ./treesitter + ./vim-tex + ./which-key + ]; +} diff --git a/modules/home/conf/nvim/plgs/femaco/default.nix b/modules/home/conf/nvim/plgs/femaco/default.nix new file mode 100644 index 00000000..0b4f7937 --- /dev/null +++ b/modules/home/conf/nvim/plgs/femaco/default.nix @@ -0,0 +1,24 @@ +{ + pkgs, + lib, + ... +}: { + programs.nixvim = { + # TODO: package femaco through a module + extraConfigLuaPost = '' + ${lib.strings.fileContents ./lua/femaco.lua} + ''; + extraPlugins = [ + pkgs.vimPlugins.nvim-FeMaco-lua + ]; + keymaps = [ + { + key = "cc"; + mode = "n"; + action = "require('femaco.edit').edit_code_block"; + lua = true; + options.desc = "edit a [c]ode blo[c]k with femaco"; + } + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/femaco/lua/femaco.lua b/modules/home/conf/nvim/plgs/femaco/lua/femaco.lua new file mode 100644 index 00000000..da3be8e1 --- /dev/null +++ b/modules/home/conf/nvim/plgs/femaco/lua/femaco.lua @@ -0,0 +1,50 @@ +local clip_val = require("femaco.utils").clip_val +require("femaco").setup({ + -- should prepare a new buffer and return the winid + -- by default opens a floating window + -- provide a different callback to change this behaviour + -- @param opts: the return value from float_opts + prepare_buffer = function(opts) + local buf = vim.api.nvim_create_buf(false, false) + return vim.api.nvim_open_win(buf, true, opts) + end, + -- should return options passed to nvim_open_win + -- @param code_block: data about the code-block with the keys + -- * range + -- * lines + -- * lang + float_opts = function(code_block) + return { + relative = "cursor", + width = clip_val(5, 120, vim.api.nvim_win_get_width(0) - 10), -- TODO: how to offset sign column etc? + height = clip_val(5, #code_block.lines, vim.api.nvim_win_get_height(0) - 6), + anchor = "NW", + row = 0, + col = 0, + style = "minimal", + border = "rounded", + zindex = 1, + } + end, + -- return filetype to use for a given lang + -- lang can be nil + ft_from_lang = function(lang) + return lang + end, + -- what to do after opening the float + post_open_float = function(winnr) + vim.wo.signcolumn = "no" + end, + -- create the path to a temporary file + create_tmp_filepath = function(filetype) + return os.tmpname() + end, + -- if a newline should always be used, useful for multiline injections + -- which separators needs to be on separate lines such as markdown, neorg etc + -- @param base_filetype: The filetype which FeMaco is called from, not the + -- filetype of the injected language (this is the current buffer so you can + -- get it from vim.bo.filetyp). + ensure_newline = function(base_filetype) + return false + end, +}) diff --git a/modules/home/conf/nvim/plgs/flatten-nvim/default.nix b/modules/home/conf/nvim/plgs/flatten-nvim/default.nix new file mode 100644 index 00000000..cd6f8bcc --- /dev/null +++ b/modules/home/conf/nvim/plgs/flatten-nvim/default.nix @@ -0,0 +1,20 @@ +{ + pkgs, + lib, + ... +}: { + programs.nixvim = { + # TODO: package flatten-nvim though a module + + extraConfigLuaPre = '' + ${lib.strings.fileContents ./lua/flatten-nvim.lua} + if os.getenv("NVIM") ~= nil then + -- Avoid loading plugins because the host will take control of the instance anyways + return + end + ''; + extraPlugins = [ + pkgs.vimPlugins.flatten-nvim + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/flatten-nvim/lua/flatten-nvim.lua b/modules/home/conf/nvim/plgs/flatten-nvim/lua/flatten-nvim.lua new file mode 100644 index 00000000..42ea1eb6 --- /dev/null +++ b/modules/home/conf/nvim/plgs/flatten-nvim/lua/flatten-nvim.lua @@ -0,0 +1,106 @@ +---Types: +-- +-- Passed to callbacks that handle opening files +---@alias BufInfo { fname: string, bufnr: buffer } +-- +-- Needed aliases +---@alias buffer integer: Buffer id +---@alias window integer: Window id +-- +-- The first argument is a list of BufInfo tables representing the newly opened files. +-- The third argument is a single BufInfo table, only provided when a buffer is created from stdin. +-- +-- IMPORTANT: For `block_for` to work, you need to return a buffer number OR a buffer number and a window number. +-- The `winnr` return value is not required, `vim.fn.bufwinid(bufnr)` is used if it is not provided. +-- The `filetype` of this buffer will determine whether block should happen or not. +-- +---@alias OpenHandler fun(files: BufInfo[], argv: string[], stdin_buf: BufInfo, guest_cwd: string):window, buffer +-- +require("flatten").setup({ + callbacks = { + ---Called to determine if a nested session should wait for the host to close the file. + ---param argv: a list of all the arguments in the nested session + ---@type fun(argv: table): boolean + should_block = require("flatten").default_should_block, + + ---If this returns true, the nested session will be opened. + ---If false, default behavior is used, and + ---config.nest_if_no_args is respected. + ---@type fun(host: channel):boolean + should_nest = require("flatten").default_should_nest, + + ---Called before a nested session is opened. + pre_open = function() end, + + ---Called after a nested session is opened. + ---@param bufnr buffer + ---@param winnr window + ---@param filetype string + ---@param is_blocking boolean + ---@param is_diff boolean + post_open = function(bufnr, winnr, filetype, is_blocking, is_diff) + -- If the file is a git commit, create one-shot autocmd to delete its buffer on write + if filetype == "gitcommit" or filetype == "gitrebase" then + vim.api.nvim_create_autocmd("BufWritePost", { + buffer = bufnr, + once = true, + callback = vim.schedule_wrap(function() + vim.api.nvim_buf_delete(bufnr, {}) + end), + }) + end + end, + + ---Called when a nested session is done waiting for the host. + ---@param filetype string + block_end = function(filetype) end, + }, + -- dictionary of filetypes that should be blocking + block_for = { + gitcommit = true, + }, + -- Command passthrough + allow_cmd_passthrough = true, + -- Allow a nested session to open if Neovim is opened without arguments + nest_if_no_args = false, + -- Window options + window = { + -- Options: + -- current -> open in current window (default) + -- alternate -> open in alternate window (recommended) + -- tab -> open in new tab + -- split -> open in split + -- vsplit -> open in vsplit + -- smart -> smart open (avoids special buffers) + -- OpenHandler -> allows you to handle file opening yourself (see Types) + -- + -- TODO: Open gitcommit filetypes in the current buffer, everything else in a new tab <2023-08-29> + open = "split", + + -- Options: + -- vsplit -> opens files in diff vsplits + -- split -> opens files in diff splits + -- tab_vsplit -> creates a new tabpage, and opens diff vsplits + -- tab_split -> creates a new tabpage, and opens diff splits + -- OpenHandler -> allows you to handle file opening yourself (see Types) + diff = "tab_vsplit", + + -- Affects which file gets focused when opening multiple at once + -- Options: + -- "first" -> open first file of new files (default) + -- "last" -> open last file of new files + focus = "first", + }, + -- Override this function to use a different socket to connect to the host + -- On the host side this can return nil or the socket address. + -- On the guest side this should return the socket address + -- or a non-zero channel id from `sockconnect` + -- flatten.nvim will detect if the address refers to this instance of nvim, to determine if this is a host or a guest + pipe_path = require("flatten").default_pipe_path, + -- The `default_pipe_path` will treat the first nvim instance within a single kitty/wezterm session as the host + -- You can configure this behaviour using the following: + one_per = { + kitty = true, -- Flatten all instance in the current Kitty session + wezterm = true, -- Flatten all instance in the current Wezterm session + }, +}) diff --git a/modules/home/conf/nvim/plgs/goto-preview/default.nix b/modules/home/conf/nvim/plgs/goto-preview/default.nix new file mode 100644 index 00000000..13a26212 --- /dev/null +++ b/modules/home/conf/nvim/plgs/goto-preview/default.nix @@ -0,0 +1,52 @@ +{ + pkgs, + lib, + ... +}: { + programs.nixvim = { + # TODO: package goto-preview though a module + extraConfigLuaPost = '' + ${lib.strings.fileContents ./lua/goto-preview.lua} + ''; + extraPlugins = [ + pkgs.vimPlugins.goto-preview + ]; + keymaps = [ + { + key = "gd"; + mode = "n"; + action = "require('goto-preview').goto_preview_definition"; + lua = true; + options.desc = "[G]oto [D]efinition"; + } + { + key = "gtd"; + mode = "n"; + action = "require('goto-preview').goto_preview_type_definition"; + lua = true; + options.desc = "[G]oto the [t]ype [D]efinition"; + } + { + key = "gi"; + mode = "n"; + action = "require('goto-preview').goto_preview_implementation"; + lua = true; + options.desc = "[G]oto [I]mplementations"; + } + { + key = "gr"; + mode = "n"; + action = "require('goto-preview').goto_preview_references"; + lua = true; + options.desc = "[G]o to all [R]eferences of the symbol"; + } + { + key = "\\"; + mode = "n"; + action = "require('goto-preview').close_all_win"; + lua = true; + options.desc = "close all preview windows"; + } + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/goto-preview/lua/goto-preview.lua b/modules/home/conf/nvim/plgs/goto-preview/lua/goto-preview.lua new file mode 100644 index 00000000..9687a5a0 --- /dev/null +++ b/modules/home/conf/nvim/plgs/goto-preview/lua/goto-preview.lua @@ -0,0 +1,21 @@ +require("goto-preview").setup({ + width = 120, -- Width of the floating window + height = 15, -- Height of the floating window + border = { "↖", "─", "┐", "│", "┘", "─", "└", "│" }, -- Border characters of the floating window + default_mappings = false, -- Bind default mappings + debug = false, -- Print debug information + opacity = nil, -- 0-100 opacity level of the floating window where 100 is fully transparent. + resizing_mappings = false, -- Binds arrow keys to resizing the floating window. + post_open_hook = nil, -- A function taking two arguments, a buffer and a window to be ran as a hook. + post_close_hook = nil, -- A function taking two arguments, a buffer and a window to be ran as a hook. + references = { -- Configure the telescope UI for slowing the references cycling window. + telescope = {}, -- require("telescope.themes").get_dropdown({ hide_preview = false }) + }, + -- These two configs can also be passed down to the goto-preview definition and implementation calls for one off "peak" functionality. + focus_on_open = true, -- Focus the floating window when opening it. + dismiss_on_move = false, -- Dismiss the floating window when moving the cursor. + force_close = true, -- passed into vim.api.nvim_win_close's second argument. See :h nvim_win_close + bufhidden = "wipe", -- the bufhidden option to set on the floating window. See :h bufhidden + stack_floating_preview_windows = true, -- Whether to nest floating windows + preview_window_title = { enable = true, position = "left" }, -- Whether to set the preview window title as the filename +}) diff --git a/modules/home/conf/nvim/plgs/harpoon/default.nix b/modules/home/conf/nvim/plgs/harpoon/default.nix new file mode 100644 index 00000000..b1421dab --- /dev/null +++ b/modules/home/conf/nvim/plgs/harpoon/default.nix @@ -0,0 +1,100 @@ +{pkgs, ...}: let + numbers = ["0" "1" "2" "3" "4" "5" "6" "7" "8" "9"]; + mkNumberedCommand = { + command_template, + prefix, + number, + desc_template, + }: { + key = "${prefix}${number}"; + action = '' + function() + ${command_template number} + end + ''; + lua = true; + options.desc = "${desc_template number}"; + }; + mkGotoTerminalCommand = number: let + desc_template = number: "Goto terminal number ${number}"; + command_template = number: ''require("harpoon.term").gotoTerminal(${number})''; + prefix = "gt"; + in + mkNumberedCommand {inherit desc_template command_template prefix number;}; + mkGotoFileCommand = number: let + desc_template = number: "Goto Buffer number ${number}"; + command_template = number: ''require("harpoon.ui").nav_file(${number})''; + prefix = "gf"; + in + mkNumberedCommand {inherit desc_template command_template prefix number;}; + + gotoTerminalMappings = builtins.map mkGotoTerminalCommand numbers; + gotoFileMappings = builtins.map mkGotoFileCommand numbers; +in { + programs.nixvim = { + plugins.harpoon = { + enable = true; + package = pkgs.vimExtraPlugins.harpoon; + enableTelescope = true; + # menu.width = "vim.api.nvim_win_get_width(0) - 4"; # TODO: integrate that + keymaps = { + tmuxGotoTerminal = null; # TODO: + }; + }; + keymaps = + [ + { + key = "-"; + action = '' + function() + require("harpoon.ui").nav_next() + end + ''; + lua = true; + options.desc = "go to the next marked file"; + } + { + key = "_"; + action = '' + function() + require("harpoon.ui").nav_prev() + end + ''; + lua = true; + options.desc = "go to the previous marked file"; + } + { + key = ""; + action = '' + function() + require("harpoon.mark").add_file() + end + ''; + lua = true; + options.desc = "add a mark to the open file in harpoon."; + } + { + key = "gqc"; + action = '' + function() + require("harpoon.cmd-ui").toggle_quick_menu() + end + ''; + lua = true; + options.desc = "toggle the harpoon command quick menu to see all commands."; + } + { + key = "q"; + action = '' + function() + require("harpoon.ui").toggle_quick_menu() + end + ''; + lua = true; + options.desc = "toggle the harpoon normal quick menu to see all marks."; + } + ] + ++ gotoFileMappings + ++ gotoTerminalMappings; + }; +} diff --git a/modules/home/conf/nvim/plgs/leap/default.nix b/modules/home/conf/nvim/plgs/leap/default.nix new file mode 100644 index 00000000..4e7ae60c --- /dev/null +++ b/modules/home/conf/nvim/plgs/leap/default.nix @@ -0,0 +1,59 @@ +{...}: { + programs.nixvim = { + plugins.leap = { + enable = true; + addDefaultMappings = false; # They don't work with dvorak. + safeLabels = [ + "f" + "j" + "k" + "l" + "/" + "z" + "S" + "F" + "J" + "K" + "L" + "H" + "W" + "E" + "M" + "B" + "U" + "X" + "?" + "Z" + ]; + }; + keymaps = [ + { + key = "j"; + action = "(leap-forward-to)"; + options.desc = "jump forward to"; + } + { + key = "J"; + action = "(leap-backward-to)"; + options.desc = "jump backward to"; + } + { + key = "gj"; + action = "(leap-from-window)"; + options.desc = "jump to enterable windows"; + } + /* + {key= "x"; + mode = "v"; + action = "(leap-forward-till)"; + options.desc = "leap forward till"; + } + {key= "X"; + mode = "v"; + action = "(leap-backward-till)"; + options.desc = "leap backward till"; + } + */ + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/lf-nvim/default.nix b/modules/home/conf/nvim/plgs/lf-nvim/default.nix new file mode 100644 index 00000000..11ad2807 --- /dev/null +++ b/modules/home/conf/nvim/plgs/lf-nvim/default.nix @@ -0,0 +1,18 @@ +{ + pkgs, + lib, + ... +}: { + programs.nixvim = { + # TODO: package lf-nvim though a module + # FIXME: change the nvim path, when I change the path with lf + extraConfigLuaPost = '' + ${lib.strings.fileContents ./lua/lf-nvim.lua} + ''; + extraPlugins = [ + pkgs.vimExtraPlugins.lf-nvim + + pkgs.vimPlugins.toggleterm-nvim # required by lf-nvim + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/lf-nvim/lua/lf-nvim.lua b/modules/home/conf/nvim/plgs/lf-nvim/lua/lf-nvim.lua new file mode 100644 index 00000000..1eadf375 --- /dev/null +++ b/modules/home/conf/nvim/plgs/lf-nvim/lua/lf-nvim.lua @@ -0,0 +1,43 @@ +local fn = vim.fn + +-- Defaults +require("lf").setup({ + default_action = "drop", -- default action when `Lf` opens a file + -- TODO: what do these mappings do? + default_actions = { -- default action keybindings + [""] = "tabedit", + [""] = "split", + [""] = "vsplit", + [""] = "tab drop", + }, + + winblend = 10, -- psuedotransparency level + dir = "", -- directory where `lf` starts ('gwd' is git-working-directory, ""/nil is CWD) + direction = "float", -- window type: float horizontal vertical + border = "rounded", -- border kind: single double shadow curved + height = fn.float2nr(fn.round(0.75 * vim.o.lines)), -- height of the *floating* window + width = fn.float2nr(fn.round(0.75 * vim.o.columns)), -- width of the *floating* window + escape_quit = true, -- map escape to the quit command (so it doesn't go into a meta normal mode) + focus_on_open = true, -- focus the current file when opening Lf (experimental) + mappings = true, -- whether terminal buffer mapping is enabled + tmux = false, -- tmux statusline can be disabled on opening of Lf + default_file_manager = true, -- make lf default file manager + disable_netrw_warning = true, -- don't display a message when opening a directory with `default_file_manager` as true + highlights = { -- highlights passed to toggleterm + Normal = { link = "Normal" }, + NormalFloat = { link = "Normal" }, + FloatBorder = { guifg = "#cdcbe0", guibg = "#191726" }, + }, + + -- Layout configurations + layout_mapping = "", -- resize window with this key + views = { -- window dimensions to rotate through + { width = 0.800, height = 0.800 }, + { width = 0.600, height = 0.600 }, + { width = 0.950, height = 0.950 }, + { width = 0.500, height = 0.500, col = 0, row = 0 }, + { width = 0.500, height = 0.500, col = 0, row = 0.5 }, + { width = 0.500, height = 0.500, col = 0.5, row = 0 }, + { width = 0.500, height = 0.500, col = 0.5, row = 0.5 }, + }, +}) diff --git a/modules/home/conf/nvim/plgs/lsp-progress-nvim/default.nix b/modules/home/conf/nvim/plgs/lsp-progress-nvim/default.nix new file mode 100644 index 00000000..6602ceb6 --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp-progress-nvim/default.nix @@ -0,0 +1,50 @@ +{ + lib, + pkgs, + ... +}: { + programs.nixvim = { + # TODO: package lsp-progress-nvim though a module + extraConfigLuaPost = '' + ${lib.strings.fileContents ./lua/lsp-progress-nvim.lua} + ''; + extraPlugins = [ + pkgs.vimExtraPlugins.lsp-progress-nvim + ]; + + # Status line setup + autoGroups.lsp_refresh.clear = true; + autoCmd = [ + { + event = ["User LspProgressStatusUpdated"]; + pattern = ["*"]; + callback = + /* + lua + */ + { + __raw = '' + require("lualine").refresh + ''; + }; + group = "lsp_refresh"; + description = "Refresh the statusbar when the lsp status was updated."; + } + ]; + plugins.lualine = let + get_lsp_progress = { + __raw = + /* + lua + */ + '' + require('lsp-progress').progress + ''; + }; + in { + sections = { + lualine_c = [{name = get_lsp_progress;}]; + }; + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/lsp-progress-nvim/lua/lsp-progress-nvim.lua b/modules/home/conf/nvim/plgs/lsp-progress-nvim/lua/lsp-progress-nvim.lua new file mode 100644 index 00000000..efb15720 --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp-progress-nvim/lua/lsp-progress-nvim.lua @@ -0,0 +1,150 @@ +--- @type table +require("lsp-progress").setup({ + -- Spinning icons. + -- + --- @type string[] + spinner = { "⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷" }, + + -- Spinning update time in milliseconds. + -- + --- @type integer + spin_update_time = 200, + + -- Last message cached decay time in milliseconds. + -- + -- Message could be really fast(appear and disappear in an + -- instant) that user cannot even see it, thus we cache the last message + -- for a while for user view. + -- + --- @type integer + decay = 700, + + -- User event name. + -- + --- @type string + event = "LspProgressStatusUpdated", + + -- Event update time limit in milliseconds. + -- + -- Sometimes progress handler could emit many events in an instant, while + -- refreshing statusline cause too heavy synchronized IO, so we limit the + -- event rate to reduce this cost. + -- + --- @type integer + event_update_time_limit = 100, + + -- Max progress string length, by default -1 is unlimited. + -- + --- @type integer + max_size = -1, + + -- Regular internal update time. + -- + -- Emit user event to update the lsp progress status, even there's no new + -- message. + -- + --- @type integer + regular_internal_update_time = 500, + + -- Disable emitting events on specific mode/filetype. + -- User events would interrupt insert mode, thus break which-key like plugins behaviour. + -- See: + -- * https://github.com/linrongbin16/lsp-progress.nvim/issues/50 + -- * https://neovim.io/doc/user/builtin.html#mode() + -- + --- @type table[] + disable_events_opts = { { mode = "i", filetype = "TelescopePrompt" } }, + + -- Format series message. + -- + -- By default it looks like: `formatting isort (100%) - done`. + -- + --- @param title string|nil + --- Message title. + --- @param message string|nil + --- Message body. + --- @param percentage number|nil + --- Progress in percentage numbers: 0-100. + --- @param done boolean + --- Indicate whether this series is the last one in progress. + --- @return string|nil messages + --- The returned value will be passed to function `client_format` as + --- one of the `series_messages` array, or ignored if return nil. + series_format = function(title, message, percentage, done) + local builder = {} + local has_title = false + local has_message = false + if title and title ~= "" then + table.insert(builder, title) + has_title = true + end + if message and message ~= "" then + table.insert(builder, message) + has_message = true + end + if percentage and (has_title or has_message) then + table.insert(builder, string.format("(%.0f%%%%)", percentage)) + end + if done and (has_title or has_message) then + table.insert(builder, "- done") + end + return table.concat(builder, " ") + end, + + -- Format client message. + -- + -- By default it looks like: + -- `[null-ls] ⣷ formatting isort (100%) - done, formatting black (50%)`. + -- + --- @param client_name string + --- Client name. + --- @param spinner string + --- Spinner icon. + --- @param series_messages string[]|table[] + --- Messages array. + --- @return string|nil messages + --- The returned value will be passed to function `format` as one of the + --- `client_messages` array, or ignored if return nil. + client_format = function(client_name, spinner, series_messages) + return #series_messages > 0 + and ("[" .. client_name .. "] " .. spinner .. " " .. table.concat(series_messages, ", ")) + or nil + end, + + -- Format (final) message. + -- + -- By default it looks like: + -- ` LSP [null-ls] ⣷ formatting isort (100%) - done, formatting black (50%)` + -- + --- @param client_messages string[]|table[] + --- Client messages array. + --- @return nil|string message + --- The returned value will be returned from `progress` API. + format = function(client_messages) + local sign = " LSP" -- nf-fa-gear \uf013 + return #client_messages > 0 and (sign .. " " .. table.concat(client_messages, " ")) or sign + end, + + -- Enable debug. + -- + --- @type boolean + debug = false, + + -- Print log to console(command line). + -- + --- @type boolean + console_log = false, + + -- Print log to file. + -- + --- @type boolean + file_log = true, + + -- Log file to write, work with `file_log=true`. + -- + -- For Windows: `$env:USERPROFILE\AppData\Local\nvim-data\lsp-progress.log`. + -- For *NIX: `~/.local/share/nvim/lsp-progress.log`. + -- + --- @type string + file_log_name = "lsp-progress.log", +}) diff --git a/modules/home/conf/nvim/plgs/lsp/default.nix b/modules/home/conf/nvim/plgs/lsp/default.nix new file mode 100644 index 00000000..b7c1e174 --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/default.nix @@ -0,0 +1,29 @@ +{...}: { + imports = [ + ./keymaps + ./servers + ]; + programs.nixvim.plugins.lsp = { + enable = true; + onAttach = + "" + # + '' + # function(client, bufnr) + # -- Enable completion triggered by + # -- vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + # end + # '' + ; + preConfig = '' + vim.diagnostic.config({ + underline = true, + -- virtual_text = true, + virtual_text = { + source = "always", -- Or "if_many" + }, + update_in_insert = true, + severity_sort = true, + }, nil); + ''; + }; +} diff --git a/modules/home/conf/nvim/plgs/lsp/keymaps/default.nix b/modules/home/conf/nvim/plgs/lsp/keymaps/default.nix new file mode 100644 index 00000000..e176461e --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/keymaps/default.nix @@ -0,0 +1,72 @@ +{...}: { + programs.nixvim = { + plugins.lsp.keymaps = { + diagnostic = { + "N" = { + action = "goto_prev"; + desc = "go to previous diagnostic message"; + }; + "T" = { + action = "goto_next"; + desc = "go to next diagnostic message"; + }; + "e" = { + action = "open_float"; + desc = "open float for the symbol"; + }; + "gq" = { + action = "setloclist"; + desc = "add buffer diagnostic to the location list (quick-fix)"; + }; + }; + lspBuf = { + "gD" = { + action = "declaration"; + desc = "[G]o to [d]eclaration"; + }; + "hi" = { + action = "hover"; + desc = "Display [h]over [i]nformation"; + }; + "sh" = { + action = "signature_help"; + desc = "Display [s]ignature [h]elp"; + }; + "wa" = { + action = "add_workspace_folder"; + desc = "[W]orkspace folder [a]dd"; + }; + "wr" = { + action = "remove_workspace_folder"; + desc = "[W]orkspace folder [r]emove"; + }; + "rn" = { + action = "rename"; + desc = "[R]e[n]ame the item under the cursor"; + }; + "ca" = { + action = "code_action"; + desc = "Open the [c]ode [a]ction menu"; + }; + }; + }; + keymaps = [ + { + key = "f"; + action = "function() vim.lsp.buf.format { async = true } end"; + lua = true; + options.desc = "[F]ormat the current buffer (asynchronously)"; + } + { + key = "wl"; + action = '' + function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end + ''; + lua = true; + options.desc = "[W]orkspace folders [l]ist"; + } + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/lsp/servers/default.nix b/modules/home/conf/nvim/plgs/lsp/servers/default.nix new file mode 100644 index 00000000..1f59ae4e --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/servers/default.nix @@ -0,0 +1,15 @@ +{...}: { + imports = [ + # ./servers/pylyzer.nix + ./servers/bashls.nix + ./servers/ccls.nix + ./servers/quick-lint-js.nix + ./servers/ltex.nix + ./servers/lua-ls.nix + ./servers/nil_ls.nix + ./servers/openscad.nix + ./servers/ruff-lsp.nix + ./servers/rust-analyzer.nix + ./servers/texlab.nix + ]; +} diff --git a/modules/home/conf/nvim/plgs/lsp/servers/servers/bashls.nix b/modules/home/conf/nvim/plgs/lsp/servers/servers/bashls.nix new file mode 100644 index 00000000..0577a335 --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/servers/servers/bashls.nix @@ -0,0 +1,5 @@ +{...}: { + programs.nixvim.plugins.lsp.servers = { + bashls.enable = true; + }; +} diff --git a/modules/home/conf/nvim/plgs/lsp/servers/servers/ccls.nix b/modules/home/conf/nvim/plgs/lsp/servers/servers/ccls.nix new file mode 100644 index 00000000..0698bcce --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/servers/servers/ccls.nix @@ -0,0 +1,5 @@ +{...}: { + programs.nixvim.plugins.lsp.servers = { + ccls.enable = true; + }; +} diff --git a/modules/home/conf/nvim/plgs/lsp/servers/servers/ltex.nix b/modules/home/conf/nvim/plgs/lsp/servers/servers/ltex.nix new file mode 100644 index 00000000..3224bc41 --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/servers/servers/ltex.nix @@ -0,0 +1,39 @@ +{...}: { + programs.nixvim.plugins.lsp.servers = { + ltex = let + filetypes = [ + "java" + "cpp" + "shell" + "bash" + + "bibtex" + "context" + "context.tex" + "latex" + "tex" + + "markdown" + "org" + "restructuredtext" + "rsweave" + + "git-commit" + "gitcommit" + + "mail" + ]; + in { + enable = true; + inherit filetypes; + settings = { + enabled = filetypes; + completionEnabled = false; + language = "en-CA"; + additionalRules = { + enablePickyRules = true; + }; + }; + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/lsp/servers/servers/lua-ls.nix b/modules/home/conf/nvim/plgs/lsp/servers/servers/lua-ls.nix new file mode 100644 index 00000000..5a44b500 --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/servers/servers/lua-ls.nix @@ -0,0 +1,8 @@ +{...}: { + programs.nixvim.plugins.lsp.servers = { + lua-ls = { + enable = true; + settings.telemetry.enable = false; + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/lsp/servers/servers/nil_ls.nix b/modules/home/conf/nvim/plgs/lsp/servers/servers/nil_ls.nix new file mode 100644 index 00000000..f0cccbdc --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/servers/servers/nil_ls.nix @@ -0,0 +1,10 @@ +{...}: { + programs.nixvim.plugins.lsp.servers = { + nil_ls = { + enable = true; + settings = { + formatting.command = ["alejandra"]; + }; + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/lsp/servers/servers/openscad.nix b/modules/home/conf/nvim/plgs/lsp/servers/servers/openscad.nix new file mode 100644 index 00000000..a0221cc4 --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/servers/servers/openscad.nix @@ -0,0 +1,17 @@ +{pkgs, ...}: { + programs.nixvim = { + extraConfigLuaPost = + /* + lua + */ + '' + require('lspconfig').openscad_lsp.setup{ + cmd = {"openscad-lsp", "--stdio", "--fmt-style", "WebKit"}, + } + ''; + extraPackages = with pkgs; [ + openscad-lsp + clang-tools # Need to satisfy `clang-format` (which is used by openscad-lsp) + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/lsp/servers/servers/pylyzer.nix b/modules/home/conf/nvim/plgs/lsp/servers/servers/pylyzer.nix new file mode 100644 index 00000000..b1042221 --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/servers/servers/pylyzer.nix @@ -0,0 +1,12 @@ +{pkgs, ...}: { + programs.nixvim = { + extraConfigLuaPost = + /* + lua + */ + '' + require('lspconfig').pylyzer.setup{} + ''; + extraPackages = with pkgs; [pylyzer]; + }; +} diff --git a/modules/home/conf/nvim/plgs/lsp/servers/servers/quick-lint-js.nix b/modules/home/conf/nvim/plgs/lsp/servers/servers/quick-lint-js.nix new file mode 100644 index 00000000..23c3054a --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/servers/servers/quick-lint-js.nix @@ -0,0 +1,15 @@ +{pkgs, ...}: { + programs.nixvim = { + extraConfigLuaPost = + /* + lua + */ + '' + require('lspconfig').quick_lint_js.setup{ + } + ''; + extraPackages = with pkgs; [ + quick-lint-js + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/lsp/servers/servers/ruff-lsp.nix b/modules/home/conf/nvim/plgs/lsp/servers/servers/ruff-lsp.nix new file mode 100644 index 00000000..3eeb495a --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/servers/servers/ruff-lsp.nix @@ -0,0 +1,10 @@ +{pkgs, ...}: { + programs.nixvim = { + plugins.lsp.servers = { + ruff-lsp = { + enable = true; + }; + }; + extraPackages = with pkgs; [ruff]; + }; +} diff --git a/modules/home/conf/nvim/plgs/lsp/servers/servers/rust-analyzer.nix b/modules/home/conf/nvim/plgs/lsp/servers/servers/rust-analyzer.nix new file mode 100644 index 00000000..d58c8f1b --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/servers/servers/rust-analyzer.nix @@ -0,0 +1,14 @@ +{...}: { + programs.nixvim.plugins.lsp.servers = { + rust-analyzer = { + enable = true; + settings = { + typing.autoClosingAngleBrackets.enable = true; + }; + # NOTE: These should be provided by the devenv, to support nightly and + # such things <2023-11-25> + installCargo = false; + installRustc = false; + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/lsp/servers/servers/texlab.nix b/modules/home/conf/nvim/plgs/lsp/servers/servers/texlab.nix new file mode 100644 index 00000000..59af8d39 --- /dev/null +++ b/modules/home/conf/nvim/plgs/lsp/servers/servers/texlab.nix @@ -0,0 +1,7 @@ +{...}: { + programs.nixvim.plugins.lsp.servers = { + texlab = { + enable = true; + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/lspkind/default.nix b/modules/home/conf/nvim/plgs/lspkind/default.nix new file mode 100644 index 00000000..ed7d411b --- /dev/null +++ b/modules/home/conf/nvim/plgs/lspkind/default.nix @@ -0,0 +1,6 @@ +{...}: { + programs.nixvim.plugins.lspkind = { + enable = true; + preset = "default"; # "codicons" is only for a font patched with vscode-codeicons. + }; +} diff --git a/modules/home/conf/nvim/plgs/ltex_extra/default.nix b/modules/home/conf/nvim/plgs/ltex_extra/default.nix new file mode 100644 index 00000000..af78c7a5 --- /dev/null +++ b/modules/home/conf/nvim/plgs/ltex_extra/default.nix @@ -0,0 +1,9 @@ +{pkgs, ...}: { + programs.nixvim = { + # TODO: package ltex_extra though a module + extraPlugins = [ + pkgs.vimPlugins.ltex_extra-nvim + ]; + plugins.lsp.servers.ltex.onAttach.function = builtins.readFile ./lua/ltex_extra.lua; + }; +} diff --git a/modules/home/conf/nvim/plgs/ltex_extra/lua/ltex_extra.lua b/modules/home/conf/nvim/plgs/ltex_extra/lua/ltex_extra.lua new file mode 100644 index 00000000..f55a9ba7 --- /dev/null +++ b/modules/home/conf/nvim/plgs/ltex_extra/lua/ltex_extra.lua @@ -0,0 +1,16 @@ +require("ltex_extra").setup({ + -- table : languages for witch dictionaries will be loaded, e.g. { "es-AR", "en-US" } + -- https://valentjn.github.io/ltex/supported-languages.html#natural-languages + load_langs = { "en-CA", "de-DE" }, -- en-US as default + -- boolean : whether to load dictionaries on startup + init_check = true, + -- string : relative or absolute path to store dictionaries + -- e.g. subfolder in the project root or the current working directory: ".ltex" + -- e.g. shared files for all projects: vim.fn.expand("~") .. "/.local/share/ltex" + path = vim.fn.expand("~") .. "/.local/state/nvim/ltex", -- project root or current working directory + -- string : "none", "trace", "debug", "info", "warn", "error", "fatal" + log_level = "warn", + -- table : configurations of the ltex language server. + -- Only if you are calling the server from ltex_extra + server_opts = nil, +}) diff --git a/modules/home/conf/nvim/plgs/lualine/default.nix b/modules/home/conf/nvim/plgs/lualine/default.nix new file mode 100644 index 00000000..0b789558 --- /dev/null +++ b/modules/home/conf/nvim/plgs/lualine/default.nix @@ -0,0 +1,114 @@ +{...}: { + programs.nixvim.plugins.lualine = let + get_location_of_file = { + __raw = '' + function() + local file_lines = vim.fn.line('$'); + local file_current_cursor_positon = vim.fn.getcurpos(); + return file_current_cursor_positon[3] .. ":" .. file_current_cursor_positon[2] .. "/" .. file_lines + end + ''; + }; + + get_trailing_whitespace = { + __raw = '' + function() + local space = vim.fn.search([[\s\+$]], 'nwc') + return space ~= 0 and "TW:" .. space or "" + end + ''; + }; + get_mixed_indent = { + __raw = + /* + lua + */ + '' + function() + local space_pat = [[\v^ +]] + local tab_pat = [[\v^\t+]] + local space_indent = vim.fn.search(space_pat, 'nwc') + local tab_indent = vim.fn.search(tab_pat, 'nwc') + local mixed = (space_indent > 0 and tab_indent > 0) + local mixed_same_line + if not mixed then + mixed_same_line = vim.fn.search([[\v^(\t+ | +\t)]], 'nwc') + mixed = mixed_same_line > 0 + end + if not mixed then return "" end + if mixed_same_line ~= nil and mixed_same_line > 0 then + return 'MI:' .. mixed_same_line + end + local space_indent_cnt = vim.fn.searchcount({ pattern = space_pat, max_count = 1e3 }).total + local tab_indent_cnt = vim.fn.searchcount({ pattern = tab_pat, max_count = 1e3 }).total + if space_indent_cnt > tab_indent_cnt then + return 'MI:' .. tab_indent + else + return 'MI:' .. space_indent + end + end + ''; + }; + in { + enable = true; + iconsEnabled = true; + theme = "nightfox"; + componentSeparators = { + left = ""; + right = ""; + }; + sectionSeparators = { + left = ""; + right = ""; + }; + disabledFiletypes = { + statusline = []; + winbar = []; + }; + ignoreFocus = []; + alwaysDivideMiddle = true; + globalstatus = false; + refresh = { + statusline = 1000; + tabline = 1000; + winbar = 1000; + }; + sections = { + lualine_a = ["mode"]; + lualine_b = [ + { + name = "FugitiveHead"; + icon = ""; + } + "diff" + "diagnostics" + ]; + lualine_c = ["filename"]; + lualine_x = ["searchcount" "filetype"]; + lualine_y = [ + "encoding" + "fileformat" + {name = get_mixed_indent;} + {name = get_trailing_whitespace;} + ]; + lualine_z = [{name = get_location_of_file;}]; + }; + inactiveSections = { + lualine_a = []; + lualine_b = []; + lualine_c = ["filename"]; + lualine_x = [{name = get_location_of_file;}]; + lualine_y = []; + lualine_z = []; + }; + tabline = {}; + winbar = {}; + inactiveWinbar = {}; + + # TODO: add all installed and supported extensions here + extensions = [ + "toggleterm" + #"fugitive" # TODO: maybe add this? + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/luasnip/default.nix b/modules/home/conf/nvim/plgs/luasnip/default.nix new file mode 100644 index 00000000..130fafee --- /dev/null +++ b/modules/home/conf/nvim/plgs/luasnip/default.nix @@ -0,0 +1,20 @@ +{ + lib, + pkgs, + ... +}: { + programs.nixvim = { + plugins.luasnip = { + enable = true; + }; + extraConfigLuaPost = '' + ${lib.strings.fileContents ./lua/luasnip.lua}; + require("luasnip.loaders.from_lua").load({paths = "${./lua/snippets}"}); + require("luasnip.loaders.from_lua").lazy_load({paths = "${./lua/snippets}"}); + ''; + extraPlugins = [ + # needed for the todo-comments snippets + pkgs.vimPlugins.comment-nvim + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/luasnip/lua/luasnip.lua b/modules/home/conf/nvim/plgs/luasnip/lua/luasnip.lua new file mode 100644 index 00000000..a05fa57f --- /dev/null +++ b/modules/home/conf/nvim/plgs/luasnip/lua/luasnip.lua @@ -0,0 +1,7 @@ +require("luasnip").config.set_config({ + -- Enable auto triggered snippets + enable_autosnippets = true, + + -- Use Tab (or some other key if you prefer) to trigger visual selection + store_selection_keys = "", +}) diff --git a/modules/home/conf/nvim/plgs/luasnip/lua/snippets/all.lua b/modules/home/conf/nvim/plgs/luasnip/lua/snippets/all.lua new file mode 100644 index 00000000..c3f75058 --- /dev/null +++ b/modules/home/conf/nvim/plgs/luasnip/lua/snippets/all.lua @@ -0,0 +1,182 @@ +local ls = require("luasnip") +-- auto_pairs {{{ +local get_visual = function(args, parent) + if #parent.snippet.env.SELECT_RAW > 0 then + return sn(nil, i(1, parent.snippet.env.SELECT_RAW)) + else + return sn(nil, i(1, "")) + end +end +local function char_count_same(c1, c2) + local line = vim.api.nvim_get_current_line() + -- '%'-escape chars to force explicit match (gsub accepts patterns). + -- second return value is number of substitutions. + local _, ct1 = string.gsub(line, "%" .. c1, "") + local _, ct2 = string.gsub(line, "%" .. c2, "") + return ct1 == ct2 +end + +local function even_count(c, ...) + local line = vim.api.nvim_get_current_line() + local _, ct = string.gsub(line, c, "") + return ct % 2 == 0 +end + +-- This makes creation of pair-type snippets easier. +local function pair(pair_begin, pair_end, file_types, condition_function) + -- FIXME(@Soispha): This only works if file_types == nil, otherwise the snippet does not expand. + -- It would be nice, if it would support both an empty array (`{}`) and nil <2023-08-27> + -- file_types = file_types or {}; + + return s( + { trig = pair_begin, wordTrig = false, snippetType = "autosnippet" }, + { t({ pair_begin }), d(1, get_visual), t({ pair_end }) }, + { + condition = function() + local filetype_check = true + if file_types ~= nil then + filetype_check = file_types[vim.bo.filetype] or false + end + return (not condition_function(pair_begin, pair_end)) and filetype_check + end, + } + ) +end + +local auto_pairs = { + pair("(", ")", nil, char_count_same), + pair("{", "}", nil, char_count_same), + pair("[", "]", nil, char_count_same), + pair("<", ">", { ["rust"] = true, ["tex"] = true }, char_count_same), + pair("'", "'", nil, even_count), + pair('"', '"', nil, even_count), + pair("`", "`", nil, even_count), +} + +ls.add_snippets("all", auto_pairs, { type = "snippets", key = "auto_pairs" }) +-- }}} + +-- todo_comments {{{ +local calculate_comment_string = require("Comment.ft").calculate +local utils = require("Comment.utils") + +--- Get the comment string {beg,end} table +---@param ctype integer 1 for `line`-comment and 2 for `block`-comment +---@return table comment_strings {begcstring, endcstring} +local get_cstring = function(ctype) + -- use the `Comments.nvim` API to fetch the comment string for the region (eq. '--%s' or '--[[%s]]' for `lua`) + local cstring = calculate_comment_string({ ctype = ctype, range = utils.get_region() }) or vim.bo.commentstring + -- as we want only the strings themselves and not strings ready for using `format` we want to split the left and right side + local left, right = utils.unwrap_cstr(cstring) + -- create a `{left, right}` table for it + return { left, right } +end +_G.luasnip = {} +_G.luasnip.vars = { + username = "@soispha", + email = "soispha@vhack.eu", +} + +--- Options for marks to be used in a TODO comment +---@return table,table: The first table contains a node for the date, the second for the signature +local marks = { + signature = function() + return t("(" .. _G.luasnip.vars.username .. ")"), t("") + end, + date_signature = function() + return t("<" .. os.date("%Y-%m-%d") .. ">"), t("(" .. _G.luasnip.vars.username .. ")") + end, + date = function() + return t("<" .. os.date("%Y-%m-%d") .. ">"), t("") + end, + empty = function() + return t(""), t("") + end, +} + +---@param alias string +---@param opts table +---@param mark_function function: This function should return two nodes +---@return table: Returns the comment node +local todo_snippet_nodes = function(alias, opts, mark_function) + local date_node, signature_node = mark_function() + -- format them into the actual snippet + local comment_node = fmta("<> <><>: <> <> <>", { + f(function() + return get_cstring(opts.ctype)[1] -- get + end), + t(alias), -- [name-of-comment] + signature_node, + i(0), -- {comment-text} + date_node, + f(function() + return get_cstring(opts.ctype)[2] -- get + end), + }) + return comment_node +end + +--- Generate a TODO comment snippet with an automatic description and docstring +---@param context table merged with the generated context table `trig` must be specified +---@param alias string of aliases for the todo comment (ex.: {FIX, ISSUE, FIXIT, BUG}) +---@param opts table merged with the snippet opts table +---@param mark_function function: The function used to get the marks +local todo_snippet = function(context, alias, opts, mark_function) + opts = opts or {} + context = context or {} + if not context.trig then + return error("context doesn't include a `trig` key which is mandatory", 2) -- all we need from the context is the trigger + end + opts.ctype = opts.ctype or 1 -- comment type can be passed in the `opts` table, but if it is not, we have to ensure, it is defined + local alias_string = alias -- `choice_node` documentation + context.name = context.name or (alias_string .. " comment") -- generate the `name` of the snippet if not defined + context.dscr = context.dscr or (alias_string .. " comment with a signature-mark") -- generate the `dscr` if not defined + context.docstring = context.docstring or (" {1:" .. alias_string .. "}: {3} <{2:mark}>{0} ") -- generate the `docstring` if not defined + local comment_node = todo_snippet_nodes(alias, opts, mark_function) + return s(context, comment_node, opts) -- the final todo-snippet constructed from our parameters +end + +---@param context table: The luasnip context +---@param opts table: The luasnip opts table, needs to have a ctype set +---@param aliases string: All aliases for a name +---@param marks table: Possible marks to account in snipped generation +---@return table: All possible snippets build from the marks +local process_marks = function(context, aliases, opts, marks) + local output = {} + for mark_name, mark_function in pairs(marks) do + local contex_trig_local = context.trig + context.trig = context.trig .. "-" .. mark_name + output[#output + 1] = todo_snippet(context, aliases, opts, mark_function) + context.trig = contex_trig_local + end + return output +end + +local todo_snippet_specs = { + { { trig = "todo" }, { "TODO" }, { ctype = 1 } }, + { { trig = "fix" }, { "FIXME", "ISSUE" }, { ctype = 1 } }, + { { trig = "hack" }, { "HACK" }, { ctype = 1 } }, + { { trig = "warn" }, { "WARNING" }, { ctype = 1 } }, + { { trig = "perf" }, { "PERFORMANCE", "OPTIMIZE" }, { ctype = 1 } }, + { { trig = "note" }, { "NOTE", "INFO" }, { ctype = 1 } }, + + -- NOTE: Block commented todo-comments + { { trig = "todob" }, { "TODO" }, { ctype = 2 } }, + { { trig = "fixb" }, { "FIXME", "ISSUE" }, { ctype = 2 } }, + { { trig = "hackb" }, { "HACK" }, { ctype = 2 } }, + { { trig = "warnb" }, { "WARNING" }, { ctype = 2 } }, + { { trig = "perfb" }, { "PERF", "PERFORMANCE", "OPTIM", "OPTIMIZE" }, { ctype = 2 } }, + { { trig = "noteb" }, { "NOTE", "INFO" }, { ctype = 2 } }, +} + +local todo_comment_snippets = {} +for _, v in ipairs(todo_snippet_specs) do + local snippets = process_marks(v[1], v[2][1], v[3], marks) + for _, value in pairs(snippets) do + table.insert(todo_comment_snippets, value) + end +end + +ls.add_snippets("all", todo_comment_snippets, { type = "snippets", key = "todo_comments" }) + +-- }}} diff --git a/modules/home/conf/nvim/plgs/luasnip/lua/snippets/html/html.lua b/modules/home/conf/nvim/plgs/luasnip/lua/snippets/html/html.lua new file mode 100644 index 00000000..17e1e7fb --- /dev/null +++ b/modules/home/conf/nvim/plgs/luasnip/lua/snippets/html/html.lua @@ -0,0 +1,108 @@ +local get_visual = function(args, parent) + if #parent.snippet.env.SELECT_RAW > 0 then + return sn(nil, i(1, parent.snippet.env.SELECT_RAW)) + else + return sn(nil, i(1)) + end +end + +local line_begin = require("luasnip.extras.expand_conditions").line_begin + +return { + -- HEADER + s( + { + trig = "h([123456])", + regTrig = true, + wordTrig = false, + snippetType = "autosnippet", + }, + fmt( + [[ + {} + ]], + { + f(function(_, snip) + return snip.captures[1] + end), + d(1, get_visual), + f(function(_, snip) + return snip.captures[1] + end), + } + ), + { condition = line_begin } + ), -- PARAGRAPH + s( + { trig = "pp", snippetType = "autosnippet" }, + fmt( + [[ +

{}

+ ]], + { d(1, get_visual) } + ), + { condition = line_begin } + ), -- UNORDERED LIST + s( + { trig = "itt", snippetType = "autosnippet" }, + fmt( + [[ +
    +
  • {}
  • {} +
+ ]], + { i(1), i(0) } + ), + { condition = line_begin } + ), -- LIST ITEM + s( + { trig = "ii", snippetType = "autosnippet" }, + fmt( + [[ +
  • {}
  • + ]], + { d(1, get_visual) } + ), + { condition = line_begin } + ), + -- DOCUMENT TEMPLATE + s( + { trig = "base" }, + fmt( + [[ + + + + + {} + + + {} + + + ]], + { i(1, "FooBar"), i(0) } + ), + { condition = line_begin } + ), -- ANCHOR TAG + s( + { + trig = "([^%l])aa", + regTrig = true, + wordTrig = false, + snippetType = "autosnippet", + }, + fmt( + [[ + {}{} + ]], + { + f(function(_, snip) + return snip.captures[1] + end), + i(1), + d(2, get_visual), + } + ) + ), +} diff --git a/modules/home/conf/nvim/plgs/luasnip/lua/snippets/tex/delimiter.lua b/modules/home/conf/nvim/plgs/luasnip/lua/snippets/tex/delimiter.lua new file mode 100644 index 00000000..22434aa3 --- /dev/null +++ b/modules/home/conf/nvim/plgs/luasnip/lua/snippets/tex/delimiter.lua @@ -0,0 +1,34 @@ +local get_visual = function(args, parent) + if #parent.snippet.env.SELECT_RAW > 0 then + return sn(nil, i(1, parent.snippet.env.SELECT_RAW)) + else + return sn(nil, i(1, "")) + end +end + +local translation_table = { ["("] = ")", ["{"] = "}", ["["] = "]" } + +-- Return snippet tables +return { + -- LEFT/RIGHT ALL BRACES + s( + { + trig = "([^%a])l([%(%[%{])", + regTrig = true, + wordTrig = false, + snippetType = "autosnippet", + }, + fmta("<>\\left<><>\\right<>", { + f(function(_, snip) + return snip.captures[1] + end), + f(function(_, snip) + return snip.captures[2] + end), + d(1, get_visual), + f(function(_, snip) + return translation_table[snip.captures[2]] + end), + }) + ), +} diff --git a/modules/home/conf/nvim/plgs/luasnip/lua/snippets/tex/greek.lua b/modules/home/conf/nvim/plgs/luasnip/lua/snippets/tex/greek.lua new file mode 100644 index 00000000..ebf4f9d7 --- /dev/null +++ b/modules/home/conf/nvim/plgs/luasnip/lua/snippets/tex/greek.lua @@ -0,0 +1,37 @@ +-- Return snippet tables +return { + s({ trig = ";a", snippetType = "autosnippet" }, { t("\\alpha") }), + s({ trig = ";b", snippetType = "autosnippet" }, { t("\\beta") }), + s({ trig = ";g", snippetType = "autosnippet" }, { t("\\gamma") }), + s({ trig = ";G", snippetType = "autosnippet" }, { t("\\Gamma") }), + s({ trig = ";d", snippetType = "autosnippet" }, { t("\\delta") }), + s({ trig = ";D", snippetType = "autosnippet" }, { t("\\Delta") }), + s({ trig = ";e", snippetType = "autosnippet" }, { t("\\epsilon") }), + s({ trig = ";ve", snippetType = "autosnippet" }, { t("\\varepsilon") }), + s({ trig = ";z", snippetType = "autosnippet" }, { t("\\zeta") }), + s({ trig = ";h", snippetType = "autosnippet" }, { t("\\eta") }), + s({ trig = ";o", snippetType = "autosnippet" }, { t("\\theta") }), + s({ trig = ";vo", snippetType = "autosnippet" }, { t("\\vartheta") }), + s({ trig = ";O", snippetType = "autosnippet" }, { t("\\Theta") }), + s({ trig = ";k", snippetType = "autosnippet" }, { t("\\kappa") }), + s({ trig = ";l", snippetType = "autosnippet" }, { t("\\lambda") }), + s({ trig = ";L", snippetType = "autosnippet" }, { t("\\Lambda") }), + s({ trig = ";m", snippetType = "autosnippet" }, { t("\\mu") }), + s({ trig = ";n", snippetType = "autosnippet" }, { t("\\nu") }), + s({ trig = ";x", snippetType = "autosnippet" }, { t("\\xi") }), + s({ trig = ";X", snippetType = "autosnippet" }, { t("\\Xi") }), + s({ trig = ";i", snippetType = "autosnippet" }, { t("\\pi") }), + s({ trig = ";I", snippetType = "autosnippet" }, { t("\\Pi") }), + s({ trig = ";r", snippetType = "autosnippet" }, { t("\\rho") }), + s({ trig = ";s", snippetType = "autosnippet" }, { t("\\sigma") }), + s({ trig = ";S", snippetType = "autosnippet" }, { t("\\Sigma") }), + s({ trig = ";t", snippetType = "autosnippet" }, { t("\\tau") }), + s({ trig = ";f", snippetType = "autosnippet" }, { t("\\phi") }), + s({ trig = ";vf", snippetType = "autosnippet" }, { t("\\varphi") }), + s({ trig = ";F", snippetType = "autosnippet" }, { t("\\Phi") }), + s({ trig = ";c", snippetType = "autosnippet" }, { t("\\chi") }), + s({ trig = ";p", snippetType = "autosnippet" }, { t("\\psi") }), + s({ trig = ";P", snippetType = "autosnippet" }, { t("\\Psi") }), + s({ trig = ";w", snippetType = "autosnippet" }, { t("\\omega") }), + s({ trig = ";W", snippetType = "autosnippet" }, { t("\\Omega") }), +} diff --git a/modules/home/conf/nvim/plgs/neorg/default.nix b/modules/home/conf/nvim/plgs/neorg/default.nix new file mode 100644 index 00000000..8d8015da --- /dev/null +++ b/modules/home/conf/nvim/plgs/neorg/default.nix @@ -0,0 +1,56 @@ +{...}: { + programs.nixvim.plugins.neorg = { + enable = true; + lazyLoading = true; + + modules = { + "core.defaults" = { + __empty = null; + }; + "core.esupports.metagen".config = { + type = "auto"; + }; + "core.journal".config = { + workspace = "journal"; + }; + "core.keybinds".config = { + hook = { + __raw = '' + function(keybinds) + -- remap the looking glas to the same key, femaco is also mapped to. + keybinds.remap_event("norg", "n", "cc", "core.looking-glass.magnify-code-block") + + keybinds.remap_event("norg", "n", "", "core.integrations.telescope.find_linkable") + keybinds.remap_event("norg", "i", "", "core.integrations.telescope.insert_link") + end, + ''; + }; + }; + "core.completion".config = { + engine = "nvim-cmp"; + }; + "core.concealer".config = { + __empty = null; + }; + "core.dirman".config = { + workspaces = { + general = "~/repos/notes/general"; + journal = "~/repos/notes/journal"; + projects = "~/repos/notes/projects"; + }; + }; + "core.export".config = { + __empty = null; + }; + "core.integrations.telescope".config = { + __empty = null; + }; + + # TODO: Add this when the nvim version in nixpkgs is >= 0.10 <2023-08-29> + # + # "core.ui.calendar".config = { + # __empty = null; + # }; + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/nvim-cmp/default.nix b/modules/home/conf/nvim/plgs/nvim-cmp/default.nix new file mode 100644 index 00000000..ed0e57c3 --- /dev/null +++ b/modules/home/conf/nvim/plgs/nvim-cmp/default.nix @@ -0,0 +1,54 @@ +{config, ...}: { + programs.nixvim.plugins.cmp = let + neorg_source = + if config.programs.nixvim.plugins.neorg.modules."core.completion".config.engine == "nvim-cmp" + then [{name = "neorg";}] + else []; + in { + /* + TODO: integrate this: + ```lua + enabled = { + function() + -- disable completion in comments + local context = require 'cmp.config.context' + -- keep command mode completion enabled when cursor is in a comment + -- te + if vim.api.nvim_get_mode().mode == 'c' then + return true + else + return not context.in_treesitter_capture("comment") + and not context.in_syntax_group("Comment") + end + end + }, + ``` + */ + enable = true; + autoEnableSources = true; + settings = { + mapping = { + # TODO: add support for desc and which key here + "" = "cmp.mapping.scroll_docs(-4)"; # desc = "Scroll up by four lines" + "" = "cmp.mapping.scroll_docs(4)"; # desc = "Scroll down by four lines" + "HH" = "cmp.mapping.complete()"; # desc = "Confirm snipped" + }; + + snippet.expand = "function(args) require('luasnip').lsp_expand(args.body) end"; + + sources = + [ + {name = "nvim_lsp";} + {name = "luasnip";} + {name = "path";} + {name = "git";} # TODO: I might want to add config to allow all issues/prs <2023-10-16> + # {name = "convertionalcommits";} # TODO: Useless without commitlint [https://commitlint.js.org/] <2023-10-16> + # {name = "rg";} # TODO: This might really RIP-grep my system <2023-10-16> + # {name = "buffer";} + # {name = "digraphs";} + {name = "calc";} + ] + ++ neorg_source; + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/nvim-lint/default.nix b/modules/home/conf/nvim/plgs/nvim-lint/default.nix new file mode 100644 index 00000000..f5cb9acf --- /dev/null +++ b/modules/home/conf/nvim/plgs/nvim-lint/default.nix @@ -0,0 +1,15 @@ +{ + pkgs, + lib, + ... +}: { + programs.nixvim = { + # TODO: package nvim-lint though a module + extraConfigLuaPost = '' + ${lib.strings.fileContents ./lua/nvim-lint.lua} + ''; + extraPlugins = [ + pkgs.vimPlugins.nvim-lint + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/nvim-lint/lua/nvim-lint.lua b/modules/home/conf/nvim/plgs/nvim-lint/lua/nvim-lint.lua new file mode 100644 index 00000000..4ed49f7b --- /dev/null +++ b/modules/home/conf/nvim/plgs/nvim-lint/lua/nvim-lint.lua @@ -0,0 +1,20 @@ +require("lint").linters_by_ft = { + -- text + markdown = {}, + -- tex = {'chktex'}, -- maybe add some text linters ? + + -- shell (already covered by the bash language sever) + -- sh = { "shellcheck"; }; + -- bash = { "shellcheck"; }; + -- zsh = { "shellcheck"; }; + -- dash = { "shellcheck"; }; + + yaml = { "yamllint" }, + nix = { "nix", "statix" }, +} + +vim.api.nvim_create_autocmd({ "BufEnter", "BufWritePost" }, { + callback = function() + require("lint").try_lint() + end, +}) diff --git a/modules/home/conf/nvim/plgs/raw_plugins/default.nix b/modules/home/conf/nvim/plgs/raw_plugins/default.nix new file mode 100644 index 00000000..941cb7cb --- /dev/null +++ b/modules/home/conf/nvim/plgs/raw_plugins/default.nix @@ -0,0 +1,11 @@ +{...}: { + programs.nixvim = { + # Not all plugins have own modules + # You can add missing plugins here + # `pkgs.vimExtraPlugins` is added by the overlay you added at the beginning + # For a list of available plugins, look here: + # https://github.com/jooooscha/nixpkgs-vim-extra-plugins/blob/main/plugins.md + extraPlugins = [ + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/telescope/default.nix b/modules/home/conf/nvim/plgs/telescope/default.nix new file mode 100644 index 00000000..b5054ed0 --- /dev/null +++ b/modules/home/conf/nvim/plgs/telescope/default.nix @@ -0,0 +1,10 @@ +{...}: { + imports = [ + ./defaults + ./keymaps + ./extensions + ]; + programs.nixvim.plugins.telescope = { + enable = true; + }; +} diff --git a/modules/home/conf/nvim/plgs/telescope/defaults/default.nix b/modules/home/conf/nvim/plgs/telescope/defaults/default.nix new file mode 100644 index 00000000..933089ef --- /dev/null +++ b/modules/home/conf/nvim/plgs/telescope/defaults/default.nix @@ -0,0 +1,30 @@ +{...}: { + programs.nixvim.plugins.telescope.settings.defaults = { + mappings = let + insert_and_normal_mappings = { + # map actions.which_key to (default: ) + # actions.which_key shows the mappings for your picker, + # e.g. git_{create, delete, ...}_branch for the git_branches picker + "" = "which_key"; + }; + in { + i = + insert_and_normal_mappings; + n = + { + "t" = "move_selection_next"; + "n" = "move_selection_previous"; + "" = "toggle_all"; + + "" = "preview_scrolling_up"; + "" = "preview_scrolling_down"; + "" = "preview_scrolling_left"; + "" = "preview_scrolling_right"; + + "" = "close"; + "q" = "close"; + } + // insert_and_normal_mappings; + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/telescope/extensions/bibtex/default.nix b/modules/home/conf/nvim/plgs/telescope/extensions/bibtex/default.nix new file mode 100644 index 00000000..6f3cc2ea --- /dev/null +++ b/modules/home/conf/nvim/plgs/telescope/extensions/bibtex/default.nix @@ -0,0 +1,17 @@ +{pkgs, ...}: { + # WARNING: This is only activated in tex files via the ftplugin. + programs.nixvim = { + extraPlugins = [ + pkgs.vimExtraPlugins.telescope-bibtex-nvim + ]; + keymaps = [ + { + key = "ib"; + # This is registered in the ftplugin file, so we set this to null here + action = ""; + mode = "n"; + options.desc = "[i]nsert a [b]atex citation"; + } + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/telescope/extensions/default.nix b/modules/home/conf/nvim/plgs/telescope/extensions/default.nix new file mode 100644 index 00000000..0b1e033a --- /dev/null +++ b/modules/home/conf/nvim/plgs/telescope/extensions/default.nix @@ -0,0 +1,9 @@ +{...}: { + imports = [ + ./bibtex + ./frecency + ./fzy-native + ./rooter + ./symbols + ]; +} diff --git a/modules/home/conf/nvim/plgs/telescope/extensions/frecency/default.nix b/modules/home/conf/nvim/plgs/telescope/extensions/frecency/default.nix new file mode 100644 index 00000000..c1cebc09 --- /dev/null +++ b/modules/home/conf/nvim/plgs/telescope/extensions/frecency/default.nix @@ -0,0 +1,23 @@ +{...}: { + programs.nixvim = { + keymaps = [ + { + key = "gff"; + mode = "n"; + action = "function() require('telescope').extensions.frecency.frecency() end"; + lua = true; + options.desc = "activate the frecency file selection"; + } + ]; + plugins.telescope = { + extensions.frecency = { + enable = true; + settings = { + show_scores = true; + db_safe_mode = false; + default_workspace = "CWD"; # or 'LSP' + }; + }; + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/telescope/extensions/fzy-native/default.nix b/modules/home/conf/nvim/plgs/telescope/extensions/fzy-native/default.nix new file mode 100644 index 00000000..ce0bdccc --- /dev/null +++ b/modules/home/conf/nvim/plgs/telescope/extensions/fzy-native/default.nix @@ -0,0 +1,5 @@ +{...}: { + programs.nixvim.plugins.telescope.extensions.fzy-native = { + enable = true; + }; +} diff --git a/modules/home/conf/nvim/plgs/telescope/extensions/rooter/default.nix b/modules/home/conf/nvim/plgs/telescope/extensions/rooter/default.nix new file mode 100644 index 00000000..779448cc --- /dev/null +++ b/modules/home/conf/nvim/plgs/telescope/extensions/rooter/default.nix @@ -0,0 +1,7 @@ +{lib, ...}: { + programs.nixvim = { + extraConfigLuaPost = '' + ${lib.strings.fileContents ./lua/rooter.lua} + ''; + }; +} diff --git a/modules/home/conf/nvim/plgs/telescope/extensions/rooter/lua/rooter.lua b/modules/home/conf/nvim/plgs/telescope/extensions/rooter/lua/rooter.lua new file mode 100644 index 00000000..7235c5a3 --- /dev/null +++ b/modules/home/conf/nvim/plgs/telescope/extensions/rooter/lua/rooter.lua @@ -0,0 +1,84 @@ +-- Taken from: https://github.com/desdic/telescope-rooter.nvim/blob/69423216c75a5f1f1477bbf8faf6b0dc8af04099/lua/telescope/_extensions/rooter.lua +local has_telescope, telescope = pcall(require, "telescope") +if not has_telescope then + error("This extension requires telescope.nvim") + return +end + +local has_plenary, plenary = pcall(require, "plenary") +if not has_plenary then + error("This extension requires plenary") + return +end + +local log = plenary.log.new({ plugin = "telescope_rooter", level = "info" }) + +-- TODO: expose this function +local toggle = function(_) + vim.g["Telescope#rooter#enabled"] = not vim.g["Telescope#rooter#enabled"] + print("Telescope#rooter#enabled=" .. vim.inspect(vim.g["Telescope#rooter#enabled"])) +end + +local config = { patterns = { ".git" }, enable = true, debug = false } + +-- default enabled +vim.g["Telescope#rooter#enabled"] = vim.F.if_nil(config.enable, true) + +-- redefine log if debug enabled +if vim.F.if_nil(config.debug, false) then + log = plenary.log.new({ plugin = "telescope_rooter", level = "debug" }) +end + +local group = vim.api.nvim_create_augroup("TelescopeRooter", { clear = true }) + +vim.api.nvim_create_autocmd({ "DirChangedPre" }, { + callback = function() + if vim.g["Telescope#rooter#enabled"] ~= true then + return + end + + if vim.g["Telescope#rooter#oldpwd"] == nil then + vim.g["Telescope#rooter#oldpwd"] = vim.loop.cwd() + log.debug("before " .. vim.inspect(vim.loop.cwd())) + end + end, + group = group, +}) + +vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, { + callback = function() + if vim.g["Telescope#rooter#enabled"] ~= true then + return + end + + vim.schedule(function() + if vim.bo.filetype == "TelescopePrompt" then + local rootdir = vim.fs.dirname(vim.fs.find(config.patterns, { upward = true })[1]) + if rootdir ~= nil then + vim.api.nvim_set_current_dir(rootdir) + log.debug("changing dir to " .. rootdir) + end + end + end) + end, + group = group, +}) + +vim.api.nvim_create_autocmd({ "BufWinLeave" }, { + callback = function() + if vim.g["Telescope#rooter#enabled"] ~= true then + return + end + + vim.schedule(function() + if vim.bo.filetype ~= "TelescopePrompt" then + if vim.g["Telescope#rooter#oldpwd"] ~= nil then + log.debug("restoring " .. vim.g["Telescope#rooter#oldpwd"]) + vim.api.nvim_set_current_dir(vim.g["Telescope#rooter#oldpwd"]) + vim.g["Telescope#rooter#oldpwd"] = nil + end + end + end) + end, + group = group, +}) diff --git a/modules/home/conf/nvim/plgs/telescope/extensions/symbols/default.nix b/modules/home/conf/nvim/plgs/telescope/extensions/symbols/default.nix new file mode 100644 index 00000000..fa166c02 --- /dev/null +++ b/modules/home/conf/nvim/plgs/telescope/extensions/symbols/default.nix @@ -0,0 +1,55 @@ +{pkgs, ...}: { + programs.nixvim = { + extraPlugins = [ + # Source of symbols for telescope symbols + pkgs.vimPlugins.telescope-symbols-nvim + ]; + keymaps = [ + { + key = "il"; + mode = "n"; + action = '' + function() + require('telescope.builtin').symbols{ sources = { + 'latex' + }} + end + ''; + lua = true; + options.desc = "[i]nsert a [l]atex symbol"; + } + { + key = "ie"; + mode = "n"; + action = '' + function() + require('telescope.builtin').symbols{ sources = { + 'emoji', + }} + end + ''; + lua = true; + options.desc = "[i]nsert a [e]moji"; + } + { + key = "is"; + mode = "n"; + action = '' + function() + require('telescope.builtin').symbols{ sources = { + 'emoji', + 'gitmoji', + 'julia', + 'kaomoji', + 'latex', + 'math', + 'nerd', + }} + end + ''; + lua = true; + options.desc = "[i]nsert a [s]ymbol (like emojis)"; + } + ]; + }; +} diff --git a/modules/home/conf/nvim/plgs/telescope/keymaps/default.nix b/modules/home/conf/nvim/plgs/telescope/keymaps/default.nix new file mode 100644 index 00000000..e551cc5a --- /dev/null +++ b/modules/home/conf/nvim/plgs/telescope/keymaps/default.nix @@ -0,0 +1,10 @@ +{...}: { + programs.nixvim.plugins.telescope.keymaps = { + "rg" = { + action = "live_grep"; + options = { + desc = "[rg] in a live session"; + }; + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/todo-comments/default.nix b/modules/home/conf/nvim/plgs/todo-comments/default.nix new file mode 100644 index 00000000..35f4b283 --- /dev/null +++ b/modules/home/conf/nvim/plgs/todo-comments/default.nix @@ -0,0 +1,49 @@ +{...}: { + programs.nixvim.plugins.todo-comments = { + enable = true; + guiStyle = { + fg = "BOLD"; + bg = "NONE"; + }; + highlight = { + keyword = "wide_fg"; + }; + keywords = { + /* + # Defaults: + FIX = { + icon = " "; # Icon used for the sign, and in search results. + color = "error"; # Can be a hex color, or a named color. + alt = ["FIXME" "BUG" "FIXIT" "ISSUE"]; # A set of other keywords that all map to this FIX keywords. + }; + TODO = { + icon = " "; + color = "info"; + }; + HACK = { + icon = " "; + color = "warning"; + }; + WARN = { + icon = " "; + color = "warning"; + alt = ["WARNING" "XXX"]; + }; + PERF = { + icon = "󰅒 "; + alt = ["OPTIM" "PERFORMANCE" "OPTIMIZE"]; + }; + NOTE = { + icon = "󰍨 "; + color = "hint"; + alt = ["INFO"]; + }; + TEST = { + icon = "⏲ "; + color = "test"; + alt = ["TESTING" "PASSED" "FAILED"]; + }; + */ + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/treesitter/default.nix b/modules/home/conf/nvim/plgs/treesitter/default.nix new file mode 100644 index 00000000..656b4ce3 --- /dev/null +++ b/modules/home/conf/nvim/plgs/treesitter/default.nix @@ -0,0 +1,56 @@ +{ + osConfig, + config, + pkgs, + lib, + ... +}: { + programs.nixvim = { + plugins.treesitter = { + enable = true; + + ensureInstalled = "all"; + indent = true; + + # inject nixvim specific highlighting (eg in extraConfigLua). + nixvimInjections = true; + + grammarPackages = + config.programs.nixvim.plugins.treesitter.package.passthru.allGrammars + ++ [pkgs.yts-grammar]; + + disabledLanguages = []; + + /* + # TODO: this is not supported by the NixVim module, NixNeovim supports this though.. + highlight = { + # `false` will disable the whole extension + enable = true; + disable = ["latex"]; + + # Setting this to true will run `:h syntax` and tree-sitter at the same time. + # Set this to `true` if you depend on 'syntax' being enabled (like for indentation). + # Using this option may slow down your editor; and you may see some duplicate highlights. + # Instead of true it can also be a list of languages + additionalVimRegexHighlighting = [""]; + }; + */ + + incrementalSelection = { + enable = true; + keymaps = { + # TODO: include these in the which-key description + initSelection = "gnn"; # set to `false` to disable one of the mappings + nodeIncremental = "grn"; + scopeIncremental = "grc"; + nodeDecremental = "grm"; + }; + }; + }; + extraFiles = { + "queries/yts/highlights.scm" = '' + ${lib.strings.fileContents "${pkgs.yts-grammar}/queries/highlights.scm"} + ''; + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/vim-tex/default.nix b/modules/home/conf/nvim/plgs/vim-tex/default.nix new file mode 100644 index 00000000..70ec7f5b --- /dev/null +++ b/modules/home/conf/nvim/plgs/vim-tex/default.nix @@ -0,0 +1,57 @@ +{...}: { + programs.nixvim = { + opts.conceallevel = 0; + + plugins.vimtex = { + enable = true; + settings = { + view_method = "zathura"; + quickfix_mode = -1; + view_enabled = -1; + tex_conceal = "abdmg"; + tex_flavor = "latex"; + + # Useful if treesitter is the highlighter + syntax_enabled = 0; + syntax_conceal_disable = 1; + + mappings_disable = { + n = ["tsf" "tsc" "tse" "ts$" "tsd" "tsD"]; + x = ["tsd" "tsD" "tsf"]; + }; + + toc_config = { + name = "TOC"; + layers = ["content" "todo" "include"]; + resize = false; + split_width = 49; + todo_sorted = -1; + show_help = false; + show_numbers = false; + mode = true; + layer_keys = { + content = "C"; + label = "L"; + todo = "j"; + include = "I"; + }; + }; + + compiler_latexmk = { + build_dir = "build"; + callback = false; + continuous = true; + executable = "latexmk"; + hooks = []; + options = [ + "-verbose" + "-file-line-error" + "-synctex=0" + "-interaction=nonstopmode" + "-outdir=build" + ]; + }; + }; + }; + }; +} diff --git a/modules/home/conf/nvim/plgs/which-key/default.nix b/modules/home/conf/nvim/plgs/which-key/default.nix new file mode 100644 index 00000000..be63f7ac --- /dev/null +++ b/modules/home/conf/nvim/plgs/which-key/default.nix @@ -0,0 +1,5 @@ +{...}: { + programs.nixvim.plugins.which-key = { + enable = true; + }; +} diff --git a/modules/home/conf/prusa_slicer/default.nix b/modules/home/conf/prusa_slicer/default.nix new file mode 100644 index 00000000..9529e13d --- /dev/null +++ b/modules/home/conf/prusa_slicer/default.nix @@ -0,0 +1,3 @@ +{...}: { + xdg.configFile."PrusaSlicer/PrusaSlicer.ini".source = ./prusa_slicer.ini; +} diff --git a/modules/home/conf/prusa_slicer/prusa_slicer.ini b/modules/home/conf/prusa_slicer/prusa_slicer.ini new file mode 100644 index 00000000..0416a398 --- /dev/null +++ b/modules/home/conf/prusa_slicer/prusa_slicer.ini @@ -0,0 +1,65 @@ +alert_when_supports_needed = 1 +allow_auto_color_change = 1 +allow_ip_resolve = 1 +auto_toolbar_size = 100 +autocenter = 0 +background_processing = 0 +clear_undo_redo_stack_on_new_project = 1 +collapsed_sidebar = 0 +color_mapinulation_panel = 0 +custom_toolbar_size = 100 +default_action_on_close_application = none +default_action_on_new_project = none +default_action_on_select_preset = none +downloader_url_registered = 1 +drop_project_action = 1 +export_sources_full_pathnames = 0 +no_controller = 1 +no_defaults = 1 +no_templates = 0 +non_manifold_edges = 1 +notify_release = all +order_volumes = 1 +preset_update = 1 +remember_output_path = 1 +remember_output_path_removable = 1 +restore_win_position = 1 +reverse_mouse_wheel_zoom = 0 +seq_top_layer_only = 1 +show_drop_project_dialog = 1 +show_hints = 1 +show_incompatible_presets = 0 +show_splash_screen = 1 +single_instance = 0 +use_binary_gcode_when_supported = 0 +use_custom_toolbar_size = 0 +use_free_camera = 0 +use_inches = 0 +use_perspective_camera = 1 +view_mode = advanced +wifi_config_dialog_declined = 0 +window_mainframe = 3; 33; 1914; 1044; 1 + +[filaments] +Generic PETG @PGIS = 1 +Generic PLA @PGIS = 1 +Generic PLA Silk @PGIS = 1 +Prusa PETG @PGIS = 1 +Prusa PLA @PGIS = 1 +Prusament PETG @PGIS = 1 +Prusament PLA = 1 +Prusament PLA @PGIS = 1 +Prusament PLA @Template = 1 +Prusament PLA Blend @PGIS = 1 +Prusament rPLA @PG = 1 + +[presets] +filament = Prusament PLA +physical_printer = +print = 0.25mm DRAFT @MINI +printer = Original Prusa MINI & MINI+ +sla_material = +sla_print = + +[vendor:PrusaResearch] +model:MINI = 0.4 diff --git a/modules/home/conf/python/default.nix b/modules/home/conf/python/default.nix new file mode 100644 index 00000000..826d466d --- /dev/null +++ b/modules/home/conf/python/default.nix @@ -0,0 +1,6 @@ +{config, ...}: { + xdg.configFile."python/pythonrc".source = ./pythonrc.py; + programs.zsh.sessionVariables = { + "PYTHONSTARTUP" = "${config.xdg.configHome}/python/pythonrc"; + }; +} diff --git a/modules/home/conf/python/pythonrc.py b/modules/home/conf/python/pythonrc.py new file mode 100644 index 00000000..466d9788 --- /dev/null +++ b/modules/home/conf/python/pythonrc.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 + + +def is_vanilla() -> bool: + import sys + + return not hasattr(__builtins__, "__IPYTHON__") and "bpython" not in sys.argv[0] + + +def setup_history(): + import os + import atexit + import readline + from pathlib import Path + + if state_home := os.environ.get("XDG_DATA_HOME"): + state_home = Path(state_home) + else: + state_home = Path.home() / ".local" / "state" + + history: Path = state_home / "python" / "history" + + if not os.path.exists(history): + open(history, "w") + + readline.read_history_file(str(history)) + atexit.register(readline.write_history_file, str(history)) + + +if is_vanilla(): + setup_history() + +# vim: ft=python diff --git a/modules/home/conf/rclone/default.nix b/modules/home/conf/rclone/default.nix new file mode 100644 index 00000000..bd0c1ac2 --- /dev/null +++ b/modules/home/conf/rclone/default.nix @@ -0,0 +1,7 @@ +{ + config, + pkgs, + ... +}: { + xdg.configFile."rclone/rclone.conf".source = ./rclone.conf; +} diff --git a/modules/home/conf/rclone/rclone.conf b/modules/home/conf/rclone/rclone.conf new file mode 100644 index 00000000..9e1c4f08 --- /dev/null +++ b/modules/home/conf/rclone/rclone.conf @@ -0,0 +1,10 @@ +[vhack1] +type = sftp +host = server1.vhack.eu +user = soispha +key_use_agent = true +known_hosts_file = ~/.local/share/ssh/known_hosts +shell_type = unix +md5sum_command = md5sum +sha1sum_command = sha1sum + diff --git a/modules/home/conf/rofi/default.nix b/modules/home/conf/rofi/default.nix new file mode 100644 index 00000000..10363ab5 --- /dev/null +++ b/modules/home/conf/rofi/default.nix @@ -0,0 +1,10 @@ +{pkgs, ...}: { + programs.rofi = { + enable = true; + package = pkgs.rofi-wayland; + terminal = "${pkgs.alacritty}/bin/alacritty"; + # show-icons = true; + # location = "center"; + theme = ./nord-twoLines.rasi; + }; +} diff --git a/modules/home/conf/rofi/nord-twoLines.rasi b/modules/home/conf/rofi/nord-twoLines.rasi new file mode 100644 index 00000000..612b907f --- /dev/null +++ b/modules/home/conf/rofi/nord-twoLines.rasi @@ -0,0 +1,101 @@ +/******************************************************************************* + * ROFI TWO LINES THEME USING THE NORD COLOR PALETTE + * User : LR-Tech + * Theme Repo : https://github.com/lr-tech/rofi-themes-collection + * Nord Project Repo : https://github.com/arcticicestudio/nord + *******************************************************************************/ + +* { + font: "Fira Code 10"; + + nord0: #2e3440; + nord1: #3b4252; + nord2: #434c5e; + nord3: #4c566a; + + nord4: #d8dee9; + nord5: #e5e9f0; + nord6: #eceff4; + + nord7: #8fbcbb; + nord8: #88c0d0; + nord9: #81a1c1; + nord10: #5e81ac; + nord11: #bf616a; + + nord12: #d08770; + nord13: #ebcb8b; + nord14: #a3be8c; + nord15: #b48ead; + + background-color: transparent; + text-color: @nord4; + accent-color: @nord8; + + margin: 0px; + padding: 0px; + spacing: 0px; +} + +window { + background-color: @nord0; + + location: north; + width: 100%; +} + +inputbar { + padding: 2px 8px; + spacing: 8px; + children: [ prompt, entry ]; +} + +prompt, entry, element-text, element-icon { + vertical-align: 0.5; +} + +prompt { + text-color: @accent-color; +} + +listview { + lines: 1; + columns: 4; +} + +element { + padding: 1px 8px; + spacing: 4px; +} + +element normal urgent { + text-color: @nord13; +} + +element normal active { + text-color: @accent-color; +} + +element selected { + text-color: @nord0; +} + +element selected normal { + background-color: @accent-color; +} + +element selected urgent { + background-color: @nord13; +} + +element selected active { + background-color: @nord8; +} + +element-icon { + size: 0.75em; +} + +element-text { + text-color: inherit; +} diff --git a/modules/home/conf/ssh/default.nix b/modules/home/conf/ssh/default.nix new file mode 100644 index 00000000..de9b0d90 --- /dev/null +++ b/modules/home/conf/ssh/default.nix @@ -0,0 +1,16 @@ +{config, ...}: { + programs.ssh = { + enable = true; + compression = true; + hashKnownHosts = false; + serverAliveInterval = 240; + userKnownHostsFile = "${config.xdg.dataHome}/ssh/known_hosts"; + + matchBlocks = { + "codeberg.org" = { + # TODO: Remove this once they fix their ipv6 config + addressFamily = "inet"; + }; + }; + }; +} diff --git a/modules/home/conf/starship/default.nix b/modules/home/conf/starship/default.nix new file mode 100644 index 00000000..5db6eb8b --- /dev/null +++ b/modules/home/conf/starship/default.nix @@ -0,0 +1,119 @@ +{ + lib, + nixosConfig, + pkgs, + ... +}: { + programs.starship = { + enable = true; + enableZshIntegration = true; + settings = { + add_newline = false; + format = lib.concatStrings [ + "$directory" + "$username" + "$cmd_duration" + "$status" + "$character" + ]; + right_format = lib.concatStrings ( + [ + "$git_metrics" + "$git_branch" + "$git_status" + "$git_commit" + "$git_state" + "$time" + ] + ++ lib.optional + nixosConfig.soispha.laptop.enable + "$battery" + ); + scan_timeout = 20; + character = { + # success_symbol = "[❯](bold blue)"; + # a = "⬢"; + success_symbol = "[](bold blue)"; + error_symbol = "[](bold red)"; + }; + status = { + disabled = false; + format = "([($common_meaning )($status)( $signal_name)]($style) )"; + }; + time = { + disabled = false; + format = "[\\[$time\\]]($style)"; + }; + username = { + format = "as [$user]($style) "; + }; + git_branch = { + format = "[($symbol$branch(:$remote_branch) )]($style)"; + }; + git_status = { + disabled = true; + format = "([\\[$ahead_behind\\]]($style) )"; + ahead = "⇡$count"; + diverged = "⇕⇡$ahead_count⇣$behind_count"; + behind = "⇣$count"; + }; + git_metrics = { + disabled = true; + ignore_submodules = true; + }; + git_state = { + format = "[\($state( $progress_current of $progress_total)\)]($style) "; + rebase = "[rebasing](bold magenta)"; + merge = "[merging](bold yellow)"; + revert = "[reverting](bold blue)"; + cherry_pick = "[picking](bold red)"; + bisect = "[bisecting](bold red)"; + am = "[applying](bold green)"; + am_or_rebase = "[applying/rebasing](bold yellow)"; + }; + git_commit = { + disabled = true; + tag_disabled = false; + tag_symbol = "v"; + format = "[(\\[$tag\\] )]($style)"; + }; + directory = { + truncate_to_repo = true; + read_only = " 󰌾"; + before_repo_root_style = "black bold dimmed"; + }; + cmd_duration = { + min_time = 2000; # Milliseconds + style = "bold white"; + }; + custom = { + # status_output = { + # format = "$output"; + # command = "if test $STARSHIP_CMD_STATUS -ne 0; then echo \"bold red\"; else echo \"bold cyan\"; fi"; + # shell = [ "${pkgs.dash}" ]; + # }; + }; + battery = { + # '󰁹 ' + # '󰂄 ' + # '󰂃 ' + # '󰁽 ' + # '󰂎 ' + display = [ + { + threshold = 10; + style = "bold red"; + } + { + threshold = 30; + style = "bold blue"; + } + { + threshold = 50; + style = "bold green"; + } + ]; + }; + }; + }; +} diff --git a/modules/home/conf/swayidle/config b/modules/home/conf/swayidle/config new file mode 100644 index 00000000..a48f670b --- /dev/null +++ b/modules/home/conf/swayidle/config @@ -0,0 +1,5 @@ +timeout 180 'swaylock -fF' + +timeout 360 'systemctl suspend-then-hibernate' + +before-sleep 'swaylock -f' diff --git a/modules/home/conf/swayidle/default.nix b/modules/home/conf/swayidle/default.nix new file mode 100644 index 00000000..6b8a7d80 --- /dev/null +++ b/modules/home/conf/swayidle/default.nix @@ -0,0 +1,29 @@ +{ + config, + pkgs, + ... +}: { + xdg.configFile."swayidle/config".source = ./config; + + # services.swayidle = { + # enable = true; + # events = [ + # { + # event = "before-sleep"; + # command = "${pkgs.swaylock}/bin/swaylock -f "; + # } + # ]; + # timeouts = [ + # { + # timeout = 180; + # command = "${pkgs.swaylock}/bin/swaylock -fFu "; + # } + # { + # timeout = 360; + # # TODO: systemctl is installed? + # command = "systemctl suspend-then-hibernate"; + # } + # ]; + # # systemdTarget = ""; # TODO: this might be usefull + # }; +} diff --git a/modules/home/conf/swaylock/GTDcanonical.png b/modules/home/conf/swaylock/GTDcanonical.png new file mode 100644 index 00000000..ef41d79d Binary files /dev/null and b/modules/home/conf/swaylock/GTDcanonical.png differ diff --git a/modules/home/conf/swaylock/commands.jpg b/modules/home/conf/swaylock/commands.jpg new file mode 100644 index 00000000..54016503 Binary files /dev/null and b/modules/home/conf/swaylock/commands.jpg differ diff --git a/modules/home/conf/swaylock/default.nix b/modules/home/conf/swaylock/default.nix new file mode 100644 index 00000000..9e5eabac --- /dev/null +++ b/modules/home/conf/swaylock/default.nix @@ -0,0 +1,10 @@ +{...}: { + programs.swaylock = { + enable = true; + settings = { + image = "${./GTDcanonical.png}"; + scaling = "center"; + color = "000000"; + }; + }; +} diff --git a/modules/home/conf/swaylock/gnu.png b/modules/home/conf/swaylock/gnu.png new file mode 100644 index 00000000..d07dee3e Binary files /dev/null and b/modules/home/conf/swaylock/gnu.png differ diff --git a/modules/home/conf/taskwarrior/default.nix b/modules/home/conf/taskwarrior/default.nix new file mode 100644 index 00000000..d7aec156 --- /dev/null +++ b/modules/home/conf/taskwarrior/default.nix @@ -0,0 +1,125 @@ +{ + nixosConfig, + lib, + config, + ... +}: { + imports = [ + ./hooks + ]; + + services.taskwarrior-sync = { + enable = true; + }; + + programs.taskwarrior = let + projects = import ./projects {}; + + mkContext = project: + if builtins.hasAttr "subprojects" project + then + lib.lists.flatten ( + (builtins.map mkContext (builtins.map (mkProject project) project.subprojects)) + ++ (mkContext (builtins.removeAttrs project ["subprojects"])) + ) + else [ + { + inherit (project) name; + value = let + name = + if builtins.hasAttr "pname" project + then project.pname + else project.name; + in { + read = "project:${name}"; + write = "project:${name}"; + rc = { + neorg_path = + if builtins.hasAttr "neorg_path" project + then project.neorg_path + else "${project.prefix}/${project.name}/index.norg"; + }; + }; + } + ]; + mkProject = project: subproject: let + pname = + if builtins.hasAttr "pname" project + then project.pname + else project.name; + in + if builtins.isString subproject + then { + name = "${project.name}_${subproject}"; + pname = "${pname}.${subproject}"; + neorg_path = + if builtins.hasAttr "neorg_path_prefix" project + then "${project.neorg_path_prefix}/${subproject}/index.norg" + else "${project.prefix}/${project.name}/${subproject}/index.norg"; + } + else if builtins.isAttrs subproject + then let + name = builtins.elemAt (builtins.attrNames subproject) 0; + in { + name = "${project.name}_${name}"; + pname = "${pname}.${name}"; + prefix = "${project.prefix}/${project.name}"; + neorg_path_prefix = "${project.prefix}/${project.name}/${name}"; + subprojects = builtins.elemAt (builtins.attrValues subproject) 0; + } + else builtins.throw "Subproject not a string or a attrs: ${subproject}"; + + context = + builtins.listToAttrs (lib.lists.flatten (builtins.map mkContext projects)); + in { + enable = true; + colorTheme = ./nord.theme; + extraConfig = '' + # This include just contains my taskd user credentials + include ${nixosConfig.age.secrets.taskserverCredentials.path} + ''; + config = { + news.version = "2.6.0"; + complete.all.tags = true; + list.all = { + projects = true; + tags = true; + }; + regex = true; + weekstart = "Monday"; + uda = { + total_active_time = { + type = "duration"; + label = "Total active time"; + }; + }; + alias = { + mod = "modify"; + n = "execute neorg --task"; + fstart = "execute neorg fstart"; + }; + color = true; + + hooks.location = "${config.xdg.configHome}/task/hooks"; + + urgency.uda.priority = { + H.coefficient = 6.0; + M.coefficient = 0; + L.coefficient = -1.8; + }; + + inherit context; + + taskd = { + server = "taskserver.vhack.eu:53589"; + trust = "strict"; + ca = + nixosConfig.age.secrets.taskserverCA.path; + key = + nixosConfig.age.secrets.taskserverPrivate.path; + certificate = + nixosConfig.age.secrets.taskserverPublic.path; + }; + }; + }; +} diff --git a/modules/home/conf/taskwarrior/firefox/default.nix b/modules/home/conf/taskwarrior/firefox/default.nix new file mode 100644 index 00000000..fb5daaa8 --- /dev/null +++ b/modules/home/conf/taskwarrior/firefox/default.nix @@ -0,0 +1,32 @@ +{ + config, + lib, + # options + prefConfig, + profile_size, + search, + userChrome, + ... +}: let + inherit (config.soispha.taskwarrior.projects) projects; + + mkFirefoxProfile = { + name, + id, + }: { + inherit name; + value = { + isDefault = false; + extraConfig = prefConfig; + inherit id name search userChrome; + }; + }; + projects_id = + lib.imap0 (id: project: { + name = project; + id = id + profile_size; + }) + projects; + firefoxProfiles = builtins.listToAttrs (builtins.map mkFirefoxProfile projects_id); +in + firefoxProfiles diff --git a/modules/home/conf/taskwarrior/hooks/default.nix b/modules/home/conf/taskwarrior/hooks/default.nix new file mode 100644 index 00000000..4bac0ca7 --- /dev/null +++ b/modules/home/conf/taskwarrior/hooks/default.nix @@ -0,0 +1,112 @@ +{ + sysLib, + pkgs, + lib, + config, + ... +}: let + mkProject = project: subproject: + if builtins.isString subproject + then { + name = "${project.name}.${subproject}"; + prefix = null; + } + else let + name = builtins.elemAt (builtins.attrNames subproject) 0; + in { + name = "${project.name}.${name}"; + subprojects = builtins.elemAt (builtins.attrValues subproject) 0; + prefix = null; + }; + + mkProjectName = project: + if builtins.hasAttr "subprojects" project + then + lib.lists.flatten ([project.name] + ++ (builtins.map mkProjectName + (builtins.map (mkProject project) project.subprojects))) + else [project.name]; + projects = lib.lists.unique (lib.lists.naturalSort (lib.lists.flatten (builtins.map mkProjectName (import ../projects {})))); + projects_newline = builtins.concatStringsSep "\n" projects; + projects_comma = builtins.concatStringsSep ", " projects; + projects_pipe = builtins.concatStringsSep "|" projects; + + enforce_policies = sysLib.writeShellScript { + name = "bin"; + src = ./scripts/on-add_enforce-policies.sh; + dependencies = with pkgs; [dash jq taskwarrior gnused gnugrep]; + replacementStrings = { + PROJECTS_NEWLINE = projects_newline; + PROJECTS_COMMA = projects_comma; + }; + }; + track_timewarrior = pkgs.stdenv.mkDerivation { + name = "track_timewarrior.taskwarrior-hook"; + nativeBuildInputs = [ + pkgs.makeWrapper + ]; + buildInputs = [ + pkgs.timewarrior + pkgs.taskwarrior + (pkgs.python3.withPackages (pythonPackages: + with pythonPackages; [ + taskw + ])) + ]; + dontUnpack = true; + installPhase = '' + install -Dm755 ${./scripts/on-modify_track-timewarrior.py} $out/bin/bin + wrapProgram $out/bin/bin \ + --prefix PATH : ${lib.makeBinPath [pkgs.taskwarrior pkgs.timewarrior]} + ''; + }; + track_total_active_time = pkgs.stdenv.mkDerivation { + name = "track_total_active_time.taskwarrior-hook"; + nativeBuildInputs = [ + pkgs.makeWrapper + ]; + buildInputs = [ + pkgs.taskwarrior + (pkgs.python3.withPackages (pythonPackages: + with pythonPackages; [ + taskw + ])) + ]; + dontUnpack = true; + installPhase = '' + install -Dm755 ${./scripts/on-modify_track-total-active-time.py} $out/bin/bin + wrapProgram $out/bin/bin \ + --prefix PATH : ${lib.makeBinPath [pkgs.taskwarrior]} + ''; + }; + + mkSyncGitRepo = type: { + name = "${hookPath}/${type}_sync-git-repo"; + value = { + source = "${sysLib.writeShellScript { + name = "bin"; + src = ./scripts + "/${type}_sync-git-repo.sh"; + dependencies = with pkgs; [dash taskwarrior git]; + }}/bin/bin"; + }; + }; + sync_git_repos = + builtins.listToAttrs (builtins.map mkSyncGitRepo ["on-add" "on-modify"]); + hookPath = config.programs.taskwarrior.config.hooks.location; +in { + options.soispha.taskwarrior.projects = lib.mkOption { + type = lib.types.attrs; + }; + config = { + soispha.taskwarrior.projects = { + inherit projects_newline projects_comma projects projects_pipe; + }; + home.file = + { + "${hookPath}/on-add_enforce-policies".source = "${enforce_policies}/bin/bin"; + "${hookPath}/on-modify_track-timewarrior".source = "${track_timewarrior}/bin/bin"; + "${hookPath}/on-modify_track-total-active-time".source = "${track_total_active_time}/bin/bin"; + } + // sync_git_repos; + }; +} diff --git a/modules/home/conf/taskwarrior/hooks/scripts/on-add_enforce-policies.sh b/modules/home/conf/taskwarrior/hooks/scripts/on-add_enforce-policies.sh new file mode 100755 index 00000000..eaf7f30c --- /dev/null +++ b/modules/home/conf/taskwarrior/hooks/scripts/on-add_enforce-policies.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# override shell lib output to stdout +eprint() { + # shellcheck disable=SC2317 + print "$@" +} +eprintln() { + # shellcheck disable=SC2317 + println "$@" +} + +enable_hook_dbg() { + debug_hooks="$(task _get rc.debug.hooks)" + [ "$debug_hooks" ] && [ "$debug_hooks" -ge 1 ] && dbg_enable +} + +enforce_project() { + project="$(jq '.project' "$(ptmp "$1")")" + [ "$project" = "null" ] && die "No project supplied!" + + if grep -q "^$(echo "$project" | sed 's|"\(.*\)"|\1|')\$" "$(ptmp "%PROJECTS_NEWLINE")"; then + dbg "project('$project') is a valid part of %PROJECTS_COMMA" + else + die "The project '$(echo "$project" | sed 's|"||g')' is not registered with the nix config, registered projects: %PROJECTS_COMMA" + fi +} + +read -r new_task +# We don't change the task, thus immediately return the json +echo "$new_task" + +enable_hook_dbg +enforce_project "$new_task" + +exit 0 + +# vim: ft=sh diff --git a/modules/home/conf/taskwarrior/hooks/scripts/on-add_sync-git-repo.sh b/modules/home/conf/taskwarrior/hooks/scripts/on-add_sync-git-repo.sh new file mode 100755 index 00000000..dadc96b0 --- /dev/null +++ b/modules/home/conf/taskwarrior/hooks/scripts/on-add_sync-git-repo.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# override shell lib output to stdout +eprint() { + # shellcheck disable=SC2317 + print "$@" +} +eprintln() { + # shellcheck disable=SC2317 + println "$@" +} + +enable_hook_dbg() { + debug_hooks="$(task _get rc.debug.hooks)" + [ "$debug_hooks" ] && [ "$debug_hooks" -ge 1 ] && dbg_enable +} + +update_git_repo() { + task_data="$(task _get rc.data.location)" + [ "$task_data" ] || die "Taskwarrior should have a location set" + + cd "$task_data" || die "(BUG?): Your data.location path is not accessable" + + [ -d ./.git/ ] || git init + + git add . + git commit --message="chore: Update" --no-gpg-sign +} + +read -r new_task +# We don't change the task, thus immediately return the json +echo "$new_task" + +enable_hook_dbg +update_git_repo + +exit 0 + +# vim: ft=sh diff --git a/modules/home/conf/taskwarrior/hooks/scripts/on-modify_sync-git-repo.sh b/modules/home/conf/taskwarrior/hooks/scripts/on-modify_sync-git-repo.sh new file mode 100755 index 00000000..25813e46 --- /dev/null +++ b/modules/home/conf/taskwarrior/hooks/scripts/on-modify_sync-git-repo.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# override shell lib output to stdout +eprint() { + # shellcheck disable=SC2317 + print "$@" +} +eprintln() { + # shellcheck disable=SC2317 + println "$@" +} + +enable_hook_dbg() { + debug_hooks="$(task _get rc.debug.hooks)" + [ "$debug_hooks" ] && [ "$debug_hooks" -ge 1 ] && dbg_enable +} + +update_git_repo() { + task_data="$(task _get rc.data.location)" + [ "$task_data" ] || die "Taskwarrior should have a location set" + + cd "$task_data" || die "(BUG?): Your data.location path is not accessable" + + [ -d ./.git/ ] || git init + + git add . + git commit --message="chore: Update" --no-gpg-sign +} + +read -r _old_task +read -r new_task +# We don't change the task, thus immediately return the json +echo "$new_task" + +enable_hook_dbg +update_git_repo + +exit 0 + +# vim: ft=sh diff --git a/modules/home/conf/taskwarrior/hooks/scripts/on-modify_track-timewarrior.py b/modules/home/conf/taskwarrior/hooks/scripts/on-modify_track-timewarrior.py new file mode 100755 index 00000000..b482af6a --- /dev/null +++ b/modules/home/conf/taskwarrior/hooks/scripts/on-modify_track-timewarrior.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://taskwarrior.org/docs +# https://taskwarrior.org/docs/timewarrior +# timew(1) +# task(1) + +"""A Taskwarrior hook to track the time of a active task with Taskwarrior. + +This hook will extract all of the following for use as Timewarrior tags: + +* UUID +* Project +* Tags +* Description +* UDAs + +Note: + This hook requires Python 3 and is only compatible with Taskwarrior version greater or equal to 2.4! + +This hook is a fork from the `official on-modify.timewarrior hook`_. + +.. _`official on-modify.timewarrior hook`: + https://github.com/GothenburgBitFactory/timewarrior/blob/dev/ext/on-modify.timewarrior +""" + +import subprocess +import sys +from json import loads, dumps +from os import system +from sys import stdin +from taskw import TaskWarrior + +# Make no changes to the task, simply observe. +old = loads(stdin.readline()) +new = loads(stdin.readline()) +print(dumps(new)) + + +w = TaskWarrior(config_filename=sys.argv[4].replace("rc:", "")) +config = w.load_config(config_filename=sys.argv[4].replace("rc:", "")) +if "max_active_tasks" in config: + MAX_ACTIVE = int(config["max_active_tasks"]) +else: + MAX_ACTIVE = 1 + + +# Extract attributes for use as tags. +tags = [new["description"]] + +if "project" in new: + project = new["project"] + tags.append(project) + if "." in project: + tags.extend([tag for tag in project.split(".")]) + +if "tags" in new: + tags.extend(new["tags"]) + +combined = " ".join(["'%s'" % tag for tag in tags]).encode("utf-8").strip() + +# Task has been started. +if "start" in new and "start" not in old: + # Prevent this task from starting if "task +ACTIVE count" is greater than "MAX_ACTIVE". + p = subprocess.Popen( + ["task", "+ACTIVE", "status:pending", "count", "rc.verbose:off"], + stdout=subprocess.PIPE, + ) + out, err = p.communicate() + count = int(out.rstrip()) + if count >= MAX_ACTIVE: + print( + "Only %d task(s) can be active at a time. " + "See 'max_active_tasks' in .taskrc." % MAX_ACTIVE + ) + sys.exit(1) + + system("timew start " + combined.decode() + " :yes") + +# Task has been stopped. +elif "start" not in new and "start" in old: + system("timew stop " + combined.decode() + " :yes") + +# Any task that is active, with a non-pending status should not be tracked. +elif "start" in new and new["status"] != "pending": + system("timew stop " + combined.decode() + " :yes") diff --git a/modules/home/conf/taskwarrior/hooks/scripts/on-modify_track-total-active-time.py b/modules/home/conf/taskwarrior/hooks/scripts/on-modify_track-total-active-time.py new file mode 100755 index 00000000..d5b380d0 --- /dev/null +++ b/modules/home/conf/taskwarrior/hooks/scripts/on-modify_track-total-active-time.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://taskwarrior.org/docs +# task(1) + +"""A Taskwarrior hook to track the total active time of a task. + +The tracked time is stored in a UDA task duration attribute named ``totalactivetime`` of type ``duration`` holding the total number of seconds the task was +active. The tracked time can then be included in any report by adding the ``totalactivetime`` column. + +By default, this plugin allows to have one task active at a time. This can be changed by setting ``max_active_tasks`` in ``.taskrc`` to a value greater than +``1``. + +Note: + This hook requires Python 3 and the `taskw`_ package to be installed which provides the python bindings for Taskwarrior! + Also note that this hook is only compatible with Taskwarrior version greater or equal to 2.4! + +This hook is a fork from `kostajh/taskwarrior-time-tracking-hook`_ + +.. _taskw: + https://pypi.python.org/pypi/taskw +.. _kostajh/taskwarrior-time-tracking-hook: + https://github.com/kostajh/taskwarrior-time-tracking-hook +""" + +import datetime +import json +import re +import sys +import subprocess +from taskw import TaskWarrior +from typing import TypeVar + +TIME_FORMAT = "%Y%m%dT%H%M%SZ" +UDA_KEY = "total_active_time" + +w = TaskWarrior(config_filename=sys.argv[4].replace("rc:", "")) +config = w.load_config(config_filename=sys.argv[4].replace("rc:", "")) +if "max_active_tasks" in config: + MAX_ACTIVE = int(config["max_active_tasks"]) +else: + MAX_ACTIVE = 1 + +"""Compiled regular expression for the duration as ISO-8601 formatted string.""" +ISO8601DURATION = re.compile("P((\d*)Y)?((\d*)M)?((\d*)D)?T((\d*)H)?((\d*)M)?((\d*)S)?") + +"""The duration type either as integer (in seconds), as ISO-8601 formatted string ("PT1H10M31S") or the seconds suffixed with "seconds".""" +DurationType = TypeVar("DurationType", str, int) + + +def duration_str_to_time_delta(duration_str: DurationType) -> datetime.timedelta: + """Converts duration string into a timedelta object. + + :param duration_str: The duration + :return: The duration as timedelta object + """ + if duration_str.startswith("P"): + match = ISO8601DURATION.match(duration_str) + if match: + year = match.group(2) + month = match.group(4) + day = match.group(6) + hour = match.group(8) + minute = match.group(10) + second = match.group(12) + value = 0 + if second: + value += int(second) + if minute: + value += int(minute) * 60 + if hour: + value += int(hour) * 3600 + if day: + value += int(day) * 3600 * 24 + if month: + # Assume a month is 30 days for now. + value += int(month) * 3600 * 24 * 30 + if year: + # Assume a year is 365 days for now. + value += int(year) * 3600 * 24 * 365 + else: + value = int(duration_str) + elif duration_str.endswith("seconds"): + value = int(duration_str.rstrip("seconds")) + else: + value = int(duration_str) + return datetime.timedelta(seconds=value) + + +def main(): + original = json.loads(sys.stdin.readline()) + modified = json.loads(sys.stdin.readline()) + + # An active task has just been started. + if "start" in modified and "start" not in original: + # Prevent this task from starting if "task +ACTIVE count" is greater than "MAX_ACTIVE". + p = subprocess.Popen( + ["task", "+ACTIVE", "status:pending", "count", "rc.verbose:off"], + stdout=subprocess.PIPE, + ) + out, err = p.communicate() + count = int(out.rstrip()) + if count >= MAX_ACTIVE: + print( + "Only %d task(s) can be active at a time. " + "See 'max_active_tasks' in .taskrc." % MAX_ACTIVE + ) + sys.exit(1) + + # An active task has just been stopped. + if "start" in original and "start" not in modified: + # Calculate the elapsed time. + start = datetime.datetime.strptime(original["start"], TIME_FORMAT) + end = datetime.datetime.utcnow() + + if UDA_KEY not in modified: + modified[UDA_KEY] = 0 + + this_duration = end - start + total_duration = this_duration + duration_str_to_time_delta( + str(modified[UDA_KEY]) + ) + print( + "Total Time Tracked: %s (%s in this instance)" + % (total_duration, this_duration) + ) + modified[UDA_KEY] = ( + str(int(total_duration.days * (60 * 60 * 24) + total_duration.seconds)) + + "seconds" + ) + + return json.dumps(modified, separators=(",", ":")) + + +def cmdline(): + sys.stdout.write(main()) + + +if __name__ == "__main__": + cmdline() diff --git a/modules/home/conf/taskwarrior/nord.theme b/modules/home/conf/taskwarrior/nord.theme new file mode 100644 index 00000000..2897418f --- /dev/null +++ b/modules/home/conf/taskwarrior/nord.theme @@ -0,0 +1,100 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://taskwarrior.org/docs/themes.html +# task-color(5) +# taskrc(5) + +rule.precedence.color=deleted,completed,active,keyword.,tag.,project.,overdue,scheduled,due.today,due,blocked,blocking,recurring,tagged,uda. + +#+---------+ +#+ General + +#+---------+ +color.label= +color.label.sort= +color.alternate= +color.header=bold blue +color.footnote=cyan +color.warning=bold black on yellow +color.error=bold black on red +color.debug=magenta + +#+-------------+ +#+ Task States + +#+-------------+ +color.completed=green +color.deleted=red +color.active=bold black on cyan +color.recurring= +color.scheduled=white on black +color.until=white on bright black +color.blocked=yellow on black +color.blocking=bold yellow on black + +#+----------+ +#+ Projects + +#+----------+ +color.project.none= + +#+----------+ +#+ Priority + +#+----------+ +color.uda.priority.H=bold cyan +color.uda.priority.M=bold blue +color.uda.priority.L=color245 + +#+------+ +#+ Tags + +#+------+ +color.tag.next= +color.tag.none= +color.tagged= + +#+-----+ +#+ Due + +#+-----+ +color.due=blue +color.due.today=cyan on black +color.overdue=bold red + +#+---------+ +#+ Reports + +#+---------+ +color.burndown.done=bold black on cyan +color.burndown.pending=black on bright cyan +color.burndown.started=black on blue + +color.history.add=bold black on blue +color.history.delete=bright white on bold black +color.history.done=bold black on cyan + +color.summary.background=bright white on black +color.summary.bar=black on cyan + +#+----------+ +#+ Calendar + +#+----------+ +color.calendar.due=bold black on blue +color.calendar.due.today=bold black on cyan +color.calendar.holiday=bold blue on white +color.calendar.overdue=bold black on red +color.calendar.today=bold black on cyan +color.calendar.weekend=bright white on bright black +color.calendar.weeknumber=bold black + +#+-----------------+ +#+ Synchronization + +#+-----------------+ +color.sync.added=green +color.sync.changed=yellow +color.sync.rejected=red + +#+------+ +#+ Undo + +#+------+ +color.undo.after=green +color.undo.before=red diff --git a/modules/home/conf/taskwarrior/projects/default.nix b/modules/home/conf/taskwarrior/projects/default.nix new file mode 100644 index 00000000..4ca941b3 --- /dev/null +++ b/modules/home/conf/taskwarrior/projects/default.nix @@ -0,0 +1,115 @@ +{}: [ + { + name = "me"; + prefix = ""; + subprojects = ["health" "sweden" "bank"]; + } + { + name = "timesinks"; + prefix = ""; + subprojects = ["youtube" "games" "netflix" "music"]; + } + { + name = "input"; + prefix = "research"; + subprojects = ["read-things" "dotfiles"]; + } + { + name = "aoc"; + prefix = "programming/advent_of_code"; + } + { + name = "camera"; + prefix = "programming/zig"; + subprojects = []; + } + { + name = "trinitrix"; + prefix = "programming/rust"; + subprojects = ["testing" "documentation"]; + } + { + name = "serverphone"; + prefix = "programming/rust"; + } + { + name = "presentation"; + prefix = "research"; + } + { + name = "possible-projects"; + prefix = "research"; + } + { + name = "school"; + prefix = "research"; + subprojects = [ + "biologie" + "chemie" + "deutsch" + "english" + "geographie" + "geschichte" + "infomatik" + "klausuren" + "latein" + "mathematik" + "musik" + "philosophie" + "physik" + "sozialkunde" + "sport" + {extern = ["bwinf" "dsa"];} + {chemie = ["facharbeit"];} # TODO: Remove once the ff tabs are cleared <2024-05-10> + ]; + } + { + name = "hardware"; + prefix = "research"; + } + { + name = "buy"; + prefix = "buy"; + subprojects = ["books" "pc"]; + } + { + name = "system"; + prefix = "config"; + subprojects = [ + "youtube" + "backup" + "bar" + "email" + "firefox" + "gpg" + "keyboard" + "laptop" + "nvim" + "rss" + "shell" + "task" + "wm" + ]; + } + { + name = "server"; + prefix = "config"; + subprojects = [ + "b-peetz" + "email" + "blog" + "nix-sync" + "sudo-less" + "ci" + ]; + } + { + name = "3d-printer"; + prefix = "hardware"; + } + { + name = "smartphone"; + prefix = "hardware"; + subprojects = ["airplay" "airdrop"]; + } +] diff --git a/modules/home/conf/timewarrior/default.nix b/modules/home/conf/timewarrior/default.nix new file mode 100644 index 00000000..bcb627f5 --- /dev/null +++ b/modules/home/conf/timewarrior/default.nix @@ -0,0 +1,22 @@ +{pkgs, ...}: { + home.packages = [ + pkgs.timewarrior + ]; + xdg.configFile."timewarrior/timewarrior.cfg".text = '' + # source: https://github.com/arcticicestudio/igloo + #+----+ + #+ UI + + #+----+ + import ${./nord.theme} + color = true + + #+---------+ + #+ Reports + + #+---------+ + define reports: + day: + lines = 10 + month = true + week = true + ''; +} diff --git a/modules/home/conf/timewarrior/nord.theme b/modules/home/conf/timewarrior/nord.theme new file mode 100644 index 00000000..da3c387a --- /dev/null +++ b/modules/home/conf/timewarrior/nord.theme @@ -0,0 +1,25 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://taskwarrior.org/docs/timewarrior/themes.html +# timew(1) + +define theme: + description = "An arctic, north-bluish clean and elegant Timewarrior theme." + colors: + exclusion = "bold black" + today = "cyan" + holiday = "bold blue on white" + label = "bold white on black" + ids = "bold black on cyan" + debug = "magenta" + + # Rotating color palette for tags. + palette: + color01 = "bold black on cyan" + color02 = "bold black on bright cyan" + color03 = "bold black on blue" diff --git a/modules/home/conf/tridactyl/config.vim b/modules/home/conf/tridactyl/config.vim new file mode 100644 index 00000000..84e290cb --- /dev/null +++ b/modules/home/conf/tridactyl/config.vim @@ -0,0 +1,47 @@ +" vim: filetype=vim + +" This wipes all existing settings. This means that if a setting in this file +" is removed, then it will return to default. In other words, this file serves +" as an enforced single point of truth for Tridactyl's configuration. +sanitize tridactyllocal tridactylsync + +" Just use a blank page for new tab. It would be nicer to use the standard +" Firefox homepage, but Tridactyl doesn't support this yet. +"TODO: use custome file +"set newtab file:///home/soispha/new.html + +" Set a nice colorscheme +colorscheme midnight + +" Delete temp files after use +alias editor_rm composite editor | jsb -p tri.native.run(`rm -f '${JS_ARG[0]}'`) +bind --mode=insert editor_rm +bind --mode=input editor_rm + +" Use vim in tmux for editor. +set editorcmd alacritty -e nvim + +" Ctrl-F should use the browser's native 'find' functionality. +unbind + +" But also support Tridactyl search too. +bind / fillcmdline find +bind ? fillcmdline find -? +bind l findnext 1 +bind L findnext -1 +" Remove search highlighting. +bind , nohlsearch +" Use sensitive case. Smart case would be nice here, but it doesn't work. +set findcase smartcase + +" Smooth scrolling, yes please. This is still a bit janky in Tridactyl. +set smoothscroll true + +" The default jump of 10 is a bit much. +bind t scrollline 5 +bind n scrollline -5 + +" K and J should move between tabs. x should close them. +bind T tabprev +bind N tabnext +bind x tabclose diff --git a/modules/home/conf/tridactyl/default.nix b/modules/home/conf/tridactyl/default.nix new file mode 100644 index 00000000..23307cfe --- /dev/null +++ b/modules/home/conf/tridactyl/default.nix @@ -0,0 +1,3 @@ +{...}: { + xdg.configFile."tridactyl/tridactylrc".source = ./config.vim; +} diff --git a/modules/home/conf/unison/default.nix b/modules/home/conf/unison/default.nix new file mode 100644 index 00000000..64dd50c2 --- /dev/null +++ b/modules/home/conf/unison/default.nix @@ -0,0 +1,184 @@ +{ + lib, + config, + nixosConfig, + sysLib, + pkgs, + ... +}: let + unisonPath = "${config.xdg.dataHome}/unison"; + + # These are only used for the script + unisonOptions = { + sshcmd = "ssh"; + ui = "text"; + auto = "true"; + # This is useless, with hm links + links = "false"; + + backupdir = "${unisonPath}/backups"; + backuploc = "central"; + backupcurr = paths_to_merge; + # merge = + # builtins.map (x: ''${x} -> diff3 --text --merge CURRENT1 CURRENTARCH CURRENT2 > NEW'') + # paths_to_merge; + }; + + paths_to_merge = mkPathName { + file_names = ["log" "history" "harpoon.json" "file_frecency.bin" "main.shada"]; + extensions = ["log"]; + }; + + paths_to_keep = [ + "~/.local/state/mpv" + "~/.local/state/nvim" + "~/.local/share" + "~/.local/.Trash-1000" + + "~/.mozilla/.Trash-1000" + "~/.mozilla/firefox" + + "~/media" + "~/school" + "~/repos" + ]; + paths_to_ignore = [ + # already synchronized by the taskserver + "~/.local/share/task" + + # Should not be synchronized + "~/.local/share/unison" + ]; + + hostName = let + hn = nixosConfig.networking.hostName; + in + if hn == "tiamat" + then "apzu" + else if hn == "apzu" + then "tiamat" + else builtins.throw "Host (${hn}) not yet covered in the unison host mapping."; + + mkPathName = { + file_names, + extensions, + }: + builtins.map (x: ''Name ${x}'') ( + (builtins.map (x: ''*.${x}'') extensions) + ++ file_names + ); + + unitName = name: builtins.replaceStrings ["/"] ["-"] name; + + mkPath = path: + if lib.strings.hasPrefix "~" path + then "${builtins.elemAt (builtins.attrNames config.home.persistence) + 0}${lib.strings.removePrefix "~" path}" + else + builtins.throw + "Every pathname needs to start with a '~'"; + + mkPair = pathname: let + path = mkPath pathname; + in { + name = unitName "${pathname}"; + value = { + stateDirectory = unisonPath; + roots = [ + "${path}" + "ssh://${config.home.username}@${hostName}.fritz.box/${path}" + ]; + }; + }; + + getIgnoredSingle = path: path_to_ignore: let + clean_path_to_ignore = mkPath path_to_ignore; + commonPath = builtins.substring 0 (builtins.stringLength path) clean_path_to_ignore; + in + if commonPath == path + then let + preFinalPath = + builtins.substring (builtins.stringLength commonPath) + (builtins.stringLength clean_path_to_ignore) + clean_path_to_ignore; + finalPath = + if lib.strings.hasPrefix "/" preFinalPath + then lib.strings.removePrefix "/" preFinalPath + else preFinalPath; + in "BelowPath ${finalPath}" + else null; + + getIgnored = paths_to_ignore: path: + serialiseArgs { + ignore = + builtins.filter (x: x != null) (builtins.map (getIgnoredSingle path) paths_to_ignore); + }; + + serialiseArg = key: val: + if builtins.typeOf val == "string" + then lib.strings.escapeShellArg "-${key}=${lib.strings.escape ["="] val}" + else if builtins.typeOf val == "list" + then lib.strings.concatStringsSep " " (builtins.map (serialiseArg key) val) + else builtins.throw "Unsupported type: ${builtins.typeOf val}"; + + serialiseArgs = args: + lib.strings.concatStringsSep " " ( + lib.attrsets.mapAttrsToList + serialiseArg + args + ); + + esa = a: lib.strings.escapeShellArg a; + + mkScriptLine = pathname: let + path = + mkPath pathname; + in + lib.strings.concatStringsSep " " [ + "unison" + "${serialiseArgs unisonOptions}" + "$EXTRA_OPTIONS" + "${getIgnored paths_to_ignore path}" + "${esa path}" + (esa "ssh://${config.home.username}@${hostName}.fritz.box/${path}") + ]; + + script = lib.strings.concatStringsSep "\n" (builtins.map mkScriptLine paths_to_keep); + + pairs = builtins.listToAttrs (builtins.map mkPair paths_to_keep); +in { + home.sessionVariables = { + UNISON = unisonPath; + }; + home.packages = [ + pkgs.unison + (sysLib.writeShellScript { + name = "unison-sync"; + src = builtins.toFile "unison-backup" ('' + #!/usr/bin/env dash + + # shellcheck source=/dev/null + SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + + export UNISON=${esa unisonPath}; + + if [ "$1" = "links" ]; then + shift 1; + EXTRA_OPTIONS="-links=true"; + fi + EXTRA_OPTIONS="$EXTRA_OPTIONS $*" + '' + + script); + dependencies = with pkgs; [ + unison + openssh # needed to connect to the other server + less # needed to show diffs + diffutils # needed to compute diffs + ]; + }) + ]; + services.unison = { + enable = false; + inherit pairs; + }; +} diff --git a/modules/home/conf/xdg/default.nix b/modules/home/conf/xdg/default.nix new file mode 100644 index 00000000..4099720d --- /dev/null +++ b/modules/home/conf/xdg/default.nix @@ -0,0 +1,63 @@ +{ + sysLib, + pkgs, + config, + ... +}: let + url_handler = sysLib.writeShellScript { + name = "url_handler"; + src = ./url_handler.sh; + keepPath = true; + # Naming dependencies for this will be difficult, as it depend on overridden packages. + dependencies = with pkgs; [ + rofi + libnotify + zathura + ]; + replacementStrings = { + ALL_PROJECTS_PIPE = "${config.soispha.taskwarrior.projects.projects_pipe}"; + }; + }; +in { + imports = [ + ./xdg_vars.nix + ]; + + xdg = { + mimeApps = { + enable = true; + defaultApplications = { + "application/pdf" = ["url_handler.desktop"]; + "application/x-pdf" = ["url_handler.desktop"]; + + "text/html" = ["url_handler.desktop"]; + "text/xml" = ["url_handler.desktop"]; + "x-scheme-handler/http" = ["url_handler.desktop"]; + "x-scheme-handler/https" = ["url_handler.desktop"]; + "x-scheme-handler/about" = ["url_handler.desktop"]; + "x-scheme-handler/unknown" = ["url_handler.desktop"]; + }; + }; + desktopEntries = { + url_handler = { + name = "url_handler"; + genericName = "Web Browser"; + exec = "${url_handler}/bin/url_handler %u"; + terminal = false; + categories = [ + "Application" + "Network" + "WebBrowser" + ]; + mimeType = [ + "text/html" + "text/xml" + "x-scheme-handler/http" + "x-scheme-handler/https" + "x-scheme-handler/about" + "x-scheme-handler/unknown" + ]; + }; + }; + }; +} diff --git a/modules/home/conf/xdg/url_handler.sh b/modules/home/conf/xdg/url_handler.sh new file mode 100755 index 00000000..95eedffb --- /dev/null +++ b/modules/home/conf/xdg/url_handler.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +project="$(echo "%ALL_PROJECTS_PIPE|nvim|zathura|" | rofi -sep "|" -dmenu)" + +if [ "$project" = "nvim" ]; then + "$TERMINAL" -e nvim "$1" +elif [ "$project" = "zathura" ]; then + zathura "$1" +elif [ "$project" ]; then + firefox -P "$project" "$1" +else + notify-send "(URL HANDLER) No project selected" && exit 1 +fi + +# vim: ft=sh diff --git a/modules/home/conf/xdg/xdg_vars.nix b/modules/home/conf/xdg/xdg_vars.nix new file mode 100644 index 00000000..3f7d5e00 --- /dev/null +++ b/modules/home/conf/xdg/xdg_vars.nix @@ -0,0 +1,26 @@ +{config, ...}: let + inherit (config.xdg) dataHome; +in { + # Variables that only have to be set because special applications fail to set reasonable + # defaults (mostly understandable because of backwards-compatibility, but yeah) + programs.zsh.sessionVariables = { + CARGO_HOME = "${dataHome}/cargo"; + GRADLE_USER_HOME = "${dataHome}/gradle"; + + #_JAVA_OPTIONS = lib.concatStringsSep " " [ + # ''-Djava.util.prefs.userRoot="${config.xdg.configHome}/java"'' + # ''-Djavafx.cachedir="${config.xdg.cacheHome}/openjfx"'' + # ]; + #GOPATH = "${config.xdg.dataHome}/go"; + #GTK2_RC_FILES = "${config.xdg.configHome}/gtk-2.0/gtkrc"; + #RUSTUP_HOME = "${config.xdg.dataHome}/rustup"; + #NPM_CONFIG_USERCONFIG = "${config.xdg.configHome}/npm/npmrc"; + #NUGET_PACKAGES = "${config.xdg.cacheHome}/NuGetPackages"; + #XAUTHORITY = "${config.xdg.stateHome}/Xauthority"; + #COMPDUMPFILE = "${config.xdg.dataHome}/zsh/.zcompdump}"; + #IPYTHONDIR = "${config.xdg.configHome}/ipython"; + #PARALLEL_HOME = "${config.xdg.configHome}/parallel"; + #STACK_XDG = "1"; + #WINEPREFIX = "${config.xdg.dataHome}/wine"; + }; +} diff --git a/modules/home/conf/yambar/config/config.yml b/modules/home/conf/yambar/config/config.yml new file mode 100644 index 00000000..3d9f0687 --- /dev/null +++ b/modules/home/conf/yambar/config/config.yml @@ -0,0 +1,243 @@ +--- +# Config file for yambar +# Note that this may be version-dependent, this file is written for v1.8.0 + + +# Font anchors +font-main: &fontmain Source Code Pro:pixelsize=26 +font-aws: &awesome Font Awesome 5 Free:style=solid:pixelsize=23 + +# Color anchors +fg-none: &fgnone 00000000 +fg-1: &fg1 c6ceefff +fg-blue: &fgblue 99d1dbff +fg-sapphire: &fgsapp 74c7ecdd +fg-green: &fggreen a6e3a1dd +fg-peach: &fgpeach fab387dd +fg-mauve: &fgmauve cba6f7dd +fg-teal: &fgteal 94e2d5dd +fg-lavendar: &fglav b4befedd +fg-focus: &fgfocus e78284ff +bg-1: &bg1 303446ff +bg-tag: &bgtag 585b70ff +bg-tag2: &bgtag2 45475aff +bg-urgent: &bgurgent e78284ff + +# Background blocks +background-block: &bgcblock {background: {color: *bg1 }} +background-block-urgent: &bgcurg {background: {color: *bgurgent }} + +# Underlines +underline-focused: &line {underline: { size: 3, color: *fgfocus}} +underline-urgent: &lineurgent {underline: { size: 3, color: *fgblue}} +underline-utils: &lineutil {underline: { size: 3, color: *fgpeach}} +underline-resources: &linemem {underline: { size: 3, color: *fggreen}} +underline-battery: &linebat {underline: { size: 3, color: *fgsapp}} +underline-clock: &lineclock {underline: { size: 3, color: *fgteal}} +underline-weather: &linewea {underline: { size: 3, color: *fglav}} +underline-title: &linetitle {underline: { size: 3, color: *bgtag}} + +# Combined decorations +combination-utils: &combutil {stack: [ <<: *bgcblock, <<: *lineutil]} +combination-resources: &combmem {stack: [ <<: *bgcblock, <<: *linemem]} +combination-battery: &combbat {stack: [ <<: *bgcblock, <<: *linebat]} +combination-clock: &combclock {stack: [ <<: *bgcblock, <<: *lineclock]} +combination-weather: &combwea {stack: [ <<: *bgcblock, <<: *linewea]} + + +### Main + +bar: + location: top + height: 45 + layer: bottom + spacing: 0 + margin: 10 + border: {margin: 0, top-margin: 10} + foreground: *fg1 + background: *fgnone + font: *fontmain + + ### Left, river tags + left: + - river: + anchors: + - id: &name { text: "{id}" } + - string: &focus { stack: [ {background: {color: *bg1}} ] } + - string: &normal { string: { <<: *name, margin: 10 } } + - string: + &occupied { string: { <<: *name, deco: {background: {color: *bgtag2}}, margin: 10 } } + - string: &urgent { string: { <<: *name, deco: {stack: [background: {color: *bgurgent}, <<: *lineurgent]}, margin: 10 } } + - string: &focused { string: { <<: *name, deco: {stack: [background: {color: *bgtag}, <<: *line]}, margin: 10 } } + - string: &unfocused { string: { <<: *name, deco: {background: {color: *bgtag2}}, margin: 10 } } + - base: &river_base + default: *normal + conditions: + state == focused: *focused + state == unfocused: *unfocused + state == urgent: *urgent + state == invisible: + map: + conditions: + occupied: *occupied + ~occupied: *normal + content: + map: + on-click: + left: sh -c "riverctl set-focused-tags $((1 << ({id} - 1)))" + right: sh -c "riverctl toggle-focused-tags $((1 << ({id} -1)))" + middle: sh -c "riverctl toggle-view-tags $((1 << ({id} -1)))" + conditions: + id == 1: { map: { <<: *river_base } } + id == 2: { map: { <<: *river_base } } + id == 3: { map: { <<: *river_base } } + id == 4: { map: { <<: *river_base } } + id == 5: { map: { <<: *river_base } } + id == 6: { map: { <<: *river_base } } + id == 7: { map: { <<: *river_base } } + id == 8: { map: { <<: *river_base } } + id == 9: { map: { <<: *river_base } } + title: + map: + default: + { + string: + { + text: "{title}", + left-margin: 12, + right-margin: 12, + # max: 35, + deco: *linetitle + }, + } + conditions: + title == "": { string: { text: "" } } + + ### Center, clock & weather gadget + center: + - clock: + time-format: "%H:%M:%S %Z" + date-format: "%d/%m/%y (%a)" + foreground: *fgblue + content: + string: + text: " {date} {time} " + deco: *combclock + + ### Right, system tray + right: + #- network: + # name: wlp5s0 + # poll-interval: 10 + # content: + # map: + # on-click: /bin/sh -c "nmtui" + # conditions: + # ~carrier: {empty: {}} + # carrier: + # string: {text: "  {ssid} ", deco: *combutil} + #- network: + # name: enp4s0 + # content: + # map: + # on-click: /bin/sh -c "nmtui" + # conditions: + # ~carrier: + # string: {text: "  Eth failed ", deco: *combutil} + # carrier: {empty: {}} + + - script: # mpd song name + path: @mpd_song_name_script@ + content: + map: + conditions: + playing: + string: {text: "{song} ", deco: *combwea} + ~playing: + string: {text: "", deco: *combwea} + - script: # Sound volume + path: @volume_script@ + content: + map: + on-click: /bin/sh -c "pavucontrol" + conditions: + muted: + string: + text: " 󰝟 " + deco: *bgcurg + ~muted: + string: {text: "  {volume}% ", deco: *combutil} + + # - script: # Grade average + # path: @grade_average_script@ + # content: + # string: + # text: "  {grade} " + # deco: *combmem + + #- backlight: + # name: intel_backlight + # content: + # - string: {text: "  {percent}% ", deco: *combutil} + + - script: # CPU + path: @cpu_script@ + content: + string: + text: "  {cpu}% " + deco: *combmem + + - script: # Memory info + path: @memory_script@ + content: + map: + conditions: + swapstate: + string: + text: "  {memperc}%({swapperc}%) " + deco: *combmem + ~swapstate: + string: + text: "  {memperc}% " + deco: *combmem + - script: # Disk space + path: @disk_script@ + content: + string: + text: " 󰋊 {diskspace}({diskperc})" + deco: *combmem + #- battery: + # name: BAT0 + # poll-interval: 30 + # content: + # list: + # items: + # - ramp: + # tag: capacity + # items: + # - string: + # text: "  {capacity}%({estimate}) " + # deco: *bgcurg + # - string: + # text: "  {capacity}%({estimate}) " + # deco: {stack: [ <<: *bgcblock, <<: *linebat]} + # - string: + # text: "  {capacity}%({estimate}) " + # deco: {stack: [ <<: *bgcblock, <<: *linebat]} + # - string: + # text: "  {capacity}%({estimate}) " + # deco: {stack: [ <<: *bgcblock, <<: *linebat]} + # - string: + # text: "  {capacity}%({estimate}) " + # deco: {stack: [ <<: *bgcblock, <<: *linebat]} + #- script: # tray + # path: /home/dt/.config/yambar/scripts/yambar-tray + # content: + # empty: {} + #- script: + # path: /home/dt/.config/yambar/scripts/yambar-tray-width + # poll-interval: 10 + # content: + # string: + # text: "{padding}" + # deco: *combmem diff --git a/modules/home/conf/yambar/config/laptop.yml b/modules/home/conf/yambar/config/laptop.yml new file mode 100644 index 00000000..8de2f508 --- /dev/null +++ b/modules/home/conf/yambar/config/laptop.yml @@ -0,0 +1,243 @@ +--- +# Config file for yambar +# Note that this may be version-dependent, this file is written for v1.8.0 + + +# Font anchors +font-main: &fontmain Source Code Pro:pixelsize=22 +font-aws: &awesome Font Awesome 5 Free:style=solid:pixelsize=20 + +# Color anchors +fg-none: &fgnone 00000000 +fg-1: &fg1 c6ceefff +fg-blue: &fgblue 99d1dbff +fg-sapphire: &fgsapp 74c7ecdd +fg-green: &fggreen a6e3a1dd +fg-peach: &fgpeach fab387dd +fg-mauve: &fgmauve cba6f7dd +fg-teal: &fgteal 94e2d5dd +fg-lavendar: &fglav b4befedd +fg-focus: &fgfocus e78284ff +bg-1: &bg1 303446ff +bg-tag: &bgtag 585b70ff +bg-tag2: &bgtag2 45475aff +bg-urgent: &bgurgent e78284ff + +# Background blocks +background-block: &bgcblock {background: {color: *bg1 }} +background-block-urgent: &bgcurg {background: {color: *bgurgent }} + +# Underlines +underline-focused: &line {underline: { size: 3, color: *fgfocus}} +underline-urgent: &lineurgent {underline: { size: 3, color: *fgblue}} +underline-utils: &lineutil {underline: { size: 3, color: *fgpeach}} +underline-resources: &linemem {underline: { size: 3, color: *fggreen}} +underline-battery: &linebat {underline: { size: 3, color: *fgsapp}} +underline-clock: &lineclock {underline: { size: 3, color: *fgteal}} +underline-weather: &linewea {underline: { size: 3, color: *fglav}} +underline-title: &linetitle {underline: { size: 3, color: *bgtag}} + +# Combined decorations +combination-utils: &combutil {stack: [ <<: *bgcblock, <<: *lineutil]} +combination-resources: &combmem {stack: [ <<: *bgcblock, <<: *linemem]} +combination-battery: &combbat {stack: [ <<: *bgcblock, <<: *linebat]} +combination-clock: &combclock {stack: [ <<: *bgcblock, <<: *lineclock]} +combination-weather: &combwea {stack: [ <<: *bgcblock, <<: *linewea]} + + +### Main + +bar: + location: top + height: 25 + layer: bottom + spacing: 0 + margin: 10 + border: {margin: 0, top-margin: 5} + foreground: *fg1 + background: *fgnone + font: *fontmain + + ### Left, river tags + left: + - river: + anchors: + - id: &name { text: "{id}" } + - string: &focus { stack: [ {background: {color: *bg1}} ] } + - string: &normal { string: { <<: *name, margin: 10 } } + - string: + &occupied { string: { <<: *name, deco: {background: {color: *bgtag2}}, margin: 10 } } + - string: &urgent { string: { <<: *name, deco: {stack: [background: {color: *bgurgent}, <<: *lineurgent]}, margin: 10 } } + - string: &focused { string: { <<: *name, deco: {stack: [background: {color: *bgtag}, <<: *line]}, margin: 10 } } + - string: &unfocused { string: { <<: *name, deco: {background: {color: *bgtag2}}, margin: 10 } } + - base: &river_base + default: *normal + conditions: + state == focused: *focused + state == unfocused: *unfocused + state == urgent: *urgent + state == invisible: + map: + conditions: + occupied: *occupied + ~occupied: *normal + content: + map: + on-click: + left: sh -c "riverctl set-focused-tags $((1 << ({id} - 1)))" + right: sh -c "riverctl toggle-focused-tags $((1 << ({id} -1)))" + middle: sh -c "riverctl toggle-view-tags $((1 << ({id} -1)))" + conditions: + id == 1: { map: { <<: *river_base } } + id == 2: { map: { <<: *river_base } } + id == 3: { map: { <<: *river_base } } + id == 4: { map: { <<: *river_base } } + id == 5: { map: { <<: *river_base } } + id == 6: { map: { <<: *river_base } } + id == 7: { map: { <<: *river_base } } + id == 8: { map: { <<: *river_base } } + id == 9: { map: { <<: *river_base } } + title: + map: + default: + { + string: + { + text: "{title}", + left-margin: 12, + right-margin: 12, + # max: 35, + deco: *linetitle + }, + } + conditions: + title == "": { string: { text: "" } } + + ### Center, clock & weather gadget + center: + - clock: + time-format: "%H:%M:%S %Z" + date-format: "%d/%m/%y (%a)" + foreground: *fgblue + content: + string: + text: " {date} {time} " + deco: *combclock + + ### Right, system tray + right: + #- network: + # name: wlp5s0 + # poll-interval: 10 + # content: + # map: + # on-click: /bin/sh -c "nmtui" + # conditions: + # ~carrier: {empty: {}} + # carrier: + # string: {text: "  {ssid} ", deco: *combutil} + #- network: + # name: enp4s0 + # content: + # map: + # on-click: /bin/sh -c "nmtui" + # conditions: + # ~carrier: + # string: {text: "  Eth failed ", deco: *combutil} + # carrier: {empty: {}} + + - script: # mpd song name + path: @mpd_song_name_script@ + content: + map: + conditions: + playing: + string: {text: "{song} ", deco: *combwea} + ~playing: + string: {text: "", deco: *combwea} + - script: # Sound volume + path: @volume_script@ + content: + map: + on-click: /bin/sh -c "pavucontrol" + conditions: + muted: + string: + text: " 󰝟 " + deco: *bgcurg + ~muted: + string: {text: "  {volume}% ", deco: *combutil} + + # - script: # Grade average + # path: @grade_average_script@ + # content: + # string: + # text: "  {grade} " + # deco: *combmem + + - backlight: + name: @backlight@ + content: + - string: {text: "  {percent}% ", deco: *combutil} + + - script: # CPU + path: @cpu_script@ + content: + string: + text: "  {cpu}% " + deco: *combmem + + - script: # Memory info + path: @memory_script@ + content: + map: + conditions: + swapstate: + string: + text: "  {memperc}%({swapperc}%) " + deco: *combmem + ~swapstate: + string: + text: "  {memperc}% " + deco: *combmem + - script: # Disk space + path: @disk_script@ + content: + string: + text: " 󰋊 {diskspace}({diskperc})" + deco: *combmem + - battery: + name: BAT0 + poll-interval: 300 + content: + list: + items: + - ramp: + tag: capacity + items: + - string: + text: "  {capacity}%({estimate}) " + deco: *bgcurg + - string: + text: "  {capacity}%({estimate}) " + deco: {stack: [ <<: *bgcblock, <<: *linebat]} + - string: + text: "  {capacity}%({estimate}) " + deco: {stack: [ <<: *bgcblock, <<: *linebat]} + - string: + text: "  {capacity}%({estimate}) " + deco: {stack: [ <<: *bgcblock, <<: *linebat]} + - string: + text: "  {capacity}%({estimate}) " + deco: {stack: [ <<: *bgcblock, <<: *linebat]} + #- script: # tray + # path: /home/dt/.config/yambar/scripts/yambar-tray + # content: + # empty: {} + #- script: + # path: /home/dt/.config/yambar/scripts/yambar-tray-width + # poll-interval: 10 + # content: + # string: + # text: "{padding}" + # deco: *combmem diff --git a/modules/home/conf/yambar/default.nix b/modules/home/conf/yambar/default.nix new file mode 100644 index 00000000..021dfbdd --- /dev/null +++ b/modules/home/conf/yambar/default.nix @@ -0,0 +1,52 @@ +{ + nixosConfig, + sysLib, + system, + pkgs, + yambar_cpu, + yambar_memory, + ... +}: let + makeScript = { + name, + dependencies, + ... + }: + sysLib.writeShellScript { + inherit name; + src = ./scripts/${name}.sh; + dependencies = dependencies ++ (builtins.attrValues {inherit (pkgs) dash;}); + } + + "/bin/${name}"; +in { + xdg.configFile."yambar/config.yml".source = pkgs.substituteAll { + src = + if nixosConfig.soispha.laptop.enable + then ./config/laptop.yml + else ./config/config.yml; + + backlight = + if nixosConfig.soispha.laptop.enable + then nixosConfig.soispha.laptop.backlight + else ""; + + mpd_song_name_script = makeScript { + dependencies = builtins.attrValues {inherit (pkgs) mpc-cli;}; + name = "mpd_song_name"; + }; + + volume_script = makeScript { + dependencies = builtins.attrValues {inherit (pkgs) pulseaudio gawk coreutils;}; + name = "sound-volume"; + }; + + cpu_script = yambar_cpu.app.${system}.default.program; + + memory_script = yambar_memory.app.${system}.default.program; + + disk_script = makeScript { + dependencies = builtins.attrValues {inherit (pkgs) gawk btrfs-progs coreutils;}; + name = "disk"; + }; + }; +} diff --git a/modules/home/conf/yambar/scripts/disk.sh b/modules/home/conf/yambar/scripts/disk.sh new file mode 100755 index 00000000..a5547a74 --- /dev/null +++ b/modules/home/conf/yambar/scripts/disk.sh @@ -0,0 +1,21 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +# Main loop +while true; do + # vars + used_space=$(btrfs filesystem usage /srv 2>/dev/null | awk '{if ( /Used:/ ) { print $2 } } ' | head -n1) + all_space=$(btrfs filesystem usage /srv 2>/dev/null | awk '{if ( /Device size:/ ) { print $3 } } ' | head -n1 | tr -d "GiB") + + # Check space available (4) and percentage used (5) + spaceperc=$(echo "$(echo "$used_space" | tr -d "GiB")" "$all_space" | awk '{div=$1/$2;div *= 100; printf"%2d%%\n",div }') + + echo "diskspace|string|$used_space" + echo "diskperc|string|$spaceperc" + echo "" + sleep 1 +done + +# vim: ft=sh diff --git a/modules/home/conf/yambar/scripts/mpd_song_name.sh b/modules/home/conf/yambar/scripts/mpd_song_name.sh new file mode 100755 index 00000000..7d294781 --- /dev/null +++ b/modules/home/conf/yambar/scripts/mpd_song_name.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +while true; do + state="$(mpc status '%state%')" + + if [ "$state" = "playing" ]; then + song="$(mpc --format '[[%artist% - ]%title%]|[%file%]' current)" + echo "playing|bool|true" + echo "song|string|$song :: $(mpc status "%currenttime%/%totaltime%")" + else + echo "playing|bool|false" + fi + echo "" # commit + + sleep 2 +done + +# vim: ft=sh diff --git a/modules/home/conf/yambar/scripts/network.sh b/modules/home/conf/yambar/scripts/network.sh new file mode 100755 index 00000000..adfc93df --- /dev/null +++ b/modules/home/conf/yambar/scripts/network.sh @@ -0,0 +1,47 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +retest=120 +retest_if_con_fails=10 +backend=nmcli + +case "$backend" in +"nmcli") # Test for connectivity with nmcli + while true; do + connection_status=$(nmcli networking connectivity) + if [ "$connection_status" = "full" ]; then + echo "internet|string|Connected" + echo "" + sleep $retest + else + echo "internet|string|Disconnected" + echo "" + sleep $retest_if_con_fails + fi + done + ;; +"ping") # Test for connectivity with ping + ip_address='8.8.8.8' + ping_number=3 + + while true; do + + ping_result=$(mktmp) + ping $ip_address -c $ping_number -q | awk 'BEGIN {FS="/"} END {print $5}' >"$ping_result" + + if [ "$(wc -l <"$ping_result")" -eq 0 ]; then + echo "med|string|No connection" + echo "" + sleep $retest_if_con_fails + else + echo "med|string|$(cat "$ping_result") ms" + echo "" + sleep $retest + fi + done + ;; +esac + +# vim: ft=sh diff --git a/modules/home/conf/yambar/scripts/sound-volume.sh b/modules/home/conf/yambar/scripts/sound-volume.sh new file mode 100755 index 00000000..8a98daf7 --- /dev/null +++ b/modules/home/conf/yambar/scripts/sound-volume.sh @@ -0,0 +1,20 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +while true; do + volume="$(pactl get-sink-volume 0 | awk 'BEGIN { FS="/" } {gsub("%","",$2); gsub(" ","",$2)} {printf $2}')" + + if [ "$volume" -eq 0 ]; then + echo "muted|bool|true" + else + echo "volume|string|$volume" + echo "muted|bool|false" + fi + echo "" + + sleep 3 +done + +# vim: ft=sh diff --git a/modules/home/conf/ytcc/default.nix b/modules/home/conf/ytcc/default.nix new file mode 100644 index 00000000..87300ec1 --- /dev/null +++ b/modules/home/conf/ytcc/default.nix @@ -0,0 +1,11 @@ +{ + config, + pkgs, + ... +}: { + xdg.configFile."ytcc/ytcc.conf".source = pkgs.substituteAll { + src = ./ytcc.conf; + download_dir = "${config.xdg.userDirs.download}/ytcc"; + xdg_data_home = config.xdg.dataHome; + }; +} diff --git a/modules/home/conf/ytcc/ytcc.conf b/modules/home/conf/ytcc/ytcc.conf new file mode 100644 index 00000000..289843ad --- /dev/null +++ b/modules/home/conf/ytcc/ytcc.conf @@ -0,0 +1,37 @@ +[ytcc] +download_dir = @download_dir@ +mpv_flags = --really-quiet --ytdl --ytdl-format=bestvideo[height<=?1080]+bestaudio/best --speed=2.7 +download_subdirs = true +order_by = playlists:asc, publish_date:desc +video_attrs = id, title, publish_date, duration, playlists +playlist_attrs = name, url, tags, reverse +db_path = @xdg_data_home@/ytcc/ytcc.db +date_format = %Y-%m-%d +max_update_fail = 5 +max_update_backlog = 20 +age_limit = 0 + +[tui] +alphabet = sdfervghnuiojkl +default_action = play_video + +[theme] +prompt_download_audio = 2 +prompt_download_video = 4 +prompt_play_audio = 2 +prompt_play_video = 4 +prompt_mark_watched = 1 +table_alternate_background = 245 +plain_label_text = 244 + +[youtube_dl] +format = bestvideo[height<=?1080]+bestaudio/best +output_template = %(title)s.%(ext)s +ratelimit = 0 +retries = 0 +subtitles = off +thumbnail = true +skip_live_stream = true +merge_output_format = mkv +max_duration = 0 +restrict_filenames = false diff --git a/modules/home/conf/zsh/config/command_not_found.sh b/modules/home/conf/zsh/config/command_not_found.sh new file mode 100644 index 00000000..fb21b676 --- /dev/null +++ b/modules/home/conf/zsh/config/command_not_found.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env dash + +# This was taken from the +# `${pkgs.nix-index}/etc/profile.d/command-not-found.sh` file on 2024-02-28 + +# for bash 4 +# this will be called when a command is entered +# but not found in the user’s path + environment +command_not_found_handle() { + # taken from http://www.linuxjournal.com/content/bash-command-not-found + # - do not run when inside Midnight Commander or within a Pipe + if [ -n "${MC_SID-}" ] || ! [ -t 1 ]; then + >&2 echo "$1: command not found" + return 127 + fi + + toplevel=nixpkgs # nixpkgs should always be available even in NixOS + cmd="$1" + attrs=$(nix-locate --minimal --no-group --type x --type s --top-level --whole-name --at-root "/bin/$cmd") + len=$(if [ -n "$attrs" ]; then echo "$attrs" | wc -l; else echo 0; fi) + + case "$len" in + 0) + eprintln "$cmd: command not found" + ;; + 1) + # If only one package provides this, then we can invoke it + # without asking the user. + + # These will not return 127 if they worked correctly. + + >&2 cat <&2 cat <&2 cat <&2 + fi +} + +function_exists() { + # Zsh returns 0 even on non existing functions with -F so use -f + declare -f "$1" >/dev/null + return $? +} + +# +# The idea below is to copy any existing handlers to another function +# name and insert the message in front of the old handler in the +# new handler. By default, neither bash or zsh has has a handler function +# defined, so the default behaviour is replicated. +# +# Also, ensure the handler is only copied once. If we do not ensure this +# the handler would add itself recursively if this file happens to be +# sourced multiple times in the same shell, resulting in a neverending +# stream of messages. +# + +# +# Zsh +# +if function_exists command_not_found_handler; then + if ! function_exists orig_command_not_found_handler; then + eval "orig_$(declare -f command_not_found_handler)" + fi +else + orig_command_not_found_handler() { + printf "zsh: command not found: %s\n" "$1" >&2 + return 127 + } +fi + +command_not_found_handler() { + print_message + orig_command_not_found_handler "$@" +} + +# +# Bash +# +if function_exists command_not_found_handle; then + if ! function_exists orig_command_not_found_handle; then + eval "orig_$(declare -f command_not_found_handle)" + fi +else + orig_command_not_found_handle() { + printf "%s: %s: command not found\n" "$0" "$1" >&2 + return 127 + } +fi + +command_not_found_handle() { + print_message + orig_command_not_found_handle "$@" +} diff --git a/modules/home/conf/zsh/config/custom_cursor.zsh b/modules/home/conf/zsh/config/custom_cursor.zsh new file mode 100644 index 00000000..37390c1c --- /dev/null +++ b/modules/home/conf/zsh/config/custom_cursor.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh + +# Change cursor shape for different vi modes. +function zle-keymap-select { + if [[ ${KEYMAP} == vicmd ]] || + [[ $1 = 'block' ]]; then + echo -ne '\e[1 q' + elif [[ ${KEYMAP} == main ]] || + [[ ${KEYMAP} == viins ]] || + [[ ${KEYMAP} = '' ]] || + [[ $1 = 'beam' ]]; then + echo -ne '\e[5 q' + fi +} +zle -N zle-keymap-select + +# ci", ci', ci`, di", etc +autoload -U select-quoted +zle -N select-quoted +for m in visual viopp; do + for c in {a,i}{\',\",\`}; do + bindkey -M "$m" "$c" select-quoted + done +done + +# ci{, ci(, ci<, di{, etc +autoload -U select-bracketed +zle -N select-bracketed +for m in visual viopp; do + for c in {a,i}${(s..)^:-'()[]{}<>bB'}; do + bindkey -M $m $c select-bracketed + done +done + +zle-line-init() { + zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere) + echo -ne "\e[5 q" +} +zle -N zle-line-init + +echo -ne '\e[5 q' # Use beam shape cursor on startup. +precmd() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt. diff --git a/modules/home/conf/zsh/config/zsh-init.zsh b/modules/home/conf/zsh/config/zsh-init.zsh new file mode 100644 index 00000000..cd8d34a9 --- /dev/null +++ b/modules/home/conf/zsh/config/zsh-init.zsh @@ -0,0 +1,42 @@ +#!/usr/bin/env zsh +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +# Flex on the ubuntu users +#[ "$NVIM" ] || hyfetch +[ "$NVIM" ] || task next +#loginctl show-session $XDG_SESSION_ID + +## Enable colors and change prompt: +#autoload -Uz colors && colors +#autoload -Uz compinit && compinit -u +## Edit line in vim buffer ctrl-v +autoload -Uz edit-command-line +zle -N edit-command-line +## Enter vim buffer from normal mode +#autoload -Uz edit-command-line && zle -N edit-command-line +bindkey "^V" edit-command-line + +## zstyles +#zstyle ':completion:*' menu select +## Auto complete with case insensitivity +#zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' + +#zmodload zsh/complist +#fpath+=/home/dt/.config/zsh/comp +#compinit +#_comp_options+=(globdots) # Include hidden files. +# +## Source configs +#source "${ZDOTDIR}/ali.sh" +#source "${ZDOTDIR}/prompt.sh" +#source "${ZDOTDIR}/hotkeys.sh" +#source "./${path_custom_cursor}" +#source ~/.local/lib/shell/lib +# +## Load zsh-syntax-highlighting +#source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +## Suggest aliases for commands +#source /usr/share/zsh/plugins/zsh-you-should-use/you-should-use.plugin.zsh +# +##eval "$(lua ~/scripts/z.lua --init zsh enhanced)" diff --git a/modules/home/conf/zsh/default.nix b/modules/home/conf/zsh/default.nix new file mode 100644 index 00000000..90eba56c --- /dev/null +++ b/modules/home/conf/zsh/default.nix @@ -0,0 +1,101 @@ +{ + config, + pkgs, + lib, + shell_library, + system, + ... +}: { + # TODO: ADD THIS ADDON + # next one only works if your alias is only a command, e.g. if you `alias='cat some_file.txt &2> /dev/null'`, running `cat some_file.txt` won't trigger it. + # TODO: find something better for this use case + # zsh-you-should-use # ZSH plugin that reminds you to use existing aliases for commands you just typed + home.sessionPath = []; + programs.zsh = { + enable = true; + autosuggestion.enable = true; + enableCompletion = true; + syntaxHighlighting.enable = true; + + autocd = true; + + dotDir = ".config/zsh"; + + history = { + extended = true; + ignoreDups = false; + expireDuplicatesFirst = false; + ignoreSpace = false; # TODO: I might change that + + path = "${config.xdg.dataHome}/zsh/history"; + save = 9000000; # number of lines to save + size = 9000000; # number of lines to keep + share = false; # share between sessions + }; + historySubstringSearch = { + enable = true; + searchDownKey = "^[[B"; # DOWN Arrow key + searchUpKey = "^[[A"; # UP Arrow key + }; + + loginExtra = + "" + + lib.concatStringsSep "\nsetopt " [ + "setopt AUTO_CD" # This is needed as first item + "AUTO_PUSHD" + "CHASE_DOTS" + + "ALWAYS_TO_END" + + "EXTENDED_HISTORY" + "HIST_ALLOW_CLOBBER" + "HIST_VERIFY" + "HIST_FCNTL_LOCK" + "APPEND_HISTORY" + + "DVORAK" + "CORRECT" + + "PROMPT_SUBST" + "TRANSIENT_RPROMPT" # maybe? + + "COMBINING_CHARS" + "VI" + ]; + + initExtraFirst = + builtins.readFile ./config/zsh-init.zsh + + '' + SHELL_LIBRARY_VERSION="2.1.2" source ${shell_library.rawLib.${system}} + # This next line buffers the first line of the following item: + + '' + # NOTE: This must be before the insult, as we otherwise override the previous handler <2024-02-28> + + builtins.readFile ./config/command_not_found.sh + + builtins.readFile ./config/command_not_found_insult.sh + + builtins.readFile ./config/custom_cursor.zsh + + builtins.readFile "${pkgs.fzf}/share/fzf/key-bindings.zsh"; + + shellAliases = { + ll = ". ll"; + hisea = "history 0 | grep"; + }; + sessionVariables = { + IVIEWER = "imv"; + READER = "zathura"; + + LIBVIRT_DEFAULT_URI = "qemu:///system"; + + BEMENU_SCALE = "1.5"; + BEMENU_BACKEND = "wayland"; + BEMENU_OPTS = "--fn 'Source Code Pro 10' -c -l 30 -B 1 -W 0.9 --hf #ffffff"; + + # Export Wayland env Vars {{{ + QT_QPA_PLATFORM = "wayland"; + QT_QPA_PLATFORMTHEME = "qt5ct"; # needs qt5ct + CLUTTER_BACKEND = "wayland"; + SDL_VIDEODRIVER = "wayland"; # might brake some things + # }}} + }; + }; +} diff --git a/modules/home/default.nix b/modules/home/default.nix index b0311261..a6107898 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -1,48 +1,60 @@ { - pkgs, - sysLib, - nixpkgs_open_prs, - # extra information - system, - # bins - yambar_cpu, - yambar_memory, - river_init_lesser, - shell_library, - # external deps - user_js, - # modules impermanence, nixVim, nix-index-database, -}: { - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; - users.soispha = import ./soispha; - extraSpecialArgs = { - inherit - pkgs - nixpkgs_open_prs - sysLib - # extra information - - system - # bins - - yambar_cpu - yambar_memory - river_init_lesser - shell_library - # external deps - - user_js - # modules - - impermanence - nixVim - nix-index-database - ; + ... +}: let + username = "soispha"; + homeDirectory = "/home/${username}"; + + # xdg + configHome = "${homeDirectory}/.config"; + dataHome = "${homeDirectory}/.local/share"; + stateHome = "${homeDirectory}/.local/state"; + cacheHome = "${homeDirectory}/.cache"; + binHome = "${homeDirectory}/.local/bin"; + # TODO: add XDG_RUNTIME_DIR +in { + imports = [ + ./conf + ./files + ./impermanence + ./pkgs + ./wms + + impermanence.nixosModules.home-manager.impermanence + nixVim.homeManagerModules.nixvim + nix-index-database.hmModules.nix-index + ]; + + # I don't know what this does, but I've seen it a lot online, so it should be good, right? + programs.home-manager.enable = true; + + home = { + inherit username homeDirectory; + stateVersion = "23.05"; + enableNixpkgsReleaseCheck = true; + }; + xdg = { + enable = true; + inherit configHome dataHome stateHome cacheHome; #binHome; # TODO: add binHome, when the standart is extended + + /* + TODO: add this + desktopEntries = {}; + */ + + userDirs = { + enable = true; + createDirectories = true; + desktop = null; + documents = "${homeDirectory}/school/general"; + download = "${homeDirectory}/media/downloads"; + music = "${homeDirectory}/media/music"; + pictures = "${homeDirectory}/media/pictures"; + videos = "${homeDirectory}/media/videos"; + templates = "${homeDirectory}/media/templates"; + publicShare = "${homeDirectory}/media/public"; }; }; } diff --git a/modules/home/files/default.nix b/modules/home/files/default.nix new file mode 100644 index 00000000..16fe9afe --- /dev/null +++ b/modules/home/files/default.nix @@ -0,0 +1,6 @@ +{...}: { + imports = [ + ./wallpaper + ./manifest_json + ]; +} diff --git a/modules/home/files/manifest_json/default.nix b/modules/home/files/manifest_json/default.nix new file mode 100644 index 00000000..af8d85d2 --- /dev/null +++ b/modules/home/files/manifest_json/default.nix @@ -0,0 +1,16 @@ +{ + config, + lib, + ... +}: { + home = { + activation = { + addManifestJson = + lib.hm.dag.entryAfter ["writeBoundary"] + '' + [ -L "${config.xdg.stateHome}/nix/profiles/profile" ] && $DRY_RUN_CMD rm $VERBOSE_ARG "${config.xdg.stateHome}/nix/profiles/profile" + $DRY_RUN_CMD ln -s $DRY_RUN_CMD "${./profile}" "${config.xdg.stateHome}/nix/profiles/profile" + ''; + }; + }; +} diff --git a/modules/home/files/manifest_json/profile/manifest.json b/modules/home/files/manifest_json/profile/manifest.json new file mode 100644 index 00000000..bd74d935 --- /dev/null +++ b/modules/home/files/manifest_json/profile/manifest.json @@ -0,0 +1,4 @@ +{ + "elements": [], + "version": 2 +} diff --git a/modules/home/files/wallpaper/abstract-nord.png b/modules/home/files/wallpaper/abstract-nord.png new file mode 100644 index 00000000..5ef498bf Binary files /dev/null and b/modules/home/files/wallpaper/abstract-nord.png differ diff --git a/modules/home/files/wallpaper/default.nix b/modules/home/files/wallpaper/default.nix new file mode 100644 index 00000000..119df225 --- /dev/null +++ b/modules/home/files/wallpaper/default.nix @@ -0,0 +1,14 @@ +{config, ...}: { + home = { + sessionVariables = { + WALLPAPER = "${config.home.homeDirectory}/media/pictures/wallpaper"; + }; + + file = { + wallpaper = { + source = ./abstract-nord.png; + target = "media/pictures/wallpaper"; + }; + }; + }; +} diff --git a/modules/home/impermanence/default.nix b/modules/home/impermanence/default.nix new file mode 100644 index 00000000..dcb60f3b --- /dev/null +++ b/modules/home/impermanence/default.nix @@ -0,0 +1,29 @@ +{ + lib, + nixosConfig, + ... +}: { + config = lib.mkIf nixosConfig.soispha.impermanence.enable { + home.persistence."/srv/home/soispha" = { + allowOther = true; + directories = [ + ".local/share" + + ".local/state/nvim" + ".local/state/mpv" + ".local/state/wireplumber" + + ".config/Signal" + ".config/Element" + ".config/iamb/profiles" + + ".cache" + ".mozilla" + + "media" + "repos" + "school" + ]; + }; + }; +} diff --git a/modules/home/soispha/conf/alacritty/default.nix b/modules/home/soispha/conf/alacritty/default.nix deleted file mode 100644 index c1cf5e44..00000000 --- a/modules/home/soispha/conf/alacritty/default.nix +++ /dev/null @@ -1,30 +0,0 @@ -{lib, ...}: let - config_file = '' - ${lib.strings.fileContents ./toml/base.toml} - ${lib.strings.fileContents ./toml/bell.toml} - ${lib.strings.fileContents ./toml/colorscheme.toml} - ${lib.strings.fileContents ./toml/cursor.toml} - ${lib.strings.fileContents ./toml/env.toml} - ${lib.strings.fileContents ./toml/font.toml} - ${lib.strings.fileContents ./toml/hints.toml} - ${lib.strings.fileContents ./toml/keyboard_bindings.toml} - ${lib.strings.fileContents ./toml/mouse.toml} - ${lib.strings.fileContents ./toml/mouse_bindings.toml} - ${lib.strings.fileContents ./toml/scrolling.toml} - ${lib.strings.fileContents ./toml/selection.toml} - ${lib.strings.fileContents ./toml/window.toml} - ''; -in { - home.sessionVariables = { - # This is **not** the TERM variable but a special one to signify my favorite terminal. - TERMINAL = "alacritty"; - - # These two here should be set by alacritty at start-up - # TERM = "alacritty"; - # COLORTERM = "truecolor"; - }; - programs.alacritty = { - enable = true; - }; - xdg.configFile."alacritty/alacritty.toml".text = config_file; -} diff --git a/modules/home/soispha/conf/alacritty/toml/base.toml b/modules/home/soispha/conf/alacritty/toml/base.toml deleted file mode 100644 index 93c9942f..00000000 --- a/modules/home/soispha/conf/alacritty/toml/base.toml +++ /dev/null @@ -1,16 +0,0 @@ -# Configuration for Alacritty, the GPU enhanced terminal emulator. - -# If `true`, bold text is drawn using the bright color variants. -#draw_bold_text_with_bright_colors: true # TODO: - -# Live config reload (changes require restart) -live_config_reload = true - -# Startup directory -# -# Directory the shell is started in. If this is unset, or `None`, the working -# directory of the parent process will be used. -#working_directory: None - -# Offer IPC using `alacritty msg` (unix only) -ipc_socket = true diff --git a/modules/home/soispha/conf/alacritty/toml/bell.toml b/modules/home/soispha/conf/alacritty/toml/bell.toml deleted file mode 100644 index 912d08e3..00000000 --- a/modules/home/soispha/conf/alacritty/toml/bell.toml +++ /dev/null @@ -1,7 +0,0 @@ -# Bell -# -# The bell is rung every time the BEL control character is received. -[bell] -# Duration of the visual bell flash in milliseconds. A `duration` of `0` will -# disable the visual bell animation. -duration = 0 diff --git a/modules/home/soispha/conf/alacritty/toml/colorscheme.toml b/modules/home/soispha/conf/alacritty/toml/colorscheme.toml deleted file mode 100644 index f98a5b91..00000000 --- a/modules/home/soispha/conf/alacritty/toml/colorscheme.toml +++ /dev/null @@ -1,79 +0,0 @@ -# Nightfox Alacritty Colors -## name: carbonfox -## upstream: https://github.com/edeneast/nightfox.nvim/raw/main/extra/carbonfox/alacritty.toml - -[colors.primary] -background = "#161616" -foreground = "#f2f4f8" -dim_foreground = "#b6b8bb" -bright_foreground = "#f9fbff" - -[colors.cursor] -text = "#f2f4f8" -cursor = "#b6b8bb" - -[colors.vi_mode_cursor] -text = "#f2f4f8" -cursor = "#33b1ff" - -[colors.search.matches] -foreground = "#f2f4f8" -background = "#525253" - -[colors.search.focused_match] -foreground = "#f2f4f8" -background = "#3ddbd9" - -[colors.footer_bar] -foreground = "#f2f4f8" -background = "#353535" - -[colors.hints.start] -foreground = "#f2f4f8" -background = "#3ddbd9" - -[colors.hints.end] -foreground = "#f2f4f8" -background = "#353535" - -[colors.selection] -text = "#f2f4f8" -background = "#2a2a2a" - -[colors.normal] -black = "#282828" -red = "#ee5396" -green = "#25be6a" -yellow = "#08bdba" -blue = "#78a9ff" -magenta = "#be95ff" -cyan = "#33b1ff" -white = "#dfdfe0" - -[colors.bright] -black = "#484848" -red = "#f16da6" -green = "#46c880" -yellow = "#2dc7c4" -blue = "#8cb6ff" -magenta = "#c8a5ff" -cyan = "#52bdff" -white = "#e4e4e5" - -[colors.dim] -black = "#222222" -red = "#ca4780" -green = "#1fa25a" -yellow = "#07a19e" -blue = "#6690d9" -magenta = "#a27fd9" -cyan = "#2b96d9" -white = "#bebebe" - -[[colors.indexed_colors]] -index = 16 -color = "#3ddbd9" - -[[colors.indexed_colors]] -index = 17 -color = "#ff7eb6" diff --git a/modules/home/soispha/conf/alacritty/toml/cursor.toml b/modules/home/soispha/conf/alacritty/toml/cursor.toml deleted file mode 100644 index d9cb93f4..00000000 --- a/modules/home/soispha/conf/alacritty/toml/cursor.toml +++ /dev/null @@ -1,11 +0,0 @@ -[cursor] -blink_interval = 750 -blink_timeout = 5 -thickness = 0.15 -unfocused_hollow = true -vi_mode_style = "None" - -# Cursor style -[cursor.style] -blinking = "On" -shape = "Beam" diff --git a/modules/home/soispha/conf/alacritty/toml/env.toml b/modules/home/soispha/conf/alacritty/toml/env.toml deleted file mode 100644 index fdd4e5d1..00000000 --- a/modules/home/soispha/conf/alacritty/toml/env.toml +++ /dev/null @@ -1,3 +0,0 @@ -[env] -TERM = "alacritty" -COLORTERM = "truecolor" diff --git a/modules/home/soispha/conf/alacritty/toml/font.toml b/modules/home/soispha/conf/alacritty/toml/font.toml deleted file mode 100644 index dd18a6fb..00000000 --- a/modules/home/soispha/conf/alacritty/toml/font.toml +++ /dev/null @@ -1,15 +0,0 @@ -[font] -builtin_box_drawing = true -size = 12.0 - -[font.glyph_offset] -x = -1 -y = -1 - -[font.normal] -family = "SauceCodePro Nerd Font Mono" -style = "Regular" - -[font.offset] -x = -1 -y = -1 diff --git a/modules/home/soispha/conf/alacritty/toml/hints.toml b/modules/home/soispha/conf/alacritty/toml/hints.toml deleted file mode 100644 index af01dc3e..00000000 --- a/modules/home/soispha/conf/alacritty/toml/hints.toml +++ /dev/null @@ -1,25 +0,0 @@ -[hints] -alphabet = "jfkdls;ahgurieowpq" - -[[hints.enabled]] -command = "xdg-open" # On Linux/BSD -hyperlinks = true -post_processing = true -persist = false -mouse.enabled = true -binding = { key = "U", mods = "Control|Shift" } -regex = "(ipfs:|ipns:|magnet:|mailto:|gemini://|gopher://|https://|http://|news:|file:|git://|ssh:|ftp://)[^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+" - - -[[hints.enabled]] -action = "Paste" -post_processing = false -binding = { key = "T", mods = "Control|Shift" } -regex = '''([^ '"`=:\[\(]*/)([^/: '"`\)\]]*)''' - - -[[hints.enabled]] -action = "Paste" -post_processing = false -binding = { key = "H", mods = "Control|Shift" } -regex = '([a-z0-9]{7})\s' diff --git a/modules/home/soispha/conf/alacritty/toml/keyboard_bindings.toml b/modules/home/soispha/conf/alacritty/toml/keyboard_bindings.toml deleted file mode 100644 index 8e0b1e13..00000000 --- a/modules/home/soispha/conf/alacritty/toml/keyboard_bindings.toml +++ /dev/null @@ -1,297 +0,0 @@ -[[keyboard.bindings]] -action = "Paste" -key = "P" -mods = "Control" - -[[keyboard.bindings]] -action = "Paste" -key = "Insert" -mods = "Shift" - -[[keyboard.bindings]] -chars = "gc" -key = "Slash" -mods = "Control" - -[[keyboard.bindings]] -action = "Copy" -key = "Y" -mods = "Control" - -[[keyboard.bindings]] -action = "ResetFontSize" -key = "Key0" -mods = "Control" - -[[keyboard.bindings]] -action = "IncreaseFontSize" -key = "Equals" -mods = "Control" - -[[keyboard.bindings]] -action = "IncreaseFontSize" -key = "Plus" -mods = "Control" - -[[keyboard.bindings]] -action = "DecreaseFontSize" -key = "Minus" -mods = "Control" - -[[keyboard.bindings]] -action = "ToggleViMode" -key = "Space" -mods = "Control" - -[[keyboard.bindings]] -action = "ScrollToBottom" -key = "Space" -mode = "Vi" -mods = "Control" - -[[keyboard.bindings]] -action = "ScrollToBottom" -key = "I" -mode = "Vi" - -[[keyboard.bindings]] -action = "ToggleViMode" -key = "I" -mode = "Vi" - -[[keyboard.bindings]] -action = "ScrollToBottom" -key = "C" -mode = "Vi" -mods = "Control" - -[[keyboard.bindings]] -action = "ToggleViMode" -key = "C" -mode = "Vi" -mods = "Control" - -[[keyboard.bindings]] -action = "ClearSelection" -key = "Escape" -mode = "Vi" - -[[keyboard.bindings]] -action = "ScrollLineUp" -key = "Y" -mode = "Vi" -mods = "Control" - -[[keyboard.bindings]] -action = "ScrollLineDown" -key = "E" -mode = "Vi" -mods = "Control" - -[[keyboard.bindings]] -action = "ScrollToTop" -key = "G" -mode = "Vi" - -[[keyboard.bindings]] -action = "ScrollToBottom" -key = "G" -mode = "Vi" -mods = "Shift" - -[[keyboard.bindings]] -action = "ScrollPageUp" -key = "B" -mode = "Vi" -mods = "Control" - -[[keyboard.bindings]] -action = "ScrollPageDown" -key = "F" -mode = "Vi" -mods = "Control" - -[[keyboard.bindings]] -action = "ScrollHalfPageUp" -key = "U" -mode = "Vi" -mods = "Control" - -[[keyboard.bindings]] -action = "ScrollHalfPageDown" -key = "D" -mode = "Vi" -mods = "Control" - -[[keyboard.bindings]] -action = "Copy" -key = "Y" -mode = "Vi" - -[[keyboard.bindings]] -action = "ClearSelection" -key = "Y" -mode = "Vi" - -[[keyboard.bindings]] -action = "ToggleNormalSelection" -key = "V" -mode = "Vi" - -[[keyboard.bindings]] -action = "ToggleLineSelection" -key = "V" -mode = "Vi" -mods = "Shift" - -[[keyboard.bindings]] -action = "ToggleBlockSelection" -key = "V" -mode = "Vi" -mods = "Control" - -[[keyboard.bindings]] -action = "ToggleSemanticSelection" -key = "V" -mode = "Vi" -mods = "Alt" - -[[keyboard.bindings]] -action = "Open" -key = "Return" -mode = "Vi" - -[[keyboard.bindings]] -action = "Up" -key = "K" -mode = "Vi" - -[[keyboard.bindings]] -action = "Down" -key = "J" -mode = "Vi" - -[[keyboard.bindings]] -action = "Left" -key = "H" -mode = "Vi" - -[[keyboard.bindings]] -action = "Right" -key = "L" -mode = "Vi" - -[[keyboard.bindings]] -action = "Up" -key = "Up" -mode = "Vi" - -[[keyboard.bindings]] -action = "Down" -key = "Down" -mode = "Vi" - -[[keyboard.bindings]] -action = "Left" -key = "Left" -mode = "Vi" - -[[keyboard.bindings]] -action = "Right" -key = "Right" -mode = "Vi" - -[[keyboard.bindings]] -action = "First" -key = "Key0" -mode = "Vi" - -[[keyboard.bindings]] -action = "Last" -key = "Key4" -mode = "Vi" - -[[keyboard.bindings]] -action = "FirstOccupied" -key = "Key6" -mode = "Vi" -mods = "Shift" - -[[keyboard.bindings]] -action = "High" -key = "H" -mode = "Vi" -mods = "Shift" - -[[keyboard.bindings]] -action = "Middle" -key = "M" -mode = "Vi" -mods = "Shift" - -[[keyboard.bindings]] -action = "Low" -key = "L" -mode = "Vi" -mods = "Shift" - -[[keyboard.bindings]] -action = "SemanticLeft" -key = "B" -mode = "Vi" - -[[keyboard.bindings]] -action = "SemanticRight" -key = "W" -mode = "Vi" - -[[keyboard.bindings]] -action = "SemanticRightEnd" -key = "E" -mode = "Vi" - -[[keyboard.bindings]] -action = "WordLeft" -key = "B" -mode = "Vi" -mods = "Shift" - -[[keyboard.bindings]] -action = "WordRight" -key = "W" -mode = "Vi" -mods = "Shift" - -[[keyboard.bindings]] -action = "WordRightEnd" -key = "E" -mode = "Vi" -mods = "Shift" - -[[keyboard.bindings]] -action = "Bracket" -key = "Key5" -mode = "Vi" -mods = "Shift" - -[[keyboard.bindings]] -action = "SearchForward" -key = "Slash" -mode = "Vi" - -[[keyboard.bindings]] -action = "SearchBackward" -key = "Slash" -mode = "Vi" -mods = "Shift" - -[[keyboard.bindings]] -action = "SearchNext" -key = "N" -mode = "Vi" - -[[keyboard.bindings]] -action = "SearchPrevious" -key = "N" -mode = "Vi" -mods = "Shift" diff --git a/modules/home/soispha/conf/alacritty/toml/mouse.toml b/modules/home/soispha/conf/alacritty/toml/mouse.toml deleted file mode 100644 index eba68edf..00000000 --- a/modules/home/soispha/conf/alacritty/toml/mouse.toml +++ /dev/null @@ -1,2 +0,0 @@ -[mouse] -hide_when_typing = false diff --git a/modules/home/soispha/conf/alacritty/toml/mouse_bindings.toml b/modules/home/soispha/conf/alacritty/toml/mouse_bindings.toml deleted file mode 100644 index 1b281748..00000000 --- a/modules/home/soispha/conf/alacritty/toml/mouse_bindings.toml +++ /dev/null @@ -1,3 +0,0 @@ -[[mouse.bindings]] -action = "Copy" -mouse = "Middle" diff --git a/modules/home/soispha/conf/alacritty/toml/scrolling.toml b/modules/home/soispha/conf/alacritty/toml/scrolling.toml deleted file mode 100644 index ed7c22cf..00000000 --- a/modules/home/soispha/conf/alacritty/toml/scrolling.toml +++ /dev/null @@ -1,3 +0,0 @@ -[scrolling] -history = 10000 -multiplier = 3 diff --git a/modules/home/soispha/conf/alacritty/toml/selection.toml b/modules/home/soispha/conf/alacritty/toml/selection.toml deleted file mode 100644 index 60ea0495..00000000 --- a/modules/home/soispha/conf/alacritty/toml/selection.toml +++ /dev/null @@ -1,3 +0,0 @@ -[selection] -save_to_clipboard = false -semantic_escape_chars = ",│`|:\"' ()[]{}<>\t" diff --git a/modules/home/soispha/conf/alacritty/toml/window.toml b/modules/home/soispha/conf/alacritty/toml/window.toml deleted file mode 100644 index 123b5b7a..00000000 --- a/modules/home/soispha/conf/alacritty/toml/window.toml +++ /dev/null @@ -1,18 +0,0 @@ -[window] -decorations = "none" -decorations_theme_variant = "None" -dynamic_title = true -opacity = 0.9 -startup_mode = "Windowed" -title = "Alacritty" -[window.class] -general = "Alacritty" -instance = "Alacritty" - -[window.dimensions] -columns = 0 -lines = 0 - -[window.padding] -x = 5 -y = 5 diff --git a/modules/home/soispha/conf/alacritty/yaml/base.yml b/modules/home/soispha/conf/alacritty/yaml/base.yml deleted file mode 100644 index 0791a60f..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/base.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -# Configuration for Alacritty, the GPU enhanced terminal emulator. - -# If `true`, bold text is drawn using the bright color variants. -#draw_bold_text_with_bright_colors: true # TODO: - -# Live config reload (changes require restart) -live_config_reload: true - -# Startup directory -# -# Directory the shell is started in. If this is unset, or `None`, the working -# directory of the parent process will be used. -#working_directory: None - -# Offer IPC using `alacritty msg` (unix only) -ipc_socket: true diff --git a/modules/home/soispha/conf/alacritty/yaml/bell.yml b/modules/home/soispha/conf/alacritty/yaml/bell.yml deleted file mode 100644 index bd071aeb..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/bell.yml +++ /dev/null @@ -1,42 +0,0 @@ -# Bell -# -# The bell is rung every time the BEL control character is received. -bell: - # Visual Bell Animation - # - # Animation effect for flashing the screen when the visual bell is rung. - # - # Values for `animation`: - # - Ease - # - EaseOut - # - EaseOutSine - # - EaseOutQuad - # - EaseOutCubic - # - EaseOutQuart - # - EaseOutQuint - # - EaseOutExpo - # - EaseOutCirc - # - Linear - #animation: EaseOutExpo - - # Duration of the visual bell flash in milliseconds. A `duration` of `0` will - # disable the visual bell animation. - duration: 0 - - # Visual bell animation color. - #color: '#ffffff' - - # Bell Command - # - # This program is executed whenever the bell is rung. - # - # When set to `command: None`, no command will be executed. - # - # Example: - # command: - # program: notify-send - # args: ["Hello, World!"] - # - # command: - # program: notify-send - # args: ["The bell in alacritty was rung!"] diff --git a/modules/home/soispha/conf/alacritty/yaml/colors.yml b/modules/home/soispha/conf/alacritty/yaml/colors.yml deleted file mode 100644 index 899c660a..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/colors.yml +++ /dev/null @@ -1,147 +0,0 @@ -# Colors (Tomorrow Night) -colors: - # Default colors - primary: - background: '#191919' - foreground: '#d8dee9' - - # Bright and dim foreground colors - # - # The dimmed foreground color is calculated automatically if it is not - # present. If the bright foreground color is not set, or - # `draw_bold_text_with_bright_colors` is `false`, the normal foreground - # color will be used. - #dim_foreground: '#828482' - #bright_foreground: '#eaeaea' - - # Cursor colors - # - # Colors which should be used to draw the terminal cursor. - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - cursor: - text: '#191919' - cursor: '#d8dee9' - - # Vi mode cursor colors - # - # Colors for the cursor when the vi mode is active. - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - vi_mode_cursor: - text: CellBackground - cursor: CellForeground - - # Search colors - # - # Colors used for the search bar and match highlighting. - search: - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - matches: - foreground: '#000000' - background: '#ffffff' - focused_match: - foreground: '#ffffff' - background: '#000000' - - # Keyboard hints - hints: - # First character in the hint label - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - start: - foreground: '#1d1f21' - background: '#e9ff5e' - - # All characters after the first one in the hint label - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - end: - foreground: '#e9ff5e' - background: '#1d1f21' - - # Line indicator - # - # Color used for the indicator displaying the position in history during - # search and vi mode. - # - # By default, these will use the opposing primary color. - #line_indicator: - # foreground: None - # background: None - - # Footer bar - # - # Color used for the footer bar on the bottom, used by search regex input, - # hyperlink URI preview, etc. - # - footer_bar: - background: '#c5c8c6' - foreground: '#1d1f21' - - # Selection colors - # - # Colors which should be used to draw the selection area. - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - selection: - text: '#191919' - background: '#d8dee9' - - # Normal colors - normal: - black: '#191919' - red: '#b02626' - green: '#40a62f' - yellow: '#f2e635' - blue: '#314ad0' - magenta: '#b30ad0' - cyan: '#32d0fc' - white: '#acadb1' - - # Bright colors - bright: - black: '#36393d' - red: '#ce2727' - green: '#47c930' - yellow: '#fff138' - blue: '#2e4bea' - magenta: '#cc15ed' - cyan: '#54d9ff' - white: '#dbdbdb' - - # Dim colors - # - # If the dim colors are not set, they will be calculated automatically based - # on the `normal` colors. - dim: - black: '#676f78' - red: '#b55454' - green: '#78a670' - yellow: '#faf380' - blue: '#707fd0' - magenta: '#c583d0' - cyan: '#8adaf1' - white: '#e0e3e7' - # Indexed Colors - # - # The indexed colors include all colors from 16 to 256. - # When these are not set, they're filled with sensible defaults. - # - # Example: - # `- { index: 16, color: '#ff00ff' }` - # - #indexed_colors: [] - - # Transparent cell backgrounds - # - # Whether or not `window.opacity` applies to all cell backgrounds or only to - # the default background. When set to `true` all cells will be transparent - # regardless of their background color. - #transparent_background_colors: false # TODO: diff --git a/modules/home/soispha/conf/alacritty/yaml/colorscheme.yml b/modules/home/soispha/conf/alacritty/yaml/colorscheme.yml deleted file mode 100644 index 4e0abfae..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/colorscheme.yml +++ /dev/null @@ -1,31 +0,0 @@ -# Nightfox Alacritty Colors -# Style: carbonfox -# Upstream: https://github.com/edeneast/nightfox.nvim/raw/main/extra/carbonfox/nightfox_alacritty.yml -colors: - # Default colors - primary: - background: '0x161616' - foreground: '0xf2f4f8' - # Normal colors - normal: - black: '0x282828' - red: '0xee5396' - green: '0x25be6a' - yellow: '0x08bdba' - blue: '0x78a9ff' - magenta: '0xbe95ff' - cyan: '0x33b1ff' - white: '0xdfdfe0' - # Bright colors - bright: - black: '0x484848' - red: '0xf16da6' - green: '0x46c880' - yellow: '0x2dc7c4' - blue: '0x8cb6ff' - magenta: '0xc8a5ff' - cyan: '0x52bdff' - white: '0xe4e4e5' - indexed_colors: - - { index: 16, color: '0x3ddbd9' } - - { index: 17, color: '0xff7eb6' } diff --git a/modules/home/soispha/conf/alacritty/yaml/cursor.yml b/modules/home/soispha/conf/alacritty/yaml/cursor.yml deleted file mode 100644 index ef700ebc..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/cursor.yml +++ /dev/null @@ -1,43 +0,0 @@ -cursor: - # Cursor style - style: - # Cursor shape - # - # Values for `shape`: - # - ▇ Block - # - _ Underline - # - | Beam - shape: Beam - - # Cursor blinking state - # - # Values for `blinking`: - # - Never: Prevent the cursor from ever blinking - # - Off: Disable blinking by default - # - On: Enable blinking by default - # - Always: Force the cursor to always blink - blinking: On - - # Vi mode cursor style - # - # If the vi mode cursor style is `None` or not specified, it will fall back to - # the style of the active value of the normal cursor. - # - # See `cursor.style` for available options. - vi_mode_style: None - - # Cursor blinking interval in milliseconds. - blink_interval: 750 - - # Time after which cursor stops blinking, in seconds. - # - # Specifying '0' will disable timeout for blinking. - blink_timeout: 5 - - # If this is `true`, the cursor will be rendered as a hollow box when the - # window is not focused. - unfocused_hollow: true - - # Thickness of the cursor relative to the cell width as floating point number - # from `0.0` to `1.0`. - thickness: 0.15 diff --git a/modules/home/soispha/conf/alacritty/yaml/debug.yml b/modules/home/soispha/conf/alacritty/yaml/debug.yml deleted file mode 100644 index 2c391da2..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/debug.yml +++ /dev/null @@ -1,29 +0,0 @@ -#debug: - # Display the time it takes to redraw each frame. - #render_timer: false - - # Keep the log file after quitting Alacritty. - #persistent_logging: false - - # Log level - # - # Values for `log_level`: - # - Off - # - Error - # - Warn - # - Info - # - Debug - # - Trace - #log_level: Warn - - # Renderer override. - # - glsl3 - # - gles2 - # - gles2_pure - #renderer: None - - # Print all received window events. - #print_events: false - - # Highlight window damage information. - #highlight_damage: false diff --git a/modules/home/soispha/conf/alacritty/yaml/env.yml b/modules/home/soispha/conf/alacritty/yaml/env.yml deleted file mode 100644 index ee7528b7..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/env.yml +++ /dev/null @@ -1,11 +0,0 @@ -# Any items in the `env` entry below will be added as -# environment variables. Some entries may override variables -# set by alacritty itself. -env: - # TERM variable - # - # This value is used to set the `$TERM` environment variable for - # each instance of Alacritty. If it is not present, alacritty will - # check the local terminfo database and use `alacritty` if it is - # available, otherwise `xterm-256color` is used. - TERM: alacritty diff --git a/modules/home/soispha/conf/alacritty/yaml/font.yml b/modules/home/soispha/conf/alacritty/yaml/font.yml deleted file mode 100644 index a3fd3b1d..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/font.yml +++ /dev/null @@ -1,73 +0,0 @@ -# Font configuration -font: - # Normal (roman) font face - normal: - # Font family - # - # Default: - # - (macOS) Menlo - # - (Linux/BSD) monospace - # - (Windows) Consolas - # family: Source Code Pro - # family: SauceCodePro Nerd Font - family: SauceCodePro Nerd Font Mono - - # The `style` can be specified to pick a specific face. - style: Regular - - # Bold font face - #bold: - # Font family - # - # If the bold family is not specified, it will fall back to the - # value specified for the normal font. - # family: Source Code Pro - - # The `style` can be specified to pick a specific face. - #style: Bold - - # Italic font face - #italic: - # Font family - # - # If the italic family is not specified, it will fall back to the - # value specified for the normal font. - # family: Source Code Pro - - # The `style` can be specified to pick a specific face. - #style: Italic - - # Bold italic font face - #bold_italic: - # Font family - # - # If the bold italic family is not specified, it will fall back to the - # value specified for the normal font. - # family: Source Code Pro - - # The `style` can be specified to pick a specific face. - #style: Bold Italic - - # Point size - size: 12.0 - - # Offset is the extra space around each character. `offset.y` can be thought - # of as modifying the line spacing, and `offset.x` as modifying the letter - # spacing. - offset: - x: -1 - y: -1 - - # Glyph offset determines the locations of the glyphs within their cells with - # the default being at the bottom. Increasing `x` moves the glyph to the - # right, increasing `y` moves the glyph upward. - glyph_offset: - x: -1 - y: -1 - - # Use built-in font for box drawing characters. - # - # If `true`, Alacritty will use a custom built-in font for box drawing - # characters (Unicode points 2500 - 259f). - # - builtin_box_drawing: true # TODO: diff --git a/modules/home/soispha/conf/alacritty/yaml/hints.yml b/modules/home/soispha/conf/alacritty/yaml/hints.yml deleted file mode 100644 index 8c35548b..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/hints.yml +++ /dev/null @@ -1,77 +0,0 @@ -# Hints -# -# Terminal hints can be used to find text or hyperlink in the visible part of -# the terminal and pipe it to other applications. -hints: - # Keys used for the hint labels. - alphabet: "jfkdls;ahgurieowpq" - - # List with all available hints - # - # Each hint must have any of `regex` or `hyperlinks` field and either an - # `action` or a `command` field. The fields `mouse`, `binding` and - # `post_processing` are optional. - # - # The `hyperlinks` option will cause OSC 8 escape sequence hyperlinks to be - # highlighted. - # - # The fields `command`, `binding.key`, `binding.mods`, `binding.mode` and - # `mouse.mods` accept the same values as they do in the `key_bindings` section. - # - # The `mouse.enabled` field controls if the hint should be underlined while - # the mouse with all `mouse.mods` keys held or the vi mode cursor is above it. - # - # If the `post_processing` field is set to `true`, heuristics will be used to - # shorten the match if there are characters likely not to be part of the hint - # (e.g. a trailing `.`). This is most useful for URIs and applies only to - # `regex` matches. - # - # Values for `action`: - # - Copy - # Copy the hint's text to the clipboard. - # - Paste - # Paste the hint's text to the terminal or search. - # - Select - # Select the hint's text. - # - MoveViModeCursor - # Move the vi mode cursor to the beginning of the hint. - enabled: - - regex: "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\ - [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+" - hyperlinks: true - command: xdg-open - post_processing: true - mouse: - enabled: true - mods: None - binding: - key: U - mods: Control|Shift - - - regex: "([^ '\"`=:\\[\\(]*/)([^/: '\"`\\)\\]]*)" - action: Paste - post_procesing: false - binding: - key: T - mods: Control|Shift - - - regex: "([a-z0-9]{7})\\s" - action: Paste - post_procesing: false - binding: - key: H - mods: Control|Shift - - # multi regex for different purposes: - # 2. UUIDs - # 3. hex (for example signatures) - # 4. IP addresses -# - regex: "([[:alnum:]_$%&+=/@-]+)\ -#|([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\ -#|([0-9a-f]{12,128})\ -#|([[:digit:]]{1,3}.[[:digit:]]{1,3}.[[:digit:]]{1,3}.[[:digit:]]{1,3})" -# action: Copy -# post_processing: false -# binding: -# key: U -# mods: Control|Shift diff --git a/modules/home/soispha/conf/alacritty/yaml/key_bindings.yml b/modules/home/soispha/conf/alacritty/yaml/key_bindings.yml deleted file mode 100644 index c8be747e..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/key_bindings.yml +++ /dev/null @@ -1,382 +0,0 @@ -# Key bindings -# -# Key bindings are specified as a list of objects. For example, this is the -# default paste binding: -# -# `- { key: V, mods: Control|Shift, action: Paste }` -# -# Each key binding will specify a: -# -# - `key`: Identifier of the key pressed -# -# - A-Z -# - F1-F24 -# - Key0-Key9 -# -# A full list with available key codes can be found here: -# https://docs.rs/winit/*/winit/event/enum.VirtualKeyCode.html#variants -# -# Instead of using the name of the keys, the `key` field also supports using -# the scancode of the desired key. Scancodes have to be specified as a -# decimal number. This command will allow you to display the hex scancodes -# for certain keys: -# -# `showkey --scancodes`. -# -# Then exactly one of: -# -# - `chars`: Send a byte sequence to the running application -# -# The `chars` field writes the specified string to the terminal. This makes -# it possible to pass escape sequences. To find escape codes for bindings -# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside -# of tmux. Note that applications use terminfo to map escape sequences back -# to keys. It is therefore required to update the terminfo when changing an -# escape sequence. -# -# - `action`: Execute a predefined action -# -# - ToggleViMode -# - SearchForward -# Start searching toward the right of the search origin. -# - SearchBackward -# Start searching toward the left of the search origin. -# - Copy -# - Paste -# - IncreaseFontSize -# - DecreaseFontSize -# - ResetFontSize -# - ScrollPageUp -# - ScrollPageDown -# - ScrollHalfPageUp -# - ScrollHalfPageDown -# - ScrollLineUp -# - ScrollLineDown -# - ScrollToTop -# - ScrollToBottom -# - ClearHistory -# Remove the terminal's scrollback history. -# - Hide -# Hide the Alacritty window. -# - Minimize -# Minimize the Alacritty window. -# - Quit -# Quit Alacritty. -# - ToggleFullscreen -# - ToggleMaximized -# - SpawnNewInstance -# Spawn a new instance of Alacritty. -# - CreateNewWindow -# Create a new Alacritty window from the current process. -# - ClearLogNotice -# Clear Alacritty's UI warning and error notice. -# - ClearSelection -# Remove the active selection. -# - ReceiveChar -# - None -# -# - Vi mode exclusive actions: -# -# - Open -# Perform the action of the first matching hint under the vi mode cursor -# with `mouse.enabled` set to `true`. -# - ToggleNormalSelection -# - ToggleLineSelection -# - ToggleBlockSelection -# - ToggleSemanticSelection -# Toggle semantic selection based on `selection.semantic_escape_chars`. -# - CenterAroundViCursor -# Center view around vi mode cursor -# -# - Vi mode exclusive cursor motion actions: -# -# - Up -# One line up. -# - Down -# One line down. -# - Left -# One character left. -# - Right -# One character right. -# - First -# First column, or beginning of the line when already at the first column. -# - Last -# Last column, or beginning of the line when already at the last column. -# - FirstOccupied -# First non-empty cell in this terminal row, or first non-empty cell of -# the line when already at the first cell of the row. -# - High -# Top of the screen. -# - Middle -# Center of the screen. -# - Low -# Bottom of the screen. -# - SemanticLeft -# Start of the previous semantically separated word. -# - SemanticRight -# Start of the next semantically separated word. -# - SemanticLeftEnd -# End of the previous semantically separated word. -# - SemanticRightEnd -# End of the next semantically separated word. -# - WordLeft -# Start of the previous whitespace separated word. -# - WordRight -# Start of the next whitespace separated word. -# - WordLeftEnd -# End of the previous whitespace separated word. -# - WordRightEnd -# End of the next whitespace separated word. -# - Bracket -# Character matching the bracket at the cursor's location. -# - SearchNext -# Beginning of the next match. -# - SearchPrevious -# Beginning of the previous match. -# - SearchStart -# Start of the match to the left of the vi mode cursor. -# - SearchEnd -# End of the match to the right of the vi mode cursor. -# -# - Search mode exclusive actions: -# - SearchFocusNext -# Move the focus to the next search match. -# - SearchFocusPrevious -# Move the focus to the previous search match. -# - SearchConfirm -# - SearchCancel -# - SearchClear -# Reset the search regex. -# - SearchDeleteWord -# Delete the last word in the search regex. -# - SearchHistoryPrevious -# Go to the previous regex in the search history. -# - SearchHistoryNext -# Go to the next regex in the search history. -# -# - macOS exclusive actions: -# - ToggleSimpleFullscreen -# Enter fullscreen without occupying another space. -# -# - Linux/BSD exclusive actions: -# -# - CopySelection -# Copy from the selection buffer. -# - PasteSelection -# Paste from the selection buffer. -# -# - `command`: Fork and execute a specified command plus arguments -# -# The `command` field must be a map containing a `program` string and an -# `args` array of command line parameter strings. For example: -# `{ program: "alacritty", args: ["-e", "vttest"] }` -# -# And optionally: -# -# - `mods`: Key modifiers to filter binding actions -# -# - Command -# - Control -# - Option -# - Super -# - Shift -# - Alt -# -# Multiple `mods` can be combined using `|` like this: -# `mods: Control|Shift`. -# Whitespace and capitalization are relevant and must match the example. -# -# - `mode`: Indicate a binding for only specific terminal reported modes -# -# This is mainly used to send applications the correct escape sequences -# when in different modes. -# -# - AppCursor -# - AppKeypad -# - Search -# - Alt -# - Vi -# -# A `~` operator can be used before a mode to apply the binding whenever -# the mode is *not* active, e.g. `~Alt`. -# -# Bindings are always filled by default, but will be replaced when a new -# binding with the same triggers is defined. To unset a default binding, it can -# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for -# a no-op if you do not wish to receive input characters for that binding. -# -# If the same trigger is assigned to multiple actions, all of them are executed -# in the order they were defined in. -key_bindings: -# -# - - { key: P, mods: Control, action: Paste } - - { key: Insert, mods: Shift, action: Paste } - - { key: Slash, mods: Control, chars: "gc" } - - { key: Y, mods: Control, action: Copy } - - { key: Key0, mods: Control, action: ResetFontSize } - - { key: Equals, mods: Control, action: IncreaseFontSize } - - { key: Plus, mods: Control, action: IncreaseFontSize } - - { key: Minus, mods: Control, action: DecreaseFontSize } - - # Vi Mode - - { key: Space, mods: Control, action: ToggleViMode } - - { key: Space, mods: Control, mode: Vi, action: ScrollToBottom } - - { key: I, mode: Vi, action: ScrollToBottom } - - { key: I, mode: Vi, action: ToggleViMode } - - { key: C, mods: Control, mode: Vi, action: ScrollToBottom } - - { key: C, mods: Control, mode: Vi, action: ToggleViMode } - - { key: Escape, mode: Vi, action: ClearSelection } - - { key: Y, mods: Control, mode: Vi, action: ScrollLineUp } - - { key: E, mods: Control, mode: Vi, action: ScrollLineDown } - - { key: G, mode: Vi, action: ScrollToTop } - - { key: G, mods: Shift, mode: Vi, action: ScrollToBottom } - - { key: B, mods: Control, mode: Vi, action: ScrollPageUp } - - { key: F, mods: Control, mode: Vi, action: ScrollPageDown } - - { key: U, mods: Control, mode: Vi, action: ScrollHalfPageUp } - - { key: D, mods: Control, mode: Vi, action: ScrollHalfPageDown } - - { key: Y, mode: Vi, action: Copy } - - { key: Y, mode: Vi, action: ClearSelection } - - { key: V, mode: Vi, action: ToggleNormalSelection } - - { key: V, mods: Shift, mode: Vi, action: ToggleLineSelection } - - { key: V, mods: Control, mode: Vi, action: ToggleBlockSelection } - - { key: V, mods: Alt, mode: Vi, action: ToggleSemanticSelection } - - { key: Return, mode: Vi, action: Open } - - { key: K, mode: Vi, action: Up } - - { key: J, mode: Vi, action: Down } - - { key: H, mode: Vi, action: Left } - - { key: L, mode: Vi, action: Right } - - { key: Up, mode: Vi, action: Up } - - { key: Down, mode: Vi, action: Down } - - { key: Left, mode: Vi, action: Left } - - { key: Right, mode: Vi, action: Right } - - { key: Key0, mode: Vi, action: First } - - { key: Key4, mode: Vi, action: Last } - - { key: Key6, mods: Shift, mode: Vi, action: FirstOccupied } - - { key: H, mods: Shift, mode: Vi, action: High } - - { key: M, mods: Shift, mode: Vi, action: Middle } - - { key: L, mods: Shift, mode: Vi, action: Low } - - { key: B, mode: Vi, action: SemanticLeft } - - { key: W, mode: Vi, action: SemanticRight } - - { key: E, mode: Vi, action: SemanticRightEnd } - - { key: B, mods: Shift, mode: Vi, action: WordLeft } - - { key: W, mods: Shift, mode: Vi, action: WordRight } - - { key: E, mods: Shift, mode: Vi, action: WordRightEnd } - - { key: Key5, mods: Shift, mode: Vi, action: Bracket } - - { key: Slash, mode: Vi, action: SearchForward } - - { key: Slash, mods: Shift, mode: Vi, action: SearchBackward } - - { key: N, mode: Vi, action: SearchNext } - - { key: N, mods: Shift, mode: Vi, action: SearchPrevious } -# -# -# - #- { key: Paste, action: Paste } - #- { key: Copy, action: Copy } - #- { key: L, mods: Control, action: ClearLogNotice } - #- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" } - #- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp } - #- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown } - #- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop } - #- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom } - - # Vi Mode - #- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode } - #- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom } - #- { key: Escape, mode: Vi|~Search, action: ClearSelection } - #- { key: I, mode: Vi|~Search, action: ToggleViMode } - #- { key: I, mode: Vi|~Search, action: ScrollToBottom } - #- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode } - #- { key: Y, mods: Control, mode: Vi|~Search, action: ScrollLineUp } - #- { key: E, mods: Control, mode: Vi|~Search, action: ScrollLineDown } - #- { key: G, mode: Vi|~Search, action: ScrollToTop } - #- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom } - #- { key: B, mods: Control, mode: Vi|~Search, action: ScrollPageUp } - #- { key: F, mods: Control, mode: Vi|~Search, action: ScrollPageDown } - #- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp } - #- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown } - #- { key: Y, mode: Vi|~Search, action: Copy } - #- { key: Y, mode: Vi|~Search, action: ClearSelection } - #- { key: Copy, mode: Vi|~Search, action: ClearSelection } - #- { key: V, mode: Vi|~Search, action: ToggleNormalSelection } - #- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection } - #- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection } - #- { key: V, mods: Alt, mode: Vi|~Search, action: ToggleSemanticSelection } - #- { key: Return, mode: Vi|~Search, action: Open } - #- { key: Z, mode: Vi|~Search, action: CenterAroundViCursor } - #- { key: K, mode: Vi|~Search, action: Up } - #- { key: J, mode: Vi|~Search, action: Down } - #- { key: H, mode: Vi|~Search, action: Left } - #- { key: L, mode: Vi|~Search, action: Right } - #- { key: Up, mode: Vi|~Search, action: Up } - #- { key: Down, mode: Vi|~Search, action: Down } - #- { key: Left, mode: Vi|~Search, action: Left } - #- { key: Right, mode: Vi|~Search, action: Right } - #- { key: Key0, mode: Vi|~Search, action: First } - #- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last } - #- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied } - #- { key: H, mods: Shift, mode: Vi|~Search, action: High } - #- { key: M, mods: Shift, mode: Vi|~Search, action: Middle } - #- { key: L, mods: Shift, mode: Vi|~Search, action: Low } - #- { key: B, mode: Vi|~Search, action: SemanticLeft } - #- { key: W, mode: Vi|~Search, action: SemanticRight } - #- { key: E, mode: Vi|~Search, action: SemanticRightEnd } - #- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft } - #- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight } - #- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd } - #- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket } - #- { key: Slash, mode: Vi|~Search, action: SearchForward } - #- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward } - #- { key: N, mode: Vi|~Search, action: SearchNext } - #- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious } - - # Search Mode - #- { key: Return, mode: Search|Vi, action: SearchConfirm } - #- { key: Escape, mode: Search, action: SearchCancel } - #- { key: C, mods: Control, mode: Search, action: SearchCancel } - #- { key: U, mods: Control, mode: Search, action: SearchClear } - #- { key: W, mods: Control, mode: Search, action: SearchDeleteWord } - #- { key: P, mods: Control, mode: Search, action: SearchHistoryPrevious } - #- { key: N, mods: Control, mode: Search, action: SearchHistoryNext } - #- { key: Up, mode: Search, action: SearchHistoryPrevious } - #- { key: Down, mode: Search, action: SearchHistoryNext } - #- { key: Return, mode: Search|~Vi, action: SearchFocusNext } - #- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious } - - # (Windows, Linux, and BSD only) - #- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste } - #- { key: C, mods: Control|Shift, action: Copy } - #- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward } - #- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward } - #- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection } - #- { key: Insert, mods: Shift, action: PasteSelection } - #- { key: Key0, mods: Control, action: ResetFontSize } - #- { key: Equals, mods: Control, action: IncreaseFontSize } - #- { key: Plus, mods: Control, action: IncreaseFontSize } - #- { key: NumpadAdd, mods: Control, action: IncreaseFontSize } - #- { key: Minus, mods: Control, action: DecreaseFontSize } - #- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize } - - # (Windows only) - #- { key: Return, mods: Alt, action: ToggleFullscreen } - - # (macOS only) - #- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" } - #- { key: K, mods: Command, mode: ~Vi|~Search, action: ClearHistory } - #- { key: Key0, mods: Command, action: ResetFontSize } - #- { key: Equals, mods: Command, action: IncreaseFontSize } - #- { key: Plus, mods: Command, action: IncreaseFontSize } - #- { key: NumpadAdd, mods: Command, action: IncreaseFontSize } - #- { key: Minus, mods: Command, action: DecreaseFontSize } - #- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize } - #- { key: V, mods: Command, action: Paste } - #- { key: C, mods: Command, action: Copy } - #- { key: C, mods: Command, mode: Vi|~Search, action: ClearSelection } - #- { key: H, mods: Command, action: Hide } - #- { key: H, mods: Command|Alt, action: HideOtherApplications } - #- { key: M, mods: Command, action: Minimize } - #- { key: Q, mods: Command, action: Quit } - #- { key: W, mods: Command, action: Quit } - #- { key: N, mods: Command, action: CreateNewWindow } - #- { key: F, mods: Command|Control, action: ToggleFullscreen } - #- { key: F, mods: Command, mode: ~Search, action: SearchForward } - #- { key: B, mods: Command, mode: ~Search, action: SearchBackward } diff --git a/modules/home/soispha/conf/alacritty/yaml/mouse.yml b/modules/home/soispha/conf/alacritty/yaml/mouse.yml deleted file mode 100644 index 4bdb408b..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/mouse.yml +++ /dev/null @@ -1,11 +0,0 @@ -mouse: - # Click settings - # - # The `double_click` and `triple_click` settings control the time - # alacritty should wait for accepting multiple clicks as one double - # or triple click. - double_click: { threshold: 300 } - triple_click: { threshold: 300 } - - # If this is `true`, the cursor is temporarily hidden when typing. - hide_when_typing: false diff --git a/modules/home/soispha/conf/alacritty/yaml/mouse_bindings.yml b/modules/home/soispha/conf/alacritty/yaml/mouse_bindings.yml deleted file mode 100644 index ab244d21..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/mouse_bindings.yml +++ /dev/null @@ -1,32 +0,0 @@ -# Mouse bindings -# -# Mouse bindings are specified as a list of objects, much like the key -# bindings further below. -# -# To trigger mouse bindings when an application running within Alacritty -# captures the mouse, the `Shift` modifier is automatically added as a -# requirement. -# -# Each mouse binding will specify a: -# -# - `mouse`: -# -# - Middle -# - Left -# - Right -# - Numeric identifier such as `5` -# -# - `action` (see key bindings for actions not exclusive to mouse mode) -# -# - Mouse exclusive actions: -# -# - ExpandSelection -# Expand the selection to the current mouse cursor location. -# -# And optionally: -# -# - `mods` (see key bindings) -mouse_bindings: -# - { mouse: Right, action: ExpandSelection } -# - { mouse: Right, mods: Control, action: ExpandSelection } - - { mouse: Middle, action: Copy } diff --git a/modules/home/soispha/conf/alacritty/yaml/scrolling.yml b/modules/home/soispha/conf/alacritty/yaml/scrolling.yml deleted file mode 100644 index 50365627..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/scrolling.yml +++ /dev/null @@ -1,7 +0,0 @@ -scrolling: - # Maximum number of lines in the scrollback buffer. - # Specifying '0' will disable scrolling. - history: 10000 - - # Scrolling distance multiplier. - multiplier: 3 diff --git a/modules/home/soispha/conf/alacritty/yaml/selection.yml b/modules/home/soispha/conf/alacritty/yaml/selection.yml deleted file mode 100644 index 5e5bd544..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/selection.yml +++ /dev/null @@ -1,7 +0,0 @@ -selection: - # This string contains all characters that are used as separators for - # "semantic words" in Alacritty. - semantic_escape_chars: ",│`|:\"' ()[]{}<>\t" - - # When set to `true`, selected text will be copied to the primary clipboard. - save_to_clipboard: false diff --git a/modules/home/soispha/conf/alacritty/yaml/shell.yml b/modules/home/soispha/conf/alacritty/yaml/shell.yml deleted file mode 100644 index 04844dd0..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/shell.yml +++ /dev/null @@ -1,13 +0,0 @@ -# Shell -# -# You can set `shell.program` to the path of your favorite shell, e.g. -# `/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the -# shell. -# -# Default: -# - (Linux/BSD/macOS) `$SHELL` or the user's login shell, if `$SHELL` is unset -# - (Windows) powershell -#shell: -# program: /bin/bash -# args: -# - --login diff --git a/modules/home/soispha/conf/alacritty/yaml/window.yml b/modules/home/soispha/conf/alacritty/yaml/window.yml deleted file mode 100644 index 7b89b6ed..00000000 --- a/modules/home/soispha/conf/alacritty/yaml/window.yml +++ /dev/null @@ -1,89 +0,0 @@ -window: - # Window dimensions (changes require restart) - # - # Number of lines/columns (not pixels) in the terminal. Both lines and columns - # must be non-zero for this to take effect. The number of columns must be at - # least `2`, while using a value of `0` for columns and lines will fall back - # to the window manager's recommended size - dimensions: - columns: 0 - lines: 0 - - # Window position (changes require restart) - # - # Specified in number of pixels. - # If the position is not set, the window manager will handle the placement. - #position: - # x: 0 - # y: 0 - - # Window padding (changes require restart) - # - # Blank space added around the window in pixels. This padding is scaled - # by DPI and the specified value is always added at both opposing sides. - padding: - x: 5 - y: 5 - - # Spread additional padding evenly around the terminal content. - #dynamic_padding: false - - # Window decorations - # - # Values for `decorations`: - # - full: Borders and title bar - # - none: Neither borders nor title bar - # - # Values for `decorations` (macOS only): - # - transparent: Title bar, transparent background and title bar buttons - # - buttonless: Title bar, transparent background and no title bar buttons - decorations: none - - # Background opacity - # - # Window opacity as a floating point number from `0.0` to `1.0`. - # The value `0.0` is completely transparent and `1.0` is opaque. - opacity: 0.9 - - # Startup Mode (changes require restart) - # - # Values for `startup_mode`: - # - Windowed - # - Maximized - # - Fullscreen - # - # Values for `startup_mode` (macOS only): - # - SimpleFullscreen - startup_mode: Windowed - - # Window title - title: Alacritty - - # Allow terminal applications to change Alacritty's window title. - dynamic_title: true - - # Window class (Linux/BSD only): - class: - # Application instance name - instance: Alacritty - # General application class - general: Alacritty - - # Decorations theme variant - # - # Override the variant of the System theme/GTK theme/Wayland client side - # decorations. Commonly supported values are `Dark`, `Light`, and `None` for - # auto pick-up. Set this to `None` to use the default theme variant. - decorations_theme_variant: None - - # Resize increments - # - # Prefer resizing window by discrete steps equal to cell dimensions. - #resize_increments: false - - # Make `Option` key behave as `Alt` (macOS only): - # - OnlyLeft - # - OnlyRight - # - Both - # - None (default) - #option_as_alt: None diff --git a/modules/home/soispha/conf/btop/default.nix b/modules/home/soispha/conf/btop/default.nix deleted file mode 100644 index 06b56ea7..00000000 --- a/modules/home/soispha/conf/btop/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{config, ...}: { - programs.btop = { - enable = true; - }; -} diff --git a/modules/home/soispha/conf/dconf/default.nix b/modules/home/soispha/conf/dconf/default.nix deleted file mode 100644 index dc439e1e..00000000 --- a/modules/home/soispha/conf/dconf/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{...}: { - # Also see: https://github.com/gvolpe/dconf2nix - dconf.settings = { - "org/gnome/desktop/wm/preferences" = { - # hide gtk buttons in titelbar - button-layout = ""; - }; - }; -} diff --git a/modules/home/soispha/conf/default.nix b/modules/home/soispha/conf/default.nix deleted file mode 100644 index b58e3153..00000000 --- a/modules/home/soispha/conf/default.nix +++ /dev/null @@ -1,47 +0,0 @@ -{...}: { - imports = [ - ./alacritty - ./btop - ./dconf - ./direnv - ./firefox - ./gammastep - ./git - ./gpg - ./gtk - ./himalaya - ./hyfetch - ./iamb - ./keepassxc - ./latexindent - ./less - ./lf - ./mail - ./mako - ./mbsync - ./mpd - ./mpv - ./mumble - ./neomutt - ./nheko - ./nix-index - ./npm - ./nvim - ./prusa_slicer - ./python - ./rclone - ./rofi - ./ssh - ./starship - ./swayidle - ./swaylock - ./taskwarrior - ./timewarrior - ./tridactyl - ./unison - ./xdg - ./yambar - ./ytcc - ./zsh - ]; -} diff --git a/modules/home/soispha/conf/direnv/default.nix b/modules/home/soispha/conf/direnv/default.nix deleted file mode 100644 index 3a7b8add..00000000 --- a/modules/home/soispha/conf/direnv/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{...}: { - programs.direnv = { - enable = true; - nix-direnv.enable = true; - }; -} diff --git a/modules/home/soispha/conf/firefox/config/bookmarks/default.nix b/modules/home/soispha/conf/firefox/config/bookmarks/default.nix deleted file mode 100644 index c612bf4d..00000000 --- a/modules/home/soispha/conf/firefox/config/bookmarks/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ - lib, - pkgs, - ... -}: let - bookmarks = [ - { - name = "Feed - Piped"; - url = "https://piped.video/feed"; - } - - { - name = "DeepL Translate"; - url = "https://www.deepl.com/translator"; - } - - { - name = "Nix lib"; - url = "https://teu5us.github.io/nix-lib.html"; - } - - { - name = "Nixpkgs manual"; - url = "https://ryantm.github.io/nixpkgs/"; - } - ]; - - mkBookmarksFile = (import ./lib.nix) {inherit lib pkgs;}; - bookmarks_file = mkBookmarksFile bookmarks; -in - bookmarks_file diff --git a/modules/home/soispha/conf/firefox/config/bookmarks/lib.nix b/modules/home/soispha/conf/firefox/config/bookmarks/lib.nix deleted file mode 100644 index d1d89dd2..00000000 --- a/modules/home/soispha/conf/firefox/config/bookmarks/lib.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ - lib, - pkgs, -}: bookmarks: let - indent = level: - lib.concatStringsSep "" (map (lib.const " ") (lib.range 1 level)); - - bookmarkToHTML = indentLevel: bookmark: '' - ${indent indentLevel}
    ${lib.escapeXML bookmark.name}''; - - directoryToHTML = indentLevel: directory: '' - ${indent indentLevel}
    ${ - if directory.toolbar - then ''

    Bookmarks Toolbar'' - else "

    ${lib.escapeXML directory.name}" - }

    - ${indent indentLevel}

    - ${allItemsToHTML (indentLevel + 1) directory.bookmarks} - ${indent indentLevel}

    ''; - - itemToHTMLOrRecurse = indentLevel: item: - if item ? "url" - then bookmarkToHTML indentLevel item - else directoryToHTML indentLevel item; - - allItemsToHTML = indentLevel: bookmarks: - lib.concatStringsSep "\n" - (map (itemToHTMLOrRecurse indentLevel) bookmarks); - - bookmarkEntries = allItemsToHTML 1 bookmarks; -in - pkgs.writeText "firefox-bookmarks.html" '' - - - - Bookmarks -

    Bookmarks Menu

    - -

    -

    Bookmarks Toolbar

    -

    - ${bookmarkEntries} -

    -

    - '' diff --git a/modules/home/soispha/conf/firefox/config/chrome/userChrome.css b/modules/home/soispha/conf/firefox/config/chrome/userChrome.css deleted file mode 100644 index 0b3aff77..00000000 --- a/modules/home/soispha/conf/firefox/config/chrome/userChrome.css +++ /dev/null @@ -1,41 +0,0 @@ -/* thickness of tab when you have too many open tabs */ -.tabbrowser-tab:not([pinned="true"]) { - min-width: 10px !important; - min-height: 10px !important; -} - -/* tab height -#TabsToolbar .tabbrowser-tabs { -min-height: 10px !important; -} -*/ - -/* -.tabbrowser-tab {min-width: 016px !important;} -.tabbrowser-tab {clip-width: 016px !important;} -*/ - -/* the + button that opens new tabs */ -#TabsToolbar .tabs-newtab-button { - margin-left: 10px !important; - height: Auto !important; -} - -#main-window[privatebrowsingmode="temporary"] #navigator-toolbox { - background-color: #c40944 !important; -} - -/* close button inside a tab */ -.tab-close-button * { - width: 10px !important; - height: 10px !important; -} - -/* bookmark toolbar */ -#personal-bookmarks .bookmark-item > .toolbarbutton-text { - font-size: 10pt !important; -} -#personal-bookmarks .bookmark-item > .toolbarbutton-icon { - height: 12px !important; - width: 12px !important; -} diff --git a/modules/home/soispha/conf/firefox/config/extensions/extensions.json b/modules/home/soispha/conf/firefox/config/extensions/extensions.json deleted file mode 100644 index ee48b100..00000000 --- a/modules/home/soispha/conf/firefox/config/extensions/extensions.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "darkreader": { - "addonId": "addon@darkreader.org", - "default_area": "navbar", - "pname": "darkreader", - "sha256": "sha256:d418b40fc2cb69cfffabf6cc291f2cc5ca4c9d6a99e46562b44f4e2c0148374c", - "url": "https://addons.mozilla.org/firefox/downloads/file/4278339/darkreader-4.9.84.xpi", - "version": "4.9.84" - }, - "keepassxc-browser": { - "addonId": "keepassxc-browser@keepassxc.org", - "default_area": "navbar", - "pname": "keepassxc-browser", - "sha256": "sha256:f153b29f6a05f7cb1fc83952f75f55e803573229800df737fa831d1f877c943e", - "url": "https://addons.mozilla.org/firefox/downloads/file/4257616/keepassxc_browser-1.9.0.3.xpi", - "version": "1.9.0.3" - }, - "torproject-snowflake": { - "addonId": "{b11bea1f-a888-4332-8d8a-cec2be7d24b9}", - "default_area": "navbar", - "pname": "torproject-snowflake", - "sha256": "sha256:3cc8974834ecc2a3e5a5b26eb6aa2634187f4b7386694d50bec2b9f825ab87af", - "url": "https://addons.mozilla.org/firefox/downloads/file/4270088/torproject_snowflake-0.8.1.xpi", - "version": "0.8.1" - }, - "tridactyl-vim": { - "addonId": "tridactyl.vim@cmcaine.co.uk", - "default_area": "menupanel", - "pname": "tridactyl-vim", - "sha256": "sha256:ab63fe1554471c280f234409393172fc58e1bb2ca527f4329d983b028073e19c", - "url": "https://addons.mozilla.org/firefox/downloads/file/4261352/tridactyl_vim-1.24.1.xpi", - "version": "1.24.1" - }, - "ublock-origin": { - "addonId": "uBlock0@raymondhill.net", - "default_area": "menupanel", - "pname": "ublock-origin", - "sha256": "sha256:9928e79a52cecf7cfa231fdb0699c7d7a427660d94eb10d711ed5a2f10d2eb89", - "url": "https://addons.mozilla.org/firefox/downloads/file/4261710/ublock_origin-1.57.2.xpi", - "version": "1.57.2" - }, - "vhack-libredirect": { - "addonId": "vhack-libredirect@addons.vhack.eu", - "default_area": "navbar", - "pname": "vhack-libredirect", - "sha256": "sha256:7d40f924808202161a03863a6775f469674c344b4079ff77e3f8c149aa41323d", - "url": "https://addons.mozilla.org/firefox/downloads/file/4186145/vhack_libredirect-2.8.3.xpi", - "version": "2.8.3" - } -} diff --git a/modules/home/soispha/conf/firefox/config/extensions/native_messaging_hosts/default.nix b/modules/home/soispha/conf/firefox/config/extensions/native_messaging_hosts/default.nix deleted file mode 100644 index 9aaa1682..00000000 --- a/modules/home/soispha/conf/firefox/config/extensions/native_messaging_hosts/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{pkgs, ...}: -/* -++ lib.optional (cfg.enableBrowserpass or false) (lib.getBin browserpass) -++ lib.optional (cfg.enableBukubrow or false) bukubrow -++ lib.optional (cfg.enableTridactylNative or false) tridactyl-native -++ lib.optional (cfg.enableGnomeExtensions or false) gnome-browser-connector -++ lib.optional (cfg.enableUgetIntegrator or false) uget-integrator -++ lib.optional (cfg.enablePlasmaBrowserIntegration or false) plasma5Packages.plasma-browser-integration -++ lib.optional (cfg.enableFXCastBridge or false) fx-cast-bridge -++ lib.optional (cfg.enableKeePassXC or false) keepassxc -*/ -with pkgs; [ - tridactyl-native - keepassxc -] diff --git a/modules/home/soispha/conf/firefox/config/policies/default.nix b/modules/home/soispha/conf/firefox/config/policies/default.nix deleted file mode 100644 index 02c740f6..00000000 --- a/modules/home/soispha/conf/firefox/config/policies/default.nix +++ /dev/null @@ -1,146 +0,0 @@ -{ - config, - extensions, - ... -}: let - locals = [ - "en-CA" - "de" - "sv-SE" - ]; - mkAllowedExtension = extension: { - name = extension.addonId; - value = { - installation_mode = "normal_installed"; - updates_disabled = true; - inherit (extension) default_area; - install_url = "file://${builtins.fetchurl { - inherit - (extension) - url - sha256 - ; - }}"; - }; - }; - allowedExtensions = - builtins.listToAttrs - (builtins.map mkAllowedExtension (builtins.attrValues - extensions)); - - mkBlockedExtension = id: { - name = id; - value = { - install_mode = "blocked"; - }; - }; - blockedExtensions = builtins.listToAttrs (builtins.map mkBlockedExtension [ - # these are the default search engines - "addons-search-detection@mozilla.com" - "amazon@search.mozilla.org" - "bing@search.mozilla.org" - "ddg@search.mozilla.org" - "google@search.mozilla.org" - "wikipedia@search.mozilla.org" - ]); - - language_packs = builtins.listToAttrs (builtins.map - ( - lang: { - name = "langpack-${lang}@firefox.mozilla.org"; - value = { - installation_mode = "normal_installed"; - updates_disabled = true; - install_url = "https://releases.mozilla.org/pub/firefox/releases/${config.soispha.firefox.package_version}/linux-x86_64/xpi/${lang}.xpi"; - }; - } - ) - locals); -in { - # NOTE: See https://mozilla.github.io/policy-templates for documentation <2023-10-21> - policies = { - # NixOS manages this already - DisableAppUpdate = true; - - DisableFirefoxAccounts = true; - DisableFirefoxScreenshots = true; - - # KeepassXC does this for me - DisableMasterPasswordCreation = true; - - # I use a self-hosted services for that - DisablePocket = true; - - # I don't want to lose my data - DisableProfileRefresh = true; - - DisableDeveloperTools = false; - - DisplayBookmarksToolbar = "newtab"; - DisplayMenuBar = "default-off"; - - DNSOverHTTPS = { - Enabled = true; - Locked = false; - }; - # The concept of a "default browser" does not apply to my NixOS config - DontCheckDefaultBrowser = true; - - EnableTrackingProtection = { - Value = true; - Locked = false; - Cryptomining = true; - Fingerprinting = true; - EmailTracking = true; - }; - - EncryptedMediaExtensions = { - # I want a _free_ config (and I can always just run another browser) - Enabled = false; - Locked = true; - }; - - ExtensionSettings = - { - "*" = { - # Blocking the extension install here, also blocks the 'about:debugging' page - - # blocked_install_message = '' - # You can't install a extension manually, - # please specify it in your NixOS configuration - # ''; - installation_mode = "allowed"; - }; - } - // allowedExtensions - // blockedExtensions - // language_packs; - - ExtensionUpdate = false; - - # TODO: Add handlers for the default file types <2023-10-21> - # Handlers = { - # }; - - HardwareAcceleration = true; - - # Blocking the extension install here, also blocks the 'about:debugging' page - # InstallAddonsPermission = { - # Allowed = []; - # Default = false; - # }; - - # KeepassXC and such things - OfferToSaveLogins = false; - PasswordManagerEnabled = false; - - PDFjs = { - Enabled = true; - # Don't honor documents right to be un-copy-able - EnablePermissions = false; - }; - - SearchBar = "unified"; - RequestedLocales = locals; - }; -} diff --git a/modules/home/soispha/conf/firefox/config/prefs/default.nix b/modules/home/soispha/conf/firefox/config/prefs/default.nix deleted file mode 100644 index 80c6d274..00000000 --- a/modules/home/soispha/conf/firefox/config/prefs/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - pkgs, - config, - user_js, - bookmarks, - ... -}: let - user_js_override = pkgs.writeText "user.override.js" (builtins.readFile ./override.js); -in - pkgs.runCommand "user.js" {} '' - mkdir $out; - cat "${user_js}/user.js" > $out/user.js; - cat "${user_js_override}" >> $out/user.js; - - cat << EOF >> $out/user.js; - // My bookmarks - user_pref("browser.bookmarks.file", "${toString bookmarks}"); - user_pref("browser.startup.homepage", "file:///home/dt/home.html"); // 0103 // TODO: add this from a flake - user_pref("browser.download.dir", "${config.xdg.userDirs.download}"); - EOF - '' diff --git a/modules/home/soispha/conf/firefox/config/prefs/override.js b/modules/home/soispha/conf/firefox/config/prefs/override.js deleted file mode 100644 index bf874b33..00000000 --- a/modules/home/soispha/conf/firefox/config/prefs/override.js +++ /dev/null @@ -1,202 +0,0 @@ -/* - 0100: STARTUP - 0200: GEOLOCATION / LANGUAGE / LOCALE - 0300: QUIETER FOX - 0400: SAFE BROWSING - 0600: BLOCK IMPLICIT OUTBOUND - 0700: DNS / DoH / PROXY / SOCKS / IPv6 - 0800: LOCATION BAR / SEARCH BAR / SUGGESTIONS / HISTORY / FORMS - 0900: PASSWORDS - 1000: DISK AVOIDANCE - 1200: HTTPS (SSL/TLS / OCSP / CERTS / HPKP) - 1400: FONTS - 1600: HEADERS / REFERERS - 1700: CONTAINERS - 2000: PLUGINS / MEDIA / WEBRTC - 2400: DOM (DOCUMENT OBJECT MODEL) - 2600: MISCELLANEOUS - 2700: ETP (ENHANCED TRACKING PROTECTION) - 2800: SHUTDOWN & SANITIZING - 4500: RFP (RESIST FINGERPRINTING) - 5000: OPTIONAL OPSEC - 5500: OPTIONAL HARDENING - 6000: DON'T TOUCH - 7000: DON'T BOTHER - 8000: DON'T BOTHER: FINGERPRINTING - 9000: NON-PROJECT RELATED - 9999: DEPRECATED / REMOVED / LEGACY / RENAMED -*/ - - -// restore session -user_pref("browser.startup.page", 3); // 0102 - -user_pref("browser.newtabpage.enabled", true); // 0104 - -// disable the geoservice, TODO: don't know if I want this -//user_pref("geo.provider.use_geoclue", false); // 0202 - -// TODO: is this something useful? -user_pref("datareporting.policy.dataSubmissionEnabled", true); // 0330 - -// enable health reports -user_pref("datareporting.healthreport.uploadEnabled", true); // 0331 - -// Do I want to opt-out? -user_pref("toolkit.telemetry.coverage.opt-out", false); // 0333 - -// enables studies -user_pref("app.shield.optoutstudies.enabled", true); // 0340 - -// I guess that browsing protection is useful -user_pref("browser.safebrowsing.downloads.remote.enabled", true); // 0403 - -// TODO: does this (-> set to false) make things slower? -user_pref("network.prefetch-next", true); // 0601 - -// enable ipv6 because the rest of the system uses it -user_pref("network.dns.disableIPv6", false); // 0701 - -// TRR only -user_pref("network.trr.mode", 3); // 0710 - -// I trust my search engine -user_pref("keyword.enabled", true); // 801 -user_pref("browser.search.suggest.enabled", true); // 0804 -user_pref("browser.urlbar.suggest.searches", true); // 0804 -// TODO: no idea what this does, enabling it -user_pref("browser.urlbar.showSearchTerms.enabled", true); // 9004 - -// prefetch urls, if the get auto completed -user_pref("browser.urlbar.speculativeConnect.enabled", true); // 0805 - -// Disable autoScrolling (clicking with the mouse wheel) -user_pref("general.autoScroll", false); - -// add new tabs after the current one -user_pref("browser.tabs.insertAfterCurrent", true); - -// TODO: I might want to enable this -//user_pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false); // 0807 - -// TODO: enable form and search history? -//user_pref("browser.formfill.enable", false); // 0810 - -// disk cache should help performance -user_pref("browser.cache.disk.enable", true); // 1001 - -// store extra session data (form content, cookies and POST data) 0: everywhere -user_pref("browser.sessionstore.privacy_level", 0); // 1003 - -// Disable unsafe passive content (images) on https sites -user_pref("security.mixed_content.block_display_content", true); // 1241 - -// Disable the eme banner -user_pref("browser.eme.ui.enabled", false); // 2022 - -// Don't delete my precious temp files -user_pref("browser.helperApps.deleteTempFileOnExit", false); // 2603 - -// Download to the download dir -user_pref("browser.download.useDownloadDir", true); // 2651 - -// Open the download panel -user_pref("browser.download.alwaysOpenPanel", true); // 2652 - -// Block after custom ruleset -user_pref("browser.contentblocking.category", "custom"); // 2701 - -// set the custom settings // 7016 -user_pref("network.cookie.cookieBehavior", 1); -user_pref("network.http.referer.disallowCrossSiteRelaxingDefault", true); -user_pref("network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation", true); -user_pref("privacy.partition.network_state.ocsp_cache", true); -user_pref("privacy.query_stripping.enabled", true); -user_pref("privacy.trackingprotection.enabled", true); -user_pref("privacy.trackingprotection.socialtracking.enabled", true); -user_pref("privacy.trackingprotection.cryptomining.enabled", true); -user_pref("privacy.trackingprotection.fingerprinting.enabled", true); - - -// I might want to change that, when it hinders session restore -//user_pref("privacy.partition.always_partition_third_party_non_cookie_storage.exempt_sessionstorage", false); // 2720 - -// I like my history very much! -user_pref("privacy.sanitize.sanitizeOnShutdown", false); // 2810 - -// The downsides (light theme + potential breakages): -//user_pref("privacy.resistFingerprinting", true); // 4501 -user_pref("privacy.resistFingerprinting.letterboxing", false); // 4504 - -// I would like to keep my gl, even in the web -user_pref("webgl.disabled", false); // 4520 - -// I like my service workers and am using a service using them. -user_pref("dom.serviceWorkers.enabled", true); // 7017 - -// I've got a password manager already -user_pref("signon.rememberSignons", false); // 5003 - -// Do not track header -user_pref("privacy.donottrackheader.enabled", true); // 7015 - -// Allow my custom css -user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); - -// might improve performance TODO: -user_pref("gfx.webrender.all", true); - -// disable updates (pretty pointless with nix) -user_pref("extensions.update.autoUpdateDefault", false); -user_pref("extensions.update.enabled", false); -user_pref("app.update.channel", "default"); - -user_pref("browser.ctrlTab.recentlyUsedOrder", false); - -user_pref("browser.download.useDownloadDir", true); -user_pref("browser.download.folderList", 2); // TODO: -user_pref("browser.download.viewableInternally.typeWasRegistered.svg", true); -user_pref("browser.download.viewableInternally.typeWasRegistered.webp", true); -user_pref("browser.download.viewableInternally.typeWasRegistered.xml", true); - -// TODO: what does this do? -user_pref("browser.search.widget.inNavBar", true); - -user_pref("browser.shell.checkDefaultBrowser", false); -user_pref("browser.tabs.loadInBackground", true); -user_pref("browser.urlbar.placeholderName", "Brave"); - -// Set the tabs and bookmarks -user_pref("browser.tabs.inTitlebar", 1); -user_pref("browser.toolbars.bookmarks.visibility", "always"); -user_pref("browser.places.importBookmarksHTML", true); - -// Theme -user_pref("extensions.activeThemeID", "firefox-alpenglow@mozilla.org"); -user_pref("extensions.extensions.activeThemeID", "firefox-alpenglow@mozilla.org"); - -// highlight all entries when searching -user_pref("findbar.highlightAll", true); - -// Set the default position for the developer toolbox -user_pref("devtools,toolbox.host", "right"); -user_pref("devtools,toolsidebar-width.inspector", 700); - -// Don't bother me with translations -user_pref("browser.translations.automaticallyPopup", true); -user_pref("browser.translations.neverTranslateLanguages", "de"); - -// Put all downloads into the downloads directory -user_pref("browser.download.start_downloads_in_tmp_dir", false); - -// TODO: -//user_pref("extensions.webcompat.enable_picture_in_picture_overrides", true); -//user_pref("extensions.webcompat.enable_shims", true); -//user_pref("extensions.webcompat.perform_injections", true); -//user_pref("extensions.webcompat.perform_ua_overrides", true); - -// onlykey / copied from a yubikey config -//user_pref("security.webauth.u2f", true); -//user_pref("security.webauth.webauthn", true); -//user_pref("security.webauth.webauthn_enable_softtoken", true); -//user_pref("security.webauth.webauthn_enable_usbtoken", true); diff --git a/modules/home/soispha/conf/firefox/config/search/engines/default.nix b/modules/home/soispha/conf/firefox/config/search/engines/default.nix deleted file mode 100644 index a47c77df..00000000 --- a/modules/home/soispha/conf/firefox/config/search/engines/default.nix +++ /dev/null @@ -1,84 +0,0 @@ -{pkgs, ...}: { - # DEFAULT - "Brave Search" = { - urls = [{template = "https://search.brave.com/search?q={searchTerms}";}]; - icon = ./logos/brave.svg; - definedAliases = ["@bs"]; - }; - - # NIX - "Nix Packages" = { - urls = [{template = "https://search.nixos.org/packages?type=packages&query={searchTerms}";}]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["@np"]; - }; - - "NixOS Options" = { - urls = [{template = "https://search.nixos.org/options?type=options&query={searchTerms}";}]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["@no"]; - }; - "HomeManager Options" = { - urls = [{template = "https://home-manager-options.extranix.com/?query={searchTerms}&release=master";}]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["@nh"]; - }; - - "Nixpkgs issues" = { - urls = [{template = "https://github.com/NixOS/nixpkgs/issues?q=is%3Aissue+is%3Aopen+{searchTerms}";}]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["@ni"]; - }; - "Nixpkgs pull requests" = { - urls = [{template = "https://github.com/NixOS/nixpkgs/pulls?q=is%3Apr+is%3Aopen+{searchTerms}";}]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["@nr"]; - }; - - "Nixpkgs pull requests tracker" = { - urls = [{template = "https://nixpk.gs/pr-tracker.html?pr={searchTerms}";}]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["@nt"]; - }; - "NixOS Wiki" = { - urls = [{template = "https://wiki.nixos.org/w/index.php?search={searchTerms}";}]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["@nw"]; - }; - - # RUST - "Rust std" = { - urls = [{template = "https://doc.rust-lang.org/std/?search={searchTerms}";}]; - icon = ./logos/rust_std.svg; - definedAliases = ["@rs"]; - }; - "Rust tokio" = { - urls = [{template = "https://docs.rs/tokio/latest/tokio/index.html?search={searchTerms}";}]; - icon = ./logos/rust_tokio.png; - definedAliases = ["@rt"]; - }; - - # OTHER - "Google Scholar" = { - urls = [{template = "https://scholar.google.com/scholar?hl=en&q={searchTerms}";}]; - icon = ./logos/google_scholar.ico; - definedAliases = ["@gs"]; - }; - "Wikipedia" = { - urls = [{template = "https://en.wikipedia.org/wiki/{searchTerms}";}]; - icon = ./logos/wikipedia.svg; - definedAliases = ["@wp"]; - }; - "Arch Wiki" = { - urls = [{template = "https://wiki.archlinux.org/index.php?search={searchTerms}";}]; - icon = ./logos/arch_linux.svg; - definedAliases = ["@aw"]; - }; - - "Wikipedia (en)".metaData.hidden = true; - "DuckDuckGo".metaData.hidden = true; - "Bing".metaData.hidden = true; - "Google".metaData.hidden = true; - "Amazon.de".metaData.hidden = true; - "eBay".metaData.hidden = true; -} diff --git a/modules/home/soispha/conf/firefox/config/search/engines/logos/arch_linux.svg b/modules/home/soispha/conf/firefox/config/search/engines/logos/arch_linux.svg deleted file mode 100644 index 949b5c5f..00000000 --- a/modules/home/soispha/conf/firefox/config/search/engines/logos/arch_linux.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/modules/home/soispha/conf/firefox/config/search/engines/logos/brave.svg b/modules/home/soispha/conf/firefox/config/search/engines/logos/brave.svg deleted file mode 100644 index 09dd2e42..00000000 --- a/modules/home/soispha/conf/firefox/config/search/engines/logos/brave.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/home/soispha/conf/firefox/config/search/engines/logos/google_scholar.ico b/modules/home/soispha/conf/firefox/config/search/engines/logos/google_scholar.ico deleted file mode 100644 index 85d0c664..00000000 Binary files a/modules/home/soispha/conf/firefox/config/search/engines/logos/google_scholar.ico and /dev/null differ diff --git a/modules/home/soispha/conf/firefox/config/search/engines/logos/rust_std.svg b/modules/home/soispha/conf/firefox/config/search/engines/logos/rust_std.svg deleted file mode 100644 index 0091b5a8..00000000 --- a/modules/home/soispha/conf/firefox/config/search/engines/logos/rust_std.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/home/soispha/conf/firefox/config/search/engines/logos/rust_tokio.png b/modules/home/soispha/conf/firefox/config/search/engines/logos/rust_tokio.png deleted file mode 100644 index f1de55ff..00000000 Binary files a/modules/home/soispha/conf/firefox/config/search/engines/logos/rust_tokio.png and /dev/null differ diff --git a/modules/home/soispha/conf/firefox/config/search/engines/logos/wikipedia.svg b/modules/home/soispha/conf/firefox/config/search/engines/logos/wikipedia.svg deleted file mode 100644 index dc32f984..00000000 --- a/modules/home/soispha/conf/firefox/config/search/engines/logos/wikipedia.svg +++ /dev/null @@ -1 +0,0 @@ -]>Wikipedia logo version 2 \ No newline at end of file diff --git a/modules/home/soispha/conf/firefox/default.nix b/modules/home/soispha/conf/firefox/default.nix deleted file mode 100644 index f2ccfc99..00000000 --- a/modules/home/soispha/conf/firefox/default.nix +++ /dev/null @@ -1,134 +0,0 @@ -{ - config, - pkgs, - lib, - user_js, - ... -}: let - extensions = - builtins.fromJSON (builtins.readFile ./config/extensions/extensions.json); - - userChrome = builtins.readFile ./config/chrome/userChrome.css; - bookmarks = (import ./config/bookmarks/default.nix) { - inherit - pkgs - lib - ; - }; - engines = (import ./config/search/engines) {inherit pkgs;}; - - native_messaging_hosts = (import ./config/extensions/native_messaging_hosts/default.nix) {inherit pkgs;}; - - policies = (import ./config/policies) {inherit config extensions;}; - - search = { - default = "Brave Search"; - privateDefault = "Brave Search"; - force = true; - order = [ - # DEFAULT - "Brave Search" - - # NIX - "Nix Packages" - "Nix Options" - "Nixpkgs issues" - "Homemanager Options" - "NixOS Wiki" - "Nixpkgs Pull Request Tracker" - - # RUST - "Rust std" - "Rust tokio" - - # OTHER - "Google Scholar" - "Wikipedia" - "Arch Wiki" - ]; - - inherit engines; - }; - - prefConfig = builtins.readFile "${ - (import ./config/prefs) {inherit pkgs lib config bookmarks user_js;} - }/user.js"; - - # Package {{{ - package = import ./package.nix { - inherit config lib pkgs; - extraPolicies = policies; - extraNativeMessagingHosts = native_messaging_hosts; - }; - # }}} - - # Profiles {{{ - profiles = { - "default" = { - inherit search userChrome; - isDefault = true; - id = 0; - name = "default"; - extraConfig = prefConfig; - }; - }; - - taskwarriorProfiles = import ../taskwarrior/firefox { - inherit - config - lib - # options - - prefConfig - search - userChrome - ; - profile_size = builtins.length (builtins.attrNames profiles); - }; - # }}} -in { - options.soispha.firefox = { - package = lib.mkOption { - type = lib.types.package; - default = pkgs.firefox; - description = "Firefox package to use."; - defaultText = lib.literalExpression "pkgs.firefox"; - relatedPackages = [ - "firefox" - "firefox-beta-bin" - "firefox-bin" - "firefox-devedition-bin" - "firefox-esr" - ]; - }; - package_version = lib.mkOption { - type = lib.types.str; - default = pkgs.firefox.version; - description = "Firefox version to use"; - }; - }; - - config = { - soispha.firefox.package = package; - soispha.firefox.package_version = pkgs.firefox.version; - home.sessionVariables = { - # improve touch input & make scrolling smother - MOZ_USE_XINPUT2 = "1"; - - # improve wayland support - MOZ_ENABLE_WAYLAND = 1; - - # tell gtk to use portals - GTK_USE_PORTAL = 1; - - BROWSER = "firefox"; - }; - programs.firefox = { - enable = true; - inherit (config.soispha.firefox) package; - profiles = - profiles - // taskwarriorProfiles; - }; - }; -} diff --git a/modules/home/soispha/conf/firefox/package.nix b/modules/home/soispha/conf/firefox/package.nix deleted file mode 100644 index f7e4319b..00000000 --- a/modules/home/soispha/conf/firefox/package.nix +++ /dev/null @@ -1,30 +0,0 @@ -# taken from the NixOS Firefox module: https://github.com/NixOS/nixpkgs/blob/7c9cc5a6e5d38010801741ac830a3f8fd667a7a0/nixos/modules/programs/firefox.nix -{ - config, - lib, - pkgs, - # options - autoConfig ? "", - extraNativeMessagingHosts ? [], - wrapperConfig ? {}, - extraPolicies ? {}, - base_package ? pkgs.firefox, -}: let - pkg = base_package.override (old: { - extraPrefsFiles = - (old.extraPrefsFiles or []) - ++ [ - (pkgs.writeText "autoConfig.js" autoConfig) - ]; - nativeMessagingHosts = old.nativeMessagingHosts or [] ++ extraNativeMessagingHosts; - cfg = (old.cfg or {}) // wrapperConfig; - extraPoliciesFiles = - (old.extraPoliciesFiles or []) - ++ [ - ( - pkgs.writeText "policies.json" (builtins.toJSON extraPolicies) - ) - ]; - }); -in - pkg diff --git a/modules/home/soispha/conf/firefox/scripts/default.nix b/modules/home/soispha/conf/firefox/scripts/default.nix deleted file mode 100644 index 1127662b..00000000 --- a/modules/home/soispha/conf/firefox/scripts/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - pkgs, - sysLib, - ... -}: let - unzip_mozlz4 = pkgs.stdenv.mkDerivation { - name = "unzip_mozlz4"; - propagatedBuildInputs = [ - (pkgs.python3.withPackages (pythonPackages: - with pythonPackages; [ - lz4 - ])) - ]; - dontUnpack = true; - installPhase = "install -Dm755 ${./unzip_mozlz4.py} $out/bin/unzip_mozlz4"; - }; - extract_cookies = sysLib.writeShellScript { - name = "extract_cookies"; - src = ./extract_cookies.sh; - dependencies = with pkgs; [ - bash - sqlite - mktemp - coreutils - ]; - }; -in { - inherit unzip_mozlz4 extract_cookies; -} diff --git a/modules/home/soispha/conf/firefox/scripts/extract_cookies.sh b/modules/home/soispha/conf/firefox/scripts/extract_cookies.sh deleted file mode 100755 index e3d50d43..00000000 --- a/modules/home/soispha/conf/firefox/scripts/extract_cookies.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env bash -# copied from https://superuser.com/a/1239036 -# extract_cookies.sh: -# -# Convert from Firefox's cookies.sqlite format to Netscape cookies, -# which can then be used by wget and curl. (Why don't wget and curl -# just use libsqlite if it's installed? Mysteries abound.) -# -# Note: This script reads directly from the standard cookie jar file, -# which means cookies which are kept only in memory ("session cookies") -# will not be extracted. You will need an extension to do that. - -# USAGE: -# -# $ extract_cookies.sh > /tmp/cookies.txt -# or -# $ extract_cookies.sh ~/.mozilla/firefox/*default*/cookies.sqlite > /tmp/cookies.txt - -# USING WITH WGET: -# $ wget --load-cookies=/tmp/cookies.txt http://example.com - -# USING WITH CURL: -# $ curl --cookie /tmp/cookies.txt http://example.com - -# Note: If you do not specify an SQLite filename, this script will -# intelligently find it for you. -# -# A) Usually it will check all profiles under ~/.mozilla/firefox/ and -# use the cookies.sqlite that was updated most recently. -# -# B) If you've redirected stdin (with < or |) , then that will be used. - -# HISTORY: I believe this is circa 2010 from: -# http://slacy.com/blog/2010/02/using-cookies-sqlite-in-wget-or-curl/ -# However, that site is down now. - -# Cleaned up by Hackerb9 (2017) to be more robust and require less typing. - -cleanup() { - rm -f "$TMPFILE" - exit 0 -} -trap cleanup EXIT INT QUIT TERM - -if [ "$#" -ge 1 ]; then - SQLFILE="$1" -else - SQLFILE="$HOME/.mozilla/firefox/default/cookies.sqlite" -fi - -if ! [ -r "$SQLFILE" ]; then - echo "Error. File $SQLFILE is not readable." >&2 - exit 1 -fi - -# We have to copy cookies.sqlite, because FireFox has a lock on it -TMPFILE=$(mktemp /tmp/cookies.sqlite.XXXXXXXXXX) -cat "$SQLFILE" >>"$TMPFILE" - -# This is the format of the sqlite database: -# CREATE TABLE moz_cookies (id INTEGER PRIMARY KEY, name TEXT, value TEXT, host TEXT, path TEXT,expiry INTEGER, lastAccessed INTEGER, isSecure INTEGER, isHttpOnly INTEGER); - -echo "# Netscape HTTP Cookie File" -sqlite3 -separator $'\t' "$TMPFILE" < ") diff --git a/modules/home/soispha/conf/firefox/scripts/update_extensions.sh b/modules/home/soispha/conf/firefox/scripts/update_extensions.sh deleted file mode 100755 index 86bd843c..00000000 --- a/modules/home/soispha/conf/firefox/scripts/update_extensions.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -tmp=$(mktemp) -cat <"$tmp" - darkreader:navbar - keepassxc-browser:navbar - vhack-libredirect:navbar - torproject-snowflake:navbar - tridactyl-vim:menupanel - ublock-origin:menupanel -EOF - -# The bin is provided in the devshell; -# The cat execution should be unquoted; -# shellcheck disable=SC2046 -generate_extensions $(cat "$tmp") >"$(dirname "$0")"/../config/extensions/extensions.json - -rm "$tmp" diff --git a/modules/home/soispha/conf/gammastep/default.nix b/modules/home/soispha/conf/gammastep/default.nix deleted file mode 100644 index 1ae0550b..00000000 --- a/modules/home/soispha/conf/gammastep/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - lib, - nixosConfig, - ... -}: let - temp = - if nixosConfig.soispha.laptop.enable - then 3000 - else 1300; -in { - services.gammastep = { - enable = true; - settings = { - general = { - temp-day = lib.mkForce temp; - temp-night = lib.mkForce temp; - gamma = "0.8:0.8:0.8"; - fade = 0; - adjustment-method = "wayland"; - location-provider = "manual"; - }; - - manual = { - lat = 48.1; - lon = 11.6; - }; - }; - }; -} diff --git a/modules/home/soispha/conf/git/default.nix b/modules/home/soispha/conf/git/default.nix deleted file mode 100644 index e896b317..00000000 --- a/modules/home/soispha/conf/git/default.nix +++ /dev/null @@ -1,181 +0,0 @@ -{ - nixosConfig, - lib, - config, - sysLib, - pkgs, - ... -}: let - gitIgnoreFile = ./git_ignore.git; - gitTemplateFile = ./git_template.git; - commit = sysLib.writeShellScript { - name = "commit"; - src = ./scripts/commit.sh; - keepPath = true; - dependencies = with pkgs; [ - git - gnused - ]; - }; -in { - programs.git = { - enable = true; - #package = pkgs.gitAndTools.gitFull; # TODO: for git send-email support - aliases = { - cm = "!${commit}/bin/commit"; - cmr = "commit --file .git/COMMIT_EDITMSG --edit --verbose"; - - st = "status"; - sts = "status --short --branch"; - - ds = "diff --staged"; - di = "diff"; - rs = "restore --staged"; - - ## Logging: - ls = "log --max-count=10 --color --format=format:'%C(bold red)%h%C(reset) %C(dim bold blue)%s%C(reset) %C(dim white)[%aN] %C(bold red)<%G?>%C(reset)%C(auto)%d%C(reset)'"; - - # https://stackoverflow.com/a/61487052 - lg = "lg1"; - lg1 = "lg1-specific --all"; - lg2 = "lg2-specific --all"; - lg3 = "lg3-specific --all"; - - lg1-specific = "log --graph --abbrev-commit --decorate \ - --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold cyan) [%G?]%C(reset)%C(auto)%d%C(reset)'"; - - lg2-specific = "log --graph --abbrev-commit --decorate \ - --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'"; - - lg3-specific = "log --graph --abbrev-commit --decorate \ - --format=format:'%C(bold blue)%h%C(reset)\ - - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)\ - %C(bold cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)\ - %C(bold red)(signature: %G? by %GS, trust: %GT)%C(reset)%n\ - '' %C(white)%s%C(reset)%n''\ - %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)\ - %C(bold white)- trailers: %(trailers) %C(reset)'"; - - # hard reset with commit before (use reflog to recover) - # git wipe [] - wipe = lib.strings.concatStringsSep " " [ - "!git" - "add" - "--all" - "&&" - "git" - "commit" - "--quiet" - "--message='WIPE-SAVEPOINT'" - "--no-gpg-sign" - "&&" - "git reset \${1:-HEAD~} --hard" - "&&" - "git clean -fd" - ]; - branches = lib.strings.concatStringsSep " " [ - "!git" - "for-each-ref" - "--sort=-committerdate" - "--color=always" - "--format='${ - lib.strings.concatStringsSep "|" [ - "%(color:blue)%(authordate:relative)" - "%(color:red)%(authorname)" - "%(color:green)%(color:bold)%(refname:short)" - ] - }'" - "refs/remotes" - "|" - "column -ts'|' -o ' '" - ]; - tags = "tag --list"; - remotes = "remote --verbose"; - day = "!git log --stat --since '1 day ago' --author $(git config user.email)"; - unpush = "push --force-with-lease origin HEAD~1:${config.programs.git.extraConfig.init.defaultBranch}"; - wip = "!git add . && git commit --amend && git push --force-with-lease"; - }; - extraConfig = { - core = { - excludesFile = "${gitIgnoreFile}"; - }; - rebase = { - autoStash = true; - autoSquash = true; - }; - init = { - defaultBranch = "prime"; - }; - user = { - name = "Benedikt Peetz"; - email = "benedikt.peetz@b-peetz.de"; - # signingKey = "[is down below]"; - }; - help = { - autocorrect = 5; - }; - push = { - gpgSign = "if-asked"; - }; - commit = { - template = "${gitTemplateFile}"; - }; - diff = { - colorMoved = "default"; - # Usually leads to better results - algorithm = "patience"; - bin = { - textconv = "hexdump -v -C"; - }; - }; - # Makes it a bit more readable - blame = { - coloring = "repeatedLines"; - markIgnoredLines = true; - markUnblamables = true; - }; - merge = { - conflictstyle = "zdiff3"; - }; - url = { - "git@codeberg.org:" = { - insteadOf = "@cb:"; - }; - "https://codeberg.org/" = { - insteadOf = "cb://"; - }; - - "git@github.com:" = { - insteadOf = "@gh:"; - }; - "https://github.com/" = { - insteadOf = "gh://"; - }; - - "git@gitlab.com:" = { - insteadOf = "@gl:"; - }; - "https://gitlab.com/" = { - insteadOf = "gl://"; - }; - }; - }; - delta = { - enable = true; - options = { - decorations = { - commit-decoration-style = "bold yellow box ul"; - file-decoration-style = "none"; - file-style = "bold yellow ul"; - }; - keep-plus-minus-markers = true; - features = "decorations"; - whitespace-error-style = "22 reverse"; - }; - }; - signing = { - key = "8321ED3A8DB999A51F3BF80FF2682914EA42DE26"; - signByDefault = true; - }; - }; -} diff --git a/modules/home/soispha/conf/git/git_ignore.git b/modules/home/soispha/conf/git/git_ignore.git deleted file mode 100644 index 8f29815e..00000000 --- a/modules/home/soispha/conf/git/git_ignore.git +++ /dev/null @@ -1,4 +0,0 @@ -# default nvim Session file name -Session.vim - -# vim: ft=gitignore diff --git a/modules/home/soispha/conf/git/git_template.git b/modules/home/soispha/conf/git/git_template.git deleted file mode 100644 index 6af39119..00000000 --- a/modules/home/soispha/conf/git/git_template.git +++ /dev/null @@ -1,66 +0,0 @@ - -# Title: Summary, imperative, start upper case, don't end with a period -# If applied, this commit will - -# Body: Explain *what* and *why* (not *how*). - - -# BREAKING CHANGE: -# Fixes: # -# Refs: # -# Co-authored-by: - - - -# Convention Commits (https://www.conventionalcommits.org/en/v1.0.0/ or https://github.com/angular/angular/blob/85b4941be137a2fcdc664dc870e408dd72ad7de7/CONTRIBUTING.md#commit): -# feat: [Features] -> MINOR version bump -# A new feature -# -# fix: [Bug Fixes] -> PATCH version bump -# A bug fix -# -# append '!' after the type/scope: [Breaking Change] -> MAJOR version bump -# A breaking API change -# -# docs: [Documentation] -# Documentation only changes -# -# style: [Styles] -# Changes that do not affect the meaning of the code -# (white-space, formatting, missing semi-colons, etc) -# -# refactor: [Code Refactoring] -# A code change that neither fixes a bug nor adds a feature -# -# perf: [Performance Improvements] -> PATCH version bump -# A code change that improves performance -# -# test: [Tests] -# Adding missing tests or correcting existing tests -# -# build: [Builds] -> PATCH version bump -# Changes that affect the build system or external dependencies -# (example scopes: gulp, broccoli, npm) -# -# ci: [Continuous Integrations] -# Changes to our CI configuration files and scripts -# (example scopes: Travis, Circle, BrowserStack, SauceLabs) -# -# chore: [Chores] -# Other changes that don't modify src or test files -# -# reverts: [Reverts] -# Reverts a previous commit - -# How to Write a Git Commit Message: -# [https://chris.beams.io/posts/git-commit/] -> https://cbea.ms/git-commit/ -# -# 1. Separate subject from body with a blank line -# 2. Limit the subject line to 50 characters -# 3. Capitalize the subject line -# 4. Do not end the subject line with a period -# 5. Use the imperative mood in the subject line -# 6. Wrap the body at 72 characters -# 7. Use the body to explain *what* and *why* vs. *how* -# -# vim: ft=gitcommit diff --git a/modules/home/soispha/conf/git/scripts/commit.sh b/modules/home/soispha/conf/git/scripts/commit.sh deleted file mode 100755 index 2204e4d6..00000000 --- a/modules/home/soispha/conf/git/scripts/commit.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -ROOT="$(git rev-parse --show-toplevel)" - -# Take first line from previous commit -if [ -f "$ROOT/.git/COMMIT_EDITMSG" ]; then - sed '1s/\(.*\)\((.*)\)\?\(:.*\)/\1\2: /;1p;d' "$ROOT/.git/COMMIT_EDITMSG" >"$ROOT/.git/COMMIT_TEMPLATE" -else - printf "\n" >"$ROOT/.git/COMMIT_TEMPLATE" -fi -sed '1d' "$(git config commit.template)" >>"$ROOT/.git/COMMIT_TEMPLATE" - -git commit --template "$ROOT/.git/COMMIT_TEMPLATE" --verbose "$@" - -# vim: ft=sh diff --git a/modules/home/soispha/conf/gpg/default.nix b/modules/home/soispha/conf/gpg/default.nix deleted file mode 100644 index 2f644422..00000000 --- a/modules/home/soispha/conf/gpg/default.nix +++ /dev/null @@ -1,67 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: { - programs.gpg = { - enable = true; - homedir = "${config.xdg.dataHome}/gnupg"; - mutableKeys = true; - mutableTrust = true; - - settings = { - default-key = "Benedikt Peetz "; - # TODO: add more - }; - - publicKeys = [ - { - source = ./keys/key_1.asc; - trust = "ultimate"; - } - { - source = ./keys/key_2.asc; - trust = "full"; - } - ]; - }; - services = { - gpg-agent = { - enable = true; - enableZshIntegration = true; - enableScDaemon = true; # smartcards and such things - - # Cache the key passwords - defaultCacheTtl = 60 * 50; - defaultCacheTtlSsh = 60 * 50; - maxCacheTtl = 60 * 50; - maxCacheTtlSsh = 60 * 50; - - pinentryPackage = pkgs.pinentry-curses; - # pinentryPackage = pkgs.pinentry-tty; - - enableSshSupport = true; - sshKeys = let - removeSpace = str: builtins.replaceStrings [" "] [""] str; - in [ - (removeSpace "8321 ED3A 8DB9 99A5 1F3B F80F F268 2914 EA42 DE26") - ]; - }; - }; - - programs.zsh.initExtraFirst = lib.mkBefore '' - export GPG_TTY=$(tty) - - # Magic copied from the gpg-agent manual - unset SSH_AGENT_PID - if [ "''${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then - export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" - fi - - - # Ensure that get gpg agent is started (necessary because ssh does not start it - # automatically) - gpg-connect-agent /bye - ''; -} diff --git a/modules/home/soispha/conf/gpg/keys/key_1.asc b/modules/home/soispha/conf/gpg/keys/key_1.asc deleted file mode 100644 index c83c3151..00000000 --- a/modules/home/soispha/conf/gpg/keys/key_1.asc +++ /dev/null @@ -1,25 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Comment: Benedikt Peetz - -mDMEZkCPnhYJKwYBBAHaRw8BAQdAA2ve8cO5iCx0Ehd8+9zhXrzzAlpo7DI5ltNM -vLQIHVK0KkJlbmVkaWt0IFBlZXR6IDxiZW5lZGlrdC5wZWV0ekBiLXBlZXR6LmRl -PoiZBBMWCgBBFiEEgyHtOo25maUfO/gP8mgpFOpC3iYFAmZAj54CGwEFCRLMAwAF -CwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQ8mgpFOpC3iYTYwD/UGnlFls7 -ynY52EAiea6Fa+ktXZQKnVjKYO4AYmUdIRMA/iY+fnhm7OgB1SSv0ssjqpeIFSwu -qTL4lz735Pn+UNEKuDMEZkCP8xYJKwYBBAHaRw8BAQdAk5J9kVCFByKW5Wk8Oobn -Ydy/sh+05irq/xjQjtDQG8eI9QQYFgoAJhYhBIMh7TqNuZmlHzv4D/JoKRTqQt4m -BQJmQI/zAhsCBQkDwmcAAIEJEPJoKRTqQt4mdiAEGRYKAB0WIQTeYpC3k+aybU6a -T722E5vLB86UbQUCZkCP8wAKCRC2E5vLB86UbaN2AQCbINgO9vljxk4T/s4N1+t4 -Zp5skgghUn4vTQXGIs2NugD9HwhSazuUHo3gJFyhAowPCtKlCbdOEmrs4qQFHU9h -0gPKdgEAtxZorpsQtrQjTHaOH0Ee5Hx+i10iP3npybzieFzvhQcA/R8L0jr8SJ6F -HP6sEpAAdQ2qp9dqB71KISBtN1JbEagNuDMEZkCQPhYJKwYBBAHaRw8BAQdAwThl -Vr4ihl/pPdTTwkb3eLpAgAnhqabuaQHM7XglKTOIfgQYFgoAJhYhBIMh7TqNuZml -Hzv4D/JoKRTqQt4mBQJmQJA+AhsgBQkDwmcAAAoJEPJoKRTqQt4mO88A/2gXjwaq -A9KN37jKb05zpsvTjOR5J9UOLsWUfye5zl6FAQCArUmXDApaOmB6FRUZqb93xiXQ -6m5T5OoMcpURC6IyBrg4BGZAkGoSCisGAQQBl1UBBQEBB0BIk7HOtw7Z+BV1Oyst -bl3PPAVuMtMJUD1CeYOMzA+1PwMBCAeIfgQYFgoAJhYhBIMh7TqNuZmlHzv4D/Jo -KRTqQt4mBQJmQJBqAhsMBQkDwmcAAAoJEPJoKRTqQt4mg+kBAMTgMMLo/IzGPVhX -8gSTGpM3fDQchgFfOMyjIDfWN0zDAQDiY6RCXavD7uVfg/949r9TQHo0Vvem63GH -9Y7Vp2vzCA== -=IM58 ------END PGP PUBLIC KEY BLOCK----- diff --git a/modules/home/soispha/conf/gpg/keys/key_2.asc b/modules/home/soispha/conf/gpg/keys/key_2.asc deleted file mode 100644 index 47188da7..00000000 --- a/modules/home/soispha/conf/gpg/keys/key_2.asc +++ /dev/null @@ -1,794 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Comment: 2FEA 7BDB 9171 70A7 B8E7 2001 DF18 78E6 D9C3 B27F -Comment: Silas -Comment: Silas -Comment: Silas -Comment: Silas - -mQGNBGEeXg8BDADF5M9eh/otTBDnbLqy8kxEHhlLRsv4wF0qCW8fGWlclAFpz5A9 -9t0Klt0AkB2EK/2EKWmm7J2DD9lq7nlvJurWXZWmcDzRWV6VWO4KftvKnasBR7kQ -3T09ga/jVgLmjGU8qKW2175MLuj+hRNwlc8TiTHrl9b+1hC5dvV6HwIJtvVbpBzj -ZmFGKBCPdA/8j/keq9kBJTJjb6YED+jAJJAHeZ7XyDeCi46MwTR09wLXIrlZenGO -wljtu+Ar+SN5droeeMN1edw9y2YnRg4zQ0lOtC7ylbV6a205B2QxSanMpaEZPX0C -Y48KZqto1Xs1skHrf3PHmRkGDbMil8yhsBlVDZOmKiMjTTEJs4nsM9llJvz0kaiw -Gu1HgMfuKxgwXZ+7qonQ9Td4Mg20hyfaHC8djwP8IEym5NOfLbkifeUL7owe+5fc -HCd3I6bnvHAtfQN2YV/VZN1rSXykrd6YjnqDYhxxlhHnObFnFYJD1M2KIBUwlLSG -BK25hH/eAvBcYq0AEQEAAbQUU2lsYXMgPHNpbHNAc2lscy5saT6JAxgEEwEIAYIC -GwMFCQlmAYAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4ACGQEWIQQv6nvbkXFw -p7jnIAHfGHjm2cOyfwUCZEFu1T4UgAAAAAAQACVwcm9vZkBhcmlhZG5lLmlkaHR0 -cHM6Ly9jb2RlYmVyZy5vcmcvc2lscy9naXRlYV9wcm9vZpkUgAAAAAAQAIBwcm9v -ZkBhcmlhZG5lLmlkbWF0cml4OnUvQHNpbHM6c2lscy5saT9vcmcua2V5b3hpZGUu -cj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9 -JGRqVWtvd3Y3bDR5RmNYTGF1eWlCWXNocENodU1rRDgtbUctN1lfVl9TN0EvFIAA -AAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQ0FIAA -AAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZlL0BkYXNs -aQAKCRDfGHjm2cOyf7ixDAC42r59qDyhO7aN0I775O6DZk2KO9YFNhZ/4wmFoPUV -eE15OwgrghX5rQWwt2xbQoC5vt1DOKsfRqdybdRo6PI8urm20/QTxmC+0yNE7yfZ -iEHHgTbdns4DtGpA8nRAdGSKEAGYd8HVMy6ANucVS4aNH04L+294/LSpG2GhMAHK -drsKWZfy51eyaFeVlZ4+Iskl/KD/vkyOeStzmtzKxlyIC66At9bIaqCGmC7u4ClJ -oFaOuXUXvvDvski7Nk//eQnlMP/kUfbR02tws7QcZ+DE8PU82maCBfXn1EWgpnMN -uZ3/91iTiJC70kmer8a/yqe5EFUQuvZrPB49Y0bAvyh7jJpxlMK1Fsq1cI5pa3Al -RFDDS3VpTP4kt80UbssQK5YKc1WvwTJGp+X/7zUwNbfPr/iA24Lj8KcykKywFmTu -+ucC1eETPphckL8Rbd5wYUAE4+JLID4pUDE/pfTggS1hA9G/IgKBNMdDB/MyJuOP -J18VXSZk9yBiWEaHruqBu56JAxIEEwEIAXwCGwMFCQlmAYAFCwkIBwICIgIGFQoJ -CAsCBBYCAwECHgcCF4ACGQEWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCZEFtVjgU -gAAAAAAQAB9wcm9vZkBhcmlhZG5lLmlkaHR0cHM6Ly9jb2RlYmVyZy5vcmcvc2ls -cy9wcm9vZpkUgAAAAAAQAIBwcm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQHNpbHM6 -c2lscy5saT9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJp -eC5vcmcmb3JnLmtleW94aWRlLmU9JGRqVWtvd3Y3bDR5RmNYTGF1eWlCWXNocENo -dU1rRDgtbUctN1lfVl9TN0EvFIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5z -OnNpbHMubGk/dHlwZT1UWFQ0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0 -cHM6Ly90cm9ldC5jYWZlL0BkYXNsaQAKCRDfGHjm2cOyf1tOC/wIxixV1NRNoYF3 -WMRAF5sloJYD8cM5TeNlkenqkWoGEze+WcswzY1ALfT0GMQpDuWQMI6yYzru8MDn -1ERMHbqgYhAVSPhQXaMJ8jiJVMq04Yjb2uys7c98vsXjoGy9zv9QaYtIFdocrUJV -dL5t+j2wQYK74uXnO+/EARLwJoIeQpq8AwwocxCJ/0nu5VllgOIyut92UHpmNBEl -qestgU/TRAjeT2m/ezyLI3U2Idy+rzP31A0U0RXOZ3cNUDrDYeeQQ0SrWhf9/4ym -wUczJyQLc5cMHSjZ4K7ib8u+1g/B6pLdiLtKHrxqFduPK8cnSAcKF5UP9CE6E7ab -5oNMmSqMDl4ZAmxn28jcvyGEei4oPDTZeYMZdxoOrIaoYw0G2BOq1pqms2nJlSVk -T1aiBW9g6u5b2kbuP9k5YAkB2XLAGWBuz7OXH0ZBmQ4vJaJRD+s3do5USnyVhJGP -CccaTVs2p12ljwawmKtJzmCcHq8RbV0CW2uBxNShbWchNnZrcbyJAtkEEwEIAUMC -GwMFCQlmAYAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4ACGQEWIQQv6nvbkXFw -p7jnIAHfGHjm2cOyfwUCYs8QWDQUgAAAAAASABlwcm9vZkBtZXRhY29kZS5iaXpo -dHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpLxSAAAAAABIAFHByb29mQG1ldGFjb2Rl -LmJpemRuczpzaWxzLmxpP3R5cGU9VFhUmRSAAAAAABAAgHByb29mQGFyaWFkbmUu -aWRtYXRyaXg6dS9Ac2lsczpzaWxzLmxpP29yZy5rZXlveGlkZS5yPSFkQmZRWnhD -b0dWbVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kZGpVa293djds -NHlGY1hMYXV5aUJZc2hwQ2h1TWtEOC1tRy03WV9WX1M3QQAKCRDfGHjm2cOyfzkw -DACj77EpB21XUgzceBilA62zIKXNZMhr1aefibe84aZQh8h8ABREtSQSIHAwBXxO -qlG30bt2fFO0oB8UEIrHG+ahlNfHxbHJZT7xlkuWHRXfV9yHC5vuOUbWLIxJWJzV -xVN7s4VCBYyrfCcLnNbaRv3BiLE7as7ayC8rLcPSr8QicasAEXSr4k4nEH5BkIUX -KtvpW1BW0vEUIshFc2QRYS9gaC9KioojLvmM+IFtHdJ9TQMds6n2zSKG5tR1/fB/ -SZ82g3imLt9bAEG2K70w572CgY1P/2ClB/hkR2rO/OazAyIdKmzuL0ZJTdgKoFbB -A5d7RFCOi8YQhv+26CchNhNhJKcQMhc0ctHrdLEL8x2+dJX8KA1CXQZV6OrVEL2R -96ETrOpJsToseaRvQoanAOXbx/zoATzhBaRIeotXacOytXXEmOwp9wSKIlrNYkDT -rboPyelwgSQiLvlLUnqTNnq1YbUtkPT1Ka5NsmjUwvsTRQzfcnR1fTWWEqPWN1iA -ebqJA3IEEwEIAdwCGwMFCQlmAYAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AC -GQEWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCYs8F+ZkUgAAAAAAQAIBwcm9vZkBh -cmlhZG5lLmlkbWF0cml4OnUvQHNpbHM6c2lscy5saT9vcmcua2V5b3hpZGUucj0h -ZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JGRq -VWtvd3Y3bDR5RmNYTGF1eWlCWXNocENodU1rRDgtbUctN1lfVl9TN0GYFIAAAAAA -EAB/cHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9vcmcua2V5 -b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94 -aWRlLmU9JGhLOV90RzB1N2FxVXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQxd3hFMmpN -VDgvFIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1U -WFQ0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZl -L0BkYXNsaQAKCRDfGHjm2cOyfwt2C/wMjQNxEE+M03T4SkI2vRlmTmWWcOZiJHsm -SkmAgvo05wMc9LUnTEfWdOpsqTfI1Ud972kuL7g9bqWQnMPq3FGYZHpHRP2rsCw5 -yPwTgjENh50sH6w1yclfvardtca7VrkTHiWqmmEzBrjEeMQMkQRLCCmvWB3d1+60 -qdKL+/ucAdLnNeyMpNWqAuZ4f5XIwHutKqQJWJlQ9NZN03OcaS/oaHHn95xXzXba -rCa7hdwRrAEYpMbYjjjfHhbQLauEhIV5JuatDD6w+vv8NUHBIJ5sXvIak6EHeWEe -UDBsu+LgRiBXJA9orE4oExdIF5LpJvGjZqEh80HFUd+3sBb/9HzaLLFrr2zSYwWJ -WGcb+Ho/ZYl4VC9rXpJfz5kyLzWVGqyDcHLIid7G0rDicBErFG2o8ppxXm8+ekRp -yodwaqHbUp62mhnSoObYJKpVJZoqwQZTVIeGnwAYpcE94e8TjK54DziyZ5ZZ9q2n -4tf/ZPu3Dt+L+tvPlF1VRMLjCCp2e7KJAtgEEwEIAUICGwMFCQlmAYAFCwkIBwIC -IgIGFQoJCAsCBBYCAwECHgcCF4ACGQEWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUC -Ys8EiDQUgAAAAAASABlwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNh -ZmUvQGRhc2xpLxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxp -P3R5cGU9VFhUmBSAAAAAABAAf3Byb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9AbGk6 -ZmZmLmNoYXQ/b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRy -aXgub3JnJm9yZy5rZXlveGlkZS5lPSRoSzlfdEcwdTdhcVV3Zkh2d3NLd2VDWFdY -Nm5pLV9JOWs0MXd4RTJqTVQ4AAoJEN8YeObZw7J/vAwL/2WvNAlqoRAr6vT/t+gm -O3AoiUzEBZXLgq5aibdbpZENjPiSfZZWzfkIpOeGQSCoDluHLnVrlcQegCAvUiBS -qbwN32X77yOggG29hAGZBxBXvJ/rj63m0B0v60Cfcgetlf6cEO6PPdsZD6VaY/cL -pO6dVHRhD4r53in7XhyzhMhW6PljY2FTFZ2rdZEliQZAD90M2hn+LCXx8rsh3SqZ -RKT88jhfcBXA20vHgagzzdXyaeo4wbWplroz+3nLz3oQDfLLWnihAhAbIHg9AE/4 -dXFljjCF45SjU+8gHpHkHfwWtwLYucOZ5mr4RUVy8hiPyz/1fLxNKkDOvg42tDAB -dIwt7CpFxHfn63GjsRRmNyZoIQhoDKX0BCuHF+Qsr5jIHd1o1o9HpjHicdZV+uV6 -RQedsgbfCHJPZKdXSyxI/SF9jDlXCvG2aTzTXk2vQ7PCZKsFjVFJA7U87zmr0ZsJ -i5axNn+v8JA2hT1xxd0wkVWwg4f3kR4cr6AhK3EFVNTtTIkB2gQTAQgARAIbAwUJ -CWYBgAULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgBYhBC/qe9uRcXCnuOcgAd8Y -eObZw7J/BQJizwJUAhkBAAoJEN8YeObZw7J/o7sL/1iaIT4y0FypOhzzUqJzOBP2 -kabeq4iOS99w2wHEiM6xzXoGuRy+lEXZMb94VVUNhJDayTf11OZgAyAJdt9OAyBK -UsFf1AbVJw0YY+384bjbId/oTqngqKIkBH9bpDIfSX5riXqD5SmhwRuuRPHuO+ZT -aM3tdDnSjW4brEub3aHsHPNbBM39u0Q9JGPpd4GhXnmK1iYCQU5ZRErgpxqPtAOX -h9/eIIa5Tv+KbPzwBJ3od27dbuo/Y3OwxfwSuSKieK+xvDHyxzD429tEh+uMP4W/ -2b4GbksC0Z6nNM7FBa2Vq/vKOa6yTGE7bgkudr3tWa5N+x/towX6crgB+5DAByBR -on967FLER6i4Ok9V1hBnvrjXGLgJeNkoxMxiK3UH0ijY9laHO9fd8v4RoHubHxjV -YXJNUm6EUvRPXskpNw5X24dQ3muuLpOVX657Z609ar6jEQgXjeuyqUL4TwXorDZs -4HU1Mj42iFUD9HdIcMqW+/zpKGxEJWFjlg2z1/uX9Ih1BBAWCgAdFiEElgb8dJ/O -FjYHI9StpelAEMOmQq0FAmTEI7oACgkQpelAEMOmQq2x6AD/WrvWuFlewmBNqoLa -AMQb3Hk3Ls3GZdYkpNhuTqSZbs0BAOPNAm00QHD1QQeOsZkuExxgPoMDtdW27qD5 -vfVP7xQCtBNTaWxhcyA8bGlAZW52cy5uZXQ+iQMVBBMBCAF/AhsDBQkJZgGABQsJ -CAcCAiICBhUKCQgLAgQWAgMBAh4HAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8F -AmRBbtU+FIAAAAAAEAAlcHJvb2ZAYXJpYWRuZS5pZGh0dHBzOi8vY29kZWJlcmcu -b3JnL3NpbHMvZ2l0ZWFfcHJvb2aZFIAAAAAAEACAcHJvb2ZAYXJpYWRuZS5pZG1h -dHJpeDp1L0BzaWxzOnNpbHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1Zt -U1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlkZS5lPSRkalVrb3d2N2w0eUZj -WExhdXlpQllzaHBDaHVNa0Q4LW1HLTdZX1ZfUzdBNBSAAAAAABIAGXByb29mQG1l -dGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGkvFIAAAAAAEgAUcHJv -b2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQACgkQ3xh45tnDsn9K -9AwAlqvwQNhFakWY7i5XmrdzcBj5nHKoxYkCpVEwwEVy/B7LV6h+ZoXadtQzqn3l -BdoSchkIYcZT4xDV/b00bCD9APpu6+Eom3CcBlcxIthoEe6ZKXEImounCS69wkVA -8ItZlSlhyxTRSQzgmAI5qApw/Kh+AmpsEK8W2kY2tpV7fR/cXZ5/pNoU907T0U5f -bpnEgdZFeNUw+RayCELUZnZ1wgl33yADV9WV+nn4N/t1/xEfAFsv5GuNoCrc/BAu -jyaoVS8ULkmioYyUmFHDAwn/SXAIMOL5LNc/4xMt1CkYkRXiEQW+l2UWrGF5hhIY -R6ofOeUgxiw+iDM2vA0G65+OUCTRpkrHFl5d777LFiHEWKKlBKM0of1Cr+roXrPi -uYwDjuC4WYEtcvKG1bimI6MRwoUmjW8yg8E40jidZYOuOVi8HVteg+HeCRW7qmwX -VR1QI+Fp2eRj0DSeh+wwtaFxMHcTRe10UFkJ244HOihydEqFUfPOvwTzuXtZjO5Z -CHQPiQMPBBMBCAF5AhsDBQkJZgGABQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheA -FiEEL+p725FxcKe45yAB3xh45tnDsn8FAmRBbVY4FIAAAAAAEAAfcHJvb2ZAYXJp -YWRuZS5pZGh0dHBzOi8vY29kZWJlcmcub3JnL3NpbHMvcHJvb2aZFIAAAAAAEACA -cHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxzOnNpbHMubGk/b3JnLmtleW94 -aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlk -ZS5lPSRkalVrb3d2N2w0eUZjWExhdXlpQllzaHBDaHVNa0Q4LW1HLTdZX1ZfUzdB -NBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2FmZS9A -ZGFzbGkvFIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlw -ZT1UWFQACgkQ3xh45tnDsn8fMgwAhHfRuMb9ayKGl0Kb6by648KHe6NOHKLTrLm8 -5w/cIBrW2s42rSZdybeVNA+AnrtBvRD/yQ7idji5FS0nYac4lbZ+oLNCUc9sSvZW -DgWsXaYs5ujpR1ftYd8A0AytsBvrGczPrclMV5HjuE11kilYXMwNqiOX0hXZ3ewx -O6d3KAYLIgajVH7SOgnexYs5Up7QO6osrFqRwokCd/Yx2usEap7jDajjeXQTNdwX -e5RvKmYND3jYv0hood7IvSWeJHhZ5DIRQ9FpOt6PxiBzrEx8YRF1KbtniMTwf8fB -Dl6eAo89I3WjT8CwQryeQ+9a+15WPQyLddEci1Vj7Etbmk6NfMmaUnm+OOOyeDz1 -0JYxPt4H32GYg/gGDZ7FxKG3gXHeCO2VptiS/VxCw4+EkVt0EYqWk51JGBNkOOL/ -8SMRFNNOah6xKR7hdPLmS69MqNvJGR/R0uJd3B4cF0ynLYFZRTJ2WH6nox0oXihB -TsZxnPulkr20RdS2yXRfhfiouE2XiQLWBBMBCAFAAhsDBQkJZgGABQsJCAcCAiIC -BhUKCQgLAgQWAgMBAh4HAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmLPEFwv -FIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQ0 -FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZlL0Bk -YXNsaZkUgAAAAAAQAIBwcm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQHNpbHM6c2ls -cy5saT9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5v -cmcmb3JnLmtleW94aWRlLmU9JGRqVWtvd3Y3bDR5RmNYTGF1eWlCWXNocENodU1r -RDgtbUctN1lfVl9TN0EACgkQ3xh45tnDsn/wMgwAjNJsV6KyVmL5GtytbvmEPHDH -s4Z8yS0BZF7wJr2u9QGQxjO/pthpGCnb2PNKUfLcXxXTUO9EZD8x9jV+WqaV8gL8 -h1zW0fWWpWL6hxwloAenmJCwydjjbWnpf5I8IUkJoliarNvy3f2dYwurus/G8Y1P -YoMHxQBGLojM2XRj97DxuVgTTpbCkTeNyot8PX9BMGcBAdzccExW6NZ07kpgILfx -hlVUNr/R/kRijf+kxG1WclKtKmzti9xjB8/00NgKUNnIyl9DC6vkZBsudIOCsopa -cu1c4bpVLtL0HhZfXfAaiHV/GmGpa9Sdv3PlP3N0UGPMNMNAET+6TUMzPYeXT9tC -0ppHKbIOqOx4qeHQMmXGv5YRTt4+x/HQleVL7vDOOasJu+YcFYaxfX8LVjJstTKh -bxR1PDHA3Rhvt6zulgHh6OE0seNTuMXzvKwUG2SBbRrmJtzQ7k+C4bKPolidPGfY -Jd5v/gzlRky4Hyoiqlg3Mu1smZxYqdA8rw1+wjaXiQNvBBMBCAHZAhsDBQkJZgGA -BQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAFiEEL+p725FxcKe45yAB3xh45tnD -sn8FAmLPBfmZFIAAAAAAEACAcHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxz -OnNpbHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRy -aXgub3JnJm9yZy5rZXlveGlkZS5lPSRkalVrb3d2N2w0eUZjWExhdXlpQllzaHBD -aHVNa0Q4LW1HLTdZX1ZfUzdBNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0 -dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGmYFIAAAAAAEAB/cHJvb2ZAYXJpYWRuZS5p -ZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29H -Vm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JGhLOV90RzB1N2Fx -VXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQxd3hFMmpNVDgvFIAAAAAAEgAUcHJvb2ZA -bWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQACgkQ3xh45tnDsn9tmAv+ -N2M+eK83AcE4EYbQiAmDlP6PJAzRiryYErTRO64bhq06JXPz7QvIVbsML6kou2hg -j51E4721EKS2essVlRqYf/5d6IKBjakEbgk3ta8jkc+jSSP7ARAjCWU5Qzjttucq -6Fs+uaQ8Xwdb9SamL6MmR9TSifVPxFm8n14jj4JUuXlpZWj++TprgDzz9hbq5ijE -LKYOaenSK8/OR6fzXgAF4+3tRwZRiNzf3Ui+cUtF+gP2b9GH8R7L+7bkMJ2MYkT6 -i7LShScXOt5htTva3lZ1ekFCzNhPOd+ubvDRfnJ+Jqmk9KaK/unb7c9N5vr1Ures -QFPIk1pIMy3PayWHgzbYmKmjEDpGiBy3ShKVMu9Fwx6uPiD16eHvc8VisuWNlDlI -lRK23lZKVJ27RdfIh892b5Ywn07J8CC5XSNl7M3cCsnXR6P/8/es9eLAyjip7QIe -pHW608TIsKtiGBXTamt2lIcrFZ5wCs9HUfhuBopxU5OzxuI4Jq74oG611n63bo0u -iQLVBBMBCAE/AhsDBQkJZgGABQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAFiEE -L+p725FxcKe45yAB3xh45tnDsn8FAmLPBBIvFIAAAAAAEgAUcHJvb2ZAbWV0YWNv -ZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFSYFIAAAAAAEAB/cHJvb2ZAYXJpYWRu -ZS5pZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9vcmcua2V5b3hpZGUucj0hZEJmUVp4 -Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JGhLOV90RzB1 -N2FxVXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQxd3hFMmpNVDg0FIAAAAAAEgAZcHJv -b2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZlL0BkYXNsaQAKCRDfGHjm -2cOyf7KOC/9/5NPmpyBKBr0ZcHP42VIS/88luyWf9qHttfw8dhhKuHIbqff3HwPo -BMmpWp6WOLtamoAAAUVkrzs2UtFGBs0W8iECOax8Qr5IU3qKSj9IFK5umt2NkTMP -6IFZ4UDWqZWZaH+2cWRdS/SgUJh3zxGIWJYkp2oV4yQQqKm/ZBRFC+ek2sI1bpoL -qf1xesOtBsorKFPKaJEG+0uEsogxczukpTq474bocRhFWNhQ7skNKVLcwo3uxmot -rxXPxj69RbIxhSPsQGYeq3+k/rEkptxng145iY11zalvizXzODVbjvjXWaewq+RT -n401oW3TchjTq8j+2e+ZcWyQAuFW6HrfpSMdUPDx30LXPhUcN6ba48KXdM5Lxovy -dGMixs94uPzYAQbGPK6LRRywXvMsEBtf+hihxzldDiuR8STTmtP+6YWsCiUOHu4C -QcLFXbH+5SBwUH0GRkqj9oZQr8rOsQjVfFnnyt/1v0qO39/46WOMeL265K/Ra6tQ -O36bn4SUD9OJA1wEEwEIAcYCGwMFCQlmAYAFCwkIBwICIgIGFQoJCAsCBBYCAwEC -HgcCF4AWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCYs8CzTQUgAAAAAASABlwcm9v -ZkBtZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpmBSAAAAAABAA -f3Byb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9AbGk6ZmZmLmNoYXQ/b3JnLmtleW94 -aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlk -ZS5lPSRoSzlfdEcwdTdhcVV3Zkh2d3NLd2VDWFdYNm5pLV9JOWs0MXd4RTJqTVQ4 -LxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5cGU9VFhU -hhSAAAAAABAAbXByb29mQGFyaWFkbmUuaWR4bXBwOnMuc2lsYXNAZGlzcm9vdC5v -cmc/b21lbW8tc2lkLTQ1MjE0OTk1NT1lZDhlYzA1ZDNiMGZjOTc3YjY3MTIwZDVj -MTdlMmMyYjNmMDk4NmJlYzc4OGI3MGE4YjhkMzQ2Nzc4YjhkODMzAAoJEN8YeObZ -w7J/SD4L/iUm43LYEZVG6G0RzfZxpP2L2JwHZCuMQGO364lmV5or0ZtQQERimXF3 -e+xCgqvx3Yb4nL6W0tVi75DFLJOBSnOshFnKXms/ufY065en9hiMBS+BmK6PlrO8 -6iwiefFMvSAlkmDp8KVqhOAB5P/i27C3Vd5uhLqRM1EEoWbgCxlOpaOnwBwNq+V/ -kiSaZ5o2HrDDGh+9ecpkEouel1H1qp+EvEL5BgreSLFG5OWDY0SNA6A4l5adM0u9 -PC/15DdCDRmJWcRUcb1Kqa19tuZezb3oPrVHVI75LhzKlf3eklDpDfrF8kgJGhvs -hcaeFWifyFu73aloYivM3ZY8uMUz628MPBJ5n1ud1RkORYSbbfDsDqwekAWsBq7i -WS1oymWMo6F/95DKFeJCzv2GMpZfWBLFvFH8/c7v+7LgboiwoTenlnZdAYaQMFsi -mXfG4+M/iAI177aPPRuU+1Yc4XKG3UeIUVmZkw8oYzrfNaIGdGeMXiZ/O39Eoasx -/a0NIxTLBokDowQTAQgCDQIbAwUJCWYBgAULCQgHAgIiAgYVCgkICwIEFgIDAQIe -BwIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/BQJidalDMRSAAAAAABAAGHByb29m -QGFyaWFkbmUuaWR4bXBwOnMuc2lsYXNAZGlzcm9vdC5vcmebFIAAAAAAEACCcHJv -b2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxzOmMuc2lscy5saT9vcmcua2V5b3hp -ZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRl -LmU9JDFMUjhPTzQwYkw2NDA3aWZmMDBKOGc5b2QzWnk0bzMtREFjNk5melREU0Ev -FIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFSY -FIAAAAAAEAB/cHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9v -cmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3Jn -LmtleW94aWRlLmU9JGhLOV90RzB1N2FxVXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQx -d3hFMmpNVDg0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9l -dC5jYWZlL0BkYXNsaQAKCRDfGHjm2cOyf1ZtC/9QQRWfVfBJwVV96P/bxqkQTlNU -HZNzAJ3NLmY9VmwQ65Y6g6feVMPle+f6QGR1qg/7BfWre6ZgaIcp9wfQKwV8D2a/ -9EzdwLbE+XAy5NTdIaXriqUdE4A2Wj1ga3HqnO11JYOAcZS2I71ieQkYgiQnp1RK -JZYXuJHXoi//fd6ZbrZxyM9lneKovac1qqb8nFM85E27H4kJ5k7kC9jdDzqeRliH -Dbz7rubFWYsUrEER7uM8+V/fs+GNWsg/5YoEHIrrtmBjq1LCpu++r/Jtlp3/ik+d -uRC/Z5Z2nypkrtq91p1gMBUkDqu5cTPywIZV5YNO4jaN+AdEJk1pB4plTJNa70vW -9mSEHPgomcwjXRrO7jsJAaei1bkKgSY9fC6glvAmlNt4lzlKiOBzPmyxoq6GFv1J -TGnd8kpkBEi+Xcenu1DmUCHcrq/2sFj9UtnonG71+Euhqmdqbx7jSSuilDyaULSC -KZFixzL/s+YO0P8O4XbiOTNzdq9bCJwNDxvt8TmJA/gEEwEIAmICGwMFCQlmAYAF -CwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AWIQQv6nvbkXFwp7jnIAHfGHjm2cOy -fwUCYnWhUYYUgAAAAAAQAG1wcm9vZkBhcmlhZG5lLmlkeG1wcDpzLnNpbGFzQGRp -c3Jvb3Qub3JnP29tZW1vLXNpZC00NTIxNDk5NTU9ZWQ4ZWMwNWQzYjBmYzk3N2I2 -NzEyMGQ1YzE3ZTJjMmIzZjA5ODZiZWM3ODhiNzBhOGI4ZDM0Njc3OGI4ZDgzM5sU -gAAAAAAQAIJwcm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQHNpbHM6Yy5zaWxzLmxp -P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dWbVNUdWpmaXY6bWF0cml4Lm9yZyZv -cmcua2V5b3hpZGUuZT0kMUxSOE9PNDBiTDY0MDdpZmYwMEo4ZzlvZDNaeTRvMy1E -QWM2TmZ6VERTQS8UgAAAAAASABRwcm9vZkBtZXRhY29kZS5iaXpkbnM6c2lscy5s -aT90eXBlPVRYVJgUgAAAAAAQAH9wcm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQGxp -OmZmZi5jaGF0P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dWbVNUdWpmaXY6bWF0 -cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kaEs5X3RHMHU3YXFVd2ZIdndzS3dlQ1hX -WDZuaS1fSTlrNDF3eEUyak1UODQUgAAAAAASABlwcm9vZkBtZXRhY29kZS5iaXpo -dHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpAAoJEN8YeObZw7J/1wML/AlJqYj6jMvV -VWF0YYLcL2zzogi7bvpIjKDOPYIKSMI1mKGYvz9M7CagsY/B/7FYX5ZaAwHV65xM -j9bm7IUwtB7krxUs1MGRnN/lyAMdphyuC6k1RptMmYoAEQwLizg8rbiq0fq97o/P -UVTWKpVzYart6g3Bfbm+Bya93IW2Wmx6hsKWxKT3Kvcrxb0Kj41aHtrbXe9N028P -6/ujKzRpq+CaNvIAcArVwMRqIFYLKYMH0aQPjVqhRIW6b3hcZmza+ZmAc5bPcUSH -zemvnPLKjlQVb0xiozG8EYTLU0z16NX1jwQao7HZyvTZSMj5ExDbqEPYH08apHEz -JjiyoFHsCvWIWpt2kvE4TG9xdGhgTf6PnEF6RCVsMDK8aQSqDQImDG1XHZImrHDY -4Dr6Adgk5PRkU8fEQLpJZBTWaH8HGtM+7F+nIFf2M9p28PZGSkIvKJaLDrT+eGoC -4WA9IByrzvukOEr2dUM0EIuiTeArBDN7AZXkeC4+SAWpxfpNhJxyRYkDcQQTAQgB -2wIbAwUJCWYBgAULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgBYhBC/qe9uRcXCn -uOcgAd8YeObZw7J/BQJidX+UNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0 -dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGmYFIAAAAAAEAB/cHJvb2ZAYXJpYWRuZS5p -ZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29H -Vm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JGhLOV90RzB1N2Fx -VXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQxd3hFMmpNVDgvFIAAAAAAEgAUcHJvb2ZA -bWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFSbFIAAAAAAEACCcHJvb2ZA -YXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxzOmMuc2lscy5saT9vcmcua2V5b3hpZGUu -cj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9 -JDFMUjhPTzQwYkw2NDA3aWZmMDBKOGc5b2QzWnk0bzMtREFjNk5melREU0EACgkQ -3xh45tnDsn880AwAmlIzYs0RqDgofVK2qomwiufi/ClVpI/QTIfrUf3L+XznXeC5 -Pj4882XPLd+023pafdf+ih9Q7TIwyBdxuQVZniZb1/WYT0LfYjOtOPImUpeuySUD -FAOrxSHNTQ7pCT+2sX/Bz5uK3JMMgh2hKHwJdWab+44ragMPo6htxVMhOViIo5Xy -E/J55TuqrSezDjnQingBZQYBbibHOG6gleGunHVelvtYadNsWjrMBhTvTigueUUn -HVC59uyyuhLLfdHrK9nKA8l5lYnvod7qNJOYq7mQnOd2l63rm5T9YuS418p2ci+l -SzHhhugm1PWHlmGqdVtbBNm/v3iSggK7Lzd0Bnrb59lcP0fDRiQBGzUIeM+mxnV8 -Sd+v5RPGnmYJXu0A3YdwvdLJ1YubejYZjMynTMnZmzltHA/g/iKgdWoR7Z3/LjRs -j2j5mIEpwGlRmsGb4ZEHSWAXJs7ZtjzSrVbYwCZ33pxtrnuRAaHaJCFdVmMIG5mC -2I/fxzcJPF6OLeV7iQHXBBMBCABBFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmJ1 -bRMCGwMFCQlmAYAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQ3xh45tnD -sn9YjgwAnpzuJiD/WqVpx72l8kvuGc50IEZVaLl/DiGHG0P02F8DrNjtDNpn42ZH -2Oi2vEr9w+WcAZp5uL7PI7x4qN8CVfKxAhFuOhZYL29Fe0mTYW7UDJF/kpU0PRTN -4hmz3Hi/dTnKwa0+nY57KF/sIpnocrnDXMF44zqohezR80abym8EHMZFomYyWLOo -wpxz9q3ld/+sjl4zD0uUkECilU1TQD508WO85fpXle2hOGvSWi8bRSlNfjNg9+/7 -PCrV1z8JN5VAAvGviEMpnAsTSPbGmSNJxcNKD3NveYag87/tKBROEd1VWELT9ReM -/jRzVFbbF+YNPIf3YIabOpGAJl0axffetVyTlzlHjX0jnvtHLi7nwDAJvVQB70wo -fVTIR+8J9LOwaEMmzS9ghqDT+aeXmrk4Kuet9stpQjGFJSJZ1dD+83Amu1Ip+BRE -eBv3EMrEz93CMQCYGzOR/XezAda8OlblTWcyyIdGS31CwCHxThz7VHRcBSni4hZZ -q0Rmceq8iHUEEBYKAB0WIQSWBvx0n84WNgcj1K2l6UAQw6ZCrQUCZMQjvAAKCRCl -6UAQw6ZCre3AAQCtEovfpCXUjiTypjnzCpke9rHIBnAVODTm93AAZ3BS1wEA98iA -skdHe9liLwLn9lA1BB3TRqZ6kjWMulKtp7U8zwy0G1NpbGFzIDxzLnNpbGFzQGRp -c3Jvb3Qub3JnPokDEgQTAQgBfAIbAwUJCWYBgAULCQgHAgYVCgkICwIEFgIDAQIe -AQIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/BQJkQW7VPhSAAAAAABAAJXByb29m -QGFyaWFkbmUuaWRodHRwczovL2NvZGViZXJnLm9yZy9zaWxzL2dpdGVhX3Byb29m -mRSAAAAAABAAgHByb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9Ac2lsczpzaWxzLmxp -P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dWbVNUdWpmaXY6bWF0cml4Lm9yZyZv -cmcua2V5b3hpZGUuZT0kZGpVa293djdsNHlGY1hMYXV5aUJZc2hwQ2h1TWtEOC1t -Ry03WV9WX1M3QS8UgAAAAAASABRwcm9vZkBtZXRhY29kZS5iaXpkbnM6c2lscy5s -aT90eXBlPVRYVDQUgAAAAAASABlwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL3Ry -b2V0LmNhZmUvQGRhc2xpAAoJEN8YeObZw7J/AaIL/0TLONGoB6BBR0/ET3Zh11Uo -+3ED8S5MOqdk27GTlah/s03RFnETyKBSHVoyqW/oIAQl88QRrdAzuak3OpZuoxRX -Ras7mVh8Yv71QnVmvex+MmH0MPfWEP73qKdSMefatKJopVR9g0fhSeWGImmR1E4Q -37f2ORzx2he/0obcwVtWRPupZhQ5iVsseRTQOPmgt82+LV7/dQPbOGw9oa9fizcG -7ZtI4hkJn8SSNzRwt3xy/I/rF37RAQbwqxVI+EZ9bkjbssAy3QBRVtp8vJZABrcM -F7VCtLKrWiofW88LW7KnVgSVUcIZ/omXCOOia/Q5jdVMKEAHxvS5rKz9EgH4b9t+ -94gFa4yp2CUXWlzZldyyOf6OWjYdTMMPLQmmghhsIu91aIK4DM8MEg7fsgDm+X8F -bRG597KjJRrFCxcrEpqn4RjiWa+une15A6FNjMfs4UAxUyz8xakjog5aoEu8JvDp -LipXM7/sO7p7zxDZU9dAypgsC2XiUQDqOW5hKwd224kDDAQTAQgBdgIbAwUJCWYB -gAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/ -BQJkQW1WOBSAAAAAABAAH3Byb29mQGFyaWFkbmUuaWRodHRwczovL2NvZGViZXJn -Lm9yZy9zaWxzL3Byb29mmRSAAAAAABAAgHByb29mQGFyaWFkbmUuaWRtYXRyaXg6 -dS9Ac2lsczpzaWxzLmxpP29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dWbVNUdWpm -aXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kZGpVa293djdsNHlGY1hMYXV5 -aUJZc2hwQ2h1TWtEOC1tRy03WV9WX1M3QS8UgAAAAAASABRwcm9vZkBtZXRhY29k -ZS5iaXpkbnM6c2lscy5saT90eXBlPVRYVDQUgAAAAAASABlwcm9vZkBtZXRhY29k -ZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpAAoJEN8YeObZw7J/dTcL/3Qx -g/pZ6syoO8y4U34wGExBFQRKknpZURr5DXyethMlKh+x/CVZ/NUZFhlzs37e71fq -rw0Yexcgro8676x6Tq/LX982MGO95sceeHz3hiiqw93LgZLw4KdcIg3JLL2VwywK -Ls5JIPxjF/zXa2++QV9euPrvWD6PI0fZIFghVD93S4Qfl9XpJyJ6IEC04OKf7klv -/8FqFqKuRBPPsLXPH3VckC3VrcsNUPppD3ZUHdpQRn31IOkDWC5t2z0w5kJutSSZ -1HD/u/04lElPAL1SDBk7bYzwMs+TkJ7oRgZTCwA3e8Ikfzrt032WRO6PAtX4cxeZ -/OtkuokSmSGhtXF9lo64qCOkwfw0uJIgTFV9k2FIB4WpjdaYs0rCaCpyKSp3Yg6a -GLq6pRuNbtfaY8kjUAfDOp9+NBgocAojoqd2nK+/wroo81fps5bM3N0V1qNgsTQL -c3Ar1nK4aPdxBLwHtg99/S3hJA3j/yG+gQXr+3ewH2xcS821QTLXpmd00mP+kIkC -0wQTAQgBPQIbAwUJCWYBgAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBC/qe9uR -cXCnuOcgAd8YeObZw7J/BQJizxBbNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJp -emh0dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGkvFIAAAAAAEgAUcHJvb2ZAbWV0YWNv -ZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFSZFIAAAAAAEACAcHJvb2ZAYXJpYWRu -ZS5pZG1hdHJpeDp1L0BzaWxzOnNpbHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFa -eENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlkZS5lPSRkalVrb3d2 -N2w0eUZjWExhdXlpQllzaHBDaHVNa0Q4LW1HLTdZX1ZfUzdBAAoJEN8YeObZw7J/ -l0MMALLTO4OycZTBEuhm66itGT8Az8xzj1y/A30DUBA1QoQ2vtcaFXeZe/pP/qUq -wlXmgWgpIUu8vKvY0OzNq0lt/WPGazdYdDFZJARcig+vmVMRPasNqU/pi5QPkpjj -as9EtwnHrn8Fh+lklw4Cty0FIcCjPVv43y80k9fZt4MyF1cktG0VUO6ASC7ahHW4 -MEQYqB6D9IehQdMLOEDAazVadanSXMAScN0Pnkxvd1FoS/Jubk6lLMMwul3Oihyy -nZJQtM9GgP1l4p1xpBO3AoK2xPvAaqCKuMIKFY51mK5+/rxU3xsZMyRJQWzy2p+s -m0RV/libGmG5bGH1S+UTd3BcR747JO4C9QkhXfhAagsA6iz0z2mXNxhaGhuKKv0o -orLU//ubYfJaMLR2sWRehkuWVlhAMHZ0yF+kFW5Wb/qOAm5tf8ILX2XjbrU03MIY -v7KMAY++6dB2SYJZTtOBDIjKmCyZisYFwszttb740gL1KsAxM6xsHpIOfUaljZu8 -WSV6hokDbAQTAQgB1gIbAwUJCWYBgAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYh -BC/qe9uRcXCnuOcgAd8YeObZw7J/BQJizwX5mRSAAAAAABAAgHByb29mQGFyaWFk -bmUuaWRtYXRyaXg6dS9Ac2lsczpzaWxzLmxpP29yZy5rZXlveGlkZS5yPSFkQmZR -WnhDb0dWbVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kZGpVa293 -djdsNHlGY1hMYXV5aUJZc2hwQ2h1TWtEOC1tRy03WV9WX1M3QZgUgAAAAAAQAH9w -cm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQGxpOmZmZi5jaGF0P29yZy5rZXlveGlk -ZS5yPSFkQmZRWnhDb0dWbVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUu -ZT0kaEs5X3RHMHU3YXFVd2ZIdndzS3dlQ1hXWDZuaS1fSTlrNDF3eEUyak1UOC8U -gAAAAAASABRwcm9vZkBtZXRhY29kZS5iaXpkbnM6c2lscy5saT90eXBlPVRYVDQU -gAAAAAASABlwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRh -c2xpAAoJEN8YeObZw7J/DUEL/ilBrutKMPEdU6QwtayjwfE1nBwhRxK6LNZaNe5t -EpH1YUS+Kg21gdVFhkSD34UNwpdqE2TdeRe1cLrm18+QDgRzaM+nkQzZmYSTFEa/ -q5IVudDqrdNAimYyJsUBDRVErBOKPDlIrcsZ9FYYwXDsv3fANBhGlMLC1ahQECu6 -bP5Y7Lx+GaAvfywoGAqZkqUmfOAvYvb2pCFQSZxc9TNua6iisyVgiuvNXt/GnrEG -+lLBRlPfG+MdXpYOTkxi9xuszbvAaD6Ec3TKj66fp0tFQrwGtmuGyJcKxv3pcA7T -Jcv8rtaAAqYQQ8G3U2GPIfche1ty3Q8ECSj9faKw9gqJO3WNpyiryB/2Ig37No+4 -3zzdCrHE0NsHDGwTBDRAx1L8rxWBZtLvTKquQntDmXj+M/xLb8nZ+x9JZcVf+3QE -o2q7uOaeqcOeJWOTLEdhjR4ETumxPTAvyszgEzwPH5foZBQXUJbXeoIonqm4ywPg -rsIfyXbsoOIFOqiwph+M7ET684kC0gQTAQgBPAIbAwUJCWYBgAULCQgHAgYVCgkI -CwIEFgIDAQIeAQIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/BQJizwQSNBSAAAAA -ABIAGXByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGkv -FIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFSY -FIAAAAAAEAB/cHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9v -cmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3Jn -LmtleW94aWRlLmU9JGhLOV90RzB1N2FxVXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQx -d3hFMmpNVDgACgkQ3xh45tnDsn/oSQv+PhwDVpYgAviMduLMZ8wLMNUYHsGXTwpJ -olCmnc/aMpB9GBM7FdniI2JiAP1Ln45QjABG0TEOrf+/FkSDVcYEz021VRpq3rPs -q2y5PpVc2PA0Y7pE6kpNE2hvd8jHJDFVzyukJInNiLXSbWk1aNes0yYACcXLKnrz -mkBllEaEsVohsfIzQVKWCypZHQbm1WOhTsh87jRWxA0bs7ryK0jPfx4oxOFqB8M2 -LkM84hODNrnoXyoLIMcJpT9gsWuoVVzWhwQzHg26ihXO8IDabIcoszJIZ2z2DBW2 -wTKqFMTMN6ak09OrTbI+g5Xy5rBaCHyCLHstXZt0i5iCNkwQQG3BgYA7m1eIjqKG -ykWQ42ACq8SJWp8L1eslaJVGrJSClCSgd8rpIqcXZLSqNwdlE6NxtQpn0cUrJihg -7X+oRbSFzHUno/ktn08P1gn9EE7vogLHMRMD27VOD172NyTu3iivEVnYcpFGfiRV -k0PGIwna+/DFJNuG7agUJs2Fv9IFgufpiQNZBBMBCAHDAhsDBQkJZgGABQsJCAcC -BhUKCQgLAgQWAgMBAh4BAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmLPAsqY -FIAAAAAAEAB/cHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BsaTpmZmYuY2hhdD9v -cmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3Jn -LmtleW94aWRlLmU9JGhLOV90RzB1N2FxVXdmSHZ3c0t3ZUNYV1g2bmktX0k5azQx -d3hFMmpNVDgvFIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/ -dHlwZT1UWFQ0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9l -dC5jYWZlL0BkYXNsaYYUgAAAAAAQAG1wcm9vZkBhcmlhZG5lLmlkeG1wcDpzLnNp -bGFzQGRpc3Jvb3Qub3JnP29tZW1vLXNpZC00NTIxNDk5NTU9ZWQ4ZWMwNWQzYjBm -Yzk3N2I2NzEyMGQ1YzE3ZTJjMmIzZjA5ODZiZWM3ODhiNzBhOGI4ZDM0Njc3OGI4 -ZDgzMwAKCRDfGHjm2cOyf+tmC/49Gj5whhg6NM7gjkzGrkdG2gFe4CYeGrqxh5sr -VGo6iFbLug+fVF4N5ThBT/weTyVTCwZ99E+vKGK6JmrizMlgis0kUB/ne7N+Gn15 -THmqXPv5KwiNqUAjRfE0OluYQ6RKe6irvRuJlYqdM82RL/z1BLhvHSUIRFJFeBNn -QWe92EdpsC4AhxKbIsIqy9KeS9CQkyP3K/FIf9tpxT1ne/xNfY0bMqWGMKouC0zQ -43FbdBmCt5qNpT+Hfgd2uVu2SZqXTBQlhnqlHiySzOtb2eP+pEMbMB2ms6YBzE7U -gnGeny8RtpIkkIROIpy+pZObX65SbZLCFwbebqmIRCLDZLxJ6mB63WW3A8Jzvt49 -fvlnd/o9e7h/GB1xgWQP3ko8FIhJ2kBEl6ErotxdQCRvjqPE1qGDmYrt6w+DOZmP -G3/jd+E1/fUca16zm1HCdn5yDzOrhoeKnJzokSjQtcuMXJ+bLRGwGlj00ZYkEWUE -sncVNw41PPC92Zh26EogFgGNqFKJA6AEEwEIAgoCGwMFCQlmAYAFCwkIBwIGFQoJ -CAsCBBYCAwECHgECF4AWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCYnWpQzEUgAAA -AAAQABhwcm9vZkBhcmlhZG5lLmlkeG1wcDpzLnNpbGFzQGRpc3Jvb3Qub3JnmxSA -AAAAABAAgnByb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9Ac2lsczpjLnNpbHMubGk/ -b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9y -Zy5rZXlveGlkZS5lPSQxTFI4T080MGJMNjQwN2lmZjAwSjhnOW9kM1p5NG8zLURB -YzZOZnpURFNBNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vdHJv -ZXQuY2FmZS9AZGFzbGkvFIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNp -bHMubGk/dHlwZT1UWFSYFIAAAAAAEAB/cHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1 -L0BsaTpmZmYuY2hhdD9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2 -Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JGhLOV90RzB1N2FxVXdmSHZ3c0t3 -ZUNYV1g2bmktX0k5azQxd3hFMmpNVDgACgkQ3xh45tnDsn8T/AwAkA2/2uLfZCQE -jBZWKTJmZXO7XYSsaABcZPZYyjeUkwdRzFqX61cFD2i3R8kZ7UAablHunDYQmkRe -5S0Enq7GgxEE+qQXFyFJprPpI09gedkigsF4mGrGKooG0Kf19PH2yrZ6klERmmuE -mqbkeJUxh0iBM4snISbzFbRnUtMWS5hXbiojggqQMen7Ht3YF8Sv/Q/MkGfZBMUR -XmwVWeDSeTXqPqcB1QloxFeDvFxNYNcq0NdhgUHFTDfSHJT/IF6bIuG+yALqgLAb -GBvAFf9PcyHw0HhD/wcXjLYPRBFdi80yQhoKC0tdOwFsJLv2zHYf68nKIiKvdTJQ -6hz8tpy23L/usYR/3zzAk0xsPGubHKiSio2tKU/dgBK8QElt2krhzxI1DtIDBHhk -FmFV9L4vlhXLmrXt8seubOpecDK97YQ4k5nfB3kGqxARTcbeihIPeibTZznPWPax -EEoYue0OHh5hIiyTQpnrTVp1Y/Q1F90MdWWxi64UiGYrcYJpCdCciQP1BBMBCAJf -AhsDBQkJZgGABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEEL+p725FxcKe45yAB -3xh45tnDsn8FAmJ1oT+GFIAAAAAAEABtcHJvb2ZAYXJpYWRuZS5pZHhtcHA6cy5z -aWxhc0BkaXNyb290Lm9yZz9vbWVtby1zaWQtNDUyMTQ5OTU1PWVkOGVjMDVkM2Iw -ZmM5NzdiNjcxMjBkNWMxN2UyYzJiM2YwOTg2YmVjNzg4YjcwYThiOGQzNDY3Nzhi -OGQ4MzObFIAAAAAAEACCcHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxzOmMu -c2lscy5saT9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJp -eC5vcmcmb3JnLmtleW94aWRlLmU9JDFMUjhPTzQwYkw2NDA3aWZmMDBKOGc5b2Qz -Wnk0bzMtREFjNk5melREU0E0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0 -cHM6Ly90cm9ldC5jYWZlL0BkYXNsaS8UgAAAAAASABRwcm9vZkBtZXRhY29kZS5i -aXpkbnM6c2lscy5saT90eXBlPVRYVJgUgAAAAAAQAH9wcm9vZkBhcmlhZG5lLmlk -bWF0cml4OnUvQGxpOmZmZi5jaGF0P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dW -bVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kaEs5X3RHMHU3YXFV -d2ZIdndzS3dlQ1hXWDZuaS1fSTlrNDF3eEUyak1UOAAKCRDfGHjm2cOyf11LC/43 -AUh1YO7yDyoMCoGgqxdcXhZ+nneT+JKw6vCPvJdCjRv45XIDmQaQ7wgiNtl/I5kN -RtIbFZ24/u6NWfv6oXxE3egTSoy7qTct7Faw8gFSsvy9zshHH/g4sg4qgRU2nFYF -XiObqvoxU5xq2sdSNR3abqJUJQ0KinHPa59wZkKcvn5F5ZT/+6WjUueTr+jmVVoe -zOU2jhSvr14J6lsne4WRnLqXco/0VeS0vjMbBRX/MYI0mQ4w/8YyrUTMUMAZQVLQ -1oO7V34y1a8jBqeEwnSm09JW8N8VLII6rJh3qUVDrWzLB7LQ6NRkXrHjRjjLSLcU -+mKKPaai4DGZjX7ruQ4GT1+zbP9vvmfsFTnfM0HQTd0GSFFQ/XTBiaadKiX2N75v -ANL1slDWr09vvW5HosE1Tuma9U+SRR6DoVnIIFy7q8uJqQavsSK5sdbhk47W71s4 -IAVTy3u40xawor2cn8N8i6q6mfOJQOqULaRlP6uzVFJn3JEwFHuKHvgIpGf3nd6J -A24EEwEIAdgCGwMFCQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQQv6nvb -kXFwp7jnIAHfGHjm2cOyfwUCYnVqlJgUgAAAAAAQAH9wcm9vZkBhcmlhZG5lLmlk -bWF0cml4OnUvQGxpOmZmZi5jaGF0P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dW -bVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kaEs5X3RHMHU3YXFV -d2ZIdndzS3dlQ1hXWDZuaS1fSTlrNDF3eEUyak1UOC8UgAAAAAASABRwcm9vZkBt -ZXRhY29kZS5iaXpkbnM6c2lscy5saT90eXBlPVRYVDQUgAAAAAASABlwcm9vZkBt -ZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpmxSAAAAAABAAgnBy -b29mQGFyaWFkbmUuaWRtYXRyaXg6dS9Ac2lsczpjLnNpbHMubGk/b3JnLmtleW94 -aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlk -ZS5lPSQxTFI4T080MGJMNjQwN2lmZjAwSjhnOW9kM1p5NG8zLURBYzZOZnpURFNB -AAoJEN8YeObZw7J/Kb8L/Rhva+cHBUgeLWD7iSueBrV49scAVQMWSGF3uVjT9LPz -hFH9BIiHAO7LXRAffoHoqVdi5YHVMXZ7AK51cg3nvstdfJT49YjIt6dbgrjQsT2J -kWMbf34kIpc358wD/fWBfXPCHgtxUVMN/TY3Qb7R77u9EyH6CZ7kLtGNRCf0XSyC -IhkvOCswJamCBk+GfJPx+y2F9KC3VqqEUQUPZiM8vzmKwZRdUlKcXoJIgKz6k+fu -c9Fw+IBZq8ZFKrGYMcV+i3IxzhUAgpREm0AoE1Qjl1iGyOkJ+g2htpv80EdRMEiX -UqdDa+5dkcP9wRUaPvFC+RfP8AW9pzbvXj+WXh4k098sjJFMM6bQHCI7LgMS4lhK -9ltCy1Yf5mh5ZjNxYDk288Lqtw8bXVpwUAXk65BAXceP6wvxmG6r0olZzS8kivPL -JTUZPXkEi8nEHIUXO9weoi5jIM2QvoeM5mb5cE2YCbwmjwIANZNs4ICdps3dMOhB -Oo+r+YJ2Sf9xCfkZsCdoqIkC1QQTAQgBPwIbAwUJCWYBgAULCQgHAgYVCgkICwIE -FgIDAQIeAQIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/BQJht3+AmxSAAAAAABAA -gnByb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9Ac2lsczpjLnNpbHMubGk/b3JnLmtl -eW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlv -eGlkZS5lPSQxTFI4T080MGJMNjQwN2lmZjAwSjhnOW9kM1p5NG8zLURBYzZOZnpU -RFNBNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2Fm -ZS9AZGFzbGkvFIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/ -dHlwZT1UWFQACgkQ3xh45tnDsn9PzAv/WJERGb3uRMKyh5dlhsg6+LttnkjHLcK+ -hQd758VrCirHOTTg9U3Pr/PIPclRfEfk0q5YIcfm6tl5Du0CBYcQkQesZKaLy9KU -WOq2QCvNy2SqNwcpDtKogap/H82892mFtRO5+Lap7G08cXmSjJNMN83h9w5iGI4g -ghPZFEr9lGmz4ichUEXqr+VkJ2lIT5hdeBZitoIqB0/547BRec/dApkv/+Hd06sZ -xynZDXsdQXqNBzpYgdDm25p8kq95CFnht0rBBCfhwG22kSUtI8VMPow/PJVRDRKn -GLlMhhy+x/LFoGZQHDXXApbv0RB+93vbBccm2FpkKwGpdA4DcgChIsRiDL/ZnAPi -mPe2exaTKv6UkVFbPbj0s1K/au8msRnr2oLzTkUVWv5OdkBInj4ntNiJCZKBnCdH -UPwsChLVIz1gcyh0OHIGdUGY9VExcFgYBuEgzVsX/FFb5APlfiPa+OXc7/0g9hDc -o2jDxcgrCEGhU1U1TyGk1PCwQxCS9SlmiQI5BBMBCACjAhsDBQkJZgGABQsJCAcC -BhUKCQgLAgQWAgMBAh4BAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmG3fkYv -FIAAAAAAEgAUcHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQ0 -FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZlL0Bk -YXNsaQAKCRDfGHjm2cOyf+eXC/0TmlkUhH996p6/33ybxk1Wx3dL4qtD1IMhGTcj -bTUfPjbOWRV9mqYONTAA9Kg8cNzhAwwXaEEztCVTFX7/Hqt6fpPc3tTwFFfgQO6C -cRaMgbUhSHg0gN4MatbY12mWrMJNVScI0XLNXRmP6Ow8G8RzpYl1XdLPYoWbmL7e -iCk3yO8WiFkpFpDkO/im7AKI3m3XLOwEGn424P4qW6P4LmRC8XV40qIDZzrh2Dxq -XMui+hVLN41xYkaZcI5Y0LRW227hkqMFypkh3Dpaimz0QosnwtgQlm/+J8zMHDyj -k2oLYpEJNaGlAGdEbDbQ9piB44ZbB1jHoIsFZSAAydr5uV2ClCN/jLr/YhtWsebr -yArofcC0gF2caUhr/Vlnh1WRNncn/BVdQ5a06yJ8zqJUz+oXHANVfJU+N11PZRHz -tmogWXmeALm4H2UIZmBfgorb056TxIhGOP2Rr6yykKLGLVmazAiPkLFiWJjS47H9 -1s4aMZVn7qhaHhFt18JvHezXciaJAtUEEwEIAT8CGwMFCQlmAYAFCwkIBwIGFQoJ -CAsCBBYCAwECHgECF4AWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCYR6NhTQUgAAA -AAASABlwcm9vZkBtZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xp -LxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5cGU9VFhU -mxSAAAAAABIAgHByb29mQG1ldGFjb2RlLmJpem1hdHJpeDp1L0BzaWxzOnNpbHMu -bGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3Jn -Jm9yZy5rZXlveGlkZS5lPSRsSU1YUkUzMXJlaG1iNWc1N2dRYmc4SjNya05aSkw1 -RXNlWjhuUWw1V3BzAAoJEN8YeObZw7J/+GML/0aPvBgFFBXd7LKR/Hyf0WQ1eUUL -/pkELt/AQRGwOaAEyUnfmKtqTI+qVeD7UNpcDHdjwchBmkfG5W/N8Caavow7jCdu -0px+BA5WWO7snDW3HOzFKIRgDtajtljX69Z9Wh9aYsO7sYapSMCsmIx7h4SxOxSK -oh6nZOaN98dzx9PcyjbSneToGyYDb+5nzTiYWiaE8LQAVkdZeFAdSN4UDenVXd2R -cLozZVQjYwhk+fVDzlcj9HoieEKpSEpUp+dWZJob7H4z9AVLieYwzkfFmApG9XaJ -wZPx8u06c82q+3ZHXd0HLd/cQFCSL558pmhp8HhnDMrYipRoJ3tX7SqXXrhi3gA9 -1K89I3xhmpiz9dq2B/Qdv8Ml+D9qQNIpBWqns2zWkWharqNmWTxmAsTPY2rEMm0c -81dWXZ61Lra69A9XXUQg52xRNS1AKF8C0lMehSdBu2a8+HlZHADhCjLRaljxvhUK -vqTaL7/f5a6fN6D0wvPOXgYP5+u7Jv8NnLfO74kCoAQTAQgBCgIbAwUJCWYBgAUL -CQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/BQJh -HolFmxSAAAAAABIAgHByb29mQG1ldGFjb2RlLmJpem1hdHJpeDp1L0BzaWxzOnNp -bHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgu -b3JnJm9yZy5rZXlveGlkZS5lPSRsSU1YUkUzMXJlaG1iNWc1N2dRYmc4SjNya05a -Skw1RXNlWjhuUWw1V3BzLxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpz -aWxzLmxpP3R5cGU9VFhUAAoJEN8YeObZw7J/+RkL/10AHiebFztglUSi0/2auWZ9 -4SCX/n6sgwtcUD0SOLUEQjkXlhgGQJy3UfS6VCgNl0fkfkf5E29g9tY4rQS0dL1D -3PNChFsiF6b9XymIqrCz5Kvgt+6RjC1uFTl32yhsmbwL61E3mn9e1nlXZcpv2T2i -xLeU71kNRQR3+lkvJdbu2Fli750n6AS0iMboeLTzLZHK9Ai0CZqZ84O8lvEBCSNL -WCg8OoLfsvTs8XiAiBvY+Bagc5AKrM5tLwdrm1eiVNtHOZNZ/EXEfYMQ23uh02Li -znd+HZMo9URKB9mbtZilBl2O3qorQyhs9lQNwUgrATXxJMUnrXmFy73LLAqT6MX3 -iLPMiA3Da1FHGxVKhcHu0PuWd3vyOqnDUQ7DEg1z8X4NtMOszvMCBH5I+pe7kDQt -jsiGIDaFl0v0bWOqIfq+d4hDSC3o/cAnNRLnsU5GYhI+YESRb80qBD+UKBvvm2eD -MXNo1/weVq29g0k7Ozt6y5EAvrTMcQeve1qXcQDe/4kCBAQTAQgAbgIbAwUJCWYB -gAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBC/qe9uRcXCnuOcgAd8YeObZw7J/ -BQJhHmJSLxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5 -cGU9VFhUAAoJEN8YeObZw7J/QVEL/3YUztd5V/JQPHyAezqTD8mEVNu4bkLd1E6U -kwFb5e5wvcNndKPRhdL8JFtHGo/vnrglkpoY7KqLPKq2z7NCQbsR5YT5iWIlfCi1 -Duwh207l/wxzohlDuYPe00AFnm/B19eFjFLKI7/dixOkfZhNDXgtz6BRiYG4Dpmq -cnwYR2+xqul0cQ92+6IApVsdNzAyuHXrYyRtVXw1WxG9H3XmzuZl1fNRhpENsc0r -WAclp5F2KD3ZP58zL6N5stKvKGbfEdoAjoZVSjuFR5K3tYHH6gYAccyxuLgYwRhw -5HWkQ4dB8Xv5vV2+v2SQgK39NYufgVX1YBM5O2YXFRBoDc0yCP20PQ4XxbtgdcT6 -rMemuYSEWmFarSwlxHsHMreoSbwxVHrfBySwM4rqoXqyfaTHnVLysF6WNjD7h7d7 -e0rXL70aD9BKwvweQKJBhoCGTkwt3IOEhiPawD59m4EcbXji8YCs570mK2uoc4kp -JjuF1DlS1L1wd/unYaKIinbm34Q+34kB1AQTAQgAPhYhBC/qe9uRcXCnuOcgAd8Y -eObZw7J/BQJhHl4PAhsDBQkJZgGABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJ -EN8YeObZw7J/yzoMAIUUWbESdqwWbIe0e3VviEmrW7kArLRV9AFfVYvnA+OGObOx -FYcDSY2vH6kQetRLlYV19OLM91N0/Oqh/wwlmpzFrLjXkRG+aNu5IKRh4noythO1 -CH2BUo+n/JeodpVb1x06EYeZQVQ2ASche0hzzw4Zx2P0z+6Mg/IbK/YlUonDvTrI -Ioptt8InjXiDUo3D9n5Rzgn2zPf2c6gF79IbBZl0fBN+V/La1O+lOdhT3yajb21b -Hr9SmEdtvs5GT1WSpEpJDtZGf0Y5Kv0UGIrFn5dYJFzcRjHWbuB3bB/STHVVgoAS -ueLV7xDdqbO6d5DsVtvExiBhWI2LAtQXttzRnHIGajuNP2852ooXqVpUa2hu93RV -Uf6XlRBg6hHPnhRZYUr2gaAWH0VKDw1m6eK3SToNVD9GQrA+j8cqhr4fjemZaqqH -U3MIPwUvNTcYtecy9e4AopWmS3nIkJhsdSOIyXIGVHKt2I2qwFTAPOjm1CAy9S4Z -v8lVNVFDxhsM7LNHboh1BBAWCgAdFiEElgb8dJ/OFjYHI9StpelAEMOmQq0FAmTE -I7wACgkQpelAEMOmQq3gGAEA0YkCNt4pTGr86xG10Lcz6Ds6y98GjZrWPpHUZL1m -zxkA/jL5xHj3Z4uzQEzoITj4s0Yh0YzDIpej6J6pC2Tv+SEJtBxTaWxhcyA8c2ls -YXNzY0BzeXN0ZW1saS5vcmc+iQMSBBMBCAF8AhsDBQkJZgGABQsJCAcCBhUKCQgL -AgQWAgMBAh4BAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmRBbtU+FIAAAAAA -EAAlcHJvb2ZAYXJpYWRuZS5pZGh0dHBzOi8vY29kZWJlcmcub3JnL3NpbHMvZ2l0 -ZWFfcHJvb2aZFIAAAAAAEACAcHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxz -OnNpbHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRy -aXgub3JnJm9yZy5rZXlveGlkZS5lPSRkalVrb3d2N2w0eUZjWExhdXlpQllzaHBD -aHVNa0Q4LW1HLTdZX1ZfUzdBLxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRu -czpzaWxzLmxpP3R5cGU9VFhUNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0 -dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGkACgkQ3xh45tnDsn+x4AwApA8PTLYRemnD -rNTFfLXUb7kiW7O/Zi93a1hT1g77NoovpZT0Rfd6Jc93579gK354N27W2P7YflRi -IYxp3ch3WX4NgpxTFvx1HbSa9l+UNvH5TmFJmr3EonDLOtZWpPEPdbq5MJANCAYH -5jT1l/MXD+VnUtyN9aFqFuZR2XLDh1VPDB98TTlwC9GYe/QHouCw+PhqZXii58S5 -SgHlzGx5SHtdVfWl/POzy3tlOHHzkBiHo4VLbIbiB2T2GRvmpPGOCH+d27qUrIZV -eF2jfn0opkxW/1Gl8xhyUHS2b8I7/7Zjfp+UareOmR6ccBUaSwCt45b4fnuq/wgJ -kxD7WoxXkr8rw+H2jQoJTxY1EKUYo4GJBUpjU6VYMGpGWxfZawM/z5hiKav57VuE -5/FXJR/c/fJjjBTFOHC0Z9VPDlpu+SdfWe7m52/MEHawLWL870emTbcyTsPyVI6b -bVoNwKEpDcUkTrZUPW7Q973n00s7hMnb2HmkX6t5sfXmHBMkECitiQMMBBMBCAF2 -AhsDBQkJZgGABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEEL+p725FxcKe45yAB -3xh45tnDsn8FAmRBbVY4FIAAAAAAEAAfcHJvb2ZAYXJpYWRuZS5pZGh0dHBzOi8v -Y29kZWJlcmcub3JnL3NpbHMvcHJvb2aZFIAAAAAAEACAcHJvb2ZAYXJpYWRuZS5p -ZG1hdHJpeDp1L0BzaWxzOnNpbHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENv -R1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlkZS5lPSRkalVrb3d2N2w0 -eUZjWExhdXlpQllzaHBDaHVNa0Q4LW1HLTdZX1ZfUzdBLxSAAAAAABIAFHByb29m -QG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5cGU9VFhUNBSAAAAAABIAGXByb29m -QG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGkACgkQ3xh45tnD -sn/UbAv+ISlXhbvE0MSRdCVz6zG8PwnH2Q0ejFcrwVBroJ+haKq7E+rWNlC+YNra -jZvVYDvlhQmjNB1UU/xBU7DP4PfCeZj8HNHU897aYfS7qhPyXiTdudHEAsmlnA7O -/eyBVBXqjWDAIWNy7/RzmTFIEX345H5HT1RmdHHaMSNnvlN5lp2TOB5qLAgD8q2c -Lq/HgNthePowyS6Tit06BdvoGgCVbBow20Fc10l326/3YuUX7nfJvfPSTr3X1eiH -XGD3DJNvFUONF35jOCIOLGVs0LgsEtnYiRvoUobXEexTTvj2IZq9+tsGszTPKHJU -25erDuJBprO5Lb9BV6orBYEDWiiKpcw1ZtD0SKnsprS+9JpBvz64H5qHgA6fOqcf -WdmubTZHt0JzqqNV/Ye3YMy2bFBuJt+ZWkeIUAEYgLfbv4Cp2z+7OkCeoVBI0ICv -h9HEmEvc2JWUr+Ir2f/jczewHDqRkpl1beFYsjw4yOTyF9W3mkj1ysWVm+9cy//p -WiOr0LUdiQLTBBMBCAE9AhsDBQkJZgGABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheA -FiEEL+p725FxcKe45yAB3xh45tnDsn8FAmLPEFo0FIAAAAAAEgAZcHJvb2ZAbWV0 -YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZlL0BkYXNsaS8UgAAAAAASABRwcm9v -ZkBtZXRhY29kZS5iaXpkbnM6c2lscy5saT90eXBlPVRYVJkUgAAAAAAQAIBwcm9v -ZkBhcmlhZG5lLmlkbWF0cml4OnUvQHNpbHM6c2lscy5saT9vcmcua2V5b3hpZGUu -cj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9 -JGRqVWtvd3Y3bDR5RmNYTGF1eWlCWXNocENodU1rRDgtbUctN1lfVl9TN0EACgkQ -3xh45tnDsn8+rAwAqAwIzZHQYrbu1LlO0xa3+H2mhP54OpKj2c+yaDLFT6rpAjUd -tEn2Bx1TIhKjePvZiHnXk5QgRcuQ7pgynLCEVcrS3Dy9gpGc3wNFGa5xsCyz9E0D -/aRw3weSLqTc69y1290JNqEdAWOQ0BY6D16DRw1OjZfGTlaqs8I/FOt6MHNoURlv -I0ucUkMejdlPWNzjkO8HwCNpu9RQPOyamqAfJCm/M+OFoXx1WtzPQvpioIfw5bBO -uPI77fXrGSk+ydud0gW5xchi5dLIDnfMEWscYpEP7GEEQvpLZj2UQa4WOpfz1k8+ -PqAbMSCT0S8h2wvJqiepjEwmkN47F9IshV3vc22Pyk4vSlPizoly1YjBnVhhBNX7 -keBZUZFqTAruKGNEJ2uQFqNw1A3WaoFJxapaA1SWdems/TSXNuj43F4pvClxQxZr -wQwVA8rOISEMFfS8bkcx5vUfEeJvE/JNfiZBEYmH+XfDZRYeMeUQkZY548LHLUgj -lsqVPexm7qUbfPcKiQNsBBMBCAHWAhsDBQkJZgGABQsJCAcCBhUKCQgLAgQWAgMB -Ah4BAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmLPBfmZFIAAAAAAEACAcHJv -b2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxzOnNpbHMubGk/b3JnLmtleW94aWRl -LnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlkZS5l -PSRkalVrb3d2N2w0eUZjWExhdXlpQllzaHBDaHVNa0Q4LW1HLTdZX1ZfUzdBmBSA -AAAAABAAf3Byb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9AbGk6ZmZmLmNoYXQ/b3Jn -LmtleW94aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5r -ZXlveGlkZS5lPSRoSzlfdEcwdTdhcVV3Zkh2d3NLd2VDWFdYNm5pLV9JOWs0MXd4 -RTJqTVQ4LxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5 -cGU9VFhUNBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQu -Y2FmZS9AZGFzbGkACgkQ3xh45tnDsn9r3Av/R9+c7npoC8Oo8IU++UjzHcfd+Zs+ -YwJc0WU5ZwOW5KCoyAMHmAYXi/ZD/e3atUNwrgZhKMXRNxDIuvdqIq5euBzdTjd7 -wJYKThB44sLVNtE4DWULRAWgAQovpdcSoeg3iZC45LxQlBfgNRBPBCkZs/yF3Zp9 -hrZOSN+krZvanZ0fywJTRKYEUTgejDP3lgXUU8w09Mw5IQ0Xfiy+vGptfziapNGx -BK9Z2tRNOZln+zwXNP+U5wQ7psGgznMM9eEE4+jzEEsgsxoXcsNmChfm4K1ltCLt -72mBs6iEqfBIaAidOX4j8g2Idh1bt/qof8jWaBJwFrVaU4/q+Uex7+7CO3bBrkv6 -rHBrta1D12T3s5xYlbxMLf4H/tqvf3K5PwT/6GXknchXjyoTwtd8DTTWtr9PUARW -/hfjgkx9Epjc+x16u5bM1iU+kmv4HygwMZwMRxpBOjuv3Z7HiamUgsfCYfJUhxIr -JEpUtLTvsiUPNmm05A6BVnpR7tHhsHbU8r/iiQLSBBMBCAE8AhsDBQkJZgGABQsJ -CAcCBhUKCQgLAgQWAgMBAh4BAheAFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmLP -BBE0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZl -L0BkYXNsaS8UgAAAAAASABRwcm9vZkBtZXRhY29kZS5iaXpkbnM6c2lscy5saT90 -eXBlPVRYVJgUgAAAAAAQAH9wcm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQGxpOmZm -Zi5jaGF0P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dWbVNUdWpmaXY6bWF0cml4 -Lm9yZyZvcmcua2V5b3hpZGUuZT0kaEs5X3RHMHU3YXFVd2ZIdndzS3dlQ1hXWDZu -aS1fSTlrNDF3eEUyak1UOAAKCRDfGHjm2cOyf4WGDACS072ObGtwGJhMZElGcqxE -b4H0XIbAZHcuCqA5lFNPgeayozXqMUk/SXiYcqb38yMyHyT1BWVGa4LSHoGwvt15 -u4RwU0SgRisWTCZsstB8T5ePVu7HA0xICx4RBdxhyF14T+Dno9/eqMx5VaAL434O -r1gHwFT96D99hunf0cjHPBpQEGaDAPIXYlqOZ6ExQA4GufFQv9uNSusXpHw/pWrI -LU/CvbrSLsUckbfXQ5BXzo/vRg92nIWVOcq0T9NL8E/5WuQ4aTowoI+lhC703wP3 -lG9WS6Mb2x+4ubahWLwBXbaBvHytOPJdEqJnsilpFFFJRpcNYrznh6sKXqjKSYxJ -mXcRsRsx1H8a/Cl7jQeX8pGo3xmNb3GUjLYaaxdekypbowGM+5GAmwB+GhZ0wEzx -pdYyUaJ5B/nsZrvNzjhujW3oTTrKCH9/p+yg2rsNfzXjnETna7SvQVh9wekP+ieA -cL5RsEIAfP1QNG0b9dHZJWvXSNH7Du/AG1NI64m56BuJA1kEEwEIAcMCGwMFCQlm -AYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQQv6nvbkXFwp7jnIAHfGHjm2cOy -fwUCYs8CwZgUgAAAAAAQAH9wcm9vZkBhcmlhZG5lLmlkbWF0cml4OnUvQGxpOmZm -Zi5jaGF0P29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dWbVNUdWpmaXY6bWF0cml4 -Lm9yZyZvcmcua2V5b3hpZGUuZT0kaEs5X3RHMHU3YXFVd2ZIdndzS3dlQ1hXWDZu -aS1fSTlrNDF3eEUyak1UOC8UgAAAAAASABRwcm9vZkBtZXRhY29kZS5iaXpkbnM6 -c2lscy5saT90eXBlPVRYVDQUgAAAAAASABlwcm9vZkBtZXRhY29kZS5iaXpodHRw -czovL3Ryb2V0LmNhZmUvQGRhc2xphhSAAAAAABAAbXByb29mQGFyaWFkbmUuaWR4 -bXBwOnMuc2lsYXNAZGlzcm9vdC5vcmc/b21lbW8tc2lkLTQ1MjE0OTk1NT1lZDhl -YzA1ZDNiMGZjOTc3YjY3MTIwZDVjMTdlMmMyYjNmMDk4NmJlYzc4OGI3MGE4Yjhk -MzQ2Nzc4YjhkODMzAAoJEN8YeObZw7J/G6UL/1H/fk89xpj9oz6aVkvaf6xoedu7 -ofxi2LZx8jaI4P6jVz4J45KBJZ2ULQVRJOYw60QhohfjjscxKXJgB6oYYiXlVtlh -GmG/DBJ3l0HFS+aZmg89J49qG3xHyghhDX/ABw9mT21cIygd21vAViwcb1dZSYeF -m3Q8rV+jF5Cm0LvK+7UigXSJbHBUtMQH3ZIQGym+SEP+FCbD9A7KW3SWmZuDUwRa -ZBTCoenGUD8Bx4tSjns7zMvWkwZdxTiiqMAE/jcvzhmBZIWhGpkEY97ns3mihbEd -hjv1baUk4h2T9R9ASJMvmUfKEY4JxLvbxebquSOC+etMKZ/8ySuIH2Afvw1JtJdL -1hIL5czCpbtDlgCaRxHKkfZx0RiEakze6WrRHr2XLh0TSdIKEcIBSt0LTW2uRJqM -GVsxczzBU/G3qZcCWAjorcqma9N2B26viH4RtRtszEuvJZl0EB78GrDVNud6fyuE -aewdBSU1LqFb4K64f+xmQn8fvAXjthSXWySzNIkDowQTAQgCDQIbAwUJCWYBgAUL -CQgHAgYVCgkICwIEFgIDAQIeAQIXgAIZARYhBC/qe9uRcXCnuOcgAd8YeObZw7J/ -BQJidalDMRSAAAAAABAAGHByb29mQGFyaWFkbmUuaWR4bXBwOnMuc2lsYXNAZGlz -cm9vdC5vcmebFIAAAAAAEACCcHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxz -OmMuc2lscy5saT9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1h -dHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JDFMUjhPTzQwYkw2NDA3aWZmMDBKOGc5 -b2QzWnk0bzMtREFjNk5melREU0E0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUuYml6 -aHR0cHM6Ly90cm9ldC5jYWZlL0BkYXNsaS8UgAAAAAASABRwcm9vZkBtZXRhY29k -ZS5iaXpkbnM6c2lscy5saT90eXBlPVRYVJgUgAAAAAAQAH9wcm9vZkBhcmlhZG5l -LmlkbWF0cml4OnUvQGxpOmZmZi5jaGF0P29yZy5rZXlveGlkZS5yPSFkQmZRWnhD -b0dWbVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kaEs5X3RHMHU3 -YXFVd2ZIdndzS3dlQ1hXWDZuaS1fSTlrNDF3eEUyak1UOAAKCRDfGHjm2cOyfwq2 -C/9gKXhGmi0Rk//MK72kPuokFn5vuBNcGHZwydU/EcNGOb/AjQkIpTM0Ktx4bp5U -fRwdpYNeOxchHGi1MFjlagfxj9QdmgByxjUVaMWExdputniIXg1GuDB0plr2pGsI -TjLM6K4rSnV1nf/fFIAJkmQZ6AICIQ8VQvgVS9VlZ5LqMRA0rRIzyPtdfoh4I+IT -hFnXbHDp2oXfQhNKTf/MJKV5Rw53AoK8TIEtc5FlxGiDIzj9CoQOyj58/ffiDk4B -eVRezNXpaoCoDKvo6JatIwiR9ONply/mCGfkI2BtyJOsMiqPbK3GUdrFSEPfF1b8 -2r0DU2Ke/qhJF7Abvyx9g7tP2CuaAmcMUB0DIPAwcUxgIIwPIJj7Q8xPI06bGTAk -jJYO62rmqQu8klA6JKcnvM5Vk8IHEYjLsJ2DmYObvRVzTjYaHePMi0e1CUgoYUp1 -UUgo4hJA3bYv7lNrQfLCvhI5Mx4rbLJGW78xpCqg1aj8I4LgrnoHlp+oCAKa0xkt -ds2JA/gEEwEIAmICGwMFCQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4ACGQEW -IQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCYnWhI4YUgAAAAAAQAG1wcm9vZkBhcmlh -ZG5lLmlkeG1wcDpzLnNpbGFzQGRpc3Jvb3Qub3JnP29tZW1vLXNpZC00NTIxNDk5 -NTU9ZWQ4ZWMwNWQzYjBmYzk3N2I2NzEyMGQ1YzE3ZTJjMmIzZjA5ODZiZWM3ODhi -NzBhOGI4ZDM0Njc3OGI4ZDgzM5sUgAAAAAAQAIJwcm9vZkBhcmlhZG5lLmlkbWF0 -cml4OnUvQHNpbHM6Yy5zaWxzLmxpP29yZy5rZXlveGlkZS5yPSFkQmZRWnhDb0dW -bVNUdWpmaXY6bWF0cml4Lm9yZyZvcmcua2V5b3hpZGUuZT0kMUxSOE9PNDBiTDY0 -MDdpZmYwMEo4ZzlvZDNaeTRvMy1EQWM2TmZ6VERTQTQUgAAAAAASABlwcm9vZkBt -ZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpLxSAAAAAABIAFHBy -b29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5cGU9VFhUmBSAAAAAABAAf3By -b29mQGFyaWFkbmUuaWRtYXRyaXg6dS9AbGk6ZmZmLmNoYXQ/b3JnLmtleW94aWRl -LnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlkZS5l -PSRoSzlfdEcwdTdhcVV3Zkh2d3NLd2VDWFdYNm5pLV9JOWs0MXd4RTJqTVQ4AAoJ -EN8YeObZw7J/D4sL/1ZDzzOzfhQ8qOmUje/9BYqOSevipKK+nv32UIy2aiShJnkN -2SD0OMN4xLmyxSJ3ynZuPFcE/J6g9Zyyk2O+BT8xTQ+O5CdV5BLUFLsbMc2y8O7r -8qTnmuZE2FvOyae/M5a4rrCWCKMruijj0Q9PSThYJRd30Y+VSJfck9UkJcELx7vj -s2GLSxAkyMrOAoLfUuqjQYq+GoniWWQrcCTDV+4Amordk0sajNJvuGTYo/1p6/13 -VvYVRmFJdKtHJFWWtb1q0RlO4aanA3LRpGq7Si/auxoqEcH3t3Jsify6nKTljDU+ -CjFo9aJ9W1S5aHQ+OCYyP8FOacX22c5iODX9BXuJeTXaF/TzUSiuMY1SDpFCwxvP -9RslRQBKeycoAvzqTmLcvdwWxa1ZXRvUSKUUApmuPZVJmhD/jnkwM4v8vcqekvLH -N+bPccSRmFGoF+U3unMRsVrP5FUxjOOtn+CyOZR8fjB/1W/eqsZ2tWcMOLTyFZoH -h4NVPTqYOqsduhOAcokDcQQTAQgB2wIbAwUJCWYBgAULCQgHAgYVCgkICwIEFgID -AQIeAQIXgAIZARYhBC/qe9uRcXCnuOcgAd8YeObZw7J/BQJidWpdmBSAAAAAABAA -f3Byb29mQGFyaWFkbmUuaWRtYXRyaXg6dS9AbGk6ZmZmLmNoYXQ/b3JnLmtleW94 -aWRlLnI9IWRCZlFaeENvR1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlk -ZS5lPSRoSzlfdEcwdTdhcVV3Zkh2d3NLd2VDWFdYNm5pLV9JOWs0MXd4RTJqTVQ4 -LxSAAAAAABIAFHByb29mQG1ldGFjb2RlLmJpemRuczpzaWxzLmxpP3R5cGU9VFhU -NBSAAAAAABIAGXByb29mQG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2FmZS9A -ZGFzbGmbFIAAAAAAEACCcHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0BzaWxzOmMu -c2lscy5saT9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2Om1hdHJp -eC5vcmcmb3JnLmtleW94aWRlLmU9JDFMUjhPTzQwYkw2NDA3aWZmMDBKOGc5b2Qz -Wnk0bzMtREFjNk5melREU0EACgkQ3xh45tnDsn8prQwAiRVx0WOeemcAhiYRqDeX -Km1+ms8TpvGqka1i+UuVZ3QY7EDldZ38V9vP93gojgbKYmzpJBWr75EV+UoMMfZs -pvH/3et+RKItAI15PwoKtCCMUycqiJcmLBMlYPhy1wyp+7zE4ltFFIJ6Z7yDpyUH -75xolgsySnEFAinTHJ5ruJbbPyu7hBRJxtFGPVZzSeYjU8ikA1hGbdjYQc8AevQP -ZCyZthiNU7PHRDaRmiP3lJ7325bDx0Emkzaw9zp8vu/JI6EWrws/Ta4hxM9nNWSX -Xv3vdFLsMDAZ8qFlstCPjCZL09ZfD1d70MuGLbRvc7XMPp4ZIp7CZnRQ1FHf/PVJ -R+uqNtYUpqeB8Q7U17oYpU98aTgawbF7x02Ym7i2Vb9aPgKB+hU7nrfMevU90hUH -Mtu7ze7BZlj3otR9B2QT08PqwWP/yUQoQhSwWyxxSRLN/ecedH8fDo5kc6GCMpVi -/heVT9UoSpVb9H/TLlyR9Z3CuXDvXJCAcTP3WW5t6DsjiQLYBBMBCAFCAhsDBQkJ -ZgGABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAhkBFiEEL+p725FxcKe45yAB3xh4 -5tnDsn8FAmG3f3KbFIAAAAAAEACCcHJvb2ZAYXJpYWRuZS5pZG1hdHJpeDp1L0Bz -aWxzOmMuc2lscy5saT9vcmcua2V5b3hpZGUucj0hZEJmUVp4Q29HVm1TVHVqZml2 -Om1hdHJpeC5vcmcmb3JnLmtleW94aWRlLmU9JDFMUjhPTzQwYkw2NDA3aWZmMDBK -OGc5b2QzWnk0bzMtREFjNk5melREU0E0FIAAAAAAEgAZcHJvb2ZAbWV0YWNvZGUu -Yml6aHR0cHM6Ly90cm9ldC5jYWZlL0BkYXNsaS8UgAAAAAASABRwcm9vZkBtZXRh -Y29kZS5iaXpkbnM6c2lscy5saT90eXBlPVRYVAAKCRDfGHjm2cOyf74nDACbLYlO -Oc4PL/QMfzrNzne9ofkh2vmHV6MCYPKTrCmGP3Bh+Sl92J2YEa3CyqgbwtzAcMQW -YX1Rttgr8t3IkTYWnGxdgVjEoMvioMQhjOkmcBPEOWhjAFpVUlKHz7vyfl84C5l8 -0OC6m7cwtdEhBZEsHTiT7y+9VscgAuR8Hr/vKmicMkmYrCA8jND9cvE1mVlmE4kb -isFCBaltyS8t8vldewotQeSvc93pd5Wv+RZF4YMIMnzk/RujPQeWNYAk3bjLcN4Y -wTlHU5KfL2HoMfv1/QmrNfgWTXYEmRw2dybwaSIRVZpr5OqXolIRW+xsyZPcjfiG -W/ejuoHLcYps5/kTBD6swERk925GwmTcwTMterA20aEzLTBJ16glPsfs8mlGzJWF -FiqfhqMxasP4kd6puxmVh4oBow8o1GMQEqYZ7SUDoF6c0zQ2nlXppcPw4e6eYRiG -15M7wlSnI4N0tEg67eGq+58Oob7cIkBe32GEmEwMHRE9oWMJK8QtjmITxHuJAjwE -EwEIAKYCGwMFCQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4ACGQEWIQQv6nvb -kXFwp7jnIAHfGHjm2cOyfwUCYbd7AC8UgAAAAAASABRwcm9vZkBtZXRhY29kZS5i -aXpkbnM6c2lscy5saT90eXBlPVRYVDQUgAAAAAASABlwcm9vZkBtZXRhY29kZS5i -aXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpAAoJEN8YeObZw7J/YgEL/iG1xKsu -ZW2apQTlJaYkKbLycjn64kAB3B8sKlQA+yJ53KRXsT3UuAy3OXTEbVL3C9sRZ38H -1MGMXhJBF2P4p8HLWctjXkmdyPUEDPgl/BmnM+8wrj+yjJHRuGPHXsrrehsXNyoX -gMEAqacKrNtB3ATXnq3gd7wIZ9BlGzl34HaRzNbAPrImfa3ipG0vwId9zOM6nHlH -+8j9DJuhnY9IR1jvA88Pq96QmbCRDWolwzaLbcOxqaosQxlzw4F8wSUjOQocX6ya -2JvSO6WjglO/RTRoby7Q/r+7FrBJs3APGNstSZuC+QHS2Dn7cNN/mxg/XjHLGhOX -SNdFuZYGOk1NTvcVLdBh5nuVYAlNoqbwAD83UCaE7g7lobYgxua7b97hI48FKGLL -W8ASEQ+syRjLf6/y5U/grCwZnLTF8JtPAx50WwktjzU4so3+rX4j5tW87rO8Od02 -Q2zVVq7jhYw8cWvKY1DAUulRgUdOVpi51ZzDzy/G41qGeKSI4eRILig5sYkC2AQT -AQgBQgIbAwUJCWYBgAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAIZARYhBC/qe9uR -cXCnuOcgAd8YeObZw7J/BQJhHpHxmxSAAAAAABIAgHByb29mQG1ldGFjb2RlLmJp -em1hdHJpeDp1L0BzaWxzOnNpbHMubGk/b3JnLmtleW94aWRlLnI9IWRCZlFaeENv -R1ZtU1R1amZpdjptYXRyaXgub3JnJm9yZy5rZXlveGlkZS5lPSRsSU1YUkUzMXJl -aG1iNWc1N2dRYmc4SjNya05aSkw1RXNlWjhuUWw1V3BzNBSAAAAAABIAGXByb29m -QG1ldGFjb2RlLmJpemh0dHBzOi8vdHJvZXQuY2FmZS9AZGFzbGkvFIAAAAAAEgAU -cHJvb2ZAbWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQACgkQ3xh45tnD -sn8RvwwAj5KJJJey5gWntcEu3smb74+EyKlCG+80lxR4esKDiDqn/4iK411pjbjy -C4+WH4fvfqLuaDzmWNURnWi55XRPzN1tIXohrMUmF2NyyrIDVApeT1xbClC0L4Ub -KXVBYWTcDz7+OvSIgW86sueIRAhKG8VoAtnvjx6vm4mwkzk8S8GOxzCii/iRX7h9 -xXJuwaWZQ+aPvURHxh282BbHPt1DXGHUq9/dvN/XbV1qTo8CG+MNgXQdgpboJpk5 -mSYBTwg7zPwqKi/I+fnKUUfpxUF8ABDrpDikTqAmSOZH/74blRy8rW8a2T9Dq/F+ -x2KpSvqYxvy2bYbH4kQy8G62LuWS7E4xUHyf/PYyxK0BFLZI8jB7pnF8uV3vJhvO -UOO6VuP/kecgYC4UyYZXakHHyitLYjYgO2p2HHJKbYWMGVcPJo9uub7/TThFiJUb -eT6S3Uf6vPRKDUB9tAGl+E8Dszccsgz2f/vpK4lkR3zNWQdER3/k3txkHsgA1mAy -NN/VI0XViQI8BBMBCACmAhsDBQkJZgGABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheA -AhkBFiEEL+p725FxcKe45yAB3xh45tnDsn8FAmEekUkvFIAAAAAAEgAUcHJvb2ZA -bWV0YWNvZGUuYml6ZG5zOnNpbHMubGk/dHlwZT1UWFQ0FIAAAAAAEgAZcHJvb2ZA -bWV0YWNvZGUuYml6aHR0cHM6Ly90cm9ldC5jYWZlL0BkYXNsaQAKCRDfGHjm2cOy -f7WvC/0VcA2uaLpOpHkRQEJXY77z95DJrHzNK9kOHJOgOVTs1AOXuJSRnYdQ7/p2 -Du5NSuopD/xaFdE8dkWtahwXB7pPpACQAiGezPEZHeC8XqdmoI0iWvMdeMyq86Dx -yBNS4g9b+2/y9v9NEvrogp/OGay9s9/nfPoeoIn/TEy7FBlRzz5qw0aiJcFqynuL -olL/neDhPPYF/sFxAteOJzcztZsAxDQ3qNutGBnxMYXWv+EJSAO7Rwp/XnhEdzLX -MwKDuWApiVwRHVRhNlpxXN7Kds93tLnP1BapFg042LQbUSbNMwJ2lYg6UsN8+Obw -0JDtygUMpsjHP62cKnsF5GvKPUba+x2rjlKhGq7On70t7c2zr9KX2T+p4kF+jZpK -PcijqgzW67JiS7Wl9r18c79Hh1nYv3YBFTGCA54yEow4e3w594xkyqPH9VdbESF9 -S/INYQ7FxHEJihNvTnxRbPYEUVvex8aWKv/K5pJ9h5CiibXK6cGTf5HduvJEjAWA -Q/YeLK2JAgwEEwEIAHYCGwMFCQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AC -GQEWIQQv6nvbkXFwp7jnIAHfGHjm2cOyfwUCYR6NfDQUgAAAAAASABlwcm9vZkBt -ZXRhY29kZS5iaXpodHRwczovL3Ryb2V0LmNhZmUvQGRhc2xpAAoJEN8YeObZw7J/ -VmAL/Am5QhixO6JuQb9tZxesVG5e75c+EqWXk9twG4O1q9NKVASTJTt+AhNiTUue -Uoch7i6DWYocLL9kF5l88RM9R8HIwSu013RwTqXx2vIc/bcPLShZpWZu0hi0fIPj -dFxIOKfVROzyYw6bZQodcxRCOJXdzY13JT1m3vkEGhD7DlXeClSdi5p+4epka3aa -dDkdLh+JbaRgRUvzDYBhGAIJmlv9Upbd+le16PaY0Z6RsyksZmB6trD3n0ATwInt -h9UqLsHutQmQawn8Z8QLd5A9USaftBHP1AiFMpQFDmofG+CPlqTpjxoQO5fEBulU -BiETSLS+BVSGZ4N3rXSt4wDh0y980m2t6YScHcT2lz6QaIQlv0HxRM0pQODQrBGz -xP8NZAZb+zDae5QYxDEDW3QHYlojFqzKoCBSBxjeDIVMpUvIySeum7d94Uph4orq -uxugXl6bbFMtvFeJyzmc9OhfMzJp6MPDdJRDo1G9mR+I0b1F3hk6EivO9xaOaZv+ -itzF9IkB1wQTAQgAQQIbAwUJCWYBgAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYh -BC/qe9uRcXCnuOcgAd8YeObZw7J/BQJhHopaAhkBAAoJEN8YeObZw7J/4fAMAJ0C -ew0THGP6WKPIJmnnmVYVHIWqrO2gkZ0DcHAmxN5OW3gZZimkeUiAFUDFhfwkDxCc -TEJvpZw2FnaF/oQQkRWEvOzHUPscKJ5eISFM8uooZQ+oTJUT1I50zmkOpc2YQ7Dj -iRCeSR7M7Azyg01FNqctlSC7i28QB6DG6+kVPBSdm81Pi9d8uJnzRU00NL9OVtpp -IZ5eumiWJjy4DmCmNbxSwGQmTBYgJrfzi9vWZT13LNkTfvIBxso/tq5fKiE2918b -L3G7ZOV0dH189QMCEHIjdBcRNnkPUA1a8qaq1ZxJGTuJLIstKhmP+R2vCaaZ4N3E -AVsuonF6IhJ72ia9860A4NtvZBKYjiMNVJLgJVEMcx0M/0OWAxIs3Fx0xcr7dJGC -kIyvYnAc8HbZFxWLo2hO4RH+HUJhFHxADgEmPhd1k+heyDQyvgWnIo9ii3XdsrL9 -bdCChiu1ngEcErSUYTw1iIfcewZyJB4blg0pkqv0UEU/9dzUcgfnHi9Ym06brIh1 -BBAWCgAdFiEElgb8dJ/OFjYHI9StpelAEMOmQq0FAmTEI70ACgkQpelAEMOmQq0S -UwD+KPZkmFZuYAYdRXYwK289teJpHdU3wzcteSzTmhAcSC8A/1jUnt5vgtfC07L1 -tv8fZdrStGZmLwfscOZujY2JKwoPuQGNBGEgzDkBDAC5hpKWrCXWmumRxDSLwIL9 -ykIpVd443eVtyuVwwwwkMWRnRr66as0DTJx1q5AuI4zZXy9telr8RUgcbWzhzYIE -rAI8bnwEbbxE5hfx1iRUUZty9Y7BLVMIXK2dNEvkXT5PyVwqgU7BlBzpjnJ46Al6 -yijguHVehnIbbIPZlg9qBPtxvJMTATi/OAdOw4bHacZEXUMiG+wOeK07b0/99jBg -oeRWXysIWA/vHNrX6mBKZQk/eJceNgmm8vjtKuA2BDSSl+EVecea9bzMxTTxV5la -91+t3ANVLoPIxAzzProHFgPco1ducPWsL/G1UnJpR11FlXMM1rOmuBj99MximAPL -mmqos6iyrsdm623CaLL4W9MJKl8Ei2Qr5+ie+piM3uAq9D+lZbQbBp141lckZAwZ -5ogHJS3rU+/E2W6SC/EvwCX892/IY1TVYyDT9rGH/aF3R0lUoTcQkzbvmsZ0RKBc -mjM4mFX+UYe7PcF92MQ9ofyOJpzKPqDR1GL6kK0vMqkAEQEAAYkBvAQYAQoADwWC -YSDMOQKbIAWJCVZLngAhCRDfGHjm2cOyfxYhBC/qe9uRcXCnuOcgAd8YeObZw7J/ -78gL/2DbT2r6P2Lw/1HQZMrMMR1JWEODHNh1lMp0OIR3ZmlDWw6i9s3xB4XKUTgV -qWmwt6H597CVlVAw+E7qL92jqigcvMR4EDCuQgkM6hFj5Ah9tTfTJeWUDz/OR4Id -dj2QlXN4Arz9X95bn+VodZcmidfHClMMPoGG7cM2seXU3RgdoFwD3lXGL82pm4C5 -CVVT9r1LrwLsJvAMbSdtdg/+NEriLV2r1m8YE2dyRhVsClz6q+3mbje/ETrOQ8vZ -njlA8u2qYYE7QKniBPdBGIIB5s19TX8XCcvnrgisJeesmHhFNL+3ToZq03d76uhY -4/mUXqdRSlrCQ1O52U7uDEgOiTkuimQsIHt6b6LJ8FVFq3SylbkXyZ5JYAvIGB7V -gZklIwa2mA/12g9PVeFdL4qhOzzIgqypcT5fWBxbLxYCXvG8JehvSWlcOtP7AhSp -3AaA8vcnt5AYIhG2YbZELzpobNxGTxD6p4MUW2N2iSlrpxwsAQljqKNEq/s3RH6R -+a8bkLkBjQRhHl4PAQwA81jSMUgbKYUWXE0T5Md0oTFv7Nr8Bxwf6wqO+za8Us5x -6a9LlteyCLfM6gwLtatd5a5JWIta2THif1JS6Rz8zWspIRsfPHoij72kn/Dt4fFW -cvnJRR8W6NitjvqMzunduKqZJfa6oWYaeDZDPEBdurDRWQs0Ig4DgkJ1zHt+72LO -yW2ix3WnKPsSzKX1ygpGDy0HSXcqtGBJcy0dxOqInnKLwQG+o6WGhbpjyxwy4ALb -dDbLmW5A4ufAONP1fQWzWhr5GGYzImSBL1Ygom+AYfAK3W+ldEC6OxArZ2TTp2Jt -21VEvdFZ57LeG9j63lPY+49zRg21t+rdngj7tCgRxz1P1nz7pFXx75ms9shqk02/ -7E4PT9dQmQdP/WM5ve6Exjl92bF0gZdqRuCvBKI5dGfhdwBHEJR5QS6Zr5wOTJww -WLy/ARiDRveSF9JFgQ7qm8v4qP6idgMWZ+BTsF4y08BYXZIXCGKZnfTU2iUM/qzG -AT9JqzXRjc7hE+aqmQ/pABEBAAGJAbwEGAEIACYWIQQv6nvbkXFwp7jnIAHfGHjm -2cOyfwUCYR5eDwIbDAUJCWYBgAAKCRDfGHjm2cOyf66EC/0QwdVJkYtsWO94kMNV -nqXy52+Qe3WcDi/R33RbmCIm01Kf2ljopgHpoZq8kWJq3Fm0Oyoh0Oxt9neUNzmP -TLOANCK4h7g1ewmmqaaImkt1j4wEeBcYMeC4EAZQFqMxK3gam0HV9c6MDqplmslp -9R1r7wAb2ZOy1aoOt5m+/iAPy1/G0f5DIo4SMsIZ59N0ferNzqvIesD9gzMTc1AQ -/5kqeSCjLY5FaUwcZ2gzNvfgyiOrY3B0SrO/jmoovW96m1QG/4MDTjYrNaLUPfNk -LKvqA3qVesk81Coz4CIzKLs/DWsUY+iZFJtPy+aNDOiXoWMa4x7DhCKzEV81t9nU -43FLf5vrMmkVW2qHZ7Q1acnMUjQRNjypQPFtsFI3EnPaa4luyVR+KmGWXvnF7y6q -nLXdnDeAoUITpHciPJSG9mCz0vJ6g0gGV3CewIkTHkFnAlniG3CzsplRd3Zmh4I9 -6G2YrJDj/bKZ1VKPf+4HeLd6jzpH/a1CprrFsd+17YDWgi8= -=jEmd ------END PGP PUBLIC KEY BLOCK----- diff --git a/modules/home/soispha/conf/gtk/default.nix b/modules/home/soispha/conf/gtk/default.nix deleted file mode 100644 index f5411369..00000000 --- a/modules/home/soispha/conf/gtk/default.nix +++ /dev/null @@ -1,58 +0,0 @@ -{ - config, - lib, - pkgs, - stdenv, - ... -}: { - gtk = { - enable = true; - theme = { - package = pkgs.nordic; - name = "Nordic"; - }; - cursorTheme = { - package = pkgs.nordzy-cursor-theme; - name = "Nordzy-cursors"; - }; - iconTheme = { - package = pkgs.nordzy-icon-theme; - name = "Nordzy-icon"; - }; - font = { - name = "Noto Sans"; - size = 10; - }; - gtk2 = { - configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc"; - # extraConfig = '' - # gtk-enable-animations=1 - # gtk-primary-button-warps-slider=0 - # gtk-toolbar-style=3 - # gtk-menu-images=1 - # gtk-button-images=1 - # - # ''; - }; - gtk3 = { - # extraConfig = '' - # gtk-button-images=true - # gtk-decoration-layout=icon:minimize,maximize,close - # gtk-enable-animations=true - # gtk-menu-images=true - # gtk-primary-button-warps-slider=false - # gtk-toolbar-style=3 - # #gtk-modules=window-decorations-gtk-module:colorreload-gtk-module - # ''; - extraCss = ""; - }; - gtk4 = { - # extraConfig = '' - # gtk-application-prefer-dark-theme=true - # gtk-decoration-layout=icon:minimize,maximize,close - # gtk-enable-animations=true - # gtk-primary-button-warps-slider=false - # ''; - }; - }; -} diff --git a/modules/home/soispha/conf/himalaya/default.nix b/modules/home/soispha/conf/himalaya/default.nix deleted file mode 100644 index c072693e..00000000 --- a/modules/home/soispha/conf/himalaya/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{...}: { - programs.himalaya = { - enable = true; - settings = { - # TODO: - }; - }; -} diff --git a/modules/home/soispha/conf/hyfetch/default.nix b/modules/home/soispha/conf/hyfetch/default.nix deleted file mode 100644 index aec21dbc..00000000 --- a/modules/home/soispha/conf/hyfetch/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{...}: { - programs.hyfetch = { - enable = true; - settings = { - preset = "rainbow"; - mode = "rgb"; - light_dark = "dark"; - lightness = 0.65; - color_align = { - mode = "horizontal"; - custom_colors = []; - fore_back = null; - }; - backend = "neofetch"; - distro = null; - pride_month_shown = []; - pride_month_disable = false; - }; - }; -} diff --git a/modules/home/soispha/conf/iamb/config.json b/modules/home/soispha/conf/iamb/config.json deleted file mode 100644 index ca06d543..00000000 --- a/modules/home/soispha/conf/iamb/config.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "profiles": { - "soispha": { - "user_id": "@soispha:vhack.eu", - "url": "https://matrix.vhack.eu" - } - }, - "default_profile": "soispha" -} diff --git a/modules/home/soispha/conf/iamb/default.nix b/modules/home/soispha/conf/iamb/default.nix deleted file mode 100644 index 2a93472c..00000000 --- a/modules/home/soispha/conf/iamb/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - xdg.configFile."iamb/config.json".source = ./config.json; -} diff --git a/modules/home/soispha/conf/keepassxc/default.nix b/modules/home/soispha/conf/keepassxc/default.nix deleted file mode 100644 index 3ac82812..00000000 --- a/modules/home/soispha/conf/keepassxc/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - config, - pkgs, - ... -}: { - xdg.configFile."keepassxc/keepassxc.ini".source = ./keepassxc.ini; -} diff --git a/modules/home/soispha/conf/keepassxc/keepassxc.ini b/modules/home/soispha/conf/keepassxc/keepassxc.ini deleted file mode 100644 index 288a194b..00000000 --- a/modules/home/soispha/conf/keepassxc/keepassxc.ini +++ /dev/null @@ -1,58 +0,0 @@ -[General] -AutoSaveAfterEveryChange=true -BackupBeforeSave=true -BackupFilePathPattern=/home/soispha/.local/share/keepassxc/{DB_FILENAME}.old.kdbx -ConfigVersion=2 -HideWindowOnCopy=false - -[Browser] -CustomProxyLocation= -Enabled=true - -[FdoSecrets] -Enabled=true - -[GUI] -AdvancedSettings=true -ApplicationTheme=dark -CompactMode=false -HidePasswords=true -ShowExpiredEntriesOnDatabaseUnlockOffsetDays=1 -TrayIconAppearance=monochrome-light - -[KeeShare] -Active="" -Own="" -QuietSuccess=true - -[PasswordGenerator] -AdditionalChars= -AdvancedMode=true -Braces=true -Dashes=true -EASCII=true -ExcludedChars= -Length=128 -Logograms=true -LowerCase=true -Math=true -Numbers=true -Punctuation=true -Quotes=true -SpecialChars=true -Type=0 -UpperCase=true -WordCount=4 -WordSeparator="," - -[SSHAgent] -Enabled=true - -[Security] -HidePasswordPreviewPanel=true -IconDownloadFallback=true -LockDatabaseIdle=false -LockDatabaseIdleSeconds=960 -PasswordEmptyPlaceholder=true -PasswordsHidden=true -PasswordsRepeatVisible=true diff --git a/modules/home/soispha/conf/latexindent/default.nix b/modules/home/soispha/conf/latexindent/default.nix deleted file mode 100644 index 0d776e14..00000000 --- a/modules/home/soispha/conf/latexindent/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - config, - pkgs, - ... -}: { - xdg.configFile."latexindent/indentconfig.yaml".source = ./indentconfig.yaml; - xdg.configFile."latexindent/mysettings.yaml".source = ./mysettings.yaml; -} diff --git a/modules/home/soispha/conf/latexindent/indentconfig.yaml b/modules/home/soispha/conf/latexindent/indentconfig.yaml deleted file mode 100644 index d67351f3..00000000 --- a/modules/home/soispha/conf/latexindent/indentconfig.yaml +++ /dev/null @@ -1,2 +0,0 @@ -paths: -- /home/dt/.config/latexindent/mysettings.yaml diff --git a/modules/home/soispha/conf/latexindent/mysettings.yaml b/modules/home/soispha/conf/latexindent/mysettings.yaml deleted file mode 100644 index 9a0f8b2f..00000000 --- a/modules/home/soispha/conf/latexindent/mysettings.yaml +++ /dev/null @@ -1,672 +0,0 @@ -# defaultSettings.yaml for latexindent.pl, version 3.19.1, 2022-12-04 -# a script that aims to -# beautify .tex, .sty, .cls files -# -# (or latexindent.exe if you're on Windows) -# -#--------------------------------------------------------------------------------------- -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# See http://www.gnu.org/licenses/. -# -# Chris Hughes, 2017 -# -# For all communication, please visit: https://github.com/cmhughes/latexindent.pl -# -#--------------------------------------------------------------------------------------- -# You should feel encouraged to change anything you like in these settings, but -# it would probably be better to have your own user settings -# files somewhere else - remember that this file may be overwritten -# when you update your tex distribution. Please see the manual linked from: -# -# https://github.com/cmhughes/latexindent.pl -# -# for details of how to create and configure your own settings files. -# -# Please read the manual (linked from above) first to understand what each switch does. -# -#--------------------------------------------------------------------------------------- - -# latexindent can be called to act on a file without using the file's extension, -# e.g, simply -# latexindent myfile -# in which case the choice of file extension is chosen -# according to the choices made in fileExtensionPreference -# Other file extensions can be added. -fileExtensionPreference: - .tex: 1 - .sty: 2 - .cls: 3 - .bib: 4 - -# default file extension of backup file (if -w switch is active) -# for example, if your .tex file is called -# myfile.tex -# and you specify the backupExtension as BACKUP.bak then your -# backup file will be -# myfileBACKUP.bak -backupExtension: .bak - -# only one backup per file: -# - if onlyOneBackUp is 0 then, as a safety measure, -# the number on the extension increments by 1 each time: -# -# myfile.bak0, myfile.bak1, myfile.bak2 -# - if you set onlyOnebackUp to 1, then the backup file will -# be overwritten each time (not recommended until you trust the script) -onlyOneBackUp: 0 - -# some users may want a finite number of backup files, -# say at most 3; in which case, they can change this maxNumberOfBackUps. -# -# If maxNumberOfBackUps is set to 0 (or less) then infinitely -# many backups are possible, unless onlyOneBackUp is switched on -maxNumberOfBackUps: 0 - -# some users may wish to cycle through back up files. -# -# for example, with maxNumberOfBackUps: 4, they may -# wish to delete the oldest back up file, and keep only the most recent. -# -# copy myfile.bak1 to myfile.bak0 -# copy myfile.bak2 to myfile.bak1 -# copy myfile.bak3 to myfile.bak2 -# copy myfile.bak4 to myfile.bak3 -# -# the back up will be written to myfile.bak4 -cycleThroughBackUps: 0 - -# preferences for information displayed in the log file -logFilePreferences: - showEveryYamlRead: 1 - showAmalgamatedSettings: 0 - showDecorationStartCodeBlockTrace: 0 - showDecorationFinishCodeBlockTrace: 0 - endLogFileWith: '--------------' - showGitHubInfoFooter: 1 - Dumper: - Terse: 1 - Indent: 1 - Useqq: 1 - Deparse: 1 - Quotekeys: 0 - Sortkeys: 1 - Pair: " => " - -# verbatim environments specified -# in this field will not be changed at all! -verbatimEnvironments: - verbatim: 1 - lstlisting: 1 - minted: 1 - -# verbatim commands such as \verb! body !, \lstinline$something else$ -verbatimCommands: - verb: 1 - lstinline: 1 - -# no indent blocks (not necessarily verbatim -# environments) which are marked as %\begin{noindent} -# or anything else that you detail in the following -noIndentBlock: - noindent: 1 - cmhtest: 1 - -# \begin{document} and \end{document} are treated differently -# by latexindent within filecontents environments -fileContentsEnvironments: - filecontents: 1 - filecontents*: 1 - -# indent preamble -indentPreamble: 1 - -# assume no preamble in cls, sty, by default -lookForPreamble: - .tex: 1 - .sty: 0 - .cls: 0 - .bib: 0 - -# some preambles can contain \begin and \end statements -# that are not in their 'standard environment block', for example, -# consider the following key = values: -# preheadhook={\begin{mdframed}[style=myframedstyle]}, -# postfoothook=\end{mdframed}, -preambleCommandsBeforeEnvironments: 0 - -# default value of indentation -defaultIndent: " " - -# remove trailing whitespace from all lines -removeTrailingWhitespace: - beforeProcessing: 0 - afterProcessing: 1 - -# name of code blocks that should have their body aligned at ampersand delimiters -lookForAlignDelims: - tabular: - delims: 1 - alignDoubleBackSlash: 1 - spacesBeforeDoubleBackSlash: 1 - multiColumnGrouping: 0 - alignRowsWithoutMaxDelims: 1 - spacesBeforeAmpersand: 1 - spacesAfterAmpersand: 1 - justification: left - alignFinalDoubleBackSlash: 0 - dontMeasure: 0 - delimiterRegEx: '(?]*?>)' - keyEqualsValuesBracesBrackets: - name: '[a-zA-Z@\*0-9_\/.:\#-]+[a-zA-Z@\*0-9_\/.\h\{\}:\#-]*?' - follow: '(?:(?<]+?' - follow: '\h|\R|\{|\[|\$|\)|\(' - UnNamedGroupingBracesBrackets: - follow: '\{|\[|,|&|\)|\(|\$' - arguments: - before: '(?:#\d\h*;?,?\/?)+|\<.*?\>' - between: '_|\^|\*' - trailingComments: - notPreceededBy: '(? goto-end -> goto-end -\ke goto-end -\eG goto-end-buffered -= status -ˆG status -:f status -/ forw-search -? back-search -\e/ forw-search * -\e? back-search * -l repeat-search -\el repeat-search-all -L reverse-search -\eL reverse-search-all -& filter -m set-mark -M set-mark-bottom -\em clear-mark -' goto-mark -ˆXˆX goto-mark -E examine -:e examine -ˆXˆV examine -:n next-file -:p prev-file -j next-tag -J prev-tag -:x index-file -:d remove-file -- toggle-option -:t toggle-option t -s toggle-option o - ## Use a long option name by starting the - ## extra string with ONE dash; eg: - ## s toggle-option -log-file\n -_ display-option -| pipe -v visual -! shell -# pshell -+ firstcmd -H help -h help -V version -0 digit -1 digit -2 digit -3 digit -4 digit -5 digit -6 digit -7 digit -8 digit -9 digit -q quit -Q quit -:q quit -:Q quit -ZZ quit - -# Stop processing (and ignore less' default values) -#stop diff --git a/modules/home/soispha/conf/less/default.nix b/modules/home/soispha/conf/less/default.nix deleted file mode 100644 index f4103080..00000000 --- a/modules/home/soispha/conf/less/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{config, ...}: { - home.sessionVariables = { - PAGER = "less"; - MANPAGER = "less --color=d+r --color=u+b"; - - # These are added here because adding them in the lesskey file somehow doesn't work. - LESSHISTSIZE = 10000; - LESSHISTFILE = "${config.xdg.dataHome}/less/history"; - }; - programs.less = { - enable = true; - keys = - builtins.readFile ./command.less - + builtins.readFile ./line-edit.less - + builtins.readFile ./env.less; - }; -} diff --git a/modules/home/soispha/conf/less/env.less b/modules/home/soispha/conf/less/env.less deleted file mode 100644 index 30f7645d..00000000 --- a/modules/home/soispha/conf/less/env.less +++ /dev/null @@ -1,2 +0,0 @@ -#env -LESS = -R --use-color --incsearch --modelines=2 --save-marks --wordwrap --status-line diff --git a/modules/home/soispha/conf/less/line-edit.less b/modules/home/soispha/conf/less/line-edit.less deleted file mode 100644 index a7e889db..00000000 --- a/modules/home/soispha/conf/less/line-edit.less +++ /dev/null @@ -1,29 +0,0 @@ -#line-edit -\t forw-complete -\17 back-complete -\e\t back-complete -ˆL expand -ˆV literal -ˆA literal -\es right -\kr right -\eh left -\kl left -\eb word-left -\e\kl word-left -\ew word-right -\e\kr word-right -\ei insert -\ex delete -\kx delete -\eX word-delete -\ekx word-delete -\e\b word-backspace -\e0 home -\kh home -\e$ end -\ke end -\en up -\ku up -\et down -ˆG abort diff --git a/modules/home/soispha/conf/lf/colors b/modules/home/soispha/conf/lf/colors deleted file mode 100644 index a93e01f9..00000000 --- a/modules/home/soispha/conf/lf/colors +++ /dev/null @@ -1,190 +0,0 @@ -# vim:ft=dircolors -# (This is not a dircolors file but it helps to highlight colors and comments) - -# default values from dircolors -# (entries with a leading # are not implemented in lf) -# #no 00 # NORMAL -# fi 00 # FILE -# #rs 0 # RESET -# di 01;34 # DIR -# ln 01;36 # LINK -# #mh 00 # MULTIHARDLINK -# pi 40;33 # FIFO -# so 01;35 # SOCK -# #do 01;35 # DOOR -# bd 40;33;01 # BLK -# cd 40;33;01 # CHR -# or 40;31;01 # ORPHAN -# #mi 00 # MISSING -# su 37;41 # SETUID -# sg 30;43 # SETGID -# #ca 30;41 # CAPABILITY -# tw 30;42 # STICKY_OTHER_WRITABLE -# ow 34;42 # OTHER_WRITABLE -# st 37;44 # STICKY -# ex 01;32 # EXEC - -# default values from lf (with matching order) -# ln 01;36 # LINK -# or 31;01 # ORPHAN -# tw 01;34 # STICKY_OTHER_WRITABLE -# ow 01;34 # OTHER_WRITABLE -# st 01;34 # STICKY -# di 01;34 # DIR -# pi 33 # FIFO -# so 01;35 # SOCK -# bd 33;01 # BLK -# cd 33;01 # CHR -# su 01;32 # SETUID -# sg 01;32 # SETGID -# ex 01;32 # EXEC -# fi 00 # FILE - - -# file types (with matching order) -ln 01;93 # LINK -or 01;93;106 # ORPHAN -tw 35 # STICKY_OTHER_WRITABLE -ow 35 # OTHER_WRITABLE -st 01;96 # STICKY -di 01;36 # DIR -pi 33 # FIFO -so 01;35 # SOCK -bd 33;01 # BLK -cd 33;01 # CHR -su 01;32 # SETUID -sg 01;32 # SETGID -ex 03;01;95 # EXEC -fi 00 # FILE - -# links to hide -~/.mbsyncrc 01;08;30 -~/.cups 01;08;30 -~/.mozilla 01;08;30 -~/.ssh 01;08;30 -~/.zshenv 01;08;30 - -~/.steampid 01;08;30 -~/.steam 01;08;30 -~/.steampath 01;08;30 - -# nix -~/.nix-profile 01;08;30 -~/.nix-defexpr 01;08;30 - -# archives or compressed (dircolors defaults) -*.tar 01;31 -*.tgz 01;31 -*.arc 01;31 -*.arj 01;31 -*.taz 01;31 -*.lha 01;31 -*.lz4 01;31 -*.lzh 01;31 -*.lzma 01;31 -*.tlz 01;31 -*.txz 01;31 -*.tzo 01;31 -*.t7z 01;31 -*.zip 01;31 -*.z 01;31 -*.dz 01;31 -*.gz 01;31 -*.lrz 01;31 -*.lz 01;31 -*.lzo 01;31 -*.xz 01;31 -*.zst 01;31 -*.tzst 01;31 -*.bz2 01;31 -*.bz 01;31 -*.tbz 01;31 -*.tbz2 01;31 -*.tz 01;31 -*.deb 01;31 -*.rpm 01;31 -*.jar 01;31 -*.war 01;31 -*.ear 01;31 -*.sar 01;31 -*.rar 01;31 -*.alz 01;31 -*.ace 01;31 -*.zoo 01;31 -*.cpio 01;31 -*.7z 01;31 -*.rz 01;31 -*.cab 01;31 -*.wim 01;31 -*.swm 01;31 -*.dwm 01;31 -*.esd 01;31 - -# image formats (dircolors defaults) -*.jpg 01;35 -*.jpeg 01;35 -*.mjpg 01;35 -*.mjpeg 01;35 -*.gif 01;35 -*.bmp 01;35 -*.pbm 01;35 -*.pgm 01;35 -*.ppm 01;35 -*.tga 01;35 -*.xbm 01;35 -*.xpm 01;35 -*.tif 01;35 -*.tiff 01;35 -*.png 01;35 -*.svg 01;35 -*.svgz 01;35 -*.mng 01;35 -*.pcx 01;35 -*.mov 01;35 -*.mpg 01;35 -*.mpeg 01;35 -*.m2v 01;35 -*.mkv 01;35 -*.webm 01;35 -*.ogm 01;35 -*.mp4 01;35 -*.m4v 01;35 -*.mp4v 01;35 -*.vob 01;35 -*.qt 01;35 -*.nuv 01;35 -*.wmv 01;35 -*.asf 01;35 -*.rm 01;35 -*.rmvb 01;35 -*.flc 01;35 -*.avi 01;35 -*.fli 01;35 -*.flv 01;35 -*.gl 01;35 -*.dl 01;35 -*.xcf 01;35 -*.xwd 01;35 -*.yuv 01;35 -*.cgm 01;35 -*.emf 01;35 -*.ogv 01;35 -*.ogx 01;35 - -# audio formats (dircolors defaults) -*.aac 00;36 -*.au 00;36 -*.flac 00;36 -*.m4a 00;36 -*.mid 00;36 -*.midi 00;36 -*.mka 00;36 -*.mp3 00;36 -*.mpc 00;36 -*.ogg 00;36 -*.ra 00;36 -*.wav 00;36 -*.oga 00;36 -*.opus 00;36 -*.spx 00;36 -*.xspf 00;36 diff --git a/modules/home/soispha/conf/lf/commands/default.nix b/modules/home/soispha/conf/lf/commands/default.nix deleted file mode 100644 index 933769ac..00000000 --- a/modules/home/soispha/conf/lf/commands/default.nix +++ /dev/null @@ -1,227 +0,0 @@ -{ - pkgs, - sysLib, - shell_library, - system, - ... -}: let - functionCall = { - name, - dependencies, - replacementStrings, - ... - }: - sysLib.writeShellScript { - inherit name; - src = ./scripts/${name}.sh; - keepPath = true; - dependencies = dependencies ++ (builtins.attrValues {inherit (pkgs) dash coreutils;}); - inherit replacementStrings; - } - + "/bin/${name}"; - - shell = { - name, - dependencies, - replacementStrings ? null, - ... - }: '' - ''${{ - ${functionCall {inherit name dependencies replacementStrings;}} - }} - ''; # closes the lf tui - pipe = { - name, - dependencies, - replacementStrings ? null, - ... - }: '' - %{{ - ${functionCall {inherit name dependencies replacementStrings;}} - }} - ''; # runs the command in the ui/term bar - async = { - name, - dependencies, - replacementStrings ? null, - ... - }: '' - &{{ - ${functionCall {inherit name dependencies replacementStrings;}} - }} - ''; # runs the command in the background - wait = { - name, - dependencies, - replacementStrings ? null, - ... - }: '' - !{{ - ${functionCall {inherit name dependencies replacementStrings;}} - }} - ''; # adds a prompt after the command has run -in { - archive = shell { - name = "archive"; - dependencies = builtins.attrValues { - inherit - (pkgs) - fzf - gnutar - xz - p7zip - zip - ; - }; - }; - broot_jump = shell { - name = "broot_jump"; - dependencies = builtins.attrValues { - inherit (pkgs) broot; - }; - }; - chmod = pipe { - name = "chmod"; - dependencies = []; - }; - clear_trash = shell { - name = "clear_trash"; - dependencies = builtins.attrValues { - inherit - (pkgs) - fzf - trashy - ; - }; - }; - dl_file = pipe { - name = "dl_file"; - dependencies = builtins.attrValues { - inherit - (pkgs) - xdragon - curl - ; - }; - }; - dragon = pipe { - name = "dragon"; - dependencies = builtins.attrValues { - inherit - (pkgs) - xdragon - ; - }; - }; - dragon_individual = pipe { - name = "dragon_individual"; - dependencies = builtins.attrValues { - inherit - (pkgs) - xdragon - ; - }; - }; - dragon_stay = pipe { - name = "dragon_stay"; - dependencies = builtins.attrValues { - inherit - (pkgs) - xdragon - ; - }; - }; - execute = shell { - name = "execute"; - dependencies = []; - }; - follow_link = pipe { - name = "follow_link"; - dependencies = with pkgs; [lf]; - }; - fzf_jump = shell { - name = "fzf_jump"; - dependencies = builtins.attrValues { - inherit (pkgs) fzf lf gnused; - }; - }; - mk_dir = pipe { - name = "mk_dir"; - dependencies = []; - }; - mk_file = shell { - name = "mk_file"; - dependencies = []; - }; - mk_file_and_edit = shell { - name = "mk_file_and_edit"; - dependencies = []; - }; - mk_ln = pipe { - name = "mk_ln"; - dependencies = []; - }; - mk_scr_default = shell { - name = "mk_scr_default"; - dependencies = builtins.attrValues {}; - replacementStrings = { - SHELL_LIBRARY_TEMPLATE = "${shell_library.rawTemplate."${system}"}"; - }; - }; - mk_scr_temp = shell { - name = "mk_scr_temp"; - dependencies = builtins.attrValues {}; - replacementStrings = { - SHELL_LIBRARY_TEMPLATE = "${shell_library.rawTemplate."${system}"}"; - TO_BE_SHELL_LIBRARY_PATH = "%SHELL_LIBRARY_PATH"; # replacement is not recursive - }; - }; - view_file = async { - name = "view_file"; - dependencies = builtins.attrValues {inherit (pkgs) file;}; - }; - go_project_base_directory = async { - name = "go_project_root"; - dependencies = []; - }; - restore_trash = shell { - name = "restore_trash"; - dependencies = builtins.attrValues { - inherit - (pkgs) - fzf - trashy - ; - }; - }; - set_wall_paper = pipe { - name = "set_wall_paper"; - dependencies = []; - }; - stripspace = pipe { - name = "stripspace"; - dependencies = []; - }; - trash = pipe { - name = "trash"; - dependencies = builtins.attrValues { - inherit - (pkgs) - trashy - trash-cli - findutils - ; - }; - }; - unarchive = pipe { - name = "unarchive"; - dependencies = builtins.attrValues { - inherit - (pkgs) - gnutar - unzip - p7zip - ; - }; - }; -} diff --git a/modules/home/soispha/conf/lf/commands/scripts/archive.sh b/modules/home/soispha/conf/lf/commands/scripts/archive.sh deleted file mode 100755 index 25f40534..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/archive.sh +++ /dev/null @@ -1,77 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# Option '-f' disables pathname expansion which can be useful when $f, $fs, and -# $fx variables contain names with '*' or '?' characters. However, this option -# is used selectively within individual commands as it can be limiting at -# times. -set -f - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" - -archivers="$(tmp echo gzip xz 7z zip)" -archiver="$(awk '{for (i=1; i<=NF; i++) print $i}' "$archivers" | fzf)" - -case "$archiver" in -"gzip") - ext=tar.gz - ;; -"xz") - ext=tar.xz - ;; -"7z") - ext=7z - ;; -"zip") - ext=zip - ;; -esac - -prompt "Archive name: " -name="" -while [ -z "$name" ] || [ -e "$name" ]; do - read -r name_base - name="$name_base.$ext" - if [ -e "$name" ]; then - prompt "Archive already exists, overwrite [y|N]: " - read -r ans - - if [ "$ans" = "y" ]; then - break - else - prompt "Archive name: " - fi - fi -done - -root="$(if [ "$(pwd)" = "/" ]; then pwd; else echo "$(pwd)/"; fi)" - -# fx contains all selected file name separated by a newline -while read -r raw_file; do - file="$(echo "$raw_file" | sed "s|$root||")" - set -- "$@" "$file" -done <"$(tmp echo "$fx")" - -case "$archiver" in -"gzip") - tar --create --gzip -file="$name" "$@" - ;; -"xz") - tar --create --file="$name" "$@" - xz --compress -9 --extreme --threads=0 "$name" - ;; -"7z") - 7z a "$name" "$@" - ;; -"zip") - zip --symlinks -9 -r "$name" "$@" - ;; -esac -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/broot_jump.sh b/modules/home/soispha/conf/lf/commands/scripts/broot_jump.sh deleted file mode 100755 index 8f40ba01..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/broot_jump.sh +++ /dev/null @@ -1,25 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -tmp=$(mktmp) -res="$(broot --outcmd "$tmp" && sed 's/cd //' "$tmp")" - -if [ -f "$res" ]; then - cmd="select" -elif [ -d "$res" ]; then - cmd="cd" -fi - -lf -remote "send '$id' '$cmd' '$res'" -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/chmod.sh b/modules/home/soispha/conf/lf/commands/scripts/chmod.sh deleted file mode 100755 index 9859127b..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/chmod.sh +++ /dev/null @@ -1,24 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -readp "Mode bits: " bits -# shellcheck disable=SC2269 -bits="$bits" - -while read -r file; do - chmod "$bits" "$file" -done <"$(tmp echo "$fx")" - -lf -remote 'send reload' -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/clear_trash.sh b/modules/home/soispha/conf/lf/commands/scripts/clear_trash.sh deleted file mode 100755 index 9052bb5f..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/clear_trash.sh +++ /dev/null @@ -1,8 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# could also use --force, for instand removal -trash list | fzf --multi | awk '{print $NF}' | xargs trash empty --match=exact -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/cow_cp.sh b/modules/home/soispha/conf/lf/commands/scripts/cow_cp.sh deleted file mode 100755 index 98675b9e..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/cow_cp.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env bash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -# source: https://github.com/gokcehan/lf/wiki/Tips#use-copy-on-write-when-possible -# -# # FIXME: Add this. The hardest part is in checking, if a file can be reflinked, as fuse and bind mount are hard to -# backtrack <2023-08-29> - -# # This was very helpful for debugging: -# log_file="$HOME/lf-reflink-log-$(date +'%Y-%m-%d_%H-%M-%S')" -# [ -f "$log_file" ] || touch "$log_file" -# exec 1>> $log_file 2>&1 -# set -x - -# In theory, this may fail, -# but I tested it on selection with 10k files - everything worked (bash) -# FIXME: This will very likely fail on dash, when the file number > 255 <2023-08-29> -set -- "$(cat ~/.local/share/lf/files)" - -mode="$1" -shift - -if [ "$mode" = 'copy' ]; then - # Reflink if all items of selection and the destination are on the - # same mount point and it is CoW fs. - # (to make sure reflink never fails in first place, so we don't have to - # clean up) - - src_targets="$(df --output=target -- "$@" | sed '1d' | sort -u)" - - if [ "$(df --output=target -- "$PWD" | tail -n 1)" = \ - "$(echo "$src_targets" | tail -n 1)" ] && - (("$(echo "$src_targets" | wc -l)" == 1)) && - [[ "$(df --output=fstype -- "$PWD" | tail -n 1)" =~ ^(btrfs|xfs|zfs)$ ]]; then - - echo 'selected copy and cp reflink paste' - - start=$(date '+%s') - - # Handle same names in dst - # TODO parallelism, idk - but exit/return/break won't stop the loop from subshell... - for i in "$@"; do - name="${i##*/}" - original="$name" - - count=0 - while [ -w "$PWD/$name" ]; do - count=$((count + 1)) - name="$original.~$count~" - done - - set +e - cp_out="$(cp -rn --reflink=always -- "$i" "$PWD/$name" 2>&1)" - set -e - - if [ -n "$cp_out" ]; then - lf -remote "send $id echoerr $cp_out" - exit 0 - fi - done - - finish=$(($(date '+%s') - start)) - t='' - if ((finish > 2)); then - t="${finish}s" - fi - - # Or just skip a file when names are the same. - # (A LOT faster if you e.g. pasting selection of 10k files) - # cp -rn --reflink=always -- "$@" . - - lf -remote "send clear" - - green=$'\u001b[32m' - reset=$'\u001b[0m' - lf -remote "send $id echo ${green}reflinked!${reset} $t" - else - echo 'selected copy and lf native paste' - lf -remote "send $id paste" - lf -remote "send clear" - fi - -elif [ "$mode" = 'move' ]; then - echo 'selected move and lf native paste' - lf -remote "send $id paste" - lf -remote "send clear" -fi - -# # for debug -# set +x - -lf -remote "send load" - -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/dl_file.sh b/modules/home/soispha/conf/lf/commands/scripts/dl_file.sh deleted file mode 100755 index c7e3d8b2..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/dl_file.sh +++ /dev/null @@ -1,43 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -# Provides the ability to download a file by dropping it into a window - -url="$(dragon -t -x)" - -if [ -n "$url" ]; then - prompt "File Name: " - name="" - while [ -z "$name" ] || [ -e "$name" ]; do - read -r name - if [ -e "$name" ]; then - prompt "File already exists, overwrite [y|N]: " - read -r ans - - if [ "$ans" = "y" ]; then - break - else - prompt "File Name: " - fi - fi - done - - # Download the file with curl - if [ -n "$name" ]; then - curl -o "$name" "$url" || die "curl failed" - fi -else - die "URL is null!" -fi -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/dragon.sh b/modules/home/soispha/conf/lf/commands/scripts/dragon.sh deleted file mode 100755 index cf3c3176..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/dragon.sh +++ /dev/null @@ -1,20 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -while read -r file; do - set -- "$@" "$file" -done <"$(tmp echo "$fx")" - -dragon -a -x "$@" -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/dragon_individual.sh b/modules/home/soispha/conf/lf/commands/scripts/dragon_individual.sh deleted file mode 100755 index 2465cdfa..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/dragon_individual.sh +++ /dev/null @@ -1,20 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -while read -r file; do - set -- "$@" "$file" -done <"$(tmp echo "$fx")" - -dragon "$@" -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/dragon_stay.sh b/modules/home/soispha/conf/lf/commands/scripts/dragon_stay.sh deleted file mode 100755 index 066b4c75..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/dragon_stay.sh +++ /dev/null @@ -1,20 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -while read -r file; do - set -- "$@" "$file" -done <"$(tmp echo "$fx")" - -dragon -a "$@" -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/execute.sh b/modules/home/soispha/conf/lf/commands/scripts/execute.sh deleted file mode 100755 index aa97fd7f..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/execute.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -dir="$(realpath "$f")" - -"$dir" - -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/follow_link.sh b/modules/home/soispha/conf/lf/commands/scripts/follow_link.sh deleted file mode 100755 index 80413990..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/follow_link.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -dir="$(realpath "$f")" - -lf -remote "send $id cd \"$dir\"" - -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/fzf_jump.sh b/modules/home/soispha/conf/lf/commands/scripts/fzf_jump.sh deleted file mode 100755 index ad1633fb..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/fzf_jump.sh +++ /dev/null @@ -1,24 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -res="$(fd . --maxdepth 3 | fzf --header='Jump to location')" - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -if [ -f "$res" ]; then - cmd="select" -elif [ -d "$res" ]; then - cmd="cd" -fi - -lf -remote "send $id $cmd \"$res\"" -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/go_project_root.sh b/modules/home/soispha/conf/lf/commands/scripts/go_project_root.sh deleted file mode 100755 index 5f7746d3..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/go_project_root.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -flake_base_dir="$(search_flake_base_dir)" -if [ "$flake_base_dir" ]; then - lf -remote "send $id cd $flake_base_dir" || die "Bug: No base dir ($flake_base_dir)" -else - die "Unable to locate base dir" -fi - -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/mk_dir.sh b/modules/home/soispha/conf/lf/commands/scripts/mk_dir.sh deleted file mode 100755 index 150f7eed..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/mk_dir.sh +++ /dev/null @@ -1,32 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -prompt "Directory Name: " -name="" -while [ -z "$name" ] || [ -e "$name" ]; do - read -r name - if [ -e "$name" ]; then - prompt "Directory already exists, overwrite [y|N]: " - read -r ans - - if [ "$ans" = "y" ]; then - break - else - prompt "Directory Name: " - fi - fi -done - -mkdir "$name" -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/mk_file.sh b/modules/home/soispha/conf/lf/commands/scripts/mk_file.sh deleted file mode 100755 index 41d5cf1a..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/mk_file.sh +++ /dev/null @@ -1,32 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -prompt "File name: " -name="" -while [ -z "$name" ] || [ -e "$name" ]; do - read -r name - if [ -e "$name" ]; then - prompt "File already exists, overwrite [y|N]: " - read -r ans - - if [ "$ans" = "y" ]; then - break - else - prompt "File name: " - fi - fi -done - -touch "$name" -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/mk_file_and_edit.sh b/modules/home/soispha/conf/lf/commands/scripts/mk_file_and_edit.sh deleted file mode 100755 index 19fc51db..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/mk_file_and_edit.sh +++ /dev/null @@ -1,33 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -prompt "File name: " -name="" -while [ -z "$name" ] || [ -e "$name" ]; do - read -r name - if [ -e "$name" ]; then - prompt "File already exists, overwrite [y|N]: " - read -r ans - - if [ "$ans" = "y" ]; then - break - else - prompt "File name: " - fi - fi -done - -touch "$name" -"$EDITOR" "$name" -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/mk_ln.sh b/modules/home/soispha/conf/lf/commands/scripts/mk_ln.sh deleted file mode 100755 index 7fab8e22..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/mk_ln.sh +++ /dev/null @@ -1,45 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -while IFS= read -r i; do - set -- "$@" "$i" -done <"$HOME"/.local/share/lf/files - -mode="$1" -shift - -if [ "$#" -eq 0 ]; then - msg "no files to link" - exit 0 -fi - -case "$mode" in -copy) - while [ "$#" -gt 0 ]; do - file="$1" - ans="$(basename "$file")" - - while [ -e "$ans" ]; do - prompt "$ans already exists, new name for link: " - read -r ans - done - - ln --symbolic --relative "$file" "$(pwd)/$ans" - shift - done - ;; -esac -rm ~/.local/share/lf/files -# lf -remote "send clear" -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/mk_scr_default.sh b/modules/home/soispha/conf/lf/commands/scripts/mk_scr_default.sh deleted file mode 100755 index 47d05080..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/mk_scr_default.sh +++ /dev/null @@ -1,38 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -prompt "Script name: " -name="" -while [ -z "$name" ] || [ -e "$name" ]; do - read -r name_base - name="$name_base.sh" - if [ -e "$name" ]; then - prompt "Script already exists, overwrite [y|N]: " - read -r ans - - if [ "$ans" = "y" ]; then - break - else - prompt "Script Name: " - fi - fi -done - -script="$(pwd)"/"$name" - -cat "%SHELL_LIBRARY_TEMPLATE" >"$script" -chmod +x "$script" -"$VISUAL" "$script" - -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/mk_scr_temp.sh b/modules/home/soispha/conf/lf/commands/scripts/mk_scr_temp.sh deleted file mode 100755 index 512b5d0b..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/mk_scr_temp.sh +++ /dev/null @@ -1,38 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -prompt "Script name: " -name="" -while [ -z "$name" ] || [ -e "$name" ]; do - read -r name - if [ -e "$name" ]; then - prompt "Script already exists, overwrite [y|N]: " - read -r ans - - if [ "$ans" = "y" ]; then - break - else - prompt "Script Name: " - fi - fi -done - -script="$(pwd)"/"$name" - -sed 's|%TO_BE_SHELL_LIBRARY_PATH|%SHELL_LIBRARY_PATH|' "%SHELL_LIBRARY_TEMPLATE" >"$script" -sed -i 's|dash|sh|' "$script" -chmod +x "$script" -"$VISUAL" "$script" - -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/restore_trash.sh b/modules/home/soispha/conf/lf/commands/scripts/restore_trash.sh deleted file mode 100755 index b4ef492f..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/restore_trash.sh +++ /dev/null @@ -1,16 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -trash list | fzf --multi | awk '{print $NF}' | xargs trash restore --match=exact -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/set_wall_paper.sh b/modules/home/soispha/conf/lf/commands/scripts/set_wall_paper.sh deleted file mode 100755 index 2e607d33..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/set_wall_paper.sh +++ /dev/null @@ -1,19 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -die "No yet implemented" # TODO: do what the 'die' says -#sed -i "s,export AWMWALLPAPER='.*',export AWMWALLPAPER='${f}'," ${ZDOTDIR}/.zshenv -#nohub swaybg -i "$f" -#feh --bg-max --no-fehbg "$f" -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/stripspace.sh b/modules/home/soispha/conf/lf/commands/scripts/stripspace.sh deleted file mode 100755 index 33b1cbcf..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/stripspace.sh +++ /dev/null @@ -1,40 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -files=$(mktmp) -echo "$fx" >"$files" - -awk_source=$(mktmp) -cat <"$awk_source" -BEGIN {FS=" "} -{for (i=1; i != NF + 1; i++) - if (i == NF) { - parts[i]=tolower(\$i); - } else { - parts[i]=tolower(\$i"_"); - } -} -END {for (i in parts) printf parts[i]} -OFT - -while read -r file; do - dirty_name=$(mktmp) - basename "$file" >"$dirty_name" - clean_name=$(awk -f "$awk_source" "$dirty_name") - - [ -e "$clean_name" ] && die "file \"$clean_name\" already exists!" - mv "$(cat "$dirty_name")" "$clean_name" || die "Move failed" - lf -remote 'send reload' -done <"$files" -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/trash.sh b/modules/home/soispha/conf/lf/commands/scripts/trash.sh deleted file mode 100755 index f4878c49..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/trash.sh +++ /dev/null @@ -1,37 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -trash_output=$(mktmp) -expected_error_output=$(mktmp) - -while read -r file; do - set -- "$@" "$file" -done <"$(tmp echo "$fx")" - -# TODO: why are we using trashy at all, when trash-cli can do everything? -# -# try trashy first, through nix because both trashy and trash-cli provide a trash command, which conflicts -nix run nixpkgs#trashy -- put "$@" 2>"$trash_output" - -# FIXME: Find a way, that does not depend on parsing an error message <2023-08-29> -cat <"$expected_error_output" -error: Error during a \`trash\` operation: Unknown { description: "Path: '\"/.Trash-1000\"'. Message: Permission denied (os error 13)" } -EOF - -if [ "$(cat "$expected_error_output")" = "$(cat "$trash_output")" ]; then - warning "Deleting with trash-cli to the /.Trash folder" - # this file could not be trashed because it is on the tempfs volume, trash-cli can do this this - trash-put "$@" -fi -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/unarchive.sh b/modules/home/soispha/conf/lf/commands/scripts/unarchive.sh deleted file mode 100755 index d4835f6b..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/unarchive.sh +++ /dev/null @@ -1,36 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" -# shellcheck disable=SC2269 -id="$id" - -# extract the current file with the right command -# (xkcd link: https://xkcd.com/1168/) -set -f - -unarchive() { - case "$1" in - *.tar.bz | *.tar.bz2 | *.tbz | *.tbz2) tar xjvf "$1" ;; - *.tar.gz | *.tgz) tar xzvf "$1" ;; - *.tar.xz | *.txz) tar xJvf "$1" ;; - *.zip) unzip "$1" ;; - *.rar) - die "rar is a unfree format!" - ;; - *.7z) 7z x "$1" ;; - *) die "Unsupported format" ;; - esac -} - -while read -r file; do - unarchive "$file" -done <"$fx" -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/commands/scripts/view_file.sh b/modules/home/soispha/conf/lf/commands/scripts/view_file.sh deleted file mode 100755 index 6258d755..00000000 --- a/modules/home/soispha/conf/lf/commands/scripts/view_file.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# shellcheck disable=SC2269 -f="$f" -# shellcheck disable=SC2269 -fx="$fx" -# shellcheck disable=SC2269 -fs="$fs" - -mime_type="$(file --mime-type --brief --dereference "$f")" -case "$mime_type" in -application/pdf) - "$READER" "$f" - ;; -image/*) - "$IVIEWER" "$f" - ;; -*) - die "Mime-Type: '$mime_type' not supported" - ;; -esac - -# vim: ft=sh diff --git a/modules/home/soispha/conf/lf/default.nix b/modules/home/soispha/conf/lf/default.nix deleted file mode 100644 index 7b604ed0..00000000 --- a/modules/home/soispha/conf/lf/default.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ - pkgs, - sysLib, - nixosConfig, - shell_library, - system, - ... -}: let - commands = import ./commands {inherit pkgs sysLib shell_library system;}; - keybindings = import ./keybindings {inherit nixosConfig;}; -in { - xdg.configFile."lf/icons".source = ./icons; - xdg.configFile."lf/colors".source = ./colors; - - # TODO: add the systemd tempfile option here - - programs.lf = { - enable = true; - - inherit commands keybindings; - - previewer = { - keybinding = "i"; - source = "${pkgs.ctpv}/bin/ctpv"; - }; - settings = { - # close the server, after the last client exits - autoquit = true; - - # disable the cusor in the preview pane - cursorpreviewfmt = ""; - - # preview for directories - # dirpreviews = true; - - # count things in directories - dircounts = true; - - drawbox = true; - - # errorfmt = "\\033[1;91m==> ERROR:\\033[0m\\033[1;93m%s\\033[0m"; - errorfmt = "\\033[1;91m%s\\033[0m"; - hidden = true; # show hidden files - icons = true; - ifs = "\\n"; # internal field separator for shell commands - #info = "size"; # show the size of a directory - shell = "sh"; - shellopts = "-eu"; # e: exit on error; u: error for unset variables - }; - # TODO: remove auto quit, if it has been added - extraConfig = '' - &${pkgs.ctpv}/bin/ctpv -s $id - cmd on-quit %${pkgs.ctpv}/bin/ctpv -e $id - set cleaner ${pkgs.ctpv}/bin/ctpvclear - - source ${nixosConfig.age.secrets.lf_cd_paths.path} - ''; - }; -} diff --git a/modules/home/soispha/conf/lf/icons b/modules/home/soispha/conf/lf/icons deleted file mode 100644 index 9047fbfb..00000000 --- a/modules/home/soispha/conf/lf/icons +++ /dev/null @@ -1,360 +0,0 @@ -# vim:ft=conf - -# These examples require Nerd Fonts or a compatible font to be used. -# See https://www.nerdfonts.com for more information. - -# default values from lf (with matching order) -# ln l # LINK -# or l # ORPHAN -# tw t # STICKY_OTHER_WRITABLE -# ow d # OTHER_WRITABLE -# st t # STICKY -# di d # DIR -# pi p # FIFO -# so s # SOCK -# bd b # BLK -# cd c # CHR -# su u # SETUID -# sg g # SETGID -# ex x # EXEC -# fi - # FILE - -# file types (with matching order) -ln  # LINK -or  # ORPHAN -tw t # STICKY_OTHER_WRITABLE -ow  # OTHER_WRITABLE -st t # STICKY -di  # DIR -pi p # FIFO -so s # SOCK -bd b # BLK -cd c # CHR -su u # SETUID -sg g # SETGID -ex  # EXEC -fi  # FILE - -# file extensions (vim-devicons) -*.styl  -*.sass  -*.scss  -*.htm  -*.html  -*.slim  -*.haml  -*.ejs  -*.css  -*.less  -*.md  -*.mdx  -*.markdown  -*.rmd  -*.json  -*.webmanifest  -*.js  -*.mjs  -*.jsx  -*.rb  -*.gemspec  -*.rake  -*.php  -*.py  -*.pyc  -*.pyo  -*.pyd  -*.coffee  -*.mustache  -*.hbs  -*.conf  -*.ini  -*.yml  -*.yaml  -*.toml  -*.bat  -*.mk  -*.jpg  -*.jpeg  -*.bmp  -*.png  -*.webp  -*.gif  -*.ico  -*.twig  -*.cpp  -*.c++  -*.cxx  -*.cc  -*.cp  -*.c  -*.cs 󰌛 -*.h  -*.hh  -*.hpp  -*.hxx  -*.hs  -*.lhs  -*.nix  -*.lua  -*.java  -*.sh  -*.fish  -*.bash  -*.zsh  -*.ksh  -*.csh  -*.awk  -*.ps1  -*.ml λ -*.mli λ -*.diff  -*.db  -*.sql  -*.sqlite  -*.dump  -*.clj  -*.cljc  -*.cljs  -*.edn  -*.scala  -*.go  -*.dart  -*.xul  -*.sln  -*.suo  -*.pl  -*.pm  -*.t  -*.rss  -'*.f#'  -*.fsscript  -*.fsx  -*.fs  -*.fsi  -*.rs  -*.rlib  -*.d  -*.erl  -*.hrl  -*.ex  -*.exs  -*.eex  -*.leex  -*.heex  -*.vim  -*.ai  -*.psd  -*.psb  -*.ts  -*.tsx  -*.jl  -*.pp  -*.vue 󰡄 -*.elm  -*.swift  -*.xcplayground  -*.tex 󰙩 -*.r 󰟔 -*.rproj 󰗆 -*.sol 󰡪 -*.pem 󰌋 - -# file names (vim-devicons) (case-insensitive not supported in lf) -*gruntfile.coffee  -*gruntfile.js  -*gruntfile.ls  -*gulpfile.coffee  -*gulpfile.js  -*gulpfile.ls  -*mix.lock  -*dropbox  -*.ds_store  -*.gitconfig  -*.gitignore  -*.gitattributes  -*.gitlab-ci.yml  -*.bashrc  -*.zshrc  -*.zshenv  -*.zprofile  -*.vimrc  -*.gvimrc  -*_vimrc  -*_gvimrc  -*.bashprofile  -*favicon.ico  -*license  -*node_modules  -*react.jsx  -*procfile  -*dockerfile  -*docker-compose.yml  -*rakefile  -*config.ru  -*gemfile  -*makefile  -*cmakelists.txt  -*robots.txt 󰚩 - -# file names (case-sensitive adaptations) -*Gruntfile.coffee  -*Gruntfile.js  -*Gruntfile.ls  -*Gulpfile.coffee  -*Gulpfile.js  -*Gulpfile.ls  -*Dropbox  -*.DS_Store  -*LICENSE  -*COPYING  -*COPYING.LESSER  -*React.jsx  -*Procfile  -*Dockerfile  -*Docker-compose.yml  -*Rakefile  -*Gemfile  -*Makefile  -*CMakeLists.txt  - -# file patterns (vim-devicons) (patterns not supported in lf) -# .*jquery.*\.js$  -# .*angular.*\.js$  -# .*backbone.*\.js$  -# .*require.*\.js$  -# .*materialize.*\.js$  -# .*materialize.*\.css$  -# .*mootools.*\.js$  -# .*vimrc.*  -# Vagrantfile$  - -# file patterns (file name adaptations) -*jquery.min.js  -*angular.min.js  -*backbone.min.js  -*require.min.js  -*materialize.min.js  -*materialize.min.css  -*mootools.min.js  -*vimrc  -Vagrantfile  - -# archives or compressed (extensions from dircolors defaults) -*.tar  -*.tgz  -*.arc  -*.arj  -*.taz  -*.lha  -*.lz4  -*.lzh  -*.lzma  -*.tlz  -*.txz  -*.tzo  -*.t7z  -*.zip  -*.z  -*.dz  -*.gz  -*.lrz  -*.lz  -*.lzo  -*.xz  -*.zst  -*.tzst  -*.bz2  -*.bz  -*.tbz  -*.tbz2  -*.tz  -*.deb  -*.rpm  -*.jar  -*.war  -*.ear  -*.sar  -*.rar  -*.alz  -*.ace  -*.zoo  -*.cpio  -*.7z  -*.rz  -*.cab  -*.wim  -*.swm  -*.dwm  -*.esd  - -# image formats (extensions from dircolors defaults) -*.jpg  -*.jpeg  -*.mjpg  -*.mjpeg  -*.gif  -*.bmp  -*.pbm  -*.pgm  -*.ppm  -*.tga  -*.xbm  -*.xpm  -*.tif  -*.tiff  -*.png  -*.svg  -*.svgz  -*.mng  -*.pcx  -*.mov  -*.mpg  -*.mpeg  -*.m2v  -*.mkv  -*.webm  -*.ogm  -*.mp4  -*.m4v  -*.mp4v  -*.vob  -*.qt  -*.nuv  -*.wmv  -*.asf  -*.rm  -*.rmvb  -*.flc  -*.avi  -*.fli  -*.flv  -*.gl  -*.dl  -*.xcf  -*.xwd  -*.yuv  -*.cgm  -*.emf  -*.ogv  -*.ogx  - -# audio formats (extensions from dircolors defaults) -*.aac  -*.au  -*.flac  -*.m4a  -*.mid  -*.midi  -*.mka  -*.mp3  -*.mpc  -*.ogg  -*.ra  -*.wav  -*.oga  -*.opus  -*.spx  -*.xspf  - -# other formats -*.pdf  diff --git a/modules/home/soispha/conf/lf/keybindings/default.nix b/modules/home/soispha/conf/lf/keybindings/default.nix deleted file mode 100644 index b41004dc..00000000 --- a/modules/home/soispha/conf/lf/keybindings/default.nix +++ /dev/null @@ -1,94 +0,0 @@ -{nixosConfig, ...}: { - # Remove some defaults - "'\"'" = null; - ";" = null; - "\"'\"" = null; - c = null; - d = null; - e = null; - j = null; - k = null; - m = null; - f = null; - - # Sorting - kn = ":set sortby natural; set info"; - ks = ":set sortby size; set info size"; - kt = ":set sortby time; set info time"; - ka = ":set sortby atime; set info atime"; - kc = ":set sortby ctime; set info ctime"; - ke = ":set sortby ext; set info"; - - # Searching - l = "search-next"; - L = "search-prev"; - - # File Openers - ee = "\$\$EDITOR \"$f\""; - es = "\$ nvim -S \"$f\""; - u = "view_file"; - cc = "\$sudo -e \"$f\""; - fe = "execute"; - fl = "follow_link"; - - # Archive Mappings - au = "unarchive"; - aa = "archive"; - - # Trash Mappings - dd = "trash"; - jc = "clear_trash"; - jr = "restore_trash"; - - # Dragon Mapping - dr = "dragon"; - ds = "dragon-stay"; - di = "dragon-individual"; - #dm = "mvdragon"; - #dc = "cpdragon"; - dl = "dlfile"; - - cs = "stripspace"; - - # Vim keys - h = "updir"; - t = "down"; - n = "up"; - s = "open"; - - # Basic Functions - "." = "set hidden!"; - DD = "delete"; - p = "paste"; - x = "cut"; - y = "copy"; - "" = "open"; - - mk = "mk_ln"; - mf = "mk_file"; - me = "mk_file_and_edit"; - md = "mk_dir"; - ms = "mk_scr_default"; - mt = "mk_scr_temp"; - - ch = "chmod"; - bg = "set_wall_paper"; - r = ":rename; cmd-end"; - H = "go_project_base_directory"; - R = "reload"; - C = "clear"; - U = "unselect"; - - # Movement - gjr = "cd ~/.local/share/Trash/files"; - gus = "cd /run/user/${builtins.toString nixosConfig.users.users.soispha.uid}"; - - gc = "cd ~/.config"; - gl = "cd ~/.local"; - gE = "cd /etc"; - - "gU." = "cd /usr"; - gUs = " cd /usr/share"; - - gt = "cd /tmp"; -} diff --git a/modules/home/soispha/conf/mail/accounts/benedikt.nix b/modules/home/soispha/conf/mail/accounts/benedikt.nix deleted file mode 100644 index 87ede61b..00000000 --- a/modules/home/soispha/conf/mail/accounts/benedikt.nix +++ /dev/null @@ -1,48 +0,0 @@ -{pkgs}: { - address = "benedikt.peetz@b-peetz.de"; - userName = "benedikt.peetz@b-peetz.de"; - realName = "Benedikt Peetz"; - primary = true; - passwordCommand = "${pkgs.libsecret}/bin/secret-tool lookup account benedikt.peetz@b-peetz.de"; - aliases = [ - "@b-peetz.de" - ]; - folders = {}; - gpg = { - encryptByDefault = true; - key = "9A254A935C25B0419EAE495014D2BC012F572AD7"; - signByDefault = true; - }; - signature = { - # TODO: - }; - neomutt = { - enable = true; - }; - mbsync = { - enable = true; - create = "both"; - }; - # himalaya = { - # enable = true; - # backend = "imap"; - # sender = "smtp"; - # settings = { - # # TODO: - # }; - # }; - smtp = { - host = "server1.vhack.eu"; - port = 465; - }; - imap = { - host = "server1.vhack.eu"; - port = 993; - }; - jmap = { - # TODO: - }; - maildir = { - path = "bpeetz"; - }; -} diff --git a/modules/home/soispha/conf/mail/accounts/soispha.nix b/modules/home/soispha/conf/mail/accounts/soispha.nix deleted file mode 100644 index 012e84d6..00000000 --- a/modules/home/soispha/conf/mail/accounts/soispha.nix +++ /dev/null @@ -1,49 +0,0 @@ -{pkgs}: { - address = "soispha@vhack.eu"; - userName = "soispha@vhack.eu"; - realName = "Soispha"; - primary = false; - passwordCommand = "${pkgs.libsecret}/bin/secret-tool lookup account soispha@vhack.eu"; - aliases = [ - "admin@vhack.eu" - ]; - folders = { - }; - gpg = { - encryptByDefault = true; - key = "9606FC749FCE16360723D4ADA5E94010C3A642AD"; - signByDefault = true; - }; - signature = { - # TODO: - }; - neomutt = { - enable = true; - }; - mbsync = { - enable = true; - create = "both"; - }; - # himalaya = { - # enable = true; - # backend = "imap"; - # sender = "smtp"; - # settings = { - # # TODO: - # }; - # }; - smtp = { - host = "server1.vhack.eu"; - port = 465; - }; - imap = { - host = "server1.vhack.eu"; - port = 993; - }; - jmap = { - # TODO: - }; - maildir = { - path = "soispha"; - }; -} diff --git a/modules/home/soispha/conf/mail/default.nix b/modules/home/soispha/conf/mail/default.nix deleted file mode 100644 index 0ecbe40a..00000000 --- a/modules/home/soispha/conf/mail/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - config, - pkgs, - ... -}: let - benedikt = import ./accounts/benedikt.nix {inherit pkgs;}; - soispha = import ./accounts/soispha.nix {inherit pkgs;}; - - accounts = {inherit soispha benedikt;}; -in { - accounts.email = { - maildirBasePath = "${config.xdg.dataHome}/maildir"; - inherit accounts; - }; -} diff --git a/modules/home/soispha/conf/mako/default.nix b/modules/home/soispha/conf/mako/default.nix deleted file mode 100644 index 711457f2..00000000 --- a/modules/home/soispha/conf/mako/default.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ - config, - pkgs, - ... -}: { - services.mako = { - enable = true; - backgroundColor = "#2e3440"; - borderColor = "#88c0d0"; - borderRadius = 25; - borderSize = 2; - defaultTimeout = 5000; - font = "Source Code Pro 10"; - width = 500; - height = 500; - icons = true; - ignoreTimeout = true; - layer = "overlay"; - markup = true; # TODO: - maxIconSize = 64; - sort = "-time"; - extraConfig = '' - [urgency=low] - border-color=#cccccc - - [urgency=normal] - border-color=#d08770 - - [urgency=high] - border-size=3 - border-color=#bf616a - default-timeout=0 - - [urgency=critical] - border-size=4 - border-color=#bf616a - default-timeout=0 - - [category=mpd] - default-timeout=2000 - group-by=category - ''; - }; -} diff --git a/modules/home/soispha/conf/mbsync/default.nix b/modules/home/soispha/conf/mbsync/default.nix deleted file mode 100644 index ac9808c9..00000000 --- a/modules/home/soispha/conf/mbsync/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - config, - lib, - ... -}: { - # TODO: I have no clue if both are needed, but it looks neat, right? - programs.mbsync = { - enable = true; - }; - services.mbsync = { - enable = true; - # TODO: enable after isync 1.5 drops - #configFile = "${config.xdg.configHome}/mbsync/mbsync.conf"; - }; - # Disable the timer, and only activate it on neomutt start - systemd.user.timers.mbsync = lib.mkForce {}; -} diff --git a/modules/home/soispha/conf/mpd/default.nix b/modules/home/soispha/conf/mpd/default.nix deleted file mode 100644 index 49844b06..00000000 --- a/modules/home/soispha/conf/mpd/default.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - config, - pkgs, - lib, - osConfig, - ... -}: let - dataDir = "${config.xdg.dataHome}/mpd"; - playlistDirectory = "${dataDir}/playlists"; - runtimeDir = "/run/user/${builtins.toString osConfig.users.users.soispha.uid}/mpd"; -in { - home.sessionVariables = { - MPD_HOST = "/run/user/${builtins.toString osConfig.users.users.soispha.uid}/mpd/socket"; - }; - - systemd.user.services.mpd.Service.ExecStartPre = lib.mkForce '' - ${pkgs.coreutils}/bin/mkdir -p "${dataDir}" "${playlistDirectory}" "${runtimeDir}" - ''; - services.mpd = { - enable = true; - inherit dataDir; - musicDirectory = "~/media/music"; - network = { - listenAddress = "${runtimeDir}/socket"; - }; - extraConfig = '' - metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc,comment" - auto_update "yes" - - audio_output { - type "pipewire" - name "pipewire" - } - #database { - # plugin "simple" - # path "~/.local/share/mpd/db - # cache_directory "~/.local/share/mpd/cache" - #} - - filesystem_charset "UTF-8" - ''; - }; -} diff --git a/modules/home/soispha/conf/mpd/mpdconf.example b/modules/home/soispha/conf/mpd/mpdconf.example deleted file mode 100644 index eaa5e641..00000000 --- a/modules/home/soispha/conf/mpd/mpdconf.example +++ /dev/null @@ -1,418 +0,0 @@ -# An example configuration file for MPD. -# Read the user manual for documentation: http://www.musicpd.org/doc/user/ - - -# Files and directories ####################################################### -# -# This setting controls the top directory which MPD will search to discover the -# available audio files and add them to the daemon's online database. This -# setting defaults to the XDG directory, otherwise the music directory will be -# be disabled and audio files will only be accepted over ipc socket (using -# file:// protocol) or streaming files over an accepted protocol. -# -#music_directory "~/music" -# -# This setting sets the MPD internal playlist directory. The purpose of this -# directory is storage for playlists created by MPD. The server will use -# playlist files not created by the server but only if they are in the MPD -# format. This setting defaults to playlist saving being disabled. -# -#playlist_directory "~/.mpd/playlists" -# -# This setting sets the location of the MPD database. This file is used to -# load the database at server start up and store the database while the -# server is not up. This setting defaults to disabled which will allow -# MPD to accept files over ipc socket (using file:// protocol) or streaming -# files over an accepted protocol. -# -#db_file "~/.mpd/database" - -# These settings are the locations for the daemon log files for the daemon. -# -# The special value "syslog" makes MPD use the local syslog daemon. This -# setting defaults to logging to syslog. -# -# If you use systemd, do not configure a log_file. With systemd, MPD -# defaults to the systemd journal, which is fine. -# -#log_file "~/.mpd/log" - -# This setting sets the location of the file which stores the process ID -# for use of mpd --kill and some init scripts. This setting is disabled by -# default and the pid file will not be stored. -# -# If you use systemd, do not configure a pid_file. -# -#pid_file "~/.mpd/pid" - -# This setting sets the location of the file which contains information about -# most variables to get MPD back into the same general shape it was in before -# it was brought down. This setting is disabled by default and the server -# state will be reset on server start up. -# -#state_file "~/.mpd/state" -# -# The location of the sticker database. This is a database which -# manages dynamic information attached to songs. -# -#sticker_file "~/.mpd/sticker.sql" -# -############################################################################### - - -# General music daemon options ################################################ -# -# This setting specifies the user that MPD will run as. MPD should never run as -# root and you may use this setting to make MPD change its user ID after -# initialization. This setting is disabled by default and MPD is run as the -# current user. -# -#user "nobody" -# -# This setting specifies the group that MPD will run as. If not specified -# primary group of user specified with "user" setting will be used (if set). -# This is useful if MPD needs to be a member of group such as "audio" to -# have permission to use sound card. -# -#group "nogroup" -# -# This setting sets the address for the daemon to listen on. Careful attention -# should be paid if this is assigned to anything other than the default, any. -# This setting can deny access to control of the daemon. Not effective if -# systemd socket activation is in use. -# -# For network -#bind_to_address "any" -# -# And for Unix Socket -#bind_to_address "~/.mpd/socket" -# -# This setting is the TCP port that is desired for the daemon to get assigned -# to. -# -#port "6600" -# -# Suppress all messages below the given threshold. Use "verbose" for -# troubleshooting. Available setting arguments are "notice", "info", "verbose", -# "warning" and "error". -# -#log_level "notice" -# -# Setting "restore_paused" to "yes" puts MPD into pause mode instead -# of starting playback after startup. -# -#restore_paused "no" -# -# This setting enables MPD to create playlists in a format usable by other -# music players. -# -#save_absolute_paths_in_playlists "no" -# -# This setting defines a list of tag types that will be extracted during the -# audio file discovery process. The complete list of possible values can be -# found in the user manual. -#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" -# -# This example just enables the "comment" tag without disabling all -# the other supported tags: -#metadata_to_use "+comment" -# -# This setting enables automatic update of MPD's database when files in -# music_directory are changed. -# -#auto_update "yes" -# -# Limit the depth of the directories being watched, 0 means only watch -# the music directory itself. There is no limit by default. -# -#auto_update_depth "3" -# -############################################################################### - - -# Symbolic link behavior ###################################################### -# -# If this setting is set to "yes", MPD will discover audio files by following -# symbolic links outside of the configured music_directory. -# -#follow_outside_symlinks "yes" -# -# If this setting is set to "yes", MPD will discover audio files by following -# symbolic links inside of the configured music_directory. -# -#follow_inside_symlinks "yes" -# -############################################################################### - - -# Zeroconf / Avahi Service Discovery ########################################## -# -# If this setting is set to "yes", service information will be published with -# Zeroconf / Avahi. -# -#zeroconf_enabled "yes" -# -# The argument to this setting will be the Zeroconf / Avahi unique name for -# this MPD server on the network. %h will be replaced with the hostname. -# -#zeroconf_name "Music Player @ %h" -# -############################################################################### - - -# Permissions ################################################################# -# -# If this setting is set, MPD will require password authorization. The password -# setting can be specified multiple times for different password profiles. -# -#password "password@read,add,control,admin" -# -# This setting specifies the permissions a user has who has not yet logged in. -# -#default_permissions "read,add,control,admin" -# -############################################################################### - - -# Database ####################################################################### -# -# An example of a database section instead of the old 'db_file' setting. -# It enables mounting other storages into the music directory. -# -#database { -# plugin "simple" -# path "~/.local/share/mpd/db -# cache_directory "~/.local/share/mpd/cache" -#} -# -# An example of database config for a satellite setup -# -#music_directory "nfs://fileserver.local/srv/mp3" -#database { -# plugin "proxy" -# host "other.mpd.host" -# port "6600" -#} - -# Input ####################################################################### -# -input { - plugin "curl" -# proxy "proxy.isp.com:8080" -# proxy_user "user" -# proxy_password "password" -} - -# -############################################################################### - -# Audio Output ################################################################ -# -# MPD supports various audio output types, as well as playing through multiple -# audio outputs at the same time, through multiple audio_output settings -# blocks. Setting this block is optional, though the server will only attempt -# autodetection for one sound card. -# -# An example of an ALSA output: -# -#audio_output { -# type "alsa" -# name "My ALSA Device" -## device "hw:0,0" # optional -## mixer_type "hardware" # optional -## mixer_device "default" # optional -## mixer_control "PCM" # optional -## mixer_index "0" # optional -#} -# -# An example of an OSS output: -# -#audio_output { -# type "oss" -# name "My OSS Device" -## device "/dev/dsp" # optional -## mixer_type "hardware" # optional -## mixer_device "/dev/mixer" # optional -## mixer_control "PCM" # optional -#} -# -# An example of a shout output (for streaming to Icecast): -# -#audio_output { -# type "shout" -# encoder "vorbis" # optional -# name "My Shout Stream" -# host "localhost" -# port "8000" -# mount "/mpd.ogg" -# password "hackme" -# quality "5.0" -# bitrate "128" -# format "44100:16:1" -## protocol "icecast2" # optional -## user "source" # optional -## description "My Stream Description" # optional -## url "http://example.com" # optional -## genre "jazz" # optional -## public "no" # optional -## timeout "2" # optional -## mixer_type "software" # optional -#} -# -# An example of a recorder output: -# -#audio_output { -# type "recorder" -# name "My recorder" -# encoder "vorbis" # optional, vorbis or lame -# path "/var/lib/mpd/recorder/mpd.ogg" -## quality "5.0" # do not define if bitrate is defined -# bitrate "128" # do not define if quality is defined -# format "44100:16:1" -#} -# -# An example of a httpd output (built-in HTTP streaming server): -# -#audio_output { -# type "httpd" -# name "My HTTP Stream" -# encoder "vorbis" # optional, vorbis or lame -# port "8000" -# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 -## quality "5.0" # do not define if bitrate is defined -# bitrate "128" # do not define if quality is defined -# format "44100:16:1" -# max_clients "0" # optional 0=no limit -#} -# -# An example of a pulseaudio output (streaming to a remote pulseaudio server) -# -#audio_output { -# type "pulse" -# name "My Pulse Output" -## server "remote_server" # optional -## sink "remote_server_sink" # optional -## media_role "media_role" #optional -#} -# -# An example of a winmm output (Windows multimedia API). -# -#audio_output { -# type "winmm" -# name "My WinMM output" -## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional -# or -## device "0" # optional -## mixer_type "hardware" # optional -#} -# -# An example of a wasapi output (Windows multimedia API). -# -#audio_output { -# type "wasapi" -# name "My WASAPI output" -## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional -# or -## device "0" # optional -## Exclusive mode blocks all other audio source, and get best audio quality without resampling. -## exclusive "no" # optional -## Enumerate all devices in log. -## enumerate "no" # optional -#} -# -# An example of an openal output. -# -#audio_output { -# type "openal" -# name "My OpenAL output" -## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional -#} -# -# An example of an sndio output. -# -#audio_output { -# type "sndio" -# name "sndio output" -# mixer_type "hardware" -#} -# -# An example of an OS X output: -# -#audio_output { -# type "osx" -# name "My OS X Device" -## device "Built-in Output" # optional -## channel_map "-1,-1,0,1" # optional -#} -# -## Example "pipe" output: -# -#audio_output { -# type "pipe" -# name "my pipe" -# command "aplay -f cd 2>/dev/null" -## Or if you're want to use AudioCompress -# command "AudioCompress -m | aplay -f cd 2>/dev/null" -## Or to send raw PCM stream through PCM: -# command "nc example.org 8765" -# format "44100:16:2" -#} -# -## An example of a null output (for no audio output): -# -#audio_output { -# type "null" -# name "My Null Output" -# mixer_type "none" # optional -#} -# -############################################################################### - - -# Normalization automatic volume adjustments ################################## -# -# This setting specifies the type of ReplayGain to use. This setting can have -# the argument "off", "album", "track" or "auto". "auto" is a special mode that -# chooses between "track" and "album" depending on the current state of -# random playback. If random playback is enabled then "track" mode is used. -# See for -# more details about ReplayGain. -# This setting is off by default. -# -#replaygain "album" -# -# This setting sets the pre-amp used for files that have ReplayGain tags. By -# default this setting is disabled. -# -#replaygain_preamp "0" -# -# This setting sets the pre-amp used for files that do NOT have ReplayGain tags. -# By default this setting is disabled. -# -#replaygain_missing_preamp "0" -# -# This setting enables or disables ReplayGain limiting. -# MPD calculates actual amplification based on the ReplayGain tags -# and replaygain_preamp / replaygain_missing_preamp setting. -# If replaygain_limit is enabled MPD will never amplify audio signal -# above its original level. If replaygain_limit is disabled such amplification -# might occur. By default this setting is enabled. -# -#replaygain_limit "yes" -# -# This setting enables on-the-fly normalization volume adjustment. This will -# result in the volume of all playing audio to be adjusted so the output has -# equal "loudness". This setting is disabled by default. -# -#volume_normalization "no" -# -############################################################################### - -# Character Encoding ########################################################## -# -# If file or directory names do not display correctly for your locale then you -# may need to modify this setting. -# -#filesystem_charset "UTF-8" -# -############################################################################### diff --git a/modules/home/soispha/conf/mpv/default.nix b/modules/home/soispha/conf/mpv/default.nix deleted file mode 100644 index 6b252a38..00000000 --- a/modules/home/soispha/conf/mpv/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{...}: { - programs.mpv = { - enable = true; - bindings = { - q = "quit 0"; - "Ctrl+c" = "quit 1"; - "Shift+q" = "quit-watch-later 1"; - }; - }; -} diff --git a/modules/home/soispha/conf/mumble/Mumble.conf b/modules/home/soispha/conf/mumble/Mumble.conf deleted file mode 100644 index 2d895f41..00000000 --- a/modules/home/soispha/conf/mumble/Mumble.conf +++ /dev/null @@ -1,67 +0,0 @@ -[General] -databaselocation=/home/soispha/.local/share/Mumble/Mumble/mumble.sqlite -lastupdate=3 - -[audio] -headphone=true -input=PipeWire -loudness=1549 -output=PipeWire -quality=72000 -vadmax=@Variant(\0\0\0\x87?Kw\x97) -vadmin=@Variant(\0\0\0\x87?7\x1e\xd4) - -[messages] -10\log=13 -12\log=13 -14\log=13 -15\log=13 -17\log=13 -18\log=13 -19\log=13 -2\log=13 -20\log=13 -21\log=13 -22\log=13 -23\log=13 -25\log=13 -26\log=13 -27\log=13 -28\log=13 -29\log=13 -30\log=13 -31\log=13 -5\log=13 -6\log=13 -9\log=13 -size=32 - -[messagesounds] -size=31 - -[net] -certificate="@ByteArray(0\x82\tX\x2\x1\x3\x30\x82\t\xe\x6\t*\x86H\x86\xf7\r\x1\a\x1\xa0\x82\b\xff\x4\x82\b\xfb\x30\x82\b\xf7\x30\x82\x3\xad\x6\t*\x86H\x86\xf7\r\x1\a\x1\xa0\x82\x3\x9e\x4\x82\x3\x9a\x30\x82\x3\x96\x30\x82\x3\x92\x6\v*\x86H\x86\xf7\r\x1\f\n\x1\x3\xa0\x82\x3+0\x82\x3'\x6\n*\x86H\x86\xf7\r\x1\t\x16\x1\xa0\x82\x3\x17\x4\x82\x3\x13\x30\x82\x3\xf\x30\x82\x1\xf7\xa0\x3\x2\x1\x2\x2\x1\x1\x30\r\x6\t*\x86H\x86\xf7\r\x1\x1\x5\x5\0\x30\x16\x31\x14\x30\x12\x6\x3U\x4\x3\f\vMumble User0\x1e\x17\r230710132716Z\x17\r430705132716Z0\x16\x31\x14\x30\x12\x6\x3U\x4\x3\f\vMumble User0\x82\x1\"0\r\x6\t*\x86H\x86\xf7\r\x1\x1\x1\x5\0\x3\x82\x1\xf\0\x30\x82\x1\n\x2\x82\x1\x1\0\xb3\x8c\xd2\xdbM\x90\xa6\xc7}\xf4\x6X\xf9O\x16Q\x12\xc7\x1\xca\x88\x9c\x96o\xd1\x11\xc1\xc3\xd1/\xb6\x9d\xcfn\xcd\x84\xd2\x1d\xcc\xfcO\xf9\xa4\"\xaa'2\x6\xee[\x3\xd3vx\x84`i@P|\xb8\xc5I\xa8\xa2\b\xc8\0\xbd\xf1\xcc\x63\xbe\x99Zj&\xa5t\xc5\bOr\xc1\xaen\xc7\n\xd2\xcc\xa1\x30\xb8\xe0\0\xe8\xc5\xb6\x86g\x14\x30S\x9d\x8b\xfb\xacP\x7f+\x93}3\xe3\xcbPJ\x86\xf7^Z\xda\x87Z\xfez\xec\xc0\xf7\xe9\x80\xbc\xe2\re@\xe7\x92\x84\xe5\x97\f\x8c\n\x3\x1c\xd1\xbb\x32\xce\xfe\xb6\x1d\xefUYz\xf\xd7,5\x4G\x1f\t\xf7\x43\f?wx\x1a\x12\xd4.I\xbd\xe4G\xea\x33\x9d\xb1\xb0\x62\x45\xcd\xe0\x8b\xe4\x31\x1a\x8c\xedLEyC\xf0\x9f\x32}c\xc9X\x19[\xf7\xfb\xfc\x39\xe0\xd5\x30\x87\xd0\x82:\xb5\x87j]\x9d\xf8\x1b\x4\xb2P \x5/\xb2H\xfa\x42I\x1dN\xa9\xb7\x9a\x91*\x83\xe\x45\xcf\xbe\t\xb5\x36)\xf7\x7f\x1\x43\x2\x3\x1\0\x1\xa3h0f0\f\x6\x3U\x1d\x13\x1\x1\xff\x4\x2\x30\0\x30\x13\x6\x3U\x1d%\x4\f0\n\x6\b+\x6\x1\x5\x5\a\x3\x2\x30\x1d\x6\x3U\x1d\xe\x4\x16\x4\x14\xb9\x41\x19t\x16\x18~\xe8\v\xa9\x9b\x86i\x86\xeP%\xd7\n\xc9\x30\"\x6\t`\x86H\x1\x86\xf8\x42\x1\r\x4\x15\x16\x13Generated by Mumble0\r\x6\t*\x86H\x86\xf7\r\x1\x1\x5\x5\0\x3\x82\x1\x1\0\x91+\r'hS\xc2\x12k\x13O\xb2\"\x85\xd6w\x96\x8a\x97\x46\xee\x95Q\x8b\x8b\t\x8a\xfcH\xab\x30\x1dxV\xc9\xf5\x80\x42;'o\xf1\xd1\xf2\xfb\x18\xe2+\x8d\x39 \xc3\xe\x44\xa9\t\xe2i\x8a\xa7?#\xcd]0\xf4\x1d\x4\a\xd6\x87\x62\xe2\xd8\x34\xb6\xcf\x89\xf2\v\xf1\x8b\xc6\xf8\x8f\x94H/\xfa`\x9d\xb5\xac\x66H\xef\xf4\tJ\xfeHg]!\xed\n\xaf\xa8nd@y\xe8>A\x10\xc4>\xc3\xf7\xe3\xffW\x90T\x87\x94[\x7fg0+p\xdd\x3\x8d\xdb\x80\f?\xe9\xf9l5\xac)z+4R\xbc\xf3\xe1\x82\xde\xc3u\xb2\xa1s\xe2\xbb\xdcpL#|\f\x7f\x93\x30-\x6\t*\x86H\x86\xf7\r\x1\t\x14\x31 \x1e\x1e\0M\0u\0m\0\x62\0l\0\x65\0 \0I\0\x64\0\x65\0n\0t\0i\0t\0y0\x82\x5\x42\x6\t*\x86H\x86\xf7\r\x1\a\x1\xa0\x82\x5\x33\x4\x82\x5/0\x82\x5+0\x82\x5'\x6\v*\x86H\x86\xf7\r\x1\f\n\x1\x1\xa0\x82\x4\xc0\x30\x82\x4\xbc\x2\x1\0\x30\r\x6\t*\x86H\x86\xf7\r\x1\x1\x1\x5\0\x4\x82\x4\xa6\x30\x82\x4\xa2\x2\x1\0\x2\x82\x1\x1\0\xb3\x8c\xd2\xdbM\x90\xa6\xc7}\xf4\x6X\xf9O\x16Q\x12\xc7\x1\xca\x88\x9c\x96o\xd1\x11\xc1\xc3\xd1/\xb6\x9d\xcfn\xcd\x84\xd2\x1d\xcc\xfcO\xf9\xa4\"\xaa'2\x6\xee[\x3\xd3vx\x84`i@P|\xb8\xc5I\xa8\xa2\b\xc8\0\xbd\xf1\xcc\x63\xbe\x99Zj&\xa5t\xc5\bOr\xc1\xaen\xc7\n\xd2\xcc\xa1\x30\xb8\xe0\0\xe8\xc5\xb6\x86g\x14\x30S\x9d\x8b\xfb\xacP\x7f+\x93}3\xe3\xcbPJ\x86\xf7^Z\xda\x87Z\xfez\xec\xc0\xf7\xe9\x80\xbc\xe2\re@\xe7\x92\x84\xe5\x97\f\x8c\n\x3\x1c\xd1\xbb\x32\xce\xfe\xb6\x1d\xefUYz\xf\xd7,5\x4G\x1f\t\xf7\x43\f?wx\x1a\x12\xd4.I\xbd\xe4G\xea\x33\x9d\xb1\xb0\x62\x45\xcd\xe0\x8b\xe4\x31\x1a\x8c\xedLEyC\xf0\x9f\x32}c\xc9X\x19[\xf7\xfb\xfc\x39\xe0\xd5\x30\x87\xd0\x82:\xb5\x87j]\x9d\xf8\x1b\x4\xb2P \x5/\xb2H\xfa\x42I\x1dN\xa9\xb7\x9a\x91*\x83\xe\x45\xcf\xbe\t\xb5\x36)\xf7\x7f\x1\x43\x2\x3\x1\0\x1\x2\x82\x1\0\x4\xd6\xf2\x66\v\xe0\xae\xc6(\xccw\x91Ub\xfe\xd8\x7f\x97\x92\xa2Imc\x16\xaf}y\x8a\x14,\xe3\x90\xbc\x63!\xb2\aQ\xdbQ\x1f\xbc\xbc\x62\\\xd0\xc2\xa5\xf2-\xcc\xdc\x19\xd0\xe4\xcc\x8ey\xb7\xd1\xac\xcfP\x8du\x94\xa4\x3u\x1b;\xe5\xa2\x61\x12\xd1R\xaaZ\v\xe7\x8d\xf0\xabl\xce\xba\x99\xbd\x95\xdbpkCJr\xfb\xc5P9\x1e\xf\xb1iI9&\xeb\x62\x8a#\xa7\x17\xcbw\x92\xf9\xf7JZ\xa6;F\xb3\xba\xb1H\x89]uU7\x1e\xd7\xf6U`\x8d\xa1\x1aG7\x11\x31\xbf\xf4\xdb\x32\x63\xbf\x3\xad&h\x82\x9b\xe7\x19/\xf6\r\x8c\x89\xc6\xd0\x1d\0\x87\t|\xc0\xf2\x8f\xbb\x87_8{\xf2\xc7\x8a\x34)\xe3\xf1\xcc(\xf4\xee\xeb($\x5\x84\xaf\x1\xaa\xf7\xff\x9b\x15h\x2y\xb3\x91\xba,Oq\xc9$\x81\x11Zg\xc4I3\v\xeay\f\xf0\x33\xc6p\xea\xc6\x9d\xac\xaa\xedp\xa7!\xcbHf5\xa0i\xbdo@\xb8![\x7f\xea\xad\x6\x31p\x81\x61\x2\x81\x81\0\xdc\x8d}{\xc3\x31\xb6(F\xc5\x36\x9b\xba\x66\xb1\xce\r_\x90\xc6\x1f\x87\x37\x84m\xd1\a8\xc0\v9\xe0\x8bm\xaf\x64\xbe\x81\xa8\xe7\xaf\x19\x43,vj\xaf!9rz\x87\"\xca\xbf\xcf\x16\x88\x46t\xbd\x12\xaa;\xf4x_\x1b\xb3\x90\b\xb6\xf6\xec\x1f\x95\x62\xac\xfa\x1b\xae\xa2\xa7oA\x9bhOW\xa8\x44\\\xadz T\xe3\x43\x46\x99\x98\xb4{*\"\xdb\xd9\xc8\xd2\x15\n4\"\x8d\x96$\x17\xfd^\xf7\x84\x93\x7fw{o\0\xe1\x2\x81\x81\0\xd0hNA\xc3\x9e\x93&iq\x1dQ\xb6\xc6\x1c\x32\xf3\xfc c&Y\xe7|\xbeq2P\xe1\xdb\x97\xf8\x9fI(\x98\x9d\xf1\xfe\xb6\xf\x90\xa5\xebi>\x14\x6\xd8.\xf4\xce\x86\x9d*\x87 \xf9X\x4\xdcZ\xf9g\x3\x98H{\xdf\x66\xde\xd6zr\xecG_\x14t\x1dm%P\xe5\xea\x8e\x6\xa2. \xa1\xd7\xd7W]\xdd\x15\x6\xcf+/\x11\vel\xd3\xe8\xc3/\xbc\x1f\xc3n\xd4\xb8\x62j\xf5\xc0\xc0\x89\xe3z\xb8\x36\xd5\xb2\xa3\x2\x81\x80z`W\xdc\x30\x36\x89(W\xfc]\x8c\x93% K\x80\xc8\"\0\x8c\xc5\xee\\ \xc2\xf7\n\xda$`|\xe3`}\r\x9dWV\xa8\0\xc9\xcd\xd2\xc4\f\xe4\x8d%k+\x16\xbc.\n\xf7\x44\x9d\xd6\xfc\x1a\x88\x8a\xdd\x11J\xd9\xc4%\xe6g\xd8\xbc.\xe2\x11/J\x81\x2\x81\x80\x63;W\xf\xbf:1,\x98\x6\x31\x4\xa8wz\x13\xd4\xd2\x97\x5>\xcc\x8e\tz\x90\x61y\xdb\xa0\xf8\xa2|\r\x94\x93\xde\x98\xcc\x44\x19\xf3\x30\xdd\x7fu\xfc\x89)\xc4i\xf2\x30l\x83\x44\x66\x31\xf3t\x15\f\b6\xc1\xa2o\xd8\xf3\x8d\x82\xcb\x32\xf0\xa7\x8ap>G\xef~\xf9\xc6\xa4\x42\xe3\xafJ\xe7\x95\xc8\x1a\x2\xc1\xe9\xc2\x8b\xf1{\x11?\xce\xe8\xd3\x39WI<.\xedo^Y\xd6U\x99\x1e\xfe\xb6\xf1\xb6v'\a\xb1\xac\\\xeb\x2\x81\x80@\x19\xc4\x32&\xcb\xc1\xca\x10K\xdf\x45\xf9\xf\x1d\x85\x39\x65\xdc\x33\x45\xbe\xac\x97~;\xe2m-\xd6\x9b\x82\x1\xbd\x90'W\xf5\xf5\xce\x35\xd7\xb4\xcdidTiP\\-vG+`\xb5u\xb7\x14\x44\xe1\xd9\xd3\r\x81\xb0GL\xe1U\xe3\xf0\xaa\xd1\x8f\xc6\"\xa5S\xb6\xbf\x4\x1a\xc4\xe0|\x8d\xa2+y(-\xad\ty\xd5\xe2g\xd3\x8c\xcdl\x96g3\xfe\x80\xb7|b[\xca\xb2\xbf\x61\xf7\x9c\x65\x30\x61\xa0\x35\xf6W\xb4\xcc\xdd\x34\x31T0#\x6\t*\x86H\x86\xf7\r\x1\t\x15\x31\x16\x4\x14\x9f\xdc\xf9\x38\xc2\x8a\x1c\xfe\x6}\xf6\x64\x62>L#|\f\x7f\x93\x30-\x6\t*\x86H\x86\xf7\r\x1\t\x14\x31 \x1e\x1e\0M\0u\0m\0\x62\0l\0\x65\0 \0I\0\x64\0\x65\0n\0t\0i\0t\0y0A010\r\x6\t`\x86H\x1\x65\x3\x4\x2\x1\x5\0\x4 Fm\xb6/lL\x18\x1b!\xfa+x\xb5\xd9?GrR\xb7\xd3\x90\xc1N)L\x9c\xc7')\xe^\xbe\x4\b\x8b\x2\xb2\xb2\x97\b\x8a\xf6\x2\x2\b\0)" -framesperpacket=1 - -[overlay] -blacklist=@Invalid() -blacklistexclude=@Invalid() -launchers=@Invalid() -launchersexclude=@Invalid() -paths=@Invalid() -pathsexclude=@Invalid() -version=1.4.0 -whitelist=@Invalid() -whitelistexclude=@Invalid() - -[shortcuts] -size=0 - -[ui] -HighContrast=true -connect\geometry="@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\f=\0\0\x1m\0\0\n\0\0\0\0\0\0\0\f=\0\0\x1m\0\0\0\x1\x2\0\0\0\a\x80\0\0\n\0\0\0\0\0\0\0\f=\0\0\x1m)" -connect\header=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x2&\0\0\0\x3\x1\x1\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x3\0\0\x1w\0\0\0\x1\0\0\0\x1\0\0\0S\0\0\0\x1\0\0\0\x3\0\0\0\\\0\0\0\x1\0\0\0\x3\0\0\x3\xe8\0\0\0\0\x64) -geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\r\xb9\0\0\x3\xfa\0\0\n\0\0\0\0\0\0\0\f\xde\0\0\x1\xb2\0\0\0\x1\x2\0\0\0\a\x80\0\0\n\0\0\0\0\0\0\0\r\xb9\0\0\x3\xfa) -header=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x2\xb0\0\0\0\x1\x1\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x1\0\0\x2\xb0\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\x64) -server=mumble.vhack.eu -state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\0\0\0\x1\0\0\0\x3\xbd\xfc\x2\0\0\0\x2\xfb\0\0\0\f\0q\0\x64\0w\0L\0o\0g\x1\0\0\0>\0\0\x3\xa0\0\0\0z\0\xff\xff\xff\xfb\0\0\0\xe\0q\0\x64\0w\0\x43\0h\0\x61\0t\x1\0\0\x3\xe2\0\0\0\x19\0\0\0\x19\0\0\0\x19\0\0\x2\xb6\0\0\x3\xbd\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x1a\0q\0t\0I\0\x63\0o\0n\0T\0o\0o\0l\0\x62\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) diff --git a/modules/home/soispha/conf/mumble/default.nix b/modules/home/soispha/conf/mumble/default.nix deleted file mode 100644 index 6fa524dc..00000000 --- a/modules/home/soispha/conf/mumble/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - xdg.configFile."Mumble/Mumble.conf".source = ./Mumble.conf; -} diff --git a/modules/home/soispha/conf/neomutt/default.nix b/modules/home/soispha/conf/neomutt/default.nix deleted file mode 100644 index e4fbcb39..00000000 --- a/modules/home/soispha/conf/neomutt/default.nix +++ /dev/null @@ -1,168 +0,0 @@ -{pkgs, ...}: { - programs.neomutt = { - enable = true; - package = pkgs.writeShellScriptBin "neomutt" '' - systemctl --user start mbsync.service; - ${pkgs.neomutt}/bin/neomutt; - ''; - vimKeys = false; # see the modified ones below - checkStatsInterval = 60; - binds = [ - #------------------------------------------------------------ - # Vi Key Bindings (taken from their configuration, modified for dvorak) - #------------------------------------------------------------ - - # Moving around - { - action = "noop"; - key = "g"; - map = ["attach" "browser" "index"]; - } - { - action = "first-entry"; - key = "gg"; - map = ["attach" "browser" "index"]; - } - { - action = "last-entry"; - key = "G"; - map = ["attach" "browser" "index"]; - } - { - action = "noop"; - key = "g"; - map = ["pager"]; - } - { - action = "top"; - key = "gg"; - map = ["pager"]; - } - { - action = "bottom"; - key = "G"; - map = ["pager"]; - } - { - action = "previous-line"; - key = "n"; - map = ["pager"]; - } - { - action = "next-line"; - key = "t"; - map = ["pager"]; - } - - # Scrolling - { - action = "next-page"; - key = "\\CF"; - map = ["attach" "browser" "pager" "index"]; - } - { - action = "previous-page"; - key = "\\CB"; - map = ["attach" "browser" "pager" "index"]; - } - { - action = "half-up"; - key = "\\Cu"; - map = ["attach" "browser" "pager" "index"]; - } - { - action = "half-down"; - key = "\\Cd"; - map = ["attach" "browser" "pager" "index"]; - } - { - action = "next-line"; - key = "\\Ce"; - map = ["browser" "pager"]; - } - { - action = "previous-line"; - key = "\\Cy"; - map = ["browser" "pager"]; - } - { - action = "next-line"; - key = "\\Ce"; - map = ["index"]; - } - { - action = "previous-line"; - key = "\\Cy"; - map = ["index"]; - } - - { - action = "noop"; - key = "d"; - map = ["pager" "index"]; - } - { - action = "delete-message"; - key = "dd"; - map = ["pager" "index"]; - } - - # Mail & Reply - { - # Doesn't work currently - action = "list-reply"; - key = "\\Cm"; - map = ["index"]; - } - - # Threads - { - action = "search-opposite"; - key = "N"; - map = ["browser" "pager" "index"]; - } - { - action = "delete-thread"; - key = "dT"; - map = ["pager" "index"]; - } - { - action = "delete-subthread"; - key = "dt"; - map = ["pager" "index"]; - } - { - action = "next-thread"; - key = "gt"; - map = ["pager" "index"]; - } - { - action = "previous-thread"; - key = "gT"; - map = ["pager" "index"]; - } - { - action = "collapse-thread"; - key = "za"; - map = ["index"]; - } - { - # Missing: folddisable/foldenable - action = "collapse-all"; - key = "zA"; - map = ["index"]; - } - - { - action = "search-next"; - key = "l"; - map = ["index"]; - } - { - action = "limit"; - key = "f"; - map = ["index"]; - } - ]; - }; -} diff --git a/modules/home/soispha/conf/nheko/default.nix b/modules/home/soispha/conf/nheko/default.nix deleted file mode 100644 index fd147c0b..00000000 --- a/modules/home/soispha/conf/nheko/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ - config, - nixosConfig, - lib, - ... -}: { - config = lib.mkIf nixosConfig.soispha.secrets.enable { - xdg.configFile."nheko/nheko.conf".source = config.lib.file.mkOutOfStoreSymlink nixosConfig.age.secrets.nheko.path; - programs.nheko = { - enable = true; - }; - }; -} diff --git a/modules/home/soispha/conf/nix-index/default.nix b/modules/home/soispha/conf/nix-index/default.nix deleted file mode 100644 index eb8132d9..00000000 --- a/modules/home/soispha/conf/nix-index/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{...}: { - programs.nix-index = { - enable = true; - symlinkToCacheHome = true; - - # Handled by myself (and the script is overridden) - enableBashIntegration = false; - enableZshIntegration = false; - enableFishIntegration = false; - }; - programs.nix-index-database = { - comma.enable = false; - }; -} diff --git a/modules/home/soispha/conf/npm/.npmrc b/modules/home/soispha/conf/npm/.npmrc deleted file mode 100644 index d0d846bd..00000000 --- a/modules/home/soispha/conf/npm/.npmrc +++ /dev/null @@ -1,6 +0,0 @@ -scripts-prepend-node-path=true -node_gyp= -prefix=${XDG_DATA_HOME}/npm -cache=${XDG_CACHE_HOME}/npm -tmp=${XDG_RUNTIME_DIR}/npm -init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js diff --git a/modules/home/soispha/conf/npm/default.nix b/modules/home/soispha/conf/npm/default.nix deleted file mode 100644 index 7b4bb6a1..00000000 --- a/modules/home/soispha/conf/npm/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - config, - pkgs, - ... -}: { - xdg.configFile."npm/.npmrc".source = ./.npmrc; -} diff --git a/modules/home/soispha/conf/nvim/autocmds/default.nix b/modules/home/soispha/conf/nvim/autocmds/default.nix deleted file mode 100644 index a8f00bdc..00000000 --- a/modules/home/soispha/conf/nvim/autocmds/default.nix +++ /dev/null @@ -1,124 +0,0 @@ -{config, ...}: { - programs.nixvim = { - autoGroups = { - cursor_off = {clear = true;}; - colorcolumn_toggle = {clear = true;}; - numbertoggle = {clear = true;}; - coloroverride = {clear = true;}; - highlight_on_yank = {clear = true;}; - create_dir = {clear = true;}; - }; - autoCmd = [ - { - # Taken from: https://github.com/jghauser/mkdir.nvim - event = ["BufWritePre"]; - pattern = ["*"]; - callback = { - __raw = '' - function() - -- Get current filename, get full path (:p) and leave only the head (:h) - local dir = vim.fn.expand(':p:h') - - -- This handles URLs using netrw. See ':help netrw-transparent' for details. - if dir:find('%l+://') == 1 then - return - end - - if vim.fn.isdirectory(dir) == 0 then - vim.fn.mkdir(dir, 'p') - end - end - ''; - }; - group = "create_dir"; - desc = "Create the directory of the target file on write"; - } - { - event = ["TextYankPost"]; - pattern = ["*"]; - callback = { - __raw = '' - function() - vim.highlight.on_yank() - end - ''; - }; - group = "highlight_on_yank"; - desc = "Highlight the yanked text"; - } - { - event = ["BufWritePre"]; - pattern = ["*"]; - command = '' - ks | if search("\\s\\+$", 'n') != 0 | :%s/\s\+$// | endif | 's - ''; - desc = '' - Remove trailing whitespace on safe - :%s/\s\+$\| \+\ze\t//g >> For trailing spaces and spaces before tabstops - ''; - } - - { - event = ["WinLeave"]; - pattern = ["*"]; - command = "set nocursorline"; # TODO: possible also nocursorcolumn - group = "cursor_off"; - desc = "Display cursorline and cursorcolumn ONLY in active window."; - } - { - event = ["WinEnter"]; - pattern = ["*"]; - command = "set cursorline"; # TODO: possible also cursorcolumn - group = "cursor_off"; - desc = "Display cursorline and cursorcolumn ONLY in active window."; - } - - { - event = ["InsertEnter"]; - pattern = ["*"]; - command = "set colorcolumn=${config.programs.nixvim.opts.colorcolumn}"; - group = "colorcolumn_toggle"; - desc = "Only activate the colorcolumn when focused"; - } - { - event = ["BufLeave" "FocusLost" "InsertLeave" "WinLeave"]; - pattern = ["*"]; - command = "set colorcolumn=0"; - group = "colorcolumn_toggle"; - desc = "Only activate the colorcolumn when focused"; - } - - { - event = ["BufEnter" "FocusGained" "InsertLeave" "WinEnter"]; - pattern = ["*"]; - command = "if &nu && mode() != \"i\" | set rnu | endif"; - group = "numbertoggle"; - desc = "Change line numbers, when not focused"; - } - { - event = ["BufLeave" "FocusLost" "InsertEnter" "WinLeave"]; - pattern = ["*"]; - command = "if &nu | set nornu | endif"; - group = "numbertoggle"; - desc = "Change line numbers, when not focused"; - } - - { - # Override LineNr - event = ["ColorScheme"]; - pattern = ["*"]; - command = "highlight LineNr ctermfg=DarkGrey guifg=DarkGrey "; - group = "coloroverride"; - desc = "Changes Line number colors"; - } - { - # Override CursorLineNr - event = ["ColorScheme"]; - pattern = ["*"]; - command = "highlight CursorLineNr ctermfg=White guifg=White "; - group = "coloroverride"; - desc = "Changes Line number colors"; - } - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/clipboard/default.nix b/modules/home/soispha/conf/nvim/clipboard/default.nix deleted file mode 100644 index 0a686190..00000000 --- a/modules/home/soispha/conf/nvim/clipboard/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{...}: { - programs.nixvim = { - clipboard.providers = { - wl-copy.enable = true; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/default.nix b/modules/home/soispha/conf/nvim/default.nix deleted file mode 100644 index 2da80c22..00000000 --- a/modules/home/soispha/conf/nvim/default.nix +++ /dev/null @@ -1,55 +0,0 @@ -{pkgs, ...}: { - imports = [ - ./autocmds - ./clipboard - ./files - ./mappings - ./options - ./plgs - ]; - home.sessionVariables = { - EDITOR = "nvim"; - VISUAL = "nvim"; - CODEEDITOR = "nvim"; - }; - programs.nixvim = { - enable = true; - - # source: https://www.patorjk.com/software/taag/#p=display&f=ANSI%20Shadow&t=Neovim - extraConfigLuaPre = - /* - FIXME: Update the merge function to support that: <2023-08-29> - - lib.mkBefore - */ - '' - --------------------------------------------------------------------------- - -- - -- ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ - -- ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ - -- ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ - -- ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ - -- ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ - -- ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ - -- - --------------------------------------------------------------------------- - ''; - - extraPackages = with pkgs; [ - /* - These are mostly linters and formatters used for different file types. - Including them here is fine, as they are not necessarily sync able to different people. - */ - # nix - alejandra - statix - - # yaml - yamllint - - # shell - shellcheck - shfmt - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/files/default.nix b/modules/home/soispha/conf/nvim/files/default.nix deleted file mode 100644 index 68c267b9..00000000 --- a/modules/home/soispha/conf/nvim/files/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{lib, ...}: { - programs.nixvim = { - extraFiles = { - "ftplugin/tex.lua" = '' - ${lib.strings.fileContents ./ftplugin/tex.lua} - ''; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/files/ftplugin/tex.lua b/modules/home/soispha/conf/nvim/files/ftplugin/tex.lua deleted file mode 100644 index f3fffa86..00000000 --- a/modules/home/soispha/conf/nvim/files/ftplugin/tex.lua +++ /dev/null @@ -1,57 +0,0 @@ --- local used = false; --- vim.keymap.set('n', 't', function() --- used = not used; --- if used then --- require('nvim-treesitter.configs').setup { --- highlight = { --- additional_vim_regex_highlighting = { "latex", "markdown" }, --- }, --- } --- else --- require('nvim-treesitter.configs').setup { --- highlight = { --- additional_vim_regex_highlighting = { "" }, --- }, --- } --- end --- end --- ); --- --- - --- Set tex specific telescope extension -require("telescope").setup({ - extensions = { - bibtex = { - -- Depth for the *.bib file - depth = 1, - -- Path to global bibliographies (placed outside of the project) - global_files = {}, - -- Define the search keys to use in the picker - search_keys = { "author", "year", "title" }, - -- Template for the formatted citation - citation_format = "{{author}} ({{year}}), {{title}}.", - -- Only use initials for the authors first name - citation_trim_firstname = true, - -- Max number of authors to write in the formatted citation - -- following authors will be replaced by "et al." - citation_max_auth = 2, - -- Wrapping in the preview window is disabled by default - wrap = false, - -- Custom format for citation label - custom_formats = { - { id = "tex_autocite", cite_marker = "\\autocite{%s}" }, - }, - format = "tex_autocite", - -- Use context awareness - context = true, - -- Fallback to global/directory .bib files if context not found - -- This setting has no effect if context = false - context_fallback = true, - }, - }, -}) -require("telescope").load_extension("bibtex") -vim.keymap.set("n", "ib", function() - require("telescope").extensions.bibtex.bibtex() -end, { noremap = true, silent = true, desc = "list bibtex entries in telescope" }) diff --git a/modules/home/soispha/conf/nvim/mappings/default.nix b/modules/home/soispha/conf/nvim/mappings/default.nix deleted file mode 100644 index 2cb174a4..00000000 --- a/modules/home/soispha/conf/nvim/mappings/default.nix +++ /dev/null @@ -1,286 +0,0 @@ -{lib, ...}: { - programs.nixvim = { - globals = { - mapleader = " "; - maplocalleader = " "; - }; - keymaps = [ - { - mode = ["n" "i"]; - key = ""; - action = "noh"; - options.desc = "Disable the search highlighting and send Escape"; - } - { - key = "hh"; - mode = ["i"]; - action = '' - function() - local cmp = require('cmp'); - local luasnip = require('luasnip'); - - if cmp.visible() then - cmp.select_next_item() - elseif luasnip.expand_or_locally_jumpable() then - luasnip.expand_or_jump() - end - end - ''; - lua = true; - options.desc = "completion trigger/ forward in completen menu"; - } - { - key = "uu"; - mode = ["i"]; - action = '' - function() - local cmp = require('cmp'); - cmp.confirm() - end - ''; - lua = true; - options.desc = "confirm the selected item"; - } - - # FIXME: Add the below keymappings, when alacritty gets support for the kitty - # keyboard protocol <2023-08-29> - { - # "" - key = "ztn"; - action = "tabnext"; - options.desc = "cycle to the next tab"; - } - { - # "" - key = "ztp"; - action = "tabprevious"; - options.desc = "cycle to the previous tab"; - } - - # yank/ cut to the system clipboard - { - key = "y"; - action = "\"+y"; - options.desc = "yank to the system clipboard"; - } - { - key = "Y"; - action = "\"+Y"; - options.desc = "yank until the end of the line to the system clipboard"; - } - - # Unmap some old keys - #{key = "s"; action = "''";} - #{key = "t"; action = "''";} - { - key = ""; - action = ""; - } - { - key = ""; - action = ""; - } - { - key = ""; - action = ""; - } - { - key = ""; - action = ""; - } - - # Center the cursor vertically when moving to the next word during a search. - { - key = "l"; - action = "nzzzv"; - options.desc = "Center the cursor vertically when moving to the next word during a search."; - } - { - key = "L"; - action = "Nzzzv"; - options.desc = "Center the cursor vertically when moving to the next word during a search."; - } - # remap the other keys to dvorak - { - key = "k"; - action = "t"; - options.desc = "go the the right on char"; - } - { - key = "K"; - action = "T"; - options.desc = "go to the left on char"; - } - { - key = "j"; - action = "k"; - options.desc = "go to the right before the char"; - } - { - key = "J"; - action = "K"; - options.desc = "go to the left before the char"; - } - - # Change Vim-keys - { - key = "h"; - action = ""; - options.desc = "go left"; - } - { - key = "t"; - action = "g"; - options.desc = "go down, with displaylines"; - } - { - key = "n"; - action = "g"; - options.desc = "go up, with displaylines"; - } - { - key = "s"; - action = ""; - options.desc = "go right"; - } - - # Move display lines - { - key = "0"; - action = "g0"; - options.desc = "go to the leftmost character in the screen line"; - } - { - key = "$"; - action = "g$"; - options.desc = "go to the rightmost character in the screen line"; - } - { - mode = ["n"]; - key = ""; - action = "gf"; - options.desc = "open file/url under cursor"; - } - { - mode = ["n"]; - key = ""; - action = ":"; - options.desc = "jump to command line"; - } - - { - mode = ["n"]; - key = "\\f"; - action = "function() require('lf').start() end"; - lua = true; - options.desc = "open lf in a floating window"; - } - - # Splits - { - mode = ["n"]; - key = ""; - action = "p"; - options.desc = "go to previous split"; - } - { - mode = ["n"]; - key = ""; - action = "w"; - options.desc = "go to next split"; - } - { - mode = ["n"]; - key = "-"; - action = "s"; - options.desc = "New horizontal split"; - } - { - mode = ["n"]; - key = "|"; - action = "v"; - options.desc = "New vertical split"; - } - - { - mode = ["n"]; - key = "p"; - action = "\"_dP"; - options.desc = "keep the cut thing in the base register"; - } - { - mode = ["n"]; - key = "c"; - action = "\"_c"; - options.desc = "change without saving to register"; - } - - { - mode = ["n"]; - key = "d"; - action = "\"_d"; - options.desc = "delete without saving to register"; - } - { - key = "dd"; - mode = ["n"]; - action = '' - function() - if vim.api.nvim_get_current_line():match("^%s*$") then - return '"_dd' - else - return "dd" - end - end - ''; - lua = true; - options = { - desc = "Pipe all blank line deletions to the blackhole register"; - expr = true; - silent = true; - }; - } - - { - mode = ["n"]; - key = "s"; - action = ":%s/\\<\\>//gI"; - options.desc = "replace for the word under the cursor"; - } - - { - mode = ["n"]; - key = ""; - action = "mksession! "; - options.desc = "overwrite/create a session"; - } - - { - mode = ["n"]; - key = "X"; - action = "!!$SHELL "; - options.desc = "Read the current line and execute that line in your $SHELL. The resulting output will replace the curent line that was being executed."; - } - { - mode = ["t"]; - key = ""; - action = ""; - options.desc = "Exit terminal mode with "; - } - - # move selected lines in visual mode - { - mode = ["v"]; - key = "T"; - action = ":m '>+1gv=gv"; - options.desc = "move selected lines in visual mode down"; - } - { - mode = ["v"]; - key = "N"; - action = ":m '<-2gv=gv"; - options.desc = "move selected lines in visual mode up"; - } - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/options/default.nix b/modules/home/soispha/conf/nvim/options/default.nix deleted file mode 100644 index d22bdd8f..00000000 --- a/modules/home/soispha/conf/nvim/options/default.nix +++ /dev/null @@ -1,105 +0,0 @@ -{nixosConfig, ...}: { - programs.nixvim.opts = { - autoindent = true; # copy indent from previous line - cindent = true; # use c like indenting rules - breakindent = true; # continue indent visually - showbreak = "↳ "; # downwards arrow with tip rightwards(U+21B3, UTF-8: E2 86 B3) - breakindentopt = { - shift = 2; # wrapped line's beginning will be shifted by the given number of - }; - - incsearch = true; # show search results while typing - inccommand = "split"; # line preview of :s results - ignorecase = true; # ignore case when searching - smartcase = true; # if a capital letter is used in search, overwrite ignorecase - showmatch = true; # show matching words during a search. - hlsearch = true; # highlight when searching - - confirm = true; # confirm to save changes before closing modified buffer - colorcolumn = "+1"; # show a +1 before the 'textwidth' - completeopt = ["menuone" "noselect"]; # have a better completion experience - - # https://www.compart.com/en/unicode/U+XXXX (unicode character code) - # stylua: ignore - fillchars = { - fold = "·"; # MIDDLE DOT (U+00B7, UTF-8: C2 B7) - horiz = "━"; # BOX DRAWINGS HEAVY HORIZONTAL (U+2501, UTF-8: E2 94 81) - horizdown = "┳"; # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL (U+2533, UTF-8: E2 94 B3) - horizup = "┻"; # BOX DRAWINGS HEAVY UP AND HORIZONTAL (U+253B, UTF-8: E2 94 BB) - vert = "┃"; # BOX DRAWINGS HEAVY VERTICAL (U+2503, UTF-8: E2 94 83) - vertleft = "┫"; # BOX DRAWINGS HEAVY VERTICAL AND LEFT (U+252B, UTF-8: E2 94 AB) - vertright = "┣"; # BOX DRAWINGS HEAVY VERTICAL AND RIGHT (U+2523, UTF-8: E2 94 A3) - verthoriz = "╋"; # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL (U+254B, UTF-8: E2 95 8B) - }; - listchars = builtins.concatStringsSep "," [ - "nbsp:⦸" # CIRCLED REVERSE SOLIDUS (U+29B8, UTF-8: E2 A6 B8) - "tab:▷┅" # WHITE RIGHT-POINTING TRIANGLE (U+25B7, UTF-8: E2 96 B7) - "extends:»" # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (U+00BB, UTF-8: C2 BB) - "precedes:«" # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (U+00AB, UTF-8: C2 AB) - "trail:•" # BULLET (U+2022, UTF-8: E2 80 A2) - ]; - - # shell-like autocomplete to unambiguous portions - wildmode = builtins.concatStringsSep "," [ - "longest" - "list" - "full" - ]; - - grepformat = "%f:%l:%c:%m"; # the default format for rg in vimgrep mode - grepprg = "rg --vimgrep"; # use rg as grep implementation in `:grep` - - hidden = true; # allows you to hide buffers with unsaved changes without being prompted - - laststatus = 3; # use global statusline # TODO: - - list = true; # show whitespace - - mouse = ""; # disables the mouse - - number = true; # line numbers - relativenumber = true; # relative line numbers - - # vim.opt.shada:append {'%'}; -- store buffers in the shada file and reopen them if nvim has been started without file name argument - - shell = nixosConfig.users.users.soispha.shell.pname; # try to use default shell for the default user as a shell for ":!" - - spell = true; # activate spell checking - spelllang = "en_us,de_de"; # set spell languages - spelloptions = "camel"; # CamelCase check if both camel and case are correct words - - syntax = "ON"; # use syntax highlighting and let nvim figure out which - - shiftwidth = 0; # use tabstop setting as shiftwidth - tabstop = 4; # use 4 spaces in place of a tab - expandtab = true; # expand tabs to spaces - - showtabline = 2; # always show the tabline - - timeoutlen = 500; # wait 500 msec for the next char in an input sequence - ttyfast = true; # let vim know that I am using a fast term - - undofile = true; # use a undofile, to save the undos - undolevels = 10000; # keep nearly all undo things stored - - virtualedit = "block"; # allow the cursor to move beyond actual character in visual block mode - - textwidth = 90; # automatically hard wrap at 90 columns by default - - foldmethod = "marker"; # use markers to specify folds - - termguicolors = true; - cursorline = true; - # vim.opt.cursorcolumn = true; - - scrolloff = 999; # try to keep at least 999 lines above and below the cursor (this effectively keeps the screen centered) - - linebreak = true; # break to long lines, but do only break them at [[::space::]] - - showcmd = true; # show partial command, being typed - showmode = true; # show the mode (Visual, Insert, Command) - - wildmenu = true; # shell completion - wildignore = "*.docx,*.jpg,*.png,*.gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.xlsx"; # ignore binary files - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/colorscheme/default.nix b/modules/home/soispha/conf/nvim/plgs/colorscheme/default.nix deleted file mode 100644 index 11357f77..00000000 --- a/modules/home/soispha/conf/nvim/plgs/colorscheme/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - pkgs, - lib, - ... -}: { - programs.nixvim = { - # TODO: package nightfox though a module - extraConfigLuaPost = '' - ${lib.strings.fileContents ./lua/nightfox.lua} - ${lib.strings.fileContents ./lua/mk_todos_readable.lua} - ''; - colorscheme = "carbonfox"; - extraPlugins = [ - pkgs.vimPlugins.nightfox-nvim - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/colorscheme/lua/mk_todos_readable.lua b/modules/home/soispha/conf/nvim/plgs/colorscheme/lua/mk_todos_readable.lua deleted file mode 100644 index d02171b5..00000000 --- a/modules/home/soispha/conf/nvim/plgs/colorscheme/lua/mk_todos_readable.lua +++ /dev/null @@ -1,16 +0,0 @@ -local opts = { bg = "NONE", bold = true } - ----@param hl_group string: The name of the hl group ----@param extra_opts table: Extra options to pass to nvim_set_hl -local set_hl = function(hl_group, extra_opts) - local local_opts = vim.deepcopy(opts) - for k, v in ipairs(extra_opts) do - local_opts[k] = v - end - vim.api.nvim_set_hl(0, hl_group, local_opts) -end - -set_hl("@text.danger", { fg = "red" }) -set_hl("@text.note", { fg = "blue" }) -set_hl("@text.todo", { fg = "green" }) -set_hl("@text.warning", { fg = "yellow" }) diff --git a/modules/home/soispha/conf/nvim/plgs/colorscheme/lua/nightfox.lua b/modules/home/soispha/conf/nvim/plgs/colorscheme/lua/nightfox.lua deleted file mode 100644 index 4c502153..00000000 --- a/modules/home/soispha/conf/nvim/plgs/colorscheme/lua/nightfox.lua +++ /dev/null @@ -1,44 +0,0 @@ -require("nightfox").setup({ - options = { - -- Compiled file's destination location - compile_path = vim.fn.stdpath("cache") .. "/nightfox", - compile_file_suffix = "_compiled", -- Compiled file suffix - transparent = true, -- Disable setting background - terminal_colors = true, -- Set terminal colors (vim.g.terminal_color_*) used in `:terminal` - dim_inactive = true, -- Non focused panes set to alternative background - module_default = true, -- Default enable value for modules - colorblind = { - enable = true, -- Enable colorblind support - simulate_only = false, -- Only show simulated colorblind colors and not diff shifted - severity = { - protan = 0.3, -- Severity [0,1] for protan (red) - deutan = 0.9, -- Severity [0,1] for deutan (green) - tritan = 0, -- Severity [0,1] for tritan (blue) - }, - }, - styles = { -- Style to be applied to different syntax groups - comments = "italic", -- Value is any valid attr-list value `:help attr-list` - conditionals = "NONE", - constants = "NONE", - functions = "bold", - keywords = "bold", - numbers = "NONE", - operators = "NONE", - strings = "NONE", - types = "NONE", - variables = "NONE", - }, - inverse = { -- Inverse highlight for different types - match_paren = false, - visual = false, - search = false, - }, - modules = { -- List of various plugins and additional options - diagnostic = { enable = true, background = false }, - native_lsp = { enable = true, background = false }, - }, - }, - palettes = {}, - specs = {}, - groups = {}, -}) diff --git a/modules/home/soispha/conf/nvim/plgs/comment-nvim/default.nix b/modules/home/soispha/conf/nvim/plgs/comment-nvim/default.nix deleted file mode 100644 index 2a73b8db..00000000 --- a/modules/home/soispha/conf/nvim/plgs/comment-nvim/default.nix +++ /dev/null @@ -1,41 +0,0 @@ -{...}: { - programs.nixvim = { - plugins.comment = { - enable = true; - settings = { - padding = true; - sticky = true; - mappings = { - basic = false; - extra = false; - }; - }; - }; - keymaps = [ - { - key = "gcc"; - mode = "v"; - action = "(comment_toggle_linewise_visual)"; - options.desc = "toggle the current line in a linewise comment"; - } - { - key = "gbc"; - mode = "v"; - action = "(comment_toggle_blockwise_visual)"; - options.desc = "toggle the current line in a blockwise comment"; - } - { - key = "gcc"; - mode = "n"; - action = "(comment_toggle_linewise_current)"; - options.desc = "toggle the current line in a linewise comment"; - } - { - key = "gbc"; - mode = "n"; - action = "(comment_toggle_blockwise_current)"; - options.desc = "toggle the current line in a blockwise comment"; - } - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/debugprint/default.nix b/modules/home/soispha/conf/nvim/plgs/debugprint/default.nix deleted file mode 100644 index b0d72339..00000000 --- a/modules/home/soispha/conf/nvim/plgs/debugprint/default.nix +++ /dev/null @@ -1,74 +0,0 @@ -{ - pkgs, - lib, - ... -}: { - programs.nixvim = { - # TODO: package debugprint though a module - extraConfigLuaPost = '' - ${lib.strings.fileContents ./lua/debugprint.lua} - ''; - extraPlugins = [ - pkgs.vimExtraPlugins.debugprint-nvim - ]; - - keymaps = [ - { - key = "g?v"; - mode = ["v" "n"]; - action = '' - function() - return require('debugprint').debugprint({variable = true;}); - end - ''; - lua = true; - options.expr = true; - options.desc = '' - 'variable' debug line below the current line - ''; - } - { - key = "g?V"; - mode = ["v" "n"]; - action = '' - function() - return require('debugprint').debugprint({above = true; variable = true;}) ; - end - ''; - lua = true; - options.expr = true; - options.desc = '' - 'variable' debug line above the current line - ''; - } - { - key = "g?p"; - mode = "n"; - action = '' - function() - return require('debugprint').debugprint(); - end - ''; - lua = true; - options.expr = true; - options.desc = '' - 'plain' debug line below the current line - ''; - } - { - key = "g?P"; - mode = "n"; - action = '' - function() - return require('debugprint').debugprint({above = true;}); - end - ''; - lua = true; - options.expr = true; - options.desc = '' - 'plain' debug line above the current line - ''; - } - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/debugprint/lua/debugprint.lua b/modules/home/soispha/conf/nvim/plgs/debugprint/lua/debugprint.lua deleted file mode 100644 index da7e1735..00000000 --- a/modules/home/soispha/conf/nvim/plgs/debugprint/lua/debugprint.lua +++ /dev/null @@ -1,3 +0,0 @@ -require("debugprint").setup({ - create_keymaps = false, -}) diff --git a/modules/home/soispha/conf/nvim/plgs/default.nix b/modules/home/soispha/conf/nvim/plgs/default.nix deleted file mode 100644 index 991bc315..00000000 --- a/modules/home/soispha/conf/nvim/plgs/default.nix +++ /dev/null @@ -1,33 +0,0 @@ -{...}: { - imports = - [ - # Plugins not yet packaged in nixpkgs - # ./debugprint - ./lf-nvim - # ./lsp-progress-nvim - ] - ++ [ - # Already packaged in nixpkgs - ./colorscheme - ./comment-nvim - ./femaco - ./flatten-nvim - ./goto-preview - ./harpoon - ./leap - ./lsp - ./lspkind - ./ltex_extra - ./lualine - ./luasnip - ./neorg - ./nvim-cmp - ./nvim-lint - ./raw_plugins - ./telescope - ./todo-comments - ./treesitter - ./vim-tex - ./which-key - ]; -} diff --git a/modules/home/soispha/conf/nvim/plgs/femaco/default.nix b/modules/home/soispha/conf/nvim/plgs/femaco/default.nix deleted file mode 100644 index 0b4f7937..00000000 --- a/modules/home/soispha/conf/nvim/plgs/femaco/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - pkgs, - lib, - ... -}: { - programs.nixvim = { - # TODO: package femaco through a module - extraConfigLuaPost = '' - ${lib.strings.fileContents ./lua/femaco.lua} - ''; - extraPlugins = [ - pkgs.vimPlugins.nvim-FeMaco-lua - ]; - keymaps = [ - { - key = "cc"; - mode = "n"; - action = "require('femaco.edit').edit_code_block"; - lua = true; - options.desc = "edit a [c]ode blo[c]k with femaco"; - } - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/femaco/lua/femaco.lua b/modules/home/soispha/conf/nvim/plgs/femaco/lua/femaco.lua deleted file mode 100644 index da3be8e1..00000000 --- a/modules/home/soispha/conf/nvim/plgs/femaco/lua/femaco.lua +++ /dev/null @@ -1,50 +0,0 @@ -local clip_val = require("femaco.utils").clip_val -require("femaco").setup({ - -- should prepare a new buffer and return the winid - -- by default opens a floating window - -- provide a different callback to change this behaviour - -- @param opts: the return value from float_opts - prepare_buffer = function(opts) - local buf = vim.api.nvim_create_buf(false, false) - return vim.api.nvim_open_win(buf, true, opts) - end, - -- should return options passed to nvim_open_win - -- @param code_block: data about the code-block with the keys - -- * range - -- * lines - -- * lang - float_opts = function(code_block) - return { - relative = "cursor", - width = clip_val(5, 120, vim.api.nvim_win_get_width(0) - 10), -- TODO: how to offset sign column etc? - height = clip_val(5, #code_block.lines, vim.api.nvim_win_get_height(0) - 6), - anchor = "NW", - row = 0, - col = 0, - style = "minimal", - border = "rounded", - zindex = 1, - } - end, - -- return filetype to use for a given lang - -- lang can be nil - ft_from_lang = function(lang) - return lang - end, - -- what to do after opening the float - post_open_float = function(winnr) - vim.wo.signcolumn = "no" - end, - -- create the path to a temporary file - create_tmp_filepath = function(filetype) - return os.tmpname() - end, - -- if a newline should always be used, useful for multiline injections - -- which separators needs to be on separate lines such as markdown, neorg etc - -- @param base_filetype: The filetype which FeMaco is called from, not the - -- filetype of the injected language (this is the current buffer so you can - -- get it from vim.bo.filetyp). - ensure_newline = function(base_filetype) - return false - end, -}) diff --git a/modules/home/soispha/conf/nvim/plgs/flatten-nvim/default.nix b/modules/home/soispha/conf/nvim/plgs/flatten-nvim/default.nix deleted file mode 100644 index cd6f8bcc..00000000 --- a/modules/home/soispha/conf/nvim/plgs/flatten-nvim/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - pkgs, - lib, - ... -}: { - programs.nixvim = { - # TODO: package flatten-nvim though a module - - extraConfigLuaPre = '' - ${lib.strings.fileContents ./lua/flatten-nvim.lua} - if os.getenv("NVIM") ~= nil then - -- Avoid loading plugins because the host will take control of the instance anyways - return - end - ''; - extraPlugins = [ - pkgs.vimPlugins.flatten-nvim - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/flatten-nvim/lua/flatten-nvim.lua b/modules/home/soispha/conf/nvim/plgs/flatten-nvim/lua/flatten-nvim.lua deleted file mode 100644 index 42ea1eb6..00000000 --- a/modules/home/soispha/conf/nvim/plgs/flatten-nvim/lua/flatten-nvim.lua +++ /dev/null @@ -1,106 +0,0 @@ ----Types: --- --- Passed to callbacks that handle opening files ----@alias BufInfo { fname: string, bufnr: buffer } --- --- Needed aliases ----@alias buffer integer: Buffer id ----@alias window integer: Window id --- --- The first argument is a list of BufInfo tables representing the newly opened files. --- The third argument is a single BufInfo table, only provided when a buffer is created from stdin. --- --- IMPORTANT: For `block_for` to work, you need to return a buffer number OR a buffer number and a window number. --- The `winnr` return value is not required, `vim.fn.bufwinid(bufnr)` is used if it is not provided. --- The `filetype` of this buffer will determine whether block should happen or not. --- ----@alias OpenHandler fun(files: BufInfo[], argv: string[], stdin_buf: BufInfo, guest_cwd: string):window, buffer --- -require("flatten").setup({ - callbacks = { - ---Called to determine if a nested session should wait for the host to close the file. - ---param argv: a list of all the arguments in the nested session - ---@type fun(argv: table): boolean - should_block = require("flatten").default_should_block, - - ---If this returns true, the nested session will be opened. - ---If false, default behavior is used, and - ---config.nest_if_no_args is respected. - ---@type fun(host: channel):boolean - should_nest = require("flatten").default_should_nest, - - ---Called before a nested session is opened. - pre_open = function() end, - - ---Called after a nested session is opened. - ---@param bufnr buffer - ---@param winnr window - ---@param filetype string - ---@param is_blocking boolean - ---@param is_diff boolean - post_open = function(bufnr, winnr, filetype, is_blocking, is_diff) - -- If the file is a git commit, create one-shot autocmd to delete its buffer on write - if filetype == "gitcommit" or filetype == "gitrebase" then - vim.api.nvim_create_autocmd("BufWritePost", { - buffer = bufnr, - once = true, - callback = vim.schedule_wrap(function() - vim.api.nvim_buf_delete(bufnr, {}) - end), - }) - end - end, - - ---Called when a nested session is done waiting for the host. - ---@param filetype string - block_end = function(filetype) end, - }, - -- dictionary of filetypes that should be blocking - block_for = { - gitcommit = true, - }, - -- Command passthrough - allow_cmd_passthrough = true, - -- Allow a nested session to open if Neovim is opened without arguments - nest_if_no_args = false, - -- Window options - window = { - -- Options: - -- current -> open in current window (default) - -- alternate -> open in alternate window (recommended) - -- tab -> open in new tab - -- split -> open in split - -- vsplit -> open in vsplit - -- smart -> smart open (avoids special buffers) - -- OpenHandler -> allows you to handle file opening yourself (see Types) - -- - -- TODO: Open gitcommit filetypes in the current buffer, everything else in a new tab <2023-08-29> - open = "split", - - -- Options: - -- vsplit -> opens files in diff vsplits - -- split -> opens files in diff splits - -- tab_vsplit -> creates a new tabpage, and opens diff vsplits - -- tab_split -> creates a new tabpage, and opens diff splits - -- OpenHandler -> allows you to handle file opening yourself (see Types) - diff = "tab_vsplit", - - -- Affects which file gets focused when opening multiple at once - -- Options: - -- "first" -> open first file of new files (default) - -- "last" -> open last file of new files - focus = "first", - }, - -- Override this function to use a different socket to connect to the host - -- On the host side this can return nil or the socket address. - -- On the guest side this should return the socket address - -- or a non-zero channel id from `sockconnect` - -- flatten.nvim will detect if the address refers to this instance of nvim, to determine if this is a host or a guest - pipe_path = require("flatten").default_pipe_path, - -- The `default_pipe_path` will treat the first nvim instance within a single kitty/wezterm session as the host - -- You can configure this behaviour using the following: - one_per = { - kitty = true, -- Flatten all instance in the current Kitty session - wezterm = true, -- Flatten all instance in the current Wezterm session - }, -}) diff --git a/modules/home/soispha/conf/nvim/plgs/goto-preview/default.nix b/modules/home/soispha/conf/nvim/plgs/goto-preview/default.nix deleted file mode 100644 index 13a26212..00000000 --- a/modules/home/soispha/conf/nvim/plgs/goto-preview/default.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ - pkgs, - lib, - ... -}: { - programs.nixvim = { - # TODO: package goto-preview though a module - extraConfigLuaPost = '' - ${lib.strings.fileContents ./lua/goto-preview.lua} - ''; - extraPlugins = [ - pkgs.vimPlugins.goto-preview - ]; - keymaps = [ - { - key = "gd"; - mode = "n"; - action = "require('goto-preview').goto_preview_definition"; - lua = true; - options.desc = "[G]oto [D]efinition"; - } - { - key = "gtd"; - mode = "n"; - action = "require('goto-preview').goto_preview_type_definition"; - lua = true; - options.desc = "[G]oto the [t]ype [D]efinition"; - } - { - key = "gi"; - mode = "n"; - action = "require('goto-preview').goto_preview_implementation"; - lua = true; - options.desc = "[G]oto [I]mplementations"; - } - { - key = "gr"; - mode = "n"; - action = "require('goto-preview').goto_preview_references"; - lua = true; - options.desc = "[G]o to all [R]eferences of the symbol"; - } - { - key = "\\"; - mode = "n"; - action = "require('goto-preview').close_all_win"; - lua = true; - options.desc = "close all preview windows"; - } - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/goto-preview/lua/goto-preview.lua b/modules/home/soispha/conf/nvim/plgs/goto-preview/lua/goto-preview.lua deleted file mode 100644 index 9687a5a0..00000000 --- a/modules/home/soispha/conf/nvim/plgs/goto-preview/lua/goto-preview.lua +++ /dev/null @@ -1,21 +0,0 @@ -require("goto-preview").setup({ - width = 120, -- Width of the floating window - height = 15, -- Height of the floating window - border = { "↖", "─", "┐", "│", "┘", "─", "└", "│" }, -- Border characters of the floating window - default_mappings = false, -- Bind default mappings - debug = false, -- Print debug information - opacity = nil, -- 0-100 opacity level of the floating window where 100 is fully transparent. - resizing_mappings = false, -- Binds arrow keys to resizing the floating window. - post_open_hook = nil, -- A function taking two arguments, a buffer and a window to be ran as a hook. - post_close_hook = nil, -- A function taking two arguments, a buffer and a window to be ran as a hook. - references = { -- Configure the telescope UI for slowing the references cycling window. - telescope = {}, -- require("telescope.themes").get_dropdown({ hide_preview = false }) - }, - -- These two configs can also be passed down to the goto-preview definition and implementation calls for one off "peak" functionality. - focus_on_open = true, -- Focus the floating window when opening it. - dismiss_on_move = false, -- Dismiss the floating window when moving the cursor. - force_close = true, -- passed into vim.api.nvim_win_close's second argument. See :h nvim_win_close - bufhidden = "wipe", -- the bufhidden option to set on the floating window. See :h bufhidden - stack_floating_preview_windows = true, -- Whether to nest floating windows - preview_window_title = { enable = true, position = "left" }, -- Whether to set the preview window title as the filename -}) diff --git a/modules/home/soispha/conf/nvim/plgs/harpoon/default.nix b/modules/home/soispha/conf/nvim/plgs/harpoon/default.nix deleted file mode 100644 index b1421dab..00000000 --- a/modules/home/soispha/conf/nvim/plgs/harpoon/default.nix +++ /dev/null @@ -1,100 +0,0 @@ -{pkgs, ...}: let - numbers = ["0" "1" "2" "3" "4" "5" "6" "7" "8" "9"]; - mkNumberedCommand = { - command_template, - prefix, - number, - desc_template, - }: { - key = "${prefix}${number}"; - action = '' - function() - ${command_template number} - end - ''; - lua = true; - options.desc = "${desc_template number}"; - }; - mkGotoTerminalCommand = number: let - desc_template = number: "Goto terminal number ${number}"; - command_template = number: ''require("harpoon.term").gotoTerminal(${number})''; - prefix = "gt"; - in - mkNumberedCommand {inherit desc_template command_template prefix number;}; - mkGotoFileCommand = number: let - desc_template = number: "Goto Buffer number ${number}"; - command_template = number: ''require("harpoon.ui").nav_file(${number})''; - prefix = "gf"; - in - mkNumberedCommand {inherit desc_template command_template prefix number;}; - - gotoTerminalMappings = builtins.map mkGotoTerminalCommand numbers; - gotoFileMappings = builtins.map mkGotoFileCommand numbers; -in { - programs.nixvim = { - plugins.harpoon = { - enable = true; - package = pkgs.vimExtraPlugins.harpoon; - enableTelescope = true; - # menu.width = "vim.api.nvim_win_get_width(0) - 4"; # TODO: integrate that - keymaps = { - tmuxGotoTerminal = null; # TODO: - }; - }; - keymaps = - [ - { - key = "-"; - action = '' - function() - require("harpoon.ui").nav_next() - end - ''; - lua = true; - options.desc = "go to the next marked file"; - } - { - key = "_"; - action = '' - function() - require("harpoon.ui").nav_prev() - end - ''; - lua = true; - options.desc = "go to the previous marked file"; - } - { - key = ""; - action = '' - function() - require("harpoon.mark").add_file() - end - ''; - lua = true; - options.desc = "add a mark to the open file in harpoon."; - } - { - key = "gqc"; - action = '' - function() - require("harpoon.cmd-ui").toggle_quick_menu() - end - ''; - lua = true; - options.desc = "toggle the harpoon command quick menu to see all commands."; - } - { - key = "q"; - action = '' - function() - require("harpoon.ui").toggle_quick_menu() - end - ''; - lua = true; - options.desc = "toggle the harpoon normal quick menu to see all marks."; - } - ] - ++ gotoFileMappings - ++ gotoTerminalMappings; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/leap/default.nix b/modules/home/soispha/conf/nvim/plgs/leap/default.nix deleted file mode 100644 index 4e7ae60c..00000000 --- a/modules/home/soispha/conf/nvim/plgs/leap/default.nix +++ /dev/null @@ -1,59 +0,0 @@ -{...}: { - programs.nixvim = { - plugins.leap = { - enable = true; - addDefaultMappings = false; # They don't work with dvorak. - safeLabels = [ - "f" - "j" - "k" - "l" - "/" - "z" - "S" - "F" - "J" - "K" - "L" - "H" - "W" - "E" - "M" - "B" - "U" - "X" - "?" - "Z" - ]; - }; - keymaps = [ - { - key = "j"; - action = "(leap-forward-to)"; - options.desc = "jump forward to"; - } - { - key = "J"; - action = "(leap-backward-to)"; - options.desc = "jump backward to"; - } - { - key = "gj"; - action = "(leap-from-window)"; - options.desc = "jump to enterable windows"; - } - /* - {key= "x"; - mode = "v"; - action = "(leap-forward-till)"; - options.desc = "leap forward till"; - } - {key= "X"; - mode = "v"; - action = "(leap-backward-till)"; - options.desc = "leap backward till"; - } - */ - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lf-nvim/default.nix b/modules/home/soispha/conf/nvim/plgs/lf-nvim/default.nix deleted file mode 100644 index 11ad2807..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lf-nvim/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - pkgs, - lib, - ... -}: { - programs.nixvim = { - # TODO: package lf-nvim though a module - # FIXME: change the nvim path, when I change the path with lf - extraConfigLuaPost = '' - ${lib.strings.fileContents ./lua/lf-nvim.lua} - ''; - extraPlugins = [ - pkgs.vimExtraPlugins.lf-nvim - - pkgs.vimPlugins.toggleterm-nvim # required by lf-nvim - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lf-nvim/lua/lf-nvim.lua b/modules/home/soispha/conf/nvim/plgs/lf-nvim/lua/lf-nvim.lua deleted file mode 100644 index 1eadf375..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lf-nvim/lua/lf-nvim.lua +++ /dev/null @@ -1,43 +0,0 @@ -local fn = vim.fn - --- Defaults -require("lf").setup({ - default_action = "drop", -- default action when `Lf` opens a file - -- TODO: what do these mappings do? - default_actions = { -- default action keybindings - [""] = "tabedit", - [""] = "split", - [""] = "vsplit", - [""] = "tab drop", - }, - - winblend = 10, -- psuedotransparency level - dir = "", -- directory where `lf` starts ('gwd' is git-working-directory, ""/nil is CWD) - direction = "float", -- window type: float horizontal vertical - border = "rounded", -- border kind: single double shadow curved - height = fn.float2nr(fn.round(0.75 * vim.o.lines)), -- height of the *floating* window - width = fn.float2nr(fn.round(0.75 * vim.o.columns)), -- width of the *floating* window - escape_quit = true, -- map escape to the quit command (so it doesn't go into a meta normal mode) - focus_on_open = true, -- focus the current file when opening Lf (experimental) - mappings = true, -- whether terminal buffer mapping is enabled - tmux = false, -- tmux statusline can be disabled on opening of Lf - default_file_manager = true, -- make lf default file manager - disable_netrw_warning = true, -- don't display a message when opening a directory with `default_file_manager` as true - highlights = { -- highlights passed to toggleterm - Normal = { link = "Normal" }, - NormalFloat = { link = "Normal" }, - FloatBorder = { guifg = "#cdcbe0", guibg = "#191726" }, - }, - - -- Layout configurations - layout_mapping = "", -- resize window with this key - views = { -- window dimensions to rotate through - { width = 0.800, height = 0.800 }, - { width = 0.600, height = 0.600 }, - { width = 0.950, height = 0.950 }, - { width = 0.500, height = 0.500, col = 0, row = 0 }, - { width = 0.500, height = 0.500, col = 0, row = 0.5 }, - { width = 0.500, height = 0.500, col = 0.5, row = 0 }, - { width = 0.500, height = 0.500, col = 0.5, row = 0.5 }, - }, -}) diff --git a/modules/home/soispha/conf/nvim/plgs/lsp-progress-nvim/default.nix b/modules/home/soispha/conf/nvim/plgs/lsp-progress-nvim/default.nix deleted file mode 100644 index 6602ceb6..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp-progress-nvim/default.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ - lib, - pkgs, - ... -}: { - programs.nixvim = { - # TODO: package lsp-progress-nvim though a module - extraConfigLuaPost = '' - ${lib.strings.fileContents ./lua/lsp-progress-nvim.lua} - ''; - extraPlugins = [ - pkgs.vimExtraPlugins.lsp-progress-nvim - ]; - - # Status line setup - autoGroups.lsp_refresh.clear = true; - autoCmd = [ - { - event = ["User LspProgressStatusUpdated"]; - pattern = ["*"]; - callback = - /* - lua - */ - { - __raw = '' - require("lualine").refresh - ''; - }; - group = "lsp_refresh"; - description = "Refresh the statusbar when the lsp status was updated."; - } - ]; - plugins.lualine = let - get_lsp_progress = { - __raw = - /* - lua - */ - '' - require('lsp-progress').progress - ''; - }; - in { - sections = { - lualine_c = [{name = get_lsp_progress;}]; - }; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp-progress-nvim/lua/lsp-progress-nvim.lua b/modules/home/soispha/conf/nvim/plgs/lsp-progress-nvim/lua/lsp-progress-nvim.lua deleted file mode 100644 index efb15720..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp-progress-nvim/lua/lsp-progress-nvim.lua +++ /dev/null @@ -1,150 +0,0 @@ ---- @type table -require("lsp-progress").setup({ - -- Spinning icons. - -- - --- @type string[] - spinner = { "⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷" }, - - -- Spinning update time in milliseconds. - -- - --- @type integer - spin_update_time = 200, - - -- Last message cached decay time in milliseconds. - -- - -- Message could be really fast(appear and disappear in an - -- instant) that user cannot even see it, thus we cache the last message - -- for a while for user view. - -- - --- @type integer - decay = 700, - - -- User event name. - -- - --- @type string - event = "LspProgressStatusUpdated", - - -- Event update time limit in milliseconds. - -- - -- Sometimes progress handler could emit many events in an instant, while - -- refreshing statusline cause too heavy synchronized IO, so we limit the - -- event rate to reduce this cost. - -- - --- @type integer - event_update_time_limit = 100, - - -- Max progress string length, by default -1 is unlimited. - -- - --- @type integer - max_size = -1, - - -- Regular internal update time. - -- - -- Emit user event to update the lsp progress status, even there's no new - -- message. - -- - --- @type integer - regular_internal_update_time = 500, - - -- Disable emitting events on specific mode/filetype. - -- User events would interrupt insert mode, thus break which-key like plugins behaviour. - -- See: - -- * https://github.com/linrongbin16/lsp-progress.nvim/issues/50 - -- * https://neovim.io/doc/user/builtin.html#mode() - -- - --- @type table[] - disable_events_opts = { { mode = "i", filetype = "TelescopePrompt" } }, - - -- Format series message. - -- - -- By default it looks like: `formatting isort (100%) - done`. - -- - --- @param title string|nil - --- Message title. - --- @param message string|nil - --- Message body. - --- @param percentage number|nil - --- Progress in percentage numbers: 0-100. - --- @param done boolean - --- Indicate whether this series is the last one in progress. - --- @return string|nil messages - --- The returned value will be passed to function `client_format` as - --- one of the `series_messages` array, or ignored if return nil. - series_format = function(title, message, percentage, done) - local builder = {} - local has_title = false - local has_message = false - if title and title ~= "" then - table.insert(builder, title) - has_title = true - end - if message and message ~= "" then - table.insert(builder, message) - has_message = true - end - if percentage and (has_title or has_message) then - table.insert(builder, string.format("(%.0f%%%%)", percentage)) - end - if done and (has_title or has_message) then - table.insert(builder, "- done") - end - return table.concat(builder, " ") - end, - - -- Format client message. - -- - -- By default it looks like: - -- `[null-ls] ⣷ formatting isort (100%) - done, formatting black (50%)`. - -- - --- @param client_name string - --- Client name. - --- @param spinner string - --- Spinner icon. - --- @param series_messages string[]|table[] - --- Messages array. - --- @return string|nil messages - --- The returned value will be passed to function `format` as one of the - --- `client_messages` array, or ignored if return nil. - client_format = function(client_name, spinner, series_messages) - return #series_messages > 0 - and ("[" .. client_name .. "] " .. spinner .. " " .. table.concat(series_messages, ", ")) - or nil - end, - - -- Format (final) message. - -- - -- By default it looks like: - -- ` LSP [null-ls] ⣷ formatting isort (100%) - done, formatting black (50%)` - -- - --- @param client_messages string[]|table[] - --- Client messages array. - --- @return nil|string message - --- The returned value will be returned from `progress` API. - format = function(client_messages) - local sign = " LSP" -- nf-fa-gear \uf013 - return #client_messages > 0 and (sign .. " " .. table.concat(client_messages, " ")) or sign - end, - - -- Enable debug. - -- - --- @type boolean - debug = false, - - -- Print log to console(command line). - -- - --- @type boolean - console_log = false, - - -- Print log to file. - -- - --- @type boolean - file_log = true, - - -- Log file to write, work with `file_log=true`. - -- - -- For Windows: `$env:USERPROFILE\AppData\Local\nvim-data\lsp-progress.log`. - -- For *NIX: `~/.local/share/nvim/lsp-progress.log`. - -- - --- @type string - file_log_name = "lsp-progress.log", -}) diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/default.nix b/modules/home/soispha/conf/nvim/plgs/lsp/default.nix deleted file mode 100644 index b7c1e174..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{...}: { - imports = [ - ./keymaps - ./servers - ]; - programs.nixvim.plugins.lsp = { - enable = true; - onAttach = - "" - # + '' - # function(client, bufnr) - # -- Enable completion triggered by - # -- vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') - # end - # '' - ; - preConfig = '' - vim.diagnostic.config({ - underline = true, - -- virtual_text = true, - virtual_text = { - source = "always", -- Or "if_many" - }, - update_in_insert = true, - severity_sort = true, - }, nil); - ''; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/keymaps/default.nix b/modules/home/soispha/conf/nvim/plgs/lsp/keymaps/default.nix deleted file mode 100644 index e176461e..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/keymaps/default.nix +++ /dev/null @@ -1,72 +0,0 @@ -{...}: { - programs.nixvim = { - plugins.lsp.keymaps = { - diagnostic = { - "N" = { - action = "goto_prev"; - desc = "go to previous diagnostic message"; - }; - "T" = { - action = "goto_next"; - desc = "go to next diagnostic message"; - }; - "e" = { - action = "open_float"; - desc = "open float for the symbol"; - }; - "gq" = { - action = "setloclist"; - desc = "add buffer diagnostic to the location list (quick-fix)"; - }; - }; - lspBuf = { - "gD" = { - action = "declaration"; - desc = "[G]o to [d]eclaration"; - }; - "hi" = { - action = "hover"; - desc = "Display [h]over [i]nformation"; - }; - "sh" = { - action = "signature_help"; - desc = "Display [s]ignature [h]elp"; - }; - "wa" = { - action = "add_workspace_folder"; - desc = "[W]orkspace folder [a]dd"; - }; - "wr" = { - action = "remove_workspace_folder"; - desc = "[W]orkspace folder [r]emove"; - }; - "rn" = { - action = "rename"; - desc = "[R]e[n]ame the item under the cursor"; - }; - "ca" = { - action = "code_action"; - desc = "Open the [c]ode [a]ction menu"; - }; - }; - }; - keymaps = [ - { - key = "f"; - action = "function() vim.lsp.buf.format { async = true } end"; - lua = true; - options.desc = "[F]ormat the current buffer (asynchronously)"; - } - { - key = "wl"; - action = '' - function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - end - ''; - lua = true; - options.desc = "[W]orkspace folders [l]ist"; - } - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/servers/default.nix b/modules/home/soispha/conf/nvim/plgs/lsp/servers/default.nix deleted file mode 100644 index 1f59ae4e..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/servers/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{...}: { - imports = [ - # ./servers/pylyzer.nix - ./servers/bashls.nix - ./servers/ccls.nix - ./servers/quick-lint-js.nix - ./servers/ltex.nix - ./servers/lua-ls.nix - ./servers/nil_ls.nix - ./servers/openscad.nix - ./servers/ruff-lsp.nix - ./servers/rust-analyzer.nix - ./servers/texlab.nix - ]; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/bashls.nix b/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/bashls.nix deleted file mode 100644 index 0577a335..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/bashls.nix +++ /dev/null @@ -1,5 +0,0 @@ -{...}: { - programs.nixvim.plugins.lsp.servers = { - bashls.enable = true; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/ccls.nix b/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/ccls.nix deleted file mode 100644 index 0698bcce..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/ccls.nix +++ /dev/null @@ -1,5 +0,0 @@ -{...}: { - programs.nixvim.plugins.lsp.servers = { - ccls.enable = true; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/ltex.nix b/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/ltex.nix deleted file mode 100644 index 3224bc41..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/ltex.nix +++ /dev/null @@ -1,39 +0,0 @@ -{...}: { - programs.nixvim.plugins.lsp.servers = { - ltex = let - filetypes = [ - "java" - "cpp" - "shell" - "bash" - - "bibtex" - "context" - "context.tex" - "latex" - "tex" - - "markdown" - "org" - "restructuredtext" - "rsweave" - - "git-commit" - "gitcommit" - - "mail" - ]; - in { - enable = true; - inherit filetypes; - settings = { - enabled = filetypes; - completionEnabled = false; - language = "en-CA"; - additionalRules = { - enablePickyRules = true; - }; - }; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/lua-ls.nix b/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/lua-ls.nix deleted file mode 100644 index 5a44b500..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/lua-ls.nix +++ /dev/null @@ -1,8 +0,0 @@ -{...}: { - programs.nixvim.plugins.lsp.servers = { - lua-ls = { - enable = true; - settings.telemetry.enable = false; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/nil_ls.nix b/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/nil_ls.nix deleted file mode 100644 index f0cccbdc..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/nil_ls.nix +++ /dev/null @@ -1,10 +0,0 @@ -{...}: { - programs.nixvim.plugins.lsp.servers = { - nil_ls = { - enable = true; - settings = { - formatting.command = ["alejandra"]; - }; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/openscad.nix b/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/openscad.nix deleted file mode 100644 index a0221cc4..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/openscad.nix +++ /dev/null @@ -1,17 +0,0 @@ -{pkgs, ...}: { - programs.nixvim = { - extraConfigLuaPost = - /* - lua - */ - '' - require('lspconfig').openscad_lsp.setup{ - cmd = {"openscad-lsp", "--stdio", "--fmt-style", "WebKit"}, - } - ''; - extraPackages = with pkgs; [ - openscad-lsp - clang-tools # Need to satisfy `clang-format` (which is used by openscad-lsp) - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/pylyzer.nix b/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/pylyzer.nix deleted file mode 100644 index b1042221..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/pylyzer.nix +++ /dev/null @@ -1,12 +0,0 @@ -{pkgs, ...}: { - programs.nixvim = { - extraConfigLuaPost = - /* - lua - */ - '' - require('lspconfig').pylyzer.setup{} - ''; - extraPackages = with pkgs; [pylyzer]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/quick-lint-js.nix b/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/quick-lint-js.nix deleted file mode 100644 index 23c3054a..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/quick-lint-js.nix +++ /dev/null @@ -1,15 +0,0 @@ -{pkgs, ...}: { - programs.nixvim = { - extraConfigLuaPost = - /* - lua - */ - '' - require('lspconfig').quick_lint_js.setup{ - } - ''; - extraPackages = with pkgs; [ - quick-lint-js - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/ruff-lsp.nix b/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/ruff-lsp.nix deleted file mode 100644 index 3eeb495a..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/ruff-lsp.nix +++ /dev/null @@ -1,10 +0,0 @@ -{pkgs, ...}: { - programs.nixvim = { - plugins.lsp.servers = { - ruff-lsp = { - enable = true; - }; - }; - extraPackages = with pkgs; [ruff]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/rust-analyzer.nix b/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/rust-analyzer.nix deleted file mode 100644 index d58c8f1b..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/rust-analyzer.nix +++ /dev/null @@ -1,14 +0,0 @@ -{...}: { - programs.nixvim.plugins.lsp.servers = { - rust-analyzer = { - enable = true; - settings = { - typing.autoClosingAngleBrackets.enable = true; - }; - # NOTE: These should be provided by the devenv, to support nightly and - # such things <2023-11-25> - installCargo = false; - installRustc = false; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/texlab.nix b/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/texlab.nix deleted file mode 100644 index 59af8d39..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lsp/servers/servers/texlab.nix +++ /dev/null @@ -1,7 +0,0 @@ -{...}: { - programs.nixvim.plugins.lsp.servers = { - texlab = { - enable = true; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/lspkind/default.nix b/modules/home/soispha/conf/nvim/plgs/lspkind/default.nix deleted file mode 100644 index ed7d411b..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lspkind/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{...}: { - programs.nixvim.plugins.lspkind = { - enable = true; - preset = "default"; # "codicons" is only for a font patched with vscode-codeicons. - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/ltex_extra/default.nix b/modules/home/soispha/conf/nvim/plgs/ltex_extra/default.nix deleted file mode 100644 index af78c7a5..00000000 --- a/modules/home/soispha/conf/nvim/plgs/ltex_extra/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{pkgs, ...}: { - programs.nixvim = { - # TODO: package ltex_extra though a module - extraPlugins = [ - pkgs.vimPlugins.ltex_extra-nvim - ]; - plugins.lsp.servers.ltex.onAttach.function = builtins.readFile ./lua/ltex_extra.lua; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/ltex_extra/lua/ltex_extra.lua b/modules/home/soispha/conf/nvim/plgs/ltex_extra/lua/ltex_extra.lua deleted file mode 100644 index f55a9ba7..00000000 --- a/modules/home/soispha/conf/nvim/plgs/ltex_extra/lua/ltex_extra.lua +++ /dev/null @@ -1,16 +0,0 @@ -require("ltex_extra").setup({ - -- table : languages for witch dictionaries will be loaded, e.g. { "es-AR", "en-US" } - -- https://valentjn.github.io/ltex/supported-languages.html#natural-languages - load_langs = { "en-CA", "de-DE" }, -- en-US as default - -- boolean : whether to load dictionaries on startup - init_check = true, - -- string : relative or absolute path to store dictionaries - -- e.g. subfolder in the project root or the current working directory: ".ltex" - -- e.g. shared files for all projects: vim.fn.expand("~") .. "/.local/share/ltex" - path = vim.fn.expand("~") .. "/.local/state/nvim/ltex", -- project root or current working directory - -- string : "none", "trace", "debug", "info", "warn", "error", "fatal" - log_level = "warn", - -- table : configurations of the ltex language server. - -- Only if you are calling the server from ltex_extra - server_opts = nil, -}) diff --git a/modules/home/soispha/conf/nvim/plgs/lualine/default.nix b/modules/home/soispha/conf/nvim/plgs/lualine/default.nix deleted file mode 100644 index 0b789558..00000000 --- a/modules/home/soispha/conf/nvim/plgs/lualine/default.nix +++ /dev/null @@ -1,114 +0,0 @@ -{...}: { - programs.nixvim.plugins.lualine = let - get_location_of_file = { - __raw = '' - function() - local file_lines = vim.fn.line('$'); - local file_current_cursor_positon = vim.fn.getcurpos(); - return file_current_cursor_positon[3] .. ":" .. file_current_cursor_positon[2] .. "/" .. file_lines - end - ''; - }; - - get_trailing_whitespace = { - __raw = '' - function() - local space = vim.fn.search([[\s\+$]], 'nwc') - return space ~= 0 and "TW:" .. space or "" - end - ''; - }; - get_mixed_indent = { - __raw = - /* - lua - */ - '' - function() - local space_pat = [[\v^ +]] - local tab_pat = [[\v^\t+]] - local space_indent = vim.fn.search(space_pat, 'nwc') - local tab_indent = vim.fn.search(tab_pat, 'nwc') - local mixed = (space_indent > 0 and tab_indent > 0) - local mixed_same_line - if not mixed then - mixed_same_line = vim.fn.search([[\v^(\t+ | +\t)]], 'nwc') - mixed = mixed_same_line > 0 - end - if not mixed then return "" end - if mixed_same_line ~= nil and mixed_same_line > 0 then - return 'MI:' .. mixed_same_line - end - local space_indent_cnt = vim.fn.searchcount({ pattern = space_pat, max_count = 1e3 }).total - local tab_indent_cnt = vim.fn.searchcount({ pattern = tab_pat, max_count = 1e3 }).total - if space_indent_cnt > tab_indent_cnt then - return 'MI:' .. tab_indent - else - return 'MI:' .. space_indent - end - end - ''; - }; - in { - enable = true; - iconsEnabled = true; - theme = "nightfox"; - componentSeparators = { - left = ""; - right = ""; - }; - sectionSeparators = { - left = ""; - right = ""; - }; - disabledFiletypes = { - statusline = []; - winbar = []; - }; - ignoreFocus = []; - alwaysDivideMiddle = true; - globalstatus = false; - refresh = { - statusline = 1000; - tabline = 1000; - winbar = 1000; - }; - sections = { - lualine_a = ["mode"]; - lualine_b = [ - { - name = "FugitiveHead"; - icon = ""; - } - "diff" - "diagnostics" - ]; - lualine_c = ["filename"]; - lualine_x = ["searchcount" "filetype"]; - lualine_y = [ - "encoding" - "fileformat" - {name = get_mixed_indent;} - {name = get_trailing_whitespace;} - ]; - lualine_z = [{name = get_location_of_file;}]; - }; - inactiveSections = { - lualine_a = []; - lualine_b = []; - lualine_c = ["filename"]; - lualine_x = [{name = get_location_of_file;}]; - lualine_y = []; - lualine_z = []; - }; - tabline = {}; - winbar = {}; - inactiveWinbar = {}; - - # TODO: add all installed and supported extensions here - extensions = [ - "toggleterm" - #"fugitive" # TODO: maybe add this? - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/luasnip/default.nix b/modules/home/soispha/conf/nvim/plgs/luasnip/default.nix deleted file mode 100644 index 130fafee..00000000 --- a/modules/home/soispha/conf/nvim/plgs/luasnip/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - lib, - pkgs, - ... -}: { - programs.nixvim = { - plugins.luasnip = { - enable = true; - }; - extraConfigLuaPost = '' - ${lib.strings.fileContents ./lua/luasnip.lua}; - require("luasnip.loaders.from_lua").load({paths = "${./lua/snippets}"}); - require("luasnip.loaders.from_lua").lazy_load({paths = "${./lua/snippets}"}); - ''; - extraPlugins = [ - # needed for the todo-comments snippets - pkgs.vimPlugins.comment-nvim - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/luasnip/lua/luasnip.lua b/modules/home/soispha/conf/nvim/plgs/luasnip/lua/luasnip.lua deleted file mode 100644 index a05fa57f..00000000 --- a/modules/home/soispha/conf/nvim/plgs/luasnip/lua/luasnip.lua +++ /dev/null @@ -1,7 +0,0 @@ -require("luasnip").config.set_config({ - -- Enable auto triggered snippets - enable_autosnippets = true, - - -- Use Tab (or some other key if you prefer) to trigger visual selection - store_selection_keys = "", -}) diff --git a/modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/all.lua b/modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/all.lua deleted file mode 100644 index c3f75058..00000000 --- a/modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/all.lua +++ /dev/null @@ -1,182 +0,0 @@ -local ls = require("luasnip") --- auto_pairs {{{ -local get_visual = function(args, parent) - if #parent.snippet.env.SELECT_RAW > 0 then - return sn(nil, i(1, parent.snippet.env.SELECT_RAW)) - else - return sn(nil, i(1, "")) - end -end -local function char_count_same(c1, c2) - local line = vim.api.nvim_get_current_line() - -- '%'-escape chars to force explicit match (gsub accepts patterns). - -- second return value is number of substitutions. - local _, ct1 = string.gsub(line, "%" .. c1, "") - local _, ct2 = string.gsub(line, "%" .. c2, "") - return ct1 == ct2 -end - -local function even_count(c, ...) - local line = vim.api.nvim_get_current_line() - local _, ct = string.gsub(line, c, "") - return ct % 2 == 0 -end - --- This makes creation of pair-type snippets easier. -local function pair(pair_begin, pair_end, file_types, condition_function) - -- FIXME(@Soispha): This only works if file_types == nil, otherwise the snippet does not expand. - -- It would be nice, if it would support both an empty array (`{}`) and nil <2023-08-27> - -- file_types = file_types or {}; - - return s( - { trig = pair_begin, wordTrig = false, snippetType = "autosnippet" }, - { t({ pair_begin }), d(1, get_visual), t({ pair_end }) }, - { - condition = function() - local filetype_check = true - if file_types ~= nil then - filetype_check = file_types[vim.bo.filetype] or false - end - return (not condition_function(pair_begin, pair_end)) and filetype_check - end, - } - ) -end - -local auto_pairs = { - pair("(", ")", nil, char_count_same), - pair("{", "}", nil, char_count_same), - pair("[", "]", nil, char_count_same), - pair("<", ">", { ["rust"] = true, ["tex"] = true }, char_count_same), - pair("'", "'", nil, even_count), - pair('"', '"', nil, even_count), - pair("`", "`", nil, even_count), -} - -ls.add_snippets("all", auto_pairs, { type = "snippets", key = "auto_pairs" }) --- }}} - --- todo_comments {{{ -local calculate_comment_string = require("Comment.ft").calculate -local utils = require("Comment.utils") - ---- Get the comment string {beg,end} table ----@param ctype integer 1 for `line`-comment and 2 for `block`-comment ----@return table comment_strings {begcstring, endcstring} -local get_cstring = function(ctype) - -- use the `Comments.nvim` API to fetch the comment string for the region (eq. '--%s' or '--[[%s]]' for `lua`) - local cstring = calculate_comment_string({ ctype = ctype, range = utils.get_region() }) or vim.bo.commentstring - -- as we want only the strings themselves and not strings ready for using `format` we want to split the left and right side - local left, right = utils.unwrap_cstr(cstring) - -- create a `{left, right}` table for it - return { left, right } -end -_G.luasnip = {} -_G.luasnip.vars = { - username = "@soispha", - email = "soispha@vhack.eu", -} - ---- Options for marks to be used in a TODO comment ----@return table,table: The first table contains a node for the date, the second for the signature -local marks = { - signature = function() - return t("(" .. _G.luasnip.vars.username .. ")"), t("") - end, - date_signature = function() - return t("<" .. os.date("%Y-%m-%d") .. ">"), t("(" .. _G.luasnip.vars.username .. ")") - end, - date = function() - return t("<" .. os.date("%Y-%m-%d") .. ">"), t("") - end, - empty = function() - return t(""), t("") - end, -} - ----@param alias string ----@param opts table ----@param mark_function function: This function should return two nodes ----@return table: Returns the comment node -local todo_snippet_nodes = function(alias, opts, mark_function) - local date_node, signature_node = mark_function() - -- format them into the actual snippet - local comment_node = fmta("<> <><>: <> <> <>", { - f(function() - return get_cstring(opts.ctype)[1] -- get - end), - t(alias), -- [name-of-comment] - signature_node, - i(0), -- {comment-text} - date_node, - f(function() - return get_cstring(opts.ctype)[2] -- get - end), - }) - return comment_node -end - ---- Generate a TODO comment snippet with an automatic description and docstring ----@param context table merged with the generated context table `trig` must be specified ----@param alias string of aliases for the todo comment (ex.: {FIX, ISSUE, FIXIT, BUG}) ----@param opts table merged with the snippet opts table ----@param mark_function function: The function used to get the marks -local todo_snippet = function(context, alias, opts, mark_function) - opts = opts or {} - context = context or {} - if not context.trig then - return error("context doesn't include a `trig` key which is mandatory", 2) -- all we need from the context is the trigger - end - opts.ctype = opts.ctype or 1 -- comment type can be passed in the `opts` table, but if it is not, we have to ensure, it is defined - local alias_string = alias -- `choice_node` documentation - context.name = context.name or (alias_string .. " comment") -- generate the `name` of the snippet if not defined - context.dscr = context.dscr or (alias_string .. " comment with a signature-mark") -- generate the `dscr` if not defined - context.docstring = context.docstring or (" {1:" .. alias_string .. "}: {3} <{2:mark}>{0} ") -- generate the `docstring` if not defined - local comment_node = todo_snippet_nodes(alias, opts, mark_function) - return s(context, comment_node, opts) -- the final todo-snippet constructed from our parameters -end - ----@param context table: The luasnip context ----@param opts table: The luasnip opts table, needs to have a ctype set ----@param aliases string: All aliases for a name ----@param marks table: Possible marks to account in snipped generation ----@return table: All possible snippets build from the marks -local process_marks = function(context, aliases, opts, marks) - local output = {} - for mark_name, mark_function in pairs(marks) do - local contex_trig_local = context.trig - context.trig = context.trig .. "-" .. mark_name - output[#output + 1] = todo_snippet(context, aliases, opts, mark_function) - context.trig = contex_trig_local - end - return output -end - -local todo_snippet_specs = { - { { trig = "todo" }, { "TODO" }, { ctype = 1 } }, - { { trig = "fix" }, { "FIXME", "ISSUE" }, { ctype = 1 } }, - { { trig = "hack" }, { "HACK" }, { ctype = 1 } }, - { { trig = "warn" }, { "WARNING" }, { ctype = 1 } }, - { { trig = "perf" }, { "PERFORMANCE", "OPTIMIZE" }, { ctype = 1 } }, - { { trig = "note" }, { "NOTE", "INFO" }, { ctype = 1 } }, - - -- NOTE: Block commented todo-comments - { { trig = "todob" }, { "TODO" }, { ctype = 2 } }, - { { trig = "fixb" }, { "FIXME", "ISSUE" }, { ctype = 2 } }, - { { trig = "hackb" }, { "HACK" }, { ctype = 2 } }, - { { trig = "warnb" }, { "WARNING" }, { ctype = 2 } }, - { { trig = "perfb" }, { "PERF", "PERFORMANCE", "OPTIM", "OPTIMIZE" }, { ctype = 2 } }, - { { trig = "noteb" }, { "NOTE", "INFO" }, { ctype = 2 } }, -} - -local todo_comment_snippets = {} -for _, v in ipairs(todo_snippet_specs) do - local snippets = process_marks(v[1], v[2][1], v[3], marks) - for _, value in pairs(snippets) do - table.insert(todo_comment_snippets, value) - end -end - -ls.add_snippets("all", todo_comment_snippets, { type = "snippets", key = "todo_comments" }) - --- }}} diff --git a/modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/html/html.lua b/modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/html/html.lua deleted file mode 100644 index 17e1e7fb..00000000 --- a/modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/html/html.lua +++ /dev/null @@ -1,108 +0,0 @@ -local get_visual = function(args, parent) - if #parent.snippet.env.SELECT_RAW > 0 then - return sn(nil, i(1, parent.snippet.env.SELECT_RAW)) - else - return sn(nil, i(1)) - end -end - -local line_begin = require("luasnip.extras.expand_conditions").line_begin - -return { - -- HEADER - s( - { - trig = "h([123456])", - regTrig = true, - wordTrig = false, - snippetType = "autosnippet", - }, - fmt( - [[ - {} - ]], - { - f(function(_, snip) - return snip.captures[1] - end), - d(1, get_visual), - f(function(_, snip) - return snip.captures[1] - end), - } - ), - { condition = line_begin } - ), -- PARAGRAPH - s( - { trig = "pp", snippetType = "autosnippet" }, - fmt( - [[ -

    {}

    - ]], - { d(1, get_visual) } - ), - { condition = line_begin } - ), -- UNORDERED LIST - s( - { trig = "itt", snippetType = "autosnippet" }, - fmt( - [[ -
      -
    • {}
    • {} -
    - ]], - { i(1), i(0) } - ), - { condition = line_begin } - ), -- LIST ITEM - s( - { trig = "ii", snippetType = "autosnippet" }, - fmt( - [[ -
  • {}
  • - ]], - { d(1, get_visual) } - ), - { condition = line_begin } - ), - -- DOCUMENT TEMPLATE - s( - { trig = "base" }, - fmt( - [[ - - - - - {} - - - {} - - - ]], - { i(1, "FooBar"), i(0) } - ), - { condition = line_begin } - ), -- ANCHOR TAG - s( - { - trig = "([^%l])aa", - regTrig = true, - wordTrig = false, - snippetType = "autosnippet", - }, - fmt( - [[ - {}{} - ]], - { - f(function(_, snip) - return snip.captures[1] - end), - i(1), - d(2, get_visual), - } - ) - ), -} diff --git a/modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/tex/delimiter.lua b/modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/tex/delimiter.lua deleted file mode 100644 index 22434aa3..00000000 --- a/modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/tex/delimiter.lua +++ /dev/null @@ -1,34 +0,0 @@ -local get_visual = function(args, parent) - if #parent.snippet.env.SELECT_RAW > 0 then - return sn(nil, i(1, parent.snippet.env.SELECT_RAW)) - else - return sn(nil, i(1, "")) - end -end - -local translation_table = { ["("] = ")", ["{"] = "}", ["["] = "]" } - --- Return snippet tables -return { - -- LEFT/RIGHT ALL BRACES - s( - { - trig = "([^%a])l([%(%[%{])", - regTrig = true, - wordTrig = false, - snippetType = "autosnippet", - }, - fmta("<>\\left<><>\\right<>", { - f(function(_, snip) - return snip.captures[1] - end), - f(function(_, snip) - return snip.captures[2] - end), - d(1, get_visual), - f(function(_, snip) - return translation_table[snip.captures[2]] - end), - }) - ), -} diff --git a/modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/tex/greek.lua b/modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/tex/greek.lua deleted file mode 100644 index ebf4f9d7..00000000 --- a/modules/home/soispha/conf/nvim/plgs/luasnip/lua/snippets/tex/greek.lua +++ /dev/null @@ -1,37 +0,0 @@ --- Return snippet tables -return { - s({ trig = ";a", snippetType = "autosnippet" }, { t("\\alpha") }), - s({ trig = ";b", snippetType = "autosnippet" }, { t("\\beta") }), - s({ trig = ";g", snippetType = "autosnippet" }, { t("\\gamma") }), - s({ trig = ";G", snippetType = "autosnippet" }, { t("\\Gamma") }), - s({ trig = ";d", snippetType = "autosnippet" }, { t("\\delta") }), - s({ trig = ";D", snippetType = "autosnippet" }, { t("\\Delta") }), - s({ trig = ";e", snippetType = "autosnippet" }, { t("\\epsilon") }), - s({ trig = ";ve", snippetType = "autosnippet" }, { t("\\varepsilon") }), - s({ trig = ";z", snippetType = "autosnippet" }, { t("\\zeta") }), - s({ trig = ";h", snippetType = "autosnippet" }, { t("\\eta") }), - s({ trig = ";o", snippetType = "autosnippet" }, { t("\\theta") }), - s({ trig = ";vo", snippetType = "autosnippet" }, { t("\\vartheta") }), - s({ trig = ";O", snippetType = "autosnippet" }, { t("\\Theta") }), - s({ trig = ";k", snippetType = "autosnippet" }, { t("\\kappa") }), - s({ trig = ";l", snippetType = "autosnippet" }, { t("\\lambda") }), - s({ trig = ";L", snippetType = "autosnippet" }, { t("\\Lambda") }), - s({ trig = ";m", snippetType = "autosnippet" }, { t("\\mu") }), - s({ trig = ";n", snippetType = "autosnippet" }, { t("\\nu") }), - s({ trig = ";x", snippetType = "autosnippet" }, { t("\\xi") }), - s({ trig = ";X", snippetType = "autosnippet" }, { t("\\Xi") }), - s({ trig = ";i", snippetType = "autosnippet" }, { t("\\pi") }), - s({ trig = ";I", snippetType = "autosnippet" }, { t("\\Pi") }), - s({ trig = ";r", snippetType = "autosnippet" }, { t("\\rho") }), - s({ trig = ";s", snippetType = "autosnippet" }, { t("\\sigma") }), - s({ trig = ";S", snippetType = "autosnippet" }, { t("\\Sigma") }), - s({ trig = ";t", snippetType = "autosnippet" }, { t("\\tau") }), - s({ trig = ";f", snippetType = "autosnippet" }, { t("\\phi") }), - s({ trig = ";vf", snippetType = "autosnippet" }, { t("\\varphi") }), - s({ trig = ";F", snippetType = "autosnippet" }, { t("\\Phi") }), - s({ trig = ";c", snippetType = "autosnippet" }, { t("\\chi") }), - s({ trig = ";p", snippetType = "autosnippet" }, { t("\\psi") }), - s({ trig = ";P", snippetType = "autosnippet" }, { t("\\Psi") }), - s({ trig = ";w", snippetType = "autosnippet" }, { t("\\omega") }), - s({ trig = ";W", snippetType = "autosnippet" }, { t("\\Omega") }), -} diff --git a/modules/home/soispha/conf/nvim/plgs/neorg/default.nix b/modules/home/soispha/conf/nvim/plgs/neorg/default.nix deleted file mode 100644 index 8d8015da..00000000 --- a/modules/home/soispha/conf/nvim/plgs/neorg/default.nix +++ /dev/null @@ -1,56 +0,0 @@ -{...}: { - programs.nixvim.plugins.neorg = { - enable = true; - lazyLoading = true; - - modules = { - "core.defaults" = { - __empty = null; - }; - "core.esupports.metagen".config = { - type = "auto"; - }; - "core.journal".config = { - workspace = "journal"; - }; - "core.keybinds".config = { - hook = { - __raw = '' - function(keybinds) - -- remap the looking glas to the same key, femaco is also mapped to. - keybinds.remap_event("norg", "n", "cc", "core.looking-glass.magnify-code-block") - - keybinds.remap_event("norg", "n", "", "core.integrations.telescope.find_linkable") - keybinds.remap_event("norg", "i", "", "core.integrations.telescope.insert_link") - end, - ''; - }; - }; - "core.completion".config = { - engine = "nvim-cmp"; - }; - "core.concealer".config = { - __empty = null; - }; - "core.dirman".config = { - workspaces = { - general = "~/repos/notes/general"; - journal = "~/repos/notes/journal"; - projects = "~/repos/notes/projects"; - }; - }; - "core.export".config = { - __empty = null; - }; - "core.integrations.telescope".config = { - __empty = null; - }; - - # TODO: Add this when the nvim version in nixpkgs is >= 0.10 <2023-08-29> - # - # "core.ui.calendar".config = { - # __empty = null; - # }; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/nvim-cmp/default.nix b/modules/home/soispha/conf/nvim/plgs/nvim-cmp/default.nix deleted file mode 100644 index ed0e57c3..00000000 --- a/modules/home/soispha/conf/nvim/plgs/nvim-cmp/default.nix +++ /dev/null @@ -1,54 +0,0 @@ -{config, ...}: { - programs.nixvim.plugins.cmp = let - neorg_source = - if config.programs.nixvim.plugins.neorg.modules."core.completion".config.engine == "nvim-cmp" - then [{name = "neorg";}] - else []; - in { - /* - TODO: integrate this: - ```lua - enabled = { - function() - -- disable completion in comments - local context = require 'cmp.config.context' - -- keep command mode completion enabled when cursor is in a comment - -- te - if vim.api.nvim_get_mode().mode == 'c' then - return true - else - return not context.in_treesitter_capture("comment") - and not context.in_syntax_group("Comment") - end - end - }, - ``` - */ - enable = true; - autoEnableSources = true; - settings = { - mapping = { - # TODO: add support for desc and which key here - "" = "cmp.mapping.scroll_docs(-4)"; # desc = "Scroll up by four lines" - "" = "cmp.mapping.scroll_docs(4)"; # desc = "Scroll down by four lines" - "HH" = "cmp.mapping.complete()"; # desc = "Confirm snipped" - }; - - snippet.expand = "function(args) require('luasnip').lsp_expand(args.body) end"; - - sources = - [ - {name = "nvim_lsp";} - {name = "luasnip";} - {name = "path";} - {name = "git";} # TODO: I might want to add config to allow all issues/prs <2023-10-16> - # {name = "convertionalcommits";} # TODO: Useless without commitlint [https://commitlint.js.org/] <2023-10-16> - # {name = "rg";} # TODO: This might really RIP-grep my system <2023-10-16> - # {name = "buffer";} - # {name = "digraphs";} - {name = "calc";} - ] - ++ neorg_source; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/nvim-lint/default.nix b/modules/home/soispha/conf/nvim/plgs/nvim-lint/default.nix deleted file mode 100644 index f5cb9acf..00000000 --- a/modules/home/soispha/conf/nvim/plgs/nvim-lint/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - pkgs, - lib, - ... -}: { - programs.nixvim = { - # TODO: package nvim-lint though a module - extraConfigLuaPost = '' - ${lib.strings.fileContents ./lua/nvim-lint.lua} - ''; - extraPlugins = [ - pkgs.vimPlugins.nvim-lint - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/nvim-lint/lua/nvim-lint.lua b/modules/home/soispha/conf/nvim/plgs/nvim-lint/lua/nvim-lint.lua deleted file mode 100644 index 4ed49f7b..00000000 --- a/modules/home/soispha/conf/nvim/plgs/nvim-lint/lua/nvim-lint.lua +++ /dev/null @@ -1,20 +0,0 @@ -require("lint").linters_by_ft = { - -- text - markdown = {}, - -- tex = {'chktex'}, -- maybe add some text linters ? - - -- shell (already covered by the bash language sever) - -- sh = { "shellcheck"; }; - -- bash = { "shellcheck"; }; - -- zsh = { "shellcheck"; }; - -- dash = { "shellcheck"; }; - - yaml = { "yamllint" }, - nix = { "nix", "statix" }, -} - -vim.api.nvim_create_autocmd({ "BufEnter", "BufWritePost" }, { - callback = function() - require("lint").try_lint() - end, -}) diff --git a/modules/home/soispha/conf/nvim/plgs/raw_plugins/default.nix b/modules/home/soispha/conf/nvim/plgs/raw_plugins/default.nix deleted file mode 100644 index 941cb7cb..00000000 --- a/modules/home/soispha/conf/nvim/plgs/raw_plugins/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{...}: { - programs.nixvim = { - # Not all plugins have own modules - # You can add missing plugins here - # `pkgs.vimExtraPlugins` is added by the overlay you added at the beginning - # For a list of available plugins, look here: - # https://github.com/jooooscha/nixpkgs-vim-extra-plugins/blob/main/plugins.md - extraPlugins = [ - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/telescope/default.nix b/modules/home/soispha/conf/nvim/plgs/telescope/default.nix deleted file mode 100644 index b5054ed0..00000000 --- a/modules/home/soispha/conf/nvim/plgs/telescope/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{...}: { - imports = [ - ./defaults - ./keymaps - ./extensions - ]; - programs.nixvim.plugins.telescope = { - enable = true; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/telescope/defaults/default.nix b/modules/home/soispha/conf/nvim/plgs/telescope/defaults/default.nix deleted file mode 100644 index 933089ef..00000000 --- a/modules/home/soispha/conf/nvim/plgs/telescope/defaults/default.nix +++ /dev/null @@ -1,30 +0,0 @@ -{...}: { - programs.nixvim.plugins.telescope.settings.defaults = { - mappings = let - insert_and_normal_mappings = { - # map actions.which_key to (default: ) - # actions.which_key shows the mappings for your picker, - # e.g. git_{create, delete, ...}_branch for the git_branches picker - "" = "which_key"; - }; - in { - i = - insert_and_normal_mappings; - n = - { - "t" = "move_selection_next"; - "n" = "move_selection_previous"; - "" = "toggle_all"; - - "" = "preview_scrolling_up"; - "" = "preview_scrolling_down"; - "" = "preview_scrolling_left"; - "" = "preview_scrolling_right"; - - "" = "close"; - "q" = "close"; - } - // insert_and_normal_mappings; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/bibtex/default.nix b/modules/home/soispha/conf/nvim/plgs/telescope/extensions/bibtex/default.nix deleted file mode 100644 index 6f3cc2ea..00000000 --- a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/bibtex/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{pkgs, ...}: { - # WARNING: This is only activated in tex files via the ftplugin. - programs.nixvim = { - extraPlugins = [ - pkgs.vimExtraPlugins.telescope-bibtex-nvim - ]; - keymaps = [ - { - key = "ib"; - # This is registered in the ftplugin file, so we set this to null here - action = ""; - mode = "n"; - options.desc = "[i]nsert a [b]atex citation"; - } - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/default.nix b/modules/home/soispha/conf/nvim/plgs/telescope/extensions/default.nix deleted file mode 100644 index 0b1e033a..00000000 --- a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{...}: { - imports = [ - ./bibtex - ./frecency - ./fzy-native - ./rooter - ./symbols - ]; -} diff --git a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/frecency/default.nix b/modules/home/soispha/conf/nvim/plgs/telescope/extensions/frecency/default.nix deleted file mode 100644 index c1cebc09..00000000 --- a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/frecency/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{...}: { - programs.nixvim = { - keymaps = [ - { - key = "gff"; - mode = "n"; - action = "function() require('telescope').extensions.frecency.frecency() end"; - lua = true; - options.desc = "activate the frecency file selection"; - } - ]; - plugins.telescope = { - extensions.frecency = { - enable = true; - settings = { - show_scores = true; - db_safe_mode = false; - default_workspace = "CWD"; # or 'LSP' - }; - }; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/fzy-native/default.nix b/modules/home/soispha/conf/nvim/plgs/telescope/extensions/fzy-native/default.nix deleted file mode 100644 index ce0bdccc..00000000 --- a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/fzy-native/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{...}: { - programs.nixvim.plugins.telescope.extensions.fzy-native = { - enable = true; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/rooter/default.nix b/modules/home/soispha/conf/nvim/plgs/telescope/extensions/rooter/default.nix deleted file mode 100644 index 779448cc..00000000 --- a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/rooter/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{lib, ...}: { - programs.nixvim = { - extraConfigLuaPost = '' - ${lib.strings.fileContents ./lua/rooter.lua} - ''; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/rooter/lua/rooter.lua b/modules/home/soispha/conf/nvim/plgs/telescope/extensions/rooter/lua/rooter.lua deleted file mode 100644 index 7235c5a3..00000000 --- a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/rooter/lua/rooter.lua +++ /dev/null @@ -1,84 +0,0 @@ --- Taken from: https://github.com/desdic/telescope-rooter.nvim/blob/69423216c75a5f1f1477bbf8faf6b0dc8af04099/lua/telescope/_extensions/rooter.lua -local has_telescope, telescope = pcall(require, "telescope") -if not has_telescope then - error("This extension requires telescope.nvim") - return -end - -local has_plenary, plenary = pcall(require, "plenary") -if not has_plenary then - error("This extension requires plenary") - return -end - -local log = plenary.log.new({ plugin = "telescope_rooter", level = "info" }) - --- TODO: expose this function -local toggle = function(_) - vim.g["Telescope#rooter#enabled"] = not vim.g["Telescope#rooter#enabled"] - print("Telescope#rooter#enabled=" .. vim.inspect(vim.g["Telescope#rooter#enabled"])) -end - -local config = { patterns = { ".git" }, enable = true, debug = false } - --- default enabled -vim.g["Telescope#rooter#enabled"] = vim.F.if_nil(config.enable, true) - --- redefine log if debug enabled -if vim.F.if_nil(config.debug, false) then - log = plenary.log.new({ plugin = "telescope_rooter", level = "debug" }) -end - -local group = vim.api.nvim_create_augroup("TelescopeRooter", { clear = true }) - -vim.api.nvim_create_autocmd({ "DirChangedPre" }, { - callback = function() - if vim.g["Telescope#rooter#enabled"] ~= true then - return - end - - if vim.g["Telescope#rooter#oldpwd"] == nil then - vim.g["Telescope#rooter#oldpwd"] = vim.loop.cwd() - log.debug("before " .. vim.inspect(vim.loop.cwd())) - end - end, - group = group, -}) - -vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, { - callback = function() - if vim.g["Telescope#rooter#enabled"] ~= true then - return - end - - vim.schedule(function() - if vim.bo.filetype == "TelescopePrompt" then - local rootdir = vim.fs.dirname(vim.fs.find(config.patterns, { upward = true })[1]) - if rootdir ~= nil then - vim.api.nvim_set_current_dir(rootdir) - log.debug("changing dir to " .. rootdir) - end - end - end) - end, - group = group, -}) - -vim.api.nvim_create_autocmd({ "BufWinLeave" }, { - callback = function() - if vim.g["Telescope#rooter#enabled"] ~= true then - return - end - - vim.schedule(function() - if vim.bo.filetype ~= "TelescopePrompt" then - if vim.g["Telescope#rooter#oldpwd"] ~= nil then - log.debug("restoring " .. vim.g["Telescope#rooter#oldpwd"]) - vim.api.nvim_set_current_dir(vim.g["Telescope#rooter#oldpwd"]) - vim.g["Telescope#rooter#oldpwd"] = nil - end - end - end) - end, - group = group, -}) diff --git a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/symbols/default.nix b/modules/home/soispha/conf/nvim/plgs/telescope/extensions/symbols/default.nix deleted file mode 100644 index fa166c02..00000000 --- a/modules/home/soispha/conf/nvim/plgs/telescope/extensions/symbols/default.nix +++ /dev/null @@ -1,55 +0,0 @@ -{pkgs, ...}: { - programs.nixvim = { - extraPlugins = [ - # Source of symbols for telescope symbols - pkgs.vimPlugins.telescope-symbols-nvim - ]; - keymaps = [ - { - key = "il"; - mode = "n"; - action = '' - function() - require('telescope.builtin').symbols{ sources = { - 'latex' - }} - end - ''; - lua = true; - options.desc = "[i]nsert a [l]atex symbol"; - } - { - key = "ie"; - mode = "n"; - action = '' - function() - require('telescope.builtin').symbols{ sources = { - 'emoji', - }} - end - ''; - lua = true; - options.desc = "[i]nsert a [e]moji"; - } - { - key = "is"; - mode = "n"; - action = '' - function() - require('telescope.builtin').symbols{ sources = { - 'emoji', - 'gitmoji', - 'julia', - 'kaomoji', - 'latex', - 'math', - 'nerd', - }} - end - ''; - lua = true; - options.desc = "[i]nsert a [s]ymbol (like emojis)"; - } - ]; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/telescope/keymaps/default.nix b/modules/home/soispha/conf/nvim/plgs/telescope/keymaps/default.nix deleted file mode 100644 index e551cc5a..00000000 --- a/modules/home/soispha/conf/nvim/plgs/telescope/keymaps/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{...}: { - programs.nixvim.plugins.telescope.keymaps = { - "rg" = { - action = "live_grep"; - options = { - desc = "[rg] in a live session"; - }; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/todo-comments/default.nix b/modules/home/soispha/conf/nvim/plgs/todo-comments/default.nix deleted file mode 100644 index 35f4b283..00000000 --- a/modules/home/soispha/conf/nvim/plgs/todo-comments/default.nix +++ /dev/null @@ -1,49 +0,0 @@ -{...}: { - programs.nixvim.plugins.todo-comments = { - enable = true; - guiStyle = { - fg = "BOLD"; - bg = "NONE"; - }; - highlight = { - keyword = "wide_fg"; - }; - keywords = { - /* - # Defaults: - FIX = { - icon = " "; # Icon used for the sign, and in search results. - color = "error"; # Can be a hex color, or a named color. - alt = ["FIXME" "BUG" "FIXIT" "ISSUE"]; # A set of other keywords that all map to this FIX keywords. - }; - TODO = { - icon = " "; - color = "info"; - }; - HACK = { - icon = " "; - color = "warning"; - }; - WARN = { - icon = " "; - color = "warning"; - alt = ["WARNING" "XXX"]; - }; - PERF = { - icon = "󰅒 "; - alt = ["OPTIM" "PERFORMANCE" "OPTIMIZE"]; - }; - NOTE = { - icon = "󰍨 "; - color = "hint"; - alt = ["INFO"]; - }; - TEST = { - icon = "⏲ "; - color = "test"; - alt = ["TESTING" "PASSED" "FAILED"]; - }; - */ - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/treesitter/default.nix b/modules/home/soispha/conf/nvim/plgs/treesitter/default.nix deleted file mode 100644 index fe43ddd7..00000000 --- a/modules/home/soispha/conf/nvim/plgs/treesitter/default.nix +++ /dev/null @@ -1,55 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: { - programs.nixvim = { - plugins.treesitter = { - enable = true; - - ensureInstalled = "all"; - indent = true; - - # inject nixvim specific highlighting (eg in extraConfigLua). - nixvimInjections = true; - - grammarPackages = - config.programs.nixvim.plugins.treesitter.package.passthru.allGrammars - ++ [pkgs.yts-grammar]; - - disabledLanguages = []; - - /* - # TODO: this is not supported by the NixVim module, NixNeovim supports this though.. - highlight = { - # `false` will disable the whole extension - enable = true; - disable = ["latex"]; - - # Setting this to true will run `:h syntax` and tree-sitter at the same time. - # Set this to `true` if you depend on 'syntax' being enabled (like for indentation). - # Using this option may slow down your editor; and you may see some duplicate highlights. - # Instead of true it can also be a list of languages - additionalVimRegexHighlighting = [""]; - }; - */ - - incrementalSelection = { - enable = true; - keymaps = { - # TODO: include these in the which-key description - initSelection = "gnn"; # set to `false` to disable one of the mappings - nodeIncremental = "grn"; - scopeIncremental = "grc"; - nodeDecremental = "grm"; - }; - }; - }; - extraFiles = { - "queries/yts/highlights.scm" = '' - ${lib.strings.fileContents "${pkgs.yts-grammar}/queries/highlights.scm"} - ''; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/vim-tex/default.nix b/modules/home/soispha/conf/nvim/plgs/vim-tex/default.nix deleted file mode 100644 index 70ec7f5b..00000000 --- a/modules/home/soispha/conf/nvim/plgs/vim-tex/default.nix +++ /dev/null @@ -1,57 +0,0 @@ -{...}: { - programs.nixvim = { - opts.conceallevel = 0; - - plugins.vimtex = { - enable = true; - settings = { - view_method = "zathura"; - quickfix_mode = -1; - view_enabled = -1; - tex_conceal = "abdmg"; - tex_flavor = "latex"; - - # Useful if treesitter is the highlighter - syntax_enabled = 0; - syntax_conceal_disable = 1; - - mappings_disable = { - n = ["tsf" "tsc" "tse" "ts$" "tsd" "tsD"]; - x = ["tsd" "tsD" "tsf"]; - }; - - toc_config = { - name = "TOC"; - layers = ["content" "todo" "include"]; - resize = false; - split_width = 49; - todo_sorted = -1; - show_help = false; - show_numbers = false; - mode = true; - layer_keys = { - content = "C"; - label = "L"; - todo = "j"; - include = "I"; - }; - }; - - compiler_latexmk = { - build_dir = "build"; - callback = false; - continuous = true; - executable = "latexmk"; - hooks = []; - options = [ - "-verbose" - "-file-line-error" - "-synctex=0" - "-interaction=nonstopmode" - "-outdir=build" - ]; - }; - }; - }; - }; -} diff --git a/modules/home/soispha/conf/nvim/plgs/which-key/default.nix b/modules/home/soispha/conf/nvim/plgs/which-key/default.nix deleted file mode 100644 index be63f7ac..00000000 --- a/modules/home/soispha/conf/nvim/plgs/which-key/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{...}: { - programs.nixvim.plugins.which-key = { - enable = true; - }; -} diff --git a/modules/home/soispha/conf/prusa_slicer/default.nix b/modules/home/soispha/conf/prusa_slicer/default.nix deleted file mode 100644 index 9529e13d..00000000 --- a/modules/home/soispha/conf/prusa_slicer/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - xdg.configFile."PrusaSlicer/PrusaSlicer.ini".source = ./prusa_slicer.ini; -} diff --git a/modules/home/soispha/conf/prusa_slicer/prusa_slicer.ini b/modules/home/soispha/conf/prusa_slicer/prusa_slicer.ini deleted file mode 100644 index 0416a398..00000000 --- a/modules/home/soispha/conf/prusa_slicer/prusa_slicer.ini +++ /dev/null @@ -1,65 +0,0 @@ -alert_when_supports_needed = 1 -allow_auto_color_change = 1 -allow_ip_resolve = 1 -auto_toolbar_size = 100 -autocenter = 0 -background_processing = 0 -clear_undo_redo_stack_on_new_project = 1 -collapsed_sidebar = 0 -color_mapinulation_panel = 0 -custom_toolbar_size = 100 -default_action_on_close_application = none -default_action_on_new_project = none -default_action_on_select_preset = none -downloader_url_registered = 1 -drop_project_action = 1 -export_sources_full_pathnames = 0 -no_controller = 1 -no_defaults = 1 -no_templates = 0 -non_manifold_edges = 1 -notify_release = all -order_volumes = 1 -preset_update = 1 -remember_output_path = 1 -remember_output_path_removable = 1 -restore_win_position = 1 -reverse_mouse_wheel_zoom = 0 -seq_top_layer_only = 1 -show_drop_project_dialog = 1 -show_hints = 1 -show_incompatible_presets = 0 -show_splash_screen = 1 -single_instance = 0 -use_binary_gcode_when_supported = 0 -use_custom_toolbar_size = 0 -use_free_camera = 0 -use_inches = 0 -use_perspective_camera = 1 -view_mode = advanced -wifi_config_dialog_declined = 0 -window_mainframe = 3; 33; 1914; 1044; 1 - -[filaments] -Generic PETG @PGIS = 1 -Generic PLA @PGIS = 1 -Generic PLA Silk @PGIS = 1 -Prusa PETG @PGIS = 1 -Prusa PLA @PGIS = 1 -Prusament PETG @PGIS = 1 -Prusament PLA = 1 -Prusament PLA @PGIS = 1 -Prusament PLA @Template = 1 -Prusament PLA Blend @PGIS = 1 -Prusament rPLA @PG = 1 - -[presets] -filament = Prusament PLA -physical_printer = -print = 0.25mm DRAFT @MINI -printer = Original Prusa MINI & MINI+ -sla_material = -sla_print = - -[vendor:PrusaResearch] -model:MINI = 0.4 diff --git a/modules/home/soispha/conf/python/default.nix b/modules/home/soispha/conf/python/default.nix deleted file mode 100644 index 826d466d..00000000 --- a/modules/home/soispha/conf/python/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{config, ...}: { - xdg.configFile."python/pythonrc".source = ./pythonrc.py; - programs.zsh.sessionVariables = { - "PYTHONSTARTUP" = "${config.xdg.configHome}/python/pythonrc"; - }; -} diff --git a/modules/home/soispha/conf/python/pythonrc.py b/modules/home/soispha/conf/python/pythonrc.py deleted file mode 100644 index 466d9788..00000000 --- a/modules/home/soispha/conf/python/pythonrc.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python3 - - -def is_vanilla() -> bool: - import sys - - return not hasattr(__builtins__, "__IPYTHON__") and "bpython" not in sys.argv[0] - - -def setup_history(): - import os - import atexit - import readline - from pathlib import Path - - if state_home := os.environ.get("XDG_DATA_HOME"): - state_home = Path(state_home) - else: - state_home = Path.home() / ".local" / "state" - - history: Path = state_home / "python" / "history" - - if not os.path.exists(history): - open(history, "w") - - readline.read_history_file(str(history)) - atexit.register(readline.write_history_file, str(history)) - - -if is_vanilla(): - setup_history() - -# vim: ft=python diff --git a/modules/home/soispha/conf/rclone/default.nix b/modules/home/soispha/conf/rclone/default.nix deleted file mode 100644 index bd0c1ac2..00000000 --- a/modules/home/soispha/conf/rclone/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - config, - pkgs, - ... -}: { - xdg.configFile."rclone/rclone.conf".source = ./rclone.conf; -} diff --git a/modules/home/soispha/conf/rclone/rclone.conf b/modules/home/soispha/conf/rclone/rclone.conf deleted file mode 100644 index 9e1c4f08..00000000 --- a/modules/home/soispha/conf/rclone/rclone.conf +++ /dev/null @@ -1,10 +0,0 @@ -[vhack1] -type = sftp -host = server1.vhack.eu -user = soispha -key_use_agent = true -known_hosts_file = ~/.local/share/ssh/known_hosts -shell_type = unix -md5sum_command = md5sum -sha1sum_command = sha1sum - diff --git a/modules/home/soispha/conf/rofi/default.nix b/modules/home/soispha/conf/rofi/default.nix deleted file mode 100644 index 10363ab5..00000000 --- a/modules/home/soispha/conf/rofi/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{pkgs, ...}: { - programs.rofi = { - enable = true; - package = pkgs.rofi-wayland; - terminal = "${pkgs.alacritty}/bin/alacritty"; - # show-icons = true; - # location = "center"; - theme = ./nord-twoLines.rasi; - }; -} diff --git a/modules/home/soispha/conf/rofi/nord-twoLines.rasi b/modules/home/soispha/conf/rofi/nord-twoLines.rasi deleted file mode 100644 index 612b907f..00000000 --- a/modules/home/soispha/conf/rofi/nord-twoLines.rasi +++ /dev/null @@ -1,101 +0,0 @@ -/******************************************************************************* - * ROFI TWO LINES THEME USING THE NORD COLOR PALETTE - * User : LR-Tech - * Theme Repo : https://github.com/lr-tech/rofi-themes-collection - * Nord Project Repo : https://github.com/arcticicestudio/nord - *******************************************************************************/ - -* { - font: "Fira Code 10"; - - nord0: #2e3440; - nord1: #3b4252; - nord2: #434c5e; - nord3: #4c566a; - - nord4: #d8dee9; - nord5: #e5e9f0; - nord6: #eceff4; - - nord7: #8fbcbb; - nord8: #88c0d0; - nord9: #81a1c1; - nord10: #5e81ac; - nord11: #bf616a; - - nord12: #d08770; - nord13: #ebcb8b; - nord14: #a3be8c; - nord15: #b48ead; - - background-color: transparent; - text-color: @nord4; - accent-color: @nord8; - - margin: 0px; - padding: 0px; - spacing: 0px; -} - -window { - background-color: @nord0; - - location: north; - width: 100%; -} - -inputbar { - padding: 2px 8px; - spacing: 8px; - children: [ prompt, entry ]; -} - -prompt, entry, element-text, element-icon { - vertical-align: 0.5; -} - -prompt { - text-color: @accent-color; -} - -listview { - lines: 1; - columns: 4; -} - -element { - padding: 1px 8px; - spacing: 4px; -} - -element normal urgent { - text-color: @nord13; -} - -element normal active { - text-color: @accent-color; -} - -element selected { - text-color: @nord0; -} - -element selected normal { - background-color: @accent-color; -} - -element selected urgent { - background-color: @nord13; -} - -element selected active { - background-color: @nord8; -} - -element-icon { - size: 0.75em; -} - -element-text { - text-color: inherit; -} diff --git a/modules/home/soispha/conf/ssh/default.nix b/modules/home/soispha/conf/ssh/default.nix deleted file mode 100644 index de9b0d90..00000000 --- a/modules/home/soispha/conf/ssh/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{config, ...}: { - programs.ssh = { - enable = true; - compression = true; - hashKnownHosts = false; - serverAliveInterval = 240; - userKnownHostsFile = "${config.xdg.dataHome}/ssh/known_hosts"; - - matchBlocks = { - "codeberg.org" = { - # TODO: Remove this once they fix their ipv6 config - addressFamily = "inet"; - }; - }; - }; -} diff --git a/modules/home/soispha/conf/starship/default.nix b/modules/home/soispha/conf/starship/default.nix deleted file mode 100644 index 5db6eb8b..00000000 --- a/modules/home/soispha/conf/starship/default.nix +++ /dev/null @@ -1,119 +0,0 @@ -{ - lib, - nixosConfig, - pkgs, - ... -}: { - programs.starship = { - enable = true; - enableZshIntegration = true; - settings = { - add_newline = false; - format = lib.concatStrings [ - "$directory" - "$username" - "$cmd_duration" - "$status" - "$character" - ]; - right_format = lib.concatStrings ( - [ - "$git_metrics" - "$git_branch" - "$git_status" - "$git_commit" - "$git_state" - "$time" - ] - ++ lib.optional - nixosConfig.soispha.laptop.enable - "$battery" - ); - scan_timeout = 20; - character = { - # success_symbol = "[❯](bold blue)"; - # a = "⬢"; - success_symbol = "[](bold blue)"; - error_symbol = "[](bold red)"; - }; - status = { - disabled = false; - format = "([($common_meaning )($status)( $signal_name)]($style) )"; - }; - time = { - disabled = false; - format = "[\\[$time\\]]($style)"; - }; - username = { - format = "as [$user]($style) "; - }; - git_branch = { - format = "[($symbol$branch(:$remote_branch) )]($style)"; - }; - git_status = { - disabled = true; - format = "([\\[$ahead_behind\\]]($style) )"; - ahead = "⇡$count"; - diverged = "⇕⇡$ahead_count⇣$behind_count"; - behind = "⇣$count"; - }; - git_metrics = { - disabled = true; - ignore_submodules = true; - }; - git_state = { - format = "[\($state( $progress_current of $progress_total)\)]($style) "; - rebase = "[rebasing](bold magenta)"; - merge = "[merging](bold yellow)"; - revert = "[reverting](bold blue)"; - cherry_pick = "[picking](bold red)"; - bisect = "[bisecting](bold red)"; - am = "[applying](bold green)"; - am_or_rebase = "[applying/rebasing](bold yellow)"; - }; - git_commit = { - disabled = true; - tag_disabled = false; - tag_symbol = "v"; - format = "[(\\[$tag\\] )]($style)"; - }; - directory = { - truncate_to_repo = true; - read_only = " 󰌾"; - before_repo_root_style = "black bold dimmed"; - }; - cmd_duration = { - min_time = 2000; # Milliseconds - style = "bold white"; - }; - custom = { - # status_output = { - # format = "$output"; - # command = "if test $STARSHIP_CMD_STATUS -ne 0; then echo \"bold red\"; else echo \"bold cyan\"; fi"; - # shell = [ "${pkgs.dash}" ]; - # }; - }; - battery = { - # '󰁹 ' - # '󰂄 ' - # '󰂃 ' - # '󰁽 ' - # '󰂎 ' - display = [ - { - threshold = 10; - style = "bold red"; - } - { - threshold = 30; - style = "bold blue"; - } - { - threshold = 50; - style = "bold green"; - } - ]; - }; - }; - }; -} diff --git a/modules/home/soispha/conf/swayidle/config b/modules/home/soispha/conf/swayidle/config deleted file mode 100644 index a48f670b..00000000 --- a/modules/home/soispha/conf/swayidle/config +++ /dev/null @@ -1,5 +0,0 @@ -timeout 180 'swaylock -fF' - -timeout 360 'systemctl suspend-then-hibernate' - -before-sleep 'swaylock -f' diff --git a/modules/home/soispha/conf/swayidle/default.nix b/modules/home/soispha/conf/swayidle/default.nix deleted file mode 100644 index 6b8a7d80..00000000 --- a/modules/home/soispha/conf/swayidle/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - config, - pkgs, - ... -}: { - xdg.configFile."swayidle/config".source = ./config; - - # services.swayidle = { - # enable = true; - # events = [ - # { - # event = "before-sleep"; - # command = "${pkgs.swaylock}/bin/swaylock -f "; - # } - # ]; - # timeouts = [ - # { - # timeout = 180; - # command = "${pkgs.swaylock}/bin/swaylock -fFu "; - # } - # { - # timeout = 360; - # # TODO: systemctl is installed? - # command = "systemctl suspend-then-hibernate"; - # } - # ]; - # # systemdTarget = ""; # TODO: this might be usefull - # }; -} diff --git a/modules/home/soispha/conf/swaylock/GTDcanonical.png b/modules/home/soispha/conf/swaylock/GTDcanonical.png deleted file mode 100644 index ef41d79d..00000000 Binary files a/modules/home/soispha/conf/swaylock/GTDcanonical.png and /dev/null differ diff --git a/modules/home/soispha/conf/swaylock/commands.jpg b/modules/home/soispha/conf/swaylock/commands.jpg deleted file mode 100644 index 54016503..00000000 Binary files a/modules/home/soispha/conf/swaylock/commands.jpg and /dev/null differ diff --git a/modules/home/soispha/conf/swaylock/default.nix b/modules/home/soispha/conf/swaylock/default.nix deleted file mode 100644 index 9e5eabac..00000000 --- a/modules/home/soispha/conf/swaylock/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{...}: { - programs.swaylock = { - enable = true; - settings = { - image = "${./GTDcanonical.png}"; - scaling = "center"; - color = "000000"; - }; - }; -} diff --git a/modules/home/soispha/conf/swaylock/gnu.png b/modules/home/soispha/conf/swaylock/gnu.png deleted file mode 100644 index d07dee3e..00000000 Binary files a/modules/home/soispha/conf/swaylock/gnu.png and /dev/null differ diff --git a/modules/home/soispha/conf/taskwarrior/default.nix b/modules/home/soispha/conf/taskwarrior/default.nix deleted file mode 100644 index d7aec156..00000000 --- a/modules/home/soispha/conf/taskwarrior/default.nix +++ /dev/null @@ -1,125 +0,0 @@ -{ - nixosConfig, - lib, - config, - ... -}: { - imports = [ - ./hooks - ]; - - services.taskwarrior-sync = { - enable = true; - }; - - programs.taskwarrior = let - projects = import ./projects {}; - - mkContext = project: - if builtins.hasAttr "subprojects" project - then - lib.lists.flatten ( - (builtins.map mkContext (builtins.map (mkProject project) project.subprojects)) - ++ (mkContext (builtins.removeAttrs project ["subprojects"])) - ) - else [ - { - inherit (project) name; - value = let - name = - if builtins.hasAttr "pname" project - then project.pname - else project.name; - in { - read = "project:${name}"; - write = "project:${name}"; - rc = { - neorg_path = - if builtins.hasAttr "neorg_path" project - then project.neorg_path - else "${project.prefix}/${project.name}/index.norg"; - }; - }; - } - ]; - mkProject = project: subproject: let - pname = - if builtins.hasAttr "pname" project - then project.pname - else project.name; - in - if builtins.isString subproject - then { - name = "${project.name}_${subproject}"; - pname = "${pname}.${subproject}"; - neorg_path = - if builtins.hasAttr "neorg_path_prefix" project - then "${project.neorg_path_prefix}/${subproject}/index.norg" - else "${project.prefix}/${project.name}/${subproject}/index.norg"; - } - else if builtins.isAttrs subproject - then let - name = builtins.elemAt (builtins.attrNames subproject) 0; - in { - name = "${project.name}_${name}"; - pname = "${pname}.${name}"; - prefix = "${project.prefix}/${project.name}"; - neorg_path_prefix = "${project.prefix}/${project.name}/${name}"; - subprojects = builtins.elemAt (builtins.attrValues subproject) 0; - } - else builtins.throw "Subproject not a string or a attrs: ${subproject}"; - - context = - builtins.listToAttrs (lib.lists.flatten (builtins.map mkContext projects)); - in { - enable = true; - colorTheme = ./nord.theme; - extraConfig = '' - # This include just contains my taskd user credentials - include ${nixosConfig.age.secrets.taskserverCredentials.path} - ''; - config = { - news.version = "2.6.0"; - complete.all.tags = true; - list.all = { - projects = true; - tags = true; - }; - regex = true; - weekstart = "Monday"; - uda = { - total_active_time = { - type = "duration"; - label = "Total active time"; - }; - }; - alias = { - mod = "modify"; - n = "execute neorg --task"; - fstart = "execute neorg fstart"; - }; - color = true; - - hooks.location = "${config.xdg.configHome}/task/hooks"; - - urgency.uda.priority = { - H.coefficient = 6.0; - M.coefficient = 0; - L.coefficient = -1.8; - }; - - inherit context; - - taskd = { - server = "taskserver.vhack.eu:53589"; - trust = "strict"; - ca = - nixosConfig.age.secrets.taskserverCA.path; - key = - nixosConfig.age.secrets.taskserverPrivate.path; - certificate = - nixosConfig.age.secrets.taskserverPublic.path; - }; - }; - }; -} diff --git a/modules/home/soispha/conf/taskwarrior/firefox/default.nix b/modules/home/soispha/conf/taskwarrior/firefox/default.nix deleted file mode 100644 index fb5daaa8..00000000 --- a/modules/home/soispha/conf/taskwarrior/firefox/default.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ - config, - lib, - # options - prefConfig, - profile_size, - search, - userChrome, - ... -}: let - inherit (config.soispha.taskwarrior.projects) projects; - - mkFirefoxProfile = { - name, - id, - }: { - inherit name; - value = { - isDefault = false; - extraConfig = prefConfig; - inherit id name search userChrome; - }; - }; - projects_id = - lib.imap0 (id: project: { - name = project; - id = id + profile_size; - }) - projects; - firefoxProfiles = builtins.listToAttrs (builtins.map mkFirefoxProfile projects_id); -in - firefoxProfiles diff --git a/modules/home/soispha/conf/taskwarrior/hooks/default.nix b/modules/home/soispha/conf/taskwarrior/hooks/default.nix deleted file mode 100644 index 4bac0ca7..00000000 --- a/modules/home/soispha/conf/taskwarrior/hooks/default.nix +++ /dev/null @@ -1,112 +0,0 @@ -{ - sysLib, - pkgs, - lib, - config, - ... -}: let - mkProject = project: subproject: - if builtins.isString subproject - then { - name = "${project.name}.${subproject}"; - prefix = null; - } - else let - name = builtins.elemAt (builtins.attrNames subproject) 0; - in { - name = "${project.name}.${name}"; - subprojects = builtins.elemAt (builtins.attrValues subproject) 0; - prefix = null; - }; - - mkProjectName = project: - if builtins.hasAttr "subprojects" project - then - lib.lists.flatten ([project.name] - ++ (builtins.map mkProjectName - (builtins.map (mkProject project) project.subprojects))) - else [project.name]; - projects = lib.lists.unique (lib.lists.naturalSort (lib.lists.flatten (builtins.map mkProjectName (import ../projects {})))); - projects_newline = builtins.concatStringsSep "\n" projects; - projects_comma = builtins.concatStringsSep ", " projects; - projects_pipe = builtins.concatStringsSep "|" projects; - - enforce_policies = sysLib.writeShellScript { - name = "bin"; - src = ./scripts/on-add_enforce-policies.sh; - dependencies = with pkgs; [dash jq taskwarrior gnused gnugrep]; - replacementStrings = { - PROJECTS_NEWLINE = projects_newline; - PROJECTS_COMMA = projects_comma; - }; - }; - track_timewarrior = pkgs.stdenv.mkDerivation { - name = "track_timewarrior.taskwarrior-hook"; - nativeBuildInputs = [ - pkgs.makeWrapper - ]; - buildInputs = [ - pkgs.timewarrior - pkgs.taskwarrior - (pkgs.python3.withPackages (pythonPackages: - with pythonPackages; [ - taskw - ])) - ]; - dontUnpack = true; - installPhase = '' - install -Dm755 ${./scripts/on-modify_track-timewarrior.py} $out/bin/bin - wrapProgram $out/bin/bin \ - --prefix PATH : ${lib.makeBinPath [pkgs.taskwarrior pkgs.timewarrior]} - ''; - }; - track_total_active_time = pkgs.stdenv.mkDerivation { - name = "track_total_active_time.taskwarrior-hook"; - nativeBuildInputs = [ - pkgs.makeWrapper - ]; - buildInputs = [ - pkgs.taskwarrior - (pkgs.python3.withPackages (pythonPackages: - with pythonPackages; [ - taskw - ])) - ]; - dontUnpack = true; - installPhase = '' - install -Dm755 ${./scripts/on-modify_track-total-active-time.py} $out/bin/bin - wrapProgram $out/bin/bin \ - --prefix PATH : ${lib.makeBinPath [pkgs.taskwarrior]} - ''; - }; - - mkSyncGitRepo = type: { - name = "${hookPath}/${type}_sync-git-repo"; - value = { - source = "${sysLib.writeShellScript { - name = "bin"; - src = ./scripts + "/${type}_sync-git-repo.sh"; - dependencies = with pkgs; [dash taskwarrior git]; - }}/bin/bin"; - }; - }; - sync_git_repos = - builtins.listToAttrs (builtins.map mkSyncGitRepo ["on-add" "on-modify"]); - hookPath = config.programs.taskwarrior.config.hooks.location; -in { - options.soispha.taskwarrior.projects = lib.mkOption { - type = lib.types.attrs; - }; - config = { - soispha.taskwarrior.projects = { - inherit projects_newline projects_comma projects projects_pipe; - }; - home.file = - { - "${hookPath}/on-add_enforce-policies".source = "${enforce_policies}/bin/bin"; - "${hookPath}/on-modify_track-timewarrior".source = "${track_timewarrior}/bin/bin"; - "${hookPath}/on-modify_track-total-active-time".source = "${track_total_active_time}/bin/bin"; - } - // sync_git_repos; - }; -} diff --git a/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-add_enforce-policies.sh b/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-add_enforce-policies.sh deleted file mode 100755 index eaf7f30c..00000000 --- a/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-add_enforce-policies.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# override shell lib output to stdout -eprint() { - # shellcheck disable=SC2317 - print "$@" -} -eprintln() { - # shellcheck disable=SC2317 - println "$@" -} - -enable_hook_dbg() { - debug_hooks="$(task _get rc.debug.hooks)" - [ "$debug_hooks" ] && [ "$debug_hooks" -ge 1 ] && dbg_enable -} - -enforce_project() { - project="$(jq '.project' "$(ptmp "$1")")" - [ "$project" = "null" ] && die "No project supplied!" - - if grep -q "^$(echo "$project" | sed 's|"\(.*\)"|\1|')\$" "$(ptmp "%PROJECTS_NEWLINE")"; then - dbg "project('$project') is a valid part of %PROJECTS_COMMA" - else - die "The project '$(echo "$project" | sed 's|"||g')' is not registered with the nix config, registered projects: %PROJECTS_COMMA" - fi -} - -read -r new_task -# We don't change the task, thus immediately return the json -echo "$new_task" - -enable_hook_dbg -enforce_project "$new_task" - -exit 0 - -# vim: ft=sh diff --git a/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-add_sync-git-repo.sh b/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-add_sync-git-repo.sh deleted file mode 100755 index dadc96b0..00000000 --- a/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-add_sync-git-repo.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# override shell lib output to stdout -eprint() { - # shellcheck disable=SC2317 - print "$@" -} -eprintln() { - # shellcheck disable=SC2317 - println "$@" -} - -enable_hook_dbg() { - debug_hooks="$(task _get rc.debug.hooks)" - [ "$debug_hooks" ] && [ "$debug_hooks" -ge 1 ] && dbg_enable -} - -update_git_repo() { - task_data="$(task _get rc.data.location)" - [ "$task_data" ] || die "Taskwarrior should have a location set" - - cd "$task_data" || die "(BUG?): Your data.location path is not accessable" - - [ -d ./.git/ ] || git init - - git add . - git commit --message="chore: Update" --no-gpg-sign -} - -read -r new_task -# We don't change the task, thus immediately return the json -echo "$new_task" - -enable_hook_dbg -update_git_repo - -exit 0 - -# vim: ft=sh diff --git a/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-modify_sync-git-repo.sh b/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-modify_sync-git-repo.sh deleted file mode 100755 index 25813e46..00000000 --- a/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-modify_sync-git-repo.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# override shell lib output to stdout -eprint() { - # shellcheck disable=SC2317 - print "$@" -} -eprintln() { - # shellcheck disable=SC2317 - println "$@" -} - -enable_hook_dbg() { - debug_hooks="$(task _get rc.debug.hooks)" - [ "$debug_hooks" ] && [ "$debug_hooks" -ge 1 ] && dbg_enable -} - -update_git_repo() { - task_data="$(task _get rc.data.location)" - [ "$task_data" ] || die "Taskwarrior should have a location set" - - cd "$task_data" || die "(BUG?): Your data.location path is not accessable" - - [ -d ./.git/ ] || git init - - git add . - git commit --message="chore: Update" --no-gpg-sign -} - -read -r _old_task -read -r new_task -# We don't change the task, thus immediately return the json -echo "$new_task" - -enable_hook_dbg -update_git_repo - -exit 0 - -# vim: ft=sh diff --git a/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-modify_track-timewarrior.py b/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-modify_track-timewarrior.py deleted file mode 100755 index b482af6a..00000000 --- a/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-modify_track-timewarrior.py +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright (C) 2016-present Arctic Ice Studio -# Copyright (C) 2016-present Sven Greb - -# Project: igloo -# Repository: https://github.com/arcticicestudio/igloo -# License: MIT -# References: -# https://taskwarrior.org/docs -# https://taskwarrior.org/docs/timewarrior -# timew(1) -# task(1) - -"""A Taskwarrior hook to track the time of a active task with Taskwarrior. - -This hook will extract all of the following for use as Timewarrior tags: - -* UUID -* Project -* Tags -* Description -* UDAs - -Note: - This hook requires Python 3 and is only compatible with Taskwarrior version greater or equal to 2.4! - -This hook is a fork from the `official on-modify.timewarrior hook`_. - -.. _`official on-modify.timewarrior hook`: - https://github.com/GothenburgBitFactory/timewarrior/blob/dev/ext/on-modify.timewarrior -""" - -import subprocess -import sys -from json import loads, dumps -from os import system -from sys import stdin -from taskw import TaskWarrior - -# Make no changes to the task, simply observe. -old = loads(stdin.readline()) -new = loads(stdin.readline()) -print(dumps(new)) - - -w = TaskWarrior(config_filename=sys.argv[4].replace("rc:", "")) -config = w.load_config(config_filename=sys.argv[4].replace("rc:", "")) -if "max_active_tasks" in config: - MAX_ACTIVE = int(config["max_active_tasks"]) -else: - MAX_ACTIVE = 1 - - -# Extract attributes for use as tags. -tags = [new["description"]] - -if "project" in new: - project = new["project"] - tags.append(project) - if "." in project: - tags.extend([tag for tag in project.split(".")]) - -if "tags" in new: - tags.extend(new["tags"]) - -combined = " ".join(["'%s'" % tag for tag in tags]).encode("utf-8").strip() - -# Task has been started. -if "start" in new and "start" not in old: - # Prevent this task from starting if "task +ACTIVE count" is greater than "MAX_ACTIVE". - p = subprocess.Popen( - ["task", "+ACTIVE", "status:pending", "count", "rc.verbose:off"], - stdout=subprocess.PIPE, - ) - out, err = p.communicate() - count = int(out.rstrip()) - if count >= MAX_ACTIVE: - print( - "Only %d task(s) can be active at a time. " - "See 'max_active_tasks' in .taskrc." % MAX_ACTIVE - ) - sys.exit(1) - - system("timew start " + combined.decode() + " :yes") - -# Task has been stopped. -elif "start" not in new and "start" in old: - system("timew stop " + combined.decode() + " :yes") - -# Any task that is active, with a non-pending status should not be tracked. -elif "start" in new and new["status"] != "pending": - system("timew stop " + combined.decode() + " :yes") diff --git a/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-modify_track-total-active-time.py b/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-modify_track-total-active-time.py deleted file mode 100755 index d5b380d0..00000000 --- a/modules/home/soispha/conf/taskwarrior/hooks/scripts/on-modify_track-total-active-time.py +++ /dev/null @@ -1,148 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright (C) 2016-present Arctic Ice Studio -# Copyright (C) 2016-present Sven Greb - -# Project: igloo -# Repository: https://github.com/arcticicestudio/igloo -# License: MIT -# References: -# https://taskwarrior.org/docs -# task(1) - -"""A Taskwarrior hook to track the total active time of a task. - -The tracked time is stored in a UDA task duration attribute named ``totalactivetime`` of type ``duration`` holding the total number of seconds the task was -active. The tracked time can then be included in any report by adding the ``totalactivetime`` column. - -By default, this plugin allows to have one task active at a time. This can be changed by setting ``max_active_tasks`` in ``.taskrc`` to a value greater than -``1``. - -Note: - This hook requires Python 3 and the `taskw`_ package to be installed which provides the python bindings for Taskwarrior! - Also note that this hook is only compatible with Taskwarrior version greater or equal to 2.4! - -This hook is a fork from `kostajh/taskwarrior-time-tracking-hook`_ - -.. _taskw: - https://pypi.python.org/pypi/taskw -.. _kostajh/taskwarrior-time-tracking-hook: - https://github.com/kostajh/taskwarrior-time-tracking-hook -""" - -import datetime -import json -import re -import sys -import subprocess -from taskw import TaskWarrior -from typing import TypeVar - -TIME_FORMAT = "%Y%m%dT%H%M%SZ" -UDA_KEY = "total_active_time" - -w = TaskWarrior(config_filename=sys.argv[4].replace("rc:", "")) -config = w.load_config(config_filename=sys.argv[4].replace("rc:", "")) -if "max_active_tasks" in config: - MAX_ACTIVE = int(config["max_active_tasks"]) -else: - MAX_ACTIVE = 1 - -"""Compiled regular expression for the duration as ISO-8601 formatted string.""" -ISO8601DURATION = re.compile("P((\d*)Y)?((\d*)M)?((\d*)D)?T((\d*)H)?((\d*)M)?((\d*)S)?") - -"""The duration type either as integer (in seconds), as ISO-8601 formatted string ("PT1H10M31S") or the seconds suffixed with "seconds".""" -DurationType = TypeVar("DurationType", str, int) - - -def duration_str_to_time_delta(duration_str: DurationType) -> datetime.timedelta: - """Converts duration string into a timedelta object. - - :param duration_str: The duration - :return: The duration as timedelta object - """ - if duration_str.startswith("P"): - match = ISO8601DURATION.match(duration_str) - if match: - year = match.group(2) - month = match.group(4) - day = match.group(6) - hour = match.group(8) - minute = match.group(10) - second = match.group(12) - value = 0 - if second: - value += int(second) - if minute: - value += int(minute) * 60 - if hour: - value += int(hour) * 3600 - if day: - value += int(day) * 3600 * 24 - if month: - # Assume a month is 30 days for now. - value += int(month) * 3600 * 24 * 30 - if year: - # Assume a year is 365 days for now. - value += int(year) * 3600 * 24 * 365 - else: - value = int(duration_str) - elif duration_str.endswith("seconds"): - value = int(duration_str.rstrip("seconds")) - else: - value = int(duration_str) - return datetime.timedelta(seconds=value) - - -def main(): - original = json.loads(sys.stdin.readline()) - modified = json.loads(sys.stdin.readline()) - - # An active task has just been started. - if "start" in modified and "start" not in original: - # Prevent this task from starting if "task +ACTIVE count" is greater than "MAX_ACTIVE". - p = subprocess.Popen( - ["task", "+ACTIVE", "status:pending", "count", "rc.verbose:off"], - stdout=subprocess.PIPE, - ) - out, err = p.communicate() - count = int(out.rstrip()) - if count >= MAX_ACTIVE: - print( - "Only %d task(s) can be active at a time. " - "See 'max_active_tasks' in .taskrc." % MAX_ACTIVE - ) - sys.exit(1) - - # An active task has just been stopped. - if "start" in original and "start" not in modified: - # Calculate the elapsed time. - start = datetime.datetime.strptime(original["start"], TIME_FORMAT) - end = datetime.datetime.utcnow() - - if UDA_KEY not in modified: - modified[UDA_KEY] = 0 - - this_duration = end - start - total_duration = this_duration + duration_str_to_time_delta( - str(modified[UDA_KEY]) - ) - print( - "Total Time Tracked: %s (%s in this instance)" - % (total_duration, this_duration) - ) - modified[UDA_KEY] = ( - str(int(total_duration.days * (60 * 60 * 24) + total_duration.seconds)) - + "seconds" - ) - - return json.dumps(modified, separators=(",", ":")) - - -def cmdline(): - sys.stdout.write(main()) - - -if __name__ == "__main__": - cmdline() diff --git a/modules/home/soispha/conf/taskwarrior/nord.theme b/modules/home/soispha/conf/taskwarrior/nord.theme deleted file mode 100644 index 2897418f..00000000 --- a/modules/home/soispha/conf/taskwarrior/nord.theme +++ /dev/null @@ -1,100 +0,0 @@ -# Copyright (C) 2016-present Arctic Ice Studio -# Copyright (C) 2016-present Sven Greb - -# Project: igloo -# Repository: https://github.com/arcticicestudio/igloo -# License: MIT -# References: -# https://taskwarrior.org/docs/themes.html -# task-color(5) -# taskrc(5) - -rule.precedence.color=deleted,completed,active,keyword.,tag.,project.,overdue,scheduled,due.today,due,blocked,blocking,recurring,tagged,uda. - -#+---------+ -#+ General + -#+---------+ -color.label= -color.label.sort= -color.alternate= -color.header=bold blue -color.footnote=cyan -color.warning=bold black on yellow -color.error=bold black on red -color.debug=magenta - -#+-------------+ -#+ Task States + -#+-------------+ -color.completed=green -color.deleted=red -color.active=bold black on cyan -color.recurring= -color.scheduled=white on black -color.until=white on bright black -color.blocked=yellow on black -color.blocking=bold yellow on black - -#+----------+ -#+ Projects + -#+----------+ -color.project.none= - -#+----------+ -#+ Priority + -#+----------+ -color.uda.priority.H=bold cyan -color.uda.priority.M=bold blue -color.uda.priority.L=color245 - -#+------+ -#+ Tags + -#+------+ -color.tag.next= -color.tag.none= -color.tagged= - -#+-----+ -#+ Due + -#+-----+ -color.due=blue -color.due.today=cyan on black -color.overdue=bold red - -#+---------+ -#+ Reports + -#+---------+ -color.burndown.done=bold black on cyan -color.burndown.pending=black on bright cyan -color.burndown.started=black on blue - -color.history.add=bold black on blue -color.history.delete=bright white on bold black -color.history.done=bold black on cyan - -color.summary.background=bright white on black -color.summary.bar=black on cyan - -#+----------+ -#+ Calendar + -#+----------+ -color.calendar.due=bold black on blue -color.calendar.due.today=bold black on cyan -color.calendar.holiday=bold blue on white -color.calendar.overdue=bold black on red -color.calendar.today=bold black on cyan -color.calendar.weekend=bright white on bright black -color.calendar.weeknumber=bold black - -#+-----------------+ -#+ Synchronization + -#+-----------------+ -color.sync.added=green -color.sync.changed=yellow -color.sync.rejected=red - -#+------+ -#+ Undo + -#+------+ -color.undo.after=green -color.undo.before=red diff --git a/modules/home/soispha/conf/taskwarrior/projects/default.nix b/modules/home/soispha/conf/taskwarrior/projects/default.nix deleted file mode 100644 index 4ca941b3..00000000 --- a/modules/home/soispha/conf/taskwarrior/projects/default.nix +++ /dev/null @@ -1,115 +0,0 @@ -{}: [ - { - name = "me"; - prefix = ""; - subprojects = ["health" "sweden" "bank"]; - } - { - name = "timesinks"; - prefix = ""; - subprojects = ["youtube" "games" "netflix" "music"]; - } - { - name = "input"; - prefix = "research"; - subprojects = ["read-things" "dotfiles"]; - } - { - name = "aoc"; - prefix = "programming/advent_of_code"; - } - { - name = "camera"; - prefix = "programming/zig"; - subprojects = []; - } - { - name = "trinitrix"; - prefix = "programming/rust"; - subprojects = ["testing" "documentation"]; - } - { - name = "serverphone"; - prefix = "programming/rust"; - } - { - name = "presentation"; - prefix = "research"; - } - { - name = "possible-projects"; - prefix = "research"; - } - { - name = "school"; - prefix = "research"; - subprojects = [ - "biologie" - "chemie" - "deutsch" - "english" - "geographie" - "geschichte" - "infomatik" - "klausuren" - "latein" - "mathematik" - "musik" - "philosophie" - "physik" - "sozialkunde" - "sport" - {extern = ["bwinf" "dsa"];} - {chemie = ["facharbeit"];} # TODO: Remove once the ff tabs are cleared <2024-05-10> - ]; - } - { - name = "hardware"; - prefix = "research"; - } - { - name = "buy"; - prefix = "buy"; - subprojects = ["books" "pc"]; - } - { - name = "system"; - prefix = "config"; - subprojects = [ - "youtube" - "backup" - "bar" - "email" - "firefox" - "gpg" - "keyboard" - "laptop" - "nvim" - "rss" - "shell" - "task" - "wm" - ]; - } - { - name = "server"; - prefix = "config"; - subprojects = [ - "b-peetz" - "email" - "blog" - "nix-sync" - "sudo-less" - "ci" - ]; - } - { - name = "3d-printer"; - prefix = "hardware"; - } - { - name = "smartphone"; - prefix = "hardware"; - subprojects = ["airplay" "airdrop"]; - } -] diff --git a/modules/home/soispha/conf/timewarrior/default.nix b/modules/home/soispha/conf/timewarrior/default.nix deleted file mode 100644 index bcb627f5..00000000 --- a/modules/home/soispha/conf/timewarrior/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{pkgs, ...}: { - home.packages = [ - pkgs.timewarrior - ]; - xdg.configFile."timewarrior/timewarrior.cfg".text = '' - # source: https://github.com/arcticicestudio/igloo - #+----+ - #+ UI + - #+----+ - import ${./nord.theme} - color = true - - #+---------+ - #+ Reports + - #+---------+ - define reports: - day: - lines = 10 - month = true - week = true - ''; -} diff --git a/modules/home/soispha/conf/timewarrior/nord.theme b/modules/home/soispha/conf/timewarrior/nord.theme deleted file mode 100644 index da3c387a..00000000 --- a/modules/home/soispha/conf/timewarrior/nord.theme +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (C) 2016-present Arctic Ice Studio -# Copyright (C) 2016-present Sven Greb - -# Project: igloo -# Repository: https://github.com/arcticicestudio/igloo -# License: MIT -# References: -# https://taskwarrior.org/docs/timewarrior/themes.html -# timew(1) - -define theme: - description = "An arctic, north-bluish clean and elegant Timewarrior theme." - colors: - exclusion = "bold black" - today = "cyan" - holiday = "bold blue on white" - label = "bold white on black" - ids = "bold black on cyan" - debug = "magenta" - - # Rotating color palette for tags. - palette: - color01 = "bold black on cyan" - color02 = "bold black on bright cyan" - color03 = "bold black on blue" diff --git a/modules/home/soispha/conf/tridactyl/config.vim b/modules/home/soispha/conf/tridactyl/config.vim deleted file mode 100644 index 84e290cb..00000000 --- a/modules/home/soispha/conf/tridactyl/config.vim +++ /dev/null @@ -1,47 +0,0 @@ -" vim: filetype=vim - -" This wipes all existing settings. This means that if a setting in this file -" is removed, then it will return to default. In other words, this file serves -" as an enforced single point of truth for Tridactyl's configuration. -sanitize tridactyllocal tridactylsync - -" Just use a blank page for new tab. It would be nicer to use the standard -" Firefox homepage, but Tridactyl doesn't support this yet. -"TODO: use custome file -"set newtab file:///home/soispha/new.html - -" Set a nice colorscheme -colorscheme midnight - -" Delete temp files after use -alias editor_rm composite editor | jsb -p tri.native.run(`rm -f '${JS_ARG[0]}'`) -bind --mode=insert editor_rm -bind --mode=input editor_rm - -" Use vim in tmux for editor. -set editorcmd alacritty -e nvim - -" Ctrl-F should use the browser's native 'find' functionality. -unbind - -" But also support Tridactyl search too. -bind / fillcmdline find -bind ? fillcmdline find -? -bind l findnext 1 -bind L findnext -1 -" Remove search highlighting. -bind , nohlsearch -" Use sensitive case. Smart case would be nice here, but it doesn't work. -set findcase smartcase - -" Smooth scrolling, yes please. This is still a bit janky in Tridactyl. -set smoothscroll true - -" The default jump of 10 is a bit much. -bind t scrollline 5 -bind n scrollline -5 - -" K and J should move between tabs. x should close them. -bind T tabprev -bind N tabnext -bind x tabclose diff --git a/modules/home/soispha/conf/tridactyl/default.nix b/modules/home/soispha/conf/tridactyl/default.nix deleted file mode 100644 index 23307cfe..00000000 --- a/modules/home/soispha/conf/tridactyl/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - xdg.configFile."tridactyl/tridactylrc".source = ./config.vim; -} diff --git a/modules/home/soispha/conf/unison/default.nix b/modules/home/soispha/conf/unison/default.nix deleted file mode 100644 index 64dd50c2..00000000 --- a/modules/home/soispha/conf/unison/default.nix +++ /dev/null @@ -1,184 +0,0 @@ -{ - lib, - config, - nixosConfig, - sysLib, - pkgs, - ... -}: let - unisonPath = "${config.xdg.dataHome}/unison"; - - # These are only used for the script - unisonOptions = { - sshcmd = "ssh"; - ui = "text"; - auto = "true"; - # This is useless, with hm links - links = "false"; - - backupdir = "${unisonPath}/backups"; - backuploc = "central"; - backupcurr = paths_to_merge; - # merge = - # builtins.map (x: ''${x} -> diff3 --text --merge CURRENT1 CURRENTARCH CURRENT2 > NEW'') - # paths_to_merge; - }; - - paths_to_merge = mkPathName { - file_names = ["log" "history" "harpoon.json" "file_frecency.bin" "main.shada"]; - extensions = ["log"]; - }; - - paths_to_keep = [ - "~/.local/state/mpv" - "~/.local/state/nvim" - "~/.local/share" - "~/.local/.Trash-1000" - - "~/.mozilla/.Trash-1000" - "~/.mozilla/firefox" - - "~/media" - "~/school" - "~/repos" - ]; - paths_to_ignore = [ - # already synchronized by the taskserver - "~/.local/share/task" - - # Should not be synchronized - "~/.local/share/unison" - ]; - - hostName = let - hn = nixosConfig.networking.hostName; - in - if hn == "tiamat" - then "apzu" - else if hn == "apzu" - then "tiamat" - else builtins.throw "Host (${hn}) not yet covered in the unison host mapping."; - - mkPathName = { - file_names, - extensions, - }: - builtins.map (x: ''Name ${x}'') ( - (builtins.map (x: ''*.${x}'') extensions) - ++ file_names - ); - - unitName = name: builtins.replaceStrings ["/"] ["-"] name; - - mkPath = path: - if lib.strings.hasPrefix "~" path - then "${builtins.elemAt (builtins.attrNames config.home.persistence) - 0}${lib.strings.removePrefix "~" path}" - else - builtins.throw - "Every pathname needs to start with a '~'"; - - mkPair = pathname: let - path = mkPath pathname; - in { - name = unitName "${pathname}"; - value = { - stateDirectory = unisonPath; - roots = [ - "${path}" - "ssh://${config.home.username}@${hostName}.fritz.box/${path}" - ]; - }; - }; - - getIgnoredSingle = path: path_to_ignore: let - clean_path_to_ignore = mkPath path_to_ignore; - commonPath = builtins.substring 0 (builtins.stringLength path) clean_path_to_ignore; - in - if commonPath == path - then let - preFinalPath = - builtins.substring (builtins.stringLength commonPath) - (builtins.stringLength clean_path_to_ignore) - clean_path_to_ignore; - finalPath = - if lib.strings.hasPrefix "/" preFinalPath - then lib.strings.removePrefix "/" preFinalPath - else preFinalPath; - in "BelowPath ${finalPath}" - else null; - - getIgnored = paths_to_ignore: path: - serialiseArgs { - ignore = - builtins.filter (x: x != null) (builtins.map (getIgnoredSingle path) paths_to_ignore); - }; - - serialiseArg = key: val: - if builtins.typeOf val == "string" - then lib.strings.escapeShellArg "-${key}=${lib.strings.escape ["="] val}" - else if builtins.typeOf val == "list" - then lib.strings.concatStringsSep " " (builtins.map (serialiseArg key) val) - else builtins.throw "Unsupported type: ${builtins.typeOf val}"; - - serialiseArgs = args: - lib.strings.concatStringsSep " " ( - lib.attrsets.mapAttrsToList - serialiseArg - args - ); - - esa = a: lib.strings.escapeShellArg a; - - mkScriptLine = pathname: let - path = - mkPath pathname; - in - lib.strings.concatStringsSep " " [ - "unison" - "${serialiseArgs unisonOptions}" - "$EXTRA_OPTIONS" - "${getIgnored paths_to_ignore path}" - "${esa path}" - (esa "ssh://${config.home.username}@${hostName}.fritz.box/${path}") - ]; - - script = lib.strings.concatStringsSep "\n" (builtins.map mkScriptLine paths_to_keep); - - pairs = builtins.listToAttrs (builtins.map mkPair paths_to_keep); -in { - home.sessionVariables = { - UNISON = unisonPath; - }; - home.packages = [ - pkgs.unison - (sysLib.writeShellScript { - name = "unison-sync"; - src = builtins.toFile "unison-backup" ('' - #!/usr/bin/env dash - - # shellcheck source=/dev/null - SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - - export UNISON=${esa unisonPath}; - - if [ "$1" = "links" ]; then - shift 1; - EXTRA_OPTIONS="-links=true"; - fi - EXTRA_OPTIONS="$EXTRA_OPTIONS $*" - '' - + script); - dependencies = with pkgs; [ - unison - openssh # needed to connect to the other server - less # needed to show diffs - diffutils # needed to compute diffs - ]; - }) - ]; - services.unison = { - enable = false; - inherit pairs; - }; -} diff --git a/modules/home/soispha/conf/xdg/default.nix b/modules/home/soispha/conf/xdg/default.nix deleted file mode 100644 index 4099720d..00000000 --- a/modules/home/soispha/conf/xdg/default.nix +++ /dev/null @@ -1,63 +0,0 @@ -{ - sysLib, - pkgs, - config, - ... -}: let - url_handler = sysLib.writeShellScript { - name = "url_handler"; - src = ./url_handler.sh; - keepPath = true; - # Naming dependencies for this will be difficult, as it depend on overridden packages. - dependencies = with pkgs; [ - rofi - libnotify - zathura - ]; - replacementStrings = { - ALL_PROJECTS_PIPE = "${config.soispha.taskwarrior.projects.projects_pipe}"; - }; - }; -in { - imports = [ - ./xdg_vars.nix - ]; - - xdg = { - mimeApps = { - enable = true; - defaultApplications = { - "application/pdf" = ["url_handler.desktop"]; - "application/x-pdf" = ["url_handler.desktop"]; - - "text/html" = ["url_handler.desktop"]; - "text/xml" = ["url_handler.desktop"]; - "x-scheme-handler/http" = ["url_handler.desktop"]; - "x-scheme-handler/https" = ["url_handler.desktop"]; - "x-scheme-handler/about" = ["url_handler.desktop"]; - "x-scheme-handler/unknown" = ["url_handler.desktop"]; - }; - }; - desktopEntries = { - url_handler = { - name = "url_handler"; - genericName = "Web Browser"; - exec = "${url_handler}/bin/url_handler %u"; - terminal = false; - categories = [ - "Application" - "Network" - "WebBrowser" - ]; - mimeType = [ - "text/html" - "text/xml" - "x-scheme-handler/http" - "x-scheme-handler/https" - "x-scheme-handler/about" - "x-scheme-handler/unknown" - ]; - }; - }; - }; -} diff --git a/modules/home/soispha/conf/xdg/url_handler.sh b/modules/home/soispha/conf/xdg/url_handler.sh deleted file mode 100755 index 95eedffb..00000000 --- a/modules/home/soispha/conf/xdg/url_handler.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -project="$(echo "%ALL_PROJECTS_PIPE|nvim|zathura|" | rofi -sep "|" -dmenu)" - -if [ "$project" = "nvim" ]; then - "$TERMINAL" -e nvim "$1" -elif [ "$project" = "zathura" ]; then - zathura "$1" -elif [ "$project" ]; then - firefox -P "$project" "$1" -else - notify-send "(URL HANDLER) No project selected" && exit 1 -fi - -# vim: ft=sh diff --git a/modules/home/soispha/conf/xdg/xdg_vars.nix b/modules/home/soispha/conf/xdg/xdg_vars.nix deleted file mode 100644 index 3f7d5e00..00000000 --- a/modules/home/soispha/conf/xdg/xdg_vars.nix +++ /dev/null @@ -1,26 +0,0 @@ -{config, ...}: let - inherit (config.xdg) dataHome; -in { - # Variables that only have to be set because special applications fail to set reasonable - # defaults (mostly understandable because of backwards-compatibility, but yeah) - programs.zsh.sessionVariables = { - CARGO_HOME = "${dataHome}/cargo"; - GRADLE_USER_HOME = "${dataHome}/gradle"; - - #_JAVA_OPTIONS = lib.concatStringsSep " " [ - # ''-Djava.util.prefs.userRoot="${config.xdg.configHome}/java"'' - # ''-Djavafx.cachedir="${config.xdg.cacheHome}/openjfx"'' - # ]; - #GOPATH = "${config.xdg.dataHome}/go"; - #GTK2_RC_FILES = "${config.xdg.configHome}/gtk-2.0/gtkrc"; - #RUSTUP_HOME = "${config.xdg.dataHome}/rustup"; - #NPM_CONFIG_USERCONFIG = "${config.xdg.configHome}/npm/npmrc"; - #NUGET_PACKAGES = "${config.xdg.cacheHome}/NuGetPackages"; - #XAUTHORITY = "${config.xdg.stateHome}/Xauthority"; - #COMPDUMPFILE = "${config.xdg.dataHome}/zsh/.zcompdump}"; - #IPYTHONDIR = "${config.xdg.configHome}/ipython"; - #PARALLEL_HOME = "${config.xdg.configHome}/parallel"; - #STACK_XDG = "1"; - #WINEPREFIX = "${config.xdg.dataHome}/wine"; - }; -} diff --git a/modules/home/soispha/conf/yambar/config/config.yml b/modules/home/soispha/conf/yambar/config/config.yml deleted file mode 100644 index 3d9f0687..00000000 --- a/modules/home/soispha/conf/yambar/config/config.yml +++ /dev/null @@ -1,243 +0,0 @@ ---- -# Config file for yambar -# Note that this may be version-dependent, this file is written for v1.8.0 - - -# Font anchors -font-main: &fontmain Source Code Pro:pixelsize=26 -font-aws: &awesome Font Awesome 5 Free:style=solid:pixelsize=23 - -# Color anchors -fg-none: &fgnone 00000000 -fg-1: &fg1 c6ceefff -fg-blue: &fgblue 99d1dbff -fg-sapphire: &fgsapp 74c7ecdd -fg-green: &fggreen a6e3a1dd -fg-peach: &fgpeach fab387dd -fg-mauve: &fgmauve cba6f7dd -fg-teal: &fgteal 94e2d5dd -fg-lavendar: &fglav b4befedd -fg-focus: &fgfocus e78284ff -bg-1: &bg1 303446ff -bg-tag: &bgtag 585b70ff -bg-tag2: &bgtag2 45475aff -bg-urgent: &bgurgent e78284ff - -# Background blocks -background-block: &bgcblock {background: {color: *bg1 }} -background-block-urgent: &bgcurg {background: {color: *bgurgent }} - -# Underlines -underline-focused: &line {underline: { size: 3, color: *fgfocus}} -underline-urgent: &lineurgent {underline: { size: 3, color: *fgblue}} -underline-utils: &lineutil {underline: { size: 3, color: *fgpeach}} -underline-resources: &linemem {underline: { size: 3, color: *fggreen}} -underline-battery: &linebat {underline: { size: 3, color: *fgsapp}} -underline-clock: &lineclock {underline: { size: 3, color: *fgteal}} -underline-weather: &linewea {underline: { size: 3, color: *fglav}} -underline-title: &linetitle {underline: { size: 3, color: *bgtag}} - -# Combined decorations -combination-utils: &combutil {stack: [ <<: *bgcblock, <<: *lineutil]} -combination-resources: &combmem {stack: [ <<: *bgcblock, <<: *linemem]} -combination-battery: &combbat {stack: [ <<: *bgcblock, <<: *linebat]} -combination-clock: &combclock {stack: [ <<: *bgcblock, <<: *lineclock]} -combination-weather: &combwea {stack: [ <<: *bgcblock, <<: *linewea]} - - -### Main - -bar: - location: top - height: 45 - layer: bottom - spacing: 0 - margin: 10 - border: {margin: 0, top-margin: 10} - foreground: *fg1 - background: *fgnone - font: *fontmain - - ### Left, river tags - left: - - river: - anchors: - - id: &name { text: "{id}" } - - string: &focus { stack: [ {background: {color: *bg1}} ] } - - string: &normal { string: { <<: *name, margin: 10 } } - - string: - &occupied { string: { <<: *name, deco: {background: {color: *bgtag2}}, margin: 10 } } - - string: &urgent { string: { <<: *name, deco: {stack: [background: {color: *bgurgent}, <<: *lineurgent]}, margin: 10 } } - - string: &focused { string: { <<: *name, deco: {stack: [background: {color: *bgtag}, <<: *line]}, margin: 10 } } - - string: &unfocused { string: { <<: *name, deco: {background: {color: *bgtag2}}, margin: 10 } } - - base: &river_base - default: *normal - conditions: - state == focused: *focused - state == unfocused: *unfocused - state == urgent: *urgent - state == invisible: - map: - conditions: - occupied: *occupied - ~occupied: *normal - content: - map: - on-click: - left: sh -c "riverctl set-focused-tags $((1 << ({id} - 1)))" - right: sh -c "riverctl toggle-focused-tags $((1 << ({id} -1)))" - middle: sh -c "riverctl toggle-view-tags $((1 << ({id} -1)))" - conditions: - id == 1: { map: { <<: *river_base } } - id == 2: { map: { <<: *river_base } } - id == 3: { map: { <<: *river_base } } - id == 4: { map: { <<: *river_base } } - id == 5: { map: { <<: *river_base } } - id == 6: { map: { <<: *river_base } } - id == 7: { map: { <<: *river_base } } - id == 8: { map: { <<: *river_base } } - id == 9: { map: { <<: *river_base } } - title: - map: - default: - { - string: - { - text: "{title}", - left-margin: 12, - right-margin: 12, - # max: 35, - deco: *linetitle - }, - } - conditions: - title == "": { string: { text: "" } } - - ### Center, clock & weather gadget - center: - - clock: - time-format: "%H:%M:%S %Z" - date-format: "%d/%m/%y (%a)" - foreground: *fgblue - content: - string: - text: " {date} {time} " - deco: *combclock - - ### Right, system tray - right: - #- network: - # name: wlp5s0 - # poll-interval: 10 - # content: - # map: - # on-click: /bin/sh -c "nmtui" - # conditions: - # ~carrier: {empty: {}} - # carrier: - # string: {text: "  {ssid} ", deco: *combutil} - #- network: - # name: enp4s0 - # content: - # map: - # on-click: /bin/sh -c "nmtui" - # conditions: - # ~carrier: - # string: {text: "  Eth failed ", deco: *combutil} - # carrier: {empty: {}} - - - script: # mpd song name - path: @mpd_song_name_script@ - content: - map: - conditions: - playing: - string: {text: "{song} ", deco: *combwea} - ~playing: - string: {text: "", deco: *combwea} - - script: # Sound volume - path: @volume_script@ - content: - map: - on-click: /bin/sh -c "pavucontrol" - conditions: - muted: - string: - text: " 󰝟 " - deco: *bgcurg - ~muted: - string: {text: "  {volume}% ", deco: *combutil} - - # - script: # Grade average - # path: @grade_average_script@ - # content: - # string: - # text: "  {grade} " - # deco: *combmem - - #- backlight: - # name: intel_backlight - # content: - # - string: {text: "  {percent}% ", deco: *combutil} - - - script: # CPU - path: @cpu_script@ - content: - string: - text: "  {cpu}% " - deco: *combmem - - - script: # Memory info - path: @memory_script@ - content: - map: - conditions: - swapstate: - string: - text: "  {memperc}%({swapperc}%) " - deco: *combmem - ~swapstate: - string: - text: "  {memperc}% " - deco: *combmem - - script: # Disk space - path: @disk_script@ - content: - string: - text: " 󰋊 {diskspace}({diskperc})" - deco: *combmem - #- battery: - # name: BAT0 - # poll-interval: 30 - # content: - # list: - # items: - # - ramp: - # tag: capacity - # items: - # - string: - # text: "  {capacity}%({estimate}) " - # deco: *bgcurg - # - string: - # text: "  {capacity}%({estimate}) " - # deco: {stack: [ <<: *bgcblock, <<: *linebat]} - # - string: - # text: "  {capacity}%({estimate}) " - # deco: {stack: [ <<: *bgcblock, <<: *linebat]} - # - string: - # text: "  {capacity}%({estimate}) " - # deco: {stack: [ <<: *bgcblock, <<: *linebat]} - # - string: - # text: "  {capacity}%({estimate}) " - # deco: {stack: [ <<: *bgcblock, <<: *linebat]} - #- script: # tray - # path: /home/dt/.config/yambar/scripts/yambar-tray - # content: - # empty: {} - #- script: - # path: /home/dt/.config/yambar/scripts/yambar-tray-width - # poll-interval: 10 - # content: - # string: - # text: "{padding}" - # deco: *combmem diff --git a/modules/home/soispha/conf/yambar/config/laptop.yml b/modules/home/soispha/conf/yambar/config/laptop.yml deleted file mode 100644 index 8de2f508..00000000 --- a/modules/home/soispha/conf/yambar/config/laptop.yml +++ /dev/null @@ -1,243 +0,0 @@ ---- -# Config file for yambar -# Note that this may be version-dependent, this file is written for v1.8.0 - - -# Font anchors -font-main: &fontmain Source Code Pro:pixelsize=22 -font-aws: &awesome Font Awesome 5 Free:style=solid:pixelsize=20 - -# Color anchors -fg-none: &fgnone 00000000 -fg-1: &fg1 c6ceefff -fg-blue: &fgblue 99d1dbff -fg-sapphire: &fgsapp 74c7ecdd -fg-green: &fggreen a6e3a1dd -fg-peach: &fgpeach fab387dd -fg-mauve: &fgmauve cba6f7dd -fg-teal: &fgteal 94e2d5dd -fg-lavendar: &fglav b4befedd -fg-focus: &fgfocus e78284ff -bg-1: &bg1 303446ff -bg-tag: &bgtag 585b70ff -bg-tag2: &bgtag2 45475aff -bg-urgent: &bgurgent e78284ff - -# Background blocks -background-block: &bgcblock {background: {color: *bg1 }} -background-block-urgent: &bgcurg {background: {color: *bgurgent }} - -# Underlines -underline-focused: &line {underline: { size: 3, color: *fgfocus}} -underline-urgent: &lineurgent {underline: { size: 3, color: *fgblue}} -underline-utils: &lineutil {underline: { size: 3, color: *fgpeach}} -underline-resources: &linemem {underline: { size: 3, color: *fggreen}} -underline-battery: &linebat {underline: { size: 3, color: *fgsapp}} -underline-clock: &lineclock {underline: { size: 3, color: *fgteal}} -underline-weather: &linewea {underline: { size: 3, color: *fglav}} -underline-title: &linetitle {underline: { size: 3, color: *bgtag}} - -# Combined decorations -combination-utils: &combutil {stack: [ <<: *bgcblock, <<: *lineutil]} -combination-resources: &combmem {stack: [ <<: *bgcblock, <<: *linemem]} -combination-battery: &combbat {stack: [ <<: *bgcblock, <<: *linebat]} -combination-clock: &combclock {stack: [ <<: *bgcblock, <<: *lineclock]} -combination-weather: &combwea {stack: [ <<: *bgcblock, <<: *linewea]} - - -### Main - -bar: - location: top - height: 25 - layer: bottom - spacing: 0 - margin: 10 - border: {margin: 0, top-margin: 5} - foreground: *fg1 - background: *fgnone - font: *fontmain - - ### Left, river tags - left: - - river: - anchors: - - id: &name { text: "{id}" } - - string: &focus { stack: [ {background: {color: *bg1}} ] } - - string: &normal { string: { <<: *name, margin: 10 } } - - string: - &occupied { string: { <<: *name, deco: {background: {color: *bgtag2}}, margin: 10 } } - - string: &urgent { string: { <<: *name, deco: {stack: [background: {color: *bgurgent}, <<: *lineurgent]}, margin: 10 } } - - string: &focused { string: { <<: *name, deco: {stack: [background: {color: *bgtag}, <<: *line]}, margin: 10 } } - - string: &unfocused { string: { <<: *name, deco: {background: {color: *bgtag2}}, margin: 10 } } - - base: &river_base - default: *normal - conditions: - state == focused: *focused - state == unfocused: *unfocused - state == urgent: *urgent - state == invisible: - map: - conditions: - occupied: *occupied - ~occupied: *normal - content: - map: - on-click: - left: sh -c "riverctl set-focused-tags $((1 << ({id} - 1)))" - right: sh -c "riverctl toggle-focused-tags $((1 << ({id} -1)))" - middle: sh -c "riverctl toggle-view-tags $((1 << ({id} -1)))" - conditions: - id == 1: { map: { <<: *river_base } } - id == 2: { map: { <<: *river_base } } - id == 3: { map: { <<: *river_base } } - id == 4: { map: { <<: *river_base } } - id == 5: { map: { <<: *river_base } } - id == 6: { map: { <<: *river_base } } - id == 7: { map: { <<: *river_base } } - id == 8: { map: { <<: *river_base } } - id == 9: { map: { <<: *river_base } } - title: - map: - default: - { - string: - { - text: "{title}", - left-margin: 12, - right-margin: 12, - # max: 35, - deco: *linetitle - }, - } - conditions: - title == "": { string: { text: "" } } - - ### Center, clock & weather gadget - center: - - clock: - time-format: "%H:%M:%S %Z" - date-format: "%d/%m/%y (%a)" - foreground: *fgblue - content: - string: - text: " {date} {time} " - deco: *combclock - - ### Right, system tray - right: - #- network: - # name: wlp5s0 - # poll-interval: 10 - # content: - # map: - # on-click: /bin/sh -c "nmtui" - # conditions: - # ~carrier: {empty: {}} - # carrier: - # string: {text: "  {ssid} ", deco: *combutil} - #- network: - # name: enp4s0 - # content: - # map: - # on-click: /bin/sh -c "nmtui" - # conditions: - # ~carrier: - # string: {text: "  Eth failed ", deco: *combutil} - # carrier: {empty: {}} - - - script: # mpd song name - path: @mpd_song_name_script@ - content: - map: - conditions: - playing: - string: {text: "{song} ", deco: *combwea} - ~playing: - string: {text: "", deco: *combwea} - - script: # Sound volume - path: @volume_script@ - content: - map: - on-click: /bin/sh -c "pavucontrol" - conditions: - muted: - string: - text: " 󰝟 " - deco: *bgcurg - ~muted: - string: {text: "  {volume}% ", deco: *combutil} - - # - script: # Grade average - # path: @grade_average_script@ - # content: - # string: - # text: "  {grade} " - # deco: *combmem - - - backlight: - name: @backlight@ - content: - - string: {text: "  {percent}% ", deco: *combutil} - - - script: # CPU - path: @cpu_script@ - content: - string: - text: "  {cpu}% " - deco: *combmem - - - script: # Memory info - path: @memory_script@ - content: - map: - conditions: - swapstate: - string: - text: "  {memperc}%({swapperc}%) " - deco: *combmem - ~swapstate: - string: - text: "  {memperc}% " - deco: *combmem - - script: # Disk space - path: @disk_script@ - content: - string: - text: " 󰋊 {diskspace}({diskperc})" - deco: *combmem - - battery: - name: BAT0 - poll-interval: 300 - content: - list: - items: - - ramp: - tag: capacity - items: - - string: - text: "  {capacity}%({estimate}) " - deco: *bgcurg - - string: - text: "  {capacity}%({estimate}) " - deco: {stack: [ <<: *bgcblock, <<: *linebat]} - - string: - text: "  {capacity}%({estimate}) " - deco: {stack: [ <<: *bgcblock, <<: *linebat]} - - string: - text: "  {capacity}%({estimate}) " - deco: {stack: [ <<: *bgcblock, <<: *linebat]} - - string: - text: "  {capacity}%({estimate}) " - deco: {stack: [ <<: *bgcblock, <<: *linebat]} - #- script: # tray - # path: /home/dt/.config/yambar/scripts/yambar-tray - # content: - # empty: {} - #- script: - # path: /home/dt/.config/yambar/scripts/yambar-tray-width - # poll-interval: 10 - # content: - # string: - # text: "{padding}" - # deco: *combmem diff --git a/modules/home/soispha/conf/yambar/default.nix b/modules/home/soispha/conf/yambar/default.nix deleted file mode 100644 index 021dfbdd..00000000 --- a/modules/home/soispha/conf/yambar/default.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ - nixosConfig, - sysLib, - system, - pkgs, - yambar_cpu, - yambar_memory, - ... -}: let - makeScript = { - name, - dependencies, - ... - }: - sysLib.writeShellScript { - inherit name; - src = ./scripts/${name}.sh; - dependencies = dependencies ++ (builtins.attrValues {inherit (pkgs) dash;}); - } - + "/bin/${name}"; -in { - xdg.configFile."yambar/config.yml".source = pkgs.substituteAll { - src = - if nixosConfig.soispha.laptop.enable - then ./config/laptop.yml - else ./config/config.yml; - - backlight = - if nixosConfig.soispha.laptop.enable - then nixosConfig.soispha.laptop.backlight - else ""; - - mpd_song_name_script = makeScript { - dependencies = builtins.attrValues {inherit (pkgs) mpc-cli;}; - name = "mpd_song_name"; - }; - - volume_script = makeScript { - dependencies = builtins.attrValues {inherit (pkgs) pulseaudio gawk coreutils;}; - name = "sound-volume"; - }; - - cpu_script = yambar_cpu.app.${system}.default.program; - - memory_script = yambar_memory.app.${system}.default.program; - - disk_script = makeScript { - dependencies = builtins.attrValues {inherit (pkgs) gawk btrfs-progs coreutils;}; - name = "disk"; - }; - }; -} diff --git a/modules/home/soispha/conf/yambar/scripts/disk.sh b/modules/home/soispha/conf/yambar/scripts/disk.sh deleted file mode 100755 index a5547a74..00000000 --- a/modules/home/soispha/conf/yambar/scripts/disk.sh +++ /dev/null @@ -1,21 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -# Main loop -while true; do - # vars - used_space=$(btrfs filesystem usage /srv 2>/dev/null | awk '{if ( /Used:/ ) { print $2 } } ' | head -n1) - all_space=$(btrfs filesystem usage /srv 2>/dev/null | awk '{if ( /Device size:/ ) { print $3 } } ' | head -n1 | tr -d "GiB") - - # Check space available (4) and percentage used (5) - spaceperc=$(echo "$(echo "$used_space" | tr -d "GiB")" "$all_space" | awk '{div=$1/$2;div *= 100; printf"%2d%%\n",div }') - - echo "diskspace|string|$used_space" - echo "diskperc|string|$spaceperc" - echo "" - sleep 1 -done - -# vim: ft=sh diff --git a/modules/home/soispha/conf/yambar/scripts/mpd_song_name.sh b/modules/home/soispha/conf/yambar/scripts/mpd_song_name.sh deleted file mode 100755 index 7d294781..00000000 --- a/modules/home/soispha/conf/yambar/scripts/mpd_song_name.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -while true; do - state="$(mpc status '%state%')" - - if [ "$state" = "playing" ]; then - song="$(mpc --format '[[%artist% - ]%title%]|[%file%]' current)" - echo "playing|bool|true" - echo "song|string|$song :: $(mpc status "%currenttime%/%totaltime%")" - else - echo "playing|bool|false" - fi - echo "" # commit - - sleep 2 -done - -# vim: ft=sh diff --git a/modules/home/soispha/conf/yambar/scripts/network.sh b/modules/home/soispha/conf/yambar/scripts/network.sh deleted file mode 100755 index adfc93df..00000000 --- a/modules/home/soispha/conf/yambar/scripts/network.sh +++ /dev/null @@ -1,47 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -retest=120 -retest_if_con_fails=10 -backend=nmcli - -case "$backend" in -"nmcli") # Test for connectivity with nmcli - while true; do - connection_status=$(nmcli networking connectivity) - if [ "$connection_status" = "full" ]; then - echo "internet|string|Connected" - echo "" - sleep $retest - else - echo "internet|string|Disconnected" - echo "" - sleep $retest_if_con_fails - fi - done - ;; -"ping") # Test for connectivity with ping - ip_address='8.8.8.8' - ping_number=3 - - while true; do - - ping_result=$(mktmp) - ping $ip_address -c $ping_number -q | awk 'BEGIN {FS="/"} END {print $5}' >"$ping_result" - - if [ "$(wc -l <"$ping_result")" -eq 0 ]; then - echo "med|string|No connection" - echo "" - sleep $retest_if_con_fails - else - echo "med|string|$(cat "$ping_result") ms" - echo "" - sleep $retest - fi - done - ;; -esac - -# vim: ft=sh diff --git a/modules/home/soispha/conf/yambar/scripts/sound-volume.sh b/modules/home/soispha/conf/yambar/scripts/sound-volume.sh deleted file mode 100755 index 8a98daf7..00000000 --- a/modules/home/soispha/conf/yambar/scripts/sound-volume.sh +++ /dev/null @@ -1,20 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -while true; do - volume="$(pactl get-sink-volume 0 | awk 'BEGIN { FS="/" } {gsub("%","",$2); gsub(" ","",$2)} {printf $2}')" - - if [ "$volume" -eq 0 ]; then - echo "muted|bool|true" - else - echo "volume|string|$volume" - echo "muted|bool|false" - fi - echo "" - - sleep 3 -done - -# vim: ft=sh diff --git a/modules/home/soispha/conf/ytcc/default.nix b/modules/home/soispha/conf/ytcc/default.nix deleted file mode 100644 index 87300ec1..00000000 --- a/modules/home/soispha/conf/ytcc/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - config, - pkgs, - ... -}: { - xdg.configFile."ytcc/ytcc.conf".source = pkgs.substituteAll { - src = ./ytcc.conf; - download_dir = "${config.xdg.userDirs.download}/ytcc"; - xdg_data_home = config.xdg.dataHome; - }; -} diff --git a/modules/home/soispha/conf/ytcc/ytcc.conf b/modules/home/soispha/conf/ytcc/ytcc.conf deleted file mode 100644 index 289843ad..00000000 --- a/modules/home/soispha/conf/ytcc/ytcc.conf +++ /dev/null @@ -1,37 +0,0 @@ -[ytcc] -download_dir = @download_dir@ -mpv_flags = --really-quiet --ytdl --ytdl-format=bestvideo[height<=?1080]+bestaudio/best --speed=2.7 -download_subdirs = true -order_by = playlists:asc, publish_date:desc -video_attrs = id, title, publish_date, duration, playlists -playlist_attrs = name, url, tags, reverse -db_path = @xdg_data_home@/ytcc/ytcc.db -date_format = %Y-%m-%d -max_update_fail = 5 -max_update_backlog = 20 -age_limit = 0 - -[tui] -alphabet = sdfervghnuiojkl -default_action = play_video - -[theme] -prompt_download_audio = 2 -prompt_download_video = 4 -prompt_play_audio = 2 -prompt_play_video = 4 -prompt_mark_watched = 1 -table_alternate_background = 245 -plain_label_text = 244 - -[youtube_dl] -format = bestvideo[height<=?1080]+bestaudio/best -output_template = %(title)s.%(ext)s -ratelimit = 0 -retries = 0 -subtitles = off -thumbnail = true -skip_live_stream = true -merge_output_format = mkv -max_duration = 0 -restrict_filenames = false diff --git a/modules/home/soispha/conf/zsh/config/command_not_found.sh b/modules/home/soispha/conf/zsh/config/command_not_found.sh deleted file mode 100644 index fb21b676..00000000 --- a/modules/home/soispha/conf/zsh/config/command_not_found.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env dash - -# This was taken from the -# `${pkgs.nix-index}/etc/profile.d/command-not-found.sh` file on 2024-02-28 - -# for bash 4 -# this will be called when a command is entered -# but not found in the user’s path + environment -command_not_found_handle() { - # taken from http://www.linuxjournal.com/content/bash-command-not-found - # - do not run when inside Midnight Commander or within a Pipe - if [ -n "${MC_SID-}" ] || ! [ -t 1 ]; then - >&2 echo "$1: command not found" - return 127 - fi - - toplevel=nixpkgs # nixpkgs should always be available even in NixOS - cmd="$1" - attrs=$(nix-locate --minimal --no-group --type x --type s --top-level --whole-name --at-root "/bin/$cmd") - len=$(if [ -n "$attrs" ]; then echo "$attrs" | wc -l; else echo 0; fi) - - case "$len" in - 0) - eprintln "$cmd: command not found" - ;; - 1) - # If only one package provides this, then we can invoke it - # without asking the user. - - # These will not return 127 if they worked correctly. - - >&2 cat <&2 cat <&2 cat <&2 - fi -} - -function_exists() { - # Zsh returns 0 even on non existing functions with -F so use -f - declare -f "$1" >/dev/null - return $? -} - -# -# The idea below is to copy any existing handlers to another function -# name and insert the message in front of the old handler in the -# new handler. By default, neither bash or zsh has has a handler function -# defined, so the default behaviour is replicated. -# -# Also, ensure the handler is only copied once. If we do not ensure this -# the handler would add itself recursively if this file happens to be -# sourced multiple times in the same shell, resulting in a neverending -# stream of messages. -# - -# -# Zsh -# -if function_exists command_not_found_handler; then - if ! function_exists orig_command_not_found_handler; then - eval "orig_$(declare -f command_not_found_handler)" - fi -else - orig_command_not_found_handler() { - printf "zsh: command not found: %s\n" "$1" >&2 - return 127 - } -fi - -command_not_found_handler() { - print_message - orig_command_not_found_handler "$@" -} - -# -# Bash -# -if function_exists command_not_found_handle; then - if ! function_exists orig_command_not_found_handle; then - eval "orig_$(declare -f command_not_found_handle)" - fi -else - orig_command_not_found_handle() { - printf "%s: %s: command not found\n" "$0" "$1" >&2 - return 127 - } -fi - -command_not_found_handle() { - print_message - orig_command_not_found_handle "$@" -} diff --git a/modules/home/soispha/conf/zsh/config/custom_cursor.zsh b/modules/home/soispha/conf/zsh/config/custom_cursor.zsh deleted file mode 100644 index 37390c1c..00000000 --- a/modules/home/soispha/conf/zsh/config/custom_cursor.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh - -# Change cursor shape for different vi modes. -function zle-keymap-select { - if [[ ${KEYMAP} == vicmd ]] || - [[ $1 = 'block' ]]; then - echo -ne '\e[1 q' - elif [[ ${KEYMAP} == main ]] || - [[ ${KEYMAP} == viins ]] || - [[ ${KEYMAP} = '' ]] || - [[ $1 = 'beam' ]]; then - echo -ne '\e[5 q' - fi -} -zle -N zle-keymap-select - -# ci", ci', ci`, di", etc -autoload -U select-quoted -zle -N select-quoted -for m in visual viopp; do - for c in {a,i}{\',\",\`}; do - bindkey -M "$m" "$c" select-quoted - done -done - -# ci{, ci(, ci<, di{, etc -autoload -U select-bracketed -zle -N select-bracketed -for m in visual viopp; do - for c in {a,i}${(s..)^:-'()[]{}<>bB'}; do - bindkey -M $m $c select-bracketed - done -done - -zle-line-init() { - zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere) - echo -ne "\e[5 q" -} -zle -N zle-line-init - -echo -ne '\e[5 q' # Use beam shape cursor on startup. -precmd() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt. diff --git a/modules/home/soispha/conf/zsh/config/zsh-init.zsh b/modules/home/soispha/conf/zsh/config/zsh-init.zsh deleted file mode 100644 index cd8d34a9..00000000 --- a/modules/home/soispha/conf/zsh/config/zsh-init.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env zsh -# If not running interactively, don't do anything -[[ $- != *i* ]] && return - -# Flex on the ubuntu users -#[ "$NVIM" ] || hyfetch -[ "$NVIM" ] || task next -#loginctl show-session $XDG_SESSION_ID - -## Enable colors and change prompt: -#autoload -Uz colors && colors -#autoload -Uz compinit && compinit -u -## Edit line in vim buffer ctrl-v -autoload -Uz edit-command-line -zle -N edit-command-line -## Enter vim buffer from normal mode -#autoload -Uz edit-command-line && zle -N edit-command-line -bindkey "^V" edit-command-line - -## zstyles -#zstyle ':completion:*' menu select -## Auto complete with case insensitivity -#zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' - -#zmodload zsh/complist -#fpath+=/home/dt/.config/zsh/comp -#compinit -#_comp_options+=(globdots) # Include hidden files. -# -## Source configs -#source "${ZDOTDIR}/ali.sh" -#source "${ZDOTDIR}/prompt.sh" -#source "${ZDOTDIR}/hotkeys.sh" -#source "./${path_custom_cursor}" -#source ~/.local/lib/shell/lib -# -## Load zsh-syntax-highlighting -#source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -## Suggest aliases for commands -#source /usr/share/zsh/plugins/zsh-you-should-use/you-should-use.plugin.zsh -# -##eval "$(lua ~/scripts/z.lua --init zsh enhanced)" diff --git a/modules/home/soispha/conf/zsh/default.nix b/modules/home/soispha/conf/zsh/default.nix deleted file mode 100644 index 90eba56c..00000000 --- a/modules/home/soispha/conf/zsh/default.nix +++ /dev/null @@ -1,101 +0,0 @@ -{ - config, - pkgs, - lib, - shell_library, - system, - ... -}: { - # TODO: ADD THIS ADDON - # next one only works if your alias is only a command, e.g. if you `alias='cat some_file.txt &2> /dev/null'`, running `cat some_file.txt` won't trigger it. - # TODO: find something better for this use case - # zsh-you-should-use # ZSH plugin that reminds you to use existing aliases for commands you just typed - home.sessionPath = []; - programs.zsh = { - enable = true; - autosuggestion.enable = true; - enableCompletion = true; - syntaxHighlighting.enable = true; - - autocd = true; - - dotDir = ".config/zsh"; - - history = { - extended = true; - ignoreDups = false; - expireDuplicatesFirst = false; - ignoreSpace = false; # TODO: I might change that - - path = "${config.xdg.dataHome}/zsh/history"; - save = 9000000; # number of lines to save - size = 9000000; # number of lines to keep - share = false; # share between sessions - }; - historySubstringSearch = { - enable = true; - searchDownKey = "^[[B"; # DOWN Arrow key - searchUpKey = "^[[A"; # UP Arrow key - }; - - loginExtra = - "" - + lib.concatStringsSep "\nsetopt " [ - "setopt AUTO_CD" # This is needed as first item - "AUTO_PUSHD" - "CHASE_DOTS" - - "ALWAYS_TO_END" - - "EXTENDED_HISTORY" - "HIST_ALLOW_CLOBBER" - "HIST_VERIFY" - "HIST_FCNTL_LOCK" - "APPEND_HISTORY" - - "DVORAK" - "CORRECT" - - "PROMPT_SUBST" - "TRANSIENT_RPROMPT" # maybe? - - "COMBINING_CHARS" - "VI" - ]; - - initExtraFirst = - builtins.readFile ./config/zsh-init.zsh - + '' - SHELL_LIBRARY_VERSION="2.1.2" source ${shell_library.rawLib.${system}} - # This next line buffers the first line of the following item: - - '' - # NOTE: This must be before the insult, as we otherwise override the previous handler <2024-02-28> - + builtins.readFile ./config/command_not_found.sh - + builtins.readFile ./config/command_not_found_insult.sh - + builtins.readFile ./config/custom_cursor.zsh - + builtins.readFile "${pkgs.fzf}/share/fzf/key-bindings.zsh"; - - shellAliases = { - ll = ". ll"; - hisea = "history 0 | grep"; - }; - sessionVariables = { - IVIEWER = "imv"; - READER = "zathura"; - - LIBVIRT_DEFAULT_URI = "qemu:///system"; - - BEMENU_SCALE = "1.5"; - BEMENU_BACKEND = "wayland"; - BEMENU_OPTS = "--fn 'Source Code Pro 10' -c -l 30 -B 1 -W 0.9 --hf #ffffff"; - - # Export Wayland env Vars {{{ - QT_QPA_PLATFORM = "wayland"; - QT_QPA_PLATFORMTHEME = "qt5ct"; # needs qt5ct - CLUTTER_BACKEND = "wayland"; - SDL_VIDEODRIVER = "wayland"; # might brake some things - # }}} - }; - }; -} diff --git a/modules/home/soispha/default.nix b/modules/home/soispha/default.nix deleted file mode 100644 index a6107898..00000000 --- a/modules/home/soispha/default.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ - impermanence, - nixVim, - nix-index-database, - ... -}: let - username = "soispha"; - homeDirectory = "/home/${username}"; - - # xdg - configHome = "${homeDirectory}/.config"; - dataHome = "${homeDirectory}/.local/share"; - stateHome = "${homeDirectory}/.local/state"; - cacheHome = "${homeDirectory}/.cache"; - binHome = "${homeDirectory}/.local/bin"; - # TODO: add XDG_RUNTIME_DIR -in { - imports = [ - ./conf - ./files - ./impermanence - ./pkgs - ./wms - - impermanence.nixosModules.home-manager.impermanence - nixVim.homeManagerModules.nixvim - nix-index-database.hmModules.nix-index - ]; - - # I don't know what this does, but I've seen it a lot online, so it should be good, right? - programs.home-manager.enable = true; - - home = { - inherit username homeDirectory; - stateVersion = "23.05"; - enableNixpkgsReleaseCheck = true; - }; - xdg = { - enable = true; - inherit configHome dataHome stateHome cacheHome; #binHome; # TODO: add binHome, when the standart is extended - - /* - TODO: add this - desktopEntries = {}; - */ - - userDirs = { - enable = true; - createDirectories = true; - desktop = null; - documents = "${homeDirectory}/school/general"; - download = "${homeDirectory}/media/downloads"; - music = "${homeDirectory}/media/music"; - pictures = "${homeDirectory}/media/pictures"; - videos = "${homeDirectory}/media/videos"; - templates = "${homeDirectory}/media/templates"; - publicShare = "${homeDirectory}/media/public"; - }; - }; -} diff --git a/modules/home/soispha/files/default.nix b/modules/home/soispha/files/default.nix deleted file mode 100644 index 16fe9afe..00000000 --- a/modules/home/soispha/files/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{...}: { - imports = [ - ./wallpaper - ./manifest_json - ]; -} diff --git a/modules/home/soispha/files/manifest_json/default.nix b/modules/home/soispha/files/manifest_json/default.nix deleted file mode 100644 index af8d85d2..00000000 --- a/modules/home/soispha/files/manifest_json/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - config, - lib, - ... -}: { - home = { - activation = { - addManifestJson = - lib.hm.dag.entryAfter ["writeBoundary"] - '' - [ -L "${config.xdg.stateHome}/nix/profiles/profile" ] && $DRY_RUN_CMD rm $VERBOSE_ARG "${config.xdg.stateHome}/nix/profiles/profile" - $DRY_RUN_CMD ln -s $DRY_RUN_CMD "${./profile}" "${config.xdg.stateHome}/nix/profiles/profile" - ''; - }; - }; -} diff --git a/modules/home/soispha/files/manifest_json/profile/manifest.json b/modules/home/soispha/files/manifest_json/profile/manifest.json deleted file mode 100644 index bd74d935..00000000 --- a/modules/home/soispha/files/manifest_json/profile/manifest.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "elements": [], - "version": 2 -} diff --git a/modules/home/soispha/files/wallpaper/abstract-nord.png b/modules/home/soispha/files/wallpaper/abstract-nord.png deleted file mode 100644 index 5ef498bf..00000000 Binary files a/modules/home/soispha/files/wallpaper/abstract-nord.png and /dev/null differ diff --git a/modules/home/soispha/files/wallpaper/default.nix b/modules/home/soispha/files/wallpaper/default.nix deleted file mode 100644 index 119df225..00000000 --- a/modules/home/soispha/files/wallpaper/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{config, ...}: { - home = { - sessionVariables = { - WALLPAPER = "${config.home.homeDirectory}/media/pictures/wallpaper"; - }; - - file = { - wallpaper = { - source = ./abstract-nord.png; - target = "media/pictures/wallpaper"; - }; - }; - }; -} diff --git a/modules/home/soispha/impermanence/default.nix b/modules/home/soispha/impermanence/default.nix deleted file mode 100644 index dcb60f3b..00000000 --- a/modules/home/soispha/impermanence/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - lib, - nixosConfig, - ... -}: { - config = lib.mkIf nixosConfig.soispha.impermanence.enable { - home.persistence."/srv/home/soispha" = { - allowOther = true; - directories = [ - ".local/share" - - ".local/state/nvim" - ".local/state/mpv" - ".local/state/wireplumber" - - ".config/Signal" - ".config/Element" - ".config/iamb/profiles" - - ".cache" - ".mozilla" - - "media" - "repos" - "school" - ]; - }; - }; -} diff --git a/modules/home/soispha/pkgs/default.nix b/modules/home/soispha/pkgs/default.nix deleted file mode 100644 index c821cd94..00000000 --- a/modules/home/soispha/pkgs/default.nix +++ /dev/null @@ -1,167 +0,0 @@ -{ - pkgs, - lib, - ... -}: -with pkgs; let - onlyShare = drv: - runCommand "${drv.name}-only-share" {} '' - mkdir -p $out - ln -s ${drv}/share $out/share - ''; - mpc-cli-man = onlyShare mpc-cli; - - Gui = { - Terminals = [ - # foot # wayland native terminal - alacritty # default terminal - ]; - Browsers = [ - #ungoogled-chromium # web browser (only for web programming) - #brave - ]; - - ImageManipulation = [ - #krita # new, and better (KDE) - #gimp # conservative, and old (GNOME) - ]; - - Social = [ - mumble # voice chat software (client) - # lutris # multiple game store clients - - # nheko # best matrix client (as of today) - # element-desktop # nheko didn't work - signal-desktop # to avoid encryption problems with signal-bridge - ]; - - Misc = [ - #kalzium # Periodic Table of Elements (`element` is [sort of] better) - keepassxc # password manager - #onlykey # OnlyKey Chrome Desktop App - anki-bin # spaced repetition - ]; - }; - - TuiCli = { - ShellScripts = builtins.attrValues pkgs.scripts; - - EyeCandy = [ - #banner # Print large banners to ASCII terminals - cmatrix # A curses-based scrolling 'Matrix'-like screen - hyfetch # Neofetch with LGBTQ pride flags. - ]; - - Social = [ - iamb # best tui matrix client (as of today) - ]; - - Misc = [ - android-file-transfer # Android MTP client with minimalistic UI - #xdg-ninja # A shell script which checks your $HOME for unwanted files and directories. - xdg-utils # open urls and such things - yokadi # Command line oriented, sqlite powered, todo list - killall # kill a application by name - snap-sync-forked # A btrfs based backup solution - bc # Smart calculator - ]; - - WM = { - river = [river]; # A dynamic tiling wayland compositor - - CLITools = [ - lswt # List Wayland toplevels - wl-clipboard # Command-line copy/paste utilities - swaylock # lockscreen - ]; - - Media = [ - wf-recorder # Screen recorder - libnotify # a command to send a notification - ]; - }; - - Media = { - View = [ - imv # Image viewer - zathura # PDF viewer - ytcc # Command line tool to keep track of your favorite playlists on YouTube and many other places. - ytc # My tool to download the videos (used in conjunction with the entry above) - yts # My tool to select the videos (used in conjunction with the entry above) - yt # My tool to both select and then download the videos (a merged version of the two entries above) - comments # My tool to display comments - ]; - - Listen = [ - pulseaudio # set the volume with pactl - ncmpc # mpd player client - mpc-cli-man # a cli mpd client (added via a wrapper script) - ]; - }; - - Hardware = { - Storage = [ - #compsize # Calculate compression ratio of a set of files on Btrfs - # TODO: smartmontools # Control and monitor S.M.A.R.T. enabled ATA and SCSI Hard Drives - ]; - - Input = [ - #piper # GTK application to configure gaming mice - ]; - }; - - FileListers = [ - tree # A directory listing program displaying a depth indented list of files - fd # Simple, fast and user-friendly alternative to find - ripgrep # A search tool that combines the usability of ag with the raw speed of grep - fzf # used to quickly move around with its keybindings - file # Show information about a file - ]; - - Editors = [ - ed # A POSIX-compliant line-oriented text editor - #sed # GNU stream editor - vim # The original ex/vi text editor (this is `vim` and not `vi`, as `vi` is unfree) - #neovim # Fork of Vim aiming to improve user experience, plugins, and GUIs - ]; - - Programming = { - GeneralTools = [ - git # the fast distributed version control system - git-absorb # git commit --fixup, but automatic - glow # Command-line markdown renderer - ]; - }; - }; - # TODO: unmaintained, find sth else: - # handlr # Powerful alternative to xdg-utils written in Rust - mapFun = x: - if builtins.isAttrs x - then - if lib.isDerivation x - then [x] - else builtins.attrValues x - else [x]; -in { - home.packages = - [] - ++ (with builtins; - concatLists - (concatLists [ - (concatMap mapFun - (concatMap mapFun - (concatMap mapFun - (concatMap mapFun - (concatMap mapFun - (concatMap mapFun - (attrValues Gui))))))) - - (concatMap mapFun - (concatMap mapFun - (concatMap mapFun - (concatMap mapFun - (concatMap mapFun - (concatMap mapFun - (attrValues TuiCli))))))) - ])); -} diff --git a/modules/home/soispha/wms/default.nix b/modules/home/soispha/wms/default.nix deleted file mode 100644 index 610ea2f4..00000000 --- a/modules/home/soispha/wms/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{config, ...}: { - imports = [ - # ./sway - ./river - # ./plasma - ]; -} diff --git a/modules/home/soispha/wms/plasma/default.nix b/modules/home/soispha/wms/plasma/default.nix deleted file mode 100644 index f68ee272..00000000 --- a/modules/home/soispha/wms/plasma/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{config, ...}: { - services.xserver.enable = true; - services.xserver.displayManager.sddm.enable = true; - services.xserver.desktopManager.plasma5.enable = true; -} diff --git a/modules/home/soispha/wms/river/default.nix b/modules/home/soispha/wms/river/default.nix deleted file mode 100644 index 36a9ca74..00000000 --- a/modules/home/soispha/wms/river/default.nix +++ /dev/null @@ -1,76 +0,0 @@ -{ - pkgs, - sysLib, - river_init_lesser, - nixosConfig, - system, - ... -}: let - inherit (nixosConfig.networking) hostName; - mappings = - if hostName == "tiamat" - then '' - err_fail riverctl keyboard-layout 'us-modified' - err_fail river_init_lesser ~/.config/river/res/moonlander.ron - '' - else if hostName == "lahmu" || hostName == "apzu" || hostName == "mammun" || hostName == "isimud" - then '' - err_fail riverctl keyboard-layout 'dvorak-modified' - err_fail river_init_lesser ~/.config/river/res/keys.ron - '' - else builtins.throw "Host not covered in river mappings"; - screen_setup = - if hostName == "lahmu" - then '' - err_fail wlr-randr --output Virtual-1 --mode 1920x1080 - '' - else if hostName == "tiamat" - then '' - err_fail wlr-randr --output DP-2 --pos 2560,0 - err_fail wlr-randr --output DP-1 --scale 1.5 --pos 0,0 - err_fail gammastep & - '' - else if hostName == "apzu" || hostName == "mammun" || hostName == "isimud" - then '' - err_fail gammastep & - '' - else builtins.throw "Host not covered in river screen setup"; - env_vars = "XDG_CURRENT_DESKTOP=river DESKTOP_SESSION=river"; - init_scr = pkgs.substituteAll { - src = ./init.sh; - inherit mappings screen_setup env_vars; - }; -in { - home.sessionVariables = { - WM = "river"; - XDG_CURRENT_DESKTOP = "river"; - DESKTOP_SESSION = "river"; - }; - - xdg.configFile."river/init".source = - sysLib.writeShellScript { - name = "river_init"; - src = init_scr; - keepPath = true; - dependencies = builtins.attrValues { - river_init_lesser = river_init_lesser.packages.${system}.default; - inherit - (pkgs) - dash - river - glib # gnome lib - gammastep - wlr-randr - yambar - mako - swaybg - swayidle - swaylock - alacritty - ; - }; - } - + /bin/river_init; - - xdg.configFile."river/res".source = ./res; -} diff --git a/modules/home/soispha/wms/river/init.sh b/modules/home/soispha/wms/river/init.sh deleted file mode 100755 index 06a2e2f4..00000000 --- a/modules/home/soispha/wms/river/init.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env bash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH - -err_fail() { - if ! "$@"; then - warning "\"$*\" failed!\n" >>~/river_log - # msg "Executing the safe init!" - # exec ~/.config/river/res/safe_init.sh - fi -} -err_fail rm ~/river_log -exec 1>>"$HOME"/river_log -exec 2>>"$HOME"/river_log - -#trap err_fail ERR - -#Setup of environment variables {{{ -err_fail riverctl spawn "exec dbus-update-activation-environment --systemd SEATD_SOCK DISPLAY WAYLAND_DISPLAY DESKTOP_SESSION=river XDG_CURRENT_DESKTOP=river" -export @env_vars@ -#}}} - -# Setup of mappings {{{ -@mappings@ -# }}} - -# Setup of Rules {{{ -err_fail riverctl rule-add -app-id float -title '*' float -err_fail riverctl rule-add -app-id mpv -title '*' float -err_fail riverctl rule-add -app-id ModernGL -title '*' float -err_fail riverctl rule-add -app-id '*' -title 'Manim Slides' float -err_fail riverctl rule-add -app-id '*' -title 'floating please' float - -err_fail riverctl rule-add -app-id '*' -title '*' ssd -err_fail riverctl rule-add -app-id firefox -title '*' csd # This remove the focus border around Firefox (which is useful because the Firefox is nearly always in its own tag.) -# }}} - -# Set riverctl settings {{{ -# background -err_fail riverctl background-color 0x002b36 -err_fail riverctl border-color-focused 0x93a1a1 -err_fail riverctl border-color-unfocused 0x586e75 - -# keyboard repeat rate -err_fail riverctl set-repeat 50 300 - -# Cursor -err_fail riverctl focus-follows-cursor normal -#riverctl hide-cursor timeout 2000 -err_fail riverctl hide-cursor when-typing enabled -err_fail riverctl set-cursor-warp on-output-change -err_fail riverctl xcursor-theme Nordzy-cursors 24 - -err_fail riverctl input pointer-1133-49970-Logitech_Gaming_Mouse_G502 pointer-accel 0 -err_fail riverctl input pointer-1133-49970-Logitech_Gaming_Mouse_G502 accel-profile none - -err_fail riverctl input pointer-12951-6505-ZSA_Technology_Labs_Moonlander_Mark_I pointer-accel 0 -err_fail riverctl input pointer-12951-6505-ZSA_Technology_Labs_Moonlander_Mark_I accel-profile none -# }}} - -# Setup of general apps {{{ -@screen_setup@ - -err_fail yambar & - -err_fail mako & -err_fail swaybg -i "$WALLPAPER" & -err_fail swayidle & -err_fail alacritty & -# }}} - -# Setup of layout [acts as exec!] {{{ -err_fail riverctl default-layout rivertile -@env_vars@ rivertile -main-ratio 0.5 -view-padding 1 -outer-padding 0 - -#riverctl default-layout luatile -#river-luatile -# }}} -# vim: ft=sh diff --git a/modules/home/soispha/wms/river/res/keys.ron b/modules/home/soispha/wms/river/res/keys.ron deleted file mode 100644 index a2bc0fa1..00000000 --- a/modules/home/soispha/wms/river/res/keys.ron +++ /dev/null @@ -1,58 +0,0 @@ -#![enable(implicit_some)] -RiverctlCommandArray( - commands: [ - // Focus change - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "T", mods: "Super", command: "focus-view", command_args: "next",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "N", mods: "Super", command: "focus-view", command_args: "previous",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "T", mods: "Super+Control", command: "focus-output", command_args: "next",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "N", mods: "Super+Control", command: "focus-output", command_args: "previous",), - - // Standard program - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "Return", mods: "Super", command: "spawn", command_args: "alacritty",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "q", mods: "Super+Shift", command: "exit", command_args: None,), - - // Screenshot - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "Print", mods: "None", command: "spawn", command_args: "screenshot_persistent",), - - // Audio - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "XF86AudioRaiseVolume", mods: "None", command: "spawn", command_args: "pactl set-sink-volume 1 +5%",), - RiverctlCommand( map_mode: Map, mode: ["normal", "locked"], key: "XF86AudioLowerVolume", mods: "None", command: "spawn", command_args: "pactl set-sink-volume 1 -5%",), - RiverctlCommand( map_mode: Map, mode: ["normal", "locked"], key: "XF86AudioMute", mods: "None", command: "spawn", command_args: "mpc toggle",), - - // Launcher - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "R", mods: "Super", command: "spawn", command_args: "rofi -show combi -modes combi -combi-modes 'window,drun,run' -show-icons",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "F1", mods: "Super", command: "spawn", command_args: "neorg dmenu",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "F2", mods: "Super", command: "spawn", command_args: "keepassxc",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "F3", mods: "Super", command: "spawn", command_args: "signal-desktop",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "F4", mods: "Super", command: "spawn", command_args: "steam",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "L", mods: "Super", command: "spawn", command_args: "lock",), - - // Client - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "f", mods: "Super", command: "toggle-fullscreen", command_args: None,), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "c", mods: "Super+Shift", command: "close", command_args: None,), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "space", mods: "Super+Control", command: "toggle-float", command_args: None,), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "Return", mods: "Super+Control", command: "zoom", command_args: None,), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "o", mods: "Super", command: "send-to-output", command_args: "next",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "T", mods: "Super+Shift", command: "swap", command_args: "next",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "N", mods: "Super+Shift", command: "swap", command_args: "previous",), - - // Toggle all tags - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "0", mods: "Super", command: "set-focused-tags", command_args: "4294967295"), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "0", mods: "Super+Shift", command: "set-view-tags", command_args: "4294967295"), - - // Mouse - RiverctlCommand( map_mode: MapMouse, mode: ["normal"], key: "BTN_LEFT", mods: "Super", command: "move-view", command_args: None,), - RiverctlCommand( map_mode: MapMouse, mode: ["normal"], key: "BTN_RIGHT", mods: "Super", command: "resize-view", command_args: None,), - - ], - // Set these mappings for the tags 0-8 with key [1-9] - tags_number: 9, - tag_commands: [ - RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super", command: "set-focused-tags",), - RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Shift", command: "set-view-tags",), - RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Control", command: "toggle-focused-tags",), - RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Shift+Control", command: "toggle-view-tags",), - ], -) - -// vim: nolinebreak nowrap textwidth=0 diff --git a/modules/home/soispha/wms/river/res/moonlander.ron b/modules/home/soispha/wms/river/res/moonlander.ron deleted file mode 100644 index 77ffa5c4..00000000 --- a/modules/home/soispha/wms/river/res/moonlander.ron +++ /dev/null @@ -1,64 +0,0 @@ -#![enable(implicit_some)] -RiverctlCommandArray( - // TODO: add toggle-focus mapping - commands: [ - // Movement - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "A", mods: "Alt+Control+Super+Shift", command: "exit", command_args: None,), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "B", mods: "Alt+Control+Super+Shift", command: "close", command_args: None,), - - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "C", mods: "Alt+Control+Super+Shift", command: "focus-view", command_args: "previous",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "D", mods: "Alt+Control+Super+Shift", command: "focus-view", command_args: "next",), - - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "E", mods: "Alt+Control+Super+Shift", command: "swap", command_args: "previous",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "F", mods: "Alt+Control+Super+Shift", command: "swap", command_args: "next",), - - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "G", mods: "Alt+Control+Super+Shift", command: "zoom", command_args: None,), - - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "H", mods: "Alt+Control+Super+Shift", command: "toggle-fullscreen", command_args: None,), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "I", mods: "Alt+Control+Super+Shift", command: "toggle-float", command_args: None,), - - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "J", mods: "Alt+Control+Super+Shift", command: "send-to-output", command_args: "next",), - - - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "K", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "alacritty",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "L", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "screenshot_persistent",), - - // Audio - // RiverctlCommand( map_mode: Map, mode: ["normal", "locked"], key: "M", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "video-pause toggle",), - RiverctlCommand( map_mode: Map, mode: ["normal", "locked"], key: "N", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "mpc toggle",), - - // Launcher - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "O", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "rofi -show combi -modes combi -combi-modes 'window,drun,run' -show-icons",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "P", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "neorg dmenu",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "Q", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "keepassxc",), - // RiverctlCommand( map_mode: Map, mode: ["normal"], key: "R", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "nheko",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "S", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "signal-desktop",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "T", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "lock",), - - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "U", mods: "Alt+Control+Super+Shift", command: "focus-output", command_args: "next",), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "V", mods: "Alt+Control+Super+Shift", command: "focus-previous-tags", command_args: None,), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "W", mods: "Alt+Control+Super+Shift", command: "send-to-previous-tags",command_args: None,), - //RiverctlCommand( map_mode: Map, mode: ["normal"], key: "X", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "bemenu-run",), - //RiverctlCommand( map_mode: Map, mode: ["normal"], key: "Y", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "bemenu-run",), - //RiverctlCommand( map_mode: Map, mode: ["normal"], key: "Z", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "bemenu-run",), - - - // Toggle all tags - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "0", mods: "Alt+Control+Super+Shift", command: "set-focused-tags", command_args: "4294967295"), - RiverctlCommand( map_mode: Map, mode: ["normal"], key: "0", mods: "Alt+Control+Shift", command: "set-view-tags", command_args: "4294967295"), - - // Mouse - RiverctlCommand( map_mode: MapMouse, mode: ["normal"], key: "BTN_LEFT", mods: "Super", command: "move-view", command_args: None,), - RiverctlCommand( map_mode: MapMouse, mode: ["normal"], key: "BTN_RIGHT", mods: "Super", command: "resize-view", command_args: None,), - ], - - // Set these mappings for the tags 0-8 with key [1-9] - tags_number: 9, - tag_commands: [ - RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Alt+Control+Super+Shift", command: "set-focused-tags",), - RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Alt+Control+Shift", command: "set-view-tags",), - // TODO: RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Control", command: "toggle-focused-tags",), - // TODO: RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Shift+Control", command: "toggle-view-tags",), - ], -) -// vim: nolinebreak nowrap textwidth=0 diff --git a/modules/home/soispha/wms/sway/default.nix b/modules/home/soispha/wms/sway/default.nix deleted file mode 100644 index bb3ddb49..00000000 --- a/modules/home/soispha/wms/sway/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -# also requires: -# security.polkit.enable = true; -{lib, ...}: { - wayland.windowManager.sway = { - enable = true; - config = { - modifier = "Mod4"; - # Use kitty as default terminal - terminal = "kitty"; - startup = [ - # Launch Firefox on start - {command = "firefox";} - ]; - }; - }; -} diff --git a/modules/home/wms/default.nix b/modules/home/wms/default.nix new file mode 100644 index 00000000..610ea2f4 --- /dev/null +++ b/modules/home/wms/default.nix @@ -0,0 +1,7 @@ +{config, ...}: { + imports = [ + # ./sway + ./river + # ./plasma + ]; +} diff --git a/modules/home/wms/plasma/default.nix b/modules/home/wms/plasma/default.nix new file mode 100644 index 00000000..f68ee272 --- /dev/null +++ b/modules/home/wms/plasma/default.nix @@ -0,0 +1,5 @@ +{config, ...}: { + services.xserver.enable = true; + services.xserver.displayManager.sddm.enable = true; + services.xserver.desktopManager.plasma5.enable = true; +} diff --git a/modules/home/wms/river/default.nix b/modules/home/wms/river/default.nix new file mode 100644 index 00000000..36a9ca74 --- /dev/null +++ b/modules/home/wms/river/default.nix @@ -0,0 +1,76 @@ +{ + pkgs, + sysLib, + river_init_lesser, + nixosConfig, + system, + ... +}: let + inherit (nixosConfig.networking) hostName; + mappings = + if hostName == "tiamat" + then '' + err_fail riverctl keyboard-layout 'us-modified' + err_fail river_init_lesser ~/.config/river/res/moonlander.ron + '' + else if hostName == "lahmu" || hostName == "apzu" || hostName == "mammun" || hostName == "isimud" + then '' + err_fail riverctl keyboard-layout 'dvorak-modified' + err_fail river_init_lesser ~/.config/river/res/keys.ron + '' + else builtins.throw "Host not covered in river mappings"; + screen_setup = + if hostName == "lahmu" + then '' + err_fail wlr-randr --output Virtual-1 --mode 1920x1080 + '' + else if hostName == "tiamat" + then '' + err_fail wlr-randr --output DP-2 --pos 2560,0 + err_fail wlr-randr --output DP-1 --scale 1.5 --pos 0,0 + err_fail gammastep & + '' + else if hostName == "apzu" || hostName == "mammun" || hostName == "isimud" + then '' + err_fail gammastep & + '' + else builtins.throw "Host not covered in river screen setup"; + env_vars = "XDG_CURRENT_DESKTOP=river DESKTOP_SESSION=river"; + init_scr = pkgs.substituteAll { + src = ./init.sh; + inherit mappings screen_setup env_vars; + }; +in { + home.sessionVariables = { + WM = "river"; + XDG_CURRENT_DESKTOP = "river"; + DESKTOP_SESSION = "river"; + }; + + xdg.configFile."river/init".source = + sysLib.writeShellScript { + name = "river_init"; + src = init_scr; + keepPath = true; + dependencies = builtins.attrValues { + river_init_lesser = river_init_lesser.packages.${system}.default; + inherit + (pkgs) + dash + river + glib # gnome lib + gammastep + wlr-randr + yambar + mako + swaybg + swayidle + swaylock + alacritty + ; + }; + } + + /bin/river_init; + + xdg.configFile."river/res".source = ./res; +} diff --git a/modules/home/wms/river/init.sh b/modules/home/wms/river/init.sh new file mode 100755 index 00000000..06a2e2f4 --- /dev/null +++ b/modules/home/wms/river/init.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH + +err_fail() { + if ! "$@"; then + warning "\"$*\" failed!\n" >>~/river_log + # msg "Executing the safe init!" + # exec ~/.config/river/res/safe_init.sh + fi +} +err_fail rm ~/river_log +exec 1>>"$HOME"/river_log +exec 2>>"$HOME"/river_log + +#trap err_fail ERR + +#Setup of environment variables {{{ +err_fail riverctl spawn "exec dbus-update-activation-environment --systemd SEATD_SOCK DISPLAY WAYLAND_DISPLAY DESKTOP_SESSION=river XDG_CURRENT_DESKTOP=river" +export @env_vars@ +#}}} + +# Setup of mappings {{{ +@mappings@ +# }}} + +# Setup of Rules {{{ +err_fail riverctl rule-add -app-id float -title '*' float +err_fail riverctl rule-add -app-id mpv -title '*' float +err_fail riverctl rule-add -app-id ModernGL -title '*' float +err_fail riverctl rule-add -app-id '*' -title 'Manim Slides' float +err_fail riverctl rule-add -app-id '*' -title 'floating please' float + +err_fail riverctl rule-add -app-id '*' -title '*' ssd +err_fail riverctl rule-add -app-id firefox -title '*' csd # This remove the focus border around Firefox (which is useful because the Firefox is nearly always in its own tag.) +# }}} + +# Set riverctl settings {{{ +# background +err_fail riverctl background-color 0x002b36 +err_fail riverctl border-color-focused 0x93a1a1 +err_fail riverctl border-color-unfocused 0x586e75 + +# keyboard repeat rate +err_fail riverctl set-repeat 50 300 + +# Cursor +err_fail riverctl focus-follows-cursor normal +#riverctl hide-cursor timeout 2000 +err_fail riverctl hide-cursor when-typing enabled +err_fail riverctl set-cursor-warp on-output-change +err_fail riverctl xcursor-theme Nordzy-cursors 24 + +err_fail riverctl input pointer-1133-49970-Logitech_Gaming_Mouse_G502 pointer-accel 0 +err_fail riverctl input pointer-1133-49970-Logitech_Gaming_Mouse_G502 accel-profile none + +err_fail riverctl input pointer-12951-6505-ZSA_Technology_Labs_Moonlander_Mark_I pointer-accel 0 +err_fail riverctl input pointer-12951-6505-ZSA_Technology_Labs_Moonlander_Mark_I accel-profile none +# }}} + +# Setup of general apps {{{ +@screen_setup@ + +err_fail yambar & + +err_fail mako & +err_fail swaybg -i "$WALLPAPER" & +err_fail swayidle & +err_fail alacritty & +# }}} + +# Setup of layout [acts as exec!] {{{ +err_fail riverctl default-layout rivertile +@env_vars@ rivertile -main-ratio 0.5 -view-padding 1 -outer-padding 0 + +#riverctl default-layout luatile +#river-luatile +# }}} +# vim: ft=sh diff --git a/modules/home/wms/river/res/keys.ron b/modules/home/wms/river/res/keys.ron new file mode 100644 index 00000000..a2bc0fa1 --- /dev/null +++ b/modules/home/wms/river/res/keys.ron @@ -0,0 +1,58 @@ +#![enable(implicit_some)] +RiverctlCommandArray( + commands: [ + // Focus change + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "T", mods: "Super", command: "focus-view", command_args: "next",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "N", mods: "Super", command: "focus-view", command_args: "previous",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "T", mods: "Super+Control", command: "focus-output", command_args: "next",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "N", mods: "Super+Control", command: "focus-output", command_args: "previous",), + + // Standard program + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "Return", mods: "Super", command: "spawn", command_args: "alacritty",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "q", mods: "Super+Shift", command: "exit", command_args: None,), + + // Screenshot + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "Print", mods: "None", command: "spawn", command_args: "screenshot_persistent",), + + // Audio + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "XF86AudioRaiseVolume", mods: "None", command: "spawn", command_args: "pactl set-sink-volume 1 +5%",), + RiverctlCommand( map_mode: Map, mode: ["normal", "locked"], key: "XF86AudioLowerVolume", mods: "None", command: "spawn", command_args: "pactl set-sink-volume 1 -5%",), + RiverctlCommand( map_mode: Map, mode: ["normal", "locked"], key: "XF86AudioMute", mods: "None", command: "spawn", command_args: "mpc toggle",), + + // Launcher + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "R", mods: "Super", command: "spawn", command_args: "rofi -show combi -modes combi -combi-modes 'window,drun,run' -show-icons",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "F1", mods: "Super", command: "spawn", command_args: "neorg dmenu",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "F2", mods: "Super", command: "spawn", command_args: "keepassxc",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "F3", mods: "Super", command: "spawn", command_args: "signal-desktop",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "F4", mods: "Super", command: "spawn", command_args: "steam",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "L", mods: "Super", command: "spawn", command_args: "lock",), + + // Client + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "f", mods: "Super", command: "toggle-fullscreen", command_args: None,), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "c", mods: "Super+Shift", command: "close", command_args: None,), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "space", mods: "Super+Control", command: "toggle-float", command_args: None,), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "Return", mods: "Super+Control", command: "zoom", command_args: None,), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "o", mods: "Super", command: "send-to-output", command_args: "next",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "T", mods: "Super+Shift", command: "swap", command_args: "next",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "N", mods: "Super+Shift", command: "swap", command_args: "previous",), + + // Toggle all tags + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "0", mods: "Super", command: "set-focused-tags", command_args: "4294967295"), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "0", mods: "Super+Shift", command: "set-view-tags", command_args: "4294967295"), + + // Mouse + RiverctlCommand( map_mode: MapMouse, mode: ["normal"], key: "BTN_LEFT", mods: "Super", command: "move-view", command_args: None,), + RiverctlCommand( map_mode: MapMouse, mode: ["normal"], key: "BTN_RIGHT", mods: "Super", command: "resize-view", command_args: None,), + + ], + // Set these mappings for the tags 0-8 with key [1-9] + tags_number: 9, + tag_commands: [ + RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super", command: "set-focused-tags",), + RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Shift", command: "set-view-tags",), + RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Control", command: "toggle-focused-tags",), + RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Shift+Control", command: "toggle-view-tags",), + ], +) + +// vim: nolinebreak nowrap textwidth=0 diff --git a/modules/home/wms/river/res/moonlander.ron b/modules/home/wms/river/res/moonlander.ron new file mode 100644 index 00000000..77ffa5c4 --- /dev/null +++ b/modules/home/wms/river/res/moonlander.ron @@ -0,0 +1,64 @@ +#![enable(implicit_some)] +RiverctlCommandArray( + // TODO: add toggle-focus mapping + commands: [ + // Movement + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "A", mods: "Alt+Control+Super+Shift", command: "exit", command_args: None,), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "B", mods: "Alt+Control+Super+Shift", command: "close", command_args: None,), + + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "C", mods: "Alt+Control+Super+Shift", command: "focus-view", command_args: "previous",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "D", mods: "Alt+Control+Super+Shift", command: "focus-view", command_args: "next",), + + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "E", mods: "Alt+Control+Super+Shift", command: "swap", command_args: "previous",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "F", mods: "Alt+Control+Super+Shift", command: "swap", command_args: "next",), + + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "G", mods: "Alt+Control+Super+Shift", command: "zoom", command_args: None,), + + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "H", mods: "Alt+Control+Super+Shift", command: "toggle-fullscreen", command_args: None,), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "I", mods: "Alt+Control+Super+Shift", command: "toggle-float", command_args: None,), + + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "J", mods: "Alt+Control+Super+Shift", command: "send-to-output", command_args: "next",), + + + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "K", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "alacritty",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "L", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "screenshot_persistent",), + + // Audio + // RiverctlCommand( map_mode: Map, mode: ["normal", "locked"], key: "M", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "video-pause toggle",), + RiverctlCommand( map_mode: Map, mode: ["normal", "locked"], key: "N", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "mpc toggle",), + + // Launcher + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "O", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "rofi -show combi -modes combi -combi-modes 'window,drun,run' -show-icons",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "P", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "neorg dmenu",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "Q", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "keepassxc",), + // RiverctlCommand( map_mode: Map, mode: ["normal"], key: "R", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "nheko",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "S", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "signal-desktop",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "T", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "lock",), + + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "U", mods: "Alt+Control+Super+Shift", command: "focus-output", command_args: "next",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "V", mods: "Alt+Control+Super+Shift", command: "focus-previous-tags", command_args: None,), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "W", mods: "Alt+Control+Super+Shift", command: "send-to-previous-tags",command_args: None,), + //RiverctlCommand( map_mode: Map, mode: ["normal"], key: "X", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "bemenu-run",), + //RiverctlCommand( map_mode: Map, mode: ["normal"], key: "Y", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "bemenu-run",), + //RiverctlCommand( map_mode: Map, mode: ["normal"], key: "Z", mods: "Alt+Control+Super+Shift", command: "spawn", command_args: "bemenu-run",), + + + // Toggle all tags + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "0", mods: "Alt+Control+Super+Shift", command: "set-focused-tags", command_args: "4294967295"), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "0", mods: "Alt+Control+Shift", command: "set-view-tags", command_args: "4294967295"), + + // Mouse + RiverctlCommand( map_mode: MapMouse, mode: ["normal"], key: "BTN_LEFT", mods: "Super", command: "move-view", command_args: None,), + RiverctlCommand( map_mode: MapMouse, mode: ["normal"], key: "BTN_RIGHT", mods: "Super", command: "resize-view", command_args: None,), + ], + + // Set these mappings for the tags 0-8 with key [1-9] + tags_number: 9, + tag_commands: [ + RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Alt+Control+Super+Shift", command: "set-focused-tags",), + RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Alt+Control+Shift", command: "set-view-tags",), + // TODO: RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Control", command: "toggle-focused-tags",), + // TODO: RiverctlTagCommand( map_mode: Map, mode: ["normal"], mods: "Super+Shift+Control", command: "toggle-view-tags",), + ], +) +// vim: nolinebreak nowrap textwidth=0 diff --git a/modules/home/wms/sway/default.nix b/modules/home/wms/sway/default.nix new file mode 100644 index 00000000..bb3ddb49 --- /dev/null +++ b/modules/home/wms/sway/default.nix @@ -0,0 +1,16 @@ +# also requires: +# security.polkit.enable = true; +{lib, ...}: { + wayland.windowManager.sway = { + enable = true; + config = { + modifier = "Mod4"; + # Use kitty as default terminal + terminal = "kitty"; + startup = [ + # Launch Firefox on start + {command = "firefox";} + ]; + }; + }; +} -- cgit 1.4.1