From b7a0a946557526563ce094c8ae815ebfde89a462 Mon Sep 17 00:00:00 2001
From: Matei Adriel <rafaeladriel11@gmail.com>
Date: Thu, 18 May 2023 01:56:19 +0200
Subject: [PATCH] Too many things (should have commited more often)

---
 devshells/default.nix                         |   1 +
 devshells/typst.nix                           |   8 ++
 dotfiles/neovim/README.md                     |   1 +
 dotfiles/neovim/lazy-lock.json                |   1 +
 dotfiles/neovim/lua/my/plugins/init.lua       |  10 ++-
 dotfiles/neovim/lua/my/plugins/lspconfig.lua  |   5 +-
 dotfiles/neovim/lua/my/plugins/rust-tools.lua |  20 +++--
 flake.lock                                    |  12 +--
 flake.nix                                     |   2 +-
 .../desktop/common/firefox/default.nix        |  51 +++++++----
 .../common/firefox/icons/monkeytype.png       | Bin 0 -> 23385 bytes
 .../desktop/common/wezterm/wezterm.lua        |   5 ++
 home/adrielus/features/neovim/default.nix     |  13 +--
 home/adrielus/tethys.nix                      |   9 +-
 hosts/nixos/common/optional/xdg-portal.nix    |   2 +
 modules/home-manager/firefox/default.nix      |  83 +++++++++++-------
 16 files changed, 143 insertions(+), 80 deletions(-)
 create mode 100644 devshells/typst.nix
 create mode 100644 home/adrielus/features/desktop/common/firefox/icons/monkeytype.png

diff --git a/devshells/default.nix b/devshells/default.nix
index 9e9a8f4..9b0b4f1 100644
--- a/devshells/default.nix
+++ b/devshells/default.nix
@@ -1,5 +1,6 @@
 args: {
   visonum = import ./visonum.nix args;
   rwtw = import ./rwtw.nix args;
+  typst = import ./typst.nix args;
 }
 
diff --git a/devshells/typst.nix b/devshells/typst.nix
new file mode 100644
index 0000000..04002bd
--- /dev/null
+++ b/devshells/typst.nix
@@ -0,0 +1,8 @@
+# Shell for using a pinned version of typst
+{ pkgs, upkgs, inputs, ... }:
+pkgs.mkShell {
+  nativeBuildInputs = [
+    # REASON: not on nixpkgs-stable
+    upkgs.typst
+  ];
+}
diff --git a/dotfiles/neovim/README.md b/dotfiles/neovim/README.md
index 6a3a324..3f42ea4 100644
--- a/dotfiles/neovim/README.md
+++ b/dotfiles/neovim/README.md
@@ -217,6 +217,7 @@ The following keybinds are available only when running inside firenvim:
 | \<leader\>h           | Add file to harpoon                 | harpoon              |
 | C-a                   | Harpoon quick menu                  | harpoon              |
 | C-s q/w/e/r/a/s/d/f/z | Open harpoon file with index 0-9    | harpoon              |
+| <leader>lc            | Open [l]ocal [c]argo.toml           | rust-tools           |
 
 ### Undocumented
 
diff --git a/dotfiles/neovim/lazy-lock.json b/dotfiles/neovim/lazy-lock.json
index d4e1352..1d24ef2 100644
--- a/dotfiles/neovim/lazy-lock.json
+++ b/dotfiles/neovim/lazy-lock.json
@@ -64,6 +64,7 @@
   "telescope-file-browser.nvim": { "branch": "master", "commit": "e0fcb12702ad0d2873544a31730f9aaef04fd032" },
   "telescope-fzf-native.nvim": { "branch": "main", "commit": "580b6c48651cabb63455e97d7e131ed557b8c7e2" },
   "telescope.nvim": { "branch": "master", "commit": "e960efa60e97df58e089b00270f09d60f27202c8" },
+  "typst.vim": { "branch": "main", "commit": "a9bb264d29331c52ef462e42e0501e3411bc3efb" },
   "undotree": { "branch": "master", "commit": "485f01efde4e22cb1ce547b9e8c9238f36566f21" },
   "venn.nvim": { "branch": "main", "commit": "c114563960b8fb1197695d42798d1f3e7190b798" },
   "vim-abolish": { "branch": "master", "commit": "cb3dcb220262777082f63972298d57ef9e9455ec" },
