From 9551c7d783b76edff579287238ab3b85d37efe25 Mon Sep 17 00:00:00 2001 From: Preston Pan Date: Thu, 29 Feb 2024 22:37:34 -0800 Subject: [PATCH] publish nix config --- config/emacs.el | 32 +- config/emacs.org | 71 +- config/index.org | 1 + config/nix.org | 1298 +++++++++++++++++ index.org | 2 +- journal/20240228.org | 2 + journal/20240229.org | 15 + journal/index.org | 9 + ...06b35aab630959bdb930850ed2b803a1124b57.png | Bin 0 -> 413 bytes ...9d16d1c0cb3f56a133dfd060fc4ad85d7c3ae0.png | Bin 0 -> 292 bytes ...c20eb942ca6f373204743a24fce5abceff7223.png | Bin 0 -> 224 bytes ...b160140f69a8968023558b912d2c338b4c7cd0.png | Bin 0 -> 1107 bytes ...2c36266ac2b7aaff5b9ae5d5ce9b238f8d733d.png | Bin 0 -> 1266 bytes ...74c420279804a17700d026fb6c32c82100efef.png | Bin 0 -> 745 bytes ...5a4687f63d042e30235c00b107e8a90b39cbe9.png | Bin 0 -> 633 bytes ...9b13358bb709007aa2129a35f70dde825b753b.png | Bin 0 -> 320 bytes ...0388319972064fe056b06ed551f245440961fc.png | Bin 0 -> 233 bytes ...5aca4b80a05e84cf3030f4a562c36fd763b017.png | Bin 0 -> 1861 bytes ...b048c4768ba5e8509586f342853a19047bdcd4.png | Bin 0 -> 286 bytes ...09ed53af006ef54cc02dad41f22d822067c6aa.png | Bin 0 -> 264 bytes ...07c8d076054729da4a49c8729c0d9031f8ce89.png | Bin 0 -> 203 bytes ...d9ef0ee20b89d40d13e7de774f5d7f9ef8d73c.png | Bin 0 -> 3203 bytes ...6fde8e3ec2626d93a4fcbb6cbf89a2613e99d1.png | Bin 0 -> 291 bytes ...f707ca8d89138c4becf7755f9ea7b8054bd969.png | Bin 0 -> 358 bytes ...ad022d61bb8e76d2cb86af41adaf448cd32307.png | Bin 0 -> 578 bytes ...79d590e686c334d991c27a80c7e3491110fc36.png | Bin 0 -> 526 bytes ...e142d501fc2c43537aafba0ad522d569bd8285.png | Bin 0 -> 327 bytes ...8ee3a422196ae174ba821911e7bb85d48c3911.png | Bin 0 -> 511 bytes ...d514a50c0b908f35bf6e07630b4981e688ecca.png | Bin 0 -> 367 bytes ...c5b7df2856d6dd028ec93dc57e3b6f9e2884fa.png | Bin 0 -> 220 bytes ...afed2578a3bea425e0f880f2963f2415c6b87b.png | Bin 0 -> 478 bytes ...36bf1e417ddfdc48d8ed26372b518c90c12cb4.png | Bin 0 -> 248 bytes 32 files changed, 1413 insertions(+), 17 deletions(-) create mode 100644 config/nix.org create mode 100644 journal/20240229.org create mode 100644 mindmap/ltximg/org-ltximg_2c06b35aab630959bdb930850ed2b803a1124b57.png create mode 100644 mindmap/ltximg/org-ltximg_389d16d1c0cb3f56a133dfd060fc4ad85d7c3ae0.png create mode 100644 mindmap/ltximg/org-ltximg_44c20eb942ca6f373204743a24fce5abceff7223.png create mode 100644 mindmap/ltximg/org-ltximg_4ab160140f69a8968023558b912d2c338b4c7cd0.png create mode 100644 mindmap/ltximg/org-ltximg_4f2c36266ac2b7aaff5b9ae5d5ce9b238f8d733d.png create mode 100644 mindmap/ltximg/org-ltximg_5174c420279804a17700d026fb6c32c82100efef.png create mode 100644 mindmap/ltximg/org-ltximg_5c5a4687f63d042e30235c00b107e8a90b39cbe9.png create mode 100644 mindmap/ltximg/org-ltximg_5f9b13358bb709007aa2129a35f70dde825b753b.png create mode 100644 mindmap/ltximg/org-ltximg_6a0388319972064fe056b06ed551f245440961fc.png create mode 100644 mindmap/ltximg/org-ltximg_6a5aca4b80a05e84cf3030f4a562c36fd763b017.png create mode 100644 mindmap/ltximg/org-ltximg_6ab048c4768ba5e8509586f342853a19047bdcd4.png create mode 100644 mindmap/ltximg/org-ltximg_6c09ed53af006ef54cc02dad41f22d822067c6aa.png create mode 100644 mindmap/ltximg/org-ltximg_7407c8d076054729da4a49c8729c0d9031f8ce89.png create mode 100644 mindmap/ltximg/org-ltximg_80d9ef0ee20b89d40d13e7de774f5d7f9ef8d73c.png create mode 100644 mindmap/ltximg/org-ltximg_9e6fde8e3ec2626d93a4fcbb6cbf89a2613e99d1.png create mode 100644 mindmap/ltximg/org-ltximg_9ff707ca8d89138c4becf7755f9ea7b8054bd969.png create mode 100644 mindmap/ltximg/org-ltximg_aead022d61bb8e76d2cb86af41adaf448cd32307.png create mode 100644 mindmap/ltximg/org-ltximg_c679d590e686c334d991c27a80c7e3491110fc36.png create mode 100644 mindmap/ltximg/org-ltximg_c9e142d501fc2c43537aafba0ad522d569bd8285.png create mode 100644 mindmap/ltximg/org-ltximg_d08ee3a422196ae174ba821911e7bb85d48c3911.png create mode 100644 mindmap/ltximg/org-ltximg_e8d514a50c0b908f35bf6e07630b4981e688ecca.png create mode 100644 mindmap/ltximg/org-ltximg_f0c5b7df2856d6dd028ec93dc57e3b6f9e2884fa.png create mode 100644 mindmap/ltximg/org-ltximg_f1afed2578a3bea425e0f880f2963f2415c6b87b.png create mode 100644 mindmap/ltximg/org-ltximg_fc36bf1e417ddfdc48d8ed26372b518c90c12cb4.png 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" "

previous page | home

