diff options
Diffstat (limited to 'config')
-rw-r--r-- | config/emacs.el | 32 | ||||
-rw-r--r-- | config/emacs.org | 71 | ||||
-rw-r--r-- | config/index.org | 1 | ||||
-rw-r--r-- | config/nix.org | 1298 |
4 files changed, 1386 insertions, 16 deletions
diff --git a/config/emacs.el b/config/emacs.el index eb492ad..3e3c1c2 100644 --- a/config/emacs.el +++ b/config/emacs.el @@ -6,11 +6,17 @@ (tool-bar-mode -1) (load-theme 'catppuccin :no-confirm) (add-hook 'prog-mode-hook #'display-line-numbers-mode) +(add-hook 'org-mode-hook #'display-line-numbers-mode) (set-face-attribute 'default nil :height 120) (setq use-short-answers t) (setq make-backup-files nil) (setq org-export-with-broken-links t) (setq org-src-fontify-natively t) +(setq warning-minimum-level :emergency) +(add-hook 'text-mode-hook 'visual-line-mode) +(add-hook 'after-save-hook 'eglot-format) +(setq debug-ignored-errors + (cons 'remote-file-error debug-ignored-errors)) (set-frame-parameter nil 'alpha-background 90) (add-to-list 'default-frame-alist '(alpha-background . 90)) @@ -47,11 +53,18 @@ ;; (setq org-export-html-postamble-format '(("en" "<p class=\"preamble\"><a href=\"../index.html\">previous page</a> | <a href=\"/index.html\">home</a></p>"))) (setq org-html-postamble "Copyright © 2024 Preston Pan") -;;(add-hook 'org-mode-hook (lambda () -;; (setq-local electric-pair-inhibit-predicate -;; `(lambda (c) -;; (if (char-equal c ?<) t (,electric-pair-inhibit-predicate c)))))) -;;(add-hook 'prog-mode-hook (lambda () (electric-pair-mode 1))) +(defun electric-pair () + "If at end of line, insert character pair without surrounding spaces. +Otherwise, just insert the typed character." + (interactive) + (if (eolp) (let (parens-require-spaces) (insert-pair)) (self-insert-command 1))) + (add-hook 'org-mode-hook + (lambda () + (define-key org-mode-map "\"" 'electric-pair) + (define-key org-mode-map "\'" 'electric-pair) + (define-key org-mode-map "(" 'electric-pair) + (define-key org-mode-map "[" 'electric-pair) + (define-key org-mode-map "{" 'electric-pair))) (add-hook 'after-init-hook 'global-company-mode) @@ -195,8 +208,10 @@ "e w" 'eww "p w" 'ivy-pass "m P p" 'org-publish + "s e" 'sudo-edit + "m m" 'emms "h m" '(woman :wk "Manual") - "h r r" '(lambda () (load-file "~/org/website/config/config.el")) + "h r r" '(lambda () (interactive) (org-babel-load-file (expand-file-name "~/org/website/config/emacs.org"))) )) (use-package elfeed @@ -279,7 +294,7 @@ :init (emms-all) (setq emms-source-file-default-directory (expand-file-name "~/music/")) - (setq emms-player-mpd-music-directory "~/music/") + (setq emms-player-mpd-music-directory "/home/preston/music/") (setq emms-player-mpd-server-name "localhost") (setq emms-player-mpd-server-port "6600") (setq emms-player-list '(emms-player-mpd)) @@ -287,3 +302,6 @@ (add-to-list 'emms-player-list 'emms-player-mpd) :config (emms-player-mpd-connect)) + +(use-package stem-mode) +(add-to-list 'auto-mode-alist '("\\.stem\\'" . stem-mode)) diff --git a/config/emacs.org b/config/emacs.org index f72d2e3..ff6342e 100644 --- a/config/emacs.org +++ b/config/emacs.org @@ -4,7 +4,13 @@ #+html_head: <link rel="stylesheet" type="text/css" href="../style.css" /> * Introduction +This is my Vanilla Emacs configuration, made to work with my NixOS configuration. For that +reason, you will not see :ensure t inside any use-package declaration, for emacs packages +are all compiled natively and reproducibly on the NixOS side. This configuration uses the +emacs-lisp language only to configure variables for said packages, for the most part. ** UI Elements +This section contains important UI elements and starting customization variables to make +emacs work in a semi-sane way and make it not look completely ugly: #+begin_src emacs-lisp (display-battery-mode 1) (setq display-time-24hr-format t) @@ -14,18 +20,26 @@ (tool-bar-mode -1) (load-theme 'catppuccin :no-confirm) (add-hook 'prog-mode-hook #'display-line-numbers-mode) + (add-hook 'org-mode-hook #'display-line-numbers-mode) (set-face-attribute 'default nil :height 120) (setq use-short-answers t) (setq make-backup-files nil) (setq org-export-with-broken-links t) (setq org-src-fontify-natively t) + (setq warning-minimum-level :emergency) + (add-hook 'text-mode-hook 'visual-line-mode) + (add-hook 'after-save-hook 'eglot-format) + (setq debug-ignored-errors + (cons 'remote-file-error debug-ignored-errors)) #+end_src * Transparency +My NixOS configuration uses Hyprland to make things transparent: #+begin_src emacs-lisp (set-frame-parameter nil 'alpha-background 90) (add-to-list 'default-frame-alist '(alpha-background . 90)) #+end_src * Scrolling +Make emacs scroll in a sane way: #+begin_src emacs-lisp (setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) (setq mouse-wheel-progressive-speed nil) @@ -33,6 +47,7 @@ (setq scroll-step 1) #+end_src * Agenda +Configure org agenda variables: #+begin_src emacs-lisp (require 'org-habit) (setq org-agenda-files (list "~/org/agenda.org" @@ -41,6 +56,7 @@ (setq org-habit-preceding-days 1) #+end_src * Publishing +This is the configuration required to publish my website: #+begin_src emacs-lisp (require 'ox-publish) (setq org-publish-project-alist @@ -64,18 +80,29 @@ (setq org-html-postamble "Copyright © 2024 Preston Pan") #+end_src * Autopair +Use electric-pair to automatically complete pairs of things. We need to change +what electric-pair does based on the mode. #+begin_src emacs-lisp - ;;(add-hook 'org-mode-hook (lambda () - ;; (setq-local electric-pair-inhibit-predicate - ;; `(lambda (c) - ;; (if (char-equal c ?<) t (,electric-pair-inhibit-predicate c)))))) - ;;(add-hook 'prog-mode-hook (lambda () (electric-pair-mode 1))) + (defun electric-pair () + "If at end of line, insert character pair without surrounding spaces. + Otherwise, just insert the typed character." + (interactive) + (if (eolp) (let (parens-require-spaces) (insert-pair)) (self-insert-command 1))) + (add-hook 'org-mode-hook + (lambda () + (define-key org-mode-map "\"" 'electric-pair) + (define-key org-mode-map "\'" 'electric-pair) + (define-key org-mode-map "(" 'electric-pair) + (define-key org-mode-map "[" 'electric-pair) + (define-key org-mode-map "{" 'electric-pair))) #+end_src * Completion +Company-mode! We need this to do autocomplete stuff. #+begin_src emacs-lisp (add-hook 'after-init-hook 'global-company-mode) #+end_src * Org Babel +For some reason, org-babel doesn't load these languages by default: #+begin_src emacs-lisp (org-babel-do-load-languages 'org-babel-load-languages '( @@ -84,6 +111,7 @@ ) #+end_src * Packages +First, some small configurations and some evil-mode initilaization because I like vim keybindings: #+begin_src emacs-lisp (require 'org-tempo) (use-package evil @@ -119,6 +147,7 @@ (page-break-lines-mode)) #+end_src ** Journal +I use org-journal to journal about my life, and it's a part of my website: #+begin_src emacs-lisp (use-package org-journal :init @@ -140,24 +169,28 @@ ) #+end_src ** Doom Modeline +The default modeline is ugly. #+begin_src emacs-lisp (use-package doom-modeline :config (doom-modeline-mode 1)) #+end_src ** Make Org Look Better +Org superstar adds those nice looking utf-8 bullets: #+begin_src emacs-lisp (use-package org-superstar :config (add-hook 'org-mode-hook (lambda () (org-superstar-mode 1)))) #+end_src ** LSP +We set up eglot, the LSP manager for emacs, now built in: #+begin_src emacs-lisp (use-package eglot :config (add-hook 'prog-mode-hook 'eglot-ensure)) #+end_src ** Dashboard +We want our emacs initialization to be pretty and display useful things. #+begin_src emacs-lisp (use-package dashboard :init @@ -175,12 +208,14 @@ (dashboard-setup-startup-hook)) #+end_src ** Projectile +Manages projects and shit. #+begin_src emacs-lisp (use-package projectile :config (projectile-mode +1)) #+end_src ** Ivy +Ivy is a pretty cool general program for displaying stuff: #+begin_src emacs-lisp (use-package counsel) (use-package ivy @@ -237,11 +272,15 @@ "e w" 'eww "p w" 'ivy-pass "m P p" 'org-publish + "s e" 'sudo-edit + "m m" 'emms "h m" '(woman :wk "Manual") - "h r r" '(lambda () (load-file "~/org/website/config/config.el")) + "h r r" '(lambda () (interactive) (org-babel-load-file (expand-file-name "~/org/website/config/emacs.org"))) )) #+end_src -** Elfeed +** RSS Feed +I use really simple syndication (RSS) in order to read news. As a result, I use +elfeed to fetch feeds found on my website: #+begin_src emacs-lisp (use-package elfeed :init @@ -255,6 +294,8 @@ (elfeed-org)) #+end_src ** Eww +Used only for the purpose of viewing RSS feed items in emacs if I can, only resorting +to Firefox if I have to: #+begin_src emacs-lisp (setq search-engines '( @@ -271,6 +312,7 @@ (lambda () (local-set-key (kbd "y Y") #'eww-copy-page-url))) #+end_src ** Org Roam +For all my mathematics and programming notes: #+begin_src emacs-lisp (use-package org-roam :init @@ -282,18 +324,21 @@ :unnarrowed t)))) #+end_src ** Pinentry +Set up pinentry so that I can use emacs as my pinentry frontend: #+begin_src emacs-lisp (use-package pinentry :init (setq epa-pinentry-mode `loopback) :config (pinentry-start)) #+end_src ** Auctex +Make LaTeX a litle better: #+begin_src emacs-lisp (setq TeX-PDF-mode t) (setq org-format-latex-options (plist-put org-format-latex-options :scale 1.5)) (setq org-return-follows-link t) #+end_src -** Mu4e +** Email +Email in emacs can be done with Mu4e. #+begin_src emacs-lisp ;; SMTP settings: (setq user-mail-address "preston@nullring.xyz") @@ -328,16 +373,18 @@ mu4e-use-fancy-chars t)) #+end_src ** Password Manager +I use ~pass~ in order to manage my passwords on linux, and this is an ivy frontend for it: #+begin_src emacs-lisp (use-package ivy-pass) #+end_src ** Music +Set up emms in order to play music from my music directory: #+begin_src emacs-lisp (use-package emms :init (emms-all) (setq emms-source-file-default-directory (expand-file-name "~/music/")) - (setq emms-player-mpd-music-directory "~/music/") + (setq emms-player-mpd-music-directory "/home/preston/music/") (setq emms-player-mpd-server-name "localhost") (setq emms-player-mpd-server-port "6600") (setq emms-player-list '(emms-player-mpd)) @@ -346,3 +393,9 @@ :config (emms-player-mpd-connect)) #+end_src +** Stem +My own programming language. +#+begin_src emacs-lisp + (use-package stem-mode) + (add-to-list 'auto-mode-alist '("\\.stem\\'" . stem-mode)) +#+end_src diff --git a/config/index.org b/config/index.org index 036906f..2e63109 100644 --- a/config/index.org +++ b/config/index.org @@ -26,6 +26,7 @@ done - [[file:emacs.org][emacs.org]] - [[file:fish.org][fish.org]] - [[file:kmonad.org][kmonad.org]] +- [[file:nix.org][nix.org]] - [[file:qtile.org][qtile.org]] - [[file:qutebrowser.org][qutebrowser.org]] diff --git a/config/nix.org b/config/nix.org new file mode 100644 index 0000000..5251748 --- /dev/null +++ b/config/nix.org @@ -0,0 +1,1298 @@ +#+TITLE: NixOS Configuration +#+AUTHOR: Preston Pan +#+Description: My NixOS configuration in full +#+html_head: <link rel="stylesheet" type="text/css" href="../style.css" /> + +* Configuration +#+begin_src nix :tangle t +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, ... }: + +{ + imports = + [ + # Include the results of the hardware scan. + ./hardware-configuration.nix + <home-manager/nixos> + ]; + + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking.hostName = "continuity"; # Define your hostname. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Enable networking + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "America/Vancouver"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_CA.UTF-8"; + + # Enable the X11 windowing system. + services.xserver.enable = true; + services.xserver.displayManager.startx.enable = true; + + # Configure keymap in X11 + services.xserver = { + layout = "us"; + xkbVariant = ""; + xkbOptions = "caps:escape"; + }; + + # Enable CUPS to print documents. + services.printing.enable = true; + + # Enable sound with pipewire. + sound.enable = true; + hardware.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + # If you want to use JACK applications, uncomment this + #jack.enable = true; + + # use the example session manager (no others are packaged yet so this is enabled by default, + # no need to redefine it in your config for now) + #media-session.enable = true; + }; + + # Enable touchpad support (enabled default in most desktopManager). + # services.xserver.libinput.enable = true; + home-manager.users.preston = { + nixpkgs.config.packageOverrides = pkgs: { + nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") { + inherit pkgs; + }; + }; + home.packages = [ + pkgs.vim + pkgs.git + pkgs.curl + pkgs.wget + pkgs.neofetch + pkgs.cowsay + pkgs.starship + pkgs.kitty + pkgs.ffmpeg + pkgs.hyprland + pkgs.grim + pkgs.acpilight + pkgs.light + pkgs.gnupg + pkgs.pass + pkgs.fira-code + pkgs.croc + pkgs.nixpkgs-fmt + pkgs.mu + pkgs.rust-analyzer + pkgs.rustc + pkgs.cargo + pkgs.rnix-lsp + pkgs.clang + pkgs.bear + pkgs.gnumake + pkgs.clang-tools + pkgs.gammastep + pkgs.pinentry + pkgs.texliveFull + pkgs.helvum + pkgs.xdg-utils + pkgs.ncmpcpp + pkgs.noto-fonts + pkgs.noto-fonts-cjk + pkgs.autobuild + pkgs.rsync + pkgs.pavucontrol + pkgs.swww + pkgs.fswebcam + pkgs.nmap + pkgs.mpc-cli + pkgs.yt-dlp + pkgs.mpv + (pkgs.nerdfonts.override { fonts = [ "Iosevka" ]; }) + (pkgs.discord.override { + withOpenASAR = true; + withVencord = true; + }) + pkgs.vesktop + ]; + + fonts.fontconfig.enable = true; + xsession.enable = true; + home.stateVersion = "23.11"; + + services.gpg-agent = { + enable = true; + pinentryFlavor = "emacs"; + extraConfig = '' + allow-emacs-pinentry + allow-loopback-pinentry + ''; + }; + + services.mpd = { + enable = true; + dbFile = "/home/preston/.config/mpd/db"; + dataDir = "/home/preston/.config/mpd/"; + network.port = 6600; + musicDirectory = "/home/preston/music"; + playlistDirectory = "/home/preston/.config/mpd/playlists"; + extraConfig = '' + audio_output { + type "pipewire" + name "pipewire boi" + } + ''; + }; + + programs.wofi = { + enable = true; + settings = { + location = "bottom-right"; + allow_markup = true; + show = "drun"; + width = 750; + height = 400; + always_parse_args = true; + show_all = false; + term = "kitty"; + hide_scroll = true; + print_command = true; + insensitive = true; + prompt = ""; + columns = 2; + }; + + style = '' + @define-color rosewater #f5e0dc; + @define-color rosewater-rgb rgb(245, 224, 220); + @define-color flamingo #f2cdcd; + @define-color flamingo-rgb rgb(242, 205, 205); + @define-color pink #f5c2e7; + @define-color pink-rgb rgb(245, 194, 231); + @define-color mauve #cba6f7; + @define-color mauve-rgb rgb(203, 166, 247); + @define-color red #f38ba8; + @define-color red-rgb rgb(243, 139, 168); + @define-color maroon #eba0ac; + @define-color maroon-rgb rgb(235, 160, 172); + @define-color peach #fab387; + @define-color peach-rgb rgb(250, 179, 135); + @define-color yellow #f9e2af; + @define-color yellow-rgb rgb(249, 226, 175); + @define-color green #a6e3a1; + @define-color green-rgb rgb(166, 227, 161); + @define-color teal #94e2d5; + @define-color teal-rgb rgb(148, 226, 213); + @define-color sky #89dceb; + @define-color sky-rgb rgb(137, 220, 235); + @define-color sapphire #74c7ec; + @define-color sapphire-rgb rgb(116, 199, 236); + @define-color blue #89b4fa; + @define-color blue-rgb rgb(137, 180, 250); + @define-color lavender #b4befe; + @define-color lavender-rgb rgb(180, 190, 254); + @define-color text #cdd6f4; + @define-color text-rgb rgb(205, 214, 244); + @define-color subtext1 #bac2de; + @define-color subtext1-rgb rgb(186, 194, 222); + @define-color subtext0 #a6adc8; + @define-color subtext0-rgb rgb(166, 173, 200); + @define-color overlay2 #9399b2; + @define-color overlay2-rgb rgb(147, 153, 178); + @define-color overlay1 #7f849c; + @define-color overlay1-rgb rgb(127, 132, 156); + @define-color overlay0 #6c7086; + @define-color overlay0-rgb rgb(108, 112, 134); + @define-color surface2 #585b70; + @define-color surface2-rgb rgb(88, 91, 112); + @define-color surface1 #45475a; + @define-color surface1-rgb rgb(69, 71, 90); + @define-color surface0 #313244; + @define-color surface0-rgb rgb(49, 50, 68); + @define-color base #1e1e2e; + @define-color base-rgb rgb(30, 30, 46); + @define-color mantle #181825; + @define-color mantle-rgb rgb(24, 24, 37); + @define-color crust #11111b; + @define-color crust-rgb rgb(17, 17, 27); + + * { + font-family: 'Iosevka Nerd Font', monospace; + font-size: 14px; + } + + /* Window */ + window { + margin: 0px; + padding: 10px; + border: 0.16em solid @lavender; + border-radius: 0.1em; + background-color: @base; + animation: slideIn 0.5s ease-in-out both; + } + + /* Slide In */ + @keyframes slideIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } + } + + /* Inner Box */ + #inner-box { + margin: 5px; + padding: 10px; + border: none; + background-color: @base; + animation: fadeIn 0.5s ease-in-out both; + } + + /* Fade In */ + @keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } + } + + /* Outer Box */ + #outer-box { + margin: 5px; + padding: 10px; + border: none; + background-color: @base; + } + + /* Scroll */ + #scroll { + margin: 0px; + padding: 10px; + border: none; + background-color: @base; + } + + /* Input */ + #input { + margin: 5px 20px; + padding: 10px; + border: none; + border-radius: 0.1em; + color: @text; + background-color: @base; + animation: fadeIn 0.5s ease-in-out both; + } + + #input image { + border: none; + color: @red; + } + + #input * { + outline: 4px solid @red!important; + } + + /* Text */ + #text { + margin: 5px; + border: none; + color: @text; + animation: fadeIn 0.5s ease-in-out both; + } + + #entry { + background-color: @base; + } + + #entry arrow { + border: none; + color: @lavender; + } + + /* Selected Entry */ + #entry:selected { + border: 0.11em solid @lavender; + } + + #entry:selected #text { + color: @mauve; + } + + #entry:drop(active) { + background-color: @lavender!important; + } + ''; + }; + + programs.kitty = { + enable = true; + settings = { + enable_audio_bell = false; + font_family = "Fira Code"; + font_size = 12; + confirm_os_window_close = -1; + background_opacity = "0.9"; + }; + extraConfig = '' + # The basic colors + foreground #CDD6F4 + background #1E1E2E + selection_foreground #1E1E2E + selection_background #F5E0DC + + # Cursor colors + cursor #F5E0DC + cursor_text_color #1E1E2E + + # URL underline color when hovering with mouse + url_color #F5E0DC + + # Kitty window border colors + active_border_color #B4BEFE + inactive_border_color #6C7086 + bell_border_color #F9E2AF + + # OS Window titlebar colors + wayland_titlebar_color #1E1E2E + macos_titlebar_color #1E1E2E + + # Tab bar colors + active_tab_foreground #11111B + active_tab_background #CBA6F7 + inactive_tab_foreground #CDD6F4 + inactive_tab_background #181825 + tab_bar_background #11111B + + # Colors for marks (marked text in the terminal) + mark1_foreground #1E1E2E + mark1_background #B4BEFE + mark2_foreground #1E1E2E + mark2_background #CBA6F7 + mark3_foreground #1E1E2E + mark3_background #74C7EC + + # The 16 terminal colors + + # black + color0 #45475A + color8 #585B70 + + # red + color1 #F38BA8 + color9 #F38BA8 + + # green + color2 #A6E3A1 + color10 #A6E3A1 + + # yellow + color3 #F9E2AF + color11 #F9E2AF + + # blue + color4 #89B4FA + color12 #89B4FA + + # magenta + color5 #F5C2E7 + color13 #F5C2E7 + + # cyan + color6 #94E2D5 + color14 #94E2D5 + + # white + color7 #BAC2DE + color15 #A6ADC8 + ''; + }; + programs.firefox = { + policies = { + EnableTrackingProtection = true; + OfferToSaveLogins = false; + }; + enable = true; + profiles = { + default = { + id = 0; + name = "default"; + isDefault = true; + extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + ublock-origin + tree-style-tab + firefox-color + vimium + ]; + extraConfig = '' + // + /* You may copy+paste this file and use it as it is. + * + * If you make changes to your about:config while the program is running, the + * changes will be overwritten by the user.js when the application restarts. + * + * To make lasting changes to preferences, you will have to edit the user.js. + */ + + /**************************************************************************** + * Betterfox * + * "Ad meliora" * + * version: 122 * + * url: https://github.com/yokoffing/Betterfox * + ****************************************************************************/ + + /**************************************************************************** + * SECTION: FASTFOX * + ****************************************************************************/ + /** GENERAL ***/ + user_pref("content.notify.interval", 100000); + + /** GFX ***/ + user_pref("gfx.canvas.accelerated.cache-items", 4096); + user_pref("gfx.canvas.accelerated.cache-size", 512); + user_pref("gfx.content.skia-font-cache-size", 20); + + /** DISK CACHE ***/ + user_pref("browser.cache.jsbc_compression_level", 3); + + /** MEDIA CACHE ***/ + user_pref("media.memory_cache_max_size", 65536); + user_pref("media.cache_readahead_limit", 7200); + user_pref("media.cache_resume_threshold", 3600); + + /** IMAGE CACHE ***/ + user_pref("image.mem.decode_bytes_at_a_time", 32768); + + /** NETWORK ***/ + user_pref("network.buffer.cache.size", 262144); + user_pref("network.buffer.cache.count", 128); + user_pref("network.http.max-connections", 1800); + user_pref("network.http.max-persistent-connections-per-server", 10); + user_pref("network.http.max-urgent-start-excessive-connections-per-host", 5); + user_pref("network.http.pacing.requests.enabled", false); + user_pref("network.dnsCacheExpiration", 3600); + user_pref("network.dns.max_high_priority_threads", 8); + user_pref("network.ssl_tokens_cache_capacity", 10240); + + /** SPECULATIVE LOADING ***/ + user_pref("network.dns.disablePrefetch", true); + user_pref("network.prefetch-next", false); + user_pref("network.predictor.enabled", false); + + /** EXPERIMENTAL ***/ + user_pref("layout.css.grid-template-masonry-value.enabled", true); + user_pref("dom.enable_web_task_scheduling", true); + user_pref("layout.css.has-selector.enabled", true); + user_pref("dom.security.sanitizer.enabled", true); + + /**************************************************************************** + * SECTION: SECUREFOX * + ****************************************************************************/ + /** TRACKING PROTECTION ***/ + user_pref("browser.contentblocking.category", "strict"); + user_pref("urlclassifier.trackingSkipURLs", "*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com"); + user_pref("urlclassifier.features.socialtracking.skipURLs", "*.instagram.com, *.twitter.com, *.twimg.com"); + user_pref("network.cookie.sameSite.noneRequiresSecure", true); + user_pref("browser.download.start_downloads_in_tmp_dir", true); + user_pref("browser.helperApps.deleteTempFileOnExit", true); + user_pref("browser.uitour.enabled", false); + user_pref("privacy.globalprivacycontrol.enabled", true); + + /** OCSP & CERTS / HPKP ***/ + user_pref("security.OCSP.enabled", 0); + user_pref("security.remote_settings.crlite_filters.enabled", true); + user_pref("security.pki.crlite_mode", 2); + + /** SSL / TLS ***/ + user_pref("security.ssl.treat_unsafe_negotiation_as_broken", true); + user_pref("browser.xul.error_pages.expert_bad_cert", true); + user_pref("security.tls.enable_0rtt_data", false); + + /** DISK AVOIDANCE ***/ + user_pref("browser.privatebrowsing.forceMediaMemoryCache", true); + user_pref("browser.sessionstore.interval", 60000); + + /** SHUTDOWN & SANITIZING ***/ + /** L **/ + user_pref("privacy.history.custom", true); + + /** SEARCH / URL BAR ***/ + user_pref("browser.search.separatePrivateDefault.ui.enabled", true); + user_pref("browser.urlbar.update2.engineAliasRefresh", true); + user_pref("browser.search.suggest.enabled", false); + user_pref("browser.urlbar.suggest.quicksuggest.sponsored", false); + user_pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false); + user_pref("browser.formfill.enable", false); + user_pref("security.insecure_connection_text.enabled", true); + user_pref("security.insecure_connection_text.pbmode.enabled", true); + user_pref("network.IDN_show_punycode", true); + + /** HTTPS-FIRST POLICY ***/ + user_pref("dom.security.https_first", true); + user_pref("dom.security.https_first_schemeless", true); + + /** PASSWORDS ***/ + user_pref("signon.formlessCapture.enabled", false); + user_pref("signon.privateBrowsingCapture.enabled", false); + user_pref("network.auth.subresource-http-auth-allow", 1); + user_pref("editor.truncate_user_pastes", false); + + /** MIXED CONTENT + CROSS-SITE ***/ + user_pref("security.mixed_content.block_display_content", true); + user_pref("security.mixed_content.upgrade_display_content", true); + user_pref("security.mixed_content.upgrade_display_content.image", true); + user_pref("pdfjs.enableScripting", false); + user_pref("extensions.postDownloadThirdPartyPrompt", false); + + /** HEADERS / REFERERS ***/ + user_pref("network.http.referer.XOriginTrimmingPolicy", 2); + + /** CONTAINERS ***/ + user_pref("privacy.userContext.ui.enabled", true); + + /** WEBRTC ***/ + user_pref("media.peerconnection.ice.proxy_only_if_behind_proxy", true); + user_pref("media.peerconnection.ice.default_address_only", true); + + /** SAFE BROWSING ***/ + user_pref("browser.safebrowsing.downloads.remote.enabled", false); + + /** MOZILLA ***/ + user_pref("permissions.default.desktop-notification", 2); + user_pref("permissions.default.geo", 2); + user_pref("geo.provider.network.url", "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%"); + user_pref("permissions.manager.defaultsUrl", ""); + user_pref("webchannel.allowObject.urlWhitelist", ""); + + /** TELEMETRY ***/ + user_pref("datareporting.policy.dataSubmissionEnabled", false); + user_pref("datareporting.healthreport.uploadEnabled", false); + user_pref("toolkit.telemetry.unified", false); + user_pref("toolkit.telemetry.enabled", false); + user_pref("toolkit.telemetry.server", "data:,"); + user_pref("toolkit.telemetry.archive.enabled", false); + user_pref("toolkit.telemetry.newProfilePing.enabled", false); + user_pref("toolkit.telemetry.shutdownPingSender.enabled", false); + user_pref("toolkit.telemetry.updatePing.enabled", false); + user_pref("toolkit.telemetry.bhrPing.enabled", false); + user_pref("toolkit.telemetry.firstShutdownPing.enabled", false); + user_pref("toolkit.telemetry.coverage.opt-out", true); + user_pref("toolkit.coverage.opt-out", true); + user_pref("toolkit.coverage.endpoint.base", ""); + user_pref("browser.ping-centre.telemetry", false); + user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false); + user_pref("browser.newtabpage.activity-stream.telemetry", false); + + /** EXPERIMENTS ***/ + user_pref("app.shield.optoutstudies.enabled", false); + user_pref("app.normandy.enabled", false); + user_pref("app.normandy.api_url", ""); + + /** CRASH REPORTS ***/ + user_pref("breakpad.reportURL", ""); + user_pref("browser.tabs.crashReporting.sendReport", false); + user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false); + + /** DETECTION ***/ + user_pref("captivedetect.canonicalURL", ""); + user_pref("network.captive-portal-service.enabled", false); + user_pref("network.connectivity-service.enabled", false); + + /**************************************************************************** + * SECTION: PESKYFOX * + ****************************************************************************/ + /** MOZILLA UI ***/ + /** format on save please? **/ + user_pref("browser.privatebrowsing.vpnpromourl", ""); + user_pref("extensions.getAddons.showPane", false); + user_pref("extensions.htmlaboutaddons.recommendations.enabled", false); + user_pref("browser.discovery.enabled", false); + user_pref("browser.shell.checkDefaultBrowser", false); + user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false); + user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false); + user_pref("browser.preferences.moreFromMozilla", false); + user_pref("browser.tabs.tabmanager.enabled", false); + user_pref("browser.aboutConfig.showWarning", false); + user_pref("browser.aboutwelcome.enabled", false); + + /** THEME ADJUSTMENTS ***/ + user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); + user_pref("browser.compactmode.show", true); + user_pref("browser.display.focus_ring_on_anything", true); + user_pref("browser.display.focus_ring_style", 0); + user_pref("browser.display.focus_ring_width", 0); + user_pref("layout.css.prefers-color-scheme.content-override", 2); + user_pref("browser.privateWindowSeparation.enabled", false); // WINDOWS + + /** COOKIE BANNER HANDLING ***/ + user_pref("cookiebanners.service.mode", 1); + user_pref("cookiebanners.service.mode.privateBrowsing", 1); + + /** FULLSCREEN NOTICE ***/ + user_pref("full-screen-api.transition-duration.enter", "0 0"); + user_pref("full-screen-api.transition-duration.leave", "0 0"); + user_pref("full-screen-api.warning.delay", -1); + user_pref("full-screen-api.warning.timeout", 0); + + /** URL BAR ***/ + user_pref("browser.urlbar.suggest.calculator", true); + user_pref("browser.urlbar.unitConversion.enabled", true); + user_pref("browser.urlbar.trending.featureGate", false); + + /** NEW TAB PAGE ***/ + user_pref("browser.newtabpage.activity-stream.feeds.topsites", false); + user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false); + + /** POCKET ***/ + user_pref("extensions.pocket.enabled", false); + + /** DOWNLOADS ***/ + user_pref("browser.download.always_ask_before_handling_new_types", true); + user_pref("browser.download.manager.addToRecentDocs", false); + + /** PDF ***/ + user_pref("browser.download.open_pdf_attachments_inline", true); + + /** TAB BEHAVIOR ***/ + user_pref("browser.bookmarks.openInTabClosesMenu", false); + user_pref("browser.menu.showViewImageInfo", true); + user_pref("findbar.highlightAll", true); + user_pref("layout.word_select.eat_space_to_next_word", false); + ''; + }; + }; + }; + programs.waybar = { + enable = true; + style = '' + * { + border: none; + border-radius: 0px; + /*font-family: Fira Code, Iosevka Nerd Font, Noto Sans CJK;*/ + font-family: Iosevka, FontAwesome, Noto Sans CJK; + |