]> Untitled Git - monorepo.git/commitdiff
publish nix config
authorPreston Pan <preston@nullring.xyz>
Fri, 1 Mar 2024 06:37:34 +0000 (22:37 -0800)
committerPreston Pan <preston@nullring.xyz>
Fri, 1 Mar 2024 06:37:34 +0000 (22:37 -0800)
32 files changed:
config/emacs.el
config/emacs.org
config/index.org
config/nix.org [new file with mode: 0644]
index.org
journal/20240228.org
journal/20240229.org [new file with mode: 0644]
journal/index.org
mindmap/ltximg/org-ltximg_2c06b35aab630959bdb930850ed2b803a1124b57.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_389d16d1c0cb3f56a133dfd060fc4ad85d7c3ae0.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_44c20eb942ca6f373204743a24fce5abceff7223.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_4ab160140f69a8968023558b912d2c338b4c7cd0.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_4f2c36266ac2b7aaff5b9ae5d5ce9b238f8d733d.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_5174c420279804a17700d026fb6c32c82100efef.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_5c5a4687f63d042e30235c00b107e8a90b39cbe9.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_5f9b13358bb709007aa2129a35f70dde825b753b.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_6a0388319972064fe056b06ed551f245440961fc.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_6a5aca4b80a05e84cf3030f4a562c36fd763b017.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_6ab048c4768ba5e8509586f342853a19047bdcd4.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_6c09ed53af006ef54cc02dad41f22d822067c6aa.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_7407c8d076054729da4a49c8729c0d9031f8ce89.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_80d9ef0ee20b89d40d13e7de774f5d7f9ef8d73c.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_9e6fde8e3ec2626d93a4fcbb6cbf89a2613e99d1.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_9ff707ca8d89138c4becf7755f9ea7b8054bd969.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_aead022d61bb8e76d2cb86af41adaf448cd32307.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_c679d590e686c334d991c27a80c7e3491110fc36.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_c9e142d501fc2c43537aafba0ad522d569bd8285.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_d08ee3a422196ae174ba821911e7bb85d48c3911.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_e8d514a50c0b908f35bf6e07630b4981e688ecca.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_f0c5b7df2856d6dd028ec93dc57e3b6f9e2884fa.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_f1afed2578a3bea425e0f880f2963f2415c6b87b.png [new file with mode: 0644]
mindmap/ltximg/org-ltximg_fc36bf1e417ddfdc48d8ed26372b518c90c12cb4.png [new file with mode: 0644]

index eb492ad8e6e05c53b8994071298466532ddb3f2a..3e3c1c2a69ef8de150d0a661882d854fe0633b47 100644 (file)
@@ -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))
 ;; (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)
 
     "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
   :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))
   (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))
