summary refs log tree commit diff stats
path: root/user
diff options
context:
space:
mode:
Diffstat (limited to 'user')
-rw-r--r--user/config.nix16
-rw-r--r--user/emacs/init.el76
-rw-r--r--user/mba.nix2
-rw-r--r--user/modules/tabnine.nix94
-rw-r--r--user/nanopi.nix1
-rw-r--r--user/prefect.nix2
-rw-r--r--user/settings/base.nix3
-rw-r--r--user/settings/darwin.nix4
-rw-r--r--user/settings/development/base.nix10
-rw-r--r--user/settings/development/golang.nix8
-rw-r--r--user/settings/development/javascript.nix4
-rw-r--r--user/settings/development/web.nix64
-rw-r--r--user/settings/emacs.nix1
-rw-r--r--user/settings/git.nix14
-rw-r--r--user/settings/nix.nix2
-rw-r--r--user/settings/nixos.nix4
-rw-r--r--user/settings/shell.nix1
-rw-r--r--user/settings/tabnine.nix124
-rw-r--r--user/settings/user-interface.nix4
19 files changed, 144 insertions, 290 deletions
diff --git a/user/config.nix b/user/config.nix
index c12a0bb1..6faa57cc 100644
--- a/user/config.nix
+++ b/user/config.nix
@@ -1,5 +1,15 @@
-{ pkgs }: {
-  allowUnfree = true;
-  allowUnfreePredicate = pkg: true;
+{ pkgs }:
+let
+  inherit (pkgs) lib;
+in
+{
+  allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
+    "beeper"
+    "discord"
+    "input-fonts"
+  ];
   input-fonts.acceptLicense = true;
+  permittedInsecurePackages = [
+    "electron-27.3.11" # for logseq 0.10.9
+  ];
 }
diff --git a/user/emacs/init.el b/user/emacs/init.el
index 6b30ac70..69c71d00 100644
--- a/user/emacs/init.el
+++ b/user/emacs/init.el
@@ -90,6 +90,10 @@
                                                    original-stimmung-themes-string))
                     (load-theme current-theme :noconfirm)))))))
 