diff --git a/dotfiles/neovim/lua/my/plugins/init.lua b/dotfiles/neovim/lua/my/plugins/init.lua
index 565bc2d..4cdaa41 100644
--- a/dotfiles/neovim/lua/my/plugins/init.lua
+++ b/dotfiles/neovim/lua/my/plugins/init.lua
@@ -53,6 +53,12 @@ return {
     ft = { "yml", "yaml" },
     cond = env.vscode.not_active(),
   },
+
+  {
+    "kaarmu/typst.vim",
+    ft = { "typst" },
+    cond = env.vscode.not_active(),
+  },
   --}}}
 
   {
@@ -106,8 +112,8 @@ return {
     "christoomey/vim-tmux-navigator",
     keys = { "<C-h>", "<C-j>", "<C-k>", "<C-l>" },
     cond = env.vscode.not_active()
-      and env.neovide.not_active()
-      and env.firenvim.not_active(),
+        and env.neovide.not_active()
+        and env.firenvim.not_active(),
   },
 
   {
diff --git a/dotfiles/neovim/lua/my/plugins/lspconfig.lua b/dotfiles/neovim/lua/my/plugins/lspconfig.lua
index 45ca17a..f1cafdb 100644
--- a/dotfiles/neovim/lua/my/plugins/lspconfig.lua
+++ b/dotfiles/neovim/lua/my/plugins/lspconfig.lua
@@ -172,6 +172,7 @@ local servers = {
   cssls = {},
   jsonls = {},
   dhall_lsp_server = {},
+  typst_lsp = {},
   -- pylsp = {},
   -- pyright = {},
 }
@@ -182,7 +183,7 @@ M.capabilities = function()
   local c = require("cmp_nvim_lsp").default_capabilities()
   -- Add folding capabilities
   c.textDocument.foldingRange =
-    { dynamicRegistration = false, lineFoldingOnly = true }
+  { dynamicRegistration = false, lineFoldingOnly = true }
   return c
 end
 -- }}}
