aboutsummaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/emacs.el32
-rw-r--r--config/emacs.org71
-rw-r--r--config/index.org1
-rw-r--r--config/nix.org1298
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;
+