index f72d2e31883874bbac6fb2cb27a887bebbdfffa7..ff6342e13e515e688c7c88495ac999f27bfb4a57 100644 (file)
@@ -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)
   (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
   (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
     '(
 )
 #+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
     (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
   )
 #+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
     (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
       "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
     (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
       '(
           (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
                                      :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")
          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))
   :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
index 036906f7703330ccb24215f8f7fd26ddf10a084d..2e63109615d3abd4cf52f09dc9b26d3f64590c8d 100644 (file)
@@ -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 (file)
index 0000000..5251748
--- /dev/null
@@ -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;
+            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={}&amp;go=Go&amp;ns0=1";
+        aw = "https://wiki.archlinux.org/?search={}";
+        nw = "https://nixos.wiki/index.php?search={}";
+        g = "https://www.google.com/search?hl=en&amp;q={}";
+        DEFAULT = "https://www.google.com/search?hl=en&amp;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
index 57d46653d70ebe68fdecc07e84f88961c08b00ff..59e30e6ed92e3f0967a0c4f53a773271738cb05e 100644 (file)
--- 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
index 10ee947e4066362f69d7496f0fd7236d746bfb6c..faa7394c95607fb369459204f019cd2152f65094 100644 (file)
@@ -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 (file)
index 0000000..a4cc59c
--- /dev/null
@@ -0,0 +1,15 @@
+#+TITLE: Daily Journal
+#+STARTUP: showeverything
+#+DESCRIPTION: My daily journal entry
+#+AUTHOR: Preston Pan
+#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../style.css" />
+#+html_head: <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+#+html_head: <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
+#+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!
index 0a978047098febd8fdfb668debc78fceca456314..a9db80e90884850ab75c2b855b25af6df0fd4372 100644 (file)
@@ -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 (file)
index 0000000..bc95130
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_2c06b35aab630959bdb930850ed2b803a1124b57.png differ
diff --git a/mindmap/ltximg/org-ltximg_389d16d1c0cb3f56a133dfd060fc4ad85d7c3ae0.png b/mindmap/ltximg/org-ltximg_389d16d1c0cb3f56a133dfd060fc4ad85d7c3ae0.png
new file mode 100644 (file)
index 0000000..7bf8dc9
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_389d16d1c0cb3f56a133dfd060fc4ad85d7c3ae0.png differ
diff --git a/mindmap/ltximg/org-ltximg_44c20eb942ca6f373204743a24fce5abceff7223.png b/mindmap/ltximg/org-ltximg_44c20eb942ca6f373204743a24fce5abceff7223.png
new file mode 100644 (file)
index 0000000..ef490ad
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_44c20eb942ca6f373204743a24fce5abceff7223.png differ
diff --git a/mindmap/ltximg/org-ltximg_4ab160140f69a8968023558b912d2c338b4c7cd0.png b/mindmap/ltximg/org-ltximg_4ab160140f69a8968023558b912d2c338b4c7cd0.png
new file mode 100644 (file)
index 0000000..052ff09
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_4ab160140f69a8968023558b912d2c338b4c7cd0.png differ
diff --git a/mindmap/ltximg/org-ltximg_4f2c36266ac2b7aaff5b9ae5d5ce9b238f8d733d.png b/mindmap/ltximg/org-ltximg_4f2c36266ac2b7aaff5b9ae5d5ce9b238f8d733d.png
new file mode 100644 (file)
index 0000000..17b29e6
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_4f2c36266ac2b7aaff5b9ae5d5ce9b238f8d733d.png differ
diff --git a/mindmap/ltximg/org-ltximg_5174c420279804a17700d026fb6c32c82100efef.png b/mindmap/ltximg/org-ltximg_5174c420279804a17700d026fb6c32c82100efef.png
new file mode 100644 (file)
index 0000000..7cdb4fc
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_5174c420279804a17700d026fb6c32c82100efef.png differ
diff --git a/mindmap/ltximg/org-ltximg_5c5a4687f63d042e30235c00b107e8a90b39cbe9.png b/mindmap/ltximg/org-ltximg_5c5a4687f63d042e30235c00b107e8a90b39cbe9.png
new file mode 100644 (file)
index 0000000..537d501
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_5c5a4687f63d042e30235c00b107e8a90b39cbe9.png differ
diff --git a/mindmap/ltximg/org-ltximg_5f9b13358bb709007aa2129a35f70dde825b753b.png b/mindmap/ltximg/org-ltximg_5f9b13358bb709007aa2129a35f70dde825b753b.png
new file mode 100644 (file)
index 0000000..45a6cbf
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_5f9b13358bb709007aa2129a35f70dde825b753b.png differ
diff --git a/mindmap/ltximg/org-ltximg_6a0388319972064fe056b06ed551f245440961fc.png b/mindmap/ltximg/org-ltximg_6a0388319972064fe056b06ed551f245440961fc.png
new file mode 100644 (file)
index 0000000..617bcf7
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_6a0388319972064fe056b06ed551f245440961fc.png differ
diff --git a/mindmap/ltximg/org-ltximg_6a5aca4b80a05e84cf3030f4a562c36fd763b017.png b/mindmap/ltximg/org-ltximg_6a5aca4b80a05e84cf3030f4a562c36fd763b017.png
new file mode 100644 (file)
index 0000000..ed71d98
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_6a5aca4b80a05e84cf3030f4a562c36fd763b017.png differ
diff --git a/mindmap/ltximg/org-ltximg_6ab048c4768ba5e8509586f342853a19047bdcd4.png b/mindmap/ltximg/org-ltximg_6ab048c4768ba5e8509586f342853a19047bdcd4.png
new file mode 100644 (file)
index 0000000..b9a366c
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_6ab048c4768ba5e8509586f342853a19047bdcd4.png differ
diff --git a/mindmap/ltximg/org-ltximg_6c09ed53af006ef54cc02dad41f22d822067c6aa.png b/mindmap/ltximg/org-ltximg_6c09ed53af006ef54cc02dad41f22d822067c6aa.png
new file mode 100644 (file)
index 0000000..8800efc
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_6c09ed53af006ef54cc02dad41f22d822067c6aa.png differ
diff --git a/mindmap/ltximg/org-ltximg_7407c8d076054729da4a49c8729c0d9031f8ce89.png b/mindmap/ltximg/org-ltximg_7407c8d076054729da4a49c8729c0d9031f8ce89.png
new file mode 100644 (file)
index 0000000..c9cf17f
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_7407c8d076054729da4a49c8729c0d9031f8ce89.png differ
diff --git a/mindmap/ltximg/org-ltximg_80d9ef0ee20b89d40d13e7de774f5d7f9ef8d73c.png b/mindmap/ltximg/org-ltximg_80d9ef0ee20b89d40d13e7de774f5d7f9ef8d73c.png
new file mode 100644 (file)
index 0000000..5f34bad
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_80d9ef0ee20b89d40d13e7de774f5d7f9ef8d73c.png differ
diff --git a/mindmap/ltximg/org-ltximg_9e6fde8e3ec2626d93a4fcbb6cbf89a2613e99d1.png b/mindmap/ltximg/org-ltximg_9e6fde8e3ec2626d93a4fcbb6cbf89a2613e99d1.png
new file mode 100644 (file)
index 0000000..32441e0
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_9e6fde8e3ec2626d93a4fcbb6cbf89a2613e99d1.png differ
diff --git a/mindmap/ltximg/org-ltximg_9ff707ca8d89138c4becf7755f9ea7b8054bd969.png b/mindmap/ltximg/org-ltximg_9ff707ca8d89138c4becf7755f9ea7b8054bd969.png
new file mode 100644 (file)
index 0000000..e52fe90
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_9ff707ca8d89138c4becf7755f9ea7b8054bd969.png differ
diff --git a/mindmap/ltximg/org-ltximg_aead022d61bb8e76d2cb86af41adaf448cd32307.png b/mindmap/ltximg/org-ltximg_aead022d61bb8e76d2cb86af41adaf448cd32307.png
new file mode 100644 (file)
index 0000000..2ef13a6
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_aead022d61bb8e76d2cb86af41adaf448cd32307.png differ
diff --git a/mindmap/ltximg/org-ltximg_c679d590e686c334d991c27a80c7e3491110fc36.png b/mindmap/ltximg/org-ltximg_c679d590e686c334d991c27a80c7e3491110fc36.png
new file mode 100644 (file)
index 0000000..4850f15
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_c679d590e686c334d991c27a80c7e3491110fc36.png differ
diff --git a/mindmap/ltximg/org-ltximg_c9e142d501fc2c43537aafba0ad522d569bd8285.png b/mindmap/ltximg/org-ltximg_c9e142d501fc2c43537aafba0ad522d569bd8285.png
new file mode 100644 (file)
index 0000000..12aad3d
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_c9e142d501fc2c43537aafba0ad522d569bd8285.png differ
diff --git a/mindmap/ltximg/org-ltximg_d08ee3a422196ae174ba821911e7bb85d48c3911.png b/mindmap/ltximg/org-ltximg_d08ee3a422196ae174ba821911e7bb85d48c3911.png
new file mode 100644 (file)
index 0000000..05303b5
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_d08ee3a422196ae174ba821911e7bb85d48c3911.png differ
diff --git a/mindmap/ltximg/org-ltximg_e8d514a50c0b908f35bf6e07630b4981e688ecca.png b/mindmap/ltximg/org-ltximg_e8d514a50c0b908f35bf6e07630b4981e688ecca.png
new file mode 100644 (file)
index 0000000..663824f
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_e8d514a50c0b908f35bf6e07630b4981e688ecca.png differ
diff --git a/mindmap/ltximg/org-ltximg_f0c5b7df2856d6dd028ec93dc57e3b6f9e2884fa.png b/mindmap/ltximg/org-ltximg_f0c5b7df2856d6dd028ec93dc57e3b6f9e2884fa.png
new file mode 100644 (file)
index 0000000..802539f
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_f0c5b7df2856d6dd028ec93dc57e3b6f9e2884fa.png differ
diff --git a/mindmap/ltximg/org-ltximg_f1afed2578a3bea425e0f880f2963f2415c6b87b.png b/mindmap/ltximg/org-ltximg_f1afed2578a3bea425e0f880f2963f2415c6b87b.png
new file mode 100644 (file)
index 0000000..77ee596
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_f1afed2578a3bea425e0f880f2963f2415c6b87b.png differ
diff --git a/mindmap/ltximg/org-ltximg_fc36bf1e417ddfdc48d8ed26372b518c90c12cb4.png b/mindmap/ltximg/org-ltximg_fc36bf1e417ddfdc48d8ed26372b518c90c12cb4.png
new file mode 100644 (file)
index 0000000..de2b1eb
Binary files /dev/null and b/mindmap/ltximg/org-ltximg_fc36bf1e417ddfdc48d8ed26372b518c90c12cb4.png differ