diff options
author | ene <ene@sils.li> | 2023-02-17 16:51:44 +0100 |
---|---|---|
committer | ene <ene@sils.li> | 2023-02-17 16:51:44 +0100 |
commit | 32d4278611a8e9a88ca54a27a072985087015039 (patch) | |
tree | 3f3d73e246be7ba75d1b368e50dcbc37c8429609 /home-manager/config | |
parent | Feat(impermanence): Add full stack tempfs (diff) | |
download | nixos-config-32d4278611a8e9a88ca54a27a072985087015039.tar.gz nixos-config-32d4278611a8e9a88ca54a27a072985087015039.zip |
Feat(home-manager): Move configs in their own directory
Diffstat (limited to 'home-manager/config')
82 files changed, 5961 insertions, 0 deletions
diff --git a/home-manager/config/alacritty/default.nix b/home-manager/config/alacritty/default.nix new file mode 100644 index 00000000..2a18b0d9 --- /dev/null +++ b/home-manager/config/alacritty/default.nix @@ -0,0 +1,583 @@ +{config, ...}: { +programs.alacritty = { + enable = true; + settings = { + env = { + TERM = "alacritty"; + }; + window = { + dimensionns = { + columns = 0; + lines = 0; + }; + + positinon = { + #x = 0; + #y = 0; + }; + + padding = { + x = 5; + y = 5; + }; + + dynamic_padding = false; + decorations = "None"; + opacity = 0.9; + startup_mode = "Windowed"; + title = "Alacritty"; + dynamic_title = true; + class = { + instance = "Alacritty"; + general = "Alacritty"; + }; + docorations_theme_variant = "None"; + }; + + scrolling = { + history = 10000; + multiplier = 3; + }; + + font = { + normal = { + family = "Source Code Pro"; + style = "Regular"; + }; + bold = { + family = "Source Code Pro"; + style = "Bold"; + }; + italic = { + family = "Source Code Pro"; + style = "Italic"; + }; + bold_italic = { + family = "Source Code Pro"; + style = "Bold Italic"; + }; + size = 12.0; + offset = { + x = -1; + y = -1; + }; + glyph_offset = { + x = -1; + y = -1; + }; + builtin_box_drawing = true; + }; + + draw_bold_text_with_bright_colors = false; + + colors = { + primary = { + background = "#191919"; + foreground = "#d8dee9"; + #dim_foreground= "#828482"; + #bright_foreground= "#eaeaea"; + + cursor = { + text = "#191919"; + cursor = "#d8dee9"; + }; + vi_mode_cursor = { + text = "CellBackground"; + cursor = "CellForeground"; + }; + search = { + matches = { + foreground = "#000000"; + background = "#ffffff"; + }; + focused_match = { + foreground = "#ffffff"; + background = "#000000"; + }; + }; + + hints = { + start = { + foreground = "#1d1f21"; + background = "#e9ff5e"; + }; + + end = { + foreground = "#e9ff5e"; + background = "#1d1f21"; + }; + line_indicator = { + #foreground= "None"; + #background= "None"; + }; + + footer_bar = { + background = "#c5c8c6"; + foreground = "#1d1f21"; + }; + + selection = { + text = "#191919"; + background = "#d8dee9"; + }; + + normal = { + black = "#191919"; + red = "#b02626"; + green = "#40a62f"; + yellow = "#f2e635"; + blue = "#314ad0"; + magenta = "#b30ad0"; + cyan = "#32d0fc"; + white = "#acadb1"; + }; + bright = { + black = "#36393d"; + red = "#ce2727"; + green = "#47c930"; + yellow = "#fff138"; + blue = "#2e4bea"; + magenta = "#cc15ed"; + cyan = "#54d9ff"; + white = "#dbdbdb"; + }; + + dim = { + black = "#676f78"; + red = "#b55454"; + green = "#78a670"; + yellow = "#faf380"; + blue = "#707fd0"; + magenta = "#c583d0"; + cyan = "#8adaf1"; + white = "#e0e3e7"; + }; + + #indexed_colors = [ + # {index = 16; color = "#ff00ff";} + # ]; + transparent_background_colors = false; # TODO + }; + }; + + bell = { + animation = "EaseOutExpo"; + duration = 0; + color = "#ffffff"; + command = "None"; + }; + + selection = { + semantic_escape_chars = ",│`|:\"' ()[]{}<>\t"; + save_to_clipboard = false; + }; + + cursor = { + style = { + shape = "Beam"; + blinking = "On"; + }; + vi_mode_style = "None"; + blink_interval = 750; + blink_timeout = 5; + unfocused_hollow = true; + thickness = 0.15; + }; + live_config_reload = true; + + #shell = { + # program = "/bin/sh"; + # args = ["--login"]; + #} + + working_directory = "None"; + + ipc_socket = true; # TODO + + mouse = { + hide_when_typing = false; + double_click.threshold = 300; + triple_click.threshold = 300; + }; + + hints = { + alphabet = "jfkdls;ahgurieowpq"; + 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"; + }; + } + + { + # 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"; + }; + } + ]; + + mouse_bindings = [ + # { mouse = "Right"; action = "ExpandSelection" ;} + # { mouse = "Right"; mods = "Control"; action = "ExpandSelection" ;} + # { mouse = "Middle"; mode = "~Vi"; action = "PasteSelection" ;} + { + mouse = "Middle"; + action = "Copy"; + } + ]; + + key_bindings = [ + # (Windows, Linux, and BSD only) + { + 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"; + } + ]; + }; + }; + + #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/home-manager/config/cups/default.nix b/home-manager/config/cups/default.nix new file mode 100644 index 00000000..4fef0a9c --- /dev/null +++ b/home-manager/config/cups/default.nix @@ -0,0 +1,3 @@ +{config, ...}: { +xdg.configFile."cups/lpoptions".text = "Default Brother\n"; +} diff --git a/home-manager/config/default.nix b/home-manager/config/default.nix new file mode 100644 index 00000000..d056d81e --- /dev/null +++ b/home-manager/config/default.nix @@ -0,0 +1,28 @@ +# vim: ts=2 +{_}: { + imports = [ + ./alacritty + ./cups + ./firefox + ./gammastep + ./git + ./grades + ./gtk + ./keepassxc + ./latexindent + ./less + ./lf + ./mako + ./mpd + ./neovim + ./npm + ./python + ./rclone + ./river + ./ssh + ./swayidle + ./swaylock + ./yambar + ./zsh + ]; +} diff --git a/home-manager/config/firefox/chrome/userChrome.css b/home-manager/config/firefox/chrome/userChrome.css new file mode 100644 index 00000000..0b3aff77 --- /dev/null +++ b/home-manager/config/firefox/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/home-manager/config/firefox/default.nix b/home-manager/config/firefox/default.nix new file mode 100644 index 00000000..88fad227 --- /dev/null +++ b/home-manager/config/firefox/default.nix @@ -0,0 +1,232 @@ +# vim: ts=2 +{ + config, + pkgs, + lib, + stdenv, + strip_js_comments, + generate_extensions, + user_js, + system, + ... +}: let + userChrome = builtins.readFile ./chrome/userChrome.css; + + user_js_override = pkgs.writeText "user.override.js" (builtins.readFile ./settings/override.js); + user_js_nix = pkgs.runCommand "user.js" {} '' + mkdir $out; + cat "${user_js}/user.js" > $out/user.js; + cat "${user_js_override}" >> $out/user.js; + + "${strip_js_comments.app.${system}.default.program}" $out/user.js > $out/user_clean.js; + # echo "{" > $out/user.nix.tmp + # sed 's/user_pref(\(.*\)",\(.*\));/\1" = \2;/' $out/user_clean.js >> $out/user.nix.tmp; + # echo "}" >> $out/user.nix.tmp + # awk '!/"_user.js.parrot"/' $out/user.nix.tmp >> $out/user.nix; # delete duplicate keys + ''; + + extensions = builtins.map buildFirefoxXpiAddon ( + lib.attrValues ( + lib.importJSON ./settings/extensions.json + ) + ); + + # source: https://gitlab.com/rycee/nur-expressions/-/blob/master/pkgs/firefox-addons/default.nix + buildFirefoxXpiAddon = { + pname, + version, + addonId, + url, + sha256, +#meta, + ... + }: + pkgs.stdenv.mkDerivation { + name = "${pname}-${version}"; + +#inherit meta; + + src = builtins.fetchurl {inherit url sha256;}; + + preferLocalBuild = true; + allowSubstitutes = true; + + buildCommand = '' + dst="$out/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" + mkdir -p "$dst" + install -v -m644 "$src" "$dst/${addonId}.xpi" + ''; + }; + + settings = { + # Allow my custom css + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + + # might improve performance TODO + "gfx.webrender.all" = true; + + # disable updates (pretty pointless with nix) + "extensions.update.autoUpdateDefault" = false; + "extensions.update.enabled" = false; + "app.update.channel" = "default"; + + "browser.ctrlTab.recentlyUsedOrder" = false; + + "browser.download.useDownloadDir" = true; + "browser.download.dir" = "${config.home.homeDirectory}/media/downloads"; + "browser.download.folderList" = 2; # TODO + "browser.download.viewableInternally.typeWasRegistered.svg" = true; + "browser.download.viewableInternally.typeWasRegistered.webp" = true; + "browser.download.viewableInternally.typeWasRegistered.xml" = true; + + # TODO what does this do? + "browser.search.widget.inNavBar" = true; + + "browser.shell.checkDefaultBrowser" = false; + "browser.tabs.loadInBackground" = true; + "browser.urlbar.placeholderName" = "Brave"; + + "general.autoScroll" = true; + + # Set the tabs and bookmarks + "browser.tabs.inTitlebar" = 1; + "browser.toolbars.bookmarks.visibility" = "always"; + + # Theme + "extensions.activeThemeID" = "firefox-alpenglow@mozilla.org"; + "extensions.extensions.activeThemeID" = "firefox-alpenglow@mozilla.org"; + + # highlight all entries when searching + "findbar.highlightAll" = true; + + # TODO + #"extensions.webcompat.enable_picture_in_picture_overrides" = true; + #"extensions.webcompat.enable_shims" = true; + #"extensions.webcompat.perform_injections" = true; + #"extensions.webcompat.perform_ua_overrides" = true; + + # onlykey / copied from a yubikey config + #"security.webauth.u2f" = true; + #"security.webauth.webauthn" = true; + #"security.webauth.webauthn_enable_softtoken" = true; + #"security.webauth.webauthn_enable_usbtoken" = true; + }; +in { + home.packages = [ + pkgs.firefox-wayland + ]; + home.sessionVariables = { + # improve touch input & make scrolling smother + MOZ_USE_XINPUT2 = "1"; + # improve wayland support + MOZ_ENABLE_WAYLAND = 1; + XDG_CURRENT_DESKTOP = "river"; + }; + xdg.mimeApps = { + enable = true; + defaultApplications = { + "text/html" = ["firefox.desktop"]; + "x-scheme-handler/http" = ["firefox.desktop"]; + "x-scheme-handler/https" = ["firefox.desktop"]; + "x-scheme-handler/about" = ["firefox.desktop"]; + "x-scheme-handler/unknown" = ["firefox.desktop"]; + }; + }; + programs.firefox = { + enable = true; + package = pkgs.firefox; + profiles."default" = { + inherit extensions; + isDefault = true; + id = 0; + name = "default"; + + inherit userChrome; + + search = { + default = "Brave Search"; + force = true; + + engines = { + "Brave Search" = { + urls = [{template = "https://search.brave.com/search?q={searchTerms}";}]; + iconUpdateURL = "https://cdn.search.brave.com/serp/v1/static/brand/8eabe183f0d1f2cb3e2916b7b20c310efd196d740c8cecd341732fcd396fb665-apple-touch-icon.png"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = ["@bs"]; + }; + + "Nix Packages" = { + urls = [ + { + template = "https://search.nixos.org/packages"; + params = [ + { + name = "type"; + value = "packages"; + } + { + name = "query"; + value = "{searchTerms}"; + } + ]; + } + ]; + + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["@np"]; + }; + + "NixOS Wiki" = { + urls = [{template = "https://nixos.wiki/index.php?search={searchTerms}";}]; + iconUpdateURL = "https://nixos.wiki/favicon.png"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = ["@nw"]; + }; + "Bing".metaData.hidden = true; + "Google".metaData.hidden = true; + "Amazon.de".metaData.hidden = true; + }; + }; + + bookmarks = [ + { + name = "Rust::std"; + # TODO + url = "file:///home/dt/.local/share/rustup/toolchains/stable-x86_64-unknown-linux-gnu/share/doc/rust/html/std/all.html"; + } + + { + name = "Feed - Piped"; + url = "https://piped.kavin.rocks/feed"; + } + + { + name = "DeepL Translate"; + url = "https://www.deepl.com/translator#en/de/test"; + } + + { + name = "Google Scholar"; + url = "https://scholar.google.com/"; + } + + { + name = "ArchWiki"; + url = "https://wiki.archlinux.org/"; + } + + { + name = "Arch Package "; + url = "https://archlinux.org/packages/"; + } + + { + name = "layout.css.devPixelsPerPx"; + url = "about:config"; + } + ]; + inherit settings; + extraConfig = builtins.readFile "${user_js_nix}/user.js"; + }; + }; +} diff --git a/home-manager/config/firefox/scripts/unzip_mozlz4.py b/home-manager/config/firefox/scripts/unzip_mozlz4.py new file mode 100755 index 00000000..311fd214 --- /dev/null +++ b/home-manager/config/firefox/scripts/unzip_mozlz4.py @@ -0,0 +1,43 @@ +#!/usr/bin/python +# source: https://unix.stackexchange.com/a/497861 +# Command-line tool to decompress mozLz4 files used for example by Firefox to store various kinds of session backup information. +# Works in both Python 2.7.15 and 3.6.7, as of version 2.1.6 of the LZ4 Python bindings at pypi.org/project/lz4. +# To use in another script, simply cut and paste the import statement and the mozlz4_to_text() function (lines 8 to 17). + +import lz4.block # pip install lz4 --user + + +def mozlz4_to_text(filepath): + # Given the path to a "mozlz4", "jsonlz4", "baklz4" etc. file, + # return the uncompressed text. + bytestream = open(filepath, "rb") + bytestream.read(8) # skip past the b"mozLz40\0" header + valid_bytes = bytestream.read() + text = lz4.block.decompress(valid_bytes) + return text + + +def main(args): + # Given command-line arguments of an input filepath for a ".mozlz4" file + # and optionally an output filepath, write the decompressed text to the + # output filepath. + # Default output filepath is the input filepath minus the last three characters + # (e.g. "foo.jsonlz4" becomes "foo.json") + filepath_in = args[0] + if len(args) < 2: + filepath_out = filepath_in[:-3] + else: + filepath_out = args[1] + text = mozlz4_to_text(filepath_in) + with open(filepath_out, "wb") as outfile: + outfile.write(text) + print("Wrote decompressed text to {}".format(filepath_out)) + + +if __name__ == "__main__": + import sys + args = sys.argv[1:] + if args and not args[0] in ("--help", "-h"): + main(args) + else: + print("Usage: mozlz4.py <mozlz4 file to read> <location to write>") diff --git a/home-manager/config/firefox/scripts/update_extensions b/home-manager/config/firefox/scripts/update_extensions new file mode 100755 index 00000000..97f7c0ba --- /dev/null +++ b/home-manager/config/firefox/scripts/update_extensions @@ -0,0 +1,20 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + +tmp=$(mktmp) +cat << EOF > $tmp + darkreader + firenvim + keepassxc-browser + simple-tab-groups + ublock-origin +EOF + + +nix shell git+https://codeberg.org/ene/generate_moz_extension.git -c generate_extensions $(cat $tmp) > "$(dirname $0)"/../settings/extensions.json + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/firefox/settings.nix b/home-manager/config/firefox/settings.nix new file mode 100644 index 00000000..f38e23b3 --- /dev/null +++ b/home-manager/config/firefox/settings.nix @@ -0,0 +1,660 @@ +{config, ...}: { + settings = { + accessibility.typeaheadfind.flashBar = 0; + + app = { + normandy = { + first_run = false; + migrationsApplied = 12; + startupRolloutPrefs.extensions.webcompat.disabled_shims.AdvertisingDotCom = true; + user_id = "9b445ee0-1055-4b05-ad18-cdcfd8d15cdb"; + }; + + update.lastUpdateTime = { + addon-background-update-timer = 1675712908; + browser-cleanup-thumbnails = 1675795148; + recipe-client-addon-run = 1675774559; + region-update-timer = 1675779021; + rs-experiment-loader-timer = 1675777057; + search-engine-update-timer = 1675777177; + services-settings-poll-changes = 1675710065; + telemetry_modules_ping = 1675779141; + xpi-signature-verification = 1675706945; + }; + }; + + browser = { + anchor_color = "#57e389"; + + bookmarks = { + editDialog.confirmationHintShowCount = 3; + restore_default_bookmarks = false; + }; + + contentblocking = { + category = "custom"; + cfr-milestone.milestone-achieved = 10000; + report.hide_vpn_banner = true; + }; + + contextual-services.contextId = "{c840a4ea-6278-46b7-bb56-21d7faab57dd}"; + + discovery.enabled = false; + + display = { + background_color = "#551a8b"; + foreground_color = "#ffbe6f"; + use_system_colors = true; + }; + + download = { + dir = "/home/dt/media/downloads"; + folderList = 2; + lastDir = "/home/dt/media/downloads"; + panel.shown = true; + viewableInternally.typeWasRegistered.avif = true; + viewableInternally.typeWasRegistered.webp = true; + }; + + eme.ui.firstContentShown = true; + + engagement = { + ctrlTab.has-used = true; + downloads-button.has-used = true; + }; + + firefox-view.feature-tour = { + message = "FIREFOX_VIEW_FEATURE_TOUR"; + screen = ""; + complete = true; + }; + + firefox-view.view-count = 1; + + laterrun.bookkeeping = { + profileCreationTime = 1654872928; + sessionCount = 39; + }; + + migration.version = 133; + + newtabpage = { + activity-stream = { + impressionId = "{ade7a2f2-7d8f-49b0-a684-d2bb3bda1e09}"; + improvesearch.topSiteSearchShortcuts.havePinned = "google"; + }; + pinned = "[]"; + storageVersion = 1; + }; + + pageActions.persistedActions = { + ids = ["bookmark"]; + idsInUrlbar = ["bookmark"]; + idsInUrlbarPreProton = []; + version = 1; + }; + + pagethumbnails.storage_version = 3; + + protections_panel.infoMessage.seen = true; + + proton.toolbar.version = 3; + + region.update.updated = 1675779022; + + "rights.3.shown" = true; + + safebrowsing.provider = { + google4.lastupdatetime = "1675794837495"; + google4.nextupdatetime = "1675796650495"; + mozilla.lastupdatetime = "1675795004767"; + mozilla.nextupdatetime = "1675816604767"; + }; + + search = { + region = "DE"; + separatePrivateDefault.urlbarResult.enabled = false; + }; + + sessionstore.upgradeBackup.latestBuildID = "20230130183437"; + + shell.mostRecentDateSetAsDefault = "1675756595"; + + startup = { + couldRestoreSession.count = 1; + homepage_override.buildID = "20230130183437"; + homepage_override.mstone = "109.0.1"; + lastColdStartupCheck = 1675756594; + page = 3; + upgradeDialog.version = 106; + }; + + tabs.inTitlebar = 1; + + toolbars.bookmarks.visibility = "always"; + + uiCustomization.state = { + placements = { + widget-overflow-fixed-list = []; + unified-extensions-area = ["yt_pause_example_com-browser-action" "_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action"]; + + nav-bar = [ + "back-button" + "forward-button" + "stop-reload-button" + "urlbar-container" + "save-to-pocket-button" + "downloads-button" + "fxa-toolbar-menu-button" + "enhancerforyoutube_maximerf_addons_mozilla_org-browser-action" + "plasma-browser-integration_kde_org-browser-action" + "tab-stash_condordes_net-browser-action" + "addon_darkreader_org-browser-action" + "vim-vixen_i-beam_org-browser-action" + "simple-tab-groups_drive4ik-browser-action" + "e2933bff1d77b6ea81b2df1dda992244e7892b6c_temporary-addon-browser-action" + "74a30c85e187d69156225de1c415366fafa84866_temporary-addon-browser-action" + "e6fd60f4f456c06312d75c0eceabef8ee0c28bbb_temporary-addon-browser-action" + "addon_example_com-browser-action" + "pause_example_com-browser-action" + "stackoverflowtweakstools_richard_com-browser-action" + "keepassxc-browser_keepassxc_org-browser-action" + "firenvim_lacamb_re-browser-action" + ]; + + toolbar-menubar = ["menubar-items"]; + + TabsToolbar = ["tabbrowser-tabs" "new-tab-button" "alltabs-button"]; + PersonalToolbar = ["personal-bookmarks"]; + + seen = [ + "save-to-pocket-button" + "enhancerforyoutube_maximerf_addons_mozilla_org-browser-action" + "plasma-browser-integration_kde_org-browser-action" + "developer-button" + "tab-stash_condordes_net-browser-action" + "addon_darkreader_org-browser-action" + "vim-vixen_i-beam_org-browser-action" + "simple-tab-groups_drive4ik-browser-action" + "_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action" + "e2933bff1d77b6ea81b2df1dda992244e7892b6c_temporary-addon-browser-action" + "74a30c85e187d69156225de1c415366fafa84866_temporary-addon-browser-action" + "e6fd60f4f456c06312d75c0eceabef8ee0c28bbb_temporary-addon-browser-action" + "addon_example_com-browser-action" + "pause_example_com-browser-action" + "yt_pause_example_com-browser-action" + "stackoverflowtweakstools_richard_com-browser-action" + "keepassxc-browser_keepassxc_org-browser-action" + "firenvim_lacamb_re-browser-action" + ]; + dirtyAreaCache = ["nav-bar" "toolbar-menubar" "PersonalToolbar" "unified-extensions-area"]; + currentVersion = 18; + newElementCount = 6; + browser = { + urlbar = { + quicksuggest = { + migrationVersion = 2; + scenario = "history"; + }; + tabToSearch.onboard.interactionsLeft = 0; + tipShownCount.searchTip_onboard = 4; + }; + visited_color = "#cdab8f"; + }; + + datareporting.policy = { + dataSubmissionPolicyAcceptedVersion = 2; + dataSubmissionPolicyNotifiedTime = "1655649367480"; + }; + + devtools = { + aboutdebugging = { + collapsibilities.processes = false; + tmpExtDirPath = "/home/dt/repos/javascript/firefox-extension/YouTube-Extension"; + }; + + debugger = { + pending-selected-location = { + sourceId = "source-file=///home/dt/repos/web/i5/test/silas.html"; + line = 0; + column = 0; + sourceActorId = "server0.conn0.windowGlobal423054278666/source25"; + url = "file=///home/dt/repos/web/i5/test/silas.html"; + }; + prefs-schema-version = 11; + }; + everOpened = true; + netmonitor = { + columnsData = [ + { + name = "status"; + minWidth = 30; + width = 6.67; + } + { + name = "method"; + minWidth = 30; + width = 6.67; + } + { + name = "domain"; + minWidth = 30; + width = 13.33; + } + { + name = "file"; + minWidth = 30; + width = 33.32; + } + { + name = "url"; + minWidth = 30; + width = 25; + } + { + name = "initiator"; + minWidth = 30; + width = 13.33; + } + { + name = "type"; + minWidth = 30; + width = 6.67; + } + { + name = "transferred"; + minWidth = 30; + width = 13.33; + } + { + name = "contentSize"; + minWidth = 30; + width = 6.67; + } + { + name = "waterfall"; + minWidth = 150; + width = 11.11; + } + ]; + customRequest = { + "method" = "GET"; + "url" = ""; + "urlQueryParams" = []; + "headers" = []; + "postBody" = ""; + }; + msg.visibleColumns = ["data" "time"]; + panes-search-height = 1175; + panes-search-width = 466; + }; + performance.recording = { + entries = 134217728; + features = ["screenshots" "js" "cpu"]; + threads = ["GeckoMain" "Compositor" "Renderer" "DOM Worker"]; + }; + + selfxss.count = 5; + + toolbox = { + alwaysOnTop = false; + footer.height = 692; + host = "right"; + previousHost = "bottom"; + selectedTool = "webconsole"; + sidebar.width = 699; + splitconsoleEnabled = true; + }; + + toolsidebar-height.inspector = 350; + "toolsidebar-width.inspector" = 244; # TODO + toolsidebar-width.inspector.splitsidebar = 0; + + webconsole.filter = { + css = true; + filter = { + net = true; + netxhr = true; + }; + + input = { + editor = true; + editorOnboarding = false; + }; + + persistlog = true; + timestampMessages = true; + }; + }; + distribution = { + archlinux.bookmarksProcessed = true; + iniFile.exists = { + appversion = "109.0.1"; + value = true; + }; + }; + + doh-rollout = { + balrog-migration-done = true; + doneFirstRun = true; + home-region = "DE"; + }; + + dom = { + forms.autocomplete.formautofill = true; + push.userAgentID = "5e34b02066224519abd755189f802422"; + security.https_only_mode_ever_enabled = true; + }; + + extensions = { + activeThemeID = "default-theme@mozilla.org"; + blocklist.pingCountVersion = -1; + databaseSchema = 35; + formautofill.creditCards.used = 2; + getAddons = { + cache.lastUpdate = 1675712909; + databaseSchema = 6; + }; + + lastAppBuildId = "20230130183437"; + lastAppVersion = "109.0.1"; + + lastPlatformVersion = "109.0.1"; + + pendingOperations = false; + pictureinpicture.enable_picture_in_picture_overrides = true; + systemAddonSet = { + "schema" = 1; + "addons" = {}; + }; + ui = { + dictionary.hidden = true; + extension.hidden = false; + lastCategory = "addons://list/extension"; + locale.hidden = true; + sitepermission.hidden = true; + theme.hidden = false; + }; + + webcompat = { + enable_shims = true; + perform_injections = true; + perform_ua_overrides = true; + }; + + webextensions = { + ExtensionStorageIDB.migrated = { + "addon@darkreader.org" = true; + "enhancerforyoutube@maximerf.addons.mozilla.org" = true; + "firenvim@lacamb.re" = true; + "keepassxc-browser@keepassxc.org" = true; + "screenshots@mozilla.org" = true; + "simple-tab-groups@drive4ik" = true; + "{762f9885-5a13-4abd-9c77-433dcd38b8fd}" = true; + }; + uuids = { + "doh-rollout@mozilla.org" = "3830b9af-a7ab-45ae-a10a-df08c432e9f7"; + "formautofill@mozilla.org" = "e05754ff-1fe6-4e78-84dc-f5cc845da180"; + "pictureinpicture@mozilla.org" = "d7135e8a-368e-4f92-bd09-e19c0975de7f"; + "screenshots@mozilla.org" = "6a611696-f2f7-41c4-bb4e-a56eda2447a5"; + "webcompat-reporter@mozilla.org" = "99972218-65f7-4a9a-9f1d-8dcd1f86a563"; + "webcompat@mozilla.org" = "71ce01a8-6fa2-4b21-ba57-59b36478daf6"; + "default-theme@mozilla.org" = "f8e9414d-e977-4d2a-8941-93bf72212b01"; + "addons-search-detection@mozilla.com" = "344d2821-32ec-418f-8665-32c5ae14c40b"; + "google@search.mozilla.org" = "caa826ac-7699-4cdc-9a01-3b35145dbb92"; + "wikipedia@search.mozilla.org" = "ee7a4ba4-10d2-440b-a259-33fc62084480"; + "bing@search.mozilla.org" = "bb80bdc4-bd41-47a8-b9d5-10d4a57f2b2d"; + "ddg@search.mozilla.org" = "2ad38783-b68d-41f2-a76d-c4e800f65d64"; + "amazon@search.mozilla.org" = "aac3e95f-8267-4182-b8a2-2b949160adb7"; + "enhancerforyoutube@maximerf.addons.mozilla.org" = "1ecb30aa-dd3a-4e1c-b405-7400176b683a"; + "@contain-facebook" = "7e386381-dd25-43f7-9fcc-c3f541f2a458"; + "addon@darkreader.org" = "9b7b4403-7e99-4138-a9a9-114b72299253"; + "simple-tab-groups@drive4ik" = "3f29df14-5127-4de4-863c-17846549e474"; + "{762f9885-5a13-4abd-9c77-433dcd38b8fd}" = "3f954cd9-0f14-4595-ba83-4dc0f318e002"; + "e2933bff1d77b6ea81b2df1dda992244e7892b6c@temporary-addon" = "b6ad60ec-a560-427d-aaac-c2c568d69495"; + "pause@example.com" = "87db7ee4-2820-4a56-bb94-9d837886e029"; + "yt_pause@example.com" = "ba2218e1-792e-47a5-99ae-942fc46441fd"; + "keepassxc-browser@keepassxc.org" = "00b8fb40-3ba7-4a33-b086-cb71c5bbe952"; + "firenvim@lacamb.re" = "cf26e07b-4e07-4a42-978f-30f92409ae88"; + }; + }; + }; + + findbar.highlightAll = true; + + fission.experiment.max-origins = { + last-disqualified = 1675596365; + last-qualified = 1675793855; + qualified = false; + }; + + gecko.handlerService.defaultHandlersVersion = 1; + + gfx.blacklist = { + layers.opengl.failureid = "FEATURE_FAILURE_SOFTWARE_GL"; + + "vaapi" = 4; + "vaapi.failureid" = "FEATURE_FAILURE_VAAPI_TEST_FAILED"; + }; + + idle.lastDailyNotification = 1675756850; + + intl.regional_prefs.use_os_locales = true; + + media = { + eme.enabled = true; + + gmp-gmpopenh264 = { + abi = "x86_64-gcc3"; + lastDownload = 1668329402; + lastDownloadFailReason = "Error: Failed downloading via ServiceRequest, status: 0, reason: error"; + lastDownloadFailed = 1666889531; + lastInstallStart = 1668329400; + lastUpdate = 1668329402; + version = "1.8.1.2"; + }; + + gmp-manager = { + buildID = "20230130183437"; + lastCheck = 1675756691; + lastEmptyCheck = 1675756691; + }; + + gmp-widevinecdm = { + abi = "x86_64-gcc3"; + lastDownload = 1674828538; + lastInstallStart = 1674828533; + lastUpdate = 1674828538; + version = "4.10.2557.0"; + }; + + gmp.storage.version.observed = 1; + + videocontrols.picture-in-picture.video-toggle.enabled = false; + }; + + network = { + cookie.cookieBehavior = 1; + http.referer.disallowCrossSiteRelaxingDefault.top_navigation = true; + }; + + pdfjs = { + enabledCache.state = true; + migrationVersion = 2; + }; + + permissions.default = { + camera = 2; + desktop-notification = 2; + geo = 2; + microphone = 2; + xr = 2; + }; + + places.database.lastMaintenance = 1675756852; + + pref.privacy.disable_button = { + tracking_protection_exceptions = false; + view_passwords = false; + }; + + print = { + more-settings.open = true; + print = { + printer_Brother.print_in_color = false; + + printer_Brother_DCP_9022CDW = { + print_duplex = 0; + print_footercenter = ""; + print_footerleft = ""; + print_footerright = ""; + print_headercenter = ""; + print_headerleft = ""; + print_headerright = ""; + print_in_color = false; + }; + }; + + print_printer = "Brother_DCP_9022CDW"; + }; + + privacy = { + annotate_channels.strict_list.enabled = true; + donottrackheader.enabled = true; + partition.network_state.ocsp_cache = true; + + purge_trackers = { + date_in_cookie_database = "0"; + last_purge = "1675756851136"; + }; + + "query_stripping.enabled" = true; # TODO + query_stripping.enabled.pbmode = true; + + restrict3rdpartystorage.rollout.enabledByDefault = true; + + sanitize.pending = [ + { + "id" = "newtab-container"; + "itemsToClear" = []; + "options" = {}; + } + ]; + + trackingprotection = { + enabled = true; + socialtracking.enabled = true; + }; + + userContext = { + enabled = true; + extension = "simple-tab-groups@drive4ik"; + ui.enabled = true; + }; + }; + + security = { + remote_settings = { + crlite_filters.checked = 1656529337; + intermediates.checked = 1656529337; + }; + + sandbox.content.tempDirSuffix = "86b82f75-b18b-4db2-a563-ba4380a07a97"; + }; + + services = { + blocklist = { + addons-mlbf.checked = 1656684436; + gfx.checked = 1656684436; + }; + + settings = { + blocklists = { + addons-bloomfilters.last_check = 1675773838; + gfx.last_check = 1675772639; + }; + + clock_skew_seconds = 0; + last_etag = 1675795222827; + last_update_seconds = 1675795598; + + main = { + addons-manager-settings.last_check = 1675772639; + anti-tracking-url-decoration.last_check = 1675772639; + cfr.last_check = 1675772639; + cookie-banner-rules-list.last_check = 1675772639; + devtools-compatibility-browsers.last_check = 1675772639; + devtools-devices.last_check = 1675772639; + doh-config.last_check = 1675772639; + doh-providers.last_check = 1675772639; + fxmonitor-breaches.last_check = 1675772639; + hijack-blocklists.last_check = 1675772639; + language-dictionaries.last_check = 1675772639; + message-groups.last_check = 1675772639; + ms-images.last_check = 1675772639; + nimbus-desktop-experiments.last_check = 1675793197; + normandy-recipes-capabilities.last_check = 1675772639; + partitioning-exempt-urls.last_check = 1675772639; + password-recipes.last_check = 1675772639; + password-rules.last_check = 1675772639; + personality-provider-models.last_check = 1675772639; + personality-provider-recipe.last_check = 1675772639; + pioneer-study-addons-v1.last_check = 1675772639; + public-suffix-list.last_check = 1675772639; + query-stripping.last_check = 1675772639; + search-config.last_check = 1675772639; + search-default-override-allowlist.last_check = 1675772639; + search-telemetry-v2.last_check = 1675772639; + sites-classification.last_check = 1675772639; + tippytop.last_check = 1675772639; + top-sites.last_check = 1675772639; + url-classifier-skip-urls.last_check = 1675772639; + websites-with-shared-credential-backends.last_check = 1675772639; + whats-new-panel.last_check = 1675772639; + }; + + security-state = { + cert-revocations.last_check = 1675772639; + intermediates.last_check = 1675772639; + onecrl.last_check = 1675772639; + }; + security.onecrl.checked = 1656529337; + }; + + sync = { + clients.lastSync = "0"; + declinedEngines = ""; + globalScore = 0; + nextSync = 0; + tabs.lastSync = "0"; + }; + }; + + signon.rememberSignons = false; + + storage.vacuum.last = { + index = 1; + places.sqlite = 1673364894; + }; + + svg.context-properties.content.enabled = true; + + toolkit = { + legacyUserProfileCustomizations.stylesheets = true; + + startup.last_success = 1675756592; + + telemetry = { + cachedClientID = "7d88e3fb-f77d-4d7e-8aa5-623d7349a4dc"; + pioneer-new-studies-available = true; + reportingpolicy.firstRun = false; + previousBuildID = "20230130183437"; + }; + }; + + trailhead.firstrun.didSeeAboutWelcome = true; + }; + }; + }; + }; +} diff --git a/home-manager/config/firefox/settings/extensions.json b/home-manager/config/firefox/settings/extensions.json new file mode 100644 index 00000000..057810bc --- /dev/null +++ b/home-manager/config/firefox/settings/extensions.json @@ -0,0 +1,37 @@ +{ + "darkreader": { + "addonId": "addon@darkreader.org", + "pname": "darkreader", + "sha256": "sha256:e537a2cee45ed7c26f79ecd3ed362620e3f00d24c158532a58e163a63a3d60cc", + "url": "https://addons.mozilla.org/firefox/downloads/file/4053589/darkreader-4.9.62.xpi", + "version": "4.9.62" + }, + "firenvim": { + "addonId": "firenvim@lacamb.re", + "pname": "firenvim", + "sha256": "sha256:a8c495a59e30eaabbb3fcd188db9b5e28b40bffefe41a3f0fa22ecc58c80c2b6", + "url": "https://addons.mozilla.org/firefox/downloads/file/4026386/firenvim-0.2.14.xpi", + "version": "0.2.14" + }, + "keepassxc-browser": { + "addonId": "keepassxc-browser@keepassxc.org", + "pname": "keepassxc-browser", + "sha256": "sha256:cc39aa058cb8915cfc88424e2e1cebe3ccfc3f95d7bddb2abd0c4905d2b17719", + "url": "https://addons.mozilla.org/firefox/downloads/file/4045866/keepassxc_browser-1.8.4.xpi", + "version": "1.8.4" + }, + "simple-tab-groups": { + "addonId": "simple-tab-groups@drive4ik", + "pname": "simple-tab-groups", + "sha256": "sha256:75077589098ca62c00b86cf9554c6120bf8dc04c5f916fe26f84915f5147b2a4", + "url": "https://addons.mozilla.org/firefox/downloads/file/3873608/simple_tab_groups-4.7.2.1.xpi", + "version": "4.7.2.1" + }, + "ublock-origin": { + "addonId": "uBlock0@raymondhill.net", + "pname": "ublock-origin", + "sha256": "sha256:6bf8af5266353fab5eabdc7476de026e01edfb7901b0430c5e539f6791f1edc8", + "url": "https://addons.mozilla.org/firefox/downloads/file/4047353/ublock_origin-1.46.0.xpi", + "version": "1.46.0" + } +} diff --git a/home-manager/config/firefox/settings/override.js b/home-manager/config/firefox/settings/override.js new file mode 100644 index 00000000..ca03e8ed --- /dev/null +++ b/home-manager/config/firefox/settings/override.js @@ -0,0 +1,137 @@ +/* + 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.startup.homepage", "file:///home/dt/home.html"); // 0103 +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 + +// prefetch urls, if the get auto completed +user_pref("browser.urlbar.speculativeConnect.enabled", true); // 0805 + +// 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 custome 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 + +// TODO no idea what this does, enabling it +user_pref("browser.urlbar.showSearchTerms.enabled", true); // 9004 diff --git a/home-manager/config/gammastep/default.nix b/home-manager/config/gammastep/default.nix new file mode 100644 index 00000000..79b027cd --- /dev/null +++ b/home-manager/config/gammastep/default.nix @@ -0,0 +1,20 @@ +{config, lib, ...}: { + services.gammastep = { + enable = true; + settings = { + general = { + temp-day = lib.mkForce 1300; + temp-night = lib.mkForce 1300; + 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/home-manager/config/git/default.nix b/home-manager/config/git/default.nix new file mode 100644 index 00000000..667bb206 --- /dev/null +++ b/home-manager/config/git/default.nix @@ -0,0 +1,141 @@ +{ + config, + pkgs, + ... +}: let + gitTemplateFile = + pkgs.writeText "git_template.git" + '' + # Title: Summary, imperative, start upper case, don't end with a period + # If applied, this commit will <your Title> + + # Body: Explain *what* and *why* (not *how*). + + + # BREAKING CHANGE: <description> + # Fixes: # + # Refs: # + # Co-authored-by: <name> <email> + + + + # Convention Commits (https://www.conventionalcommits.org/en/v1.0.0/): + # 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* + ''; + + gitConfig = { + init = { + defaultBranch = "prime"; + }; + credential = { + helper = "cache --timeout 43200"; + }; + user = { + email = "ene@sils.li"; + name = "ene"; + }; + help = { + autocorrect = 5; + }; + commit = { + template = "${gitTemplateFile}"; + }; + }; +in { + programs.git = { + enable = true; + #package = pkgs.gitAndTools.gitFull; # TODO for git send-email support + aliases = { + st = "status"; + + ## 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]' "; + + # 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(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)%n\ + '' %C(white)%s%C(reset)%n'' \ + %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'"; + }; + extraConfig = gitConfig; + delta = { + enable = true; + options = { + decorations = { + commit-decoration-style = "bold yellow box ul"; + file-decoration-style = "none"; + file-style = "bold yellow ul"; + }; + features = "decorations"; + whitespace-error-style = "22 reverse"; + }; + }; + signing = { + key = null; #let gpg2 decide, based on the author + signByDefault = true; + }; + }; +} +# vim: ts=2 + diff --git a/home-manager/config/grades/config.yaml b/home-manager/config/grades/config.yaml new file mode 100644 index 00000000..ebbc61f8 --- /dev/null +++ b/home-manager/config/grades/config.yaml @@ -0,0 +1,59 @@ +--- +# The unit of your grades. +# This can also be specified +# on a per grade basis on the command line +unit: Punkte + +# List of the possible grade groups +# +# name: +# This is the name used below +# +# weight: +# This is the weight applied to all grades form the group +# when calculation the average (see https://en.wikipedia.org//wiki/Weighted_arithmetic_mean for a explanation). +grade_groups: + - name: major + weight: '2' + - name: minor + weight: '1' + +# List of the types of grades. +# +# name: +# This is the name used on the command line. +# NB: The name is case sensitive. +# +# group: +# This is used when calculating the average, to group multiple types together. +# You might want to use separate types to keep grades ordered, +# but calculate their average as one. +# The value is one of the names you declared in the grade_group section. +grade_types: + - name: graded-homework + group: minor + - name: exam + group: major + - name: oral-mark + group: minor + +# List of the types of Classes +# +# name: +# The name used below +class_types: + - name: subsidiary-subject + - name: intensified-course + +# List of classes +# +# name: +# The name used on the cli +# +# class_type: +# The name of the class type you declared above +classes: + - name: Math + class_type: intensified-course2 + - name: English + class_type: subsidiary-subject diff --git a/home-manager/config/grades/default.nix b/home-manager/config/grades/default.nix new file mode 100644 index 00000000..22c5a6d4 --- /dev/null +++ b/home-manager/config/grades/default.nix @@ -0,0 +1,3 @@ +{config, ...}: { + xdg.configFile."grades/config.yaml".source = ./config.yaml; +} diff --git a/home-manager/config/gtk/default.nix b/home-manager/config/gtk/default.nix new file mode 100644 index 00000000..a3f197d2 --- /dev/null +++ b/home-manager/config/gtk/default.nix @@ -0,0 +1,60 @@ +{ + 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 + # ''; + }; + }; +} +# vim: ts=2 + diff --git a/home-manager/config/keepassxc/default.nix b/home-manager/config/keepassxc/default.nix new file mode 100644 index 00000000..152611c1 --- /dev/null +++ b/home-manager/config/keepassxc/default.nix @@ -0,0 +1,9 @@ +{ + config, + pkgs, + ... +}: { + xdg.configFile."keepassxc/keepassxc.ini".source = ./keepassxc.ini; +} +# vim: ts=2 + diff --git a/home-manager/config/keepassxc/keepassxc.ini b/home-manager/config/keepassxc/keepassxc.ini new file mode 100644 index 00000000..ee10d691 --- /dev/null +++ b/home-manager/config/keepassxc/keepassxc.ini @@ -0,0 +1,58 @@ +[General] +AutoSaveAfterEveryChange=true +BackupBeforeSave=true +BackupFilePathPattern=/home/dt/.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="<?xml version=\"1.0\"?><KeeShare><Active/></KeeShare>\n" +Own="<?xml version=\"1.0\"?><KeeShare><PrivateKey>MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC70HR8Lq7Sgg9cjJQ6qWnPywUl48IDhI93CYhg7VC7sEsMjNCyUqUpYpkO40lg3slmkWgB8XXa7MUa4DDZo2V4qXz+E5WfZLnr77B64n2WqTAsx7HqQjRw1SOLBceXxU3Zh7486fdekeg/mgJQPcU+snh1JeMqRqHGvtVo4hGM4TOwWjbQ8gRZmqPBELCLry2Dj4m2/swFZo3yARwnSpMBO5IyKq9aAZctKxQG4EeFJcm6MiZ2UkrDUe9RI8x9LwhIbDZ8G2WEy82dESaj4KOSRiz1XCiQ54wqE/MYDWzBUXA8+Q+vyuKXKUKU2RY5ScXCaLHUzBwcU7tX8HeThs5NAgMBAAECggEAIoMF4KroY5TUM06+zz/BypX1IncFeAWEIlzdU2hQYUjeJZZ7pAUFRgNQ+lggK/2MVz1pdg/zdvDysENZnqiElSVZ60tYf3NwKa+AB7i2WLjKujPQ2Onk/oXf8+QyPsyaB1rHBaT9mIJpwcQwYCPVqrV7ZpV5dpOHl0CKcS03ieIoa5UOGB8bx35xkDtSW27tyyfdtAdkycni22MdHbgVYozUkpVnwtxGqg0zBxTQWxzhD+qVNxGBhT0HZNLz7qQOGghoDsDXkYWvbcJmnOLA9FvH7ihdDw5LjsWQf+rUwCxCKX4JLpSAhkGcEIz1yvlmJR1kWD0NnJDkKvGZxnpXsQKBgQDjp9fgxMx8k9apFzSaIaA77D9aJBGR9QHuewhd4EJR7tCqyjV9CZ+V86T8pqDTtCAEyvmO7VPiHuw2ZzgrzZLr2Suy2fur53AdWDk7PYrWjUtYolyVdsTWHdGoyPksSZM/1biCVW4eY986R9wHnn88m1X4Rz52BC0m22cNrVUbnQKBgQDTMruJXWegrytWdJcx8VoD81WA0/pqbTB9qMoaoR4i/VYK1BGyFnnwuMpoAAX72yhMbJRSLdIO5eQXNHleMLEKEkrWkQIkwYGyvGkTEM7bDWoAIdLA8MV6ad/1G9txT/QtH9PlQYpK65RB1L6Nabgeavwultb5izkuRzIb/mS2cQKBgQDXD10hieg/G44i6LgZjwCG+zQR3Jb4kkMD3hhWTp94NSnM3f9PosKubp+CyYqO08+Xl4PPoKWorFurPTFUN/y+bscYS1Kz34wLPKe8LfQ1oP73uVHLJIroVv0T/N9fFhZTrHuELF49uU1NCktyqyk5wOijBfKcnG9nEMc2pXMMBQKBgQCMsCn/aopinu3mrMofSeCl6w4VQKB7DvuTacIgFR4nPs13byfOk2xtsBudRg62ZJqmtlnjmIRqyje0QY9r8FGvHNpfrr9XztPgReRVAAhcIcZwChgD0SAr2KWI+SKojBNjj+Uuvgcqu13KsLazKy6sjKYrPu4708OmkWTPAxsB8QKBgB7rvH8tRZQqUGYVW0+Q89jmUNK/MFGiIUMLBA9d45sEG6daDdDMXPV/M/uvwVyr3iUPIZpKTtM1kjz60P2zQKXIlGwkfdXiNg+fq9cfY0NE0tyckZubi8/P8+Uw6AkU70i7zwVWRm8/r3QliThjLLq1GiKrkvaXTG7ATAOpPYdU</PrivateKey><PublicKey><Signer>dt</Signer><Key>MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC70HR8Lq7Sgg9cjJQ6qWnPywUl48IDhI93CYhg7VC7sEsMjNCyUqUpYpkO40lg3slmkWgB8XXa7MUa4DDZo2V4qXz+E5WfZLnr77B64n2WqTAsx7HqQjRw1SOLBceXxU3Zh7486fdekeg/mgJQPcU+snh1JeMqRqHGvtVo4hGM4TOwWjbQ8gRZmqPBELCLry2Dj4m2/swFZo3yARwnSpMBO5IyKq9aAZctKxQG4EeFJcm6MiZ2UkrDUe9RI8x9LwhIbDZ8G2WEy82dESaj4KOSRiz1XCiQ54wqE/MYDWzBUXA8+Q+vyuKXKUKU2RY5ScXCaLHUzBwcU7tX8HeThs5NAgMBAAECggEAIoMF4KroY5TUM06+zz/BypX1IncFeAWEIlzdU2hQYUjeJZZ7pAUFRgNQ+lggK/2MVz1pdg/zdvDysENZnqiElSVZ60tYf3NwKa+AB7i2WLjKujPQ2Onk/oXf8+QyPsyaB1rHBaT9mIJpwcQwYCPVqrV7ZpV5dpOHl0CKcS03ieIoa5UOGB8bx35xkDtSW27tyyfdtAdkycni22MdHbgVYozUkpVnwtxGqg0zBxTQWxzhD+qVNxGBhT0HZNLz7qQOGghoDsDXkYWvbcJmnOLA9FvH7ihdDw5LjsWQf+rUwCxCKX4JLpSAhkGcEIz1yvlmJR1kWD0NnJDkKvGZxnpXsQKBgQDjp9fgxMx8k9apFzSaIaA77D9aJBGR9QHuewhd4EJR7tCqyjV9CZ+V86T8pqDTtCAEyvmO7VPiHuw2ZzgrzZLr2Suy2fur53AdWDk7PYrWjUtYolyVdsTWHdGoyPksSZM/1biCVW4eY986R9wHnn88m1X4Rz52BC0m22cNrVUbnQKBgQDTMruJXWegrytWdJcx8VoD81WA0/pqbTB9qMoaoR4i/VYK1BGyFnnwuMpoAAX72yhMbJRSLdIO5eQXNHleMLEKEkrWkQIkwYGyvGkTEM7bDWoAIdLA8MV6ad/1G9txT/QtH9PlQYpK65RB1L6Nabgeavwultb5izkuRzIb/mS2cQKBgQDXD10hieg/G44i6LgZjwCG+zQR3Jb4kkMD3hhWTp94NSnM3f9PosKubp+CyYqO08+Xl4PPoKWorFurPTFUN/y+bscYS1Kz34wLPKe8LfQ1oP73uVHLJIroVv0T/N9fFhZTrHuELF49uU1NCktyqyk5wOijBfKcnG9nEMc2pXMMBQKBgQCMsCn/aopinu3mrMofSeCl6w4VQKB7DvuTacIgFR4nPs13byfOk2xtsBudRg62ZJqmtlnjmIRqyje0QY9r8FGvHNpfrr9XztPgReRVAAhcIcZwChgD0SAr2KWI+SKojBNjj+Uuvgcqu13KsLazKy6sjKYrPu4708OmkWTPAxsB8QKBgB7rvH8tRZQqUGYVW0+Q89jmUNK/MFGiIUMLBA9d45sEG6daDdDMXPV/M/uvwVyr3iUPIZpKTtM1kjz60P2zQKXIlGwkfdXiNg+fq9cfY0NE0tyckZubi8/P8+Uw6AkU70i7zwVWRm8/r3QliThjLLq1GiKrkvaXTG7ATAOpPYdU</Key></PublicKey></KeeShare>\n" +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/home-manager/config/latexindent/default.nix b/home-manager/config/latexindent/default.nix new file mode 100644 index 00000000..10bae481 --- /dev/null +++ b/home-manager/config/latexindent/default.nix @@ -0,0 +1,10 @@ +{ + config, + pkgs, + ... +}: { + xdg.configFile."latexindent/indentconfig.yaml".source = ./indentconfig.yaml; + xdg.configFile."latexindent/mysettings.yaml".source = ./mysettings.yaml; +} +# vim: ts=2 + diff --git a/home-manager/config/latexindent/indentconfig.yaml b/home-manager/config/latexindent/indentconfig.yaml new file mode 100644 index 00000000..d67351f3 --- /dev/null +++ b/home-manager/config/latexindent/indentconfig.yaml @@ -0,0 +1,2 @@ +paths: +- /home/dt/.config/latexindent/mysettings.yaml diff --git a/home-manager/config/latexindent/mysettings.yaml b/home-manager/config/latexindent/mysettings.yaml new file mode 100644 index 00000000..9a0f8b2f --- /dev/null +++ b/home-manager/config/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: '(?<!\\)(&)' + delimiterJustification: left + lookForChildCodeBlocks: 1 + tabularx: + delims: 1 + longtable: 1 + tabu: 1 + array: 1 + matrix: 1 + listabla: 1 + # amsmath + align: 1 + align*: 1 + alignat: 1 + alignat*: 1 + aligned: 1 + bmatrix: 1 + Bmatrix: 1 + cases: 1 + flalign: 1 + flalign*: 1 + pmatrix: 1 + vmatrix: 1 + Vmatrix: 1 + # mathtools + cases*: 1 + dcases: 1 + dcases*: 1 + rcases: 1 + rcases*: 1 + drcases: 1 + drcases*: 1 + # nicematrix + NiceTabular: 1 + NiceMatrix: 1 + pNiceMatrix: 1 + bNiceMatrix: 1 + BNiceMatrix: 1 + vNiceMatrix: 1 + VNiceMatrix: 1 + NiceArray: 1 + pNiceArrayC: 1 + bNiceArrayC: 1 + BNiceArrayC: 1 + vNiceArrayC: 1 + VNiceArrayC: 1 + NiceArrayCwithDelims: 1 + pNiceArrayRC: 1 + bNiceArrayRC: 1 + BNiceArrayRC: 1 + vNiceArrayRC: 1 + VNiceArrayRC: 1 + NiceArrayRCwithDelims: 1 + # tabularray + tblr: 1 + longtblr: 1 + talltblr: 1 + +# if you want the script to look for \item commands +# and format it, as follows (for example), +# \begin{itemize} +# \item content here +# next line is indented +# next line is indented +# \item another item +# \end{itemize} +# then populate indentAfterItems. See also itemNames +indentAfterItems: + itemize: 1 + itemize*: 1 + enumerate: 1 + enumerate*: 1 + description: 1 + description*: 1 + list: 1 + +# if you want to use other names for your items (for example, \part) +# then populate them here; note that you can trick latexindent.pl +# into indenting all kinds of commands (within environments specified in +# indentAfterItems) using this technique. +itemNames: + item: 1 + myitem: 1 + +# specialBeginEnd is, by default, mathmode focus, although +# there's no restrictions +specialBeginEnd: + displayMath: + begin: '\\\[' + end: '\\\]' + lookForThis: 1 + inlineMath: + begin: '(?<!\$)(?<!\\)\$(?!\$)' + end: '(?<!\\)\$(?!\$)' + lookForThis: 1 + displayMathTeX: + begin: '\$\$' + end: '\$\$' + lookForThis: 1 + specialBeforeCommand: 0 + +# if you want to add indentation after +# a heading, such as \part, \chapter, etc +# then populate it in here - you can add +# an indent rule to indentRules if you would +# like something other than defaultIndent +# +# you can also change the level if you like, +# or add your own title command +indentAfterHeadings: + part: + indentAfterThisHeading: 0 + level: 1 + chapter: + indentAfterThisHeading: 0 + level: 2 + section: + indentAfterThisHeading: 0 + level: 3 + subsection: + indentAfterThisHeading: 0 + level: 4 + subsection*: + indentAfterThisHeading: 0 + level: 4 + subsubsection: + indentAfterThisHeading: 0 + level: 5 + paragraph: + indentAfterThisHeading: 0 + level: 6 + subparagraph: + indentAfterThisHeading: 0 + level: 7 + +# maximum indentation, off by default +maximumIndentation: -1 + +# if you don't want to have additional indentation +# in a code block, then add it to noAdditionalIndent; note that +# code blocks in this field will inherit +# the *current* level of indentation they just won't +# get any *additional* indentation +noAdditionalIndent: + myexample: 0 + mydefinition: 0 + problem: 0 + exercises: 0 + mysolution: 0 + foreach: 0 + widepage: 0 + comment: 0 + document: 0 + frame: 0 + +# if you have indent rules for particular code blocks +# then you can populate them in indentRules; for example, you might just want +# to use a space " " or maybe a double tab " " +indentRules: + myenvironment: " " + anotherenvironment: " " + chapter: " " + section: " " + item: " " + myitem: " " + +# set noAdditionalIndent globally for codeblocks +noAdditionalIndentGlobal: + environments: 0 + commands: 0 + optionalArguments: 0 + mandatoryArguments: 0 + ifElseFi: 0 + items: 0 + keyEqualsValuesBracesBrackets: 0 + namedGroupingBracesBrackets: 0 + UnNamedGroupingBracesBrackets: 0 + specialBeginEnd: 0 + afterHeading: 0 + filecontents: 0 + +# set indentRules globally for codeblocks; these need +# to be horizontal spaces, if they are to be used +indentRulesGlobal: + environments: 0 + commands: 0 + optionalArguments: 0 + mandatoryArguments: 0 + ifElseFi: 0 + items: 0 + keyEqualsValuesBracesBrackets: 0 + namedGroupingBracesBrackets: 0 + UnNamedGroupingBracesBrackets: 0 + specialBeginEnd: 0 + afterHeading: 0 + filecontents: 0 + +# command code block details +commandCodeBlocks: + roundParenthesesAllowed: 1 + stringsAllowedBetweenArguments: + - + amalgamate: 1 + - 'node' + - 'at' + - 'to' + - 'decoration' + - '\+\+' + - '\-\-' + - '\#\#\d' + commandNameSpecial: + - + amalgamate: 1 + - '@ifnextchar\[' + +# change dos line breaks into unix +dos2unixlinebreaks: 1 + +# modifyLineBreaks will only be searched if the -m +# switch is active +# +# poly-switch examples: +# +# BeginStartsOnOwnLine: +# modify line breaks before a begin statement +# +# when set to -1, e.g +# some text some text +# \begin{myenvironment} +# will be changed to +# some text some text \begin{myenvironment} +# when set to 0, the switch is ignored +# when set to 1, e.g +# some text some text \begin{myenvironment} +# will be changed to +# some text some text +# \begin{myenvironment} +# when set to 2, e.g +# some text some text \begin{myenvironment} +# will be changed to +# some text some text% +# \begin{myenvironment} +# when set to 3, e.g +# some text some text \begin{myenvironment} +# will be changed to +# some text some text +# +# \begin{myenvironment} +# +# BodyStartsOnOwnLine: +# modify line breaks before the beginning of the body +# +# when set to -1, e.g +# \begin{myenv} +# body text body text +# will be changed to +# \begin{myenv}body text body text +# when set to 0, the switch is ignored +# when set to 1, e.g +# \begin{myenv}body text body text +# will be changed to +# \begin{myenv} +# body text body text +# when set to 2, e.g +# \begin{myenv}body text body text +# will be changed to +# \begin{myenv}% +# body text body text +# when set to 3, e.g +# \begin{myenv}body text body text +# will be changed to +# \begin{myenv} +# +# body text body text +# +# EndStartsOnOwnLine: +# modify line breaks before the end statement +# +# when set to -1, e.g +# some text some text +# \end{myenvironment} +# will be changed to +# some text some text \end{myenvironment} +# when set to 0, the switch is ignored +# when set to 1, e.g +# some text some text \end{myenvironment} +# will be changed to +# some text some text +# \end{myenvironment} +# when set to 2, e.g +# some text some text \end{myenvironment} +# will be changed to +# some text some text% +# \end{myenvironment} +# when set to 3, e.g +# some text some text \end{myenvironment} +# will be changed to +# some text some text +# +# \end{myenvironment} +# +# EndFinishesWithLineBreak: +# modify line breaks after the end statement +# +# when set to -1, e.g +# \end{myenvironment} +# some text some text +# will be changed to +# \end{myenvironment}some text some text +# when set to 0, the switch is ignored +# when set to 1, e.g +# \end{myenvironment}some text some text +# will be changed to +# \end{myenvironment} +# some text some text +# when set to 2, e.g +# \end{myenvironment}some text some text +# will be changed to +# \end{myenvironment}% +# some text some text +# when set to 3, e.g +# \end{myenvironment}some text some text +# will be changed to +# \end{myenvironment} +# +# some text some text +# +# you can specify settings on a per-name basis +modifyLineBreaks: + preserveBlankLines: 1 + condenseMultipleBlankLinesInto: 1 + oneSentencePerLine: + manipulateSentences: 0 + removeSentenceLineBreaks: 1 + multipleSpacesToSingle: 1 + textWrapSentences: 0 # setting to 1 disables main textWrap routine + sentenceIndent: "" + sentencesFollow: + par: 1 + blankLine: 1 + fullStop: 1 + exclamationMark: 1 + questionMark: 1 + rightBrace: 1 + commentOnPreviousLine: 1 + other: 0 + sentencesBeginWith: + A-Z: 1 + a-z: 0 + other: 0 + sentencesEndWith: + basicFullStop: 0 + betterFullStop: 1 + exclamationMark: 1 + questionMark: 1 + other: 0 + textWrapOptions: + columns: 0 + multipleSpacesToSingle: 1 + removeBlockLineBreaks: 1 + blocksFollow: + headings: 1 + commentOnPreviousLine: 1 + par: 1 + blankLine: 1 + verbatim: 1 + filecontents: 1 + other: '\\\]|\\item(?:\h|\[)' # regex + blocksBeginWith: + A-Z: 1 + a-z: 1 + 0-9: 0 + other: 0 # regex + blocksEndBefore: + commentOnOwnLine: 1 + verbatim: 1 + filecontents: 1 + other: '\\begin\{|\\\[|\\end\{' # regex + huge: overflow # forbid mid-word line breaks + separator: "" + # poly-switches below here + environments: + BeginStartsOnOwnLine: 0 + BodyStartsOnOwnLine: 0 + EndStartsOnOwnLine: 0 + EndFinishesWithLineBreak: 0 + equation*: + BeginStartsOnOwnLine: 0 + BodyStartsOnOwnLine: 0 + EndStartsOnOwnLine: 0 + EndFinishesWithLineBreak: 0 + ifElseFi: + IfStartsOnOwnLine: 0 + BodyStartsOnOwnLine: 0 + OrStartsOnOwnLine: 0 + OrFinishesWithLineBreak: 0 + ElseStartsOnOwnLine: 0 + ElseFinishesWithLineBreak: 0 + FiStartsOnOwnLine: 0 + FiFinishesWithLineBreak: 0 + ifnum: + IfStartsOnOwnLine: 0 + BodyStartsOnOwnLine: 0 + OrStartsOnOwnLine: 0 + OrFinishesWithLineBreak: 0 + ElseStartsOnOwnLine: 0 + ElseFinishesWithLineBreak: 0 + FiStartsOnOwnLine: 0 + FiFinishesWithLineBreak: 0 + commands: + CommandStartsOnOwnLine: 0 + CommandNameFinishesWithLineBreak: 0 + optionalArguments: + LSqBStartsOnOwnLine: 0 + OptArgBodyStartsOnOwnLine: 0 + RSqBStartsOnOwnLine: 0 + RSqBFinishesWithLineBreak: 0 + mandatoryArguments: + LCuBStartsOnOwnLine: 0 + MandArgBodyStartsOnOwnLine: 0 + RCuBStartsOnOwnLine: 0 + RCuBFinishesWithLineBreak: 0 + keyEqualsValuesBracesBrackets: + KeyStartsOnOwnLine: 0 + EqualsStartsOnOwnLine: 0 + EqualsFinishesWithLineBreak: 0 + items: + ItemStartsOnOwnLine: 0 + ItemFinishesWithLineBreak: 0 + namedGroupingBracesBrackets: + NameStartsOnOwnLine: 0 + NameFinishesWithLineBreak: 0 + specialBeginEnd: + SpecialBeginStartsOnOwnLine: 0 + SpecialBodyStartsOnOwnLine: 0 + SpecialEndStartsOnOwnLine: 0 + SpecialEndFinishesWithLineBreak: 0 + verbatim: + VerbatimBeginStartsOnOwnLine: 0 + VerbatimEndFinishesWithLineBreak: 0 + +# replacements, only active when either -r or -rr switches are active +replacements: + - + amalgamate: 1 + - + this: 'latexindent.pl' + that: 'pl.latexindent' + lookForThis: 0 + when: before + +# fineTuning allows you to tweak the internal pattern matching that +# is central to latexindent.pl +fineTuning: + environments: + name: '[a-zA-Z@\*0-9_\\]+' + ifElseFi: + name: '(?!@?if[a-zA-Z@]*?\{)@?if[a-zA-Z@]*?' + commands: + name: '[+a-zA-Z@\*0-9_\:]+?' + items: + canBeFollowedBy: '(?:\[[^]]*?\])|(?:<[^>]*?>)' + keyEqualsValuesBracesBrackets: + name: '[a-zA-Z@\*0-9_\/.:\#-]+[a-zA-Z@\*0-9_\/.\h\{\}:\#-]*?' + follow: '(?:(?<!\\)\{)|,|(?:(?<!\\)\[)' + namedGroupingBracesBrackets: + name: '[0-9\.a-zA-Z@\*><]+?' + follow: '\h|\R|\{|\[|\$|\)|\(' + UnNamedGroupingBracesBrackets: + follow: '\{|\[|,|&|\)|\(|\$' + arguments: + before: '(?:#\d\h*;?,?\/?)+|\<.*?\>' + between: '_|\^|\*' + trailingComments: + notPreceededBy: '(?<!\\)' + modifyLineBreaks: + doubleBackSlash: '\\\\(?:\h*\[\h*\d+\h*[a-zA-Z]+\h*\])?' + comma: ',' + betterFullStop: |- + (?x) # ignore spaces in the below + (?: # + \.\) # .) + (?!\h*[a-z]) # not *followed by* a-z + ) # + | # OR + (?: # + (?<! # not *preceeded by* + (?: # + (?:[eE]\.[gG]) # e.g OR E.g OR e.G OR E.G + | # + (?:[iI]\.[eE]) # i.e OR I.e OR i.E OR I.E + | # + (?:etc) # etc + ) # + ) # + ) # + \. # . + (?! # not *followed by* + (?: # + [a-zA-Z0-9-~,] # + | # + \), # ), + | # + \)\. # ). + ) # + ) # diff --git a/home-manager/config/less/default.nix b/home-manager/config/less/default.nix new file mode 100644 index 00000000..c9e74ecc --- /dev/null +++ b/home-manager/config/less/default.nix @@ -0,0 +1,17 @@ +{ + config, + pkgs, + ... +}: { + programs.less = { + enable = true; + keys = '' + t forw-line + n back-line + l repeat-search + L reverse-search + ''; + }; +} +# vim: ts=2 + diff --git a/home-manager/config/lf/cmds/archive.sh b/home-manager/config/lf/cmds/archive.sh new file mode 100644 index 00000000..48544365 --- /dev/null +++ b/home-manager/config/lf/cmds/archive.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/home/dt/.local/lib/shell/lib +. ~/.local/lib/shell/lib + + +# 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 + +fx="$*" + +archivers=$(mktmp) +echo "tar+zip tar+xz 7z zip" > $archivers; + +readp "File Name: " name + + +case $(awk '{for (i=1; i<=NF; i++) print $i}' $archivers | fzf) in + "tar+zip") + tar -czf "$name".tar.gz "$name" + ;; + "tar+xz") + tar -cf "$name".tar $fx + xz -z -9 -e -T0 "$name".tar + ;; + "7z") + 7z a "$name".7z $fx + ;; + "zip") + zip -r "$name".zip $fx + ;; +esac + + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/broot_jump.sh b/home-manager/config/lf/cmds/broot_jump.sh new file mode 100644 index 00000000..188c9508 --- /dev/null +++ b/home-manager/config/lf/cmds/broot_jump.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + +f=$(mktemp) +res="$(broot --outcmd $f && cat $f | sed 's/cd //')" +rm -f "$f" +if [ -f "$res" ]; then + cmd="select" +elif [ -d "$res" ]; then + cmd="cd" +fi +lf -remote "send $id $cmd \"$res\"" + + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/chmod.sh b/home-manager/config/lf/cmds/chmod.sh new file mode 100644 index 00000000..f6a87336 --- /dev/null +++ b/home-manager/config/lf/cmds/chmod.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + + +readp "Mode Bits: " ans + +for file in $fx +do + chmod "$ans" "$file" +done + +lf -remote 'send reload' + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/clear_trash.sh b/home-manager/config/lf/cmds/clear_trash.sh new file mode 100644 index 00000000..c02321f2 --- /dev/null +++ b/home-manager/config/lf/cmds/clear_trash.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + + +trash-empty + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/dl_file.sh b/home-manager/config/lf/cmds/dl_file.sh new file mode 100644 index 00000000..9cb9023c --- /dev/null +++ b/home-manager/config/lf/cmds/dl_file.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + +# Provides the ability to download a file by dropping it into a window + +url=$(dragon-drop -t -x) + +if [ -n "$url" ]; then + printf "File Name: " + name="" + while [ -z $name ] || [ -e $name ] + do + read -r name + if [ -e "$name" ]; then + printf "File already exists, overwrite (y|n): " + read -r ans + + if [ "$ans" = "y" ]; then + break + else + printf "File Name: " + fi + fi + done + + # Download the file with curl + [ -n "$name" ] && curl -o "$name" "$url" || exit 1 +else + exit 1 +fi + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/dragon.sh b/home-manager/config/lf/cmds/dragon.sh new file mode 100644 index 00000000..36e94706 --- /dev/null +++ b/home-manager/config/lf/cmds/dragon.sh @@ -0,0 +1,11 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + +dragon-drop -a -x "$fx" + + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/dragon_individual.sh b/home-manager/config/lf/cmds/dragon_individual.sh new file mode 100644 index 00000000..abcadb13 --- /dev/null +++ b/home-manager/config/lf/cmds/dragon_individual.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + +dragon-drop "$fx" + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/dragon_stay.sh b/home-manager/config/lf/cmds/dragon_stay.sh new file mode 100644 index 00000000..60195d09 --- /dev/null +++ b/home-manager/config/lf/cmds/dragon_stay.sh @@ -0,0 +1,11 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + +dragon-drop -a "$fx" + + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/fzf_jump.sh b/home-manager/config/lf/cmds/fzf_jump.sh new file mode 100644 index 00000000..688efdb9 --- /dev/null +++ b/home-manager/config/lf/cmds/fzf_jump.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + +res="$(find . -maxdepth 3 | fzf --reverse --header='Jump to location')" +if [ -f "$res" ]; then + cmd="select" +elif [ -d "$res" ]; then + cmd="cd" +fi +lf -remote "send $id $cmd \"$res\"" + + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/help.sh b/home-manager/config/lf/cmds/help.sh new file mode 100644 index 00000000..8fedd0ea --- /dev/null +++ b/home-manager/config/lf/cmds/help.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + + +cat ~/.config/lf/lfrc + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/mk_dir.sh b/home-manager/config/lf/cmds/mk_dir.sh new file mode 100644 index 00000000..bfa0627d --- /dev/null +++ b/home-manager/config/lf/cmds/mk_dir.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + + +readp "Directory Name: " ans +mkdir $ans + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/mk_file.sh b/home-manager/config/lf/cmds/mk_file.sh new file mode 100644 index 00000000..044016a6 --- /dev/null +++ b/home-manager/config/lf/cmds/mk_file.sh @@ -0,0 +1,11 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + + +readp "File Name: " name +$EDITOR "$name" + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/mk_ln.sh b/home-manager/config/lf/cmds/mk_ln.sh new file mode 100644 index 00000000..71a70a36 --- /dev/null +++ b/home-manager/config/lf/cmds/mk_ln.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + +while IFS= read -r i;do + set -- "$@" "$i" +done < "$(tmp "cat ~/.local/share/lf/files")" + +mode="$1" +shift + +if [ "$#" -lt 1 ]; then + msg "no files to link" + exit 0 +fi + + +case "$mode" in + copy) + while [ "$#" -gt 0 ]; do + file=$1 + ans="$(basename "$file")" + + while ls -a "$(pwd)" | grep --word-regexp "$ans" > /dev/null;do + printf "\"%s\" already exists, new name for link: " "$ans" + read -r ans + done + + ln -s "$file" "$(pwd)/$ans" + + + shift + done + ;; +esac +rm ~/.local/share/lf/files +# lf -remote "send clear" + + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/mk_scr.sh b/home-manager/config/lf/cmds/mk_scr.sh new file mode 100644 index 00000000..b6c17458 --- /dev/null +++ b/home-manager/config/lf/cmds/mk_scr.sh @@ -0,0 +1,29 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + +star=$(mktmp) +cat << EOF > $star +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + + + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi +EOF + +readp "Script Name: " script_name +scr="$(pwd)"/"$script_name" + +[ -e $scr ] && die "$script_name exitst, exiting.." + +cat "$star" > $scr +chmod +x $scr +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi + +$VISUAL $scr diff --git a/home-manager/config/lf/cmds/open.sh b/home-manager/config/lf/cmds/open.sh new file mode 100644 index 00000000..8376be21 --- /dev/null +++ b/home-manager/config/lf/cmds/open.sh @@ -0,0 +1,16 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + + +case $(file --mime-type "$f" -bL) in + text/*|application/json) $EDITOR "$f";; + image/*) $IVIEWER "$f";; + *) xdg-open "$f" ;; +esac + + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/open_config.sh b/home-manager/config/lf/cmds/open_config.sh new file mode 100644 index 00000000..93c174d7 --- /dev/null +++ b/home-manager/config/lf/cmds/open_config.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + +$EDITOR "$(bookmenu -b ~/.config/bookmenu/configs -f fzf -o)" + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/restore_trash.sh b/home-manager/config/lf/cmds/restore_trash.sh new file mode 100644 index 00000000..432e9e9b --- /dev/null +++ b/home-manager/config/lf/cmds/restore_trash.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + + +trash-restore + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/set_wall_paper.sh b/home-manager/config/lf/cmds/set_wall_paper.sh new file mode 100644 index 00000000..4599de2a --- /dev/null +++ b/home-manager/config/lf/cmds/set_wall_paper.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + + +die "No yet implemented" +#sed -i "s,export AWMWALLPAPER='.*',export AWMWALLPAPER='${f}'," ${ZDOTDIR}/.zshenv +#swaybg -i "$f" & +#feh --bg-max --no-fehbg "$f" + + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/stripspace.sh b/home-manager/config/lf/cmds/stripspace.sh new file mode 100644 index 00000000..c7f68767 --- /dev/null +++ b/home-manager/config/lf/cmds/stripspace.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + + +stripspace "$f" + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/sudo_mk_file.sh b/home-manager/config/lf/cmds/sudo_mk_file.sh new file mode 100644 index 00000000..1f06a92f --- /dev/null +++ b/home-manager/config/lf/cmds/sudo_mk_file.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + + +readp "File Name: " ans +sudo $EDITOR "$ans" + + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/trash.sh b/home-manager/config/lf/cmds/trash.sh new file mode 100644 index 00000000..4598b4fd --- /dev/null +++ b/home-manager/config/lf/cmds/trash.sh @@ -0,0 +1,27 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + +files=$(printf "$fx" | tr '\n' ';') + +while [ "$files" ]; do + # extract the substring from start of string up to delimiter. + # this is the first "element" of the string. + file=${files%%;*} + + trash-put "$(basename "$file")" + # if there's only one element left, set `files` to an empty string. + # this causes us to exit this `while` loop. + # else, we delete the first "element" of the string from files, and move onto the next. + if [ "$files" = "$file" ]; then + files='' + else + files="${files#*;}" + fi +done + + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/cmds/unarchive.sh b/home-manager/config/lf/cmds/unarchive.sh new file mode 100644 index 00000000..47a713fa --- /dev/null +++ b/home-manager/config/lf/cmds/unarchive.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + + +# extract the current file with the right command +# (xkcd link: https://xkcd.com/1168/) +set -f +case "$f" in + *.tar.bz|*.tar.bz2|*.tbz|*.tbz2) tar xjvf $f;; + *.tar.gz|*.tgz) tar xzvf $f;; + *.tar.xz|*.txz) tar xJvf $f;; + *.zip) unzip $f;; + *.rar) unrar x $f;; + *.7z) 7z x $f;; + *) warning "Unsupported format" ;; +esac + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/lf/colors b/home-manager/config/lf/colors new file mode 100644 index 00000000..c4b6417b --- /dev/null +++ b/home-manager/config/lf/colors @@ -0,0 +1,196 @@ +# 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;33 # LINK +#ln 01;34 # LINK +or 01;35;46 # ORPHAN +tw 35 # STICKY_OTHER_WRITABLE +ow 35 # OTHER_WRITABLE +st 01;36 # 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 01;31;44 # EXEC +fi 00 # FILE + +# links +# ~/.librewolf 01;34 +~/.cups 01;34 +~/.mozilla 01;34 +#~/.pki 01;34 +~/.ssh 01;34 +#~/.lesskey 01;34 +#~/.pulse-cookie 01;34 + +~/.steampid 01;34 +~/.steam 01;34 +~/.steampath 01;34 + +# nix +~/.nix-profile 01;34 +~/.nix-defexpr 01;34 + +# can now be removed +~/.indentconfig.yaml 01;34 + +# 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/home-manager/config/lf/default.nix b/home-manager/config/lf/default.nix new file mode 100644 index 00000000..e27b040c --- /dev/null +++ b/home-manager/config/lf/default.nix @@ -0,0 +1,202 @@ +{ + config, + pkgs, + ... +}: let + shell = file: + "\${{" + builtins.readFile "${file}" + "}}"; # closes the lf tui + pipe = file: + "%{{" + builtins.readFile "${file}" + "}}"; # runs the command in the ui,term bar + async = file: + "&{{" + builtins.readFile "${file}" + "}}"; # runs the command in the background + wait = file: + "!{{" + builtins.readFile "${file}" + "}}"; # adds a prompt after the command has run +in { + xdg.configFile."lf/icons".source = ./icons; + xdg.configFile."lf/colors".source = ./colors; + + programs.lf = { + enable = true; + + commands = { + help = shell ./cmds/help.sh; + open = shell ./cmds/open.sh; + mk_dir = pipe ./cmds/mk_dir.sh; + mk_scr = shell ./cmds/mk_scr.sh; + mk_file = shell ./cmds/mk_file.sh; + chmod = pipe ./cmds/chmod.sh; + mk_ln = shell ./cmds/mk_ln.sh; # TODO could be pipe, right? + sudo_mk_file = shell ./cmds/sudo_mk_file.sh; + set_wall_paper = pipe ./cmds/set_wall_paper.sh; + fzf_jump = shell ./cmds/fzf_jump.sh; + broot_jump = shell ./cmds/broot_jump.sh; + open_config = shell ./cmds/open_config.sh; + + dragon = pipe ./cmds/dragon.sh; + dragon_stay = pipe ./cmds/dragon_stay.sh; + dragon_individual = pipe ./cmds/dragon_individual.sh; + dl_file = pipe ./cmds/dl_file.sh; + + unarchive = pipe ./cmds/unarchive.sh; + archive = pipe ./cmds/archive.sh; + + trash = pipe ./cmds/trash.sh; + clear_trash = pipe ./cmds/clear_trash.sh; + restore_trash = shell ./cmds/restore_trash.sh; + + stripspace = pipe ./cmds/stripspace.sh; + }; + keybindings = { + # Remove some defaults + m = null; + "'" = null; + #" = null; # TODO + d = null; + c = null; + e = null; + j = null; + k = null; + l = null; + ";" = null; + + # File Openers + ee = "\$\$EDITOR \"$f\""; + u = "%\$IVIEWER \"$f\""; + cc = "\$sudo -e \"$f\""; + + # Archive Mappings + au = "unarchive"; + a = "archive"; + + # Trash Mappings + dd = "trash"; + jc = "clear_trash"; + jr = "restore_trash"; + + # Broot Mapping + f = "broot_jump"; + + # Dragon Mapping + dr = "dragon"; + ds = "dragon-stay"; + di = "dragon-individual"; + #dm = "mvdragon"; + #dc = "cpdragon"; + dl = "dlfile"; + + ss = "stripspace"; + + # Vim keys + h = "updir"; + t = "down"; + n = "up"; + s = "open"; + + # Basic Functions + bn = "help"; + kk = "mklkn"; + "." = "set hidden!"; + DD = "delete"; + p = "paste"; + x = "cut"; + y = "copy"; + "<enter>" = "open"; + mf = "mkfile"; + mr = "sudomkfile"; + md = "mkdir"; + ms = "mkscr"; + ch = "chmod"; + bg = "setwallpaper"; + o = "open_config"; + br = "\$vimv \$fx"; # TODO what is this command? + r = "rename"; + H = "top"; + L = "bottom"; + R = "reload"; + C = "clear"; + U = "unselect"; + + # Movement + gjr = "cd ~/.local/share/Trash/files"; + gus = "cd /run/dt"; + + "gr." = "cd /home/dt/repos"; + grr = "cd /home/dt/repos/rust"; + grp = "cd /home/dt/repos/python"; + grc = "cd /home/dt/repos/c"; + gra = "cd /home/dt/repos/auto_hot_key"; + grt = "cd /home/dt/repos/tex"; + grs = "cd /home/dt/repos/shell"; + + grch = "cd /home/dt/repos/chroot"; + grpe = "cd /home/dt/repos/perl"; + grja = "cd /home/dt/repos/java"; + grjs = "cd /home/dt/repos/java_script"; + # ------------- + "gm." = "cd /home/dt/media"; + gmpi = "cd /home/dt/media/pictures"; + gmdo = "cd /home/dt/media/downloads"; + gmpl = "cd /home/dt/media/playlist"; + gmis = "cd /home/dt/media/isos"; + # ------------- + "gs." = "cd /home/dt/school"; + gsgs = "cd /home/dt/school/geschichte"; + gsch = "cd /home/dt/school/chemie"; + gsen = "cd /home/dt/school/english"; + gsgo = "cd /home/dt/school/geographie"; + gsin = "cd /home/dt/school/infomatik"; + gsso = "cd /home/dt/school/sozialkunde"; + gskr = "cd /home/dt/school/katholische_religion"; + gsmu = "cd /home/dt/school/musik"; + gsla = "cd /home/dt/school/latein"; + gsde = "cd /home/dt/school/deutsch"; + gsma = "cd /home/dt/school/mathematik"; + gspr = "cd /home/dt/school/praktikum"; + gsbi = "cd /home/dt/school/biologie"; + gssp = "cd /home/dt/school/sport"; + gsphy = "cd /home/dt/school/physik"; + gsphi = "cd /home/dt/school/philosophie"; + + gc = "cd ~/.config"; + gl = "cd ~/.local"; + gE = "cd /etc"; + + "gU." = "cd /usr"; + gUs = " cd /usr/share"; + + gt = "cd /tmp"; + }; +# TODO add ctpv, if it gets merged +# previewer = { +# keybinding = "i"; +# source = pkgs.ctpv; +# }; + settings = { + # TODO this needs to be added to nixos: + #autoquit = true; # quit the server, if no clients are left + #dirpreviews = true; # preview for directories + + dircounts = true; # count things in directories TODO this has performance impact + drawbox = true; + errorfmt = "\\033[1;91m==> ERROR:\\033[0m\\033[1;93m%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 = "-e -u"; # e: exit on error; u: error for unset variables + }; + # TODO remove auto quit, if it has been added + # TODO add ctpv, if it gets merged + extraConfig = '' + &ctpv -s $id + &ctpvquit $id + set cleaner = {pkgs.ctpv} + + set autoquit = true + set dirpreviews = true + ''; + }; +} +# vim: ts=2 + diff --git a/home-manager/config/lf/icons b/home-manager/config/lf/icons new file mode 100644 index 00000000..68d53e34 --- /dev/null +++ b/home-manager/config/lf/icons @@ -0,0 +1,357 @@ +# 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 +*.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 +*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/home-manager/config/mako/default.nix b/home-manager/config/mako/default.nix new file mode 100644 index 00000000..9b9e01a0 --- /dev/null +++ b/home-manager/config/mako/default.nix @@ -0,0 +1,46 @@ +{ + config, + pkgs, + ... +}: { + programs.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 + ''; + }; +} +# vim: ts=2 + diff --git a/home-manager/config/mpd/default.nix b/home-manager/config/mpd/default.nix new file mode 100644 index 00000000..ea535415 --- /dev/null +++ b/home-manager/config/mpd/default.nix @@ -0,0 +1,30 @@ +{ + config, + pkgs, + ... +}: let + dataDir = "${config.xdg.dataHome}/mpd"; +in { +services.mpd = { + enable = true; + inherit dataDir; + musicDirectory = "~/media/music"; + network = { + listenAddress = "${dataDir}/socket"; + }; + extraConfig = '' + metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc,comment" + auto_update "yes" + + #database { + # plugin "simple" + # path "~/.local/share/mpd/db + # cache_directory "~/.local/share/mpd/cache" + #} + + filesystem_charset "UTF-8" + ''; + }; +} +# vim: ts=2 + diff --git a/home-manager/config/mpd/mpdconf.example b/home-manager/config/mpd/mpdconf.example new file mode 100644 index 00000000..eaa5e641 --- /dev/null +++ b/home-manager/config/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 <https://wiki.hydrogenaud.io/index.php?title=Replaygain> 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/home-manager/config/mpd/test.TODO b/home-manager/config/mpd/test.TODO new file mode 100644 index 00000000..6225d8fd --- /dev/null +++ b/home-manager/config/mpd/test.TODO @@ -0,0 +1 @@ +# TODO this still needs some client diff --git a/home-manager/config/neovim/default.nix b/home-manager/config/neovim/default.nix new file mode 100644 index 00000000..8074f19d --- /dev/null +++ b/home-manager/config/neovim/default.nix @@ -0,0 +1,10 @@ +{ + config, + pkgs, + neovim_config, + ... +}: { + xdg.configFile."neovim".source = neovim_config; +} +# vim: ts=2 + diff --git a/home-manager/config/npm/.npmrc b/home-manager/config/npm/.npmrc new file mode 100644 index 00000000..d0d846bd --- /dev/null +++ b/home-manager/config/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/home-manager/config/npm/default.nix b/home-manager/config/npm/default.nix new file mode 100644 index 00000000..d12ce73b --- /dev/null +++ b/home-manager/config/npm/default.nix @@ -0,0 +1,9 @@ +{ + config, + pkgs, + ... +}: { + xdg.configFile."npm/.npmrc".source = ./.npmrc; +} +# vim: ts=2 + diff --git a/home-manager/config/python/default.nix b/home-manager/config/python/default.nix new file mode 100644 index 00000000..4fd01a0a --- /dev/null +++ b/home-manager/config/python/default.nix @@ -0,0 +1,9 @@ +{ + config, + pkgs, + ... +}: { + xdg.configFile."python/pythonrc".source = ./pythonrc; +} +# vim: ts=2 + diff --git a/home-manager/config/python/pythonrc b/home-manager/config/python/pythonrc new file mode 100644 index 00000000..38c48e0f --- /dev/null +++ b/home-manager/config/python/pythonrc @@ -0,0 +1,11 @@ +import os +import atexit +import readline + +history = os.path.join(os.environ['XDG_CACHE_HOME'], 'python_history') +readline.read_history_file(history) + +def write_history(): + readline.write_history_file(history) + +atexit.register(write_history) diff --git a/home-manager/config/rclone/default.nix b/home-manager/config/rclone/default.nix new file mode 100644 index 00000000..1939a0b5 --- /dev/null +++ b/home-manager/config/rclone/default.nix @@ -0,0 +1,9 @@ +{ + config, + pkgs, + ... +}: { + xdg.configFile."rclone/rclone.conf".source = ./rclone.conf; +} +# vim: ts=2 + diff --git a/home-manager/config/rclone/rclone.conf b/home-manager/config/rclone/rclone.conf new file mode 100644 index 00000000..9e1c4f08 --- /dev/null +++ b/home-manager/config/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/home-manager/config/river/default.nix b/home-manager/config/river/default.nix new file mode 100644 index 00000000..d0de7f13 --- /dev/null +++ b/home-manager/config/river/default.nix @@ -0,0 +1,10 @@ +{ + config, + pkgs, + ... +}: { + xdg.configFile."river/init".source = ./init; + xdg.configFile."river/res".source = ./res; +} +# vim: ts=2 + diff --git a/home-manager/config/river/init b/home-manager/config/river/init new file mode 100755 index 00000000..4c49489a --- /dev/null +++ b/home-manager/config/river/init @@ -0,0 +1,84 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + +err_fail() { + "$@" + if [ $? -ne 0 ] ;then + printf "%s\n" "$@" >> ~/river_log + exec ~/.config/river/res/safe_init + fi +} +rm ~/river_log +exec 1>>"$HOME/river_log" +exec 2>>"$HOME"/river_log + +#Setup of environment variables {{{ +err_fail msg "Starting environment variables set" +err_fail riverctl spawn "exec dbus-update-activation-environment SEATD_SOCK DISPLAY WAYLAND_DISPLAY DESKTOP_SESSION=river XDG_CURRENT_DESKTOP=river" +err_fail export XDG_CURRENT_DESKTOP=river +#}}} + +# Setup of mappings {{{ +err_fail msg "Started river_init_lesser" +err_fail river_init_lesser ~/.config/river/res/keys.ron +# }}} + +# Setup of Rules {{{ +err_fail msg "Starting Rules set" +err_fail riverctl float-filter-add app-id float +err_fail riverctl float-filter-add app-id mpv +err_fail riverctl float-filter-add app-id ModernGL +err_fail riverctl float-filter-add title "Manim Slides" + +err_fail riverctl csd-filter-add app-id firefox +# }}} + +# Set riverctl settings {{{ +err_fail msg "Starting 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 always +#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 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 + +# remove GTK buttons in titlebar +err_fail gsettings set org.gnome.desktop.wm.preferences button-layout "" +# }}} + +# Setup of general apps {{{ +err_fail msg "Starting apps" +err_fail gammastep & + +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 yambar & + +err_fail mako & +err_fail swaybg -i "$AWMWALLPAPER" & +err_fail swayidle & +alacritty & +# }}} + + + +# Setup of layout [acts as exec!] {{{ +err_fail riverctl default-layout rivertile +err_fail rivertile -main-ratio 0.5 -view-padding 1 -outer-padding 0 + +#riverctl default-layout luatile +#river-luatile +# }}} diff --git a/home-manager/config/river/res/keys.ron b/home-manager/config/river/res/keys.ron new file mode 100644 index 00000000..a4ad6988 --- /dev/null +++ b/home-manager/config/river/res/keys.ron @@ -0,0 +1,57 @@ +#![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: "~/repos/shell/scripts/screen_shot",), + + // 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: "~/.local/bin/ytcs",), + RiverctlCommand( map_mode: Map, mode: ["normal", "locked"], key: "XF86AudioMute", mods: "None", command: "spawn", command_args: "~/repos/shell/scripts/mocs",), + + // Launcher + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "R", mods: "Super", command: "spawn", command_args: "bemenu-run",), + RiverctlCommand( map_mode: Map, mode: ["normal"], key: "F1", mods: "Super", command: "spawn", command_args: "firefox",), + 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: "nheko",), + 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: "swaylock -f",), + + // 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",), + ], +) + diff --git a/home-manager/config/river/res/safe_init b/home-manager/config/river/res/safe_init new file mode 100755 index 00000000..8e80026a --- /dev/null +++ b/home-manager/config/river/res/safe_init @@ -0,0 +1,160 @@ +#!/bin/sh + +# This is the example configuration file for river. +# +# If you wish to edit this, you will probably want to copy it to +# $XDG_CONFIG_HOME/river/init or $HOME/.config/river/init first. +# +# See the river(1), riverctl(1), and rivertile(1) man pages for complete +# documentation. + +# Note: the "Super" modifier is also known as Logo, GUI, Windows, Mod4, etc. + +# Super+Shift+Return to start an instance of foot (https://codeberg.org/dnkl/foot) +riverctl map normal Super Return spawn alacritty + +# Super+Q to close the focused view +riverctl map normal Super Q close + +# Super+Shift+E to exit river +riverctl map normal Super+Shift Q exit + +# Super+J and Super+K to focus the next/previous view in the layout stack +riverctl map normal Super J focus-view next +riverctl map normal Super K focus-view previous + +# Super+Shift+J and Super+Shift+K to swap the focused view with the next/previous +# view in the layout stack +riverctl map normal Super+Shift J swap next +riverctl map normal Super+Shift K swap previous + +# Super+Period and Super+Comma to focus the next/previous output +riverctl map normal Super Period focus-output next +riverctl map normal Super Comma focus-output previous + +# Super+Shift+{Period,Comma} to send the focused view to the next/previous output +riverctl map normal Super+Shift Period send-to-output next +riverctl map normal Super+Shift Comma send-to-output previous + +# Super+Return to bump the focused view to the top of the layout stack +riverctl map normal Super Return zoom + +# Super+H and Super+L to decrease/increase the main ratio of rivertile(1) +riverctl map normal Super H send-layout-cmd rivertile "main-ratio -0.05" +riverctl map normal Super L send-layout-cmd rivertile "main-ratio +0.05" + +# Super+Shift+H and Super+Shift+L to increment/decrement the main count of rivertile(1) +riverctl map normal Super+Shift H send-layout-cmd rivertile "main-count +1" +riverctl map normal Super+Shift L send-layout-cmd rivertile "main-count -1" + +# Super+Alt+{H,J,K,L} to move views +riverctl map normal Super+Alt H move left 100 +riverctl map normal Super+Alt J move down 100 +riverctl map normal Super+Alt K move up 100 +riverctl map normal Super+Alt L move right 100 + +# Super+Alt+Control+{H,J,K,L} to snap views to screen edges +riverctl map normal Super+Alt+Control H snap left +riverctl map normal Super+Alt+Control J snap down +riverctl map normal Super+Alt+Control K snap up +riverctl map normal Super+Alt+Control L snap right + +# Super+Alt+Shift+{H,J,K,L} to resize views +riverctl map normal Super+Alt+Shift H resize horizontal -100 +riverctl map normal Super+Alt+Shift J resize vertical 100 +riverctl map normal Super+Alt+Shift K resize vertical -100 +riverctl map normal Super+Alt+Shift L resize horizontal 100 + +# Super + Left Mouse Button to move views +riverctl map-pointer normal Super BTN_LEFT move-view + +# Super + Right Mouse Button to resize views +riverctl map-pointer normal Super BTN_RIGHT resize-view + +for i in $(seq 1 9) +do + tags=$((1 << ($i - 1))) + + # Super+[1-9] to focus tag [0-8] + riverctl map normal Super $i set-focused-tags $tags + + # Super+Shift+[1-9] to tag focused view with tag [0-8] + riverctl map normal Super+Shift $i set-view-tags $tags + + # Super+Ctrl+[1-9] to toggle focus of tag [0-8] + riverctl map normal Super+Control $i toggle-focused-tags $tags + + # Super+Shift+Ctrl+[1-9] to toggle tag [0-8] of focused view + riverctl map normal Super+Shift+Control $i toggle-view-tags $tags +done + +# Super+0 to focus all tags +# Super+Shift+0 to tag focused view with all tags +all_tags=$(((1 << 32) - 1)) +riverctl map normal Super 0 set-focused-tags $all_tags +riverctl map normal Super+Shift 0 set-view-tags $all_tags + +# Super+Space to toggle float +riverctl map normal Super Space toggle-float + +# Super+F to toggle fullscreen +riverctl map normal Super F toggle-fullscreen + +# Super+{Up,Right,Down,Left} to change layout orientation +riverctl map normal Super Up send-layout-cmd rivertile "main-location top" +riverctl map normal Super Right send-layout-cmd rivertile "main-location right" +riverctl map normal Super Down send-layout-cmd rivertile "main-location bottom" +riverctl map normal Super Left send-layout-cmd rivertile "main-location left" + +# Declare a passthrough mode. This mode has only a single mapping to return to +# normal mode. This makes it useful for testing a nested wayland compositor +riverctl declare-mode passthrough + +# Super+F11 to enter passthrough mode +riverctl map normal Super F11 enter-mode passthrough + +# Super+F11 to return to normal mode +riverctl map passthrough Super F11 enter-mode normal + +# Various media key mapping examples for both normal and locked mode which do +# not have a modifier +for mode in normal locked +do + # Eject the optical drive (well if you still have one that is) + riverctl map $mode None XF86Eject spawn 'eject -T' + + # Control pulse audio volume with pamixer (https://github.com/cdemoulins/pamixer) + riverctl map $mode None XF86AudioRaiseVolume spawn 'pamixer -i 5' + riverctl map $mode None XF86AudioLowerVolume spawn 'pamixer -d 5' + riverctl map $mode None XF86AudioMute spawn 'pamixer --toggle-mute' + + # Control MPRIS aware media players with playerctl (https://github.com/altdesktop/playerctl) + riverctl map $mode None XF86AudioMedia spawn 'playerctl play-pause' + riverctl map $mode None XF86AudioPlay spawn 'playerctl play-pause' + riverctl map $mode None XF86AudioPrev spawn 'playerctl previous' + riverctl map $mode None XF86AudioNext spawn 'playerctl next' + + # Control screen backlight brightness with light (https://github.com/haikarainen/light) + riverctl map $mode None XF86MonBrightnessUp spawn 'light -A 5' + riverctl map $mode None XF86MonBrightnessDown spawn 'light -U 5' +done + +# Set background and border color +riverctl background-color 0x002b36 +riverctl border-color-focused 0x93a1a1 +riverctl border-color-unfocused 0x586e75 + +# Set keyboard repeat rate +riverctl set-repeat 50 300 + +# Make certain views start floating +riverctl float-filter-add app-id float +riverctl float-filter-add title "popup title with spaces" + +# Set app-ids and titles of views which should use client side decorations +riverctl csd-filter-add app-id "gedit" + +# Set the default layout generator to be rivertile and start it. +# River will send the process group of the init executable SIGTERM on exit. +riverctl default-layout rivertile +rivertile -view-padding 6 -outer-padding 6 diff --git a/home-manager/config/ssh/default.nix b/home-manager/config/ssh/default.nix new file mode 100644 index 00000000..506c36be --- /dev/null +++ b/home-manager/config/ssh/default.nix @@ -0,0 +1,16 @@ +{ + config, + pkgs, + ... +}: { + programs.ssh = { + enable = true; + compression = true; + hashKnownHosts = true; + serverAliveInterval = 240; + userKnownHostsFile = "${config.xdg.dataHome}/ssh/know_hosts"; + + }; +} +# vim: ts=2 + diff --git a/home-manager/config/swayidle/config b/home-manager/config/swayidle/config new file mode 100644 index 00000000..d49aaa56 --- /dev/null +++ b/home-manager/config/swayidle/config @@ -0,0 +1,5 @@ +timeout 180 'swaylock -f -c 000000' + +timeout 360 'systemctl suspend-then-hibernate' + +before-sleep 'swaylock -f -c 000000' diff --git a/home-manager/config/swayidle/default.nix b/home-manager/config/swayidle/default.nix new file mode 100644 index 00000000..d9f001d5 --- /dev/null +++ b/home-manager/config/swayidle/default.nix @@ -0,0 +1,29 @@ +{ + config, + pkgs, + ... +}: { + 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 + }; +} +# vim: ts=2 + diff --git a/home-manager/config/swaylock/default.nix b/home-manager/config/swaylock/default.nix new file mode 100644 index 00000000..dd614a61 --- /dev/null +++ b/home-manager/config/swaylock/default.nix @@ -0,0 +1,14 @@ +{ + config, + pkgs, + ... +}: { + programs.swaylock = { + settings = { + image = "$AWMWALLPAPER"; + color = "000000"; + }; + }; +} +# vim: ts=2 + diff --git a/home-manager/config/yambar/config/config.yml b/home-manager/config/yambar/config/config.yml new file mode 100644 index 00000000..173e93a4 --- /dev/null +++ b/home-manager/config/yambar/config/config.yml @@ -0,0 +1,238 @@ +--- +# 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 + tag: state + default: *normal + values: + focused: *focused + unfocused: *unfocused + urgent: *urgent + invisible: + map: + tag: occupied + values: + true: *occupied + false: *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)))" + tag: id + values: + 1: { map: { <<: *river_base } } + 2: { map: { <<: *river_base } } + 3: { map: { <<: *river_base } } + 4: { map: { <<: *river_base } } + 5: { map: { <<: *river_base } } + 6: { map: { <<: *river_base } } + 7: { map: { <<: *river_base } } + 8: { map: { <<: *river_base } } + 9: { map: { <<: *river_base } } + title: + map: + tag: title + default: + { + string: + { + text: "{title}", + left-margin: 12, + right-margin: 12, + #max: 35, + deco: *linetitle + }, + } + values: { "": { 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" + tag: carrier + values: + false: {empty: {}} + true: + string: {text: " {ssid} ", deco: *combutil} + - network: + name: enp4s0 + content: + map: + on-click: /bin/sh -c "nmtui" + tag: carrier + values: + false: + string: {text: " Eth failed ", deco: *combutil} + true: {empty: {}} + + - script: # Sound volume + path: /home/dt/.config/yambar/scripts/amixer-monitor + content: + map: + on-click: /bin/sh -c "pavucontrol" + tag: muted + values: + true: + string: + text: " ﱝ " + deco: *bgcurg + false: + string: {text: " {volume}% ", deco: *combutil} + - script: # Grade average + path: /home/dt/.config/yambar/scripts/grades-average + poll-interval: 10 + content: + string: + text: " {grade} " + deco: *combmem + #- backlight: + # name: intel_backlight + # content: + # - string: {text: " {percent}% ", deco: *combutil} + - script: # CPU + path: /home/dt/.config/yambar/scripts/cpu + content: + string: + text: " {cpu}% " + deco: *combmem + - script: # Memory info + path: /home/dt/.config/yambar/scripts/meminfo + content: + map: + tag: swapstate + values: + true: + string: + text: " {memperc}%({swapperc}%) " + deco: *combmem + false: + string: + text: " {memperc}% " + deco: *combmem + - script: # Disk space + path: /home/dt/.config/yambar/scripts/dfspace + 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/home-manager/config/yambar/config/config.yml.diffrent b/home-manager/config/yambar/config/config.yml.diffrent new file mode 100644 index 00000000..462a329b --- /dev/null +++ b/home-manager/config/yambar/config/config.yml.diffrent @@ -0,0 +1,56 @@ +hack: &hack Hack Nerd Font:pixelsize=13 +bg_default: &bg_default {stack: [{background: {color: 81A1C1ff}}, {underline: {size: 4, color: D8DEE9ff}}]} +bar: + height: 40 + location: top + font: JuliaMono:pixelsize=10 + spacing: 2 + margin: 0 + layer: bottom + foreground: eeeeeeff + background: 2E3440dd + + left: + - river: + anchors: + - base: &river_base + left-margin: 10 + right-margin: 13 + default: {string: {text: , font: *hack}} + conditions: + id == 1: {string: {text: ﳐ, font: *hack}} + id == 2: {string: {text: , font: *hack}} + id == 3: {string: {text: , font: *hack}} + id == 4: {string: {text: , font: *hack}} + id == 5: {string: {text: , font: *hack}} + id == 10: {string: {text: "scratchpad", font: *hack}} + id == 11: {string: {text: "work", font: *hack}} + + 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: + state == urgent: + map: + <<: *river_base + deco: {background: {color: D08770ff}} + state == focused: + map: + <<: *river_base + deco: *bg_default + state == visible: + map: + conditions: + ~occupied: {map: {<<: *river_base}} + occupied: {map: {<<: *river_base, deco: *bg_default}} + state == unfocused: + map: + <<: *river_base + state == invisible: + map: + conditions: + ~occupied: {empty: {}} + occupied: {map: {<<: *river_base, deco: {underline: {size: 3, color: ea6962ff}}}} diff --git a/home-manager/config/yambar/config/laptop.yml b/home-manager/config/yambar/config/laptop.yml new file mode 100644 index 00000000..c3bfe6ab --- /dev/null +++ b/home-manager/config/yambar/config/laptop.yml @@ -0,0 +1,117 @@ +# Config file for yambar +# Note that this may be version-dependent, this file is written for v1.8.0 + + +# Font anchors +font-main: &fontmain DejavuSansMono: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 + monitor: DP-2 + 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 + tag: state + default: *normal + values: + focused: *focused + unfocused: *unfocused + urgent: *urgent + invisible: + map: + tag: occupied + values: + true: *occupied + false: *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)))" + tag: id + values: + 1: { map: { <<: *river_base } } + 2: { map: { <<: *river_base } } + 3: { map: { <<: *river_base } } + 4: { map: { <<: *river_base } } + 5: { map: { <<: *river_base } } + 6: { map: { <<: *river_base } } + 7: { map: { <<: *river_base } } + 8: { map: { <<: *river_base } } + 9: { map: { <<: *river_base } } + title: + map: + tag: title + default: + { + string: + { + text: "{title}", + left-margin: 12, + right-margin: 12, + #max: 35, + deco: *linetitle + }, + } + values: { "": { string: { text: "" } } } diff --git a/home-manager/config/yambar/default.nix b/home-manager/config/yambar/default.nix new file mode 100644 index 00000000..7a2e6fe9 --- /dev/null +++ b/home-manager/config/yambar/default.nix @@ -0,0 +1,10 @@ +{ + config, + pkgs, + ... +}: { + xdg.configFile."yambar/config.yaml".source = ./config/config.yml; + xdg.configFile."yambar/scripts".source = ./scripts; +} +# vim: ts=2 + diff --git a/home-manager/config/yambar/scripts/amixer-monitor b/home-manager/config/yambar/scripts/amixer-monitor new file mode 100755 index 00000000..9e75acfa --- /dev/null +++ b/home-manager/config/yambar/scripts/amixer-monitor @@ -0,0 +1,24 @@ +#!/bin/sh +# An improved amixer script that actually detects volume beyond 100% + + +SLEEPTIME=1 + + +while true; do + + volume=$(pactl get-sink-volume 0 | awk 'BEGIN { FS="/"} {print $2 }' | tr -d "%" | tr -d ' ') + + if [ "$volume" -eq 0 ]; then + echo "muted|bool|true" + + else + # Read sink volume in percentages + echo "volume|string|$volume" + echo "muted|bool|false" + fi + + echo "" + sleep "$SLEEPTIME" + +done diff --git a/home-manager/config/yambar/scripts/cpu b/home-manager/config/yambar/scripts/cpu new file mode 100755 index 00000000..bae820d0 --- /dev/null +++ b/home-manager/config/yambar/scripts/cpu @@ -0,0 +1,126 @@ +#!/bin/bash +# I didn't write this script; this is almost directly copied from the dnkl/yambar github. + + +# cpu.sh - measures CPU usage at a configurable sample interval +# +# Usage: cpu.sh INTERVAL_IN_SECONDS +# +# This script will emit the following tags on stdout (N is the number +# of logical CPUs): +# +# Name Type +# -------------------- +# cpu range 0-100 +# cpu0 range 0-100 +# cpu1 range 0-100 +# ... +# cpuN-1 range 0-100 +# +# I.e. ‘cpu’ is the average (or aggregated) CPU usage, while cpuX is a +# specific CPU’s usage. +# +# Example configuration (update every second): +# +# - script: +# path: /path/to/cpu.sh +# args: [1] +# content: {string: {text: "{cpu}%"}} +# + +interval=2 + +case ${interval} in + ''|*[!0-9]*) + echo "interval must be an integer" + exit 1 + ;; + *) + ;; +esac + +# Get number of CPUs, by reading /proc/stat +# The output looks like: +# +# cpu A B C D ... +# cpu0 A B C D ... +# cpu1 A B C D ... +# cpuN A B C D ... +# +# The first line is a summary line, accounting *all* CPUs +IFS=$'\n' readarray -t all_cpu_stats < <(grep -e "^cpu" /proc/stat) +cpu_count=$((${#all_cpu_stats[@]} - 1)) + +# Arrays of ‘previous’ idle and total stats, needed to calculate the +# difference between each sample. +prev_idle=() +prev_total=() +for i in $(seq ${cpu_count}); do + prev_idle+=(0) + prev_total+=(0) +done + +prev_average_idle=0 +prev_average_total=0 + +while true; do + IFS=$'\n' readarray -t all_cpu_stats < <(grep -e "^cpu" /proc/stat) + + usage=() # CPU usage in percent, 0 <= x <= 100 + + average_idle=0 # All CPUs idle time since boot + average_total=0 # All CPUs total time since boot + + for i in $(seq 0 $((cpu_count - 1))); do + # Split this CPUs stats into an array + stats=($(echo "${all_cpu_stats[$((i + 1))]}")) + + # man procfs(5) + user=${stats[1]} + nice=${stats[2]} + system=${stats[3]} + idle=${stats[4]} + iowait=${stats[5]} + irq=${stats[6]} + softirq=${stats[7]} + steal=${stats[8]} + guest=${stats[9]} + guestnice=${stats[10]} + + # Guest time already accounted for in user + user=$((user - guest)) + nice=$((nice - guestnice)) + + idle=$((idle + iowait)) + + total=$((user + nice + system + irq + softirq + idle + steal + guest + guestnice)) + + average_idle=$((average_idle + idle)) + average_total=$((average_total + total)) + + # Diff since last sample + diff_idle=$((idle - prev_idle[i])) + diff_total=$((total - prev_total[i])) + + usage[i]=$((100 * (diff_total - diff_idle) / diff_total)) + + prev_idle[i]=${idle} + prev_total[i]=${total} + done + + diff_average_idle=$((average_idle - prev_average_idle)) + diff_average_total=$((average_total - prev_average_total)) + + average_usage=$((100 * (diff_average_total - diff_average_idle) / diff_average_total)) + + prev_average_idle=${average_idle} + prev_average_total=${average_total} + + echo "cpu|range:0-100|${average_usage}" + for i in $(seq 0 $((cpu_count - 1))); do + echo "cpu${i}|range:0-100|${usage[i]}" + done + + echo "" + sleep "${interval}" +done diff --git a/home-manager/config/yambar/scripts/dfspace b/home-manager/config/yambar/scripts/dfspace new file mode 100755 index 00000000..0b262481 --- /dev/null +++ b/home-manager/config/yambar/scripts/dfspace @@ -0,0 +1,23 @@ +#!/bin/sh + +# Sleep seconds +timer="60" + +# Main loop +while true; do + + # vars + used_space=$(btrfs filesystem usage / 2> /dev/null | awk '{if ( /Used:/ ) { print $2 } } ' | head -n1) + all_space=$(btrfs filesystem usage / 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 $timer + +done + diff --git a/home-manager/config/yambar/scripts/grades-average b/home-manager/config/yambar/scripts/grades-average new file mode 100755 index 00000000..a04b958c --- /dev/null +++ b/home-manager/config/yambar/scripts/grades-average @@ -0,0 +1,12 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + +grade=$(grades list average | awk '{print $2}'); + +echo "grade|string|$grade"; +echo ""; + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/yambar/scripts/meminfo b/home-manager/config/yambar/scripts/meminfo new file mode 100755 index 00000000..0156e94c --- /dev/null +++ b/home-manager/config/yambar/scripts/meminfo @@ -0,0 +1,37 @@ +#!/bin/sh +# Checks memory usage + +# Number of seconds to retest +timer=5 + +# Main loop +while true; do + + mem_total=$(LANG=C free -b|awk '/^Mem:/{print $2}') + mem_used=$(LANG=C free -b|awk '/^Mem:/{print $3}') + swap_total=$(LANG=C free -b|awk '/^Swap:/{print $2}') + swap_used=$(LANG=C free -b|awk '/^Swap:/{print $3}') + + + memperc=$(echo "$mem_used" "$mem_total" | awk '{ div = 100 * ($1 / $2)} { printf "%.0f ", div }' | tr -d ' ' ) + swapperc=$(echo "$swap_used" "$swap_total" | awk '{ + if ( $1 == 0 || $2 == 0 ) { + print "%" + } else { + div = 100 * ($1 / $2); + printf "%.0f ", div +} +}' | tr -d ' ' ) + + +echo "memperc|string|$memperc" +if [ "$swapperc" = "%" ];then + echo "swapstate|bool|false" +else + echo "swapperc|string|$swapperc" + echo "swapstate|bool|true" +fi +echo "" +sleep "$timer" + +done diff --git a/home-manager/config/yambar/scripts/nmclitest b/home-manager/config/yambar/scripts/nmclitest new file mode 100755 index 00000000..3e8bc73a --- /dev/null +++ b/home-manager/config/yambar/scripts/nmclitest @@ -0,0 +1,23 @@ +#!/bin/sh +# Test for connectivity with nmcli + +Timer=${1:-120} # Number of seconds to retest +Timer2=${2:-10} # Number of seconds to retest if connection fails + +# Main loop +while true; do + + CONN=$(nmcli networking connectivity) + + if [[ "$CONN" == "full" ]]; then + echo "internet|string|Connected" + echo "" + sleep $Timer + else + echo "internet|string|Disconnected" + echo "" + sleep $Timer2 + fi + +done + diff --git a/home-manager/config/yambar/scripts/pingtest b/home-manager/config/yambar/scripts/pingtest new file mode 100755 index 00000000..2b5f9998 --- /dev/null +++ b/home-manager/config/yambar/scripts/pingtest @@ -0,0 +1,28 @@ +#!/bin/sh +# Test for connectivity with ping + +Timer=${1:-120} # Number of seconds to retest +Timer2=${2:-10} # Number of seconds to retest if connection fails +IP=${3:-'8.8.8.8'} # IP address to test, defaults to Google +PCount=${4:-3} # Number of pings to send + +# Main loop +while true; do + + # Pings the IP address for five times + PINGSTR=$(ping $IP -c $PCount -q) + # Use text formatting to get min/max ms delays + MED=$(echo $PINGSTR | sed 's/min\/avg\/max\/mdev = /\n/g' | tail -n 1 | sed 's/\//\t/g' | cut -f2) + + if [[ "$MED" == "" ]]; then + echo "med|string|No connection" + echo "" + sleep $Timer2 + else + echo "med|string|$MED ms" + echo "" + sleep $Timer + fi + +done + diff --git a/home-manager/config/yambar/scripts/yambar-tray b/home-manager/config/yambar/scripts/yambar-tray new file mode 100755 index 00000000..1704c6dd --- /dev/null +++ b/home-manager/config/yambar/scripts/yambar-tray @@ -0,0 +1,27 @@ +#!/bin/sh + + +pkill stalonetray +pkill trayer + +# launch a tray. +echo + +sleep 0.1 # make sure yambar starts first so we can draw on tpo of it + +# trayer-srg fork! +trayer \ + --edge top \ + --tint 0x24242400 \ + --align right \ + --height 20 \ + --expand false \ + --transparent true \ + --alpha 0 \ + --width 20 \ + --monitor primary \ + --widthtype request + # &>/dev/null + + + diff --git a/home-manager/config/yambar/scripts/yambar-tray-width b/home-manager/config/yambar/scripts/yambar-tray-width new file mode 100755 index 00000000..00544e70 --- /dev/null +++ b/home-manager/config/yambar/scripts/yambar-tray-width @@ -0,0 +1,28 @@ +#!/bin/sh +# shellcheck disable=SC2086 +# shellcheck source=/dev/null +. ~/.local/lib/shell/lib + + +CHARWIDTH=8 # i guess? + +tray_width_px() { + xwininfo -name panel | # trayer names its window "panel" + grep -i width: | + awk '{print $2}' +} + +px_to_spaces() { + spaces="$((1 + ${1:-0} / $CHARWIDTH))" + printf "% *s\n" $spaces +} + +sleep 0.2 # be sure trayer is already up + +output="$(px_to_spaces `tray_width_px`)" +echo "padding|string|$output" +echo "" + + + +if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi diff --git a/home-manager/config/zsh/config/custom_cursor.sh b/home-manager/config/zsh/config/custom_cursor.sh new file mode 100644 index 00000000..9a6da012 --- /dev/null +++ b/home-manager/config/zsh/config/custom_cursor.sh @@ -0,0 +1,40 @@ +# 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/home-manager/config/zsh/config/zsh-init.sh b/home-manager/config/zsh/config/zsh-init.sh new file mode 100644 index 00000000..bc9af87a --- /dev/null +++ b/home-manager/config/zsh/config/zsh-init.sh @@ -0,0 +1,38 @@ +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +# Flex on the ubuntu users +[ "$NVIM" ] || neofetch || hyfetch +#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 + +## 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/home-manager/config/zsh/config/zsh-prompt.sh b/home-manager/config/zsh/config/zsh-prompt.sh new file mode 100644 index 00000000..1f0f164b --- /dev/null +++ b/home-manager/config/zsh/config/zsh-prompt.sh @@ -0,0 +1,63 @@ +#vim:ft=zsh +_command_time_preexec() { + timer=${timer:-$SECONDS} +} + +_command_time_precmd() { + PROMPT_TMP_DIR=$(mktemp) + if [ $timer ]; then + ts=$(($SECONDS - $timer)) + tts=$ts + mi=0 + ho=0 + if [ $ts -ge 3 ];then + while [ $ts -ge 60 ];do + ts=$((ts-60)) + mi=$((mi+1)) + done + + while [ $mi -ge 60 ];do + mi=$((mi-60)) + ho=$((ho+1)) + done + + if [ $tts -ge 3600 ];then + out=$(printf '%dh %dm %ds\n' $ho $mi $ts) + elif [ $tts -ge 60 ];then + out=$(printf '%dm %ds\n' $mi $ts) + elif [ $tts -lt 60 ];then + out=$(printf '%ds\n' $ts) + fi + + export psvar[1]="took $(printf '%s ' "$out")" + echo $psvar[1] > $PROMPT_TMP_DIR + fi + + unset timer + unset ts + unset tts + unset mi + unset ho +fi +} + +_command_ro_precmd() { +if ! [ -w $(pwd) ];then + echo " " +fi +} + +preexec_functions+=(_command_time_preexec) +precmd_functions+=(_command_time_precmd) + +blue="14" +red="9" +white="15" +setopt PROMPT_SUBST +export PROMPT='%(?.%F{$blue}.%F{$red})%B%3~%(!. %F{$red}as root %f. )%F{$white}$(if [ -n $PROMPT_TMP_DIR ];then cat $PROMPT_TMP_DIR; rm $PROMPT_TMP_DIR;fi)%f%(?.%F{$blue}.%F{$red})%F{$red}$(_command_ro_precmd)%F{$blue}❯ %b%f' +export RPROMPT='' + +#%(2V.%F{$red}%2v%f$(export psvar[2]="") .) + +# TODO: +# Add git support diff --git a/home-manager/config/zsh/default.nix b/home-manager/config/zsh/default.nix new file mode 100644 index 00000000..f05de847 --- /dev/null +++ b/home-manager/config/zsh/default.nix @@ -0,0 +1,148 @@ +{ + config, + pkgs, + lib, + ... +}: { + programs.zsh = { + enable = true; + enableAutosuggestions = true; + enableCompletion = true; + enableSyntaxHighlighting = 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 = true; # share between sessions + }; + historySubstringSearch = { + enable = true; + searchDownKey = "^[[B"; # DOWN Arrow key + searchUpKey = "^[[A"; # UP Arrow key + }; + + loginExtra = + builtins.readFile ./config/zsh-prompt.sh + + builtins.readFile ./config/custom_cursor.sh + + '' + eval $(ssh-agent -s) > /dev/null # start ssh agent + export ENHANCHED_NEOFETCH="$(pacman -Qn | wc -l) (pacman), $(pacman -Qm | wc -l) (aur), $(($(cargo install --list | wc -l ) / 2)) (cargo)" + '' + + lib.concatStringsSep "setopt" [ + "AUTO_CD" + "AUTO_PUSHD" + "CHASE_DOTS" + + "ALWAYS_TO_END" + + "EXTENDED_HISTORY" + "HIST_ALLOW_CLOBBER" + "HIST_VERIFY" + "HIST_FCNTL_LOCK" + + "DVORAK" + "CORRECT" + + "PROMPT_SUBST" + "TRANSIENT_RPROMPT" # maybe? + + "COMBINING_CHARS" + "VI" + ]; + + initExtraFirst = builtins.readFile ./config/zsh-init.sh; + + shellAliases = { + ls = "ls -a --color=auto"; + ll = ". ll"; + pip = "pip --require-virtualenv"; + hisea = "history info | grep"; + + mocp = "mocp -M ${config.xdg.configHome}/moc"; + yarn = "yarn --use-yarnrc ${config.xdg.configHome}/yarn/config"; + }; + sessionVariables = { + # managed by home-manager xdg + # XDG_DATA_HOME = "$HOME/.local/share"; + # XDG_STATE_HOME = "$HOME/.local/state"; + # XDG_CACHE_HOME = "$HOME/.cache"; + # XDG_CONFIG_HOME = "$HOME/.config"; + # XDG_BIN_HOME = "\${HOME}/.local/bin"; + + # HISTSIZE = "9000000"; # This Should already be set by the shell + TIMEFMT = "'$fg[green]%J$reset_color' time: $fg[blue]%*Es$reset_color, cpu: $fg[blue]%P$reset_color"; # no idea what this does or why it is needed + REPORTTIME = "10"; + + PATH = [ + "\${PATH}:/home/dt/repos/shell/scripts" + "/home/dt/.local/bin" + "/home/dt/.local/share/cargo/bin/" + ]; + EDITOR = "nvim"; + IVIEWER = "imv"; + READER = "zathura"; + VISUAL = "nvim"; + CODEEDITOR = "nvim"; + TERMINAL = "alacritty"; + BROWSER = "firefox"; + COLORTERM = "truecolor"; + PAGER = "less -R"; + WM = "river"; + AWMWALLPAPER = "/home/dt/media/pictures/tes/wallpapers-linux_cast/Dedicated_Colorschemes/nord/Abstract-Nord.png"; + + # FUNCNEST for more functions in functions + FUNCNEST = "2000"; + + WALLPAPERDIR = "$HOME/media/pictures/wallpapers/"; + LESS = "R"; + MANPAGER = "less -R --use-color -Dd+r -Du+b"; + 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"; + + # Clean the home dir {{{ + _JAVA_OPTIONS = lib.concatStringsSep " " [ + ''-Djava.util.prefs.userRoot="${config.xdg.configHome}/java"'' + ''-Djavafx.cachedir="${config.xdg.cacheHome}/openjfx"'' + ]; + GRADLE_USER_HOME = "${config.xdg.dataHome}/gradle"; + CARGO_HOME = "${config.xdg.dataHome}/cargo"; + GNUPGHOME = "${config.xdg.dataHome}/gnupg"; + GOPATH = "${config.xdg.dataHome}/go"; + GTK2_RC_FILES = "${config.xdg.configHome}/gtk-2.0/gtkrc"; + LESSHISFILE = "${config.xdg.cacheHome}/less/history"; + LESSKEYIN = "${config.xdg.configHome}/less/lesskey"; + RUSTUP_HOME = "${config.xdg.dataHome}/rustup"; + NPM_CONFIG_USERCONFIG = "${config.xdg.configHome}/npm/npmrc"; + NUGET_PACKAGES = "${config.xdg.cacheHome}/NuGetPackages"; + PYTHONSTARTUP = "${config.xdg.configHome}/python/pythonrc"; + 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"; + # }}} + + # Export Wayland env Vars {{{ + QT_QPA_PLATFORM = "wayland"; + QT_QPA_PLATFORMTHEME = "qt5ct"; # needs qt5ct + CLUTTER_BACKEND = "wayland"; + SDL_VIDEODRIVER = "wayland"; # might brake some things + MOZ_ENABLE_WAYLAND = "1"; + # }}} + }; + }; +} +# vim: ts=2 + |