+(global-set-key (kbd "<pinch>") 'ignore)
+(global-set-key (kbd "<C-wheel-up>") 'ignore)
+(global-set-key (kbd "<C-wheel-down>") 'ignore)
+
 (setq font-lock-maximum-decoration '((t . 1))
       jit-lock-stealth-time 1.25
       jit-lock-stealth-nice 0.5
@@ -578,29 +582,6 @@ _C-k_: prev  _u_pper              _=_: upper/lower       _s_mart resolve
             (setq kind-icon-default-face 'corfu-default)
             (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter)))
 
-(use-package tabnine-core
-  :config (progn
-            (setq tabnine-binaries-folder "~/.local/tabnine")
-            (with-demoted-errors "TabNine error: %s"
-              (when (tabnine--executable-path)
-                (global-tabnine-mode)))
-
-            (define-key tabnine-completion-map (kbd "TAB") #'tabnine-accept-completion)
-            (define-key tabnine-completion-map (kbd "<tab>") #'tabnine-accept-completion)
-
-            (define-key tabnine-completion-map (kbd "M-f") #'tabnine-accept-completion-by-word)
-            (define-key tabnine-completion-map (kbd "M-<return>") #'tabnine-accept-completion-by-line)
-            (define-key tabnine-completion-map (kbd "C-e") #'tabnine-accept-completion-by-line)
-            (define-key tabnine-completion-map (kbd "<right>") #'tabnine-accept-completion-by-line)
-
-            (define-key tabnine-completion-map (kbd "C-g") #'tabnine-clear-overlay)
-            (define-key tabnine-completion-map (kbd "M-[") #'tabnine-next-completion)
-            (define-key tabnine-completion-map (kbd "M-]") #'tabnine-previous-completion))
-  :init (progn
-          (advice-add 'tabnine-start-process :around #'quiet)
-
-          (add-hook 'kill-emacs-hook #'tabnine-kill-process)))
-
 (use-package tempel
   :general ("M-+" #'tempel-complete ;; Alternative tempel-expand
             "M-*" #'tempel-insert
@@ -675,11 +656,17 @@ _C-k_: prev  _u_pper              _=_: upper/lower       _s_mart resolve
             (add-to-list 'tramp-default-proxies-alist
                          `(,(regexp-quote (system-name)) nil nil))))
 
+(use-package ssh-deploy
+  :config (progn
+            (ssh-deploy-line-mode +1)
+            (ssh-deploy-add-find-file-hook)
+            (ssh-deploy-add-after-save-hook)))
+
 ;;; Directories
 
 (setq dired-dwim-target t
       dired-recursive-copies 'top
-      dired-listing-switches "-alh --group-directories-first"
+      dired-listing-switches "-alh"
       dired-kill-when-opening-new-dired-buffer t
       dired-recursive-deletes (if delete-by-moving-to-trash
                                   'always
@@ -791,6 +778,7 @@ _C-k_: prev  _u_pper              _=_: upper/lower       _s_mart resolve
 
 (setq-default go-ts-mode-indent-offset 2)
 (use-package templ-ts-mode
+  :gfhook #'eglot-format-before-save-mode
   :defer t
   :config (progn
             (setq-default go-ts-mode-indent-offset 2)))
@@ -817,7 +805,7 @@ _C-k_: prev  _u_pper              _=_: upper/lower       _s_mart resolve
 (add-hook 'compilation-filter-hook #'colourise-compilation-buffer)
 
 ;;;; shell
-(general-add-hook 'sh-mode-hook
+(general-add-hook '(sh-mode-hook bash-ts-mode-hook fish-mode-hook)
                   (lambda ()
                     (general-add-hook 'after-save-hook
                                       #'executable-make-buffer-file-executable-if-script-p :append :local)))
@@ -986,13 +974,21 @@ _C-k_: prev  _u_pper              _=_: upper/lower       _s_mart resolve
   :config (progn
             (treemacs-load-theme "simple")))
 
+(defun ap/consult-ghq-switch-project (dir)
+  "Append a slash to avoid project.el remembering two different
+paths for the same project."
+  (interactive)
+  (project-switch-project (if (string-suffix-p "/" dir)
+                              dir
+                            (concat dir "/"))))
 (use-package consult-ghq
   :defer 5
   :general (:keymaps 'project-prefix-map
                      "o" #'consult-ghq-switch-project)
   :config (progn
             (setq consult-ghq-grep-function #'consult-grep
-                  consult-ghq-find-function #'consult-find)))
+                  consult-ghq-find-function #'consult-find
+                  consult-ghq-switch-project-function #'ap/consult-ghq-switch-project)))
 
 (use-package envrc
   :defer 2
@@ -1093,6 +1089,13 @@ _C-k_: prev  _u_pper              _=_: upper/lower       _s_mart resolve
   :commands (consult-lsp-symbols
              consult-lsp-diagnostics))
 
+(define-minor-mode eglot-format-before-save-mode
+  "Whether to ask the LSP to format the buffer before saving"
+  :init-val nil
+  (if eglot-format-before-save-mode
+      (add-hook 'before-save-hook #'eglot-format-buffer nil 'local)
+    (remove-hook 'before-save-hook #'eglot-format-buffer 'local)))
+
 (use-package eglot
   :defer 3
   :general (:states 'normal :keymaps 'eglot-mode-map
@@ -1107,6 +1110,7 @@ _C-k_: prev  _u_pper              _=_: upper/lower       _s_mart resolve
             nim-mode-hook
             html-mode-hook
             nix-mode-hook
+            templ-ts-mode-hook
             toml-ts-mode-hook
             haskell-mode-hook)
           #'eglot-ensure)
@@ -1197,16 +1201,12 @@ _C-k_: prev  _u_pper              _=_: upper/lower       _s_mart resolve
       (call-interactively #'consult-lsp-symbols)
     (call-interactively #'consult-eglot-symbols)))
 
-;; Inside a javascript project, it's common to install tools locally to
-;; the project.  This will allows emacs to find their executables.
-
-(use-package add-node-modules-path
-  :config (setq add-node-modules-max-depth 6)
-  :ghook ('(feature-mode-hook
-            js-base-mode-hook
-            json-ts-mode-hook
-            typescript-ts-mode-hook)
-          #'add-node-modules-path))
+(defun my/ls-code-actions ()
+  (interactive)
+  (call-interactively
+   (if lsp-mode
+       #'lsp-execute-code-action
+     #'eglot-code-actions)))
 
 ;;;; Reformat on save
 
@@ -1261,6 +1261,7 @@ _C-k_: prev  _u_pper              _=_: upper/lower       _s_mart resolve
   "s" #'treemacs-select-window
   "u" #'universal-argument
   ";" #'execute-extended-command
+  "a" #'my/ls-code-actions
   "bb" #'consult-buffer
   "bx" #'kill-this-buffer
   "br" #'revert-buffer
@@ -1287,7 +1288,8 @@ _C-k_: prev  _u_pper              _=_: upper/lower       _s_mart resolve
   "iu" #'insert-char
   "xe" #'eval-last-sexp
   "xx" #'eval-defun
-  "xi" #'consult-imenu)
+  "xi" #'consult-imenu
+  "z" '(:keymap ssh-deploy-prefix-map :package ssh-deploy))
 
 (let ((mail-config (expand-file-name "mail.el" user-emacs-directory)))
   (if (file-readable-p mail-config)
diff --git a/user/mba.nix b/user/mba.nix
index 06488688..890cda69 100644
--- a/user/mba.nix
+++ b/user/mba.nix
@@ -4,7 +4,6 @@
     ./settings/development/base.nix
     ./settings/development/javascript.nix
     ./settings/development/golang.nix
-    ./settings/development/lisp.nix
     ./settings/development/web.nix
     ./settings/darwin.nix
     ./settings/emacs.nix
@@ -13,7 +12,6 @@
     ./settings/kitty.nix
     ./settings/nixpkgs.nix
     ./settings/ssh.nix
-    ./settings/tabnine.nix
     ./settings/user-interface.nix
     <private>
     <private/ssh.nix>
diff --git a/user/modules/tabnine.nix b/user/modules/tabnine.nix
deleted file mode 100644
index 3eee4834..00000000
--- a/user/modules/tabnine.nix
+++ /dev/null
@@ -1,94 +0,0 @@
-{ config
-, lib
-, pkgs
-, ...
-}:
-with lib; let
-  inherit (pkgs) stdenv;
-  tomlFormat = pkgs.formats.toml { };
-  cfg = config.programs.tabnine;
-  lspConfigFile = config:
-    pkgs.runCommand "TabNine.toml"
-      {
-        buildInputs = [ pkgs.remarshal ];
-        preferLocalBuild = true;
-        allowSubstitutes = false;
-      }
-      ''
-        remarshal -if json -of toml \
-        < ${pkgs.writeText "config.json" (builtins.toJSON cfg.lspConfig)} \
-        | sed  -e 's/^\["\(.*\)"\]/[\1]/' \
-        > $out
-      '';
-in
-{
-  options.programs.tabnine = {
-    enable = mkEnableOption "TabNine, Smart Compose for code.";
-
-    configDir = mkOption {
-      type = types.str;
-      default =
-        if stdenv.isDarwin
-        then "Library/Preferences/TabNine"
-        else "${config.xdg.configHome}/TabNine";
-      description = ''
-        Location of TabNine configuration directory relative to \$HOME
-      '';
-    };
-
-    config = mkOption {
-      type = types.attrs;
-      default = { };
-      description = ''
-        TabNine configuration written to
-        <filename>\${configDir}/tabnine_config.json</filename>
-      '';
-    };
-
-    registrationKey = mkOption {
-      type = types.str;
-      description = ''
-        Registration key for TabNine.  For one-time-purchase users, this should be the e-mail address and base-64-encoded key joined together without spacing.
-      '';
-    };
-
-    lspConfig = mkOption {
-      type = tomlFormat.type;
-      default = { };
-      description = ''
-        LSP Server configuration written to
-        <filename>\${configDir}/TabNine.toml</filename>
-        </para><para>
-      '';
-    };
-  };
-
-  config = mkIf cfg.enable {
-    home.file."${cfg.configDir}/TabNine.toml" = {
-      source = (tomlFormat.generate "TabNine.toml" cfg.lspConfig);
-    };
-    home.file."${cfg.configDir}/tabnine_config.json" = {
-      source = pkgs.writeText "tabnine_config.json" (builtins.toJSON cfg.config);
-    };
-    home.file."${cfg.configDir}/registration_key" = {
-      text = cfg.registrationKey;
-    };
-
-    programs.neovim.plugins = [
-      pkgs.vimPlugins.coc-tabnine
-    ];
-    programs.neovim.coc.settings = {
-      "tabnine.binary_path" = "${pkgs.tabnine}/bin/TabNine";
-    };
-
-    programs.emacs.extraPackages = epkgs: [
-      epkgs.tabnine
-    ];
-    programs.emacs.extraConfig = ''
-      (defun my/override-tabnine-exe-path (&rest args)
-        "${pkgs.tabnine}/bin/TabNine")
-      (with-eval-after-load 'tabnine
-        (advice-add 'tabnine--executable-path :override #'my/override-tabnine-exe-path))
-    '';
-  };
-}
diff --git a/user/nanopi.nix b/user/nanopi.nix
index 44561eda..f2dfceac 100644
--- a/user/nanopi.nix
+++ b/user/nanopi.nix
@@ -7,7 +7,6 @@
     ./settings/git.nix
     ./settings/nix.nix
     ./settings/nixos.nix
-    ./settings/music-management.nix
     ./settings/ssh.nix
   ];
   home = {
diff --git a/user/prefect.nix b/user/prefect.nix
index ed8b77cf..0a957d64 100644
--- a/user/prefect.nix
+++ b/user/prefect.nix
@@ -7,7 +7,6 @@
     ./settings/dunst.nix
     ./settings/emacs.nix
     ./settings/development/base.nix
-    ./settings/development/lisp.nix
     ./settings/development/golang.nix
     ./settings/development/javascript.nix
     ./settings/development/web.nix
@@ -18,7 +17,6 @@
     ./settings/nixos.nix
     ./settings/passwords.nix
     ./settings/ssh.nix
-    ./settings/tabnine.nix
     ./settings/user-interface.nix
     ./settings/xresources.nix
     <private>
diff --git a/user/settings/base.nix b/user/settings/base.nix
index 52cb14ac..5c5d6012 100644
--- a/user/settings/base.nix
+++ b/user/settings/base.nix
@@ -65,10 +65,7 @@ args@{ config
   programs.bat = {
     enable = true;
     extraPackages = with pkgs.bat-extras; [
-      batdiff
       batman
-      batgrep
-      batpipe
     ];
     config = {
       theme = "ansi";
diff --git a/user/settings/darwin.nix b/user/settings/darwin.nix
index acb0697b..e894bebd 100644
--- a/user/settings/darwin.nix
+++ b/user/settings/darwin.nix
@@ -16,10 +16,6 @@
 
   home.file.".hushlogin".text = "";
 
-  services.syncthing = {
-    enable = true;
-  };
-
   launchd.agents = {
     home-manager-expire-generations = {
       enable = true;
diff --git a/user/settings/development/base.nix b/user/settings/development/base.nix
index 669b4786..83af68ae 100644
--- a/user/settings/development/base.nix
+++ b/user/settings/development/base.nix
@@ -3,14 +3,12 @@
 , ...
 }:
 {
-  imports = [ ../../modules/tabnine.nix ];
   home.packages = with pkgs;
     [
       shellcheck
       shfmt
-      nodePackages.dockerfile-language-server-nodejs
-      nodePackages.vscode-json-languageserver
-      nodePackages.yaml-language-server
+      dockerfile-language-server-nodejs
+      yaml-language-server
       lua-language-server
       taplo # toml
 
@@ -27,7 +25,6 @@
       miller
       watchexec
       entr
-      httping
 
       diffoscopeMinimal
 
@@ -39,7 +36,7 @@
       colima
       docker-client
     ] else [
-      zeal
+      httping
     ]);
 
   home.sessionVariables = {
@@ -89,6 +86,7 @@
     config = {
       global = {
         disable_stdin = true;
+        load_dotenv = true;
         strict_env = true;
         hide_env_diff = true;
       };
diff --git a/user/settings/development/golang.nix b/user/settings/development/golang.nix
index a9293a31..7fe5ad1e 100644
--- a/user/settings/development/golang.nix
+++ b/user/settings/development/golang.nix
@@ -12,6 +12,10 @@
     golangci-lint-langserver
     personal.prettier-plugin-go-template
   ];
+  home.sessionPath = [
+    "$HOME/go/bin"
+  ];
+  home.sessionVariables.GOTOOLCHAIN = "local"; # use installed go tools
   programs.emacs.extraPackages = epkgs: (with epkgs; [
     go-eldoc
     go-tag
@@ -20,4 +24,8 @@
   programs.neovim.plugins = with pkgs.vimPlugins; [
     coc-go
   ];
+  programs.fish.shellAbbrs = {
+    gmt = "go mod tidy";
+    gmd = "go mod download";
+  };
 }
diff --git a/user/settings/development/javascript.nix b/user/settings/development/javascript.nix
index 4d196cb4..fa418cc1 100644
--- a/user/settings/development/javascript.nix
+++ b/user/settings/development/javascript.nix
@@ -23,10 +23,6 @@
     };
   };
 
-  programs.emacs.extraPackages = epkgs: (with epkgs; [
-    add-node-modules-path
-  ]);
-
   home.shellAliases = {
     bn = "bun";
     bni = "bun install";
diff --git a/user/settings/development/web.nix b/user/settings/development/web.nix
index e5c5ebb7..e4d9d02c 100644
--- a/user/settings/development/web.nix
+++ b/user/settings/development/web.nix
@@ -4,8 +4,7 @@
 , ...
 }: {
   home.packages = with pkgs.nodePackages; [
-    vscode-css-languageserver-bin
-    vscode-html-languageserver-bin
+    vscode-langservers-extracted
     csslint
     stylelint
   ] ++ (with pkgs; [
@@ -34,6 +33,67 @@
       de-de
     ];
   };
+  programs.firefox = {
+    enable = pkgs.stdenv.isLinux;
+    package = pkgs.firefox-devedition;
+    profiles.dev-edition-default = {
+      search.default = "DuckDuckGo";
+      extensions = with pkgs.nur.repos.rycee.firefox-addons; [
+        a11ycss
+        disable-javascript
+        laboratory-by-mozilla
+        side-view
+        ublock-origin
+      ];
+      settings = {
+        "browser.aboutConfig.showWarning" = false;
+        "browser.theme.content-theme" = 1;
+        "browser.theme.toolbar-theme" = 1;
+        "browser.tabs.firefox-view" = false;
+        "extensions.activeThemeID" = "firefox-compact-light@mozilla.org";
+      };
+    };
+    policies = {
+      AutoFillCreditCardEnabled = false;
+      CaptivePortal = false;
+      Cookies = {
+        Behavior = "reject-foreign";
+      };
+      SanitizeOnShutdown = {
+        Cache = true;
+        Cookies = true;
+        FormData = true;
+      };
+      DisableFirefoxAccounts = true;
+      DisableFirefoxScreenShots = true;
+      DisableFirefoxStudies = true;
+      DisableMasterPasswordCreation = true;
+      DisablePasswordReveal = true;
+      DisablePocket = true;
+      DisableTelemetry = true;
+      DNSOverHTTPS.Enabled = false;
+      DontCheckDefaultBrowser = true;
+      EnableTrackingProtection = true;
+      GoToIntranetSiteForSingleWordEntryInAddressBar = true;
+      Homepage.URL = "http://localhost:7331";
+      NewTabPage = false;
+      NoDefaultBookmarks = true;
+      OfferToSaveLogins = false;
+      OverrideFirstRunPage = "";
+      OverridePostUpdatePage = "";
+      PasswordManagerEnabled = false;
+      PrintingEnabled = false;
+      SearchBar = "separate";
+      ShowHomeButton = true;
+      UserMessaging = {
+        ExtensionRecommendations = false;
+        FeatureRecommendations = false;
+        UrlbarInterventions = false;
+        SkipOnboarding = true;
+        MoreFromMozilla = false;
+      };
+    };
+  };
   programs.emacs.extraPackages = epkgs: (with epkgs; [
     caddyfile-mode
     emmet-mode
diff --git a/user/settings/emacs.nix b/user/settings/emacs.nix
index 7f681bd1..cc9deab6 100644
--- a/user/settings/emacs.nix
+++ b/user/settings/emacs.nix
@@ -144,6 +144,7 @@ in
         quickrun
         rainbow-mode
         rainbow-delimiters
+        ssh-deploy
         stimmung-themes
         systemd
         tempel
diff --git a/user/settings/git.nix b/user/settings/git.nix
index 4726120c..646a10c2 100644
--- a/user/settings/git.nix
+++ b/user/settings/git.nix
@@ -19,6 +19,8 @@
       };
       advice = {
         addEmptyPathspec = false;
+        detachedHead = false;
+        mergeConflict = false;
       };
       ghq = {
         root = "${config.home.homeDirectory}/projects";
@@ -30,21 +32,27 @@
       pull = {
         rebase = true;
       };
+      fetch = {
+        prune = true;
+        prunetags = true;
+      };
       push = {
         default = "current";
+        autoSetupRemote = true;
         followTags = true;
       };
       rebase = {
         autosquash = true;
+        updateRefs = true;
       };
       rerere = {
-        enable = true;
+        enabled = true;
       };
       merge = {
         conflictStyle = "diff3";
       };
       diff = {
-        algorithm = "patience";
+        algorithm = "histogram";
         colorMoved = "default";
       };
       remote = {
@@ -56,6 +64,7 @@
       "branch.main" = {
         rebase = false;
       };
+      "url.git@github.com:".insteadOf = "https://github.com/";
     };
     signing = {
       key = "0xCD4BEB92A8D46583";
@@ -89,7 +98,6 @@
       "*~"
       "\#*\#"
       ".\#*"
-      ".tabnine_root"
     ];
   };
   programs.gh = {
diff --git a/user/settings/nix.nix b/user/settings/nix.nix
index b3109c08..66c00daf 100644
--- a/user/settings/nix.nix
+++ b/user/settings/nix.nix
@@ -18,6 +18,7 @@ in
   };
 
   home.packages = with pkgs; [
+    cached-nix-shell
     nil
     npins
     nix-prefetch-scripts
@@ -29,7 +30,6 @@ in
     nixpkgs-lint
     nixpkgs-review
     nix-output-monitor
-    cachix
   ];
   xdg.configFile."nix-init/config.toml".source = toml.generate "config.toml" {
     maintainers = [ "alanpearce" ];
diff --git a/user/settings/nixos.nix b/user/settings/nixos.nix
index 05b87333..85ea7f72 100644
--- a/user/settings/nixos.nix
+++ b/user/settings/nixos.nix
@@ -6,8 +6,8 @@
 
   home.shellAliases = {
     srb = "nixos-rebuild";
-    rbs = "nixos-rebuild switch";
-    rbb = "nixos-rebuild boot";
+    rbs = "nixos-rebuild switch --fast";
+    rbb = "nixos-rebuild boot --fast";
     rbr = "nixos-rebuild switch --rollback";
   };
 }
diff --git a/user/settings/shell.nix b/user/settings/shell.nix
index 170f543f..fe2b4690 100644
--- a/user/settings/shell.nix
+++ b/user/settings/shell.nix
@@ -148,6 +148,7 @@ in
     };
   };
   home.packages = with pkgs; [
+    babashka
     fzf
     up
   ];
diff --git a/user/settings/tabnine.nix b/user/settings/tabnine.nix
deleted file mode 100644
index 9502c68d..00000000
--- a/user/settings/tabnine.nix
+++ /dev/null
@@ -1,124 +0,0 @@
-{ config
-, pkgs
-, ...
-}: {
-  home.packages = with pkgs; [
-    tabnine
-  ];
-  programs.tabnine = {
-    enable = pkgs.lib.mkDefault true;
-    config = {
-      version = pkgs.tabnine.version;
-
-      api_base_url = null;
-      api_key = config.programs.tabnine.registrationKey;
-      beta_enabled = "No";
-      binary_update_interval_seconds = 365 * 24 * 3600;
-      cloud_whitelist = [ ];
-      creation_time = "2020-12-28T21:42:35.732522096Z";
-      deep_completions_work_mode = "LocalOnly";
-      disable_auto_update = true;
-      disable_local_when_using_battery = false;
-      enable_power_saving_mode = false;
-      enable_telemetry = false;
-      exclude_file_masks = true;
-      force_local_hub = true;
-      generation = 0;
-      guuid = null;
-      gusr.gcgdc = "0000000000000000000000000000000000000000000000000000000000000000";
-      has_git_repos = null;
-      heartbeat_interval_seconds = null;
-      hide_deep_information_message = false;
-      hide_promotional_message = true;
-      hosted_deep_completions_enabled = "Disabled";
-      ignore_all_lsp = false;
-      inline_suggestions_mode = true;
-      inline_suggestions_mode_clients = null;
-      last_service_level = null;
-      line_suggestions = true;
-      local_enabled = "Yes";
-      local_indexing = null;
-      local_model_size = null;
-      manually_selected_model = null;
-      model_hash_override = null;
-      num_of_suggestions = 5;
-      omit_prefix_suggestions = null;
-      onboarding = {
-        model_type = null;
-        skipped_login = true;
-        completed = true;
-      };
-      rate_limit_amount = null;
-      rate_limit_interval_seconds = null;
-      rlhf = null;
-      semantic_status = {
-        css = "Enabled";
-        dockerfile = "Enabled";
-        go = "Enabled";
-        haskell = "Enabled";
-        html = "Enabled";
-        javascript = "Enabled";
-        nix = "Enabled";
-        ruby = "Enabled";
-        scss = "Enabled";
-        typescript = "Enabled";
-        yaml = "Enabled";
-      };
-      snippets_enabled_v2 = true;
-      tabnine_cloud_certificate_domain = null;
-      tabnine_cloud_host = null;
-      tabnine_cloud_port = null;
-      tabnine_hub_port = null;
-      use_specialized_model_if_available = true;
-      user_understands_that_enabling_tabnine_cloud_sends_code_to_tabnine_servers = false;
-    };
-    lspConfig.language = {
-      typescript = {
-        command = "typescript-language-server";
-        args = [ "--stdio" ];
-      };
-      javascript = {
-        command = "javascript-typescript-stdio";
-        args = [ "--stdio" ];
-      };
-      css = {
-        command = "css-languageserver";
-        args = [ "--stdio" ];
-      };
-      scss = {
-        command = "css-languageserver";
-        args = [ "--stdio" ];
-      };
-      html = {
-        command = "html-languageserver";
-        args = [ "--stdio" ];
-      };
-      nix = {
-        command = "nil";
-        args = [ "--stdio" ];
-      };
-      dockerfile = {
-        command = "docker-langserver";
-        args = [ "--stdio" ];
-      };
-      ruby = {
-        command = "solargraph";
-        args = [ "stdio" ];
-      };
-      yaml = {
-        command = "yaml-language-server";
-        args = [ "--stdio" ];
-      };
-      haskell = {
-        command = "hie";
-        args = [ "--stdio" ];
-      };
-      go = {
-        command = "gopls";
-        args = [
-          "serve"
-        ];
-      };
-    };
-  };
-}
diff --git a/user/settings/user-interface.nix b/user/settings/user-interface.nix
index 13264e11..29de4439 100644
--- a/user/settings/user-interface.nix
+++ b/user/settings/user-interface.nix
@@ -44,11 +44,11 @@ in
       })
     ]
     ++ lib.optionals (!stdenv.isDarwin) (with pkgs; [
-      logseq
+      logseq # 0.10.9 is insecure, see ../config.nix
       (discord.override { withOpenASAR = true; })
 
+      zeal
       falkon
-      mu
       beeper
       kdePackages.neochat
       kdePackages.kleopatra