"))) (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: * 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: + +* 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 + + ]; + + # 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; + font-size: 14px; + font-style: normal; + min-height: 0; + } + + window#waybar { + background: rgba(30, 30, 46, 0.5); + border-bottom: 1px solid #45475a; + color: #cdd6f4; + } + + #workspaces { + background: #45475a; + margin: 5px 5px 5px 5px; + padding: 0px 5px 0px 5px; + border-radius: 16px; + border: solid 0px #f4d9e1; + font-weight: normal; + font-style: normal; + } + #workspaces button { + padding: 0px 5px; + border-radius: 16px; + color: #a6adc8; + } + + #workspaces button.active { + color: #f4d9e1; + background-color: transparent; + border-radius: 16px; + } + + #workspaces button:hover { + background-color: #cdd6f4; + color: black; + border-radius: 16px; + } + + #custom-date, #clock, #battery, #pulseaudio, #network, #custom-randwall, #custom-launcher { + background: transparent; + padding: 5px 5px 5px 5px; + margin: 5px 5px 5px 5px; + border-radius: 8px; + border: solid 0px #f4d9e1; + } + + #custom-date { + color: #D3869B; + } + + #custom-power { + color: #24283b; + background-color: #db4b4b; + border-radius: 5px; + margin-right: 10px; + margin-top: 5px; + margin-bottom: 5px; + margin-left: 0px; + padding: 5px 10px; + } + + #tray { + background: #45475a; + margin: 5px 5px 5px 5px; + border-radius: 16px; + padding: 0px 5px; + /*border-right: solid 1px #282738;*/ + } + + #clock { + color: #cdd6f4; + background-color: #45475a; + border-radius: 0px 0px 0px 24px; + padding-left: 13px; + padding-right: 15px; + margin-right: 0px; + margin-left: 10px; + margin-top: 0px; + margin-bottom: 0px; + font-weight: bold; + /*border-left: solid 1px #282738;*/ + } + + #battery { + color: #89b4fa; + } + + #battery.charging { + color: #a6e3a1; + } + + #battery.warning:not(.charging) { + background-color: #f7768e; + color: #f38ba8; + border-radius: 5px 5px 5px 5px; + } + + #backlight { + background-color: #24283b; + color: #db4b4b; + border-radius: 0px 0px 0px 0px; + margin: 5px; + margin-left: 0px; + margin-right: 0px; + padding: 0px 0px; + } + + #network { + color: #f4d9e1; + border-radius: 8px; + margin-right: 5px; + } + + #pulseaudio { + color: #f4d9e1; + border-radius: 8px; + margin-left: 0px; + } + + #pulseaudio.muted { + background: transparent; + color: #928374; + border-radius: 8px; + margin-left: 0px; + } + + #custom-randwall { + color: #f4d9e1; + border-radius: 8px; + margin-right: 0px; + } + + #custom-launcher { + color: #e5809e; + background-color: #45475a; + border-radius: 0px 24px 0px 0px; + margin: 0px 0px 0px 0px; + padding: 0 20px 0 13px; + /*border-right: solid 1px #282738;*/ + font-size: 20px; + } + + #custom-launcher button:hover { + background-color: #FB4934; + color: transparent; + border-radius: 8px; + margin-right: -5px; + margin-left: 10px; + } + + #custom-playerctl { + background: #45475a; + padding-left: 15px; + padding-right: 14px; + border-radius: 16px; + /*border-left: solid 1px #282738;*/ + /*border-right: solid 1px #282738;*/ + margin-top: 5px; + margin-bottom: 5px; + margin-left: 0px; + font-weight: normal; + font-style: normal; + font-size: 16px; + } + + #custom-playerlabel { + background: transparent; + padding-left: 10px; + padding-right: 15px; + border-radius: 16px; + /*border-left: solid 1px #282738;*/ + /*border-right: solid 1px #282738;*/ + margin-top: 5px; + margin-bottom: 5px; + font-weight: normal; + font-style: normal; + } + + #window { + background: #45475a; + padding-left: 15px; + padding-right: 15px; + border-radius: 16px; + /*border-left: solid 1px #282738;*/ + /*border-right: solid 1px #282738;*/ + margin-top: 5px; + margin-bottom: 5px; + font-weight: normal; + font-style: normal; + } + + #custom-wf-recorder { + padding: 0 20px; + color: #e5809e; + background-color: #1E1E2E; + } + + #cpu { + background-color: #45475a; + /*color: #FABD2D;*/ + border-radius: 16px; + margin: 5px; + margin-left: 5px; + margin-right: 5px; + padding: 0px 10px 0px 10px; + font-weight: bold; + } + + #memory { + background-color: #45475a; + /*color: #83A598;*/ + border-radius: 16px; + margin: 5px; + margin-left: 5px; + margin-right: 5px; + padding: 0px 10px 0px 10px; + font-weight: bold; + } + + #disk { + background-color: #45475a; + /*color: #8EC07C;*/ + border-radius: 16px; + margin: 5px; + margin-left: 5px; + margin-right: 5px; + padding: 0px 10px 0px 10px; + font-weight: bold; + } + + #custom-hyprpicker { + background-color: #45475a; + /*color: #8EC07C;*/ + border-radius: 16px; + margin: 5px; + margin-left: 5px; + margin-right: 5px; + padding: 0px 11px 0px 9px; + font-weight: bold; + } + ''; + settings = { + mainBar = { + layer = "top"; + position = "top"; + height = 30; + + output = [ + "LVDS-1" + ]; + + modules-left = [ "hyprland/workspaces" ]; + modules-center = [ "hyprland/window" ]; + modules-right = [ "battery" "clock" ]; + + battery = { + bat = "BAT0"; + format = "{capacity}% {icon}"; + format-icons = [ "" "" "" "" "" ]; + }; + + clock = { + format = "{:%a %d, %b %H:%M}"; + }; + }; + }; + }; + + programs.zsh = { + enable = true; + initExtra = '' + source ${pkgs.zsh-vi-mode}/share/zsh-vi-mode/zsh-vi-mode.plugin.zsh + ''; + shellAliases = { + c = "clear"; + g = "git"; + v = "vim"; + h = "Hyprland"; + }; + }; + + programs.emacs = { + enable = true; + package = pkgs.emacs29-pgtk; + extraConfig = '' + (setq debug-on-error t) + (org-babel-load-file + (expand-file-name "~/org/website/config/emacs.org"))''; + extraPackages = epkgs: [ + epkgs.nix-mode + epkgs.emms + epkgs.magit + epkgs.vterm + epkgs.auctex + epkgs.use-package + epkgs.evil + epkgs.evil-collection + epkgs.org-roam + epkgs.org-journal + epkgs.general + epkgs.which-key + epkgs.gruvbox-theme + epkgs.elfeed + epkgs.elfeed-org + epkgs.doom-modeline + epkgs.dashboard + epkgs.org-superstar + epkgs.projectile + epkgs.lsp-mode + epkgs.ivy + epkgs.lsp-ivy + epkgs.all-the-icons + epkgs.page-break-lines + epkgs.counsel + epkgs.mu4e + epkgs.yasnippet + epkgs.company + epkgs.pinentry + epkgs.pdf-tools + epkgs.circe + epkgs.ivy-pass + epkgs.magit-delta + epkgs.sudo-edit + epkgs.evil-commentary + epkgs.evil-org + epkgs.catppuccin-theme + epkgs.htmlize + epkgs.web-mode + epkgs.emmet-mode + epkgs.ement + epkgs.rustic + epkgs.chatgpt-shell + + ]; + }; + + programs.mbsync = { + enable = true; + extraConfig = '' + IMAPAccount prestonpan + Host mail.nullring.xyz + User preston + PassCmd "pass Mail" + Port 993 + SSLType IMAPS + AuthMechs * + CertificateFile /etc/ssl/certs/ca-certificates.crt + + IMAPStore prestonpan-remote + Account prestonpan + + MaildirStore prestonpan-local + Path ~/email/mbsyncmail/ + Inbox ~/email/mbsyncmail/INBOX + SubFolders Verbatim + + Channel prestonpan + Far :prestonpan-remote: + Near :prestonpan-local: + Patterns * + Create Near + Sync All + Expunge None + SyncState * + ''; + }; + + programs.msmtp = { + enable = true; + extraConfig = '' + # Set default values for all following accounts. + defaults + auth on + tls on + tls_trust_file /etc/ssl/certs/ca-certificates.crt + logfile ~/.msmtp.log + + # Gmail + account preston + host mail.nullring.xyz + port 587 + from preston@nullring.xyz + user preston + passwordeval "pass Mail" + + + # Set a default account + account default : preston + ''; + }; + + programs.bash = { + enable = true; + }; + + programs.qutebrowser = { + enable = true; + searchEngines = { + w = "https://en.wikipedia.org/wiki/Special:Search?search={}&go=Go&ns0=1"; + aw = "https://wiki.archlinux.org/?search={}"; + nw = "https://nixos.wiki/index.php?search={}"; + g = "https://www.google.com/search?hl=en&q={}"; + DEFAULT = "https://www.google.com/search?hl=en&q={}"; + }; + settings = { }; + extraConfig = '' + import os + from urllib.request import urlopen + + if not os.path.exists(config.configdir / "theme.py"): + theme = "https://raw.githubusercontent.com/catppuccin/qutebrowser/main/setup.py" + with urlopen(theme) as themehtml: + with open(config.configdir / "theme.py", "a") as file: + file.writelines(themehtml.read().decode("utf-8")) + + if os.path.exists(config.configdir / "theme.py"): + import theme + theme.setup(c, 'mocha', True) + ''; + }; + programs.git = { + enable = true; + userName = "Preston Pan"; + userEmail = "preston@nullring.xyz"; + signing.key = "2B749D1FB976E81613858E490290504780B30E20"; + aliases = { + co = "checkout"; + c = "commit"; + a = "add"; + s = "switch"; + b = "branch"; + }; + }; + + wayland.windowManager.hyprland = { + enable = true; + package = pkgs.hyprland; + xwayland.enable = true; + systemd.enable = true; + settings = { + "$mod" = "SUPER"; + + exec-once = [ + "waybar" + "swww init" + "swww img /home/preston/wallpapers/bigrobot.png" + ]; + blurls = [ + "waybar" + ]; + bind = [ + "$mod, F, exec, firefox" + "$mod, Return, exec, kitty" + "$mod, E, exec, emacs" + "$mod, v, exec, vencorddesktop" + "$mod, d, exec, wofi --show run" + ", Print, exec, grimblast copy area" + "$mod, Q, killactive" + "$mod SHIFT, H, movewindow, l" + "$mod SHIFT, L, movewindow, r" + "$mod SHIFT, K, movewindow, u" + "$mod SHIFT, J, movewindow, d" + "$mod, H, movefocus, l" + "$mod, L, movefocus, r" + "$mod, K, movefocus, u" + "$mod, J, movefocus, d" + ] + ++ ( + builtins.concatLists (builtins.genList + ( + x: + let + ws = + let + c = (x + 1) / 10; + in + builtins.toString (x + 1 - (c * 10)); + in + [ + "$mod, ${ws}, workspace, ${toString (x + 1)}" + "$mod SHIFT, ${ws}, movetoworkspace, ${toString (x + 1)}" + ] + ) + 10) + ); + decoration = { + blur = { + enabled = true; + size = 5; + passes = 2; + }; + rounding = 5; + shadow_offset = "0 5"; + "col.shadow" = "rgba(00000099)"; + }; + input = { + kb_options = "caps:swapescape"; + repeat_delay = 300; + repeat_rate = 50; + }; + bindm = [ + "$mod, mouse:272, movewindow" + "$mod, mouse:273, resizewindow" + "$mod ALT, mouse:272, resizewindow" + ]; + binde = [ + ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+" + ", XF86AudioLowerVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-" + ", XF86AudioPlay, exec, mpc toggle" + ", XF86AudioNext, exec, mpc next" + ", XF86AudioPrev, exec, mpc prev" + ]; + }; + }; + }; + # Define a user account. Don't forget to set a password with ‘passwd’. + programs.zsh.enable = true; + + security.sudo = { + enable = true; + extraRules = [{ + commands = [ + { + command = "${pkgs.systemd}/bin/systemctl suspend"; + options = [ "NOPASSWD" ]; + } + { + command = "${pkgs.systemd}/bin/reboot"; + options = [ "NOPASSWD" ]; + } + { + command = "${pkgs.systemd}/bin/poweroff"; + options = [ "NOPASSWD" ]; + } + { + command = "${pkgs.light}/bin/light"; + options = [ "NOPASSWD" ]; + } + ]; + groups = [ "wheel" ]; + }]; + }; + + users.users.preston = { + isNormalUser = true; + description = "Preston Pan"; + extraGroups = [ "networkmanager" "wheel" ]; + shell = pkgs.zsh; + packages = with pkgs; [ + # thunderbird + ]; + }; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # List packages installed in system profile. To search, run: + # $ nix search wget + nixpkgs.config.packageOverrides = pkgs: { + nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") { + inherit pkgs; + }; + }; + + environment.systemPackages = with pkgs; [ + # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + # wget + nixpkgs-fmt + rnix-lsp + light + ]; + + xdg.portal = { + enable = true; + wlr.enable = true; + extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + config.common.default = "*"; + }; + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "23.11"; # Did you read the comment? +} +#+end_src diff --git a/index.org b/index.org index 57d4665..59e30e6 100644 --- a/index.org +++ b/index.org @@ -64,7 +64,7 @@ website: #+begin_src shell :exports code :results silent cd ~/org/website git add . -git commit -m "publish from thinkpad" +git commit -m "publish nix config" git push origin main rsync -azvP ~/website_html/ root@nullring.xyz:/var/www/ret2pop/ #+end_src diff --git a/journal/20240228.org b/journal/20240228.org index 10ee947..faa7394 100644 --- a/journal/20240228.org +++ b/journal/20240228.org @@ -10,3 +10,5 @@ ** 21:03 I am inside my new emacs setup inside NixOS, which is extremely cool. I am journaling from my thinkpad for the first time in a while. +** 22:16 +Just showing someone my emacs config yet again. You know how this works at this point. diff --git a/journal/20240229.org b/journal/20240229.org new file mode 100644 index 0000000..a4cc59c --- /dev/null +++ b/journal/20240229.org @@ -0,0 +1,15 @@ +#+TITLE: Daily Journal +#+STARTUP: showeverything +#+DESCRIPTION: My daily journal entry +#+AUTHOR: Preston Pan +#+HTML_HEAD: +#+html_head: +#+html_head: +#+options: broken-links:t +* Thursday, 29 February 2024 +** 15:24 +I'm at Starbucks right now, about to do some real analysis. I think I'm going to move to the basement +today, and I'm mostly finished my NixOS configuration with the exception of the mpd server, which +for some reason doesn't start even though I have all the required configurations. +** 18:47 +I'm journaling in emacs! diff --git a/journal/index.org b/journal/index.org index 0a97804..a9db80e 100644 --- a/journal/index.org +++ b/journal/index.org @@ -35,6 +35,15 @@ done #+end_src #+RESULTS: +- [[file:20240229.org][20240229.org]] +- [[file:20240228.org][20240228.org]] +- [[file:20240226.org][20240226.org]] +- [[file:20240210.org][20240210.org]] +- [[file:20240205.org][20240205.org]] +- [[file:20240128.org][20240128.org]] +- [[file:20240127.org][20240127.org]] +- [[file:20240126.org][20240126.org]] +- [[file:20240125.org][20240125.org]] - [[file:20240124.org][20240124.org]] - [[file:20240123.org][20240123.org]] - [[file:20240110.org][20240110.org]] diff --git a/mindmap/ltximg/org-ltximg_2c06b35aab630959bdb930850ed2b803a1124b57.png b/mindmap/ltximg/org-ltximg_2c06b35aab630959bdb930850ed2b803a1124b57.png new file mode 100644 index 0000000000000000000000000000000000000000..bc95130fc284c439a0ffefe88f6f3fd2948c6e84 GIT binary patch literal 413 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U=U?tW?*2D?U&|fU|=u^@Ck91lhZqU?aSnu zo5G{=H8rgco_gNav!uFVMoN0EkAJd*Q^=}~XSeRXId926Q!|hJ;?6@~e+e)!FmM)l zL>4nJ@ErkR#;MwT(hLlY!k#XUAsV8&=QnyWI|{Hpu)jI=PU>0J_M=A?b}U#L=8fqRgP$zV&!|m2aZiN#cm3uwdK1FG zpLLDn=@8jlr>EJwHgcUv`VGEbnHzBz=5)%w`~O<~Ve##0pVmq4+4S_ZjqjZ(rQ;G8 zmU17Tbh^5EEx&2nDZP1%f8M6^I%RBMJzBfkf)=n&V?9^EA@WfD z@YnCkV(a^peHz{uG4z`i?A*AMxuwYIcviD>u&$14#`lR$Ub$15`4?aOe2;rUQv1>k zaY<}mf959!J^i@*ip%P>CmA~zP0#UCWk_Mz=>PDx+KTZ1obRkt+AsCn|71O>X8irg TQPV^Q1_lOCS3j3^P6ZmXwDd9m5Lt*UK)&Jvv-#>8R!4ZZ>_mVaw1TaQUW_t9=H{n9E1;dj5+}a%oBE3eSf#ss9I8DhqQ%5j6wqY&D|du_cP33fB4Ga19L7bV_YE{ un^+-RTBSk%?*$Lk*v=L6=p5wXVR-K=Sr&f(;z zkae9No=;<7VBjq9 zh%9Dc;5!1sj8nDwq!}0(!aQ9ZLpWrU6A}^v*pk@T)WVqsrp~*-xhT!Bz`P+tN1=$x z{|Or#A8V(^H*TIeJWZTkY&?}dMm#wVTWg#Wc+W5;bP47t9X`&UaPJ_C!BcKE$v+Mv a47cUE&z6N>TF=11z~JfX=d#Wzp$P!ImPW1s literal 0 HcmV?d00001 diff --git a/mindmap/ltximg/org-ltximg_4ab160140f69a8968023558b912d2c338b4c7cd0.png b/mindmap/ltximg/org-ltximg_4ab160140f69a8968023558b912d2c338b4c7cd0.png new file mode 100644 index 0000000000000000000000000000000000000000..052ff09e38fd1cce0944fb5097e8f277024b1856 GIT binary patch literal 1107 zcmeAS@N?(olHy`uVBq!ia0y~yV3^9lz~IKh%)r24u6Ft_0|SFWfKQ04oSfd-YhUt< zJHw;$9h^e8?!Bq0Y1P)VWb({SDe1M<4KwB~+2`Y*ylUfFQ!|f)r=IWmWAKE5fq}EY zBeIx*f$se+HQX=Q9x`gUP*T-3qYNqaIDc63%~R2evF zh6K#H`R2?ywcVa(Uzf~ve*XR6`@iWoW}bW(!0`R;k3ZMd=f2C`*7ss=i0?VG$5CH0 zofll$z0FcW>Y)Ae2}RoM(Fxtpu007@|Lw5SKkw$&MFjz;EPS2>t&45Q-yK_JcKZK& z(FtaMgbe-Xly8`{b&lJ#YbsS$hP_H#5>~IUE@UzN_T={Kci9}d#;^AL;t70aC7vF# zD*Pg!v8<0mj@!QAIq!?KINuA*mtCMY(WqOr(RZsz?}9Q#-KQ-FOxXh2#eDi%%>wqx z>WRIbnmI*GsP5SG=aRM@U93J^-#TaP?p^n7e`1#NwnyyioiiG5p1D`N;xNaQW&1pX z^_^og*6vWcxjC=n->*k&7Aq~@_9&*wJ6bDFH_NiotaRD0dpBz&6JGx-Qbe?BBqpqB?4-I~ItAi&;nF;F9>eOK9sSM7^0m{& ze_nFp>SwX*uXb!&lF;G1Rxql?;?838T(15Hxh7GoUDwJfYgq{tz2;Ec=_dK0!R7h) z^GOqqt$*SuXZy(}*w|0ID|)(G#u5IYEc?)JwkpqlJFT;c;y;p@C2{@K?Hp|#_CuBH zbN8|?%6AZ%lxbLWdKz<~$i=1Wc70@i`1{ga2aa%Cft$wPrk(x%=3nU5j_zw4k68D= z{&-GmyVGLs-Es++Kk%<>usl#ZmiDa$dHz4zIn1<>`Ome zckK698rv&^7F_$hf=eQrrPLw6!h$u(Th!U0+kf{lffEs{9)F(^K9%Wnn!~)ndl!tg zo&~o)dhlM~Gxu2$JAUV0mFENpZB&UheXBiPZOuOWmw)#; V3YkcUF)%PNc)I$ztaD0e0sz#6`u+d_ literal 0 HcmV?d00001 diff --git a/mindmap/ltximg/org-ltximg_4f2c36266ac2b7aaff5b9ae5d5ce9b238f8d733d.png b/mindmap/ltximg/org-ltximg_4f2c36266ac2b7aaff5b9ae5d5ce9b238f8d733d.png new file mode 100644 index 0000000000000000000000000000000000000000..17b29e69003d371e6f9cb22945a4dec961ab0fdd GIT binary patch literal 1266 zcmeAS@N?(olHy`uVBq!ia0y~yU|7z;z+l3{%)r1Pd&<;^fq}swz$e62PEPOawJ-U_ zo#9dW4o)Fk_ukahv})^FGI{2vl=Rx_h8gpg?DO$YUbXS8shP*YQ_uJOF?hnjz`$AH z5n0T@z;^_M8K-LVNi#68WO%wbhD2~K4fD;Bb``0+mvc?}|C+s-o(rd3VJlRK5%T+T zAeo=*KUkk;Xp`mbburp{*}vf$$Hcs9hM&Qk^dwK_ zM6H)?Uj6;!!mpPZ_OEwaq$9cXYS5lPPG(uG47ZYJ&%Um-Vct_?rC)`wqg_KB4%bQ< zd)-}s(5cVze5bU0k^4m-)@{ym$9wA(<#><2(^~3%{AB%MSyxy2CszfwuIpu9e{V)$ z?w)g!bBzQ&rzmaa-F&z4mubDi)%iC*>OIOnl)T^DSVc?u#E&U`H~o`;2>cNElzR7I zvb;c}ODfCNj!VLke^o@XE%_hRc$BJWDaXp*Y01)CwBdr!lGFurnTo$NHXQY{mW~N= z{q8*P&CEB`nh%;ztZ-|RYgAmzcC44-OzrM>A0*XQDLs}82z&m!FF0PL;QjL&mz+6! zpA^`iyYQI%TD05`nR&J0DbK898&1pJb12*KX0_==`M2AWFCWYHkN+N-b62=~wsqY) z&JT?bBvuzhADFnVu;6fDi_*HKhm3ZT3hKw zL*b+^%*whEqUH@9QzO-9t~FXbahB;C%bqEVJ=Go?$lh`Mrr+lBdCN@a@KYX-+yCTG zcv^k!(*~tx>8`~J`b_<5Mq3tEIPG5ZChdq1EAKvyr~+@Bk1YDD49>GY`DCToc3bd# zrpl?0DQfETFRtBiNN97uQHy(bS!2`2Z5w{>RrY-K`g&KysV^7zoDw*Y)4F@gGu9I; zFE7%%|LiF1zRgQ6e{_2>^K|Xx{S1FDPq(@*a{Bjb^N*?ge2b>mUDVy0+g0=Qv3rYs zu;!2T?CcW?FX(qoIsQAtJ8H7g(SUOquZ4I&-hAsA=)14@q`AHLiCqf8>pcw4%+KWQ z+V#*t?fhPyw4UAVK_6Ccw$sSkTUgO3dU4J>*>jC+j=TJSP<~cW_h-n$hyM7Y@=NK@k)Tbg-7jCx*|&Xrc|bn%AFe-4r>5D= zjat)nSEF`feO-umpRYgr%oUN3Z?BB{RN}R9)m(-LNetSeZ+72}_^0uq@9z|TdzS)9 g@ikFJ^B??Q#{Gg(;&b&q1_lNOPgg&ebxsLQ01d8NkpKVy literal 0 HcmV?d00001 diff --git a/mindmap/ltximg/org-ltximg_5174c420279804a17700d026fb6c32c82100efef.png b/mindmap/ltximg/org-ltximg_5174c420279804a17700d026fb6c32c82100efef.png new file mode 100644 index 0000000000000000000000000000000000000000..7cdb4fc071ffa32c067202d8c5c3f1831213ef1e GIT binary patch literal 745 zcmeAS@N?(olHy`uVBq!ia0y~yUFN9DWS*eJ)qz`$AH z5n0T@z;^_M8K-LVNi#4o#e2FqhIsH^4Ykd`>>yG1>7mNG_Rhd)t}P*wl3JpgqS9PR z4Htc;CLHKk*t7Bw%a$TBmv*m{M_zdtgmtN_M4XX#=wNKrigZhQA;P82UH<)EHDBWAyCqtg_a<4`Fl#NFy6VK0>lZm{ zj`>QjSUYiM$P+WO54pz~zoo6n1F*?wsHtH&=F_7rM- zzvqyg5hM2OBtPSlbH0WjTg49lXsGz9^e~%oiI?K3z6(honwB%Y-*$4bhUQ_%t?p*> z?cbc+lheEV8C<72DT=I<$Xk5vntRUY*iRa(L~ORI=k)6>yt4lGfqC}wpRDUeaLm79dPUZfvYN!Mg%{nQo@l*j%AO;-rotp>YVL&9)_bOFM6EWFzs zY&phvqfAHZPP%yO-G8o@*V4sZ<9^Fzuh?4Lq7hV3)#+V7n7XlXR>uV+ilAHTcN|2k)>?fG{r{j%F0 z&p)8-9qy+Vr<-#tHYD!AiJld15fRtIH&%br3-A-m3jVfrbHQ1Ym;5%`>NWb6KW=7z z-Fn*3W$x7uU8S=!*;CH1cy50oEC1r2!2Q3@hriHgacF51RR12%z`(%Z>FVdQ&MBb@ E06P9w#sB~S literal 0 HcmV?d00001 diff --git a/mindmap/ltximg/org-ltximg_5c5a4687f63d042e30235c00b107e8a90b39cbe9.png b/mindmap/ltximg/org-ltximg_5c5a4687f63d042e30235c00b107e8a90b39cbe9.png new file mode 100644 index 0000000000000000000000000000000000000000..537d501863ec8f34784a5ff94ba0094ffcd20be3 GIT binary patch literal 633 zcmeAS@N?(olHy`uVBq!ia0y~yU~pz&U@&1}W?*1YK0L#cfq}swz$e62PEPOawJ#~@ zwW~IsJ$UN5shNkSrq$NHH|H(c=in4l-7q7+xYNf!xvgi(LmL3Yj#dxyY}`XA;_dp2qJw#D0@ z>^=Yc&faHwwg;q@H*cGMLb=xYT&2}{^-DKiOiq$J#`eQU%Kg^T8SM`X?Is_)DIK%V zTiZ0^PnPYib*YyWChrTKwdYFA6}QKKO?Sn z_qQFpB-|@%ekJq5$z!kiGFYw5ejR%yRro5vCgV=qs+r5!X4NJ&+`L~hH6y+D>95j$ z(deL3(bWw#Gc{Xh3EfG#>Uv{kXk-HK&!7coIlo2lX_+WL`L*n>_Y|evJ?3i?0}cO_ z-&&=l)t#Ep*`?)k(ddm$^~VQp^7|I}H`zNFADr@Z`{he@nhRx0LavB}T`Jg_dhNgz z+h683mtQO8rOVcCFFB_zx-28rCQ&wG(d)=&FWbGntuuebvU58`OAHh1; zWzO=u<5X=vX$A&{ZJsWUArg|w2?+sWB4vhUsSQl7tZZ#ZxHOIzGBGnxH<_Y* z4nJ@ErkR#;MwT(hLj?@t!V@Asn*F2@K4s97hj4n04U50VNJ5RsqFr94kbgGifkS zU6t`*l>q}+p_Rw9LU{%w3keo|3p)lQy^S7*ADA-P*wh3KjvhFm&X8(g*I;C)Tdv literal 0 HcmV?d00001 diff --git a/mindmap/ltximg/org-ltximg_6a5aca4b80a05e84cf3030f4a562c36fd763b017.png b/mindmap/ltximg/org-ltximg_6a5aca4b80a05e84cf3030f4a562c36fd763b017.png new file mode 100644 index 0000000000000000000000000000000000000000..ed71d9844e5082760665714d55817b878e88e5a8 GIT binary patch literal 1861 zcmeAS@N?(olHy`uVBq!ia0y~yU=(6tU~pk!W?*30zjL`C0|SFWfKQ04oSfd-YhUt< zJHw;$9h^e8?!Bq0Y1P)VWb({SDe1M<4KwB~+2`Y*ylUfFQ!|f)r=IWmWAKE5fq}EY zBeIx*f$sjuOPG-RS)rRVJNJ6)vx5>( zl`?~yHLq>%`V`_nozZeh52GlT&g5;kmgV1mbjo|>YU#bMaZj!sky-x5d5XT|!OU;s zHrqnZ1};@+SZCoi|Cs0Jq=IENhm&Vtku~jC&)&WGOQwy^UCB9~#x~o8*DZS}Qmh*O zwtYcQ%7317#%Z6-mhR0uw=i+VQR)2XX<^+#Cbn*w7enRMFRfVp&H03=OXR=L62-xN ztJbJr^6$Gfy)fQ+f?FK>r5?@?hgjad7wwpOv3%LId78_kR9@M<{B`Y>s-sq>sLZdm zjIZw9?Ck!|m?7q{YSTZDbyF7xmO5sX1YZ_8l5$OL%`V1UB1cZHjK07)DPYSMH#yaY zwPG)SU+r4t^7GpA1x$aKCg?4Yw`AXcN}1!NiP!22iYq3cnsan_m|8K#%WO3&sdEC>KOJ%=bx3~ea zo_L*Mut-njSi2{{sdMYvz6-TA)7x#i@(WUO*D9Av78X8Rl__g(@-#nb+3TirotBqN zFRQNO{aC{mD7aKo`MUiI&&3mB{xCm@F39cs@x=SaTUDX#)mpwxR^duSjV=9`ZCY#F0EmeA(Q>gBIsru()tNF1{@CUw((- z>FG=XH>XaWzokFzq+I5*hpHvtK1doa4eWj@U|bNJw?jzq(wa}EuVvZvC3942v%apg zY!KF4V9M~HWlGwLjGgBcTQteEmdxdil03*E~&K4uC?B%`_xD7 z)*)>T|Kh4TLD9~VHHz~EgJuUr!*u6olR8{} zn=RC1FIm6b=+ZU&o%^1<-|0KuVNtV;ed$Gw?^)?DR9A-GPG%R*RBgB)UtKJ6Ma?ep zMdm!UKB+Q2kiU+#=uDd`^nH!c3G;+#Mz#L?)isy@syxtoX;ag-+@$oA$B}K*DmIp_ zdEjwcR2A^a$@=cJ7-hH^F}L6&i?qx zbL++8)!wE{BVIS{60mMvBZcj=GuoGD%YAOnov)r4bFj{xoU_qIscBXQ-CHy+`)crRnczv|`!E;Mu z>B`&3Z^Ugpxkzqpj`;glp{9*mD_&0#TJde~2|t!t5t;dp#}&MU_jC7dznQT#M)cC^ zAkhgQ?o3!V)#LqhV~)8>71PCpKfTmryg7Ngw%rV)n9Mqoo;x-2wV34J8aBn* zmjqTX&pa%*b^9lVC4Y}he_Hn;3dFo;yBpY0Q7T ze2!?wM~*um*WQr)tM$g-!frE@aAQQr?*l8NyK|?QANYPW=}PWRPX(E+(=MEmzAE&| zx!e7h*7a<`OTD2=7Vf3CY5A=SAI)00XWC1XL|2X_IkrvpD%Uk^GKyuQTe{ZCFRE+EbP~Uq#w-jTUA>+d5@R2@=mtO{#v$)KFtr9voCS{-7+bv zWj*7&#w%-gFs}E0GT%LGnc0TO3r_JeGY%O>D&6#PFi^FLcx$Zm1hH9zNi6^58w4 jrpHy4+YdIT4RyWL8wejr1Q_oG!JmxLg=i{HeKq8orfq{Xuz$3Dl zfr0M`2s2LA=96Y%V3^|R;usBM$1O_EGKlYPG@0e@2 zcpQ!#IH*u@@FSx?6SII}Owz=p2dN2+zZh4vHhQwSI5Ey==wV$VDX&myr=?IR7U%Hj hh{8t6CIK0S|B>RcZ!c~A%)r3F;OXk;vd$@?2>|OhTS))_ literal 0 HcmV?d00001 diff --git a/mindmap/ltximg/org-ltximg_6c09ed53af006ef54cc02dad41f22d822067c6aa.png b/mindmap/ltximg/org-ltximg_6c09ed53af006ef54cc02dad41f22d822067c6aa.png new file mode 100644 index 0000000000000000000000000000000000000000..8800efc81aeee1e4884de24d8e5b500c3beb944d GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0y~yU=U(pV31&8W?*1ot=_=Iz`$S-;1l91C#QGz+L!#| z&hV&w2d9v&dv9uLTDA2onLKk-N_uT|!;DoM&mKJW+|cj@g83L27&r?& zB8wRq_>O=u<5X=vX$A&{I!_nJ5DwYoga(FGjk56WU65jnAO<$k+J7%Amg#93dUnyjfN6U3v?Lrw1ga@PMa=c QU|?YIboFyt=akR{073p&`~Uy| literal 0 HcmV?d00001 diff --git a/mindmap/ltximg/org-ltximg_7407c8d076054729da4a49c8729c0d9031f8ce89.png b/mindmap/ltximg/org-ltximg_7407c8d076054729da4a49c8729c0d9031f8ce89.png new file mode 100644 index 0000000000000000000000000000000000000000..c9cf17fde97d844978ff7fb797959e23466ea774 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0y~yVBle3VBlt9W?*308CRIYz`$S-;1l91C#QGz+LyMT zC6i}vs&1GO9+jVxUhCi#qN!=MYUA01r=FXddCXg~FTc3c$3J=N-kTTZCxY~H7I;J! zGcfQS0b$0e+I-Rs3=EE*E{-7_vdIYnW(k3O2?^Q)mmkC&IB-T`$HET`hvUiw+49)f z*y0Km4jwq5%&<&?zhPy&_<<>p*$lpN`xyOU4P;oF!8J>{=Xg5<0|SGntDnm{r-UW| DQH4X` literal 0 HcmV?d00001 diff --git a/mindmap/ltximg/org-ltximg_80d9ef0ee20b89d40d13e7de774f5d7f9ef8d73c.png b/mindmap/ltximg/org-ltximg_80d9ef0ee20b89d40d13e7de774f5d7f9ef8d73c.png new file mode 100644 index 0000000000000000000000000000000000000000..5f34bada19bb5984033e5fe7ff2cb42fa721a9ae GIT binary patch literal 3203 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 IbxsLQ0B7cPXaE2J literal 0 HcmV?d00001 diff --git a/mindmap/ltximg/org-ltximg_aead022d61bb8e76d2cb86af41adaf448cd32307.png b/mindmap/ltximg/org-ltximg_aead022d61bb8e76d2cb86af41adaf448cd32307.png new file mode 100644 index 0000000000000000000000000000000000000000..2ef13a65b3273f21b65d8ebdb47436953a8eb61d GIT binary patch literal 578 zcmeAS@N?(olHy`uVBq!ia0y~yU@&K3U@&1}W?*2rleqUb0|SFWfKQ04oSfd-YhO~* zYgcVNd+^kAQ!@`uO{=YYZ_Zn?&%r6Ax?x6sai@=ea$C=m$ul>FN9DWS*eJ)qz`$AH z5n0T@z;^_M8K-LVNi#4o?(lSR46zX0I%Ti-VF!t0^N*;R`9=pHT@||U!4n0G9~<3X zJV=w7!*cS$gB1&ub}UI|UnuEvN2zJ{1wSRF7tdBS%Ueuo$Y6Cny8i%oXwliPZ=X39 zo&Wvko%Z)Qz8|{E#@FVHWS9DWaY{Fv(sZe)NmS}rzzSATa~5rrq{j=zrd0QSEiS0b##e)0Wu`Fw4@)Xo zY#77jDwkQ-h+M4Z7i{L9>Us0|p|qLXKHh!vr+Uh-10U5*Pp>dZ^AET%y~=c2hfjBs zhUm8II$w1ojxnrC%?fxXe%s)}O!i65xm9Xaw-5MjmR)1A;G5NK_1V2QtN2+(*>`;8 zoTb6|ImbI{nuT=mqPohNwd+hSY>GczvN@p3k&P|jv+&mS%a)nTO}o!`zUtqmvMX|<;B*xr00M6yLLa<+}=20eSrbE{s& zma^(F$W~f5OgbEw$oX$;@PVx*%`>M@onWx_h#dP0^JUf>Dpsr$<&qT6;)^|aG2*%8 mrGw`zJn|goCMV2pw=cdN&{|OMwSa+vfx*+&&t;ucLK6T#NC0X8 literal 0 HcmV?d00001 diff --git a/mindmap/ltximg/org-ltximg_c679d590e686c334d991c27a80c7e3491110fc36.png b/mindmap/ltximg/org-ltximg_c679d590e686c334d991c27a80c7e3491110fc36.png new file mode 100644 index 0000000000000000000000000000000000000000..4850f15327cca1f97f9bfa153adac78a2f07c532 GIT binary patch literal 526 zcmeAS@N?(olHy`uVBq!ia0y~yU@&B0U@&1}W?*2rSbug70|SFWfKQ04oSfd-YhO~* zYgcVNd+^kAQ!@`uO{=YYZ_Zn?&%r6Ax?x6sai@=ea$C=m$ul>FN9DWS*eJ)qz`$AH z5n0T@z;^_M8K-LVNi#4ows^WYhFA#hoxI!oaDd3M{dQ*$UvmoxSiSavPS?30kt>E5 z90OX!+M9y8=hhVN7IADzDV}6u!FBE8%75&0Swx-0k9yvT-BW4OfBTNFO+o&-^1A2q zCj1su*k{G)ccnrn^VkH1Ns^rYp`ad64KFD585qRs6#y=LuQ+%=F}% z7!IYl%{5=}-N4C-;p8RVpaWbAhV$3VkDU9FX+omMahpXh8jPH~nl7#i;hgY>IdoUk zMpi}jEJNlUfz72Imp!g5^;*>arHaGhobv81+=aqVm7HIB#7iCcdiOU&46o2P&3QuG zp1j($>x81bgm%$|_-SYNrPR6e_GCXk|K_SyZKTF3zcq7a$@9Fq*uBKfP2faunQfA= zMEc)p5+6Sod@GT^wy$W;-S2;8|5{zoxwGZF*vG1Rg{QfNIq$h$``0kup2wj&zrk2N zr1WS^$i-DB@6^YN;hbPo;>#E(o i^k?{+2-A{h;t|t)V_FU{>cYVJ=fH<3XjUqFYcT?bCZKpNJ@I`ye0cg%{+=HMzAt4FmM)l zL>4nJ@ErkR#;MwT(hLj?dp%toLnI`V6A}W%M9K`yQX3duS=ri-a7mmmWMXEXZqlQE z*aRvITv8NU@H$#E4xEV5%Y4136I)uO!?R7&UNCkD5EDM<9eP655!nEOG?ZV zZQx0pP^4gy!lh*2q{H5r$IsTL+j_`OK#utggTi+~=4QnZ5sy$~gN7P5)@(&Hhsrr# dx8x-lbmOI$_w1-MU|?Wi@O1TaS?83{1OQZ^ZcP9H literal 0 HcmV?d00001 diff --git a/mindmap/ltximg/org-ltximg_d08ee3a422196ae174ba821911e7bb85d48c3911.png b/mindmap/ltximg/org-ltximg_d08ee3a422196ae174ba821911e7bb85d48c3911.png new file mode 100644 index 0000000000000000000000000000000000000000..05303b552add10ef6233a3bfb148f8f40d287410 GIT binary patch literal 511 zcmeAS@N?(olHy`uVBq!ia0y~yV9;k^U{K^>W?*2b`^@x?fq}s?z$e62PEPOawJ-U_ zo#9dW4o)Fk_ukahv})^FGI{2vl=Rx_h8gpg?DO$YUbXS8shP*YQ_rW(*>>#wo3&dm ztoQm~&%nUIS>O>_%)r2R1cVuEA3i?AYt}O7cEe|vH{D+TDyq0HescD)#x)zl?i=s!e}A;y>lFXV{3S)Pezudn zS}QEPSVMQ`1e|JvYxr7N`Fof4n9$wOORNBREAg_|vY2U9rhZ$tiupy`_Q@MIUc0$Yu-CjsE$-T@jQ^~e+gC2K zotI~QNmuQf>8r!uTWtbAn0K6)t>`Mv3ZH&!txWLw-vSq|F&=V~D`HZq44C1U&wTgT z;SDz`Spy^+O~h@PS;TThvyoT|M4&W#Xf`S TMx-DE0|SGntDnm{r-UW|BIe~D literal 0 HcmV?d00001 diff --git a/mindmap/ltximg/org-ltximg_e8d514a50c0b908f35bf6e07630b4981e688ecca.png b/mindmap/ltximg/org-ltximg_e8d514a50c0b908f35bf6e07630b4981e688ecca.png new file mode 100644 index 0000000000000000000000000000000000000000..663824fa8e9722b175c8b489a6da397af14b57d7 GIT binary patch literal 367 zcmeAS@N?(olHy`uVBq!ia0y~yU{GgZU=U<>)tL50>8#eIAjj$JwW|eVii~FH#>d~Q(6M=0 z&Mj@-wW{oWc80jn`n-p6pBv|gEBZ)h7d0O2&*)sa#i#R-N4MNfuh*RpPiI}Q5bH_# z#lM7gIhVfTd<3#(mkF%V)u3B?jKNA%GGS~R0=>?q!{BxKz We}FtKVDNPHb6Mw<&;$UTYLpKE literal 0 HcmV?d00001 diff --git a/mindmap/ltximg/org-ltximg_f0c5b7df2856d6dd028ec93dc57e3b6f9e2884fa.png b/mindmap/ltximg/org-ltximg_f0c5b7df2856d6dd028ec93dc57e3b6f9e2884fa.png new file mode 100644 index 0000000000000000000000000000000000000000..802539f50f99e906ca364f48b75d7bd51bca4774 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0y~yVBlt8V322FW?*1Ad{k=&0|SFWfKQ04oSfd-YhO&w zJo1Y>x9+{!*0W^t%uNSRJ+E$lE}2d9u#8_$ME<)@_AYHC{f_$P;|n0YcVFmM)l zL>4nJ@ErkR#;MwT(hLj?L7py-Asn*F2?<7t42=&;431v#Q@hG>O+3t^l<^1yizWvX z6Hfq_qMu5)W|aD(#>U3xv(4cRjSpGBv;5cj@g83L27&r?& zB8wRq_>O=u<5X=vX$A(y5KkA!5DUSnlQ()DP7rDJ_gbVjDQmR?*VT?4-vuWfjJ4`$ zc9yv#>#~c3QQV!~QJ~%Grx0JM;GHJ_3%}U*HSS#b^Z)JH|NE;fCRD#Gk3OZyT6cZk z*CkiCEAjCK&HM32?qkZVyL>P2v+b_)vw^K$!33VPmG*!{^?ck=KTJ`I$yzCvrV<+Q;L(#o(BJVfgrE$ zGcQF=_c!V+m9V>`+afgGvS*TD(GdmiOtvl8Sg#bCUn@5BP2ZolHYV#@+}z!d5>GYH zFfCSNdZ`h8mF2=4?MuIZ3We{Qb)s|Q@;~ft;g7Ulbh38$%nf;ctNKB&c1XRE*@}#} jzF!t`U7g=m%lvt-?esN&Z4nJ@ErkR#;MwT(hLj?d7dtgAsn*F2?1q12@FizoCHoDc)+M;x%7a@cAgoJ1Q>#K z*b=fHv9|5amyj^4doVZZ;DHM>3Z`Un9=?N!x9A#kmzEg~2`4j#-3=9kmp00i_>zopr03H%o AssI20 literal 0 HcmV?d00001 -- 2.50.1