@@ -218,7 +219,7 @@ function lspconfig.config()
 
     require("lspconfig")[lsp].setup({
       on_attach = details.on_attach,
-      settings = details.settings, -- Specific per-language settings
+      settings = details.settings,   -- Specific per-language settings
       flags = {
         debounce_text_changes = 150, -- This will be the default in neovim 0.7+
       },
diff --git a/dotfiles/neovim/lua/my/plugins/rust-tools.lua b/dotfiles/neovim/lua/my/plugins/rust-tools.lua
index d08be39..9b7597a 100644
--- a/dotfiles/neovim/lua/my/plugins/rust-tools.lua
+++ b/dotfiles/neovim/lua/my/plugins/rust-tools.lua
@@ -6,17 +6,19 @@ local M = {
   config = function()
     require("rust-tools").setup({
       server = {
-        on_attach = lspconfig.on_attach,
+        on_attach = function(client, bufnr)
+          K.nmap(
+            "<leader>lc",
+            "<cmd>RustOpenCargo<cr>",
+            "Open [c]argo.toml",
+            true,
+            true
+          )
+
+          lspconfig.on_attach(client, bufnr)
+        end,
       },
     })
-
-    K.nmap(
-      "<leader>lc",
-      "<cmd>RustOpenCargo<cr>",
-      "Open [c]argo.toml",
-      true,
-      true
-    )
   end,
 }
 
diff --git a/flake.lock b/flake.lock
index 3ea04c9..ee148fd 100644
--- a/flake.lock
+++ b/flake.lock
@@ -310,11 +310,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1682493015,
-        "narHash": "sha256-KiMOAe8u83QDF40Z25kWMkZbqr9U+mvjvEJy5Qvw0nw=",
+        "lastModified": 1684171562,
+        "narHash": "sha256-BMUWjVWAUdyMWKk0ATMC9H0Bv4qAV/TXwwPUvTiC5IQ=",
         "owner": "nixos",
         "repo": "nixpkgs",
-        "rev": "60c0f762658916a4a5b5a36b3e06486f8301daf4",
+        "rev": "55af203d468a6f5032a519cba4f41acf5a74b638",
         "type": "github"
       },
       "original": {
@@ -326,11 +326,11 @@
     },
     "nixpkgs-unstable": {
       "locked": {
-        "lastModified": 1681737997,
-        "narHash": "sha256-pHhjgsIkRMu80LmVe8QoKIZB6VZGRRxFmIvsC5S89k4=",
+        "lastModified": 1683408522,
+        "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=",
         "owner": "nixos",
         "repo": "nixpkgs",
-        "rev": "f00994e78cd39e6fc966f0c4103f908e63284780",
+        "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7",
         "type": "github"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index c97c20f..e25f110 100644
--- a/flake.nix
+++ b/flake.nix
@@ -42,7 +42,7 @@
     rosepine-base16.url = github:edunfelt/base16-rose-pine-scheme;
     rosepine-base16.flake = false;
 
-    # Impermanence 
+    # Impermanence
     impermanence.url = "github:nix-community/impermanence";
 
     # Slambda
diff --git a/home/adrielus/features/desktop/common/firefox/default.nix b/home/adrielus/features/desktop/common/firefox/default.nix
index 5286056..66e49d7 100644
--- a/home/adrielus/features/desktop/common/firefox/default.nix
+++ b/home/adrielus/features/desktop/common/firefox/default.nix
@@ -1,7 +1,29 @@
 { pkgs, inputs, ... }:
+let
+  # {{{ Global extensions
+  extensions = with inputs.firefox-addons.packages.${pkgs.system}; [
+    buster-captcha-solver
+    bypass-paywalls-clean
+    clearurls # removes ugly args from urls
+    don-t-fuck-with-paste # disallows certain websites from disabling pasting
+    gesturefy # mouse gestures
+    i-dont-care-about-cookies
+    localcdn # caches libraries locally
+    privacy-badger # blocks some trackers
+    privacy-pass # captcha stuff
+    skip-redirect # attempts to skip to the final reddirect for certain urls
+    terms-of-service-didnt-read
+    translate-web-pages
+    ublock-origin
+    unpaywall
+    user-agent-string-switcher
+  ];
+  # }}}
+in
 {
   programs.firefox = {
     enable = true;
+
     profiles.adrielus = {
       # {{{ High level user settings
       # Unique user id
@@ -20,30 +42,15 @@
       userContent = builtins.readFile ./userContent.css;
       # }}}
       # {{{ Extensions
-      extensions = with inputs.firefox-addons.packages.${pkgs.system}; [
-        buster-captcha-solver
-        bypass-paywalls-clean
-        clearurls # removes ugly args from urls
-        don-t-fuck-with-paste # disallows certain websites from disabling pasting
+      extensions = with inputs.firefox-addons.packages.${pkgs.system}; extensions ++ [
         firenvim # summon a nvim instance inside the browser
-        gesturefy # mouse gestures
-        i-dont-care-about-cookies
-        localcdn # caches libraries locally
         lovely-forks # displays forks on github
         octolinker # github import to link thingy
         octotree # github file tree
-        privacy-badger # blocks some trackers
-        privacy-pass # captcha stuff
         refined-github # a bunch of github modifications
         return-youtube-dislikes
         steam-database # adds info from steamdb on storepages
         sponsorblock # skip youtube sponsors
-        skip-redirect # attempts to skip to the final reddirect for certain urls
-        terms-of-service-didnt-read
-        translate-web-pages
-        ublock-origin
-        unpaywall
-        user-agent-string-switcher
         vimium-c # vim keybinds
         youtube-shorts-block
       ];
@@ -156,7 +163,8 @@
     };
 
     # {{{ Standalone "apps" which actually run inside a browser.
-    apps = {
+    apps.extensions = extensions;
+    apps.app = {
       # {{{ Job stuff
       asana = {
         url = "https://app.asana.com/";
@@ -171,7 +179,6 @@
         displayName = "Clockodo";
         id = 2;
       };
-
       # }}}
 
       gitlab = {
@@ -187,6 +194,13 @@
         displayName = "Desmos";
         id = 4;
       };
+
+      monkey-type = {
+        url = "https://monkeytype.com/";
+        icon = ./icons/monkeytype.png;
+        displayName = "Monkeytype";
+        id = 5;
+      };
     };
     # }}}
   };
@@ -203,6 +217,7 @@
   # Tell apps firefox is the default browser using an env var.
   home.sessionVariables.BROWSER = "firefox";
   # }}}
+
   # {{{ Persistence
   home.persistence."/persist/home/adrielus".directories = [
     ".cache/mozilla/firefox" # Non important cache
diff --git a/home/adrielus/features/desktop/common/firefox/icons/monkeytype.png b/home/adrielus/features/desktop/common/firefox/icons/monkeytype.png
new file mode 100644
index 0000000000000000000000000000000000000000..dbe0c6bb11570d874aad3d4f6523a6d9e27f6be1
GIT binary patch
literal 23385
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
HP6<r_GQ(*&

literal 0
HcmV?d00001

diff --git a/home/adrielus/features/desktop/common/wezterm/wezterm.lua b/home/adrielus/features/desktop/common/wezterm/wezterm.lua
index 1d7cbd2..35158c9 100644
--- a/home/adrielus/features/desktop/common/wezterm/wezterm.lua
+++ b/home/adrielus/features/desktop/common/wezterm/wezterm.lua
@@ -57,6 +57,11 @@ config.adjust_window_size_when_changing_font_size = false -- Makes it work with
 config.automatically_reload_config = true
 config.font_size = font_size
 config.use_fancy_tab_bar = false
+config.disable_default_key_bindings = true
+-- config.enable_kitty_keyboard = true -- Let's apps recognise more distinct keys
+config.enable_csi_u_key_encoding = true -- For some reason I need this for all keybinds to work inside neovim.
+-- }}}
+-- {{{ Keybinds
 -- }}}
 
 -- and finally, return the configuration to wezterm
diff --git a/home/adrielus/features/neovim/default.nix b/home/adrielus/features/neovim/default.nix
index dfb4a99..405a5c0 100644
--- a/home/adrielus/features/neovim/default.nix
+++ b/home/adrielus/features/neovim/default.nix
@@ -14,10 +14,11 @@ let
     dhall-lsp-server # dhall
     tectonic # something related to latex (?)
     texlab # latex
-    nodePackages_latest.vscode-langservers-extracted # Web stuff
-    python310Packages.python-lsp-server # Python
-    pyright # Python
+    nodePackages_latest.vscode-langservers-extracted # web stuff
+    python310Packages.python-lsp-server # python
+    pyright # python
     rust-analyzer # rust
+    upkgs.typst-lsp # typst
 
     # Formatters
     luaformatter # Lua
@@ -29,6 +30,7 @@ let
     nodePackages_latest.purs-tidy # Purescript
     nodePackages_latest.prettier # Js & friends
     nodePackages_latest.prettier_d_slim # Js & friends
+    upkgs.typst-fmt # Typst
 
     # Linters
     ruff # Python linter
@@ -52,10 +54,11 @@ let
     # Preview
     zathura # Pdf reader
     xdotool # For zathura reverse search or whatever it's called
-    glow #Mmd preview in terminal
+    glow # Md preview in terminal
     pandoc # Md processing
-    libsForQt5.falkon # Aparently needed for md preview
+    libsForQt5.falkon # Needed for one of the md preview plugins I tried
 
+    # Latex setup
     texlive.combined.scheme-full # Latex stuff
     python38Packages.pygments # required for latex syntax highlighting
     sage
diff --git a/home/adrielus/tethys.nix b/home/adrielus/tethys.nix
index f6787c1..997e387 100644
--- a/home/adrielus/tethys.nix
+++ b/home/adrielus/tethys.nix
@@ -53,7 +53,10 @@
 
 
   # Temp stuff
-  xsession.initExtra = ''
-    command -v dbus-update-activation-environment >/dev/null 2>&1 && dbus-update-activation-environment --systemd XDG_SESSION_CLASS XDG_CONFIG_DIRS XDG_DATA_DIRS XDG_SESSION_DESKTOP XDG_CURRENT_DESKTOP XDG_SESSION_TYPE DCONF_PROFILE XDG_DESKTOP_PORTAL_DIR DISPLAY WAYLAND_DISPLAY SWAYSOCK XMODIFIERS XCURSOR_SIZE XCURSOR_THEME GDK_PIXBUF_MODULE_FILE GIO_EXTRA_MODULES GTK_IM_MODULE QT_PLUGIN_PATH QT_QPA_PLATFORMTHEME QT_STYLE_OVERRIDE QT_IM_MODULE NIXOS_OZONE_WL || systemctl --user import-environment XDG_SESSION_CLASS XDG_CONFIG_DIRS XDG_DATA_DIRS XDG_SESSION_DESKTOP XDG_CURRENT_DESKTOP XDG_SESSION_TYPE DCONF_PROFILE XDG_DESKTOP_PORTAL_DIR DISPLAY WAYLAND_DISPLAY SWAYSOCK XMODIFIERS XCURSOR_SIZE XCURSOR_THEME GDK_PIXBUF_MODULE_FILE GIO_EXTRA_MODULES GTK_IM_MODULE QT_PLUGIN_PATH QT_QPA_PLATFORMTHEME QT_STYLE_OVERRIDE QT_IM_MODULE NIXOS_OZONE_WL
-  '';
+  # systemd.servinces.dbus-update-activation-environment = {
+  #   script = lib.escapeShellArgs "${pkgs.dbu}/bin/dbus-update-activation-environment --systemd --all";
+  #   serviceConfig.Restart = "no";
+  #   serviceConfig.User = config.home.user;
+  # };
+  xsession.initExtra = "${pkgs.dbus}/bin/dbus-update-activation-environment --systemd --all";
 }
diff --git a/hosts/nixos/common/optional/xdg-portal.nix b/hosts/nixos/common/optional/xdg-portal.nix
index b51721d..a251f8e 100644
--- a/hosts/nixos/common/optional/xdg-portal.nix
+++ b/hosts/nixos/common/optional/xdg-portal.nix
@@ -7,4 +7,6 @@
 
   # HACK: copied from @lily on discord.
   systemd.user.services.xdg-desktop-portal.path = lib.mkAfter [ "/run/current-system/sw" ];
+
+  services.gnome.at-spi2-core.enable = true;
 }
diff --git a/modules/home-manager/firefox/default.nix b/modules/home-manager/firefox/default.nix
index c4c2567..9f04202 100644
--- a/modules/home-manager/firefox/default.nix
+++ b/modules/home-manager/firefox/default.nix
@@ -1,43 +1,58 @@
+# Allows installing web apps as desktop apps
 { lib, pkgs, config, ... }:
 let cfg = config.programs.firefox.apps;
 in
 {
-  options.programs.firefox.apps = lib.mkOption {
-    type = lib.types.attrsOf
-      (lib.types.submodule ({ name, ... }: {
-        options = {
-          name = lib.mkOption {
-            type = lib.types.str;
-            description = "The name of the app";
-            default = name;
-          };
+  options.programs.firefox.apps = {
+    extensions = lib.mkOption {
+      type = lib.types.listOf lib.types.package;
+      description = "Extensions to install for all apps";
+      default = [ ];
+    };
 
-          id = lib.mkOption {
-            type = lib.types.int;
-            description = "The id of the firefox profile for the app";
-            example = 3;
-          };
+    app = lib.mkOption {
+      type = lib.types.attrsOf
+        (lib.types.submodule ({ name, ... }: {
+          options = {
+            name = lib.mkOption {
+              type = lib.types.str;
+              description = "The name of the app";
+              default = name;
+            };
 
-          displayName = lib.mkOption {
-            type = lib.types.str;
-            description = "The name of the app in stuff like menus";
-            default = name;
-          };
+            id = lib.mkOption {
+              type = lib.types.int;
+              description = "The id of the firefox profile for the app";
+              example = 3;
+            };
 
-          url = lib.mkOption {
-            type = lib.types.str;
-            description = "The url the app should point to";
-            example = "https://example.com";
-          };
+            displayName = lib.mkOption {
+              type = lib.types.str;
+              description = "The name of the app in stuff like menus";
+              default = name;
+            };
 
-          icon = lib.mkOption {
-            type = lib.types.path;
-            description = "The icon to use for the app";
-          };
-        };
-      }));
+            url = lib.mkOption {
+              type = lib.types.str;
+              description = "The url the app should point to";
+              example = "https://example.com";
+            };
 
-    description = "Attr set of firefox web apps to install as desktop apps";
+            icon = lib.mkOption {
+              type = lib.types.path;
+              description = "The icon to use for the app";
+            };
+
+            extensions = lib.mkOption {
+              type = lib.types.listOf lib.types.package;
+              description = "Extensions to install for this app";
+              default = [ ];
+            };
+          };
+        }));
+
+      description = "Attr set of firefox web apps to install as desktop apps";
+    };
   };
 
   config =
@@ -52,7 +67,7 @@ in
         };
 
         userChrome = builtins.readFile ./theme.css;
-
+        extensions = cfg.extensions ++ app.extensions;
         isDefault = false;
         id = app.id;
       };
@@ -66,7 +81,7 @@ in
       };
     in
     {
-      programs.firefox.profiles = lib.mapAttrs (_: mkProfile) cfg;
-      xdg.desktopEntries = lib.mapAttrs (_: mkDesktopEntry) cfg;
+      programs.firefox.profiles = lib.mapAttrs (_: mkProfile) cfg.app;
+      xdg.desktopEntries = lib.mapAttrs (_: mkDesktopEntry) cfg.app;
     };
 }